Inicio Artículos ¿Qué es mqtt?

¿Qué es mqtt?

mqtt

MQTT también conocido como MQ Telemetry Transport, al principio fué llamado Message Queing Telemetry Transport. Es un protocolo de comunicación machine-to-machine de clase message queue. Inventado por el Dr. Andy Stanford-Clark de IBM y Arlen Nipper de Eurotech.

Se basa en el protocolo TCP/IP. En el caso de MQTT cada conexión se mantiene abierta y se vuelve a utilizar en cada comunicación.

La comunicación forma parte del Internet de las cosas (IoT), y las diferentes aplicaciones tienen sus necesidades de comunicación específicas, las cuales determinan sus requisitos de red. El equipamiento de la línea de producción en una fábrica de la Industria 4.0 puede necesitar responder en tiempo real a un comando de un controlador central, lo que requiere latencias de red muy bajas. Además, los sensores remotos a batería que controlan las condiciones del suelo pueden estar en reposo durante largo tiempo y activarse únicamente para enviar paquetes cortos de datos.

Las aplicaciones utilizan un amplio espectro de conectividad, incluidas redes celulares, tecnologías inalámbricas, como wifi y Bluetooth, Ethernet por cable e incluso por satélite. Los protocolos de comunicación constituyen un elemento clave de la pila de tecnología del IoT de cualquier dispositivo, ya que permiten el intercambio estructurado de datos entre dispositivos de IoT o «cosas» y sus aplicaciones relacionadas, a través del medio de transporte elegido.

Se han desarrollado varios protocolos para satisfacer las necesidades de diferentes clases de aplicaciones IoT, incluidas CoAP, XMPP y DDS. Entre ellas, el Message Queuing Telemetry Transport (MQTT) y su derivado MQTT-SN son unas de las aplicaciones más ampliamente adoptadas para la creciente categoría de redes de largo alcance y bajo consumo (LPWA).

El protocolo MQTT

Por tratarse de un protocolo ligero, la arquitectura sencilla de MQTT y el reducido diseño del código resultan idóneos para el creciente número de dispositivos de microcontroladores de bajo coste y bajo consumo empleados en aplicaciones IoT. MQTT se ejecuta mediante el protocolo TCP/IP y se ha diseñado específicamente para redes de baja calidad en las que las latencias pueden ser altas. El protocolo resulta ideal para aplicaciones con las siguientes necesidades de comunicación:

  • Uso mínimo de ancho de banda
  • Conectividad de red inalámbrica
  • Bajo consumo de energía
  • Gran fiabilidad en caso necesario
  • Mínima demanda de recursos de procesamiento y memoria

MQTT goza de gran popularidad en aplicaciones de IoT como contadores inteligentes, rastreadores de activos y sensores conectados para el equipamiento industrial. Por su uso eficiente del ancho de banda es ideal para situaciones con costes de red elevados y consumo de energía crítico, por ejemplo, cuando los conjuntos de sensores remotos deben funcionar de forma autónoma durante años sin necesidad de mantenimiento. También se presta muy bien para aplicaciones móviles, por su reducido diseño del código y su eficacia a la hora de distribuir información a uno o varios suscriptores.

Vista general funcional de MQTT

MQTT funciona sobre la base de publicación y suscripción, en contraposición a un modelo cliente-servidor, con dos entidades funcionales: el bróker MQTT y el cliente MQTT. Cualquier «cosa», ya sea un dispositivo o una aplicación, en una red IoT puede convertirse en un cliente MQTT. Los clientes publican o suscriben mensajes, no directamente entre ellos, sino a «Temas» gestionados por el bróker MQTT. Los temas son similares a las bandejas de entrada del correo electrónico: un cliente publica un mensaje en un tema y cualquier otro cliente suscrito a dicho tema recibirá el mensaje.

El bróker MQTT se encarga de recibir todos los mensajes publicados y de garantizar su entrega a todos los clientes suscritos. Los mensajes se publican conforme a un número de niveles de calidad de servicio acordados (véase a continuación). El bróker también autentifica todos los dispositivos IoT de la red y gestiona las conexiones, las sesiones y las suscripciones.

mqtt broker
Figura 1: ¿Qué es MQTT? (fuente: MQTT Org)

MQTT-SN

MQTT-SN es una versión optimizada del MQTT, diseñada específicamente para redes de sensores inalámbricos a gran escala que requieren mayores eficiencias en la transmisión de datos y el consumo de energía. MQTT-SN mejora la eficiencia de la transmisión de datos acortando la longitud de los ID de los temas. La mensajería de control también se reduce al permitir que dichos ID acortados se programen tanto en el cliente como en el bróker.

Un procedimiento de mantenimiento en MQTT-SN también permite a los dispositivos entrar en reposo y recuperar cualquier mensaje en cola cuando se activan.

Conceptos MQTT

Con las entidades de bróker y cliente, los siguientes conceptos resultan esenciales para el funcionamiento de MQTT y MQTT-SN

Temas MQTT

Los temas son fundamentales para el uso eficiente del ancho de banda por parte de MQTT y una estructura de varios niveles, figura 2. Los clientes MQTT únicamente se suscriben a los temas que les interesan y pueden utilizar entradas comodín para acceder a múltiples temas.

mqtt explorer
Figura 2. Temas MQTT (fuente: u-blox)

Los temas MQTT facilitan la organización eficiente de los flujos de datos a través de la red IoT, lo que permite un escalado masivo, ya que los dispositivos solo reciben datos de los temas suscritos.

Conexiones

Los clientes MQTT deben establecer una conexión con el bróker para publicar o suscribirse a los mensajes. El cliente proporcionará su ClientID, nombre de usuario y contraseña cuando envíe una solicitud CONNECT, que confirmará el bróker. Las solicitudes de conexión pueden calificarse con los siguientes parámetros:

Eliminación de sesión: permite que una solicitud de conexión también purgue cualquier mensaje almacenado de la cola de suscriptores

Mantenimiento en activo: compatible con dispositivos a batería en reposo al definir el periodo más largo para que una conexión permanezca activa cuando ni el bróker ni el cliente han enviado mensajes. El bróker almacena cualquier mensaje para el cliente durante este periodo hasta el final del tiempo especificado.

Reposo (solo MQTT-SN): cuando un dispositivo indica al bróker que entra en reposo, el bróker pone en cola todos los mensajes suscritos durante el periodo recomendado. La principal diferencia con el modo Mantenimiento en activo reside en que el bróker almacena todos los mensajes, independientemente del nivel de QoS, mientras que, en Mantenimiento en activo, solo se almacenan los mensajes de QoS 1 y QoS 2. El modo Reposo también permite al cliente vaciar su cola de mensajes sin necesidad de activación.

Suscripciones

Los clientes utilizan las solicitudes de SUSCRIPCIÓN para suscribirse a uno o varios temas y pueden utilizar una de las dos configuraciones diferentes de comodines, como se muestra en las figuras 3a y 3b.

El comodín de un nivel (+) sustituye un nivel de tema, por lo que «sensores/+/salida» se suscribiría a los siguientes temas:

  • sensores/suelo/salida
  • sensores/agua/salida
  • sensores/luz/salida
mosquito mqtt
Figura 3a. Comodín de un nivel.

Los comodines de varios niveles (#) sustituyen varios niveles de temas, por lo que este comodín se suscribiría a los siguientes temas:

  • sensores/suelo/salida
  • sensores/suelo/entrada
  • sensores/temperatura/entrada
mqtt protocol
Figura 3b: Comodín de varios niveles

QoS

MQTT y MQTT-SN utilizan modos de calidad de servicio (QoS) para permitir al publicador definir la calidad de su mensaje. La tabla 1 resume estos modos y cómo pueden utilizarse conforme a las limitaciones de una aplicación determinada.

Modo QoS Descripción Funciones

 

Usos
QoS – 1 (activación y olvido) Solo MQTT-SN

El mensaje se envía pero no se recibe confirmación, no se requiere conexión MQTT

 

· Sin confirmación

· Sin reintentos

· Mensajes no críticos

· Reduce el tiempo en red para dispositivos de baja potencia

· Reduce los costes de mensajes

 

 

QoS0 (una vez como máximo) Se envía el mensaje, pero no se recibe confirmación

 

· Mejores esfuerzos

· Sin reintentos

· Sin colas para clientes desconectados

· Mensajes no críticos

· Reduce el tiempo en red para dispositivos de baja potencia

· Reduce los costes de mensajes

 

QoS1 (al menos una vez) Los mensajes se entregan al menos una vez, pero no se impide la recepción de duplicados · Entrega garantizada

· Reintentos hasta confirmación

 

· Mensajes críticos

· El cliente receptor puede gestionar la duplicación

· Los mensajes deben almacenarse para clientes que no están conectados

QoS2 (exactamente una vez) Los duplicados se controlan para garantizar que el mensaje se entregue solo una vez · Mayor sobrecarga

· Se utilizan uniones de 4 partes para garantizar que no haya duplicados

 

· Mensajes críticos

· Los duplicados pueden causar problemas

 

Las suscripciones también cuentan con una configuración de QoS asociada, que puede utilizarse para reducir la QoS del mensaje publicado, y el mensaje siempre se publica con la configuración de QoS más baja.

Conclusión

MQTT se usa en aplicaciones de múltiples sectores, como la automoción, el petróleo y el gas, la industria y las telecomunicaciones. El protocolo goza de amplio apoyo dentro de la comunidad de IoT y existen muchas herramientas, incluidas librerías de clientes y brókers, para ayudar al desarrollador a dar los primeros pasos.

De esta forma, comunicación es mucho más que conectividad. Por ejemplo, el catálogo de comunicación como servicio del IoT de u-blox (figura 4) simplifica la obtención de datos de dispositivos del IoT en cualquier parte del mundo para la empresa, gracias a la disponibilidad de tres productos complementarios: MQTT Anywhere, MQTT Here y MQTT Now. Estos productos se construyen sobre la base de un bróker MQTT escalable de alto rendimiento y un potente gestor de flujo de datos, lo que permite procesar, transformar e integrar fácilmente los mensajes en la empresa.

arduino mqtt
Figura 4. Catálogo de comunicación como servicio del IoT de u-blox.

En el mercado competitivo actual, los ciclos de desarrollo reducidos resultan cruciales y, con esta plataforma, u-blox aprovecha las ventajas de MQTT para facilitar la comunicación de datos entre los dispositivos del IoT y la empresa.

Por Eric Heiser, SVP, director de servicios del Centro de Productos en u-blox