|
Condizioni/Espressioni (in ControlHUB)
|
Il terzo dei 3 mattoncini di base di ControlHUB sono le condizioni.
Scegliendo dal fondo della Home Page il link
Espressioni/Condizioni definite, ControlHUB mostra la lista delle Condizioni attualmente definite (ma non necessariamente "attive" - si possono definire anche delle Condizioni che al momento non servono, e lasciarle OFF; e in
HomePage si possono anche
disattivare tutte le condizioni in un colpo solo, con gli interruttori in alto).
In questo esempio come si può vedere avevamo già definito un paio di condizioni; ovviamente a dispositivo "nuovo" non ce ne sarà nessuna e quindi non ne vedrai nessuna in elenco, ma questa immagine ti dà un po' un'idea di come sono elencate: si può vedere il nome, la "condizione" stessa, ed evenutali "
Azioni" richiamate dalla condizione.
Le condizioni
Facendo clic sul ++ in testa si può aggiungere una nuova Condizione.
Con queste variabili, nella casella Espressione/Condizione (dove noi abbiamo scritto tanto per fare un esempio $tfin$>25) si possono creare espressioni matematiche a piacere che possono restituire 0 (valutato come FALSE/FALSO) oppure un valore 1 o genericamente >0 (valutato anche come TRUE/VERO).
Non è tutto: l'espressione può anche essere non booleana, cioè dare come risultato invece che 1 o 0 anche un altro numero; e il valore creato può essere usato dentro a un'
azione: infatti, servisse mai,
il risultato della valutazione di una condizione è a sua volta reso disponibile come una variabile (temporanea), di nome $c$, che può essere usata all'interno del corpo/comando di qualsiasi
Azione.
Questa cosa è più per gli utilizzatori esperti, ma da qualche parte la dovevamo scrivere.
Come del resto ricorda lo stesso ControlHUB, per scrivere un'espressione si possono usare parentesi, le 4 operazioni + - * / (NOTA: occorre definire sempre le priorità con parentesi: per fare dispetto alle comuni regole matematiche non abbiamo dato la priorità a moltiplicazione e divisione), log() ln() e le operazioni logiche and or not (utilizzabili anche i simboli && || ! )
Esempio di condizioni:
- se (variabile1>25) & (variabile2*variabile3<2) & (ora>16) fai azione1(eventualmente comunicando variabile4)
- se (Temp1>25) fai Azione1 e Azione2
- se ((Temp1<23) and (Volt2>30)) fai Azione2
- quando arriva il dato Energia3, passa (Energia3 / 5)*log(Volt1) +1.5 (come $c$) ad Azione3
E' possibile configurare ciascuna condizione di modo che richiami un'
azione (anzi fino a due
Azioni); le azioni si possono scegliere dai menù a tendina in fondo (è comodo quindi
creare *prima* le azioni che possono eventualmente servire), che elencano oltre alle azioni che definisci tu, anche le eventuali
azioni predefinite (nelle versioni DY di ControlHUB,
accendere e spegnere i relé interni).
Valutazione condizioni e eseguimento azioni
Quando avviene un
cambio in una qualsiasi delle variabili in ingresso, per esempio quando viene ricevuto un particolare messaggio MQTT da un sensore, oppure viene ricevuto un dato di temperatura da un TXtemp, oppure un'
Azione periodica di lettura Web legge una variabile, ecc ecc ecc, oppure
una volta al minuto/ora/giorno se nell'espressione ci sono variabili di tempo (time,tminute una volta al minuto,thour a inizio ora,tday a inizio giorno,tmonth a inizio mese,tyear a inizio anno), ControlHUB DX/DY guarda in memoria e
ri-valuta tutte le espressioni/condizioni che
contengono tale variabile.
Cosa vuol dire che "valuta le condizioni"?
Per esempio una condizione è:
($tbalcone$>25)
Arriva improvvisamente l'informazione da un sensore di temperatura, e $tbalcone$ nuova è 25.61
ControlHUB valuterà 25.61>25
Siccome è vero, il risultato sarà vero / TRUE / 1 (e la variabile $c$ sarà 1)
Se la condizione fosse non-booleana, per esempio:
($tbalcone$*2)
il risultato sarebbe 51.22 - che se è usato in modo booleano è sempre TRUE (e la variabile $c$ sarà 51.22)
- le azioni di tipo T/F saranno richiamate/eseguite SOLO se la valutazione della condizione che le vuole chiamare è TRUE/VERO
- le altre azioni invece saranno richiamate sempre, passandogli $c$ - che può essere usata all'interno dell'azione, oppure - come succede il più delle volte - sarà ignorata
NOTA: ricordiamo che le azioni predefinite di azionamento relé sono di tipo T/F, ovvero verranno eseguite solo se la "valutazione" della condizione sarà diversa da zero.
Espressioni (un modo di fabbricare variabili)
Sia per mostrare cose su display, che per Azioni particolari, può essere utile avere variabili non ricavate *direttamente* dai dati in ingresso, ma che ne siano espressione matematica, oppure variabili che siano espressioni di altre variabili.
Un esempio semplice (per chi conosce due principi base di elettrotecnica) è creare per esempio la variabile $watt1$ come
($volt1$ * $ampere1$)
In ControlHUB questo si può fare creando una Condizione nuova (come sopra, scegliendo dal fondo della Home Page il link Espressioni/Condizioni definite, e poi cliccando su ++ in alto), definendola "ON / Variabile", e scrivendo l'espressione che desideriamo - per esempio proprio ($volt1$ * $ampere1$) nella casella dove normalmente scriveremmo la condizione.
Non è necessario definire nessuna Azione per questo particolare tipo di condizione.
Riepilogo sintassi di condizioni/espressioni
Una condizione/espressione può contenere:
parentesi
le 4 operazioni + - * / (NOTA: occorre definire sempre le priorità con parentesi: per fare dispetto alle comuni regole matematiche non abbiamo dato la priorità a moltiplicazione e divisione)
log() e ln()
le operazioni logiche, in notazione Pascal (and or not) o in notazione C (&& || ! o anche & e | che sono considerate uguali a && e ||)
le comparazioni > < >= <= = !=
Si possono creare espressioni matematiche a piacere che possono restituire 0 (valutato come FALSE/FALSO) oppure un valore 1 o genericamente >0 (valutato anche come TRUE/VERO).
Non è tutto: l'espressione può anche essere non booleana, cioè dare come risultato invece che 1 o 0 anche un altro numero; e il valore così creato può essere usato dentro a un'
azione: infatti, servisse mai,
il risultato della valutazione di una condizione è a sua volta reso disponibile come una variabile (temporanea), di nome $c$, che può essere usata all'interno del corpo/comando di qualsiasi
Azione.