¿Qué es MQTT? El protocolo de comunicación para IoT

- Categorías : Teoría

Este protocolo existe desde hace tiempo, mucho antes de la Internet de las Cosas (IoT), pero ahora se está usando para este mundo. Te contamos cuanto debes saber de este protocolo de mensajería ligero y como está relacionado con IoT y M2M.

           INDICE

  1. ¿Qué es MQTT?
  2. ¿Por qué usar MQTT?
  3. Conceptos básicos para entender el protocolo
  4. ¿Cómo funciona el protocolo MQTT?
  5. QoS – Calidad del servicio
  6. Ventajas y desventajas de MQTT
  7. ¿Cómo empezar a usar MQTT?
  8. Cosas de interés

1

1. ¿Qué es MQTT?

MQTT es un protocolo de comunicación abierto que se distingue por su ligereza y sencillez, gracias a lo cual se puede utilizar con éxito en microcontroladores pequeños, con recursos hardware limitados, y también cuando se trata de un ancho de banda de enlace bajo, por lo que encaja perfectamente con el concepto IoT.

MQTT viene de las siglas de “Message Queuing Telemetry Transport” y en un principio, se creó para conectar dispositivos y enviar la información de un sensor a servidores remotos relacionados con el sector de la industria petrolífera.

Hoy en día, se utiliza en una amplia variedad de industrias, como la automotriz, la fabricación, las telecomunicaciones, el petróleo y el gas, etc. Sin embargo, está en auge en la Internet de las Cosas (IoT), tal y como hemos dicho, al no consumir demasiados recursos.

Entre las aplicaciones de uso de este protocolo, se encuentran Facebook, que utiliza actualmente MQTT para su aplicación de Messenger, no sólo porque el protocolo conserva la energía de la batería durante la mensajería de teléfono móvil a teléfono, sino también porque el protocolo permite que los mensajes se entreguen de manera eficiente en milisegundos (ms), a pesar de las inconsistentes conexiones de Internet en todo el mundo.

La mayoría de los principales proveedores de servicios en la nube, incluyendo Amazon Web Services (AWS), Google Cloud, IBM Cloud y Microsoft Azure, soportan MQTT.

2

 Por otro lado, y algo que nos interesa bastante, es su compatibilidad con muchas plataformas, como Arduino, ESP8266 o Raspberry Pi. Hay muchas bibliotecas y soluciones listas para usar, por lo que puede comenzar a usarlo de manera fácil, rápida y divertida.

Entrando un poco en terminología de protocolos, el MQTT, como el ubicuo HTTP, está en la parte superior de la pila de TCP/IP, en la capa de aplicación, pero la especificidad de su operación es completamente diferente. 

Aunque HTTP es el estándar para páginas web, pero entre máquinas (máquina a máquina, M2M) requiere un modo diferente de comunicación masiva: los modelos de solicitud/respuesta antes (Request/Response) ya no son adecuados, en lugar de publicar/suscribirse (Modo de publicación/suscripción). Ese es el MQTT ligero y extensible.

Como puedes ver, hemos introducido términos como HTTP y la pila de TCP/IP. El conocimiento de red no es esencial; después de leer esta serie y sin él, podrá utilizar este protocolo, pero definitivamente vale la pena aprender los conceptos básicos. Especialmente si quieres comprender todo y usarlo en casos un poco más avanzados.

3

 2. ¿Por qué usar MQTT?

Pues como hemos dicho, hay varias características que lo hacen destacar, asique vamos a enumerarlas a continuación. 

Ligero y eficiente

Los clientes MQTT son muy pequeños, requieren recursos mínimos, por lo que se pueden utilizar en microcontroladores pequeños. Los encabezados de los mensajes MQTT son pequeños para optimizar el ancho de banda de la red.

Comunicaciones bidireccionales

MQTT permite la mensajería entre dispositivo a nube y de nube a dispositivo. Esto facilita la transmisión de mensajes a grupos de cosas.

Escala a millones de cosas

MQTT puede escalar para conectarse con millones de dispositivos IoT.

Seguridad habilitada

MQTT facilita el cifrado de mensajes mediante TLS y la autenticación de clientes mediante protocolos de autenticación modernos, como OAuth.

Entrega de mensajes confiable

La confiabilidad de la entrega de mensajes es importante para muchos casos de uso de IoT. Es por eso por lo que MQTT tiene 3 niveles de calidad de servicio definidos: 0 - como máximo una vez, 1- al menos una vez, 2 - exactamente una vez

Soporte para redes no confiables

Muchos dispositivos de IoT se conectan a través de redes celulares poco confiables. El soporte de MQTT para sesiones persistentes reduce el tiempo para reconectar al cliente con el corredor.

3. Conceptos básicos para entender el protocolo

Antes de continuar explicando más, conviene repasar o explicar los términos que se van a usar. Así puedes consultarlos más adelante incluso.

  • Broker – El broker es el servidor que distribuye la información a los clientes interesados conectados al servidor.
  • Cliente – El dispositivo que se conecta al broker para enviar o recibir información.
  • Topìc- El nombre del mensaje. Los clientes publican, se suscriben o hacen ambas cosas a un tema.
  • Publicar – Clientes que envían información al broker para distribuirla a los clientes interesados en base al nombre del tema.
  • Suscribirse – Los clientes le dicen al agente de bolsa qué tema(s) les interesa(n). Cuando un cliente se suscribe a un tema, cualquier mensaje publicado al broker es distribuido a los suscriptores de ese tema. Los clientes también pueden cancelar la suscripción para dejar de recibir mensajes del corredor sobre ese tema.

4. ¿Cómo funciona el protocolo MQTT?

Ya hemos visto que funciona bien, y que se asemeja al HTTP porque implementa la pila TCP/IP, pero no hemos dicho como funciona. 

El protocolo MQTT se basa en un modelo de publicación/suscripción (pub-sub) que permite la comunicación asincrónica entre el editor y los clientes suscriptores.

Un cliente MQTT es cualquier dispositivo conectado a la red (por ejemplo, un microcontrolador, un ordenador) que ha implementado la pila TCP/IP y el protocolo MQTT (puede comunicarse usándolo). 

Hay bibliotecas cliente MQTT listas para usar en diferentes idiomas, por lo que es relativamente sencillo usarlo. Vale la pena mencionar en este punto que un cliente MQTT puede actuar simultáneamente como suscriptor y editor.

Los clientes, editor y suscriptor, no se comunican directamente entre sí. Además, un cliente puede reenviar un mensaje a otro cliente sin conocer su dirección IP y su existencia. ¿Cómo es esto posible? Bueno, siempre hay un elemento intermediario en el modelo de publicación/suscripción: el agente de mensajes, conocido como broker. Recibe mensajes de los clientes de publicación y luego los distribuye a los clientes suscriptores correspondientes.

Pero entonces, ¿cómo sabe el broker a qué clientes suscriptores enviar un mensaje determinado? Afortunadamente, tampoco es complicado. El editor, al enviar un mensaje, le agrega información adicional: un texto llamado “topic”, y el broker envía el mensaje a los clientes que se suscriben a este “tema” (topic). El siguiente gráfico lo muestra muy bien:

4

 Gracias a este mecanismo, un cliente puede transferir información a muchos clientes a un costo muy bajo: todo lo que tiene que hacer es enviar un mensaje al broker y él hará todo el trabajo sucio, y además eficientemente. Gracias a esto, podemos implementar el cliente en pequeños microcontroladores, como Raspberry o Arduino.

Por supuesto, en este caso, el broker necesita muchos más recursos. Después de todo, puede haber muchos clientes conectados a él, tiene que filtrar y enviar muchos mensajes, lidiar con la autenticación y autorización de los clientes, además de almacenar mensajes. Por tanto, se instala en plataformas más eficientes. Afortunadamente, como en el caso del cliente, existen soluciones listas para usar, tanto de pago como gratuitas.

¿Dónde puede configurarse MQTT? ¿Dónde puede ejecutarse un servidor MQTT? Pues lo mejor de un servidor MQTT es que se puede instalar tanto en un ordenador local, remoto o incluso virtual. También se adapta muy bien a la nube de Internet, por lo que dependerá de tus necesidades específicas y de tus preferencias.

5

 Al MQTT se le llama un protocolo ligero porque todos sus mensajes tienen una pequeña huella de código. Cada mensaje está formado de un encabezado fijo (2 bytes), un encabezado variable opcional, una carga útil del mensaje que está limitada a 256 megabytes (MB) de información y un nivel de calidad de servicio (QoS).

En cuanto a la seguridad del sistema MQTT incluye transporte SSL/TLS y autentificación por usuario y contraseña o mediante certificado. la autenticación se presenta como un nombre de usuario y una contraseña en texto claro, que son enviados por el cliente al servidor — esto, como parte de la secuencia de paquetes CONNECT/CONNNACK.

Durante la fase de comunicación, un cliente puede realizar operaciones de publicación, suscripción, desinscripción y ping. La operación de publicación envía un bloque binario de datos (el contenido) a un tema definido por el editor.

MQTT soporta grandes objetos binarios de mensajes (BLOBs) de hasta 256 MB de tamaño. El formato del contenido será específico de la aplicación. Las suscripciones a los temas se realizan utilizando un par de paquetes SUBSCRIBE/SUBACK, y la cancelación de la suscripción se realiza de forma similar utilizando un par de paquetes UNSUBSCRIBE/UNSUBACK.

5. QoS – Calidad del servicio

También se utiliza un mecanismo de calidad del servicio o QoS en el caso del protocolo MQTT, que proporciona tres niveles de QoS con respecto a garantizar la entrega de mensajes entre el servidor y los clientes.

  • QoS 0 unacknowledged (at most one): El mensaje se envía una única vez. En caso de fallo por lo que puede que alguno no se entregue.
  • QoS 1 acknowledged (at least one): El mensaje se envía hasta que se garantiza la entrega. En caso de fallo, el suscriptor puede recibir algún mensaje duplicados.
  • QoS 2 assured (exactly one). Se garantiza que cada mensaje se entrega al suscriptor, y únicamente una vez.

Usar un nivel u otro depende de las características y necesidades de fiabilidad de nuestro sistema. Evidentemente a mayor nivel escogido, mayor nivel de carga de datos.

6. Ventajas y desventajas de MQTT

Acabamos este artículo hablando sobre las tiene ventajas y desventajas más destacables cuando se compara con protocolos de la competencia. Las ventajas incluyen lo siguiente:

  • Bajo uso de la red, debido a la minimización de los paquetes de datos
  • Reducción del ancho de banda de la red
  • Transmisión de datos eficiente y rápida de implementar debido a que es un protocolo ligero
  • Distribución eficiente de los datos
  • Uso de pequeñas cantidades de energía, lo que es bueno para los dispositivos conectados
  • Implementación exitosa de la teledetección y el control
  • Entrega de mensajes rápida y eficiente
  • Es posible mejorar cualquier mqtt client sin demasiados programas complementarios, lo que se convierte en una ventaja para el uso de dispositivos con poca memoria, como Arduino.

Las desventajas de MQTT incluyen lo siguiente:

  • Es difícil crear una red MQTT globalmente escalable.
  • MQTT tiene ciclos de transmisión más lentos en comparación con CoAP.
  • MQTT no está encriptado. En su lugar, utiliza TLS/SSL para el cifrado de seguridad.
  • El descubrimiento de recursos de MQTT funciona con una suscripción de temas flexible, mientras que CoAP utiliza un sistema estable de descubrimiento de recursos.

7. ¿Cómo empezar a usar MQTT?

Ahora que sabes lo que es el protocolo MQTT, sus características y cómo funciona, es hora de hacer un ejercicio práctico. Vamos con un pequeño ejemplo de configuración de MQTT. Vamos a ver el ejemplo de instalación desde una Raspberry Pi o un sistema Linux.

Ahora instalaremos el broker y los clientes para probar su funcionamiento en la práctica. Empezaremos instalando el bróker. Hay varias implementaciones, por ejemplo, el broker de código abierto “Eclipse Mosquitto” es muy popular, y es el que usaremos a continuación. En el sitio web del fabricante encontrarás los archivos necesarios para varios sistemas operativos e instrucciones de instalación. Si usa Linux en una PC o Raspberry Pi, el asunto es muy simple, escribe en la consola:

apt-get install mosquitto

Después de instalar el bróker, también debes instalar los programas cliente:

apt-get install mosquitto-clients

Para iniciar el broker, simplemente ingresa mosquitto en la consola. Como puedes ver, el broker escucha por defecto en el puerto 1883:

6Ahora pasamos a iniciar los clientes. Comencemos con el suscriptor: el programa se llama mosquitto_sub. Lo ejecutamos en una nueva consola o desde otro dispositivo:

7

 

Significado de las banderas individuales:

  • -t   : nombre del tema suscrito
  • -h : dirección IP del corredor. En este caso, el corredor y el cliente se están ejecutando en la misma máquina: ingrese la dirección del host local (en este caso, no es necesario configurar este indicador, porque es el valor predeterminado)
  • -p : número de puerto (en este caso, también puede omitir este indicador porque 1883 es el predeterminado)

La descripción de todas las banderas disponibles se puede verificar escribiendo en la consola:

mosquitto_sub –help

Después de iniciarse, el programa espera mensajes y si recibe alguno, nos lo mostrará en la consola. Por otro lado, el broker muestra que se ha realizado la conexión:

8

Es hora de enviar algún mensaje. El programa mosquitto_pub se utiliza para este propósito, que se puede ejecutar escribiendo en una nueva consola el archiconocido saludo al mundo:

mosquitto_pub –h 127.0.0.1 –t "test" –m "HelloWorld!"

Como puede ver, ha llegado una nueva bandera:

  • -m : contenido del mensaje transmitido.

En este caso, se ha decidido enviar algo desde otra computadora con Windows. Tiene el mismo aspecto: el cliente también se inicia desde la consola. Lo único que debes recordar es ir al directorio donde se instaló mosquitto e ingresar la dirección IP del host donde se encuentra el broker, no el localhost.

9

                             Y así es como nuestro cliente suscriptor recibió un mensaje:

11 

Y con eso hemos realizado una comunicación con MQTT, ha sido sencillo. Te recomendamos también intentar descubrir diferentes hosts, puertos, nombres de temas y ver qué sucede.

8. Cosas de interés

Hasta ahora hemos utilizado los nombres de temas más simples, pero vale la pena discutir este tema con más detalle. Primero, se distingue entre mayúsculas y minúsculas, por lo que los nombres de los temas "Prueba" y "prueba" se tratarán como diferentes. Otra cosa muy importante es que es posible crear temas multinivel, algo que siempre puede ser de utilidad y vale la pena conocer. En tal situación, cada nivel se separa con un signo "/", por ejemplo:

almacen/01/temperatura

almacen/01/humedad

almacen/02/temperatura

Gracias a la naturaleza multinivel introducida, el cliente tiene la opción de suscribirse a un grupo de temas y para ello se utilizan caracteres especiales. El cliente puede suscribirse al tema " almacen/01/temperatura " y obtener la temperatura del almacén uno, pero también puede solicitar al corredor las temperaturas de todos los almacenes. En este caso, se utiliza el signo "+"

almacen/+/temperatura

Es importante destacar que el signo "+" cubre solo un nivel. Esto significa que el suscriptor recibirá mensajes con temas:

almacen/01/temperatura

almacen/02/temperatura

pero no con los temas:

oficina/01/temperatura

almacen/01/humedad

Parece lógico, ¿no? También es posible suscribirse a temas de varios niveles, pero en este caso debe utilizar el signo "#". Por ejemplo, un cliente que se suscribe al tema " almacen/01/#" recibirá mensajes sobre los temas:

almacen/01/temperatura

almacen/01/humedad

almacen/01/temperatura/…

Y para una suscripción, " almacen/# " obtendrá todos los valores de los parámetros de todos los almacenes. En otras palabras, recibirá todos los mensajes sobre temas que comiencen con " almacen/ ".

Es sencillo, ¿verdad? Si te ha entusiasmado este protocolo, puedes buscar mucha más información y montarte tu sistema IoT de una manera sencilla.

Fuentes:

https://mqtt.org/

http://www.embeddeddev.pl/protokol-mqtt-zasada-dzialania/

https://www.hivemq.com/mqtt-essentials/

https://blog.gruponovelec.com/iot-internet-of-things/que-es-mqtt-y-que-aporta-al-iot/

https://descubrearduino.com/mqtt-que-es-como-se-puede-usar-y-como-funciona/

Share