MQTT el protocolo para IoT

Blog   /   2 Comentarios Standard Post

Aunque MQTT es un protocolo creado en 1999, con la revolución de Internet of Things ha ganado en popularidad en el mercado. MQTT son las siglas Message Queue Telemetry Transport, se trata de un protocolo de comunicaciones para el envío de pequeños mensajes montado sobre TCP/IP. El protocolo, está especialmente diseñado para aplicaciones que requieren muy poco ancho de banda y que simplemente quieren enviar o recibir un mensaje sencillo.

MQTT funciona basado en un patrón publicador/suscriptor, donde siempre tiene que haber un nodo central en la red (el broker) que se encarga de centralizar y gestionar todas las suscripciones y las publicaciones. Además MQTT dispone de funcionalidades interesantes como cifrado de mensajes vía http, o asegurar la calidad de servicio con tres niveles diferentes (QoS 0-3). En el nivel más básico simplemente se publican los mensajes y en el nivel 3 se establece un mecanismo bidireccional para garantizar que los receptores como emisor están enterados de que la comunicación fue sin problemas.

A la hora de trabajar es muy sencillo, simplemente hay 5 métodos para ejecutar: Connect y Disconnect, para darse de alta como cliente en el broker y darse de baja. Subscribe a un topic, que permite recibir todo lo que se publica bajo determinado tema. UnSubscribe del topic, que deja de escuchar los eventos de un topic y Publish un mensaje bajo un topic determinado.

Los topics o temas son los diferentes canales en los que se publican los datos y a los que los diferentes receptores deben suscribirse. Estos topics tienen una estrcutura tipo url donde se van generando niveles con barras. Por ejemplo unos topic válidos podría ser casa/salon/humedad o casa/salon/temperatura.

Lo interesante de los topics reside en la posibilidad de usar wildcards, de manera que un cliente que quiera suscribirse a los datos que emiten los sensores del salón podría hacer algo tal que casa/salon/# (wildcard multinivel), suscribíendose de esta forma a todos los sensores que están disponibles en esa habitación. Otro ejemplo de wildcar podría ser un suscriptor que quiere solo escuchar a todos los sensores de temperatura de la casa, en ese caso usaría algo tal que:  casa/+/temperatura (wildcard un solo nivel)

Para entender un poco más la potencialidad de MQTT, En el siguiente diagrama se muestra una arquitectura de ejemplo:

En esta arquitectura, suponemos que tenemos sensores de temperatura en el dormitorio y el salón, así como un aire acondicionado en cada habitación. En este caso se podría por medio de la lectura de los sensores de temperatura, el aire acondicionado podría decidir si activarse o no suscribiéndose a los correspondientes topics. Por otro lado el aire acondicionado podría ser activado manualmente desde una aplicación móvil si ésta publicara en el topic correspondiente donde está escuchando el aire acondicionado.

En la arquitectura de ejemplo también suponemos que la puerta y luz del garaje están conectados, de manera que se pueden controlar remotamente o de manera conjunta, por ejemplo encendiendo la luz del garaje cuando se abre o cierra la puerta. O bien incluso controlar la apertura o cierre de la puerta del garaje desde una aplicación móvil.

Actualmente existen clientes de MQTT compatibles con los frameworks y lenguajes de programación más comunes por lo que se está facilitando la creación de un ecosistema de aplicaciones móviles y aplicaciones web que interactúan con brokers MQTT y que pueden servir para mostrar un resumen de los datos capturados,  creación gráficas con históricos, procesado de datos, control remoto de dispositivos, etc…

Esta entrada he querido dar una idea básica general de que es MQTT. En próximas entradas comentaré más en profundidad algunas implementaciones prácticas de MQTT en las que estoy trabajando sobre el ESP8266 y se podrá ver como es muy sencillo montar una arquitectura compleja en casa con muy poco esfuerzo.

2 Comentarios en esta entrada

  1. Hola, lo primero es darte las gracias por la publicación, que me ha parecido muy interesante. Tengo una duda: Como consigue el Broker enviar mensajes a cada interruptor IOT para activarlos desactivarlos.

    Por ejemplo, un termostato Nest puede facilmente saber a que broker enviar las medidas de temperatura, porque el broker es un servidor fijo.
    Pero al bajar la temperatura de un cierto valor, ¿cómo consigue el broker que lleguen los mensajes a los interruptores de los radiadores, ya que estos no tienen una IP fija?

    Muchas gracias,

    • admin dice:

      Hola Valentín, muchas gracias por el comentario!

      Con respecto a tu pregunta, la comunicación entre el broker y otros elementos se consigue también a través de suscripción. En el ejemplo que comentas del termostato, los interruptores de los radiadores se deben suscribir a un canal al que el termostato envía la orden de activación o desactivación.

      Lo bueno de esto es que ya no tienes que preocuparte por IPs, todo se hace a través de los canales. En el caso del termostato por ejemplo, lo puedes tener conectado al canal al que escuchan los interruptores para enviar las órdenes y también podría estar conectado a un canal para recibir órdenes como pasar de modo automático a manual etc… No se si me he explicado correctamente.

      La verdad que MQTT abre un montón de posibilidades y simplifica muchísimo la puesta en marcha de sistemas complejos porque como te comentaba ya no tienes que preocuparte de mapear IPs y que todo el mundo conozca la IP de todos los elementos de la red, simplemente tienes que conocer la IP del broker y conocer los canales.

      Luego una de las ventajas que más me gusta de MQTT es que lo tienes funcionando desde dentro de un microcontrolador hasta una app móvil o un navegador por lo que tienes una tecnología común de base sobre la que construir sistemas complejos de forma consistente.

Deja un comentario

    Sobre este Sitio

    Definir en pocas palabras de que va esta web es un poco complicado. En esta página encontrarás un poco de todos los temas que me interesan e inquietan tanto a nivel personal como profesional. Seguramente encontrarás bastante contenido relacionado con tecnología y alguna que otra entrada relacionada con música y fotografía.