Disclaimer

Prestare sempre attenzione a seguire le indicazioni fornite in questo blog, soprattutto se si tratta di apparecchiature elettriche collegate alla tensione di 220V. Non mi ritengo responsabile di danni causati dall'aver seguito i consigli qui pubblicati.
Grazie

domenica 29 ottobre 2017

Home Automation System - Nuovi arrivi in posta...




Venerdì scorso, il postino ha bussato alla porta e mi ha portato alcuni nuovi giocattolini dalla Cina...


Tra gli altri, abbiamo

- un SONOFF B1, lampada RGB controllata via WiFi;
- un SONOFF 4Ch, 4 relay comandati via WiFi;
- alcuni sensori di temperatura / umidità DHT11
- alcune coppie di trasmettitori / ricevitori RF433
- un paio di ESP8266 NodeMCU

Il progetto va avanti...

martedì 24 ottobre 2017

Home Automation System - OpenHAB v.2 Piccolo miglioramento per il monitoring della rete




Dopo l'introduzione dei gruppi nel mio setup di OpenHAB v.2 ho migliorato leggermente la configurazione del monitoring di rete.

Ho infatti aggiunto un gruppo chiamato gNetworkCheck, che verrà assegnato a tutti i dispositivi che verranno tenuti sotto monitoraggio. Questo gruppo assumerà il valore ON quando tutti gli item contenuti saranno in stato ON, altrimenti OFF.

La regola che gestisce il monitoraggio a questo punto non viene definita per ogni dispositivo, ma direttamente sul gruppo; in questo modo ogni volta che aggiungo un dispositivo da monitorare, è sufficiente che esso venga assegnato anche al gruppo gNetworkCheck, senza dover scrivere una "rule" a lui dedicata.

Ho quindi modificato il mio file /etc/openhab2/rules/checks.rules, eliminando tutte le regole associate ai singoli "item" ed inserendone una sola relativa al gruppo:

rule "network check"
when
Item gNetworkCheck changed
then
val lastItem = gNetworkCheck.members.sortBy[lastUpdate].last
logInfo("rules", "NETWORK CHECK -> " + lastItem.name + " changed to " + lastItem.state)
sendNotification([user_to_be_notified], "NETWORK CHECK -> " + lastItem.name + " changed to " + lastItem.state)
end


Seguendo un suggerimento di un thread del forum di OpenHAB (https://community.openhab.org/t/determining-the-triggering-item-in-the-body-of-a-rule/2654/4?u=alex73) sono riuscito ad identificare l'elemento che ha scatenato il cambio di valore del gruppo. In questo modo lo posso indicare nel testo della notifica.

Ecco la sitemap aggiornata con l'indicazione del gruppo


mercoledì 18 ottobre 2017

Home Automation System - Usiamo i gruppi di OpenHAB v.2




Altro passo in avanti con OpenHAB v.2...parliamo di "gruppi"; leggendo la documentazione ufficiale (http://docs.openhab.org/configuration/items.html#groups) e dopo averli studiati un pochino mi sono reso conto che non sono delle semplici etichette per categorizzare gli items gestiti da OpenHAB, ma possono servire anche come "aggregatori di informazioni" nelle sitemap, essere utilizzati nelle "rules" ed avere un loro valore puntuale, derivato dai valori dei singoli items ad essi associati. Possono anche ricevere dei comandi che saranno inviati agli oggetti contenuti.

Il "gruppo" non è nient'altro che un item con delle particolarità. Esso infatti viene definito in un file .items presente nella cartella degli items. Ho quindi creato un file dedicato, chiamato groups.items, nella cartella /etc/openhab2/items ed ho iniziato a definire alcuni gruppi che mi potranno tornare utili nel proseguio della configurazione del sistema.

I gruppi possono essere annidati e quindi è possibile creare una vera e propria struttura gerarchica.

La sintassi la trovate nella documentazione ufficiale ed è molto semplice.

I gruppi che ho iniziato a creare mi serviranno per raggruppare gli item secondo i piani e le stanze della casa (main floor, first floor, kitchen, garden...), la tipologia di item (sensor, switch, network, etc etc...), l'utilizzo (lights, temperature etc etc...) e man mano che mi serviranno ulteriori categorizzazioni le andrò ad aggiungere...

Ho fatto in modo che alcuni di questi gruppi possano avere un loro valore, dipendente dai valori degli item / gruppi contenuti. Alcuni esempi:

- il gruppo gTemperatureFirstFloor conterrà tutti i sensori di temperatura presenti al primo piano e il suo valore sarà definito come la media dei valori di tutti i sensori;

- il gruppo gEnergyConsumer conterrà tutti i sensori di misurazione potenza consumata e il suo valore ne sarà la somma;

- il gruppo gLightSwitchGarden conterrà tutti gli switch delle luci del giardino ed il suo valore sarà un ON se almeno uno switch sarà in stato ON altrimenti OFF

Questi gruppi potranno essere inseriti anche nelle sitemap dove si potrà vedere il relativo valore (se lo hanno...) e, tramite un click, vedere tutti gli item / gruppi in esso contenuti, creando una vera e propria visualizzazione gerarchia.

Ad esempio, riprendiamo il gruppo delle luci esterne ed affianchiamogli i gruppi delle luci dei vari piani della casa: gLightSwitchFirstFloor, gLightSwitchMainFloor, gLightSwitchGroundFloor (all'interno di essi inseriremo gli items relativi agli switch delle luci...). Creiamo un nuovo gruppo chiamato gLightSwitch ed inseriremo al suo interno tutti i gruppi delle luci definiti prima.

Inserendo in una sitemap il gruppo gLightSwitch avremo a disposizione una navigazione gerarchica fino ad arrivare ai singoli items, passando dai gruppi intermedi, ognuno con il proprio valore riassuntivo; inviando comandi a gLightSwitch potremmo comandare, tramite un solo oggetto, l'accensione e lo spegnimento di tutte le luci di casa.


Ecco un video di esempio per la gestione delle luci


mercoledì 11 ottobre 2017

Home Automation System - OpenHAB v.2 e monitoring della rete locale




Per continuare nella scoperta e approfondimento di questo "affascinante" mondo di OpenHAB v.2 mi sono cimentato nella creazione di un piccolo sistema di monitoring della rete locale.

Per questo scopo OpenHAB v.2 ci offre un Binding 2.0 direttamente configurabile da interfaccia Paper UI: il Network Binding, attivabile facilmente dalla sezione Add-Ons

Come al solito la guida ufficiale è molto esaustiva: http://docs.openhab.org/addons/bindings/network/readme.html

Questo binding ci mette a disposizione uno strumento di scansione della rete tramite ping di sistema e/o port scanning per individuare i dispositivi che entrano ed escono dalla rete stessa. In questo modo ci permette di associare lo stato di ONLINE / OFFLINE ai vari dispositivi di rete censiti.

I nuovi Things saranno i dispositivi individuabili con l'indirizzo di rete e mettono a disposizione due canali:

- Online: ci permette di associare degli Items di tipo "switch" per rappresentare se un device è connesso alla rete o meno;

- Time: viene associato ad Items di tipo Number che memorizzano il tempo di risposta del device

Non appena installato il nuovo binding, i things vengono subito identificati e OpenHAB ce lo  notifica attraverso la voce di menù INBOX, in alto a sinistra (eventualmente si può forzare la ricerca utilizzando l'icona SCAN in alto a destra)


Una volta identificati gli apparati di rete che si vogliono monitorare, con dei semplici click si generano i Things e, tramite i Channels messi a disposizione, gli Items

Ecco un esempio di Thing -> Channels -> Item relativo al mio router


Ed ecco la pagina di configurazione del Thing "Home Router":


Oltre ai vari parametri di configurazione che si trovano ben descritti nella documentazione ufficiale (http://docs.openhab.org/addons/bindings/network/readme.html), io ho utilizzato anche quello chiamato "Location", nella parte alta, in modo tale da identificare fisicamente la posizione del dispositivo e raggruppare insieme quelli nello stesso luogo di casa.
Ho deciso di utilizzare come "Location" predefinite i piani della casa più il giardino, quindi per adesso il router lo inserisco al "primo piano".

Dopo aver aggiunto tutti i dispositivi che voglio monitorare, per verificare che tutto funzioni correttamente, vado nella sezione "Control" e seleziono la location "First Floor".
Ecco il risultato:



Non mi rimane altro che pubblicare queste informazioni sulla sitemap. Andiamo quindi sul nostro editor SmartHome Designer e apriamo il file /etc/openhab2/sitemaps/test.sitemap.

Aggiungiamo, subito sotto la sezione "General", un nuovo frame chiamato Network in cui inseriamo gli Items appena creati in Paper UI. Per fare questo aggiungiamo le seguenti righe:

Frame label="Network" {
Switch item=HomeRouter_Online  label="Home Router"      icon="switch"
Text   item=HomeRouter_Time   label="Home Router Time [%s ms]"       icon="network"
Switch item=LamanNAS_Online label="LamanNAS"        icon="switch"
Text   item=LamanNAS_Time label="LamanNAS Time [%s ms]"      icon="network"
}

(HomeRouter_Online/Time e  LamanNAS_Online/Time sono i nomi degli Item così come li possiamo vedere su Paper UI).

Ecco il risultato:


Per rendere tutto più "vivo" e soprattutto utile, non mi resta che creare una regola per ogni dispositivo per far sì che mi venga notificato quando avviene il passaggio da ONLINE a OFFLINE e viceversa...

Andiamo quindi a modificare il nostro file /etc/openhab2/rules/checks.rules, dove troviamo già la regola per la notifica degli aggiornamenti di TASMOTA, aggiungengo le seguenti righe:

rule "home router check"
when
Item HomeRouter_Online changed
then
logInfo("rules", "HomeRouter_Online online status changed")
sendNotification([user_to_be_notified], " HomeRouter_Online online status changed ")
end





domenica 8 ottobre 2017

Home Automation System - Controllo degli aggiornamenti di TASMOTA con OpenHAB v.2




Un piccolo post riguardo l'inserimento in OpenHAB v.2 di una notifica automatica in caso di aggiornamento della versione del firmware TASMOTA per i SONOFF

Come abbiamo già scoperto in un post precedente e come si "intuisce" dalla documentazione ufficiale di TASMOTA (https://github.com/arendst/Sonoff-Tasmota/wiki/Upgrade#firmware-binary-sources), l'utente @smadds gestisce un broker MQTT pubblico "sonoff.maddox.co.uk:1883" sul quale viene pubblicato l'ultimo aggiornamento della versione del firmware TASMOTA su topic sonoff-version.

Sulla mia configurazione ho facilmente aggiunto un "item" legato, tramite MQTT, a questo valore che poi ho pubblicato sulla mia sitemap.

Per prima cosa ho dovuto creare una nuova connessione MQTT (chiamata sonoffmaddox-mqtt) al broker di @smadds, andando ad aggiungere al file /etc/openhab2/services/mqtt.cfg le seguenti righe:

sonoffmaddox-mqtt.url=tcp://sonoff.maddox.co.uk:1883
sonoffmaddox-mqtt.clientId=
sonoffmaddox-mqtt.user=
sonoffmaddox-mqtt.pwd=
sonoffmaddox-mqtt.qos=0
sonoffmaddox-mqtt.retain=true

Ho creato quindi un nuovo file nella cartella /etc/openhab2/items che ho chiamato general.items, nel quale ho inserito la seguente riga:

String      SonoffTasmotaVersion      "SONOFF Tasmota Version [%s]"     <settings>
{mqtt="<[sonoffmaddox-mqtt:sonoff-version:state:default]"}


Il mio item si chiama SonoffTasmotaVersion, è di tipo "String" ed è legato alla connessione mqtt sonoffmaddox-mqtt, topic sonoff-version. In questo modo tutte le volte che verrà pubblicato qualcosa sul topic sonoff-version del broker sonoff.maddox.co.uk:1883 il mio item verrà aggiornato.

Ultimo passaggio: aggiungere l'item nella sitemap, in modo tale da visualizzare sempre l'ultima versione disponibile di TASMOTA.

Per fare questo, modifico il solito file /etc/openhab2/sitemaps/test.sitemap, aggiungendo, in testa, la visualizzazione dell'item appena creato, all'interno di un "frame" chiamato "general":

Frame label="General" {
    Text item=SonoffTasmotaVersion
}

Ecco il risultato:



Per rendere tutto più utile, ho inserito una regola che mi notifica ogni volta che la versione di TASMOTA viene aggiornata.

Aggiungo quindi il file /etc/openhab2/rules/checks.rules ed inserisco le seguenti righe all'interno:

rule "tasmota version check"
when
Item SonoffTasmotaVersion changed
then

logInfo("rules", "New Tasmota Version " + SonoffTasmotaVersion.state)

sendNotification([user_to_be_notified], "New Tasmota Version " + SonoffTasmotaVersion.state)

end

La funzione sendNotification invia una notifica all'utente specificato; questa notifica viene visualizzata sui dispositivi mobile che hanno installato l'app di OpenHAB agganciata al cloud di OpenHAB (MyOpenHAB). La configurazione è molto semplice; basta seguire la guida ufficiale qui http://docs.openhab.org/addons/io/openhabcloud/readme.html

Attendo il prossimo aggiornamento per verificare che la regola funzioni.

lunedì 2 ottobre 2017

Home Automation System - Pulsanti e Switch esterni al SONOFF Basic con TASMOTA





Per utilizzare i SONOFF nel mio impianto luci, ho bisogno che siano attivabili, oltre che tramite OpenHAB anche fisicamente, tramite pulsanti e/o interruttori classici da parete.

Il modo più semplice è quello di usare un pulsante collegato direttamente ai pin del pulsante fisico presente nel SONOFF. Avevo già fatto una prova con il primo SONOFF Basic, come descritto in un post precedente (http://domoticaduino.blogspot.com/2017/08/home-automation-system-sonoff-e-mqtt_19.html).

In questo modo possiamo attivare e disattivare il SONOFF come se agissimo sul pulsante fisico. Ma nel mio caso, ho la necessità di dover controllare i SONOFF anche tramite interruttori/switch da parete. Leggendo la documentazione di TASMOTA, scopro che c'è la possibilità di collegare un pulsante o un interruttore al GPIO14. La cosa bella è che grazie a TASMOTA possiamo decidere se utilizzare un bottone o un interruttore; quindi attivare il SONOFF con un impulso (pulsante) oppure con un segnale continuo (interruttore).

Per fare questo occorre collegare il pulsante / interruttore al pin GPIO14 e al GND; entrambi i pin sono facilmente raggiungibili sul SONOFF Basic. Il GPIO14 è il pin non utilizzato sulla basetta dell'interfaccia seriale, mentre il GND lo ritroviamo subito di fianco (già utilizzato per la comunicazione seriale).





Una volta collegato il pulsante / interruttore non dobbiamo far altro che dire a TASMOTA che al GPIO14 è collegato uno SWITCH e configurare la modalità con cui dovrà lavorare.

Sull'interfaccia web del SONOFF, nel menù di configurazione modulo, vado a settare la tendina del GPIO14 con il valore 09 Switch1


Successivamente si dovrà settare il parametro SwitchMode, tramite Console. Se lavorerò con un pulsante, setterò il valore 3, se invece avrò un interruttore inserirò il valore 0.


Ecco un video con i test di entrambe le modalità