Así integramos los 433 Mhz en Home Assistant

¿Quién no tiene por ahí algún sensor de temperatura que se comunica por radiofrecuencia en 433 Mhz? ¿o un sensor de puertas por RF? ¿O un medidor de consumo eléctrico conectado pero sin Wifi? ¿O un sensor de presión de neumáticos?

Existen infinidad de emisores de radiofrecuencia, de una época no tan lejana donde el IOT por WiFi era impensable, y todavía se siguen vendiendo por su bajo precio y fiabilidad. Hoy veremos como recoger todas esas señales de una manera muy barata, decodificarlos e incluirlos en nuestro sistema Home Assistant de una manera muy fácil.

Lo mejor de todo es que todos estos dispositivos se mueven en unas frecuencias dentro de las bandas de la TDT (Televisión Terrestre Digital), la FM, las radios digitales o la televisión de alta definición, y un «sencillo» receptor puede captarlas si son cercanas.

El dispositivo que nos permite «escuchar» esas señales de radio es el denominado receptor DVB-T por USB, también conocido como DVB, sintonizador DVB-T, o RTL2832 compatible:

Como véis, este modelo viene con una antena extendida con base magnética que nos vendrá muy bien para posicionarla. Os recomiendo también un extensor de USB para que la conexión sea más cómoda:

Podremos decodificar dispositivos de distintas marcas: La Crosse, Acurite, Oregon Scientific, … y un largo etcétera.

REQUISITOS

En la parte de software nos hará falta tener previamente instalado un broker MQTT. El más conocido, y que seguramente ya tengas es Mosquitto Broker. Si no lo tenemos instalado, iremos a la sección de Configuration>Integrations de nuestro sistema Home Assistant y buscaremos MQTT para instalarlo:

Mosquitto Broker

Por otro lado, como hemos comentado en la introducción necesitaremos un receptor DVB-T por USB con su antena independiente, pinchado en la máquina en la que corremos Home Assistant. Podemos instalarlo en otro equipo, pero por sencillez vamos a describir el proceso instalando en una Raspberry PI donde ya funciona Home Assistant.

Dicho receptor DVB-T debe ser compatible (la mayoría lo son), y aunque no sea obligatorio, sí que es muy recomendable un extensor de cable USB, para poder posicionar el dispositivo más comodamente en alguno de los USB que tengamos libre.

Por supuesto, una Raspberry PI con Home Assistant donde instalar todo en cualquiera de sus variantes más usuales y con los accesorios mínimos:

INSTALACIÓN DE RTL_433 EN HOME ASSISTANT

Tras insertar el stick DVB-T en alguno de los puertos USB libres, deberemos instalar el componente principal que decodificará los mensajes recibidos y los pasará al broker Mosquitto. Se trata del Addon rtl_433.

Desde la opción Supervisor>Add-on Store, deberemos primero incluir el repositorio https://github.com/pbkhrv/rtl_433-hass-addons para que aparezca dicho add-on. En la esquina superior derecha lo podemos añadir:

De los dos add-on que veremos, vamos a instalar solamente el rtl_433 , pues nos da suficiente flexibilidad a la hora de especificar qué dispositivo incluir y cuál no:

rtl_433 addon

Tras instalar el Add-on, debemos indicarle en la pestaña Configuration un fichero de configuración. Por defecto trae rtl_433.conf en una carpeta del mismo nombre, que estará dentro del directorio Config de nuestro sistema. Podemos dejarle esa configuración:

Deberemos por tanto crear manualmente esa carpeta y dentro el fichero correspondiente rtl_433.conf. Podemos usar el add-on llamado File Editor, o bien usar cualquier editor si optamos por hacerlo visible desde otra máquina con el Add-on de Samba:

File editor addon
Samba addon

En cualquier caso, el fichero de rtl_433.conf tendrá el siguiente contenido mínimo, donde debeís indicar la IP del equipo donde corre Mosquitto Broker (normalmente la misma IP que Home Assistant), y proporcionar las credenciales de un usuario del grupo Owner de Home Assistant (puede ser el que usualmente utilices para entrar y modificar)

output      mqtt://ip_de_mosquitto:1883,user=usuario1,pass=password_de_usuario1

frequency   433.92M

convert     si
report_meta newmodel

Por ahora dejaremos la frecuencia de 433Mhz que es la más utilizada para los dispositivos que queramos integrar, en todos los protocolos conocidos por el programa, pero podemos escanear en otras frecuencias y protocolos específicos (incluyendo una línea «protocol xx» siendo xx el nº de protocolo), con solo cambiar en el fichero y reiniciar el add-on.

Si vais a explorar otras frecuencias, para una recepción óptima mejor adquirir una antena que sintonice en la que queramos (en 915 Mhz, 868 Mhz, etc)

Las otras opciones indican que conviertan cualquier dato numérico a las unidades internacionales (para aprovechar toda la precisión) y newmodel fuerza el uso de las nuevas claves a usar en el futuro.

Una vez que tenemos ya el addon instalado y el fichero de configuración definido, solo nos queda arrancar el addon y ver en el Log si todo ha ido bien:

Como vemos, estamos escuchando en la banda de los 433Mhz y publicando los datos con la conexión establecida por el Broker MQTT.

DESCUBRIENDO DISPOSITIVOS CERCANOS EN 433 MHZ

En teoría ya estaremos escuchando los mensajes que los distintos dispositivos cercanos están lanzando en la frecuencia usada, pero ¿cómo los vemos para darlos de alta?

El Broker MQTT está recibiendo esa información que estará disponible para todo cliente MQTT que se suscriba. Solo necesitamos un software con el que podamos suscribirnos y ver lo que va publicando.

El programa que usaremos es MQTT-Explorer de Thomas Nordquist. Muy sencillo y gratuito, y encima lo tenmos dispobible para Windows, Mac y diferentes variantes de Linux. Podemos instalarlo fácilmente en otro equipo de forma temporal, pues solo nos servirá para obtener algunos datos necesarios.

Solo necesitamos crear una conexión a nuestro broker con los siguientes datos:

  • Name: Cualquier nombre distintivo.
  • Protocol: Dejaremos mqtt://
  • Host: IP donde reside nuestro broker mosquitto (usualmente la misma IP dond está Home Assistant)
  • Port: Dejaremos el puerto por defecto (1883)
  • Username: El usuario que hemos especificado en el fichero rtl_433.conf
  • Password: La clave que pusimos también en el fichero rtl_433.conf

Inicaremos la conexión con el botón CONNECT:

mqtt explorer connection

Es posible que pasen algunos minutos hasta que empecemos a visualizar paquetes mqtt válidos que se hayan capturado:

MQTT Acurite-606TX

Anotaremos el camino de la estructura MQTT, en este caso: rlt_433/9b13b314-rtl433/devices/Acurite-606TX/28/temperature_C

Incluso podemos ver en esta misma pantalla algunos datos históricos desde el establecimiento de la conexión:

Mqtt explorer datos históricos

CONFIGURACIÓN DE SENSORES EN HOME ASSISTANT

Una vez que hemos visto con MQTT Explorer que nuestro Broker Mosquitto está publicando correctamente el sensor que queremos integrar, el resto es muy fácil.

Solo tendremos que incluir estas líneas en nuestro fichero configuration.yaml de Home Assistant:

sensor:  
  - platform: mqtt
    state_topic: "rtl_433/+/devices/Acurite-606TX/28/temperature_C"
    device_class: temperature
    unique_id: 28_temp
    name: temperatura exterior
    unit_of_measurement: '°C'

state_topic será donde indiquemos la estructura del paquete mqtt donde mirar el dato, tras el signo + que representa cualquier valor en ese nivel. unique_id será cualquier cadena única en nuestro sistema para que Home Assistant pueda diferenciarlo de otros sensores. device_class hará que Home Assistant lo trate como lo que indiquemos (temperatura en este caso). El resto de parámetros son autoexplicativos.

Una vez modificado el fichero, como siempre, nos toca resetear Home Assistant y buscar el nuevo sensor desde Configuration>Entities, para poder añadirlo al panel Lovelace como queramos:

Lovelace. 433 Mhgz temperatura

OTROS DISPOSITIVOS

Muchos son los emisores en la banda de 433Mhz que podemos encontrar, no solo de estaciones meteorológicas. Aquí os dejo algunos ejemplos:

TPMS (control de presión de neumáticos)

Muchos vehículos transmiten en esta banda la presión y temperatura de sus ruedas a la unidad central:

Toyota

Mandos de coches y garajes

Los códigos generados cambian en cada pulsación, pero podemos detectar su activación si estamos cerca:

EXTRA: CAPTURA DE DATOS EN UBUNTU

En Windows también se puede, pero si tenemos una máquina con Linux y queremos simplemente echar un vistazo antes de configurar nada, puedes seguir estos pasos:

Lo primero insertar el DVB-T para que Linux lo pueda reconocer.

Luego instalaremos rtl_433 que ya traen muchas distribuciones:

sudo apt-get update
sudo apt-get install rtl-433 

(ojo, en alguna documentación viene rtl_433 en vez de rtl-433)

Ejecutamos el comando y veremos un problema de permisos que hemos de solucionar:

$ rtl_433
rtl_433 version unknown inputs file rtl_tcp RTL-SDR SoapySDR
Use -h for usage help and see https://triq.org/ for documentation.
Trying conf file at "rtl_433.conf"…
Trying conf file at "/home/antonio/.config/rtl_433/rtl_433.conf"…
Trying conf file at "/usr/local/etc/rtl_433/rtl_433.conf"…
Trying conf file at "/etc/rtl_433/rtl_433.conf"…
Registered 122 out of 149 device decoding protocols [ 1-4 8 11-12 15-17 19-21 23 25-26 29-36 38-60 63 67-71 73-100 102-105 108-116 119 121 124-128 130-149 ]
usb_open error -3
Please fix the device permissions, e.g. by installing the udev rules file rtl-sdr.rules

Para arreglarlo vamos a ver primero las propiedades del decodificador DVB-T (identificador del vendedor y del producto)

$ lsusb

El resultado del comando:

Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 413c:301c Dell Computer Corp. Dell Universal Receiver
Bus 002 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


La línea que nos interesa: Bus 002 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Vendedor: 0bda
Producto: 2838

Tenemos por tanto que crear el fichero /etc/udev/rules.d/20.rtlsdr.rules con el siguiente contenido:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", GROUP="adm", MODE="0666", SYMLINK+="rtl_sdr"

Para crear el fichero usamos:

sudo nano /etc/udev/rules.d/20.rtlsdr.rules

En este paso es conveniente desconectar y conectar de nuevo el receptor DVB-T.

El resultado: Ahora ya se ven las capturas:

Existen muchas opciones que podemos usar dentro de este potente comando. Por ejempo, para mostrar todos los protocolos que es capaz de decodificar podemos usar -R:

rtl_433 -R

CONCLUSIONES

Hemos visto cómo con una mínima inversión y una instalación no tan complicada podemos integrar esos dispositivos de radiofrecuencia que tengamos en casa y que no podemos conectar a la red.

Habrá que tener especial cuidado con la privacidad, ya no solo de dispositivos que no sean nuestros, sino de los que tengamos nosotros. Seamos conscientes que al no cifrar podemos ser observados e incluso ser víctimas de ataques más sofisticados.

Si os habéis quedado con ganas de más, os dejo otros enlaces:

3 comentarios en «Así integramos los 433 Mhz en Home Assistant»

  1. Hola muy buenas,

    Estoy intentando seguir el super tuto que te has currado y no puedo instalar el addon 433, lo intento instalar desde la repo de tutorial y tra un rato intentandolo me salta este error:

    «The command ‘/bin/ash -o pipefail -c apk add –no-cache –virtual .buildDeps build-base libusb-dev librtlsdr-dev cmake git’ returned a non-zero code: 6»

    He instalado el servidor mqtt he creado las cuentas y en un principio todo esta configurado para funcionar. Pero como digo, al inatalar el addon me salta ese error.He porbado en 32 y 64 por si no compilaba bien, pero no hay manera no lo consigo. Me puedes dar una idea de que estoy haciendo mal?.
    Es una raspberry pi 3, lo mismo ese es el problema, pero ya no se…

    Muchas gracias.

    Responder
    • Hola, es muy raro lo que comentas, y no debe estar relacionado con que sea una Raspberry Pi 3. Entiendo que el error es en el paso de instalar el addon «rtl_433» (no el auto discovery). Acabo de instalarlo de nuevo y si bien es verdad que tarda un poco, al final termina instalándolo. ¿Has probado en otro momento por si en ese preciso instante estaban haciendo cambios en el repositorio? Lo que tampoco entiendo es cuando indicas versión de 32 o 64 (en teoría no tiene que compilar nada)
      Saludos.

      Responder
      • Muchas gracias por responder, justo cuando escribí di con la solución, tras un mes y comprar 3 adaptadores Dvb-t resulta que es por tener activado el IPv6, lo he desactivado y todo ok, es curioso y lo desabrí viendo que pasaba un error parecido en distintos add-ons . Muchas gracias.

        Responder

Deja un comentario