Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Introducción a MQTT: Comunicación eficiente para dispositivos IoT

MQTT, que significa Message Queuing Telemetry Transport, es un protocolo de mensajería liviano y eficiente, diseñado específicamente para dispositivos con recursos limitados y conexiones de red poco fiables. Este protocolo fue desarrollado por IBM en 1999 y ahora es un estándar abierto mantenido por OASIS (Organization for the Advancement of Structured Information Standards).

Es un protocolo de mensajería ligero y eficiente, diseñado para dispositivos con recursos limitados y conexiones de red poco fiables, y se utiliza ampliamente en el Internet de las Cosas (IoT), la automatización del hogar, el monitoreo industrial, el transporte y la logística, la salud y el bienestar, la agricultura inteligente, la gestión de energía y servicios públicos, y aplicaciones móviles y web; su modelo de comunicación basado en la publicación y suscripción, gestionado por un broker central, permite una comunicación desacoplada, escalable y eficiente entre dispositivos, facilitando el monitoreo en tiempo real, el mantenimiento predictivo, la gestión de inventarios, el control remoto y la entrega de notificaciones en tiempo real, lo que lo convierte en una opción ideal para una amplia gama de aplicaciones tecnológicas.

Características Clave de MQTT

  1. Ligero y Eficiente:
    • Bajo Consumo de Recursos: MQTT está diseñado para minimizar el consumo de ancho de banda y la sobrecarga del sistema. Utiliza un formato de mensaje sencillo y ligero, lo que lo hace ideal para dispositivos con recursos limitados, como sensores y microcontroladores.
    • Pequeño Tamaño de Mensaje: Los encabezados de los mensajes MQTT son muy pequeños, lo que permite una comunicación eficiente incluso en redes con baja capacidad de transmisión.
  2. Publicación/Suscripción:
    • Desacoplamiento de Emisores y Receptores: En lugar de un modelo cliente-servidor donde los dispositivos se comunican directamente entre sí, MQTT utiliza un modelo de publicación/suscripción. Los publicadores envían mensajes a un broker, que luego distribuye esos mensajes a los suscriptores que se han registrado para recibir información sobre temas específicos.
    • Temas: Los mensajes se organizan en temas jerárquicos. Por ejemplo, “casa/sala/temperatura” es un tema donde se podría publicar la temperatura de la sala de estar. Esto facilita la organización y el filtrado de mensajes.
  3. Confiabilidad y Calidad de Servicio (QoS):
    • QoS 0: Mensaje entregado al máximo una vez, sin confirmación.
    • QoS 1: Mensaje entregado al menos una vez, con confirmación de recepción.
    • QoS 2: Mensaje entregado exactamente una vez, con un proceso de confirmación más riguroso para evitar duplicados.
  4. Persistencia de Conexión:
    • Sesiones Persistentes: MQTT puede mantener las sesiones de los clientes incluso cuando se desconectan, lo que permite que los mensajes se entreguen una vez que los clientes se reconecten.
    • Retained Messages: El broker puede almacenar el último mensaje publicado en un tema para que los nuevos suscriptores lo reciban inmediatamente después de suscribirse.
  5. Seguridad:
    • Autenticación y Autorización: MQTT soporta autenticación de clientes mediante usuario y contraseña.
    • Cifrado TLS/SSL: Para proteger los datos transmitidos, MQTT puede utilizar cifrado TLS/SSL.

¿Por qué MQTT?

Modelo de Comunicación Basado en Publicación/Suscripción

Lo que realmente me llamó la atención sobre MQTT es su modelo de comunicación basado en la publicación/suscripción. Este modelo tiene varias ventajas sobre los modelos de comunicación tradicionales, como el cliente-servidor:

  1. Desacoplamiento:
    • Temporal: Los publicadores y suscriptores no necesitan estar activos al mismo tiempo. Un publicador puede enviar un mensaje sin saber si hay suscriptores activos, y un suscriptor puede recibir mensajes publicados anteriormente una vez que se conecte.
    • Espacial: Los publicadores y suscriptores no necesitan conocerse entre sí. Solo necesitan conocer el broker y el tema relevante.
    • Sincronización: No se requiere sincronización directa entre los dispositivos que se comunican, lo que simplifica enormemente el diseño y la implementación del sistema.
  2. Escalabilidad:
    • Manejo de Grandes Volúmenes de Datos: El broker centralizado puede manejar grandes volúmenes de mensajes y distribuirlos eficientemente a los suscriptores.
    • Facilidad de Adición de Nuevos Dispositivos: Es fácil agregar nuevos dispositivos al sistema sin necesidad de modificar los dispositivos existentes. Solo necesitan suscribirse a los temas relevantes.
  3. Eficiencia en la Transmisión de Datos:
    • Minimización de la Carga de la Red: Dado que los mensajes solo se envían a los suscriptores interesados, se minimiza la carga de la red y se optimiza el uso del ancho de banda disponible.
    • Manejo de Conexiones Inestables: MQTT está diseñado para funcionar en redes poco fiables, con características como la persistencia de mensajes y la calidad de servicio que garantizan la entrega de mensajes.

Suscripción en MQTT

¿Qué es un Tema (Topic)?

Un tema en MQTT es una cadena de texto que jerárquicamente organiza la información. Por ejemplo, un tema podría ser “casa/sala/temperatura”. Los temas son utilizados para categorizar y organizar los mensajes que se envían a través del broker.

Proceso de Suscripción

  1. Suscribirse a un Tema: Cuando un cliente se suscribe a un tema, le está diciendo al broker que quiere recibir todos los mensajes que se publiquen en ese tema. Por ejemplo, si un cliente se suscribe al tema “casa/sala/temperatura”, recibirá todos los mensajes que se publiquen en ese tema.
  2. Wildcard (Comodines) en Suscripciones:
    •  + Se utiliza para sustituir exactamente un nivel de la jerarquía del tema. Por ejemplo, “casa/+/temperatura” suscribe a todos los temas de temperatura en diferentes habitaciones de la casa.
    •  # Se utiliza para sustituir cero o más niveles de la jerarquía del tema. Por ejemplo, “casa/#” suscribe a todos los temas bajo “casa”, como “casa/sala/temperatura” o “casa/cocina/humedad”.
  3. Calidad de Servicio (QoS): Al suscribirse, un cliente también puede especificar el nivel de calidad de servicio (QoS) que desea utilizar para los mensajes que recibe:
    • QoS 0: El mensaje se entrega al máximo una vez, sin garantía de entrega.
    • QoS 1: El mensaje se entrega al menos una vez, con confirmación de recepción.
    • QoS 2: El mensaje se entrega exactamente una vez, con un proceso más complejo para garantizar la entrega sin duplicados

Ventajas de la Suscripción en MQTT

  • Eficiencia: Los clientes solo reciben los mensajes relevantes, lo que reduce la cantidad de datos transmitidos.
  • Desacoplamiento: Los publicadores y suscriptores no necesitan conocerse entre sí, solo necesitan saber el tema.
  • Escalabilidad: Permite manejar un gran número de clientes y mensajes de manera eficiente.

La suscripción en MQTT es un proceso fundamental que permite a los clientes recibir mensajes de interés sin necesidad de conocer los detalles del remitente. Esto facilita la creación de sistemas escalables y eficientes, especialmente en aplicaciones de IoT donde múltiples dispositivos necesitan comunicarse de manera efectiva y en tiempo real.

Ejemplo Práctico

Un ejemplo práctico de cómo funciona MQTT podría ser un sistema de automatización del hogar. Supongamos que tienes varios sensores de temperatura distribuidos en diferentes habitaciones de tu casa. Estos sensores pueden publicar la temperatura actual en temas como “casa/sala/temperatura”, “casa/cocina/temperatura”, etc.

Un controlador central o una aplicación en tu smartphone puede suscribirse a estos temas y recibir actualizaciones en tiempo real sobre las temperaturas en las diferentes habitaciones. Si se suscribe al tema “casa/+/temperatura”, recibirá todas las actualizaciones de temperatura de todas las habitaciones. Esto permite una monitorización y control eficientes de las condiciones del hogar, todo gracias a la simplicidad y eficiencia del protocolo MQTT.

MQTT es un protocolo potente y flexible que facilita la comunicación eficiente entre dispositivos, especialmente en aplicaciones IoT. Su modelo de publicación/suscripción, junto con su bajo consumo de recursos y robustas características de calidad de servicio, lo convierten en una opción ideal para una amplia gama de aplicaciones. Si estás desarrollando soluciones IoT o sistemas de comunicación entre dispositivos, te animo a explorar más sobre MQTT y considerar su implementación en tus proyectos.

Componentes Clave de MQTT

Para entender mejor cómo funciona MQTT, es importante conocer sus componentes principales:

  1. Broker: El corazón del sistema MQTT. El broker recibe todos los mensajes de los publicadores y los reenvía a los suscriptores correspondientes.
  2. Clientes: Pueden ser dispositivos o aplicaciones que se conectan al broker para publicar o suscribirse a temas.

¿Qué Significa Suscripción en MQTT?

La suscripción en MQTT es el proceso mediante el cual un cliente se inscribe para recibir mensajes publicados en un tema específico. Cuando un cliente se suscribe a un tema, el broker le enviará todos los mensajes publicados en ese tema. Además, MQTT soporta comodines para suscribirse a múltiples temas:

  • +: Sustituye exactamente un nivel de la jerarquía del tema.
  • #: Sustituye cero o más niveles de la jerarquía del tema.

Mantener un Cliente MQTT a la Escucha

Para que un cliente MQTT esté siempre a la escucha de mensajes, necesita:

  1. Conexión Persistente: Mantener una conexión activa con el broker MQTT.
  2. Bucle de Eventos: Ejecutar un bucle de eventos que le permita recibir y procesar mensajes de manera continua.

Ejemplo con Mosquitto Client

Para suscribirse a un tema y mantenerse a la escucha de mensajes usando Mosquitto Client:

mosquitto_sub -h broker.hivemq.com -t “casa/sala/temperatura”

Para publicar un mensaje:

mosquitto_pub -h broker.hivemq.com -t “casa/sala/temperatura” -m “Hello MQTT”

¿ Requiere servidor ?

Sí, MQTT requiere un servidor central, conocido como broker, para manejar la comunicación entre los clientes. El broker es responsable de recibir todos los mensajes de los clientes y redirigirlos a los clientes suscritos a los temas correspondientes. Aquí se detallan las funciones del broker y algunas opciones de implementación:

Funciones del Broker MQTT

  1. Gestión de Conexiones: Maneja las conexiones de los clientes, incluyendo autenticación y autorización.
  2. Enrutamiento de Mensajes: Recibe mensajes de los publicadores y los distribuye a los suscriptores correspondientes.
  3. Persistencia de Mensajes: Almacena mensajes retenidos y garantiza la entrega de mensajes con QoS 1 y QoS 2.
  4. Escalabilidad: Capacidad de manejar múltiples conexiones simultáneas y grandes volúmenes de mensajes.
  5. Seguridad: Implementa autenticación, autorización y cifrado TLS/SSL para proteger las comunicaciones.

Brokers MQTT Populares

Existen varios brokers MQTT que puedes usar, tanto para desarrollo como para producción. Aquí hay algunos de los más populares:

  1. Eclipse Mosquitto
    • Descripción: Un broker ligero y de código abierto, ideal para desarrollo y despliegues pequeños.
    • Instalación:

      sudo apt-get install mosquitto
      sudo apt-get install mosquitto-clients

    • Iniciar el broker:

      sudo systemctl start mosquitto

  2. HiveMQ
    • Descripción: Un broker comercial diseñado para alta disponibilidad y escalabilidad en entornos empresariales.
    • Características: Escalabilidad horizontal, panel de control para monitoreo, soporte para extensiones.
  3. EMQX
    • Descripción: Un broker de alto rendimiento y código abierto, adecuado para grandes despliegues IoT.
    • Instalación:

      sudo apt-get update
      sudo apt-get install emqx

    • Iniciar el broker:

      sudo systemctl start emqx

  4. AWS IoT Core
    • Descripción: Un servicio gestionado de AWS para IoT, que incluye un broker MQTT completamente gestionado.
    • Características: Integración con otros servicios de AWS, alta disponibilidad, seguridad robusta.

MQTT se puede implementar en una variedad de lenguajes de programación gracias a su diseño simple y a la disponibilidad de numerosas bibliotecas y clientes para diferentes entornos. Aquí hay algunos de los lenguajes de programación más comunes con sus respectivas bibliotecas MQTT:

Lenguajes de Programación y Bibliotecas Comunes para MQTT

  1. Python:
    • Biblioteca:  paho-mqtt
    • Instalación: pip install paho-mqtt
  2. Java:
    • Biblioteca: Eclipse Paho
    • Maven:
      <dependency>
      <groupId>org.eclipse.paho</groupId>
      <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
      <version>1.2.5</version>
      </dependency>
  3. JavaScript/Node.js:
    • Biblioteca: mqtt.js
    • Instalación:npm install mqtt
  4. C/C++:
  5. Go:
    • Biblioteca: paho.mqtt.golang
    • Instalación: go get github.com/eclipse/paho.mqtt.golang
  6. Rust:
    • Biblioteca: rumqttc
    • Instalación: cargo add rumqttc
  7. Ruby:
    • Biblioteca: mqtt-ruby
    • Instalación: gem install mqtt

Programar MQTT en .NET

Sí, se puede programar MQTT en .NET. Existen bibliotecas disponibles para C# y .NET que permiten implementar clientes MQTT. La más popular es MQTTnet.

Programando con MQTT en VB.NET

Como desarrollador .NET, me emocionó descubrir la biblioteca MQTTnet, que facilita la implementación de clientes MQTT en aplicaciones .NET. Aquí un ejemplo básico en VB.NET:

Imports System
Imports System.Text
Imports System.Threading.Tasks
Imports MQTTnet
Imports MQTTnet.Client
Imports MQTTnet.Client.Options

Module Program
Sub Main(args As String())
Dim mqttFactory = New MqttFactory()
Dim mqttClient = mqttFactory.CreateMqttClient()

Dim options = New MqttClientOptionsBuilder() _
.WithClientId("ClientID") _
.WithTcpServer("broker.hivemq.com", 1883) _
.WithCleanSession() _
.Build()

AddHandler mqttClient.UseConnectedHandler, Async Sub(e)
Console.WriteLine("Conectado al broker.")
Dim topicFilter = New MqttTopicFilterBuilder() _
.WithTopic("casa/sala/temperatura") _
.Build()
Await mqttClient.SubscribeAsync(topicFilter)
End Sub

AddHandler mqttClient.UseDisconnectedHandler, Sub(e)
Console.WriteLine("Desconectado del broker.")
End Sub

AddHandler mqttClient.UseApplicationMessageReceivedHandler, Sub(e)
Console.WriteLine($"Mensaje recibido en {e.ApplicationMessage.Topic}: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}")
End Sub

Await mqttClient.ConnectAsync(options)

Dim message = New MqttApplicationMessageBuilder() _
.WithTopic("casa/sala/temperatura") _
.WithPayload("23.5") _
.WithExactlyOnceQoS() _
.WithRetainFlag() _
.Build()

Await mqttClient.PublishAsync(message)

Console.WriteLine("Presiona cualquier tecla para salir.")
Console.ReadLine()

Await mqttClient.DisconnectAsync()
End Sub
End Module

Instalación y Configuración del Broker Mosquitto

Para comenzar, instalé y configuré mi propio broker MQTT usando Mosquitto:

Instalación en Linux:

  1. Actualiza los paquetes de tu sistema:
sudo apt-get update

2. Instala Mosquitto y los clientes Mosquitto:

mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"
3 – Inicia el servicio Mosquitto
sudo systemctl start mosquitto
sudo systemctl enable mosquitto

Publicar y Suscribirse usando Mosquitto Clients

  1. Publicar un mensaje:
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT"

2 Suscribirse a un tema:

mosquitto_sub -h localhost -t "test/topic"

Reflexiones Finales

Explorar MQTT ha sido una experiencia increíblemente enriquecedora. Su simplicidad, eficiencia y flexibilidad lo hacen ideal para una amplia gama de aplicaciones, desde el monitoreo de sensores hasta la automatización del hogar. Si estás interesado en el mundo IoT, te animo a que experimentes con MQTT. La instalación y configuración son bastante sencillas, y hay una gran cantidad de recursos y bibliotecas disponibles para ayudarte a comenzar.

¡Espero que esta introducción te haya inspirado a explorar más sobre MQTT! Si tienes alguna pregunta o comentario, no dudes en dejarlo abajo. ¡Hasta la próxima!

Home Sin categoría Introducción a MQTT: Comunicación eficiente para dispositivos IoT
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies