lunedì 11 aprile 2022

Rule Tasmota - USE_EXPRESSION

 

La matematica nelle Rule è comoda, ma quella di base è davvero limitata. Per fortuna che si possono usare le espressioni matematiche!

Introduzione ed USE_EXPRESSION

Le operazioni matematiche in Tasmota sono già limitatamente possibili attivando le Rule, come ho spiegato nel post "Rule Tasmota - I confrontima vorrei qualcosa di più.

Vorrei poter fare delle moltiplicazioni,addizioni e sottrazioni senza dover prima mettere un valore come Var o come Mem, vorrei fare delle divisioni. Nulla di assurdamente difficile, sia chiaro. 

Ma con un firmware "liscio" non è possibile, ma ampliando Tasmota con USE_EXPRESSION tutto si può fare!

Se anche tu hai queste necessità ma non sai come fare, ho scritto un post introduttivo e l'ho intitolato "Tasmota - Personalizzare il firmware", leggitelo e vedrai che è semplice ed anche alla tua portata!

Ma ora vediamo l'aggiunta che ti suggerisco cosa comporta e quali possibilità ti offre.


La sintassi dei comandi di USE_EXPRESSION

L'aggiunta di qualcosa al firmare Tasmota di default ci regala altri comandi che hanno la loro sintassi ed il loro scopo.

I comandi da console che si aggiungono sono i seguenti:

( ) = Le parentesi servono a stabilire l'ordine delle operazioni

^ = elevazione a potenza

% = resto sulla divisione. Se il resto non c'è, viene riportato 0

= moltiplicazione

/ = divisione. Se si divide per zero, il risultato sarà 0

+ = addizione

- = sottrazione

Nota : l'ordine nel quale sono elencate le operazioni non è casuale. Prima vengono eseguite le operazioni in alto, poi quelle in basso. Per esempio, viene eseguita una moltiplicazione prima di una sottrazione.

Tutti questi comandi si possono usare nelle variabili di tipo Var e di tipo Mem, nonchè nei Timer delle Rule e nelle sequenze IF.

Ne parleremo comunque approfonditamente nei post dedicati a questi comandi / estensioni.


Esempi pratici

2+3*2 

Il risultato  sarà 3*2 + 2 ovvero 8. Questo perchè la moltiplicazione viene eseguita PRIMA dell'addizione


(2+3)*2 

Il risultato sarà 2+3 * 2 ovvero 10. Questo perchè le operazioni tra parentesi sono eseguite PRIMA della altre. In questo caso, quindi,  prima della moltiplicazione.


Dove usare i comandi

Quanto sopra si potrà usare nelle variabili (Var), nelle variabili persistenti (Mem), nei timer delle Rule (RuleTimer) e nei cicli IF.

Di tutti questi metodi d'uso, ne parleremo con dei post di approfondimento in modo da non "perderci" nessuna possibilità.


I valori simbolici

Oltre ai valori numerici esplici, USE_EXPRESSION permette anche di usare diversi e comodi valori simbolici, in aggiunta ai valori numerici fissi.


VarX

Ovvero ogni valore Var in memoria volatile


MemX

Ovvero ogni valore nella memoria persistente


time

Numero di minuti dopo la mezzanotte.

Siccome sappiamo che in un giorno ci sono 1440 minuti ed in un ora 60, possiamo fare un sacco di giochi carini.


uptime

Minuti trascorsi dall'ultimo riavvio.


utctime

Valore dell'orario UTC espresso in epoch time. Se non conosci come calcolare questo tempo, ti lascio un link ad un mio vecchio post in fondo all'articolo.

Ad oggi, il mio epoch time è pari a 1649494651000

Appoggiandomi al calcolatore di Ruddwire ne emerge la corretta data nella quale sto scrivendo questo posto, ovvero "Sat Apr 09 2022 10:57:31 GMT+0200"


localtime

Valore dell'orario locale espresso in epoch time.


sunrise

Minuti trascorsi dall'alba.

Se deve ancora sorgere il sole, saranno indicati i minuti mancanti all'evento.


sunset

Minuti trascorsi dal tramonto

Se deve ancora tramontare il sole, saranno indicati i minuti mancanti all'evento.


Il simbolo "="

L'uso di questo simbolo permette di alterare i comportamenti delle variabili, per ora vi basti ciò. Nel prossimo post dedicato alla variabili approfondiamo il tutto.


Conclusione


Grazie all'ampliamento del firmware con USE_EXPRESSION abbiamo ora a disposizione diversi altri operatori matematici.

Con questi alla mano, possiamo affrontare anche operazioni matematiche complesse o conversioni di misure. Un esempio pratico è dato dalla possibilità di utilizzare un sensore non supportato direttamente da Tasmota. Basta che eroghi, per esempio, una lettura in volts e siamo a cavallo. Con qualche resistenza ed un pochino di matematica possiamo integrare le sue letture.

Un altro esempio pratico è la possibilità di avere calcolate al volo delle percentuali, senza bisogno di appoggiarsi ad un hub domotico.

Ora non resta solo che mettere in pratica quanto ho scritto sopra, se poi trovi delle difficoltà ti basta lasciare un messaggio ed in breve ti darò ben volentieri una mano.

Se poi sei interessato ad approfondire il discorso Tasmota, qui ci sono tutti i post che ne parlano



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