Tabla de contenido:

Home Assistant Integración del contador Geiger: 8 pasos
Home Assistant Integración del contador Geiger: 8 pasos

Video: Home Assistant Integración del contador Geiger: 8 pasos

Video: Home Assistant Integración del contador Geiger: 8 pasos
Video: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, Mes de julio
Anonim
Image
Image
Principio de trabajo
Principio de trabajo

En este tutorial, le mostraré cómo agregar sensores personalizados a HASS (asistente doméstico), más específicamente un contador Geiger, pero el proceso también es similar para otros sensores.

Usaremos la placa NodeMCU, un contador geiger basado en arduino y un asistente doméstico ya instalado.

La integración se basará en un servidor MQTT (público o privado) y te voy a llevar paso a paso con esto.

En caso de que no sepa qué es Home-Assistant, visite su página https://www.home-assistant.io/. Es una conocida plataforma de automatización del hogar que está muy bien mantenida y es altamente personalizable.

Aprenderás sobre:

- configuración avanzada para Home Assistant

- NodeMCU (placa de desarrollo) y cómo programarlo con el IDE de Arduino

- OTA (actualizaciones por aire) usando el IDE de Arduino para la placa NodeMCU

- cómo conectar un dispositivo serie al NodeMCU

- instalar manualmente un servidor MQTT en linux (opcional)

Supuestos básicos:

- tienes Home Assistant en funcionamiento

- sabes un poco de electrónica

- tienes Arduino IDE instalado

Paso 1: Piezas y herramientas

Partes:

1. Placa NodeMCU

2. pan de molde

3. cables de conexión macho-macho y macho-hembra

3. cable usb a micro usb

4.contador arduino geiger con interfaz serial

(busque en Ebay "arduino geiger couter")

5. material radiactivo (opcional una pequeña muestra de prueba)

Instrumentos:

1. IDE de Arduino

2. Home Assistant instalado

Paso 2: Principio de trabajo

Nuestro objetivo es mostrar en HomeAssistat (HASS) las lecturas del contador Geiger. Por un lado tenemos un servidor HASS en funcionamiento en algún lugar, puede ser un raspberry pi u otro dispositivo y por el otro lado tenemos el contador geiger.

El contador geiger tiene un puerto serie, una solución será conectar directamente el puerto serie a la RaspberryPi en la que se ejecuta el HASS.

Algunas razones por las que puede que no sea una buena idea:

- no hay espacio físico ahí

- tenemos algún otro dispositivo en el puerto serie

- queremos adjuntar un sensor ambiental que debe colocarse en el exterior en lugar del contador geiger

Ok, vamos a explorar otra posibilidad de hacer la conexión a través de WIFI:

El HASS admite la lectura de datos del sensor y muestra que a través de un servidor MQTT, este tipo de servidor es una conexión de peso ligero para dispositivos pequeños, un dispositivo publica un mensaje sobre un "tema" y el otro escucha sobre ese tema para recibir el mensaje. Entonces, HASS escuchará y necesitamos algo que publique el mensaje.

Nuestro sensor solo sabe hablar a través de la línea serie, por lo que usaremos una placa que pueda leer una línea serie y que pueda conectarse a través de WIFI y hablar con el servidor MQTT. Una placa barata que hace esto es la NodeMCU.

El NodeMCU se puede programar con Arduino IDE. El boceto es bastante simple, hace lo siguiente:

- se conecta a WIFI

- mantiene una conexión MQTT con el servidor y vuelve a intentar la conexión cuando falla o se desconecta

- escucha los datos entrantes en serie como una serie de números enteros

- una vez que llega un número entero, lo envía a través de MQTT a un tema específico

Paso 3: ensamble el dispositivo

Ensamblar el dispositivo
Ensamblar el dispositivo

Usaremos placas de prueba y cables, por lo que es bastante simple, tenemos algunos pasos:

- poner el NodeMCU en la placa de pruebas

- conecte el tubo geiger al contador geiger (cuidado con la polaridad)

- VIN va al contador geiger +

- GND va al contador geiger -

- NodeMCU D7 (pin 13) va a geiger TX

- NodeMCU D8 (pin 15) va a geiger RX

- alimentar NodeMCU a través de micro USB desde la computadora

Paso 4: cargue el código

Sube el código
Sube el código
Sube el código
Sube el código
Sube el código
Sube el código
Sube el código
Sube el código

Usaremos Arduino IDE y nos aseguraremos de tener instalada la placa NodeMCU y la biblioteca Adafruit_MQTT.

1. Clone el repositorio de github: https://github.com/danionescu0/arduino y copie el boceto de projects / HASSGeigerIntegration a la ubicación de su cuaderno de bocetos arduino

2. Abra Arduino IDE e instale NodeMCU

- vaya a Archivo -> Preferencias, en las URL del Administrador de tableros adicionales agregue https://arduino.esp8266.com/stable/package_esp8266com_index.json si ya tiene algo allí, ponga una coma al frente y haga clic en Aceptar

- desde Herramientas -> Tablero -> Board Manager escriba "nodemcu" y seleccione la entrada esp8266 por ESP8266 Community, y presione instalar

3. Instale Adafruit_MQTT

- vaya a Herramientas -> Administrar bibliotecas -> busque "Adafruit_MQTT" e instale la "biblioteca Arduino MQTT"

4. Conecte el cable USB a su computadora y configure la placa:

- vaya a Herramientas -> Tablero -> seleccione NodeMcu 1.0

- Herramientas -> Puerto -> su puerto USB

- dejar las otras configuraciones sin cambios

4. En el boceto, cambie sus credenciales de WIFI para que coincidan con las suyas:

#define STASSID "ssid" // Reemplace con su SSID WIFI

#define STAPSK "pass" // Reemplaza con tu contraseña WIFI

5. Sube el boceto a tu tablero y después de la carga reinicia el tablero desde el botón

6. Abra el monitor en serie, si todo ha ido bien, debería ver un resultado como este:

Arranque

Dirección IP: 192.168.1.168 OTA habilitado Conectando a MQTT… ¡MQTT Conectado! {"radiación": 0.03} …

Paso 5: Configurar HomeAssistant

Configurar HomeAssistant
Configurar HomeAssistant
Configurar HomeAssistant
Configurar HomeAssistant

Vamos a suponer que tiene un asistente doméstico en funcionamiento. En mi sistema tengo la versión 3.12 de HASSOS en una RaspberryPi. Si su versión de Home Assistant es demasiado antigua o muy nueva, algunas funciones pueden diferir. Este tutorial funciona con seguridad con la versión 3.12.

Si no tiene Home Assistant instalado, consulte su guía de instalación oficial:

Antes de continuar con la instalación, asegúrese de que NodeMCU esté conectado y esté publicando datos.

Ok, aquí también tendremos una serie de pasos para la configuración:

1. Instale el "editor de archivos" si no lo tiene en el menú, aquí está el tutorial oficial:

2. Edite el archivo "/config/configuration.yaml", agregue lo siguiente y guárdelo

- la sección mqtt si aún no la tienes

mqtt:

broker: broker.hivemq.com descubrimiento: verdadero prefijo_descubrimiento: ha

- la sección de sensores

sensor:

- plataforma: mqtt nombre: "Radiación" state_topic: "ha / radiación" unit_of_measurement: 'uSv' unique_id: "radiación" value_template: "{{value_json.radiation}}"

3. Desde Configuración -> Controles del servidor: presione "Verificar configuración", verifique que no haya errores en el archivo de configuración yaml, luego presione "reiniciar" y espere hasta que se reinicie

4. Desde Descripción general -> Menú de la esquina superior derecha -> Configurar interfaz de usuario -> presione el botón + en la parte inferior derecha

5. Seleccione "sensor" de la lista -> en el campo "entidad" busque "sensor.radiation", en el campo de nombre escriba "Radiación" y haga clic en Aceptar, debería estar en la página principal ahora

Paso 6: Configuración de su propio servidor MQTT [Opcional]

Discutamos un poco sobre MQTT

“MQTT es un protocolo de transporte de mensajería de publicación / suscripción de servidor cliente. Es liviano, abierto, simple y diseñado para que sea fácil de implementar. Estas características lo hacen ideal para su uso en muchas situaciones, incluidos entornos restringidos, como para la comunicación en contextos de máquina a máquina (M2M) e Internet de las cosas (IoT) donde se requiere una pequeña huella de código y / o el ancho de banda de la red es un bien escaso."

Cita de la especificación oficial MQTT 3.1.1.

Entonces, básicamente, podemos publicar un mensaje en algún lado de un lado y en el otro lado podemos escuchar esos mensajes y hacer algo con los datos. MQTT admite "temas", los temas son cadenas que el corredor utiliza para filtrar mensajes para cada cliente, por lo que si publicamos un mensaje en el tema "/ radiación", un oyente debe suscribirse al mismo tema para recibir los mensajes que estamos enviando.

Aquí hay un gran tutorial sobre MQTT en detalle:

Al usar el servidor de colmena gratuito, existen algunas desventajas como:

- cualquiera que escuche tu tema recibirá tus mensajes

- si baja o requiere un pago más adelante, no podrá usarlo (a menos que pague)

- si alguien que publica mensajes sobre el mismo tema, tú también recibirás sus mensajes, pueden publicar mensajes incompatibles y romper tus gráficos HASS

Usando un servidor privado

Si no desea utilizar el servidor público gratuito, tiene la opción de un servidor privado. Vamos a instalar Mosquitto MQTT en un servidor ubuntu / debian como una raspberry pi o una computadora.

Mosquitto es un servidor que implementa el protocolo MQTT y es gratis.

Para instalarlo, inicie sesión en su raspnerry pi u otro servidor basado en Debian y ejecute:

actualización de sudo apt

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

Esto actualizará el repositorio, instalará el servidor y el cliente mosquiito y habilitará un servicio para que se ejecute al inicio

Para ejecutar la ip del servidor:

nombre de host -I

y dará como resultado algo como:

192.168.1.52 172.17.0.1 172.18.0.1

Entonces mi ip es 192.168.1.52, en los siguientes comandos reemplácela con su propia ip

Puede probar el servidor MQTT publicando un mensaje y recibiéndolo con la herramienta de consola, para esto se deben abrir dos terminales, uno que escuche un mensaje y otro que lo publique.

Primero, en una terminal, ejecute este comando para escuchar un mensaje en "/ some-topic"

mosquitto_sub -h 192.168.1.52 -t / algún-tema

Abra otra terminal y publique un mensaje sobre ese tema:

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

En la primera terminal debería ver '{"humedad": 74.0}' impresa.

Atención especial:

- esta configuración asume que HASS, Mosquitto y NodeMCU están conectados a la misma red WIFI y no hay reglas de firewall y pueden comunicarse libremente

- el servidor Mosquitt MQTT no tiene nombre de usuario / contraseña, si desea configurar las credenciales, consulte esto: https://www.steves-internet-guide.com/mqtt-username-password-example/ También debe configurar las credenciales en Home Assistant y en el boceto de arduino

Paso 7: OTA (actualizaciones por aire) para NodeMCU

Las actualizaciones inalámbricas significan que la placa de desarrollo se puede flashear de forma inalámbrica sin la necesidad de un cable físico.

Arduino IDE admite esta funcionalidad para la serie ESP8266 y algunas otras placas:

- requiere flash inicial a través del cable USB

- crea un puerto virtual a través de WIFI y es visible solo desde Arduino IDE

- no hay información de depuración serial disponible

- admite protección con contraseña

Para habilitar OTA en un boceto ESP8266, primero incluya la biblioteca:

#include "ArduinoOTA.h"

También defina esta constante de contraseña de boceto:

#define SKETCHPASS "alguna_contraseña"

En la sección de configuración, agregue estas líneas:

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

Serial.println ("¡Conexión fallida! Reiniciando …"); retraso (5000); ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {String type; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Iniciar actualización "+ tipo);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nEnd");}); ArduinoOTA.onProgress ( (unsigned int progress, unsigned int total) {Serial.printf ("Progreso:% u %% / r", (progreso / (total / 100)));}); ArduinoOTA.onError ( (ota_error_t error) {Serial.printf ("Error [% u]:", error); if (error == OTA_AUTH_ERROR) {Serial.println ("Auth Failed");} else if (error == OTA_BEGIN_ERROR) {Serial.println ("Inicio fallido");} else if (error == OTA_CONNECT_ERROR) {Serial.println ("Conexión fallida");} else if (error == OTA_RECEIVE_ERROR) {Serial.println (" Error de recepción ");} else if (error == OTA_END_ERROR) {Serial.println (" Error de finalización ");}}); ArduinoOTA.begin (); Serial.print ("dirección IP:"); Serial.println (WiFi.localIP ());

Y en la sección de bucle agregue esta línea:

ArduinoOTA.handle ();

Después de cargar el código inicial después de que la placa se inicie, debería ver en el IDE de Arduino en la sección Herramientas-> Puerto dos tipos de puertos:

Puertos serie: / dev / ttyUSB0 (por ejemplo)

Puertos de red: esp8266-xxxxx en 192.168.1.xxx

Ahora puede seleccionar el puerto de red y cargar el boceto remoto, se le pedirá la contraseña del boceto (la que ha definido en una constante arriba)

Paso 8: Conclusiones, trabajo futuro

Este tutorial se puede modificar fácilmente para enviar datos sobre otros tipos de sensores:

- si su sensor es compatible directamente con NodeMCU a través de una biblioteca, simplemente agrupe los datos del sensor y envíelos directamente a través de MQTT

- si la biblioteca de sensores no funciona con NodeMCU pero es solo para Arduino, cargue su código en el arduino, envíe el valor a través de la línea serial y léalo en el NodeMCU y empújelo (como hicimos con el contador geiger)

Incluso podemos modificarlo para enviar datos desde múltiples sensores así:

- conecte sus sensores al NodeMCU

- datos de encuesta de cada sensor

- para cada uno de los sensores publicar los datos en un tema diferente

- en el HASS definimos múltiples sensores (como hicimos con el geiger) que escucharán diferentes temas

Recomendado: