Soluzione al problema del sonoff che si attiva alla connessione

By | 2019-01-04T16:53:30+00:00 2 Gennaio 2019|Categories: Home Assistant|Tags: , , , , , , , , , |7 Comments

Se avete un dispositivo sonoff e lo avete “flashato” con il firmware tasmota, vi sarà probabilmente capitato di avere un comportamento anomalo in caso di riconnessione alla rete wifi piuttosto che al server MQTT.

Per capire come risolvere il problema bisogna capire prima qual’è la causa.

La causa principale è il RETAIN, ovvero l’opzione configurabile per i topic di MQTT che permette di mantenere in memoria l’ultimo stato del topic e di richiamarlo nel momento in cui un device si riconnette, magari inseguito ad un riavvio. Probabilmente durante le prime configurazioni di prova è stato attivato il topic che poi è rimasto attivo all’interno del broker MQTT.

Se vogliamo che al momento della riconnessione del SONOFF, non venga effettuata nessuna operazione (quindi che il dispositivo mantenga lo stato attuale), è necessario configurare il retain: false ma è assolutamente necessario andare a cancellare i topic che sono memorizzati in MQTT.

Vediamo come fare, questo esempio si basa su un’installazione di HASSBIAN e MOSQUITTO ma su altre installazioni la logica è la stessa. Se avete HASSIO o non avete accesso al terminale del raspberry andate alla seconda parte dell’articolo per vedere come fare

Nel mio caso il sonoff con tasmota collegato alla stampante 3d si accendeva ad ogni perdita di connessione e riconnessione.

Per prima cosa bisogna riconfigurare gli switch MQTT su Home Assistant impostando retain: false.

Accedete via terminale al raspberry e digitate il comando seguente, server per visualizzare quali sono i topic attivi inerenti Tasmota.

sudo mosquitto_sub -t stat/# -t tele/# -t cmnd/# -v -u iltuoutente -P latuapassword

Il risultato sarà qualcosa di simile al seguente:

Il topic incriminato è quello che inizia per “cmnd” ovvero il comando che arriva da Home Assistant per accendere/spegnere il dispositivo.

Una volta trovato il topic incriminato potete cancellarlo semplicemente inviando un payload “vuoto” ovvero senza valori. Per farlo potete usare questo comando:

sudo mosquitto_pub -t cmnd/stampante3d/POWER -r -n -u iltuoutente -P latuapassword

Analizziamo il comando:

  • L’opzione -r server per assegnare il RETAIN al topic
  • L’opzione -n server per passare il payload null cioè vuoto
  • L’opzione -u serve per passare il nome utente di Mosquitto
  • L’opzione -P serve per passare la password di Mosquitto

Ovviamente se non avete impostato utente e password in Mosquitto potete omettere le opzioni -u e -P

A questo punto scrivete di nuovo il comando per visualizzare i topic attivi

sudo mosquitto_sub -t stat/# -t tele/# -t cmnd/# -v -u iltuoutente -P latuapassword

Il risultato questa volta sarà simile al seguente, senza il topic cmnd.

Se provate ora a far perdere connessione al vostro sonoff vedrete che alla riconnessione non farà nessuna operazione.

Se per caso richiamate il topic cmnd da altri software (mqtt dasboard, node-red, etc..) assicuratevi che il retain sia false.

Aggiornamento del 04/01/2019: aggiungo questa parte per chi ha HASSIO con l’MQTT embedded.

Chi ha installato Hassio e ha il broker MQTT embedded e magari non ha nemmeno accesso al terminale del Raspberry, ovviamente on può usare i comandi di Mosquitto.

E’ possibile comunque cancellare i topic utilizzando un client MQTT che lo consenta, io ho usato un’ app di Chrome che si chiama MQTT LENS.

Installatelo, cliccate sul “+” accanto a CONNECTIONS e configurate la connessione al vostro broker MQTT

Effettuate la sottoscrizione al topic cmnd/#

In basso vi visualizzerà i topic cmnd attivi nel vostro broker MQTT

Cancellateli uno per uno inviando un payload null (vuoto) e selezionando la casella “retain”

Dopo che li avete cancellati tutti, ripetete la sottoscrizione al topic cmnd/# come avete fatto prima. Io ho cancellato solo il primo e rifacendo la sottoscrizione non lo vedo più

Dovreste così riuscire a cancellare i topic cmnd/# che se rimangono attivi vengono richiamati ad ogni riconnessione del Tasmota.

 

 

 

About the Author:

Programmatore da oltre 20 anni, appassionato di tecnologia ed elettronica.

7 Commenti

  1. Marco febbraio 6, 2019 al 01:26 - Rispondi

    Questa guida mi è stata molto utile.
    Non sapevo come risolvere, ad ogni riavvio mi si apriva il cancello.
    Grazie

    • Christian febbraio 6, 2019 al 22:23 - Rispondi

      Sono contento che ti sia stata utile 😉

  2. Nico marzo 29, 2019 al 10:01 - Rispondi

    Ciao, ho un problema analogo su un sonoff DIY 1CH flashato tasmota.
    Noto che all’avvio dopo la riconnessione al modem invia l’impulso.
    La cosa strana è che non risulta ancora collegato ad home assistant, quindi presumo che il comando non arrivi da home assistant, ma direttamente dal sonoff.
    Ho provato cmunque la guida (mi trovo nella seconda parte con HASSIO) ma continua a presentare il problema.
    Hai qualche idea di come poter risolvere o approfondire il problema? Grazie.

    • Christian marzo 29, 2019 al 10:16 - Rispondi

      Normalmente all’avvio il sonoff emette il suono come se si attivasse ma in realtà non invia nessun impulso. Prova a collegare qualcosa e vedere se davvero te lo attiva.

      • Nico marzo 29, 2019 al 10:37 - Rispondi

        Al sonoff è collegata una elettroserratura (funziona da contatto pulito) quando va via la corrente e ritorna (anche con home assistant spento…ho fatto varie prove) la porta viene aperta.
        Ho notato che l’impulso di apertura non avviene subito al ritorno della corrente ma dopo che il modem si è riavviato e quindi quando il sonoff si collega alla rete lan.
        La cosa strana è che ho tre dispositivi identici e collegati allo stesso modo…su due si presenta il problema e su uno no. Ho anche provato a fare vari tentativi dalla console del tasmota ma niente. Mah!

        • Christian marzo 29, 2019 al 12:30 - Rispondi

          Hai provato con “PowerOnState 0” da console?

          • Nico marzo 29, 2019 al 16:14

            Purtroppo si ma senza risultati positivi.

Scrivi un commento