Saltar al contenido

Protocolo MQTT en IoT

Compartir en:

El protocolo de comunicación líder en IoT trabaja en la sombra de manera eficiente para dar servicio a una cada vez más ingente cantidad de “cosas” conectadas.


El protocolo MQTT es ligero, escalable, eficiente y actualmente el más usado en Internet de las cosas (IoT). Hoy veremos sus principales características y su utilidad.

Historia MQTT

En este post voy a hablar de un protocolo en general desconocido que sin embargo es ampliamente utilizado en el día a día por todos nosotros. Muchos de los sistemas actuales de internet de las cosas (Internet of the things IOT) lo utilizan de forma masiva, lámparas, bombillas inteligentes, termostatos, sensores y un largo etcétera son aliados de MQTT para comunicar a los usuarios con funcionalidad particulares.

Nacido en 1999 e inventado por Andy Stanford-Clark (IBM) y Arlen Nipper (Arcom) fue concebido para la utilización mínima de recursos.

Por aquella época las conexiones eran tremendamente costosas e inestables, además de que el rendimiento energético también era bastante pobre. Bajo estas condiciones, se diseña un protocolo orientado al control de oleoductos (por redes satelitales) en sitios deslocalizados extremadamente ligero basado en un modelo de suscripción/publicación.

Al ser ligero, conservador con el ancho de banda y tener calidad de servicio, está pensado para funcionar en redes con una fiabilidad baja y un ancho de banda reducido, por tanto, es ideal para sistemas de IoT distribuidos.

Es un estándar en la industria, lo cual lo ha hecho extremadamente popular y hay mucha información además de librerías que ayudan a los desarrolladores a implementarlo. Desde 2014 MQTT se ha convertido en un estándar OASIS, cabe destacar la importancia de este hecho, ya que permite que aquellos proyectos basados en esta tecnología puedan desarrollarse con ciclos de vida correctos y tengan continuidad. Además de ser un estándar, es de código abierto por ende, su código es público a la vez que gratuito.

Funcionamiento MQTT

Se basa en un servicio de mensajería push (publicación/suscripción) donde un equipo principal o bróker intercambia mensajes y datos con los subscriptores y publicadores.

Las colas de mensajes en MQTT se gestionan mediante temas o topics, los clientes del sistema pueden publicar información en un determinado tema o simplemente subscribirse a cualquiera de estos, el sistema se encarga de mantener informados a los subscriptores de cada publicación.

Arquitectura protocolo MQTT

Normalmente los sensores solo publican en los temas que necesitan información, mientras que los actuadores/servicios o clientes juegan en ambos roles.

El Broker es el elemento central, gestiona todos los clientes que están publicando/suscribiéndose a los topics. Este mantiene una lista de los equipos con una conexión abierta, gestionada por mensajes CONNECT y CONNACK que contienen la información necesaria para establecerla y mantenerla.

En este tipo de arquitectura MQTT el emisor no sabe a quién va dirigido el mensaje que envía, sino que solo el bróker conoce esta información. Este Mantiene en memoria a los subscriptores de cada uno de los topics.

Temas o topics MQTT

El tema es la relación del mensaje con su contenido, es decir, describe de manera estructurada que es lo que se está publicando. Se organiza por niveles y los inferiores son subniveles de los principales de forma jerárquica.

Utiliza una sintaxis de separación por el carácter “/” el cual marca el inicio y el fin de uno de los niveles. Se puede describir como ejemplo un edificio con dos plantas y diferentes sensores de temperatura por cada planta:

  • El tema principal sería “edificio/”
  • Cada una de las plantas:
  • “edificio/panta1”
  • “edificio/panta2”
  • Los sensores como:
  •  “edificio/panta1/sensor1”
  •  “edificio/panta1/sensor2”
  •  “edificio/panta2/sensor1”
  •  “edificio/panta2/sensor2”.
Distribución de topics MQTT

De esta manera se obtiene una estructura por niveles con la cual se puede interactuar mediante el bróker. En MQTT también existen comodines que se pueden utilizar para subscribirse a niveles completos o a todos los temas de un nivel:

  • El símbolo + se sustituye por cualquier nivel. (edificio/+/sensor1 por ejemplo para todos los sensores 1 de todas las plantas)
  • El símbolo # es un comodín. Este símbolo cubre varios niveles aguas abajo.

Estructura de un mensaje MQTT

Según la documentación oficial de MQTT, los mensajes se componen de 3 partes, un encabezado (obligatorio) de 5 Bytes como máximo, otro encabezado variable (no obligatorio) que puede ser de diferente tamaño. Finalmente el mensaje o playload que puede tener como máximo 256 MB aunque lo habitual es implementar pequeños mensajes de 2 kb.

Estructura mensajes protocolo MQTT

Esta estructura simple permite enviar mensajes de manera muy eficiente y con una carga de trabajo tanto computacional como de red relativamente baja.

QOS – Calidad de servicio en MQTT

Los mecanismos de calidad de servicio que gestiona MQTT son muy importantes a la hora de desarrollar software que interactúe con el Broker.

En IoT las conexiones a menudo fallan, y los entornos muchas veces no son óptimos.

QoS da a los mensajes un tratamiento distinto según la importancia que tengan, pudiendo garantizar la entrega de estos a costa de incrementar el tráfico para una interacción.

Existen 3 niveles de calidad de servicio(OASIS, 2014):

QoS 0 unacknowledged: El mensaje es enviado una única vez al bróker, si la entrega falla, es posible que el mensaje se pierda. Se utiliza cuando el consumo de datos debe ser mínimo y el envío es masivo o carece de importancia estratégica.

QoS 1 acknowledged: En este nivel de QoS se garantiza la entrega, el tráfico aumenta, pero se asegura la recepción de los mensajes.

QoS 2 assured: Este es el nivel superior de calidad y es poco utilizado, este nivel garantiza que el mensaje es entregado al subscriptor una única vez. Requiere gran ancho de banda y consume recursos tanto del Broker como del subscriptor.

Como se aprecia, conforme aumenta la calidad, aumenta el número de mensajes necesarios para realizar la comunicación y por ende el sistema requiere más recursos tanto de red como computacionales.

Conclusión

Como hemos visto a lo largo del post MQTT es un protocolo potente, ligero, escalable, y muy eficiente, lo cual le confiere unas propiedades únicas para IoT. Se pueden utilizar otros protocolos como HTTP o AMQP aunque MQTT por sus cualidades es y seguirá siendo el rey de IoT e IIoT hasta que un competidor mejor lo destrone.


Juan Ibero

Inmerso en la Evolución Tecnológica. Ingeniero Informático especializado en la gestión segura de entornos TI e industriales, con un profundo énfasis en seguridad, arquitectura y programación. Siempre aprendiendo, siempre explorando.

Compartir en:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *