Progetto Home Automation: Controlliamo i nostri apparecchi a radiofrequenza con Sonoff RF Bridge e Home Assistant


Questa guida vuole essere un avanzamento della guida sui Sonoff Basics fatta in precedenza. In questa guida però vedremo come configurare dei Sonoff RF Bridge a 433Mhz per controllare dei dispositivi a radiofrequenza. Il mio bisogno particolare è controllare una tenda, in modo da poterla alzare ed abbassare da remoto, o automaticamente la sera quando il sole tramonta. I processi descritti in questa guida saranno:

  • Installazione del firmware Tasmota sul Sonoff
  • Collegamento del Sonoff ad HomeAssistant tramite MQTT
  • Registrazione dei comandi RF e configurazione

Vediamo come fare!

Configuriamo il Sonoff con Tasmota

Come già preannunciato, siccome i device Sonoff sono fatti per essere controllati dalla propria app tramite un servizio cloud per poterli controllare da HomeAssistant in locale via MQTT bisogna installare un firmware specifico: Tasmota.

A differenza della guida precedente, questa volta per installare Tasmota su un Sonoff ho deciso di utilizzare un tool scritto in python: Tasmotizer.

Per quanto riguarda il collegamento hardware per interfacciarci col computer vi rimando alla documentazione ufficiale Tasmota per il Sonoff RF Bridge 433Mhz.

Per installare Tasmotizer riferitevi alla pagina principale del tool.

Nel mio caso, usando ArchLinux, ho utilizzato pip:

$ pip3 install --upgrade pip wheel
$ pip3 install tasmotizer

Una volta collegato il vostro dispositivo correttamente al PC (ricordatevi di premere il tasto reset quando il Sonoff si avvia, così da entrare in flash mode) avviate Tasmotizer. Nel mio caso:

# python3 .local/lib/python3.9/site-packages/tasmotizer.py

Ora bisogna scaricare il file tasmota.bin dalla pagina di download delle release di Tasmota e aprirlo su Tasmotizer.
Cliccate su Tasmotize! ed il gioco è fatto.
Una volta riavviato il device (senza premere il tasto reset per metterlo in flash mode questa volta) cliccate su Send config per configurare MQTT e il wifi. Al prossimo riavvio dovreste averlo raggiungibile online. Semplice no?

NOTA: ricordatevi che inizialmente il firmware crederà di essere su un sonoff basic, per cambiaro dovrete collegarvi via interfaccia web ed andare su Configuration->Configure Module e selezionare Sonoff Bridge (25).

Visto che siamo in vena di modifiche il solo firmware Tasmota utilizzato coi driver di default non permette l’invio dei codici RF RAW. Per fare questo bisogna installare i driver conosciuti come Portisch. Per fare questo vi rimando a questa ottima guida su indomus.it che spiega la procedura nel dettaglio. Questo passaggio è facoltativo, e dipende dai comandi del vostro apparecchio, ma permette di sfruttare a pieno il nostro Sonoff Bridge modificato! Nota: io per farlo ho dovuto alimentare il dispositivo coi cavetti su GND e V3.3 e non da USB.

Registriamo i comandi sul Sonoff

Adesso è arrivato il momento di registrare i comandi del dispositivo che vogliamo controllare al nostro Sonoff.

Per farlo io mi sono collegato al server dove risiede il server MQTT e ho lanciato il comando necessario alla registrazione del codice RF:

$ mosquitto_pub -h localhost -p 1883 -t "home/sonoff/command/NomeDispositivo/RfKey1" -m "2"

Dove:

  • home/sonoff/command/NomeDispositivo/: rappresenta il path dei comandi MQTT definito nella configurazione del vostro dispositivo. Nel mio caso il path è definito così: home/sonoff/%prefix%/%topic%/
  • RfKey1: rappresenta la key da memorizzare (in questo caso 1, ma si può selezionare qualsiasi numero da 1 a 16)
  • -h localhost: ‘indirizzo del server MQTT (nel mio caso il comando viene mandato direttamente dal pc dove c’è il server
  • -p 1883: la porta a cui connettersi nel server
  • -m “2”: rappresenta il comando di “registrazione codice”

Cliccando sul comando che volete registrare se questo è compatibile col Sonoff verrà memorizzato sulla key impostata da voi.

Per avviare il comando appena registrato vi basterà pubblicare un messaggio nullo sul topic col comando:
$ mosquitto_pub -h localhost -p 1883 -t "home/sonoff/command/NomeDispositivo/RfKey1" -n

Ovviamente nel mio caso questo metodo non funziona perchè i codici utilizzati dal trasmettitore non sono supportati dai driver originali. Quindi avendo installato i driver Portish ho dovuto provvedere a registrare i comandi RAW. Tutta la procedura è spiegata molto bene sulla pagina della wiki di Tasmota.

Per questi comandi esistono due tipi di codici: B1 e B0. I B1 sono i codici catturati dal dispositivo, mentre i B0 sono quelli convertiti che dovremmo inviare per comandare i nostri dispositivi RF.

Vediamo instanto come registrare i codici B1.

Collegatevi al dispositivo Sonoff da WebUI, andate su Console e digitate:

rfraw 177

Subito dovreste vedere pubblicato sulla console un messaggio del tipo:

MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AAA055"}}

Questo vuol dire che è iniziato lo sniffing dei pacchetti. Ora tenete premuto ripetutamente il bottone del telecomando dal quale vorrete catturare i codici (o nel caso di un sensore attivatelo) in modo da registrare più codici (e poter selezionare quello migliore) e dovreste vedere sulla console un output simile a questo:

MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 04 07F0 0128 00F2 3822 010101010101101001010101101010100103 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F9 0124 37DC 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F9 0124 37DC 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F4 0126 37D2 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F5 0127 37D2 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F7 0125 37DC 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F9 0125 37D2 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F4 0123 37C8 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F9 0124 37D2 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07FC 011E 37D2 010101010101101001010101101010100102 55"}} 
MQT: tele/sonoffRFbridge/RESULT = {"RfRaw":{"Data":"AA B1 03 07F8 0125 37D2 010101010101101001010101101010100102 55"}} 

Come potete notare tutti i codici cominciano con “AA B1” e finiscono con “55”.
Perchè ne abbiamo catturati così tanti? Perchè tra questi ce ne sono alcuni di uguali e altri di diversi (dovuti magari ad interferenze). In questo caso un buon “candidato” potrebbe essere il pacchetto:

AA B1 03 07F7 0125 37DC 010101010101101001010101101010100102 55

Infatti più di qualche pacchetto ha come quinto blocco il “0125” oppure come sesto il “37DC”. Come si fa a capire se il codice preso è quello giusto? Beh provando a vedere se si riesce a comandare il nostro apparecchio da Sonoff (o leggere correttamente il sensore!).

Per comandare il Sonoff bisogna inviargli il codice via MQTT. Tuttavia il codice appena “catturato” non va bene per questo scopo (è il codice B1 di cui parlavo prima) ma va convertito in un codice chiamato B0. Per farlo vi basta usare questo convertitore. Una volta ottenuta la stringa successiva bisogna inviarla al sonoff via MQTT nel topic giusto. Il payload del messaggio in questo caso deve contenere il codice B0 ed essere simile al seguente:

home/sonoff/command/NomeDispositivo/Backlog RfRaw AAB0210314016703F924180101011001100110010101100110011001010110010101100255; RfRaw 0

Dove “AAB0210314016703F924180101011001100110010101100110011001010110010101100255” è il codice B0 trovato dal convertitore.

Se il codice è esatto dovreste vedere il vostro attuatore muoversi, nel caso contrario provate con un altro codice finchè sarete fortunati!

Ora però viene la parte divertente….. dopo numerosi e fallimentari tentativi di muovere la tenda (che è lo scopo principale per cui ho iniziato questa guida) inizio a chiedermi se non sbagliassi qualcosa. Il motore che usa la tenda è dell’infrastruttura Somfy, e googlando un pochino ho scoperto che l’unico modo per metterlo in rete è usando il suo gateway proprietario e costoso. Ovviamente.

Ok lo so, molti di voi si staranno chiedendo: “Ma perchè non hai controllato prima?”, Beh un po’ perchè era una cosa che avevo a casa e non mi son posto il problema di cosa fosse (sapevo che era a radiofrequenza), un po’ perchè non pensavo che avesse un protocollo proprietario sto coso (e anche una frequenza leggermente diversa di lavoro, quindi doppio problema).

In ogni caso mi sto già attrezzando per un metodo alternativo per controllare le mie tende come voglio io aggirando il protocollo Somfy. L’unico problema… è avere il tempo necessario per risolvere questo problema! Ma appena ne avrò un pochino svilupperò questa soluzione che ovviamente condividerò con voi (l’idea mi è venuta guardando qua).

Aggiungiamo il Sonoff Bridge ad Home Assistant

Purtroppo questa parte della guida non l’ho potuta testare di persona e proseguire quindi non sarà molto dettagliata. Ma vi lascio con alcune idee:

L’idea che probabilmente avrei attuato sarebbe stata creare dei bottoni per ogni azione seguendo la relativa guida ufficiale. In questo caso sul topic verrebbe chiamato il servizio MQTT che invierebbe il pacchetto necessario (che dipende se usate codici RAW oppure quelli supportati nativamente dal Sonoff).

Se invece siete solamente interessati a leggere dei sensori vi rimando a questa guida molto completa (anche se di 2 anni fa).

Se avete altri consigli o idee.. fatemele sapere nei commenti! 😉

Questa voce è stata pubblicata in Arch Linux, Home automation e contrassegnata con , , , , , , , , , , , , , , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...