Condizioni/Espressioni (in ControlHUB)
 
Il terzo dei 3 mattoncini di base di ControlHUB sono le condizioni. 
Ci sono due tipi di "condizioni" perché oltre che per quelle che dovunque chiamiamo "condizioni", per comodità abbiamo usato la stessa pagina/finestra anche per costruire quelle che abbiamo chiamato espressioni, che sono variabili costruite combinando matematicamente altre variabili - ne parliamo più sotto...). 
 
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). 
 
Condizioni controller 
 
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
Per prima cosa si può decidere se è OFF (disattivata), se è ON (attiva), o se è ON/Variabile (se questo terzo tipo è scelto, stiamo creando in realtà una condizione/espressione - vedi più sotto...); poi si può battezzarla con un nome... 
nuova condizione controlHUB 
 
Ma forse era meglio cominiciare dall'inizio della pagina: come puoi vedere, in alto ControlHUB elenca le variabili disponibili; si tratta delle variabili che al momento abbiamo definito in home page, più alcune variabili speciali (ora e data, più precisamente time, tminute, thour, tmonth, tday, tyear e più ip definito nella pagina Wifi / MQTT / ModBus e che serve per il DYN DNS). 
Per le variabili, ricordiamo che tyear e la variabile speciale poweron sono molto interessanti per gestire, sagomando opportunamente una o più condizioni, il comportamento all'accensione o dopo l'accensione (altri dettagli qui)
 
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. 
Esempio di condizioni: 
- se (variabile1>25) e (variabile2*variabile3<2) e (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). 
condizione comanda azione 
 
 
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) 
Fatta la valutazione, esegue le azioni corrispondenti, se la configurazione di tali azioni lo prevede:  
- 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. 
Una volta che una condizione è definita in questo modo, diventa disponibile come "sorgente" per creare una nuova variabile, sotto ai canali più canonici (433, Wifi, MQTT, eccetera)... 
 
 
Mattoncini: dati/variabili... - azioni/letture... - condizioni/espressioni (SEI QUI) 
Manuale veloce... 
 
ControlHUB Home - il controller programmabile da smartphone, il modo facile per leggere sensori e comandare dispositivi MQTT ModBus HTTP RS232 Web... 
 
Soluzioni Semplici - Home - L'hardware di VisualVision 
(C) 2020 VisualVision