MQTT son las siglas MQ Telemetry Transport, aunque en primer lugar fue conocido como Message Queing Telemetry Transport. Es un protocolo de comunicación M2M (machine-to-machine) de tipo message queue.
Es un protocolo de comunicación actualmente muy extendido en el mundo LOT gracias a su simplicidad, velocidad y capacidad de transmisión de información.
El principio de funcionamiento del protocolo MQTT es el siguiente, uno o varios clientes se suscriben a un TOPIC que es generado por otro cliente y un dispositivo servidor (Broker), se encarga de enviar la información generada por el cliente al resto de clientes suscritos.
En su aplicación en el ámbito de la domótico, como ejemplo podemos utilizar la imagen anterior, un sensor de temperatura publica a través de una red el TOPIC temperatura_habitación con el valor 24º. El broker comprueba que clientes se encuentran suscritos a este TOPIC y cada vez que se publica, les envía la información generada. De esta forma, pequeños dispositivos pueden comunicarse de una forma sencilla e intercambiar información.
La utilización del protocolo MQTT no solo se utiliza para enviar información básica como la temperatura, otro ejemplo de uso es la reconversión de esas ordenes en comandos para que un dispositivo lleve a cabo una acción.
De esta forma, un interruptor inteligente puede enviar el TOPIC interruptor_pasillo con el valor ON y OFF, de manera que cuando las bombillas inteligentes de una habitación detecten el TOPIC, comprueben el valor y ejecuten una acción asociada a este valor.
De esta forma, no solo se intercambia información, también se permite la ejecución de ordenes sencillas entre dispositivos, lo que es un valor añadido en el funcionamiento de este protocolo.
Tabla de contenidos
Integración con Home Assistant
Mosquitto Broker: Instalación
Para poder utilizar este tipo de comunicación dentro de nuestro HomeAssistant, es necesario como paso previo, instalar un Broker que se ocupe de gestionar los diferentes mensajes que se generan. El más utilizado se denomina Mosquitto Broker, disponible para su instalación desde la tienda de complementos de nuestro Supervisor.
Mosquitto Broker: Configuración
Una vez instalado, simplemente será necesario en las opciones de configuración, introducir el usuario y la contraseña de conexión y automáticamente, nuestro servidor Home Assistant, se convertirá en un broker MQTT, permitiendo la utilización de todos los dispositivos que dentro de nuestra red utilicen este protocolo.
logins: - username: [nombre de usuario] password: [contraseña] customize: active: false folder: mosquitto certfile: fullchain.pem keyfile: privkey.pem require_certificate: false anonymous: false
Utilizando un Shelly 1 vía MQTT en Home Assistant
Una vez configurado e iniciado Mosquitto Broker en nuestro Home Assistant, la dirección IP de nuestro servidor HA se convierte automáticamente en un Broker MQTT que puede ser utilizado por todos los dispositivos de la red que hagan uso de ese protocolo. En nuestro caso, como siguiente paso, vamos a conectar un Relé Shelly 1 a través de este protocolo con nuestro Home Asisstant para poder activarlo y desactivarlo.
El primer paso es conectar nuestro relé a la misma red en la que se encuentre nuestro servidor HA, una vez realizado este paso, podemos recibir información sobre el estado del Shelly a través de mensajes MQTT e interactuar con el enviando mensajes MQTT desde nuestro Broker.
En primer lugar, es necesario indicar a nuestro relé Shelly que queremos hacer uso del protocolo MQTT, lo que desactiva el uso de la nube propia de Shelly, e indicar la dirección IP de nuestro Broker (La misma de Home Assistant), el usuario y la contraseña para ejecutar la conexión. En nuestro caso, además de estos datos y para facilitar la identificación de los TOPIC enviados desde y hacia nuestro dispositivo, indicaremos que como parte del TOPIC, tome algún tipo de identificador, como por ejemplo «calentador».
Esta configuración se realiza a través de los ajustes de red de nuestro Shelly en la página de gestión del dispositivo.
Una ver realizada esta configuración guardaremos los ajustes que acabamos de definir y tras el reinicio del Shelly, se conectará directamente a nuestro Broker y comenzará el intercambio de mensajes.
El siguiente paso será acudir a nuestro editor de configuración de Home Assistant y en la sección Switch, añadir los datos del TOPIC que deberá detectar para actuar como un interruptor.
Topic de estado (state) y de ejecución (command/Cmd)
- platform: mqtt name: "Termo" state_topic: "shellies/termo/relay/0" command_topic: "shellies/termo/relay/0/command" qos: 1 payload_on: "on" payload_off: "off" retain: true optimistic: false
Indicamos que la plataforma del interruptor es mqtt, el nombre que tendrá el interruptor en nuestro HA y comenzamos con los TOPIC. El state_topic, es el TOPIC enviado por el dispositivo Shelly al broker cada vez que cambie el estado, no es un TOPIC que permita la interacción con el dispositivo, simplemente indica si se encuentra encendido o apagado. De esta forma, si modificamos el estado del dispositivo, o bien a través de un interruptor, desde la página de administración o por cualquier otra vía, el interruptor enviará dentro del «state_topic», el estado, también denominado «payload». En el momento en el que se active, enviará el «payload» on y cuando se desactive, enviará el «payload» off. De esta forma, en todo momento, nuestro HA conocerá el estado en el que se encuentra el relé.
El siguiente TOPIC, es el «command_topic», en este caso, es el TOPIC que HA debe enviar para modificar el estado del Shelly, si en este TOPIC enviamos el «payload» on, el dispositivo se encenderá y si enviamos off, se apagará.
En el caso de los dispositivos Shelly, los topic son similares, comienzan con «shellies», continúan con el valor que hemos introducido en la configuración del MQTT en la página de administración del Shelly, indican a continuación el relé, ya que hay dispositivos que tienen varios relés, como el caso del Shelly 2.5, «relay/0» y si el TOPIC es de estado finaliza y en los TOPIC de ejecución o comando, se añade al final el termino «command».
Siguiendo este patrón podemos añadir cualquier dispositivo Shelly mediante MQTT En nuestro HA.
El QOS, explicación y uso correcto.
El siguiente parametro es QOS, este parámetro define la calidad de la transmisión y determina si el dispositivo debe esperar a que el Broker confirme la lectura del TOPIC e incluso si los dispositivos suscritos a este TOPIC también deben recibir el mensaje. De esta forma, nos aseguramos que el mensaje llegue a su destino. En el caso de uso con Home Assistant, no existen clientes suscritos ya que los mensajes solo deben llegar al Broker, por lo que se utiliza el parámetro 1. El parámetro 2, espera la confirmación por parte de los clientes suscritos, algo que en nuestro caso no existe y el parámetro 0 omite cualquier verificación. En nuestro caso, para garantizar que el mensaje llegue al Broker, establecemos el QOS en 1.
Payload, el valor de nuestro mensaje (topic)
Como hemos visto en la introducción, el protocolo MQTT se basa en el envío de información a través de TOPIC que contienen un valor, este valor es el Payload. Dependiendo del dispositivo, el payload puede tomar distintos valores, abierto/cerrado [open, close] en el caso de una puerta, seco/humedo [wet dry] en el caso de un sensor de inundación y en particular, en el caso que nos ocupa, los valores del payload de un interruptor o relé, como regla general son encendido/apagado [on off], por lo que en la configuración como vemos en el código de nuestra configuración en HA, indicaremos que el payload para encendido es on y el payload para apagado es off.
Retain, la retención del mensaje en el broker
Esta opción dentro de la configuración permite que el broker retenga el último estado del dispositivo y lo trasmita a los posibles clientes cuando se conecten a la red, evitando con ello que si el dispositivo se activa o desactiva mientras que algún cliente suscrito no se encuentre conectado, en el momento en el que el cliente se conecte, se actualice el estado sin necesidad de esperar a que el TOPIC cambie de estado.
En nuestro caso, esto es útil, supongamos que en el momento en el que se activa manualmente el relé, nuestro HA no se encuentra activo para recibir el cambio de estado, en este caso, el relé podría estar encendido pero figurar apagado en nuestro HA, por lo que no conocemos el estado real hasta que nuevamente cambie el estado y el dispositivo envíe el TOPIC nuevamente. Se podría dar el caso de que figure que el dispositivo está activado, pero realmente no lo está, o lo contrario. Si activamos la opción retain, nos aseguramos de que en todo momento el broker mantenga el estado de los dispositivos, de forma que si nuestro HA no se encontrará disponible cuando se produzca un cambio en el estado del dispositivo, en el momento en el que pase nuevamente a estar disponible, verificará el estado actual, evitando con ello que el estado no sea el correcto.
Optimistic Mode en dispositivos MQTT dentro de HA
El modo optimistic no forma parte del protocolo MQTT, es una opción de configuración dentro de nuestro HA. Si este modo se encuentra activo, HA asumirá que en el momento en el que nosotros pulsamos el interruptor en la interface de HA, el TOPIC es enviado y nuestro dispositivo cambia de estado sin esperar ningún tipo de confirmación, es decir, enviará la información y dará por hecho que se ha producido el cambio del estado, mostrando este cambio en la interfaz de HA. Está configuración puede resultar util en dispositivos que no tengan TOPIC de estado, de forma que en el momento en el que se envía el comando, se asume que se ha producido el cambio de estado. El problema surge en caso de que el relé en ese momento no se encuentre disponible o no recibe el TOPIC, ya que nuestro HA no esperará una confirmación a través del TOPIC de estado y asumirá que se ha producido el cambio, de forma que puede mostrar que el interruptor está encendido tras pulsar el botón de la interfaz pero realmente encontrarse apagado al no haber recibido el TOPIC.
Por este motivo, el modo optimistic, es recomendable que se desactive en todos los dispositivos que dispongan de TOPIC de estado, ya que de esta forma, esperará a recibir el TOPIC de estado para realizar el cambio en la interfaz de HA.
Bibliografía
Integración de interruptores con MQTT en: https://www.home-assistant.io/integrations/switch.mqtt/
MQTT Esentials: https://www.hivemq.com/blog/
Artículo de Luis Llamas. Que es MQTT…. https://www.luisllamas.es/que-es-mqtt-su-importancia-como-protocolo-iot/
Página oficial del protocolo MQTT: https://mqtt.org/