INTRODUCCIÓN
El módulo MQTT implementa soporte para el protocolo MQTT, permitiendo una integración sencilla de los controladores con la nube.
El protocolo MQTT se basa en un concepto de PUBLISH/SUBSCRIBE. En este modelo, los equipos publican datos en un servidor centralizado. Los equipos que están interesados en estos datos se suscriben a ellos. Cuando un dato es publicado en el servidor, todos los que estén suscritos recibirán el nuevo dato publicado. Este servidor centralizado se denomina broker.
El protocolo MQTT define que los datos se publican en tópicos. Un tópico es una cadena jerárquica que identifica de forma única una determinada variable. Por ejemplo:
Edificio_X/piso_1/sala_101/temperatura_ambiente
Los tópicos MQTT pueden ser seleccionados libremente por la aplicación. Al suscribirse para recibir actualizaciones, un cliente puede usar caracteres especiales para definir que está interesado en todas las publicaciones de una determinada jerarquía.
La implementación del protocolo MQTT en los controladores soporta tanto la publicación (publish) de datos como la recepción (subscribe) de datos.
Actualmente, el módulo soporta las versiones 3.1.1 y 5.0 del protocolo.
BLOQUE MQTT_CLIENT
El bloque CLIENT es responsable de gestionar la conexión del controlador con el servidor MQTT (broker). Solo puede existir una única instancia de este bloque en el programa.

CONTROL DE LA CONEXIÓN
La entrada EN controla la conexión del controlador con el broker. Con la entrada activada, el controlador intenta conectarse al servidor. Incluso si el broker lo desconecta, el bloque vuelve a intentar la conexión mientras la entrada EN permanezca activa.
La salida CONN indica el estado de la conexión con el broker. Los bloques PUB y SUB solo operan cuando el controlador está conectado al servidor.
La salida STATE indica el estado actual del proceso de conexión. Si ocurre algún error durante el proceso, se mostrará un código de error en la salida ERROR. Los códigos de estas salidas están definidos en la ayuda del bloque.
CONFIGURACIONES
En las configuraciones del bloque MQTT_CLIENT se definen los parámetros del servidor (broker).

VERSIÓN DEL PROTOCOLO
Es posible seleccionar entre las versiones 3.1.1 y 5.0 del protocolo. Se recomienda el uso de la versión 5, pero algunos brokers aún no soportan esta versión. Las diferencias de funcionalidad entre ambas versiones en la implementación del controlador son mínimas. Cuando existan, se destacarán en los siguientes tópicos.
SERVIDOR / TRANSPORTE
En estas configuraciones se definen la dirección del broker (IP o host) y el puerto TCP del servicio MQTT. Los equipos con interfaz únicamente Ethernet no soportan resolución de nombres, siendo obligatorio el uso de IP. La configuración de transporte define la capa de transporte que se utilizará para el protocolo MQTT.
Actualmente se soportan los protocolos TCP (conexión simple, sin cifrado) y TLS (seguro, con cifrado). La versión del protocolo TLS depende del broker y se recomienda el uso de TLS 1.2 o superior.
AUTENTICACIÓN
Con el fin de garantizar la evolución de los algoritmos de autenticación y seguridad cibernética, el protocolo MQTT no define una forma fija de autenticación, sino únicamente un protocolo para que esta se realice durante la conexión con el servidor. La configuración “method” define el algoritmo que se utilizará.
Actualmente, los controladores implementan únicamente el método básico de autenticación del protocolo MQTT, mediante usuario y contraseña. Si los parámetros de usuario o contraseña se dejan en blanco, no se enviarán. El significado de estos dos parámetros depende del broker y, en algunos casos, se utilizan para otros fines. Consulte la documentación del broker.
El parámetro Client ID identifica de forma única al controlador en el broker. Si se recibe una nueva conexión con el mismo Client ID, la conexión anterior es descartada. Algunos brokers permiten que este parámetro sea una cadena vacía; en este caso, el propio broker definirá un ID único para el cliente.
MENSAJE WILL
El mensaje will (testamento) puede habilitarse si se desea. Este mensaje es publicado en el tópico seleccionado directamente por el broker cuando el controlador se desconecta. Si la desconexión se realiza de forma formal (mensaje DISCONNECT, desactivando la entrada EN del bloque CLIENT), el mensaje will no se envía.
El parámetro Delay define el retardo para el envío del mensaje will. Si el cliente se conecta nuevamente antes de que este retardo expire, el mensaje will no se envía.
Los demás parámetros tienen el mismo significado que los de las publicaciones realizadas por el bloque PUB.
BLOQUES MQTT_PUB
Los bloques PUB son responsables del envío de datos al broker.

Para cada formato de dato soportado por el lenguaje gráfico, existe un bloque PUB correspondiente (BOOL, INT y FLOAT). Estos bloques envían al broker el valor de la entrada en formato texto. Para un mejor control del formato del mensaje, se debe utilizar el bloque MQTT_PUB, que permite seleccionar libremente el formato del mensaje (payload). Consulte el manual del módulo TAGS para más detalles.
La entrada EN habilita el envío de datos del bloque. La entrada VALUE define el valor que será enviado.
DISPARO
Existen 3 formas de publicación de los datos: manual, por tiempo y por variación de valor. Es posible usar cualquier combinación de estos disparos.
El disparo MANUAL se realiza mediante la entrada PUB. Cada vez que se detecta un flanco de subida en esta entrada, se envía una publicación al servidor.
El disparo por TIEMPO se realiza configurando el parámetro TIME en las propiedades del bloque. Este parámetro indica, en HORAS:MINUTOS, el intervalo de publicación. Este tiempo se sincroniza con el reloj del controlador. El parámetro START OFFSET permite definir el desfase inicial en minutos. Por ejemplo, si TIME es 01:00 y OFFSET es 30, el envío se realizará a las 00:30, 01:30, etc. Si el parámetro TIME es cero, el disparo por tiempo queda deshabilitado.
El disparo por VARIACIÓN DE VALOR se habilita cuando se configura el parámetro VALUE CHANGE con un valor distinto de cero. Si la variación del valor es mayor o igual a este parámetro (en relación con el último envío), se publica un nuevo valor.
PARÁMETROS DE MQTT
En las propiedades del bloque es necesaria la configuración de los parámetros para la publicación en el broker MQTT.
El parámetro TOPIC define el tópico que será publicado. Este valor se envía por el protocolo tal como fue configurado, sin tratamiento.
El parámetro QOS indica la calidad del servicio.
Publicaciones con QOS 0 se envían solo una vez, sin confirmación del servidor. Se recomienda para datos enviados a intervalos regulares, donde la pérdida de un dato no es relevante.
Publicaciones con QOS 1 son confirmadas por el servidor, garantizando la entrega. En este nivel, el broker puede recibir el mismo dato más de una vez, debido a reenvíos si el servidor no confirma a tiempo.
Publicaciones con QOS 2 garantizan la entrega y el recibo único por parte del broker.
Se recomienda que los niveles QOS 1 y 2 se utilicen solo cuando sea necesario para la aplicación, debido a la mayor complejidad de envío y al mayor uso de recursos del controlador.
El parámetro EXPIRY INTERVAL define el tiempo de validez del mensaje en el broker, en segundos. Cuando el mensaje es publicado, su valor se envía a todos los clientes suscritos al tópico. Algunos brokers soportan el almacenamiento de estos mensajes para su envío cuando se producen nuevas suscripciones al tópico o cuando los clientes se reconectan. En estos casos, el parámetro expiry interval define el tiempo durante el cual el mensaje permanece almacenado en el broker.
El parámetro RETAIN define si el mensaje debe permanecer almacenado en el servidor. Si retain es false, los mensajes publicados se envían únicamente a los clientes suscritos y conectados en el momento de la publicación. Existen varios brokers que no soportan mensajes retenidos, y la publicación con el parámetro retain puede provocar la desconexión del broker.
BLOQUES MQTT_SUB
Los bloques SUB se utilizan para que el controlador se suscriba a un determinado tópico y reciba datos del broker.

De la misma forma que los bloques PUB, existe un bloque para cada formato de dato soportado por el lenguaje gráfico.
Cuando está conectado al broker, la entrada EN controla el estado de la suscripción. Al activarse, el bloque se suscribe al tópico. Al desactivarse, el bloque cancela la suscripción. La salida VALUE contiene el último valor recibido. La validez de este valor depende de la salida STATE, que indica el estado de la suscripción. Si STATE es 3, el bloque está suscrito al tópico, pero aún no se ha recibido ninguna publicación (valor). Cuando STATE es 4, la salida VALUE es válida.
Si ocurre algún error durante el proceso de suscripción, la salida ERROR indica el código del error ocurrido. Consulte la ayuda del bloque para más detalles.
La salida PUB_TIME indica el tiempo transcurrido (en segundos) desde la última publicación recibida.
PARÁMETROS DE MQTT
El parámetro TOPIC define el tópico al cual suscribirse. Este parámetro se envía en el protocolo tal como fue configurado, sin tratamiento.
El parámetro MAX QOS define el QOS máximo que puede recibirse en esta suscripción. Según las reglas del protocolo, las publicaciones con un QOS superior a este parámetro no son enviadas por el broker. En la práctica, la mayoría de los brokers permiten modificar el QOS original de la publicación para reducirlo al límite de la suscripción.
El parámetro RETAIN HANDLING define cómo deben tratarse los mensajes retenidos en el broker para el tópico de la suscripción. Es posible recibir estos mensajes después de la suscripción o no.
FORMATO DE DATOS
El protocolo MQTT no define el formato del dato enviado (payload), ya que este es definido por la aplicación.
Actualmente, el controlador envía el payload en formato texto. Consulte con soporte para otros formatos, si es necesario.
¿Le fue útil este artículo?
¡Qué bueno!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Comentarios enviados
Agradecemos su iniciativa, e intentaremos corregir el artículo