Mosquitto es un Broker de mensajería de código abierto (licencia EPL/EDL) que utiliza el protocolo de comunicación MQTT (en su versión 5.0, 3.1.1 y 3.1). Una de sus ventajas es su bajo consumo de datos y su compatibilidad de uso desde computadoras de baja gama hasta servidores industriales. El método de mensajería que usa MQTT (suscripción y publicación) permite su uso con facilidad en aplicaciones como el internet de las cosas, sensores, móviles, microcontroladores, entre otros. Por ejemplo nuestro PLC con arduino Controllino MAXI Automation (el cuál cuenta con su Librería MQTT), nuestro datalogger Z-LTE-WW con compatibilidad para este protocolo o nuestra HMI P5070NA que también permite este tipo de comunicación.
Desde la página de Mosquitto (https://mosquitto.org/) podemos encontrar 2 opciones para su uso: la primero es descargar el programa en nuestra computadora y utilizar el símbolo de sistema para simular el funcionamiento del Broker; la segunda es registrar el servidor de Mosquitto (test.mosquitto.org) en una plataforma MQTT y realizar las funciones de mensajería y suscripción de estos mensajes. En la imagen debajo vemos el funcionamiento dentro de una plataforma MQTT.
Pero, ¿qué significan los datos que vemos en esta plataforma? En la librería de Mosquitto existen diversos comandos para realizar la interacción de mensajería entre clientes y el Broker. Para ejemplificar de la manera más sencilla les compartiré los comandos sencillos que se usan para la publicación y suscripción en el servidor mediante el símbolo de sistema.
Lo primero es que al conectarse al servidor de Mosquitto se elige un puerto local en nuestra computadora (los puertos por default que usa el programa automáticamente son el 1883 o el 8883). La imagen debajo ejemplifica el proceso que hace la plataforma al conectarse al servidor Broker.
Existen 2 comandos para el servidor de Mosquitto:
Mosquitto_sub nos permite suscribirnos a un tópico o tema en el cual los clientes suben la información de forma continua; mientras que mosquitto_pub realiza la carga de la mensajería al servidor de Broker. En el ejemplo tenemos diversos comandos. A continuación, se explican cada uno:
- El comando ‘-h’ sirve para conectarse al host donde se encuentra el Broker (el ejemplo se conecta al servidor de Mosquitto, para otros servidores se debe colocar la dirección IP correspondiente).
- El comando ‘-p’ sirve para utilizar el puerto al que se realiza el flujo de información entre clientes y el Broker.
- El comando ‘-t’ sirve para indicar el tema al cual se va a realizar la publicación y/o se desea suscribir para recibir los datos dentro del mismo. Vemos en el ejemplo que existe una diagonal (/), esto permite crear subtemas dentro de un tema; el carácter ‘#’ funciona para que un cliente se suscriba a todos los subtemas contenidos dentro de un tema principal (también puede usarlo para suscribirte a todos los temas del servidor, ejemplo: mosquitto_sub -h test.mosquitto.org -p 8883 -t # -d -q 2).
- El comando ‘d’ sirve para habilitar los estados del mensaje (muy importante para QoS 0, QoS 1 y QoS 2).
- El comando ‘m’ sirve para escribir el dato que se desea publicar.
- El comando ‘q’ nos indica el nivel de “Calidad del servicio” o “QoS” con el que queremos enviar/recibir la información.
Al utilizar el comando “mosquitto_sub” del ejemplo de arriba nos suscribiremos al tópico “Logicbus/prueba”, y podremos ver los mensajes con el nivel de calidad del servicio 2 (QoS 2). Con el comando “mosquitto_pub” se enviará al servidor Broker un mensaje con el nivel QoS 2. Una regla que usa Mosquitto es que tanto la publicación como la suscripción deben tener el mismo nivel Qos para que el flujo de datos se muestre con dicho nivel, ya que de lo contrario el mensaje tomará como criterio el nivel más bajo establecido. En la siguiente tabla vemos los escenarios y el nivel resultante para cada uno:
Entonces si un cliente se suscribe a un tópico con nivel Qos 2 dependerá del nivel QoS de la publicación el flujo de datos que verá. Como ejemplo vamos a suscribirnos al tópico con Qos 2 (se omite el puerto en estos ejemplos por error en conexión, pero al no especificar uno el servidor automáticamente utiliza uno de los disponibles ilustrados en su sitio web: https://test.mosquitto.org/):
Ahora vamos a realizar la publicación de la mensajería hacia el tópico dentro del servidor Broker en cada uno de los niveles de QoS. Para el flujo de datos en Qos 2:
El cliente suscrito obtiene la siguiente respuesta:
La primera línea indica el recibo del mensaje publicado al tópico suscrito (Broker -> Cliente), la segunda envía un mensaje de recepción del dato (Cliente -> Broker), la tercera se genera para confirmar la recepción del dato (Broker -> Cliente), la cuarta manda una respuesta positiva a la solicitud de confirmación del dato y finaliza la comunicación del mensaje (Cliente -> Broker). La última línea muestra el dato. Con este nivel se asegura el envío y recepción del mensaje una sola vez. La desventaja es que se consumen más datos por cada flujo.
El siguiente caso muestra un flujo de datos en QoS 1:
Como podemos ver el Broker manda el dato publicado al suscriptor, y el cliente indica al servidor la recepción del dato. En este caso puede existir el envío repetido del dato si hubo un error de envío con el mensaje anterior y posteriormente se reanuda el flujo. Esta opción consume menos datos que el QoS 2.
Por último, tenemos el caso de flujo de datos en QoS 0:
Aquí solamente el Broker manda el dato publicado al suscriptor. Es el nivel que consume menos datos, pero con la desventaja de que no se asegura siempre la recepción de la información a los suscriptores.
En conclusión, Mosquitto es una excelente herramienta que nos permite familiarizarnos con el protocolo MQTT y conocer el flujo de datos que podemos manejar. Existen otros servidores parecidos con los que también puede crear sus sistemas de mensajería.
En Logicbus ponemos nuestro conocimiento a su alcance para facilitar sus procesos donde desee tener la comunicación MQTT. Esperamos con mucho gusto sus dudas y agradecemos su atención.
Contáctanos
ventas@logicbus.com | soporte@logicbus.com | 55-5431-67-18 | Iniciar conversación