Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MQTT
Uno de esos protocolos que están estrechamente ligados a Internet de las Cosas y que resuena
con fuerza es el protocolo MQTT.
De forma rápida y resumida, MQTT (oficialmente ya no tiene acrónimo pero sus orígenes parten
de MQ Telemetry Transport) es un protocolo simple y muy ligero para la transmisión de mensajes
cortos de telemetría y de control, desde/hacía una red de sensores/actuadores, que tenga
limitaciones evidentes en cuanto al consumo, velocidad de transmisión y procesamiento.
No es una invención de IBM, pero sí fue esta empresa la que ha contribuido en su impulso
definitivo, sacando en 2010 la versión 3.1 open source. Desde 2014, existe un estándar MQTT a
cargo del organismo OASIS. La versión más actual es 3.1.1 que supone pequeños cambios a la
anterior y es la que se va a tratar.
Modelo OSI
El protocolo MQTT se localiza en las capas superiores de OSI, y normalmente se apoya en TCP/IP.
Esto significa que los participantes de una aplicación MQTT deben tener una pila TCP/IP.
El protocolo MQTT clasifica los actores que participan en la red en clientes y servidores. A
estos últimos los denomina brokers.
IoT
El protocolo MQTT presenta una serie de características que lo hacen especialmente atractivo
para las tecnologías relacionadas con el Internet de las Cosas:
Julio Donadello
Re-Energy
Funcionamiento
La característica principal del protocolo MQTT es que está basado en el modelo de comunicación
productor – consumidor.
En el protocolo MQTT, un mensaje es una trama de datos con un payload que contiene la
información real para el servidor o para el resto de los nodos. En una red de sensores por ejemplo,
esa información habitualmente son valores medidos por los sensores, tales como temperatura,
humedad, abierto, cerrado, etc…
Nota: La principal ventaja que aporta este modelo de comunicación es el desacoplo que se produce
entre el transmisor y el receptor, gracias a la intermediación del “broker” de mensajes (un
intermediario que gestiona el tránsito de los mensajes).
Julio Donadello
Re-Energy
Actores principales
El protocolo MQTT clasifica los actores que participan en la red en clientes y servidores. A estos
últimos los denomina brokers.
Los clientes MQTT pueden abarcar un amplio rango de formatos. Pueden ser clientes MQTT que
recolectan información del medio (sensores y sistemas embebidos) o aplicaciones ejecutando
alguna librería MQTT y que de alguna forma interactúen con los datos.
El bróker MQTT
El broker MQTT es un servicio (software) que implementa el protocolo MQTT y que establece la
comunicación, a nivel de aplicación, entre los diferentes clientes. Hace de intermediario entre los
productores y los consumidores. Es el responsable de recibir los mensajes, filtrarlos y rutarlos a
los clientes subscritos según su topic.
Otra tarea importante del brokers es autorizar el acceso e identificar los clientes.
Puede haber varios brokers en una misma red, como se ve en la siguiente figura:
Julio Donadello
Re-Energy
Topics
Un topic se refiere a tema o asunto concreto. Es un identificador que define el contenido del
mensaje o el ámbito de influencia del mensaje (contexto). Con esto se clasifican y discriminan unos
mensajes de otros y por extensión, unos nodos de otros.
Todo aquel que quiera publicar un mensaje MQTT, es responsable de clasificarlo en un topic
concreto y los clientes subscritos a es topic, recibirán esos mensajes.
Las subscripciones pueden ser explícitas, con lo que el nodo sólo recibe mensajes de un topic
concreto o puede recibir mensajes de varios topics si la subscripción se hace a través de algún
identificador común a varios topics.
Los topics en el protocolo MQTT se organizan según una estructura jerárquica en árbol (“topic
tree”), utilizando el carácter “/” para formar un topic de varios niveles. Similar a la ruta a un
directorio de carpetas típico de tu ordenador.
Entonces, el topic string es una cadena de caracteres que identifica el topic final del mensaje. Estas
cadenas pueden ser:
Multinivel: Se utiliza el carácter (wildcard) # para admitir cualquier nivel por debajo del
nivel mostrado en la cadena.
Simple: Se utiliza el carácter (wildcard) + para admitir sólo hasta el nivel mostrado en la
cadena
Ejemplo de topics.
Imagine una aplicación de Internet de las Cosas para gestionar un jardín de forma inteligente
mediante el protocolo MQTT. El jardín está dividido en varias parcelas, cada parcela con diferentes
plantas, árboles y características de riego.
Julio Donadello
Re-Energy
jardín/césped
jardín/frutales/manzanos/temperatura
jardín/rosales/humedad
jardín/frutales/#
En este caso, los subscriptores a esta cadena (string topic) recibirán todos los mensajes
identificados con los topics jardín/frutales y todos los de niveles inferiores, como por ejemplo
jardín/frutales/manzanos.
jardín/+
En este caso, los subscriptores a esta cadena recibirán los mensajes de ese nivel, por ejemplo
mensajes del tipo jardín/rosales, pero no recibirán los mensajes jardín/rosales/humedad.
Otro aspecto importante es que el productor del mensaje no se entera de si los subscriptores
están leyendo sus mensajes o no.
Julio Donadello
Re-Energy
Para solventar todo esto, el protocolo MQTT implementa hasta tres niveles de QoS (Quality of
Service) para garantizar que los mensajes son entregados de forma correcta a los nodos. Cuanto
más alto el nivel, más fiable es la transmisión, pero también supone un mayor consumo de ancho
de banda o una mayor latencia.
Además, el servidor es capaz de mantener el mensaje incluso después de ser enviado a los nodos
subscritos, de manera que si se producen nuevas subscripciones a los topics de los mensajes
retenidos, estos se envían a los nuevos clientes.
Este patrón es útil cuando los nodos de la red disponen de recursos suficientes (memoria y CPU)
como para poder ejecutar un cliente MQTT (software embebido grabado en su memoria),
considerado software de la capa de Aplicación y además, el número de sensores se limita a unos
cuantos miles.
Business Application: este tipo de aplicaciones son consideradas también clientes MQTT
ya que son productores y consumidores de mensajes y suelen ser aplicaciones de
monitorización, análisis y procesamiento de los datos procedentes de los sensores.
Enterprise Integration Layer (ESB): es el servidor que actúa como catalizador y
distribuidor de mensajes entre otras muchas funciones.
Devices: sensores o aplicaciones remotas que recolectan información o cumplen con
determinadas tareas y tienen capacidad de conexión con el sistema central.
Similar al anterior, con la excepción de que se incluye un gateway que puede gestionar la subred
de sensores y la comunicación entre ellos. Es un intermediario adicional útil que hace de enlace
entre el servidor central y los nodos, gestiona la subred de nodos a su cargo y puede ejecutar
directamente cierto software de procesamiento, como alarmas, notificaciones, etc.., sin pasar por
el servidor central.
Julio Donadello