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

sabato 25 novembre 2017

Home Automation System - I primi sensori...




Dopo aver fatto un pò di esperimenti e preso dimestichezza con OpenHAB è arrivato il momento di costruire il primo sensore da inserire nel nostro sistema di Home Automation.

Partiamo dalla cucina, dove voglio inserire un rilevatore di gas, un sensore di temperature e di umidità.

Il tutto verrà controllato da una scheda ESP8266 NodeMcu. Ho scelto questa scheda in quanto ha già il Wifi integrato, gestisce numerosi ingressi digitali più uno analogico, è programmabile come Arduino e soprattutto...costa molto poco...Su Banggood sono riuscito a portarne due a casa al costo di € 2,76 l'una, non male...

Per chi fosse interessato qui c'è il link del prodotto:

Geekcreit-Doit-NodeMcu-Lua-ESP8266 su Banggood.com


I sensori che andrò ad utilizzare sono i seguenti:

- Sensore di Gas MQ-4: sensibile principalmente al metano (quello che interessa a me...) e anche al propano e butano. Questo sensore lo avevo già utilizzato per qualche esperimento con Arduino qualche mese fa. Eccolo


Sensore Gas MQ-4 su Banggood.com

- Sensore di Temperatura / Umidità DHT11: è un sensore molto economico (con poco più di 5 euro ne ho acquistati 5) e il rilevamento della temperatura ha un errore di +/- 2°C e misura solo temperature positive. La temperatura viene rilevata con massima precisione di 1°C, quindi niente cifre decimali...A causa di queste limitazioni ho deciso di acquistare ed utilizzare i sensori della Dallas, i ds18b20 (sia per esterno che per interno...)...questo DHT11 lo utilizzerò solo per l'umidità


Pacco da 5 su Banggood.com

Pacco da 3 su Banggood.com

Sensore singolo su Banggood.com

- Sensore di Temperatura Dallas ds18b20: rispetto al precedente ha una precisione di mezzo grado e permette di misurare anche temperature negative, quindi è l'ideale per misurare temperature esterne (cosa che ho in progetto di fare...utilizzando la versione sonda da esterno)


Sensore singolo su Banggood.com

Pacco da 5 su Banggood.com

Sonda da esterno su Banggood.com

Faccio qualche prova con i diversi sensori utilizzando una breadboard...


...finchè non trovo la configurazione corretta...quindi mi creo una schedina "definitiva" in maniera un pò artigianale...



Oltre alla scheda ESP8266 e ai sensori, ho aggiunto un led di indicazione della trasmissione dei dati e un connettore per l'alimentazione esterna. La scheda infatti viene alimentata attraverso un piccolo alimentatore 5V 450mA, connesso alla morsettiera azzurra vicino alla scheda. In questo modo, oltre ad alimentare al scheda, alimento anche i diversi sensori.

Il led, il ds18b20 e il DHT11 sono connessi ad ingressi/uscite digitali mentre il sensore del gas MQ-4 è connesso all'unico ingresso analogico presente sulla scheda.

E' arrivato il momento di scrivere il software di gestione...come ambiente di sviluppo ho deciso di utilizzare Visual Studio Code, con estensione Platformio...lo trovo molto comodo e leggero, rispetto all'IDE di Arduino...La scelta è ricaduta su questo ambiente anche perchè esiste un plugin per OpenHAB, che permette di editare in maniera evoluta i file di configurazione (tipo Eclipse SmartHome Designer, ma molto più user-friendly...parere soggettivo...). In questo modo ho un unico ambiente per tutto.

Il software fa in modo che la schedina, tramite il wifi di casa, si connetta al broker MQTT di OpenHAB, acquisisca i dati dei sensori ed invii un messaggio in formato Json sul topic nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state.

La campionatura dei sensori avviene ogni 5 secondi mentre ogni minuto la media delle campionature viene inviata al server. Al momento dell'invio dei dati al server, il led verde lampeggia 3 volte per indicare l'attività di rete in corso.

Ecco un esempio di messaggio inviato dal device al broker MQTT:

{"gas":{"error":"","sensorValue":46.33333,"ppm":0.431016,"percentage":0.000043,"realValue":829.0371},"tempHum":{"error":"","humidity":63.66667,"tempC":22,"tempF":71.59999,"heatIndexC":21.91774,"heatIndexF":71.45234},"temp":{"error":"","tempC":21.66667,"tempF":70.99999}}


Il blocco gas è relativo al sensore MQ-4, il blocco tempHum al DHT11 e il blocco temp al ds18b20

Per adesso ho deciso di mantenere i dati di temperatura di entrambi i sensori per metterli a confronto e vedere come si comportano.

Bene, sembra tutto funzionare...metto quindi il dispositivo al suo posto in cucina


Adesso tocca ad OpenHAB...devo configurarlo per permettere di ricevere i dati e pubblicarli sulla sitemap. Una volta fatto questo, posso anche configurare una nuova dashboard su Grafana, per valutare l'andamento nel tempo dei dati acquisiti.

In OpenHAB non devo far altro che aggiungere i nuovi items per ricevere le informazioni da MQTT. Creo allora un nuovo file chiamato esp8266mcu11.items (esp8266mcu11 è l'identificativo univoco che ho assegnato al dispositivo appena nato...) nella cartella /etc/openhab2/items e aggiungo le seguenti linee:

Number MainFloor_KitchenTemperature "Kitchen Temperature [%.1f °C]" <temperature>
(gPersistence)
{mqtt="<[openhabianpi-mqtt:nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state:state:JSONPATH($.tempHum.tempC)]" }

Number MainFloor_KitchenTemperatureNew "Kitchen Temperature NEW [%.1f °C]" <temperature>
(gPersistence)
{mqtt="<[openhabianpi-mqtt:nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state:state:JSONPATH($.temp.tempC)]" }

Number MainFloor_KitchenHumidity "Kitchen Humidity [%.1f %%]" <humidity>
(gPersistence)
{mqtt="<[openhabianpi-mqtt:nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state:state:JSONPATH($.tempHum.humidity)]" }

Number MainFloor_KitchenGasPpm "Kitchen Gas [%.2f ppm]" <carbondioxide>
(gPersistence)
{mqtt="<[openhabianpi-mqtt:nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state:state:JSONPATH($.gas.ppm)]" }

Number MainFloor_KitchenGasValue "Kitchen Value [%.2f]" <carbondioxide>
(gPersistence)
{mqtt="<[openhabianpi-mqtt:nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state:state:JSONPATH($.gas.realValue)]" }

Tocca poi alla sitemap...aggiungo le seguenti righe:

Frame label="Gas Detection" {
Text item=MainFloor_KitchenGasPpm valuecolor=[>800="red",>600="orange",<=600="green"]

}

Frame label="Kitchen" {
Text item=MainFloor_KitchenTemperatureNew
Text item=MainFloor_KitchenHumidity
}



E questo è il risultato:


Ottimo, ho aggiunto un altro mattoncino...adesso creiamo la nuova dashboard in Grafana con i dati di temperatura, umidità e gas in cucina:


Ultimo step è quello di aggiungere il dispositivo al monitoraggio della rete...in modo tale che OpenHAB mi notifichi nel caso vada offline. Allora tramite PAPERUI aggiungo il dispositivo di rete utilizzando il Network Binding e ne creo i relativi items, linkando i channels. L'item relativo alla presenza online del dispositivo lo aggiungo al gruppo gNetworkCheck e da adesso in poi il suo stato di presenza in rete sarà monitorato da OpenHAB.