Home Automation System - Costruiamo il primo sensore

in #technology7 years ago

I tempi sono ormai maturi per provare a costruire il nostro dispositivo da integrare in OpenHAB...

Iniziamo con qualcosa di facile facile...misuriamo temperatura, umidità e gas metano, costruendo una piccola schedina da mettere in cucina.



[Immagine dell'autore]

Andrò ad utilizzare i seguenti sensori, che ho già preventivamente acquistato (altrimenti ad aspettare i tempi di consegna dalla cina, mi sarebbe passata la voglia...):

  • Sensore di Gas MQ-4: per misurare principalmente la concentrazione di metano nell'aria (quello che interessa a me...) e, in misura ridotta, anche di propano e butano.
    Link per l'acquisto

  • Sensore di Temperatura / Umidità DHT11: uno dei sensori di temperatura più economici sul mercato (con poco più di 5 euro ne ho acquistati 5); ha una precisione di 1°C, quindi niente cifre decimali...Alla fine ho deciso di acquistare ed usare i sensori della Dallas, molto più precisi e affidabili... i ds18b20 (sia per esterno che per interno...)...il DHT11 lo utilizzerò solo per l'umidità
    Link per l'acquisto

  • Sensore di Temperatura Dallas ds18b20: rispetto al DHT11 ha una precisione di mezzo grado e misura anche temperature negative; ideale quindi per misurare all'esterno (cosa che mi interessa fare...)
    Link per l'acquisto DB18B20

Il tutto verrà utilizzato insieme alla scheda ESP8266 NodeMcu, utilizzata come microcontrollore. Questa scheda ha già il Wifi integrato, gestisce molti ingressi digitali ed uno analogico, è programmabile come Arduino e ...costa molto poco...Su Banggood sono riuscito a portarne due a casa al costo di € 2,76 l'una, non male.
Link per l'acquisto

Costruiamo il device

Per prima cosa mi costruisco il prototipo per fare tutte le opportune verifiche e scrivere il software...grazie alla breadboard è tutto molto facile...



[Immagine dell'autore]

Una volta trovata la configurazione ideale sia per posizionamento dei sensori che per cablaggi vari, mi creo una scheda pseudodefinitiva un pò artigianale...non sono molto bravo in queste cose...devo fare ancora molta pratica...



[Immagine dell'autore]



[Immagine dell'autore]

Come si vede dalle immagini ho aggiunto un led di indicazione della trasmissione dei dati e un connettore per l'alimentazione esterna. Utilizzerò infatti un piccolo alimentatore 5V 450mA che connetterò alla morsettiera azzurra vicino alla scheda. Oltre che per alimentare il NodeMCU, alimenterò anche i diversi sensori, che possono funzionare tutti a 5V.

Il led, il ds18b20 e il DHT11 sono tutti collegati ad ingressi/uscite digitali mentre l'unico collegamento analogico è quello del sensore del gas MQ-4.

Il software

E' arrivato il momento di scrivere il software per gestire il tutto, mettendo in pratica le nostre conoscenze di MQTT per l'integrazione con OpenHAB...per sviluppare utilizzo Visual Studio Code, con l'estensione Platformio...avrei potuto usare l'IDE standard di Arduino, ma questo lo trovo molto più comodo e leggero...Per Visual Studio Code esiste anche un plugin per OpenHAB, che permette di modificare in maniera semplificata i file di configurazione (tipo l'editor Eclipse SmartHome Designer, ma molto più user-friendly...chiaramente parere soggettivo...). Almeno facendo così posso utilizzare un unico ambiente per tutto.

In due parole ecco la logica che inserirò nel software:

  • tramite il wifi di casa, viene stabilita una connessione al broker MQTT di OpenHAB;
  • vengono acquisiti i dati dei sensori ogni 5 secondi;
  • viene inviato ogni minuto un messaggio MQTT in formato Json sul topic nodemcu/mainfloor/esp8266mcu11/temphumiditygas/state contenente la media delle campionature;
  • come feedback visivo, il led verde viene fatto lampeggiare per 3 volte nel momento dell'invio dei dati al server;

Di seguito un esempio di messaggio MQTT inviato:

{"gas":{"error":"","sensorValue":44.22222,"ppm":0.31016,"percentage":0.000044,"realValue":819.0372},"tempHum":{"error":"","humidity":62.16667,"tempC":22,"tempF":71.59999,"heatIndexC":21.91774,"heatIndexF":71.45234},"temp":{"error":"","tempC":21.66667,"tempF":70.99999}}

Il blocco denominato gas è del sensore MQ-4, quello chiamato tempHum è del DHT11 e il blocco temp è del ds18b20

Al momento invio i dati di temperatura di entrambi i sensori per effettuare un confronto...

Bene, dalle prove sembra funzionare tutto correttamente...metto quindi il prodotto finito in cucina, sopra i fornelli, collegando l'alimentatore 5V alla linea di corrente che alimenta la cappa, per non avere collegamenti volanti verso le prese di corrente a muro



OpenHAB e Grafana

A questo punto non mi rimane che configurare OpenHAB per far sì che riceva i dati e li pubblichi sulla sitemap ed eventualmente li metta a disposizione di Grafana per la pubblicazione degli stessi su una dashboard.

In OpenHAB aggiungo i nuovi items che riceveranno le informazioni da MQTT. Creo quindi un nuovo file chiamato esp8266mcu11.items (esp8266mcu11 è l'identificativo univoco assegnato al dispositivo...) nella solita cartella di configurazione /etc/openhab2/items aggiungendo le seguenti linee:

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

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

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

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

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

Configuro poi la sitemap, aggiungendo la visualizzazione dei dati degli item di cui sopra:

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
}

Ecco il risultato



[Immagine dell'autore]



[Immagine dell'autore]

Alla prossima puntata...

Sort:  

Congratulations! This post has been randomly Resteemed! For a chance to get more of your content resteemed join the SteemEngine network!

Ciao Marco, sempre interessantissimi i tuoi post!

grazie, gentilissimo

Coin Marketplace

STEEM 0.15
TRX 0.12
JST 0.025
BTC 55275.78
ETH 2457.15
USDT 1.00
SBD 2.18