Integración de datos del registrador ESP8266 / DSRM con Home-Assistant

Colocado en

Plataforma: MQTT

La forma más sencilla de compartir datos en un ESP8266 con Home-Assistant (HA) es a través de un intermediario MQTT. Un agente MQTT es un servicio que se ejecuta en la instalación de HassIO de HA de forma predeterminada. MQTT significa Transporte de telemetría de Message Queue Server y consta de clientes que se comunican con un servidor (el 'broker'). Un cliente puede ser tanto un suscriptor (alguien que solicita datos) como un publicador (alguien que proporciona datos). La información se agrupa en 'temas'. Si un editor tiene nueva información, la envía al corredor. Luego, el corredor se asegura de que cada cliente que tenga una suscripción a este tema específico reciba esta nueva información.

Los temas están organizados jerárquicamente, lo que significa que un tema, por ejemplo “ESP8266/Abc/Temperatura”, consta de “ESP8266, bajo el cual está “Abc” y bajo el cual está “Temperatura”. Por ejemplo, la jerarquía "ESP8266/Abc/" también puede contener "Presión de aire" (ESP8266/Abc/Presión de aire). Si un cliente tiene una suscripción solo a "ESP8266", ¡entonces también recibirá todos los mensajes que se incluyen en él!

Si un nuevo cliente se registra con interés en un tema determinado, este cliente recibirá inmediatamente la información más reciente sobre este tema. Por lo tanto, el suscriptor no tiene que esperar una actualización de este tema. Siempre obtiene, al instante, la última información conocida.

Si el corredor MQTT (mosquitto) no está instalado en su Raspberry Pi , aún puede hacerlo:

pi@frambuesa:~ $ sudo apt actualizar
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
Para luego iniciar automáticamente el servidor mosquitto cuando inicie su RPi, ingrese:

pi@raspberry:~ $ sudo systemctl enable mosquitto.service
Hasta aquí la teoría.

Integración

La integración entre ESP8266 y Home-Assistant a través de MQTT se ve esquemáticamente así:
ESP/MQTT/HA ESP/MQTT/HA
Para poder conectarse a un corredor MQTT con el ESP8266, la biblioteca pubsubcliente por Nick O'Leary
instalarse en el IDE Arduino (https://github.com/knolleary/pubsubclient).

Como ejemplo, usamos un proyecto en el que el ESP8266 lee un sensor BMP085 (GY-68) y envía los datos al intermediario MQTT.

Tengo el circuito como se muestra en la imagen de abajo. 1 de! prototipo placa (izquierda) soldada y el croquis en la 1o!-ESP12 señal (derecha) destella.
1de!-ESP12 Proto GY68 1de!-ESP12 Proto GY68
Después de instalar la biblioteca antes mencionada, hay debajo de "Archivo->Ejemplos” / ”Archivo->Ejemplos” colocó una serie de programas de ejemplo en “PubSubCliente”. Para esta introducción asumimos el programa “mqtt-esp8266” y todos los números de línea se refieren a las posiciones en el boceto original!

Después de la línea 27, se deben agregar las siguientes dos líneas:
#include 
#incluye
Por supuesto, primero debe descargar la biblioteca "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) e instalarlo en el IDE Arduino !

Las líneas 31, 32 y 33 necesitan ser modificadas para su instalación.
31 const char* ssid = "........";
32 const char* contraseña = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Abeja ssid debes ingresar el nombre de tu red WiFi y al contraseña la contraseña de tu red WiFi. Abeja servidor_mqtt debe ingresar la dirección IP de su servidor HA (que en HA suele ser la misma dirección IP que su servidor HA).

Después de la línea 36 se debe agregar el siguiente código:
// Conecte VCC del sensor BMP085 a 3.3V (¡NO 5.0V!)
//Conectar GND a Tierra
// Conectar SCL al reloj i2c - en GPIO05
// Conectar SDA a datos i2c - en GPIO04
Adafruit_BMP085 bmp;
y en setup() después de la línea 113 agregue esto:
si (!bmp.begin()) >
El boceto tiene uno suscripción sobre el tema "enTema” y publica sobre el tema “fuera de tema”.

Si llega un mensaje sobre el tema “inTopic”, la función pasa a ser llamar de vuelta()llamado donde, en el programa de ejemplo, en las líneas 73 a 80, según el contenido del mensaje, BUILTIN_LED se enciende o se apaga. No usaré esta funcionalidad y estos temas en esta publicación.

Debido a que principalmente queremos enviar datos desde ESP8266 a HA para esta publicación, crearemos una función adicional que se ve así:
Esta función lee el BMP085 e imprime los valores encontrados en el Monitor Serial y publica estos datos. El tema principal es “ESP8266”. El subtema"esteDevID” debe modificarse en un entorno de producción en “algo” que pueda identificar de manera única este 'módulo sensor' (en caso de que tenga más de uno) y debajo de eso una indicación que indique el tipo de datos (Temperatura, Presión barométrica y Altitud). Los valores reales se envían como una cadena json.

A continuación, cambiamos la función loop() de la siguiente manera:
bucle vacío () > // bucle()
Si tienes un nombre de usuario y contraseña ha configurado, debe usar esta información cuando se conecte al corredor. Después de la línea 33, agregue las siguientes dos líneas:
char* mqttName = "..."; // nombre para inicio de sesión MQTT
char* mqttPasswd = "..."; // .. y su contraseña
La línea 92 dice:
92 si (cliente.conectar(clienteId.c_str())) {
necesitas ajustarlo de la siguiente manera:
 92 si (cliente.conectar(clienteId.c_str(), mqttName, mqttPasswd)) {
Si ahora subes el programa al ESP8266 verás en el Monitor Serie:
Salida ESP8266 MQTT Salida ESP8266 MQTT
Ahora inicie sesión en su servidor HA e ingrese:
mosquitto_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
La instalación de MQTT en Raspberry Pi se llama 'mosquitto'. Con el comando anterior iniciamos un cliente que se conecta al servidor MQTT en la dirección IP especificada (que en muchos casos será la misma dirección IP que la dirección IP del servidor HA) con el nombre de usuario y la contraseña que ingresó para configurar el servidor MQTT. La opción “-t” indica que solo nos interesan los temas que comienzan con “ESP8266/”.

A continuación, verá aparecer la siguiente información:
mosquito_sub mosquito_sub
Ahora que sabemos con certeza que los mensajes del ESP8266 terminan en el intermediario MQTT, podemos intentar que HA extraiga estos valores de MQTT y los presente en su front-end.

HA necesita saber con quién debe ponerse en contacto el agente de MQTT. Por eso lo estamos tomando configuración.yaml archivar estos datos en:
mqtt:
intermediario:
franqueo: 1883
id_cliente: HassIO
mantener vivo: 60
nombre de usuario:
contraseña:
Tengo todas las configuraciones de mi grupo en la carpeta ./grupos y todos los archivos yaml de configuración de mi sensor en la subcarpeta ./sensores. lo tengo para eso configuración.yaml también incluye estas reglas:
grupo: !include_dir_merge_named grupos/
sensor: !include_dir_merge_list sensores/
en el mapa ~/.homeassistant/sensores/ vamos a crear un nuevo archivo llamado esp8266.yaml que tiene este contenido:
En esto decimos que queremos usar la plataforma mqtt, que dentro de las configuraciones los ítems “ESP8266_Temperatura”, “ESP8266_Presión de aire" y "ESP8266_Altura” ocurren y los datos de la publicación “ESP8266/este ID de dispositivo/xxx” debe extraerse de la cadena json.

Luego añadimos en la carpeta ~/.homeassistant/grupos el archivo esp8266.yaml con el siguiente contenido:
Después de reiniciar Home-Assistant podemos admirar los datos en el Front-end.
interfaz de alta disponibilidad interfaz de alta disponibilidad

Plataforma: restAPI

Home-Assistant también puede recuperar datos de otros sistemas (por ejemplo, del registrador DSMR) a través de una restAPI.

en el mapa ~/.homeassistant/sensores Por ejemplo, debe ingresar la siguiente información:
Sin embargo, si restAPI devuelve múltiples datos con una solicitud, este enfoque tiene la desventaja de que si llama a restAPI para cada campo, hay una gran cantidad de datos”.se pasa de la raya"y que el sistema externo también está bastante cargado. Opté por un enfoque diferente para leer el lector de medidor inteligente (registrador DSMR).

Plataforma: Archivo

Para leer el registrador DSMR, elegí que Home-Assistant extrajera los datos de un archivo. Ese archivo está en la misma computadora que también ejecuta Home-Assistant, lo que minimiza la sobrecarga.

Funciona así:
DSMR - Asistente para el hogar DSMR - Asistente para el hogar
Cron es el demonio de Unix/Linux que inicia trabajos en función del tiempo. En nuestro caso, tiene que iniciar el script de Python "DSMR_Actual.py" cada minuto. Con el comando 'crontab -e' (¡¡como usuario root!!) puedes agregar la siguiente línea en crontab:
# Para obtener más información, consulte las páginas de manual de crontab(5) y cron(8)
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow comando
# cada minuto
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
El programa DSMR_Actual.py tiene los siguientes contenidos:
En la línea 5, se proporciona a 'url' el valor de la API restante del registrador DSMR que se utiliza para solicitar los datos actuales. La línea 6 convierte esto en una solicitud al registrador DSMR y la línea 9 detiene la respuesta de
el registrador DSMR en la variable 'r' que luego se decodifica en la línea 10 y se coloca en la variable 'respuesta'. Finalmente, json.dump() escribe el contenido de la respuesta en el archivo '/tmp/DSMR-Actual.json'.

El contenido del archivo '/tmp/DSMR-Actual.json' tiene este aspecto:
Para dejar las cosas un poco claras, he colocado todos los programas y scripts que uso para Home-Assistant (HA) en la carpeta ~/.homeassistant/guiones/ interrumpido.

Ahora solo tenemos que dejarle claro a HA que quieren extraer los datos del registrador DSMR del archivo /tmp/DSMR-Actual.json debe obtener.

Tengo todos los sensores en el mapa. ~/asistente doméstico/sensores interrumpido. En el configuración.yaml archivo tengo la siguiente referencia:
grupo: !include_dir_merge_named grupos/
sensor: !include_dir_merge_list sensores/
Estas reglas aseguran que todos los archivos .yaml que están en la carpeta grupos/ o sensores/ ser guardado como un archivo de configuración de la instalación HA
analizada y registrada.

Uno de los archivos de configuración del sensor es DSMT_Actueel.yaml. Este tiene el siguiente contenido:
Para obtener estos datos en el front-end de HA, la carpeta ~/.homeassistant/grupos/ un archivo registrador DSMR.yaml se crean con el siguiente contenido:
Con el reinicio de Home-Assistant podemos admirar los datos del lector Smart Meter:
Home Assistant Energía real Home Assistant Energía real
Ya no está disponible
Módulo WIFI ESP8266 ESP-01SEl módulo WiFi ESP8266 se presentó como un módulo TTL "Serial to Internet" en su presentación. Útil para conectar placas Arduino a Internet. En stock € 4,55
Publicado por Sitio web Willem Aandewiel (1955) tiene experiencia en electrónica y técnicas digitales. Sin embargo, la mayor parte de su vida laboral ha trabajado en automatización, donde ha trabajado en casi todas las disciplinas, desde programador hasta líder de proyecto y gerente de proyecto. Willem fue uno de los primeros holandeses con una microcomputadora (KIM-1, 1976) en un momento en que aún no se había inventado la PC. Actualmente se dedica principalmente al diseño y producción de pequeños circuitos electrónicos con microprocesadores. Su 'misión en la vida' es hacer que la gente se entusiasme con la fabricación de sus propios circuitos electrónicos, microcomputadoras y programación.

Comentarios

Webwinkelkeur Kiyoh Trustpilot Opencircuit