Tutorial de MQTT para Home Assistant

En este tutorial de Home Assistant MQTT aprenderás a utilizar Home Assistant con datos MQTT, a guardar los datos en una base de datos InfluxDB y a crear dashboards con Grafana.

En este tutorial se aprende a utilizar Home Assistant en general y especialmente con datos MQTT.

Además, guardamos los datos MQTT en una base de datos InfluxDB antes de crear bonitos dashboards de series temporales con Grafana.

Para un sistema de hogar inteligente, Home Assistant no es la única herramienta que queremos usar. También necesitamos un agente MQTT externo para recibir y enviar mensajes MQTT porque el agente MQTT integrado de Home Assistant está obsoleto. En este tutorial, usamos Eclipse Mosquitto como un servidor MQTT ligero de código abierto.

En Home Assistant, puede mostrar métricas como temperaturas como gráficos de series de tiempo, pero en mi opinión, esos gráficos no se ven muy bien. Además, los datos sin procesar solo se guardan durante un tiempo determinado y no son persistentes. Por lo tanto, utilizamos la combinación de InfluxDB para almacenar todas las métricas de MQTT y Grafana para crear gráficos de series de tiempo impresionantes. También he usado InfluxDB y Grafana sin Home Assistant para mostrar datos MQTT en este artículo.


Cómo configurar una estación meteorológica MQTT

Para trabajar con datos MQTT en Home Assistant, primero necesitamos un cliente MQTT que envíe los datos al broker Mosquitto MQTT. Si no sabe qué es MQTT o cómo funciona MQTT, también hay un tutorial de MQTT. En un tutorial anterior, construí una estación meteorológica interior que mide la temperatura, la humedad y la intensidad de la luz y envía mediciones allí cada minuto a través del protocolo MQTT a una Raspberry Pi con Mosquitto instalado como un corredor MQTT. En mi opinión, no tiene sentido volver a copiar el artículo aquí. Por lo tanto, si aún no tiene un cliente MQTT, puede crear la misma estación meteorológica interior que hice en este artículo.

En el script de Arduino solo necesitas asegurarte de que algunas de las constantes estén configuradas correctamente como ves en la siguiente tabla:

Script de ArduinoDonde encontrar
const char* ssid = «KabelBox-0174»;El nombre de su red local
const char* wifi_password = «94**»;La contraseña de su red
const char* mqtt_server = «192.168.0.101»;La dirección IP estática de la Raspberry Pi
const char* mqtt_username = «cdavid»;El nombre de usuario que has definido en el archivo de configuración del complemento Mosquitto
const char* mqtt_password = «cdavid»;La contraseña que definió en el archivo de configuración del complemento Mosquitto

La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.

Componente de enlace de Amazon Enlace de AliExpress

Kit Raspberry Pi 4 modelo BAmazonAliExpress
Raspberry Pi 4 Modelo BAmazonAliExpress
Kit Raspberry Pi 3 B +AmazonAliExpress
Raspberry Pi 3 B+AmazonAliExpress

Cómo ver las métricas de MQTT en Home Assistant

Antes de comenzar a ver los datos MQTT en Home Assistant, debemos asegurarnos de que los datos de la estación meteorológica se reciban desde Mosquitto. En Home Assistant, hay una manera fácil de escuchar un tema específico de MQTT. En la sección Herramientas para desarrolladores de la barra lateral, encontrará la aplicación MQTT donde puede suscribirse temporalmente a un tema MQTT. En mi caso, definí un tema en el código Arduino de la estación meteorológica: hogar / habitación / temperatura. Cuando inserto este tema y hago clic en el botón Lista de inicio, veo que Home Assistant puede recibir mensajes del cliente MQTT.

Tema de escucha de MQTT

Ahora necesitamos configurar Home Assistant para que el sistema escuche constantemente uno o más temas MQTT. Por lo tanto, necesitamos modificar el archivo de configuración de Home Assistant. La forma más sencilla es instalar otro complemento en la tienda de complementos llamado «Editor de archivos». Esta aplicación le permite acceder y editar todos los archivos en la Raspberry Pi. Active la opción para mostrar el editor de archivos en la barra lateral.

Editor de archivos 1

Ahora podemos acceder al sistema de archivos a través de la barra lateral y editar el archivo de configuración de Home Assistant. Debe hacer clic en el botón de carpeta en la parte superior y seleccionar el archivo configuration.yaml.

Editor de archivos 2
Editor de archivos 3

En este archivo agregamos una sección de sensores donde agregamos todos los sensores independientes de la plataforma. En nuestro caso, definimos que el sensor es un sensor MQTT con la temática previamente definida. Luego, el sensor recibe un nombre y establecemos la unidad de medida porque MQTT transfiere los datos como una cadena sin unidades.

En este punto del tutorial, te doy una ventaja: no solo agregaremos la temperatura de la estación meteorológica, sino que también agregaremos la temperatura de la CPU y GPU de la Raspberry Pi, así como la velocidad del reloj.

Por lo tanto, agregamos el siguiente fragmento de código al archivo de configuración:

sensor:
    - platform: command_line
      name: CPU Temp
      command: "cat /sys/class/thermal/thermal_zone0/temp"
      unit_of_measurement: "°C"
      value_template: "{{ value | multiply(0.001) | round(1) }}"
    
    - platform: command_line
      name: GPU Temp
      command: "/opt/vc/bin/vcgencmd measure_temp"
      unit_of_measurement: "°C"
      value_template: '{{ value | regex_findall_index("=([0-9]*.[0-9]*)", 0) }}'
    
    - platform: command_line
      name: CPU Clock
      command: "/opt/vc/bin/vcgencmd measure_clock arm"
      unit_of_measurement: "MHz"
      value_template: '{{ value | regex_findall_index("=([0-9]*)", 0) | multiply(0.000001) | round(0) }}'
      
      
    - platform: mqtt
      state_topic: 'home/bedroom/temperature'
      name: 'Bedroom Temperature'
      unit_of_measurement: '°C'
Sensor de configuración Home Assistant

Luego guardamos el archivo y reiniciamos Home Assistant a través de Configuración → Controles del servidor → Reiniciar.

Hay varias formas de configurar los sensores en Home Assistant. Si desea profundizar en este tema, le recomiendo que lea el Documentación de Home Assistant.

Normalmente, los nuevos datos del sensor deberían aparecer automáticamente en el panel de información general. Pero también puede personalizar el tablero con las nuevas métricas agregadas. Haga clic en los tres pequeños puntos en la parte superior derecha de la pantalla de vista previa y seleccione «Configurar interfaz de usuario».

Interfaz de usuario del asistente personal 1

Ahora puede agregar nuevos paneles, agregar métricas y personalizar el diseño. Cuando vuelves a hacer clic en los tres puntitos, ves el botón donde podemos ver todas las entradas no utilizadas. Haga clic en este botón para mostrar todas las entradas que no se muestran actualmente en el tablero.

Interfaz de usuario de Home Assistant 2

Debería ver las medidas que agregamos anteriormente en la parte del sensor del archivo de configuración de Home Assistant. En mi caso, quiero trazar las temperaturas en un gráfico. Puede seleccionar una o más entradas no utilizadas y hacer clic en el botón naranja + en la esquina inferior derecha de la pantalla. Ahora, según nuestra decisión, Home Assistant sabe qué métricas hemos seleccionado y recibimos una recomendación sobre cómo mostrar esas métricas en el tablero. Puede agregar las medidas directamente al tablero con el botón «Agregar a la interfaz de usuario de Lovelace» o puede elegir otra tarjeta.

Asistente doméstico UI 3

En mi caso quiero seleccionar otro mapa y de la selección de diferentes visualizaciones selecciono el gráfico de historial. Cuando haces clic en un mapa, obtienes más opciones como ves en mi caso para el gráfico de historial. Puedo eliminar o agregar entidades, seleccionar un título y establecer cuántas horas en el pasado debe mostrar valores el gráfico. Ver una vista previa de la visualización es una característica muy interesante de Home Assistant.

Tutorial de MQTT para Home Assistant

Cuando presiona el botón Guardar, verá la nueva tarjeta en el tablero.

Interfaz de usuario del asistente personal 5

Cómo insertar datos MQTT en una base de datos InfluxDB

Ahora no solo queremos mostrar la temperatura de la estación meteorológica en Home Assistant, sino también guardar los datos en InfluxDB. Para guardar los datos en la base de datos, debemos hacer las siguientes 3 cosas:

  • crear una base de datos en la que se almacenan los datos MQTT
  • definir un usuario con un nombre de usuario y contraseña que pueda acceder a la base de datos
  • otorgar acceso a este usuario a los datos MQTT en Home Assistant

Crea una base de datos

Primero creamos una base de datos en InfluxDB. Así que vaya a InfluxDB a través de la barra lateral y vaya a la sección Administrador.

InfluxDB 1

En esta sección de administración, creamos una nueva base de datos llamada asistente de hogar.

InfluxDB 2

Crea un nuevo usuario para la base de datos

En la misma sección, creamos un nuevo usuario con el nombre de usuario del asistente de hogar y una contraseña. En mi caso, también utilizo homeassistant como contraseña.

InfluxDB 3
InfluxDB 4

Es importante otorgar al nuevo usuario permisos completos para escribir datos en la base de datos.

InfluxDB 5

Acceda a los datos de MQTT en Home Assistant

Para acceder a los datos MQTT en Home Assistant, necesitamos editar el archivo de configuración nuevamente con el editor de archivos. Agregamos las siguientes líneas al archivo configuration.yaml:

influxdb:
  host: localhost
  port: 8086
  database: homeassistant
  username: homeassistant
  password: homeassistant
  max_retries: 3
  default_measurement: state
  include:
     entities:
        - sensor.Bedroom_Temperature
InfluxDB 6

Debido a que instalamos InfluxDB en la misma Raspberry Pi, el host es local → localhost. El puerto para todas las bases de datos es siempre 8086 y configuramos la base de datos y el nombre de usuario en homeassistant. Si elige otra contraseña, debe cambiarla. En el apartado de inclusión podemos definir las entradas que queremos registrar en la base de datos de homeassistant. En este tutorial, solo elijo registrar la temperatura de la estación meteorológica. Si elige un nombre para la entrada del sensor con un espacio, debe reemplazar el espacio vacío con un guión bajo.

Ahora debemos asegurarnos de que las medidas se guarden en la base de datos de InfluxDB. Abra InfluxDB nuevamente y vaya a la sección Explorar. En esta sección, puede enviar consultas SQL a la base de datos. Por supuesto, hay más funciones, pero en este tutorial solo queremos asegurarnos de que Grafana guarde los datos y pueda acceder a ellos.

Con la siguiente consulta SQL, puede ver que ya hay datos guardados en la base de datos:

SELECT * FROM "homeassistant"."autogen"."°C" WHERE "entity_id"='bedroom_temperature'
InfluxDB 7

Cómo visualizar datos MQTT en Grafana

Cuando inicie Grafana por primera vez, debe ingresar la combinación de nombre de usuario y contraseña:

  • Nombre de usuario predeterminado: admin
  • Contraseña predeterminada: admin

Lo primero que debe hacer es agregar una fuente de datos.

Grafana 1

Hay muchas posibilidades para agregar datos a Grafana. En nuestro caso, seleccionamos InfluxDB.

Grafana 2

Ahora necesitamos definir la configuración de Grafana para acceder a la base de datos de InfluxDB:

  • URL: la URL es la dirección IP de su Raspberry Pi y el puerto InfluxDB 8086. (Nota: localhost no me funciona)
  • Base de datos, usuario y contraseña: la misma configuración que en el archivo de configuración de Home Assistant.
  • Método HTTP: queremos usar la función get para consultar la base de datos.
Grafana 3

En la parte inferior de la página, puede guardar y probar su configuración. Cuando todo funciona bien, volvemos a la pantalla de inicio y creamos un nuevo panel.

Grafana 4

Elegimos una nueva consulta y ahora podemos definir consultas ya sea por la interfaz gráfica o por el modo editor de texto. En mi caso, solo elijo de todas las temperaturas el valor bedroom_temperature. Para obtener la vista como una serie de tiempo, selecciono que los datos deben agruparse por intervalo de tiempo y entre los puntos de datos en la base de datos debe haber una interpolación lineal.

Grafana 5

Obtengo el mismo resultado cuando usaría el editor de texto con la siguiente consulta:

SELECT mean("value") FROM "°C" WHERE ("entity_id" = 'bedroom_temperature') AND $timeFilter GROUP BY time($__interval) fill(linear)

Ahora puedo guardar la visualización y ver el gráfico en el panel de Grafana. Puede cambiar el título del gráfico o el color. Hay muchas opciones para jugar con los datos. Intente algo, pero mi tutorial termina en este punto porque tenemos todo lo que necesita para su hogar inteligente en funcionamiento.

Este artículo es uno de una serie de 5 artículos actualmente sobre el tema Home Assistant. La siguiente imagen muestra cómo se relacionan los artículos entre sí.


Deja un comentario