Taula de continguts:

Integració del comptador Geiger Assistant Home: 8 passos
Integració del comptador Geiger Assistant Home: 8 passos

Vídeo: Integració del comptador Geiger Assistant Home: 8 passos

Vídeo: Integració del comptador Geiger Assistant Home: 8 passos
Vídeo: How to give great customer service: The L.A.S.T. method 2024, Desembre
Anonim
Image
Image
Principi de treball
Principi de treball

En aquest tutorial us mostraré com afegir sensors personalitzats a HASS (assistent domèstic) més concretament a un comptador geiger, però el procés també és similar per a altres sensors.

Utilitzarem la placa NodeMCU, un comptador geiger basat en arduino i un assistent domèstic ja instal·lat.

La integració es basarà en un servidor MQTT (públic o privat) i us faré pas a pas.

En cas que no sàpiga què és assistent a la llar, visiteu la seva pàgina https://www.home-assistant.io/. És una coneguda plataforma domòtica molt ben mantinguda i molt personalitzable.

Aprendràs sobre:

- Configuració avançada per a Home Assistant

- NodeMCU (placa de desenvolupament) i com programar-lo amb l'IDE Arduino

- OTA (actualitzacions over the air) mitjançant l'IDE Arduino per a la placa NodeMCU

- Com connectar un dispositiu sèrie al NodeMCU

- instal·lar manualment un servidor MQTT a Linux (opcional)

Supòsits bàsics:

- teniu Home Assistant en funcionament

- Coneixes una mica l'electrònica

- teniu Arduino IDE instal·lat

Pas 1: peces i eines

Parts:

1. Tauler NodeMCU

2. pa de pa

3. cables juper masculí i masculí i femení

3. cable USB a micro USB

4. comptador geiger arduino amb interfície sèrie

(cerqueu a Ebay "arduino geiger couter")

5. material radioactiu (opcional una petita mostra de prova)

Eines:

1. ID Arduino

2. Home Assistant instal·lat

Pas 2: Principi de treball

El nostre objectiu és mostrar a HomeAssistat (HASS) les lectures del comptador Geiger. Per un costat, tenim un servidor HASS funcionant en algun lloc, pot ser un raspberry pi o un altre dispositiu i, per l'altre, tenim el comptador geiger.

El comptador geiger té un port sèrie, una solució serà connectar directament el port sèrie al RaspberryPi on funciona el HASS.

Alguns motius pels quals potser no és una bona idea:

- allà no hi ha espai físic

- Tenim algun altre dispositiu al port sèrie

- volem connectar un sensor ambiental que s’ha de col·locar a l’exterior en lloc del comptador geiger

D'acord, així que explorarem una altra possibilitat de fer la connexió a través de WIFI:

El HASS admet la lectura de dades del sensor i mostra que mitjançant un servidor MQTT, aquest tipus de servidor és una connexió de poc pes per a dispositius petits, un dispositiu publica un missatge sobre un "tema" i l'altre escolta sobre aquest tema per rebre el missatge. Per tant, HASS escoltarà i necessitarem alguna cosa que publiqui el missatge.

El nostre sensor només sap parlar per la línia de sèrie, de manera que utilitzarem una placa que pot llegir una línia de sèrie i que es pot connectar a través de WIFI i parlar amb el servidor MQTT. Un tauler barat que ho fa és el NodeMCU.

El NodeMCU es pot programar amb Arduino IDE. L’esbós és força senzill, fa el següent:

- es connecta a WIFI

- manté una connexió MQTT amb el servidor i torna a intentar la connexió quan falla o es desconnecta

- escolta les dades entrants en sèrie com una sèrie de enters

- un cop arriba un nombre enter, l'envia a través de MQTT a un tema específic

Pas 3: munteu el dispositiu

Munteu el dispositiu
Munteu el dispositiu

Utilitzarem taulers de connexió i cables, de manera que és bastant senzill, tenim uns quants passos:

- col·loqueu el NodeMCU a la pissarra

- connecteu el tub Geiger al comptador Geiger (vigileu la polaritat)

- VIN va al comptador geiger +

- GND és el millor per comptador geiger -

- NodeMCU D7 (pin 13) va a Geiger TX

- NodeMCU D8 (pin 15) va a Geiger RX

- alimentar NodeMCU mitjançant micro USB des de l'ordinador

Pas 4: pengeu el codi

Pengeu el codi
Pengeu el codi
Pengeu el codi
Pengeu el codi
Pengeu el codi
Pengeu el codi
Pengeu el codi
Pengeu el codi

Utilitzarem Arduino IDE i ens assegurarem que tenim la placa NodeMCU instal·lada i la biblioteca Adafruit_MQTT instal·lada.

1. Cloneu el dipòsit de github: https://github.com/danionescu0/arduino i copieu l'esbós dels projectes / HASSGeigerIntegration a la ubicació del vostre quadern de dibuixos arduino.

2. Obriu Arduino IDE i instal·leu NodeMCU

- aneu a Fitxer -> Preferències, als URL del Gestor de taulers addicionals, afegiu https://arduino.esp8266.com/stable/package_esp8266com_index.json si ja teniu alguna cosa, poseu-hi un coma al davant i feu clic a D'acord

- des d'Eines -> Tauler -> Gestor de taules, escriviu "nodemcu" i seleccioneu l'entrada esp8266 per la comunitat ESP8266 i premeu instal·lar

3. Instal·leu Adafruit_MQTT

- aneu a Eines -> Gestiona biblioteques -> cerqueu "Adafruit_MQTT" i instal·leu "Biblioteca Arduino MQTT"

4. Connecteu el cable USB a l'ordinador i configureu la placa:

- aneu a Eines -> Tauler -> seleccioneu NodeMcu 1.0

- Eines -> Port -> el vostre port USB

- deixeu els altres paràmetres sense canvis

4. A l'esbós, canvieu les vostres credencials WIFI perquè coincideixin amb les vostres:

#define STASSID "ssid" // Substitueix-lo pel SSID WIFI

#define STAPSK "pass" // Substitueix per la contrasenya WIFI

5. Pengeu l'esbós al tauler i després de la càrrega reinicieu el tauler des del botó

6. Obriu el monitor sèrie, si tot ha anat bé, hauríeu de veure alguna sortida com aquesta:

Arrencada

Adreça IP: 192.168.1.168 habilitat OTA Connexió a MQTT … MQTT connectat! {"radiació": 0,03}..

Pas 5: configureu HomeAssistant

Configureu HomeAssistant
Configureu HomeAssistant
Configureu HomeAssistant
Configureu HomeAssistant

Suposarem que teniu l’assistent domèstic en funcionament. Al meu sistema tinc la versió 3.12 de HASSOS en un RaspberryPi. Si la vostra versió d'assistent a la llar és massa antiga o molt nova, algunes funcions poden variar. Aquest tutorial funciona amb seguretat amb la versió 3.12.

Si no teniu instal·lat Home Assistant, consulteu la seva guia d'instal·lació oficial:

Abans d’avançar amb la instal·lació, assegureu-vos que el NodeMCU està connectat i que publica dades.

D'acord, aquí també tindrem una sèrie de passos per a la configuració:

1. Instal·leu "editor de fitxers" si no el teniu al menú, aquí teniu el tutorial oficial:

2. Editeu el fitxer "/config/configuration.yaml" i afegiu el següent i deseu-lo

- la secció mqtt si encara no la teniu

mqtt:

broker: broker.hivemq.com discovery: veritable descobriment_prefix: ha

- la secció de sensors

sensor:

- platform: mqtt name: "Radiation" state_topic: "ha / radiation" unit_of_measurement: 'uSv' unique_id: "radiation" value_template: "{{value_json.radiation}}"

3. Des de Configuració -> Controls del servidor: premeu "Comprova la configuració", comproveu si hi ha errors al fitxer de configuració yaml i, a continuació, premeu "reiniciar" i espereu fins que es reiniciï.

4. Des de Visió general -> Menú de l'extrem superior dret -> Configura interfície d'usuari -> premeu el botó + de la part inferior dreta

5. Seleccioneu "sensor" a la llista -> al camp "entitat" cerqueu "sensor.radiation", al camp del nom escriviu "Radiació" i feu clic a D'acord, hauria de ser a la pàgina principal ara

Pas 6: Configuració del vostre propi servidor MQTT [Opcional]

Discutim una mica sobre MQTT

“MQTT és un protocol de transport de missatgeria de publicació / subscripció del servidor client. És lleuger, obert, senzill i dissenyat de manera que sigui fàcil d’implementar. Aquestes característiques el fan ideal per utilitzar-lo en moltes situacions, inclosos els entorns restringits, com ara la comunicació en contextos de màquina a màquina (M2M) i Internet de les coses (IoT), on es requereix una petita petjada de codi i / o l’amplada de banda de la xarxa supera.”

Citació de l'especificació oficial MQTT 3.1.1.

Per tant, bàsicament podem publicar un missatge en algun costat i, de l’altra, podem escoltar aquests missatges i fer alguna cosa amb les dades. MQTT admet "temes", els temes són cadenes que el corredor utilitza per filtrar els missatges de cada client, de manera que si publiquem un missatge al tema "/ radiation", un oient s'ha de subscriure al mateix tema per obtenir els missatges que estem enviant.

Aquí teniu un gran tutorial sobre MQTT en detall:

Utilitzant el servidor gratuït de rusc hi ha alguns desavantatges com:

- Tothom que escolti el vostre tema rebrà els vostres missatges

- si baixa o requereix un pagament més endavant, no el podreu utilitzar (tret que pagueu)

- si algú que publica missatges sobre el mateix tema, també en rebrà els missatges, pot publicar missatges incompatibles i trencar els gràfics HASS

Utilització d’un servidor privat

Si no voleu utilitzar el servidor públic gratuït, teniu l'opció d'un servidor privat. Instal·larem el Mosquitto MQTT en un servidor ubuntu / debian com un raspberry pi o un ordinador.

Mosquitto és un servidor que implementa el protocol MQTT i és gratuït.

Per instal·lar-lo, inicieu sessió al vostre raspnerry pi o a un altre servidor basat en debian i executeu:

actualització sudo apt

sudo apt install -y mosquitto mosquitto-clients sudo systemctl habilita mosquitto.service

Això actualitzarà el dipòsit, instal·larà el client i el servidor mosquiito i li permetrà executar un servei a l'inici

Per obtenir l'execució de l'IP del servidor:

nom d'amfitrió -I

i produirà alguna cosa així:

192.168.1.52 172.17.0.1 172.18.0.1

Per tant, la meva IP és 192.168.1.52, a les ordres següents substituïu-la per la vostra pròpia IP

Podeu provar el servidor MQTT publicant un missatge i rebent-lo amb l’eina de la consola, per a això s’han d’obrir dos terminals que escoltin un missatge, un que publicarà el missatge.

Primer en un terminal executeu aquesta ordre per escoltar un missatge sobre "/ some-topic"

mosquitto_sub -h 192.168.1.52 -t / some-topic

Obriu un altre terminal i publiqueu un missatge sobre aquest tema:

mosquitto_pub -h 192.168.1.52 -t / some-topic -m '{"humitat": 74.0}'

Al primer terminal hauríeu de veure imprès "{" humitat ": 74.0}".

Atenció especial:

- aquesta configuració suposa que HASS, Mosquitto i NodeMCU estan connectats a la mateixa xarxa WIFI i no hi ha regles de tallafoc i es poden comunicar lliurement

- El servidor Mosquitt MQTT no té cap nom d'usuari / contrasenya, si voleu configurar les credencials, consulteu-ho: https://www.steves-internet-guide.com/mqtt-username-password-example/ També hauríeu de configurar les credencials a Home Assistant i a l'esbós d'arduino

Pas 7: OTA (Over the Air Updates) per al NodeMCU

Les actualitzacions a través de l'aire vol dir que la placa de desenvolupament es pot llançar de manera ràpida sense necessitat de cable físic.

Arduino IDE admet aquesta funcionalitat per a la sèrie ESP8266 i algunes altres plaques:

- requereix flash inicial pel cable USB

- crea un port virtual a través de WIFI i només és visible des d’Arduino IDE

- no hi ha informació de depuració en sèrie disponible

- Admet protecció amb contrasenya

Per habilitar OTA en un esbós ESP8266, primer cal incloure la biblioteca:

#include "ArduinoOTA.h"

Definiu també aquesta constant de contrasenya d'esbós:

#define SKETCHPASS "some_password"

A la secció de configuració, afegiu aquestes línies:

while (WiFi.waitForConnectResult ()! = WL_CONNECTED) {

Serial.println ("Error de connexió! Reinici …"); retard (5000); ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {Tipus de cadena; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Comença a actualitzar "tipus +);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nFin");}); ArduinoOTA.onProgress ( (progrés int sense signatura, total sense signatura) {Serial.printf ("Progrés:% u %% / r", (progrés / (total / 100)));}); ArduinoOTA.onError ( (error ota_error_t) {Serial.printf ("Error [% u]:", error); if (error == OTA_AUTH_ERROR) {Serial.println ("Error fallit");} else if (error == OTA_BEGIN_ERROR) {Serial.println ("S'ha produït un error");} else if (error == OTA_CONNECT_ERROR) {Serial.println ("Error de connexió");} else if (error == OTA_RECEIVE_ERROR) {Serial.println (" Error de recepció ");} else if (error == OTA_END_ERROR) {Serial.println (" Error final ");}}); ArduinoOTA.begin (); Serial.print ("adreça IP:"); Serial.println (WiFi.localIP ());

I a la secció del bucle, afegiu aquesta línia:

ArduinoOTA.handle ();

Després de carregar el codi inicial després de l’arrencada de la placa, hauríeu de veure a l’IDE Arduino a la secció Eines-> Port dos tipus de ports:

Ports sèrie: / dev / ttyUSB0 (per exemple)

Ports de xarxa: esp8266-xxxxx a 192.168.1.xxx

Ara podeu seleccionar el port de xarxa i penjar el comandament d'esbós, se us demanarà la contrasenya d'esbós (la que heu definit en una constant anterior).

Pas 8: Conclusions, treball futur

Aquest tutorial es pot modificar fàcilment per enviar dades sobre altres tipus de sensors:

- si NodeMCU admet el sensor directament a través d’una biblioteca, només cal que agrupeu les dades del sensor i que l’envieu directament a través de MQTT

- si la biblioteca de sensors no funciona amb NodeMCU, però només és per a Arduino, carregueu el vostre codi a l'arduino, envieu el valor a través de la línia serial i llegiu-lo al NodeMCU i feu-lo clic (igual que vam fer amb el comptador geiger)

Fins i tot el podem modificar per enviar dades de diversos sensors com ara:

- connecteu els vostres sensors al NodeMCU

- dades d'enquesta de cada sensor

- per a cadascun dels sensors publiqueu les dades a un tema diferent

- a la HASS definiu diversos sensors (com vam fer amb el geiger) que escoltaran diferents temes

Recomanat: