Un termoigrometro Tuya senza cloud, con OpenBeken

I termoigrometri WiFi da pochi euro hanno uno schermo leggibile, una buona sonda e un difetto: per funzionare passano dal cloud del produttore e da un’app. Se internet cade, o se un giorno il servizio chiude, la misura resta sul display e non arriva più a nessuno. Molti di questi sensori hanno dentro un chip Beken, e su quel chip gira OpenBeken, un firmware libero che parla MQTT direttamente con la rete di casa. Questa guida racconta come l’abbiamo fatto su un Emylo H&T S09 per usarlo come sonda di stanza in ORFHAn, ma il procedimento vale per altri modelli simili.

Prima di comprare: che chip c’è dentro

“Tuya” è una piattaforma, non un chip. Dentro ai sensori ci sono moduli WiFi diversi: i vecchi con ESP8266, molti recenti con un Beken (BK7231T, BK7231N, BK7238), altri con chip di altri produttori. OpenBeken supporta i Beken e alcuni altri; la lista aggiornata è nella sua documentazione. Il modo più sicuro per saperlo è cercare il modello insieme a “OpenBeken” o guardare foto dell’interno: sul modulo c’è stampata la sigla.

L’S09 ha un BK7238. E come quasi tutti i termoigrometri Tuya, non legge la sonda con il chip WiFi: c’è un secondo microcontrollore, il TuyaMCU, che legge la sonda, comanda il display e passa i valori al modulo WiFi via seriale, sotto forma di datapoint (DP) numerati. Sull’S09 il DP 101 è la temperatura in decimi di grado e il 102 l’umidità in percento. È un dettaglio importante: dopo OpenBeken, il modulo WiFi deve sapere quali DP ascoltare.

Che cosa serve

1. Scrivere OpenBeken

Il sensore si apre e si individua il modulo WiFi, con le piazzole TX, RX e CEN. Da noi ha funzionato così:

  1. il sensore resta alimentato dalla sua presa USB;
  2. dell’adattatore si collegano solo TX e RX, incrociati con quelli del modulo Beken: il TX del modulo all’RX dell’adattatore e viceversa;
  3. quando il programma di scrittura chiede il riavvio del chip, si tocca per un attimo il piedino CEN del modulo (sull’S09 è il 3) con la massa dell’adattatore.

Se il sensore e l’adattatore non sono attaccati allo stesso computer, conviene unire anche le due masse. E se il programma lo permette, fai prima una copia del firmware originale: è l’unico modo di tornare indietro.

Scritto il firmware, il sensore riparte con OpenBeken e apre una sua rete WiFi per la prima configurazione. Ti colleghi con il telefono, gli dai nome e password della rete di casa, e da lì in poi la sua pagina si apre all’indirizzo che il router gli assegna.

2. Lo script di avvio: dire a OpenBeken dove sono le misure

Appena scritto, OpenBeken non sa che cosa sia l’oggetto in cui gira. Glielo si dice con lo script di avvio, nella sua pagina: Config, poi Startup command. Per l’S09 sono poche righe:

startDriver TuyaMCU
startDriver NTP

// temperatura: DP 101, in decimi di grado, nel canale 1
setChannelType 1 temperature_div10
linkTuyaMCUOutputToChannel 101 val 1

// umidità: DP 102, nel canale 2
setChannelType 2 Humidity
linkTuyaMCUOutputToChannel 102 val 2

La prima riga accende il dialogo con il TuyaMCU. Le altre collegano ogni DP a un canale di OpenBeken e dicono che cosa contiene e in che unità: temperature_div10 vuol dire “temperatura, da dividere per dieci”. Dopo il riavvio la pagina del sensore mostra temperatura e umidità.

Con un altro modello i numeri dei DP possono essere diversi. Un modo pratico per trovarli: accendi solo il driver TuyaMCU, guarda il log del sensore e scalda la sonda con le dita. Il DP che cambia è la temperatura; dal valore capisci se è in decimi o in centesimi, e scegli temperature, temperature_div10 o temperature_div100.

3. Le misure in MQTT

Nella pagina Config → MQTT si scrivono l’indirizzo del broker di casa, l’utente e la password. Da quel momento OpenBeken pubblica i suoi canali sul broker, e secondo la sua documentazione può anche annunciarli a Home Assistant con la discovery automatica. Questa parte, fatta a mano, non l’abbiamo provata: noi l’abbiamo fatta fare alla scheda di ORFHAn.

In ORFHAn il sensore si assegna a una stanza dalla pagina Dispositivi della scheda relè, come uno Shelly o un nodo ESPHome. La scheda legge lo script di avvio del sensore per capire in quale canale stanno la temperatura e l’umidità, gli scrive il broker e lo rilegge per controllare, aggiunge al suo file autoexec.bat un pezzo di script delimitato da due righe di commento e lo riavvia. Quel pezzo pubblica la temperatura su sensors/<stanza>/temperature e l’umidità su sensors/<stanza>/humidity: a ogni cambio e comunque una volta al minuto, così la scheda sa che il sensore è vivo anche quando la temperatura sta ferma. In sintesi:

alias orfhan_t publishFloat sensors/soggiorno/temperature $CH1*0.1 1 1
addEventHandler OnChannelChange 1 orfhan_t
addRepeatingEvent 60 -1 orfhan_t

Lo script vero aspetta anche il primo valore vero prima di pubblicare: all’accensione i canali valgono zero, e zero gradi in un soggiorno non sono una misura ma un sensore che non ha ancora letto la sonda. È un accorgimento utile a chiunque scriva i propri script: un valore finto all’avvio basta a far partire un’automazione sbagliata.

Che cosa si guadagna, e che cosa no

Che cosa è provato

Lo script per l’S09 e la procedura completa sono nel repository di ORFHAn.