Saltar al contenido

¿Qué es MQTT y cómo usarlo con OpenHab?

08 Ene, 2021
que-es-mqtt
¡Compartelo con tus amigos!

¿Qué es MQTT y cómo usarlo con OpenHab?

MQTT es el pan y la mantequilla del mundo Open Source IoT y en este tutorial, aprenderá todo lo que necesita saber sobre MQTT y cómo integrar la mensajería MQTT en openHAB. MQTT y openHAB son una combinación mortal para comenzar a integrar  sensores de automatización del hogar DIY  en su proyecto de hogar inteligente.

¿Qué es MQTT?

MQTT es un protocolo creado por IBM que significa Transporte de telemetría de cola de mensajes y se centra principalmente en la comunicación M2M (máquina a máquina). Quizás se pregunte qué tiene esto que ver con la automatización del hogar…

Aunque MQTT se ha utilizado para una serie de aplicaciones, se utiliza mucho como protocolo de comunicación para dispositivos IoT.

¿Porqué es eso?

  • MQTT fue diseñado para aplicaciones donde el ancho de banda requerido es muy bajo.
  • Consume muy pocos recursos.
  • Está disponible en muchas plataformas diferentes.

Esas razones hacen de MQTT el protocolo perfecto para ejecutarse en microcontroladores que no son muy potentes, como Arduino, por ejemplo.

Arquitectura MQTT

MQTT utiliza una topología en estrella con un nodo central llamado Broker y clientes conectados a él.

El corredor dirige la fiesta. Se encarga de enviar y recibir los mensajes de los clientes. Teniendo en cuenta lo ligero que es el protocolo, vale la pena mencionar que MQTT puede funcionar con mensajes cifrados, lo cual es bastante impresionante.

¿Cómo se aplica esto a la automatización del hogar?

Cuando implemente la comunicación MQTT en sus sensores, habrá principalmente dos elementos:

  1. Broker MQTT:  permite a los clientes publicar o consumir mensajes hacia / desde temas.
  2. Sensores / Actuadores:  Los clientes pueden ser sensores o actuadores.
    1. Sensores: Publican mensajes sobre temas para que los suscriptores puedan leerlos. Un ejemplo de esto es un sensor de temperatura.
    2. Actuador: Están suscritos a un tema esperando un comando para ejecutar una acción, por ejemplo al encender una luz.

Los clientes pueden comunicarse entre ellos, pero aún necesitan que el intermediario distribuya el mensaje.

Temas MQTT

La comunicación en el protocolo MQTT se basa en temas. Un sensor puede publicar mensajes sobre un tema y todos los suscriptores de ese tema recibirán ese mensaje. Veamos un ejemplo:

que-es-mqtt

Digamos que tenemos un sensor de gas en la cocina que envía una señal de radio cuando los niveles de gas superan un umbral determinado. El sensor publicará un mensaje sobre el tema Hogar / Piso1 / Cocina / Sensor_Gas  con el número 1, indicando que se ha detectado una fuga de gas.

Cada suscriptor del tema  Hogar / Piso1 / Cocina / Sensor_Gas  recibirá una copia del mensaje.

Los temas de MQTT se basan en una jerarquía, lo que significa que si un suscriptor está escuchando Home / Floor1 / Kitchen , obtendrá todo debajo de la cocina del nodo.

MQTT y OpenHab

Instalación de Mosquitto en openHAB

Como expliqué antes, un sensor por sí solo no puede hacer mucho, está aislado. Para que el sensor pueda publicar mensajes, debe haber un intermediario MQTT. El corredor está a cargo de recibir y distribuir mensajes desde y hacia los otros clientes. En esta publicación, le voy a explicar cómo instalar Mosquitto, un corredor de MQTT que se usa mucho en aplicaciones de IoT.

1. SSH en su servidor OpenHab, acceda a la configuración OpenHabian y seleccione  Componentes opcionales

1sudo openhabian-config

2. En el menú de componentes opcionales, seleccione  Mosquitto

3. Openhabian le pedirá que confirme la instalación.

que-es-mqtt

4. Proporcione una contraseña para MQTT Broker. 

5. Una vez que Openhabian le muestre el siguiente mensaje, puede reiniciar la Raspberry Pi para que los cambios surtan efecto. 

que-es-mqtt

Enlace OpenHab MQTT

Ahora que tiene un MQTT Broker instalado en su servidor, es hora de conectar su servidor OpenHab al Broker.

1. Abra PaperUI y vaya a Complementos .

2. Seleccione  BINDINGS,  busque MQTT Binding e instálelo.

Hay problemas de compatibilidad en la última versión de openHAB (2.4). Revisaré esto con más profundidad, pero por el momento puede agregar la compatibilidad con enlaces heredados e instalar MQTT1 en lugar del nuevo enlace.

Una vez que lo haya habilitado, debería poder instalar la versión heredada del enlace.

3. Edite el archivo de configuración de MQTT en /etc/openhab2/services/mqtt.cfg  para indicarle a OpenHab dónde y cómo conectarse al MQTT Broker.

123456mosquitto.url=tcp://localhost:1883mosquitto.qos=1mosquitto.retain=truemosquitto.async=falsemosquitto.user=openhabianmosquitto.pwd=smarthomeblog

4. En este punto, hemos integrado Mosquitto con OpenHab. Hagamos algunas pruebas. 

Prueba de conectividad MQTT

Esta es solo una simulación para asegurarse de que OpenHab esté conectado al corredor MQTT. Para esta prueba, creará un elemento para recibir los valores del sensor de gas. Después de eso, tendrá que usar mosquitto_pub para simular que el sensor envía un valor .

1. Cree un archivo llamado sensores.items en / etc / openhab2 / items y pegue el siguiente contenido.

Number mqtt_kitchen_gas "Gas Level [%.1f]" {mqtt="<[mosquitto:Home/Floor1/Kitchen/Gas_Sensor:state:default]"}

OpenHab ahora actúa como cliente y está suscrito al tema Hogar / Piso1 / Cocina / Sensor_Gas. Cada vez que el sensor de gas publica un mensaje, el artículo se actualizará.

2. Agregue el nuevo elemento a su mapa del sitio.Text item=mqtt_kitchen_gas icon="gas"3. Cuando abra su mapa del sitio por primera vez, verá algo como esto:

que-es-mqtt

 Puedes ver que hay un sensor de gas que debería darte el nivel de gas pero no tiene ningún valor.4. Publique un valor para el tema Hogar / Piso1 / Cocina / Sensor_Gas usando mosquitto_pub.SSH en su servidor OpenHab y escriba:mosquitto_pub -u openhabian --pw smarthomeblog -t "Home/Floor1/Kitchen/Gas_Sensor" -m 105. Después de actualizar su navegador, verá que el sensor de gas tiene un valor de 10. 

que-es-mqtt

¡El bróker MQTT está en funcionamiento! No fue tan difícil, ¿verdad?

¡Compartelo con tus amigos!