|
Azioni Esecutive e Azioni/Letture (in ControlHUB)
|
Il secondo dei 3 mattoncini di base di ControlHUB sono le Azioni.
ControlHUB DX/DY può effettuare azioni:
come conseguenza della valutazione di una espressione/condizione che prevede azioni (ricordiamo che una condizione è "valutata" ogni volta che viene aggiornata una variabile menzionata nell'espressione che costituisce la condizione stessa, oppure ogni minuto se nella condizione è presente una variabile speciale di tempo ovvero time, tminute, thour, tday, tmonth o tyear)
periodicamente
Ci sono 2 tipi di Azioni definibili dall'utente, le prime che illustriamo sono quelle che potremmo chiamare le
Azioni Esecutive, ma sono molto utili e interessanti anche le
Azioni/Letture, che vediamo più sotto...
Ci sono inoltre per la versione DY delle azioni esecutive predefinite: attivare o disattivare i relé interni.
Azioni esecutive: faccio cose, comando dispositivi...
Con le azioni esecutive ControlHUB può:
- comandare qualsiasi attuatore in standard Seriale RS232 oppure molteplici cose allacciate su un bus ModBus RS485 (a partire da Relè ModBus, ma non solo, ci sono infiniti macchinari a controllo numerico basati su ModBus...)
- può pubblicare
messaggi/topic MQTT e quindi comandare
attuatori MQTT che solitamente supportano di essere comandati tramite un particolare topic di comando: lampadine, termostati, caldaie, interruttori intelligenti come
DoorOpen, e un sacco di altre cose, solo tra i nostri
SuperClock,
NumeroInCoda ecc...)
-
può inviare comandi Web/http (per esempio chiamare uno script sul vostro server Web; o chiamare qualsiasi apparecchiatura con dentro un server Web virtuale, es. un interruttore tipo
DoorOpen; o qualsiasi altra cosa anche non ancora inventata, basta che supporti Web/Http)
- nella versione DY ospita dei relè interni che possono venire comandati ON o OFF anche tramite azioni predefinite.
Per creare nuove azioni, dalla pagina principale si sceglie il menù "Azioni/Letture definite" che inizialmente sarà vuoto. Be' noi già abbiamo preparato qualche esempio quindi facendo una foto dello schermo c'è già un'azione elencata (si può editare, cancellare, oppure "eseguire" nel tipo di esecuzione più semplice ovvero con condizione TRUE, $c$=1), ma vi dà così un'idea
Con un clic sui ++ si crea un'azione nuova.
Di base gli si deve dare un nome (scegliete qualcosa che vi ricordi cosa fa in concreto l'azione); si può decidere se l'azione è
disponibile per essere eseguita da condizioni (di standard sì; se non lo è, non si potrà richiamare questa azione quando si definisce una
condizione - tutto questo può servire per fare ordine quando c'è tanta roba); si può specificare se l'azione è da chiamare periodicamente ovvero è un'
azione periodica (e questo non esclude che possa anche essere "usata" dalle
condizioni) definendo la periodicità - o altrimenti si lascia "
effettuare periodicamente" in posizione OFF.
La scelta più interessante è tra i diversi tipi di azione disponibile: RS232/485 Ascii, RS232/485 Hex/RTU, HTTP WiFi, MQTT Wifi.
RS232/485 Ascii
Se si sceglie questo tipo, nel box sotto si inserisce una o più linee ASCII che verranno inviate tramite RS232 o RS485 (le due cose si escludono, si può usare o la RS232 collegandosi ai morsetti TX e RX oppure ci si può collegare a un Bus ModBus con i morsetti A B - fisicamente c'è una sola interfaccia)
RS232/485 Hex/RTU
L'interfaccia è (o sono) quella di sopra, scegliendo questa opzione noi scriviamo cose in HexAscii, ed esse però vengono inviate in binario. Per esempio possiamo scrivere questo comando ModBus che chiede la Frequenza di Rete a un misuratore ModBus
01 04 0007 0001 800B
con questa opzione non verranno inviati i dati ASCII 0 1 0 4 0 0 0 7 eccetera (ovvero i bytes 48, 49, 48, 52, 48, 48, 48, 55 eccetera), ma verranno inviati sulla linea i bytes con valore 1, 4, 0, 7 eccetera, che è quanto normalmente richiesto dalla modalità ModBus chiamata RTU.
HTTP WiFi
Con questa modalità, ControlHUB si aspetta che nel box inseriamo una URL da richiamare, con eventuali parametri, scritta tutta attaccata (oppure diverse linee con diverse URL). Si può chiamare così un server Web vero o virtuale, magari uno script sul server (passandogli i parametri tramite URL come consentito dal metodo standard GET).
Ovviamente ci dovrà essere un
collegamento WiFi attivo che permetta di contattare tale server.
MQTT Wifi
Con questa modalità, ControlHUB si aspetta che nel box inseriamo una topic e un messaggio MQTT, separati da uno spazio.
Il nome del topic (anche secondo lo standard MQTT) non deve contenere spazi.
Per esempio se scriviamo
topolino {bel messaggio}
il messaggio
{bel messaggio} verrà inviato sul topic topolino, usando il broker MQTT precisato nella
configurazione MQTT.
Il messaggio può essere qualunque, non deve contenere grafe {} o quant'altro.
Relay/Extended
Usabile quando si vogliono scrivere solo espressioni speciali (
vedi dopo) senza dover fare alcuna altra azione.
Utilizzo di variabili nel corpo/comando delle azioni MQTT / HTTP
E' utile ricordare che all'interno del box di definizione azioni possono essere usate tutte le variabili, per es. possiamo chiamare
http://mioserver.com/cgi/script?t1=$temperat$
per passare la temperatura $temperat$ al proprio server Web.
Oppure
abc/feeds/beltopic {"DoSomething":"$variabile$"}
per passare un parametro all'interno di messaggio MQTT (e volendo anche nel topic!).
Utilizzo di variabili nel corpo/comando delle azioni ModBus / HEX
Per l'uso con ModBus che richiede un input HexAscii abbiamo dato la possibilità di "affettare" una variabile numerica (a 16 o 32 bit o FLOAT 32 bit IEEE754) e rendere accessibili i 2 o 4 bytes che la compongono.
Prendendo sempre come esempio $temperat$ come nell'esempio sopra, si può usare:
- $L%temperat$ $H%temperat$ (parte L o H di un INT16 convertita in HexAscii)
- $0%temperat$ $1%temperat$ $2%temperat$ $3%temperat$ (bytes costitutivi di INT32 o Float IEEE754 convertiti in HexAscii)
Per usare $ scrivere $$
Dal momento che $ è usato per definire le variabili (es. $pippo$) se vi serve il simbolo $ (per es. in una URL) occorre scrivere $$ (ControlHUB lo farà diventare poi $).
Per usare caratteri speciali scrivere per es. $10$
Se servono caratteri non scrivibili da tastiera, usare il loro codice decimale ASCII tra $..$, esempio per \n sarà $10$.
(.....)
Utilizzo di espressioni speciali nel corpo/comando delle azioni
Le azioni si scrivono in genere su una sola linea (che sia questa una URL http, oppure un topic (spazio) messaggio MQTT, o una sequenza Hex Ascii per ModBus) ma è anche possibile scrivere più azioni (più URL, più topic messaggio, ecc) su più linee, e si possono inserire commenti preceduti da un cancelletto # (tutta la linea dopo il cancelletto viene ignorata).
Inoltre si possono usare delle linee per inserire dei comandi speciali (non inviati a nessuno ma eseguiti direttamente e subito da ControlHUB) preceduti dalla parola chiave controlhub.
Al momento sono attivi la possibilità di delay/pausa e la possibilità di assegnare variabili, anche nuove e la possibilità di avviare Azioni chiamandole per nome, anche azioni interne sui relè (ove disponibili) come onH offH flipH ecc.
Delay:
controlhub delay(100)
effettua una pausa di 100 millisecondi
Azioni varie:
controlhub FLIPH
controlhub ONH
controlhub azione
controlhub azione condizione
controlhub azione 10
controlhub azione $pluto$*$paperino$+2
controlhub azione $pippo$
si può eseguire un'azione per nome ed eventualmente specificare anche una condizione (se l'azione di tipo è T/F). Si può specificare la condizione come numero o come espressione di variabili.
Assegnazioni di variabili:
controlhub $prevtemp$=$temp$
controlhub $abc$=1.234
controlhub $pippo$=$pluto$*$paperino$+2
controlhub $pippo$=$pippo$+1
assegna (e crea se non esistono) le variabili a sinistra dell'uguale mettendoci dentro quello che sta a destra dell'uguale (come normale convenzione); il nome delle variabili deve essere alfanumerico minuscolo e max 8 caratteri.
Eventuali
nuove variabili create qui diventano a disposizione per l'uso ovunque, ma
non vengono visualizzate in homepage ed hanno vita temporanea (in caso di spegnimento o blackout vengono cancellate; si può comunque usare
l'azione iniziale per dar loro un preset).
Ricordiamo che si può creare una nuova
espressione/condizione di tipo "ON / Variabile" per definire nuove variabili (come espressioni di altre variabili): questo dà la possibilità di miscelare input multipli per comandare anche output granulari e sofisticati e non semplicemente output acceso/spento come i relè.
Azioni/Letture: ovvero sfruttare la pagina Azioni per leggere dati
Per alcune cose il meccanismo "Azioni" necessariamente è a senso unico, per esempio se si attiva un relè, bene, finita lì.
Idem se si manda un topic/messaggio MQTT.
Anche chiamare un server Web per causare un azionamento remoto è un'azione a senso unico.
Tuttavia abbiamo pensato che sia la possibilità di chiamare URL Web, sia la possibilità di mandare comandi ModBus (o RS232) può essere sfruttata anche per leggere dati, oltre che per fare azioni.
Chiamando http://ident.me per esempio riceviamo il nostro IP. Chiamando uno script su un nostro server possiamo ricevere qualsiasi cosa sia programmabile su un server: potrebbe essere la frase filosofica del giorno, oppure il server potrebbe essere non un server Web classico, ma un misuratore remoto che si affaccia sul Web con il proprio server Web interno e quindi lo si può chiamare per ricevere una misura.
Analogamente, mandando a un misuratore in standard ModBus una stringa di comando possiamo ricevere in risposta una stringa di dati Hex che contiene delle misure.
Bene questo è possibile, è possibile creare un'
Azione (da eseguire per esempio periodicamente) e mettendo una crocetta nel box "
lettura: da risposta permetti prelievo variabile/i" diciamo a ControlHUB che questa è un'Azione/Lettura, e quindi una volta salvata (al contrario delle altre azioni) lui la farà comparire tra le
sorgenti disponibili, tra i "canali" quando creeremo una nuova variabile...
Esempio di Azione/Lettura che legge da un sito Web
In questo esempio creiamo un'azione che ogni 3 minuti chiama un sito Web. Visto che è un esempio chiamiamo http://ipv4bot.whatismyipaddress.com/
che restituisce il nostro IP in Internet (il che è un po' inutile visto che per questa funzione
ControlHUB ha $ip$, ma si tratta pur sempre di un esempio... magari ci potete segnalare nel
forum qualche URL utile per ricevere qualche dato semplice).
Ecco come si fa: come per le altre Azioni, si va dalla pagina principale nella pagina Azioni/Letture definite, e si clicca ++ per creare una nuova azione (o si clicca Nuova azione negli altri posti in cui questa funzione è disponibile).
Abbiamo chiamato l'azione, con molta fantasia,
LeggiIP, l'abbiamo per adesso lasciata abilitata all'uso da parte di
Condizioni (può sempre servire) e definita di tipo T/F (se ci serve cambiare, lo cambieremo, al momento qs. non ci interessa) e soprattutto abbiamo messo una crocetta su
lettura: da risposta permetti prelievo variabile/i
Abbiamo stabilito una periodicità di 3 minuti (in alternativa potremmo chiamare questa azione impostando una condizione o altro).
Poi, visto che lo quello che vogliamo fare è una chiamata su Internet abbiamo scelto HTTP WiFi come "Tipo Azione/Lettura".
E abbiamo scritto nel box la URL da chiamare. Si può scrivere qualunque URL, anche con parametri.
Per gli utenti esperti è interessante far notare che si possono introdurre nella URL anche variabili esistenti che saranno rimpiazzate dal loro valore, scrivendole con la sintassi valida dappertutto in ControlHUB ovvero per esempio $temperatura$ per la var Temperatura.
Possiamo quindi fare un test di lettura cliccando Test!. Ecco cosa ci ha risposto il sito Web:
Adesso che questa azione esiste sarà elencata, come tutte le azioni/letture, nel gruppo di canali/sorgenti disponibili quando si crea una nuova variabile.
Esempio di Azione/Lettura che legge diversi dati da un misuratore ModBus
In questo esempio abbiamo un misuratore ModBus che può misurare Tensione, Corrente, Potenza assorbita e altre cose una volta collegato a 220V e a un utilizzatore (una lampadina, un frigo, qualunque cosa...).
Supponiamo di volerlo leggere ogni 10 minuti, per poi poter utilizzare in qualche modo queste grandezze misurate.
Creiamo una nuova azione come in figura:
Abbiamo chiamato l'azione
Energi, l'abbiamo per adesso lasciata abilitata all'uso da parte di
Condizioni (può sempre servire) e definita di tipo T/F (se ci serve cambiare, lo cambieremo, al momento qs. non ci interessa) e soprattutto abbiamo messo una crocetta in
lettura: da risposta permetti prelievo variabile/i
Abbiamo stabilito una periodicità di 10 minuti (in alternativa potremmo chiamare questa azione impostando una condizione o altro).
Poi, visto che lo strumento che vogliamo leggere è ModBus e funziona in modalità binaria (RTU) come la maggior parte di questi strumenti, abbiamo scelto RS232/485 Hex/RTU come "Tipo Azione/Lettura".
Guardando il manuale del misuratore, abbiamo visto che se è lasciato nelle impostazioni di Default (cioè configurato sul canale ModBus numero 1) c'è un'instruzione che gli chiede di mandarci quasi tutte le misure, che scritta come stringa HexAscii è 01 04 0000 0009 300c
Ovviamente ogni strumento ModBus avrà le sue instruzioni, sta a te leggere il suo manuale.
Possiamo tanto per essere precisi controllare che l'istruzione sia OK (avremmo potuto sbagliare a copiare) con il pulsante CRC? che controlla che la stringa HexAscii abbia al suo interno un CRC ModBus corretto. Sì, premuto questo ci dice CRC OK.
Possiamo quindi fare un test di lettura strumento cliccando Test!. Ecco cosa ci ha risposto lo strumento:
Adesso che questa azione esiste sarà elencata, come tutte le azioni/letture, nel gruppo di canali/sorgenti disponibili quando si
crea una nuova variabile. Nella
pagina dedicata alle variabili facciamo proprio un esempio di come si può scegliere quest'azione come "sorgente" e come prendere una variabile: nei dati qui c'è tensione, corrente, potenza, frequenza, insomma si potrebbero prendere diverse
variabili...
Non è proprio il massimo spezzare un esempio in due... ma l'esigenza di "spezzare" nasce dal fatto che esiste la possibilità di definire ingressi di dati e *un* ingresso/flusso di dati può contenere *più variabili* - quindi non si può proprio fare altrimenti!