Se avete un dispositivo Sonoff flashato con il firmware Tasmota, vi sarà probabilmente capitato di notare un comportamento anomalo dopo una riconnessione alla rete Wi-Fi o al server MQTT. Nel mio caso, il Sonoff collegato alla stampante 3D si accendeva ad ogni perdita e riacquisizione della connessione.
Per risolvere il problema bisogna prima capirne la causa.
La causa: il RETAIN di MQTT
Il problema è quasi sempre causato dal RETAIN, un’opzione configurabile sui topic MQTT che permette al broker di memorizzare l’ultimo stato di un topic e di reinviarlo al device nel momento in cui si riconnette. Probabilmente durante le prime configurazioni di prova è stato attivato un topic che è rimasto memorizzato nel broker.
Se vogliamo che alla riconnessione del Sonoff non venga eseguita nessuna operazione (cioè che il dispositivo mantenga lo stato attuale), è necessario:
- Impostare
retain: falsenella configurazione - Cancellare i topic retain già memorizzati nel broker MQTT
Vediamo come fare in entrambi i casi: via terminale (per chi ha Hassbian + Mosquitto) e via client grafico (per chi ha HASSIO con MQTT embedded).
Metodo 1 – Via terminale (Hassbian + Mosquitto)
Passo 1 – Imposta retain: false su Home Assistant
Per prima cosa riconfigura gli switch MQTT su Home Assistant impostando retain: false.
[IMMAGINE – Screenshot configurazione retain: false in Home Assistant]
Passo 2 – Visualizza i topic attivi
Accedi via terminale al Raspberry e digita il comando seguente per visualizzare tutti i topic Tasmota attivi:
| |
Il risultato sarà qualcosa di simile a questo:
[IMMAGINE – Screenshot output mosquitto_sub con topic attivi]
Il topic da eliminare è quello che inizia per cmnd, ovvero il comando che arriva da Home Assistant per accendere/spegnere il dispositivo.
Passo 3 – Cancella il topic incriminato
Una volta trovato il topic, puoi cancellarlo inviando un payload vuoto con questo comando:
| |
Le opzioni del comando:
-r— assegna il RETAIN al topic-n— passa un payloadnull(vuoto)-u— nome utente di Mosquitto-P— password di Mosquitto
Se non hai impostato utente e password in Mosquitto, puoi omettere
-ue-P.
Passo 4 – Verifica
Ripeti il comando di sottoscrizione per verificare che il topic cmnd non sia più presente:
| |
[IMMAGINE – Screenshot output mosquitto_sub senza topic cmnd]
Se provi ora a far perdere la connessione al Sonoff, alla riconnessione non verrà eseguita nessuna operazione.
Metodo 2 – Via MQTT Lens (HASSIO con MQTT embedded)
Chi ha HASSIO con il broker MQTT embedded e non ha accesso al terminale del Raspberry non può usare i comandi di Mosquitto. In questo caso è possibile cancellare i topic tramite un client MQTT grafico.
Io ho usato MQTT Lens, un’app per Chrome disponibile sul Chrome Web Store.
Passo 1 – Configura la connessione
Installa MQTT Lens, clicca sul “+” accanto a CONNECTIONS e configura la connessione al tuo broker MQTT.
[IMMAGINE – Screenshot configurazione connessione in MQTT Lens]
Passo 2 – Sottoscrivi il topic cmnd/#
Effettua la sottoscrizione al topic cmnd/#.
[IMMAGINE – Screenshot sottoscrizione topic cmnd/# in MQTT Lens]
In basso verranno visualizzati tutti i topic cmnd attivi nel tuo broker MQTT.
[IMMAGINE – Screenshot lista topic cmnd attivi]
Passo 3 – Cancella i topic
Cancellali uno per uno inviando un payload vuoto (null) e selezionando la casella retain.
[IMMAGINE – Screenshot invio payload null con retain selezionato]
Passo 4 – Verifica
Ripeti la sottoscrizione al topic cmnd/#. I topic cancellati non dovrebbero più comparire.
[IMMAGINE – Screenshot verifica topic rimossi]
Conclusioni
I topic cmnd/# memorizzati con il RETAIN attivo vengono richiamati ad ogni riconnessione del Tasmota, causando operazioni indesiderate. Cancellarli e impostare retain: false risolve definitivamente il problema.
Se usi altri software come Node-RED o dashboard MQTT per inviare comandi al Sonoff, assicurati che anche lì il retain sia impostato su false.
Hai trovato utile questa guida? Condividila con altri appassionati di domotica! 🚀
