lunedì 8 agosto 2022

Console Tasmota - Il boot ed i suoi trigger


Vediamo insieme cosa succede all'avvio di un dispositivo con Tasmota, passo passo e con tutti i dettagli.

A cosa serve conoscere la sequenza di boot?

Semplice, a determinati eventi che accadono all'avvio possono essere usati come trigger ad alcune Rule, ne parlavo tempo fa nel post "Rule Tasmota - Sintassi dei trigger".

Mi sono però reso conto ( a forza di esperimenti e di errori) che conoscere l'esatta sequenza di boot è fondamentale per un corretto avvio delle Rule, così ho deciso di condividere quanto ho imparato.

Ora che hai capito lo scopo finale del tutto, si parte!

Un boot tipico


Per avere una sequenza di boot completa, ho collegato il mio dispositivo con il firmware Tasmota via console seriale. 
Se non hai idea di come fare, è semplicissimo, l'ho spiegato qui : "Console Tasmota via Seriale".In questo modo posso seguire il boot ad ogni passaggio, senza aspettare che si carichi l'interfaccia web. 
Poi ho abilitato i log via seriale il più dettagliati possibile con il comando SerialLog 4.
Per tutto quello che riguarda i log ed i livelli di logging, puoi fare riferimento al mio post "Console Tasmota - I log"
Ecco la sequenza di boot del mio dispositivo :


 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3456, room 16 
tail 0
chksum 0x84
csum 0x84
v0cc1cc0b
~ld
00:00:00 CFG: Loaded from flash at F6, Count 169
00:00:00 CFG: CR 399/699, Busy 0
00:00:00 SRC: Restart
00:00:00 Project tasmota wm_test_01 Version 8.4.0(tasmota)-2_7_2_1
00:00:00 WIF: Checking connection...
00:00:00 WIF: Attempting connection...
00:00:00 WIF: Connecting to AP1 domotica_wifi Channel 1 BSSId CC:2D:E0:XX:XX:XX in mode 11N as wm_test_01-6609...
00:00:01 WIF: Checking connection...
00:00:01 WIF: Connected
20:55:45 NTP: UTC 2022-08-15T18:55:44
20:55:45 HTP: Web server active on wm_test_01-6609 with IP address 192.168.1.164
20:55:46 MQT: Attempting connection...
20:55:46 MQT: Connected
20:55:46 MQT: tasmota/wm_test_01/tele/LWT = Online (retained)
20:55:46 MQT: tasmota/wm_test_01/cmnd/POWER = 
20:55:46 MQT: Subscribe to tasmota/wm_test_01/cmnd/#
20:55:46 MQT: Subscribe to tasmota/tasmotas/cmnd/#
20:55:46 MQT: Subscribe to cmnd/wm_test_01_fb/#
20:55:46 MQT: tasmota/wm_test_01/tele/INFO1 = {"Module":"Sonoff Basic","Version":"8.4.0(tasmota)","FallbackTopic":"cmnd/wm_test_01_fb/","GroupTopic":"tasmota/tasmotas/cmnd/"}
20:55:46 MQT: tasmota/wm_test_01/tele/INFO2 = {"WebServerMode":"Admin","Hostname":"wm_test_01-6609","IPAddress":"192.168.1.164"}
20:55:46 MQT: tasmota/wm_test_01/tele/INFO3 = {"RestartReason":"Software/System restart"}
20:55:46 MQT: tasmota/wm_test_01/stat/RESULT = {"POWER":"OFF"}
20:55:46 MQT: tasmota/wm_test_01/stat/POWER = OFF
20:55:49 QPC: Reset
20:55:50 MQT: tasmota/wm_test_01/tele/STATE = {"Time":"2020-08-25T20:55:50","Uptime":"0T00:00:09","UptimeSec":9,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER":"OFF","Wifi":{"AP":1,"SSId":"domotica_wifi","BSSId":"CC:2D:E0:XX:XX:XX","Channel":1,"RSSI":74,"Signal":-63,"LinkCount":1,"Downtime":"0T00:00:03"}}
20:55:51 APP: Boot Count 75
20:55:51 CFG: Saved to flash at F5, Count 170, Bytes 4096
20:56:04 WIF: Checking connection...
20:56:24 WIF: Checking connection...
20:56:44 WIF: Checking connection...
20:57:04 WIF: Checking connection...
20:57:24 WIF: Checking connection...
20:57:44 WIF: Checking connection...

Ora che abbiamo catturato la sequenza di boot, dobbiamo capire prima cosa sono le tre lettere dopo l'orario, poi esaminiamo il tutto.



Le sigle usate

Avendo abilitato il SerialLog a livello 4 ora abbiamo i messaggi divisi per tipologia, ovvero le tre lettere dopo l'orario. Vediamo cosa vogliono dire, in modo da capire meglio cosa sta succedendo.

CFG - Configuration
Messaggi di sistema relativi alla memoria, ai salvataggi, allo spazio occupato

SRC - Source
Quello che segue dopo questa tipologia elenca che versione Tasmota si ha a bordo e con quale Core.

WIF - Wi-Fi
Tutti i messaggi che hanno questo prefisso sono relativi ad operazioni eseguite sulla connettività wifi

NTP - Network Time Protocol
Tutto quello che riguarda la sincronizzazione del tempo viene segnalato con questo prefisso.

HTP - Http
Lo stato del webserver e tutto quello che in generale riguarda lo stato dell'http ha questo prefisso.

MQT - MQTT
Ogni transazione MQTT è anticipata da questa sigla.

QPC
Non documentato

APP
Messaggi generati in proprio da Tasmota

Ora che abbiamo capito la divisione in "classi" dei messaggi, iniziamo la vera e propria analisi!



Analizziamo il boot, passo passo


Da qui in avanti, ci prendiamo il log del boot che ho messo poco prima e lo analizziamo blocco a blocco, con tutti i commenti del caso.
E via che si inizia!


load 0x4010f000, len 3456, room 16 
tail 0
chksum 0x84
csum 0x84
v0cc1cc0b
~ld

Le prime righe ci dicono come mai il dispositivo sta facendo un riavvio ed il tipo di boot che viene fatto.
Seguono poi tutti i dettagli della memoria e la sua coerenza.
Quello che ci interessa davvero è tutto quello che inizia con un orario, vediamolo molto da vicino!

00:00:00 CFG: Loaded from flash at F6, Count 169

Viene letta la configurazione dalla memoria flash salvata prima del riavvio.
Questo è il momento nel quale viene letto dalla memoria qual'era lo stato del relè prima del riavvio e viene riproposto.
In pratica, questo è il momento del PowerOnState, se ti sei perso il post nel quale spiego cosa fa questo comando, eccolo : "Console Tasmota - PowerOnState". Una volta che PowerOnState avrà espletato il suo compito, passerà lo stato del relè al trigger Power1#Boot, che agisce proprio adesso.

00:00:00 CFG: CR 399/699, Busy 0
00:00:00 SRC: Restart
00:00:00 Project tasmota wm_test_01 Version 8.4.0(tasmota)-2_7_2_1

Vengono poi elencati processi eseguiti, quelli da eseguire e se c'è qualche processo impegnato.
Subito dopo viene elencato il processo che è in fase di elaborazione.
A seguire viene riportato il nome del firmware, il nome del dispositivo, la versione di Tasmota e del core.
Qui si va ad inserire il trigger System#Init , ovvero prima che il WiFi ed MQTT si connettano.

00:00:00 WIF: Checking connection...
00:00:00 WIF: Attempting connection...
00:00:00 WIF: Connecting to AP1 domotica_wifi Channel 1 BSSId CC:2D:E0:XX:XX:XX in mode 11N as wm_test_01-6609...
00:00:01 WIF: Checking connection...
00:00:01 WIF: Connected

Qui già abbiamo i primi segnali utili, ovvero il nostro dispositivo si sta cercando un SSID noto, poi prova a collegarsi, verifica la connessione e finalmente riesce a collegarsi.
Qui si può usare il trigger Wifi#Connected
Se la connessione non fosse andata a buon fine, avreste questo errore nei log :

03:05:45 WIF: Connect failed as AP cannot be reached
Andiamo avanti, che di cose interessanti ce ne sono ancora un sacco!


20:55:45 NTP: UTC 2022-08-15T18:55:44

La prima cosa che viene fatta dopo aver stabilito la connessione wifi è la verifica della data/ora sul server NTP. Ora che è tutto in sincrono, si può usare il trigger Time#Initialized con successo.

20:55:45 HTP: Web server active on wm_test_01-6609 with IP address 192.168.1.164

Altro passaggio cruciale, ci viene segnalato che il web server è pronto ad accettare client e che risponde all'indirizzo 192.168.1.164
Questo è il momento nel quale viene scatenato il trigger Http#Initialized

20:55:46 MQT: Attempting connection...
20:55:46 MQT: Connected

Ora si tenta e poi si stabilisce la connessione al server MQTT.
Il trigger utilizzabile adesso è Mqtt#Connected

20:55:46 MQT: tasmota/wm_test_01/tele/LWT = Online (retained)
20:55:46 MQT: tasmota/wm_test_01/cmnd/POWER = 
20:55:46 MQT: Subscribe to tasmota/wm_test_01/cmnd/#
20:55:46 MQT: Subscribe to tasmota/tasmotas/cmnd/#
20:55:46 MQT: Subscribe to cmnd/wm_test_01_fb/#

In questo segmento si va a vedere il messaggio LWT (Last Will Topic) al quale segue il topic coinvolto.
Poi tocca a tutti i messaggi di subscribe con tutti i topic relativi.

11:36:43 RSL: tasmota/wm_test_02/tele/INFO1 = {"Module":"Sonoff Basic","Version":"8.4.0(tasmota)","FallbackTopic":"cmnd/wm_test_02_fb/","GroupTopic":"tasmota/tasmotas/cmnd/"}
11:36:43 RSL: tasmota/wm_test_02/tele/INFO2 = {"WebServerMode":"Admin","Hostname":"wm_test_02-7034","IPAddress":"192.168.1.98"}
11:36:43 RSL: tasmota/wm_test_02/tele/INFO3 = {"RestartReason":"Software/System restart"}

La sequenza dei tre messaggi di INFO ci dice che tipo di modulo è configurato, la versione del firmware, il FallbackTopic ed il GroupTopic.
A seguire, tutto quello che riguarda il server http ed alla fine la ragione del riavvio.
Dopo INFO3 si può scatenare il trigger System#Boot e le Rule associate.

20:55:46 MQT: tasmota/wm_test_01/stat/RESULT = {"POWER":"OFF"}
20:55:46 MQT: tasmota/wm_test_01/stat/POWER = OFF

A questo punto subentra prepotentemente MQTT che pubblica lo stato del relè preso dal precedente PowerOnState.

20:55:49 QPC: Reset

Purtroppo questo messaggio non è documentato.

20:55:50 MQT: tasmota/wm_test_01/tele/STATE = {"Time":"2020-08-25T20:55:50","Uptime":"0T00:00:09","UptimeSec":9,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER":"OFF","Wifi":{"AP":1,"SSId":"domotica_wifi","BSSId":"CC:2D:E0:XX:XX:XX","Channel":1,"RSSI":74,"Signal":-63,"LinkCount":1,"Downtime":"0T00:00:03"}}

Questo è il primo messaggio di telemetria via MQTT, meglio conosciuto sotto Tasmota come messaggio di Teleperiod.
Anche di questo particolare ne ho parlato in un sacco di post, se ti interessa ho raggruppato qui tutti i post che contengono la parola Teleperiod

20:55:51 APP: Boot Count 75

Viene riportato sempre il numero di riavvii che il dispositivo ha fatto.
Ovviamente, questo numero può essere manipolato usando il comando Reset 99 come ho spiegato nel post "Console Tasmota - Reset"

20:55:51 CFG: Saved to flash at F5, Count 170, Bytes 4096

Ora viene salvato lo stato del relè, in caso ci sia un comando di Restart 1 il valore PowerOnState andrà a prendere questo dato.

20:56:04 WIF: Checking connection...
20:56:24 WIF: Checking connection...
20:56:44 WIF: Checking connection...
20:57:04 WIF: Checking connection...
20:57:24 WIF: Checking connection...
20:57:44 WIF: Checking connection...

Da qui in poi, ogni 20 secondi, viene tenuto sotto controllo lo stato della connessione wifi.


La sequenza dei trigger


La sequenza dei trigger di Tasmota che vengono eseguiti al boot del sistema è la seguente :

Power1#Boot
System#Init
Wifi#Connected
Time#Initialized
Http#Initialized
Mqtt#Connected
System#Boot

Visto che la cosa mi piaceva, ci ho anche fatto un'immagine riassuntiva.

Trigger di boot Tasmota



Conclusione


Grazie alle Rule ed alla possibilità di sfruttare i trigger, ho anche approfondito il boot del dispositivo.
Ora che so esattamente dove interviene ogni trigger, mi sarà molto più semplice attivare delle Rule!
Certo, tutto quello che ho scritto sopra si basa su un bel pò di conoscenza pregressa di Tasmota e dei suoi comandi, ma ho messo tutti i link per poter approfondire :-)



Tutto questo articolo, come dicevo, si basa sul fatto di poter andare ad intercettare le varie fasi di boot con delle Rule specifiche.
Se vuoi usare anche tu le Rule, ho scritto un sacco di articoli sul tema, li trovi tutti raggruppati con il tag "Rule"

Se hai bisogno di aiuto, però, lascia un messaggio qui sotto e proverò ad aiutarti con piacere!


Nessun commento:

Posta un commento

Sei davvero sicuro di voler sprecare tempo prezioso per scrivere qualcosa? Non è che preferisci andare su Google?

Cerca nel blog

I post più letti di sempre