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 
  • quando richiesto eventualmente da remoto con comando HTTP o MQTT 
  •  
    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. 
     
    L'utente può memorizzare un numero a piacere di Azioni dando loro un nome. Quando si stabilisce una condizione (clic qui per la spiegazione completa del mattoncino "condizioni") essa può richiamare 1 o 2 azioni esistenti 
     
    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 
    Azioni lista edita play canc 
     
    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. 
    MQTT ModBus Web HTTP 
     
    La selezione "lettura: da risposta permetti prelievo variabile" normalmente non è attiva per le azioni esecutive, è usata invece per le azioni/lettura (che trattiamo più in basso...)
     
    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 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 $). 
     
    Utilizzo di espressioni speciali nel corpo/comando delle azioni: delay e assegnazione variabili 
    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 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. 
    Esempi: 
    controlhub delay(100) 
    effettua una pausa di 100 millisecondi 
    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 sono 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. 
    Tutte le cose sopra (e molte altre) è ovviamente interessante poterle in qualche modo fare, acquisire la risposta, e poi poter mettere i dati dentro delle variabili (il primo mattoncino di ControlHUB) in modo da poterli usare dappertutto... 
    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). 
    leggi dati da Web 
     
    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: 
    lettura dato da 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...). 
    Lo abbiamo collegato ai morsetti A e B di ControlHUB ed abbiamo definito le impostazioni nella pagina di configurazione WiFi / MQTT / ModBus
    Supponiamo di volerlo leggere ogni 10 minuti, per poi poter utilizzare in qualche modo queste grandezze misurate. 
    Creiamo una nuova azione come in figura: 
    lettura misuratore ModBus 
     
    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: 
    risposta strumento ModBUS 
     
    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! 
     
     
    Mattoncini: dati/variabili... - azioni/letture (SEI QUI) - condizioni/espressioni... 
    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