lunedì 6 giugno 2022

Rule Tasmota - USE_PING

Parlavo di questo comando tempo fa, nel post Tasmota - Perchè ampiare il firmware . Ora è il momento di approfondire un pochino le potenzialità del ping e di come possiamo usare i dati ottenuti!

Cos'è il ping?

Uno dei comandi basilari, quando si smanetta un pochino con le reti, è il ping. Molto semplicemente, questo comando non fa altro che spedire N pacchetti di grandezza X verso un host. Ne misura quindi lo stato ed il tempo di risposta e genera un report riassuntivo.

Quello sopra è l'esito di un ping andato a buon fine in ambiente Linux. Vediamo che sono stati mandati 11 pacchetti e che altrettanti ne sono tornati, generando lo 0% di pacchetti persi, poi c'è tutta la media dei tempi per la sessione.

Windows, invece, è più sintetico :


Questo stesso comando si trova nel nostro amato Tasmota. Bisogna abilitarlo, però, usando l'opzione USE_PING.

Se non sai come fare, c'è un post che te lo spiega in maniera semplice ed in italiano, eccolo : Tasmota - Personalizzare il firmware


La sintassi del ping

La sintassi del comando ping nel firmware Tasmota è molto semplice :

Ping<x> <addr>

il valore <x> specifica il numero di pacchetti da mandare, il valore deve essere compreso tra 0 ed 8. Windows, di base, ne manda 4.

Il valore <addr> è l'host da controllare. Il valore può essere espresso in formato numerico (per esempio, usando il DNS di CloudFlare: 1.1.1.1 ) che con il nome di dominio (per esempio google.com).

Una volta abilitato nel firmware, lanciamo giusto un ping di test dalla console :

05:13:12 CMD: ping4 192.168.0.1

05:13:12 RSL: RESULT = {"Ping":"Done"}

05:13:16 RSL: RESULT = {"Ping":{"192.168.0.1":{"Reachable":true,"Success":4,"Timeout":0,"MinTime":24,"MaxTime":29,"AvgTime":26}}}

La risposta del comando è quella che ci interessa, vediamola insieme.

Per prima cosa si ha la dichiarazione che l'host specificato (in questo caso 192.168.0.1) è raggiungibile, con la scritta Reachable:true.

Poi vengono elencati quanti dei 4 pacchetti sono andati a buon fine, ovvero tutti. Per ultimo viene riportato il tempo minimo, massimo e medio per il ping.

Qui sotto vediamo invece il risultato del ping verso lo stesso host, ma con l'host scollegato :

05:13:50 CMD: ping4 192.168.0.1

05:13:50 RSL: RESULT = {"Ping":"Done"}

05:13:54 RSL: RESULT = {"Ping":{"192.168.0.1":{"Reachable":false,"Success":0,"Timeout":4,"MinTime":0,"MaxTime":0,"AvgTime":0}}}

Viene dichiarato subito che il valore Reachable è false, quindi tutto il resto è a zero.

Come dicevo prima, si possono pingare sia host interni che esterni, sia usando l'indirizzo ip che il nome, senza differenza alcuna.


Usare il ping nelle rule

L'uso dell'output del ping nella costruzione di una rule è davvero utile e comodo, vediamo un paio di esempi presi direttamente dalla Wiki di Tasmota.

Rule1

  ON Time#Minute|3 DO Ping4 192.168.1.10 ENDON

  ON Ping#192.168.1.10#Success==0 DO Backlog Power1 0; Delay 10; Power1 1; ENDON

Rule1 1

La Rule qui sopra fa un ping con 4 pacchetti verso 192.168.1.10 (Ping4 192.168.1.10) ogni 3 minuti (Time#Minute|3) .

Se i ping non vanno a buon fine (Success==0) lancia i comandi usando Backlog.

Nella fattispecie, spegne il carico collegato al relè 1, aspetta 10 secondi prima di passare il secondo comando (Delay 10) e poi accende il carico collegato al relè 1.

Se non sai come si usa il comando Backlog, ci ho scritto tre post almeno, te li metto in fondo a questo articolo, ma puoi anche cercare tutti i post che contengono la parola "backlog"


A cosa serve questa cosa?

Semplice, a fare un riavvio del router in casi si pianti.

In ambito aziendale, per esempio, avevo diversi Cisco SPA112 che, quando si piantavano, non rispondevano al ping. Con l'implementazione di un banale Sonoff opportunamente tasmotizzato e la rule qui sopra, ho fatto in modo che il reboot potesse essere eseguito in automatico.

Semplice, rozzo, veloce ma funzionale.

Sempre sulla wiki di Tasmota, c'è anche l'esempio più elaborato :

Rule1

  ON system#boot do Var1 3 ENDON

  ON Var1#State>1439 DO Var1 1439 ENDON

  ON Time#Minute|%var1% DO Ping4 192.168.1.10 ENDON

  ON Ping#192.168.1.10#Success==0 DO backlog Mult1 3; Power1 0; Delay 10; Power1 1 ENDON

  ON Ping#192.168.1.10#Success>0 DO Var1 3 ENDON

Rule1 1

Qui all'avvio del sistema (system#boot , ma lo vedremo più avanti con un articolo dedicato) viene messo il numero 3 come Var1.

Se il numero contenuto in Var1 è maggiore di 1439 non vengono eseguite altre istruzioni.

Adesso viene il bello!

Il tempo di ping è pari al valore di Var1, ovvero 3.

Se il ping non va a buon fine (Success==0) si moltiplica il valore di Var1 con un valore di 3, poi si fa un riavvio come prima.

Se il ping va a buon fine (Success>0) riporta il valore di Var1 (ovvero il tempo tra i ping) a 3 minuti.

Delle variabili di tipo Var ne avevo parlato nel post Rule Tasmota - Le variabili, in caso non ti ricordi cosa siano e come funzionano.


A me, personalmente, non è che piaccia molto.

Questo perchè Mult1 finisce molto presto per accumulare una quantità di minuti notevole tra un riavvio e l'altro.

Preferisco più usare, al posto di Mult1 , il comando Add1.

Questo perchè nell'esempio sopra si fa presto ad arrivare a 1439 minuti (ovvero un giorno)

3 - 9 - 27 - 81 - 243 - 729 - 2187

Con soli 7 passaggi si è già oltre.


Usando Add1, invece, questo è il risultato

3 - 6 - 9 - 12 - 15 - 18 ecc ecc

Un grafico spiega meglio il mio punto di vista :

Tanto per dire, tra il quinto ciclo di Mult ed il sesto, l'attesa è di più di 12 ore. Usando Add, sempre tra il quinto ed il sesto ciclo, passano 18 minuti.


Certo, entrambi i metodi hanno dei pro e dei contro, ma a mio modo di vedere è ben difficile restare 12 ore senza connettività.

Se per caso non ti ricordi come funzionano i comandi Add e Mem, questo è il post nel quale ne parlavo :Rule Tasmota - Le variabili

Comunque la si voglia mettere, l'uso del comando Ping nelle rule è molto versatile ed utile a scatenare moltissimi automatismi. Ora sta a te inventare qualcosa di divertente!


Risorse utili

Se poi vuoi approfondire il discorso su Tasmota, ci sono un sacco di post in merito, qui sono raggruppati tutti gli articoli con il tag "tasmota"

Gli altri articoli che ho citato nel post sono qui sotto :

Tasmota - Personalizzare il firmware

Console Tasmota - Rete e Backlog

Console Tasmota - Parametri MQTT con Backlog

Console Tasmota - Parametri Time con Backlog

 


1 commento:

  1. Ciao
    Recentemente ho trovato in rete le indicazioni per riavviare il router con sonoff e tasmota, che include anche notifiche via telegram, ho provato a seguire le istruzioni e sono riuscito a farlo funzionare.
    Almeno credevo, ultimamente trovo il router offline per parecchio tempo , sembra che ogni tanto il sistema non faccia quello che deve, ma non capisco la ragione, non conoscendo bene il funzionamento fare il codice che ho utilizzato, avrei bisogno di una mano.
    Questo è il link,:
    https://www.juliogonzalez.es/watchdog-for-network-devices-with-tasmota-and-sonoff-s26/508
    E questo è quello che ho applicato:

    Rule1
    ON system#boot DO Var1 3 ENDON
    ON system#boot DO Var2 0 ENDON
    ON system#boot DO tmchatid xxxxxx ENDON
    ON system#boot DO tmstate 1 ENDON
    ON system#boot DO xxxxxxxxx xx ENDON
    ON system#boot DO tmsend Router booted up ENDON
    ON Var1#State>1439 DO Var1 1439 ENDON
    ON Time#Minute|%var1% DO Ping4 8.8.8.8 ENDON
    ON Ping#8.8.8.8#Success==0 DO backlog; tmsend Router: Device is unresponsive...; Add2 1 ENDON
    ON Ping#8.8.8.8#Success>0 DO backlog; Var1 3; Var2 0 ENDON
    ON Var2#State > 1 DO backlog Mult1 3; tmsend Router: Device is unresponsive, restarting power; Power1 0; Delay 10; Power1 1; Var2 0 ENDON

    Cosa ne pensi ?

    RispondiElimina

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