MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería estándar creado por OASIS para el IoT. Este protocolo basado en publicación y suscripción de mensajes es extremadamente ligero. Tanto es así, que se utiliza actualmente para la conexión de dispositivos remotos que poseen una memoria para código pequeña y un ancho de banda de red mínimo. MQTT se utiliza hoy en día, además de para makers y dispositivos IoT, en una amplia variedad de industrias, como pueden ser la de automoción, manufactura, telecomunicaciones, petróleo, gas, etc.

El envío de mensajes se basa en la utilización de un Broker al cual los distintos dispositivos se conectan para publicar mensajes en topics, leer estos mensajes, o realizar ambas acciones. Un esquema del funcionamiento sería el de la siguiente imagen (MQTT, 2023)

Ligero y eficiente
Los clientes MQTT requieren recursos mínimos, por lo que se pueden usar 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-nube y entre nube-dispositivo. Esto facilita la transmisión de mensajes a grupos de cosas.

Escala a millones de cosas
MQTT es escalable para conectarse con millones de dispositivos IoT.

Entrega de mensajes confiable
La confiabilidad de la entrega de mensajes es importante para muchos casos de uso de IoT. Esta es la razón por la que MQTT tiene 3 niveles de calidad de servicio (Quality of Service o QoS) definidos: 0: como máximo una vez; 1: al menos una vez; 2: exactamente una vez.

Soporte para redes no confiables
Muchos dispositivos IoT se conectan a través de redes celulares poco confiables. El soporte de MQTT para sesiones persistentes reduce el tiempo para volver a conectar al cliente con el Broker.

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

Existen bastante Brokers MQTT públicos con los que puedes practicar la lectura y el envío de mensajes: HiveMQ (HiveMQ, 2023), Eclipse (Eclipse, 2023), mosquitto (Mosquitto, 2023), etc.

También existen varios métodos para conectarse a cualquier Broker MQTT, dependiendo del sistema operativo que utilices y del lenguaje de programación que uses. Algunos ejemplos son los siguientes (Cope, Beginners Guide To The MQTT Protocol, 2018)

  • Paho Python client (Python Package Index, 2021)
  • Node.js MQTT Client (npm – , 2022)
  • JavaScript Websockets (Cope, Using The JavaScript MQTT Client With Websockets, 2022)
  • C++ Client with Arduino (Söderby, s.f.)

En este post, utilizaremos un cliente MQTT llamado MQTT-Explorer (Nordquist, 2019) disponible para Windows, Mac y Linux.

Tras su descarga (y opcionable instalación para la versión portable) lo ejecutaremos y aparecerá una ventana parecida a la siguiente:

Aquí podemos o bien conectarnos a un Broker público ya existente o a uno privado que hayamos creado nosotros. Veremos cómo se hace esto en el siguiente apartado.

Una vez que elegimos el Broker al que nos conectamos, introduciremos (si procede) usuario y contraseña para acceder al Broker. En este caso, nos conectaremos al Broker público de mosquitto. Para este Broker puedes dejar usuario y contraseña en blanco, puesto que no requiere ninguna identificación para conectarse.

Una vez que hacemos click en el botón de “Connect”, aparecerán todos los topics que hay publicados en este Broker. Al tratarse de un Broker público y abierto, es muy posible que la información que aparezca sea muy diversa y, si queremos ver la publicación de nuestros datos en uno de los topics, nos cueste algo de trabajo encontrarlo. Resolveremos este problema en nuestro propio Broker que vamos a crear a continuación.

En primer lugar, deberemos dirigirnos a la página web de mosquitto y buscar la sección de descargas para obtener el archivo instalador (https://mosquitto.org/download/). En nuestro caso elegiremos el instalador para Windows de 64 bits.

La instalación es sencilla: Únicamente tendras que hacer click en “Next” hasta que salga el botón de “Install”. Una vez instalado mosquitto (no durará más de unos 10 segundos), hacemos click en “Finish” para salir del proceso de instalación.

Con esto, ya tendríamos nuestro propio Broker creado pero no estará corriendo aún. Para ejecutarlo tendremos que abrir el administrador de tareas, abrir la pestaña de “Servicios” y buscar “mosquitto”. Aparecerá como “Detenido” así que haz click derecho en el servicio y  selecciona “Iniciar”. Su estado ahora habrá cambiado a “En ejecución”. Con esto ya tenemos el Broker corriendo.

 Para conectarnos a él, simplemente tendremos que abrir de nuevo MQTT-Explorer y en la parte superior izquierda añadir una nueva conexión tal y como se muestra en la siguiente imagen.

Una vez conectados, veremos que no hay ningún topic más allá de “$SYS”. Para escribir en uno, prueba a escribir en el apartado de “Publish” un topic como “Test/topic/ejemplo”, y en el mensaje escribe cualquier cosa que se te ocurra. No olvides poner el tipo de mensaje como “raw”, a no ser que sepas (y quieras) escribir en formato xml o json. Fíjate en la siguiente imagen para ver estos detalles.

Ahora veremos cómo configurar un usuario y contraseña para securizar un poco nuestros datos. La configuración del Broker se guarda en un fichero llamado “mosquitto.conf” que, si hemos instalado el software en la ruta sugerida, se encuentra en “C:\Program Files\mosquitto”. Al abrirlo con el bloc de notas o similar, veremos que tiene 905 filas de texto que puede ser tedioso de leer. Por ello, para tener un broker mínimamente seguro te aconsejo que cambies el nombre al archivo “mosquitto.conf” a algo parecido a “mosquitto.conf.old” para tener un backup de cómo es un archivo completo de configuración de mosquitto (aunque puedes encontrarlo por internet sin ningún problema). Recuerda detener el servicio de mosquitto del mismo modo que antes, a través del administrador de tareas. Ahora, abre un bloc de notas o similar con permisos de administrador y copia lo siguiente:

listener 1883 0.0.0.0

allow_anonymous false

password_file C:/Program Files/mosquitto/password-file

Como verás, hemos añadido una ruta a un archivo de contraseñas, el cual crearemos ahora mismo mediante dos alternativas (Cope, Mosquitto Username and Password Authentication -Configuration and Testing, 2022):

Abre un bloc de notas como administrador y escribe un usuario y contraseña con el que tendrá que logearse cualquiera que quiera acceder al Broker de la siguiente forma:

Usuario:contraseña

Por ejemplo, nosotros en este blog crearemos un usuario que se llame ATGuser y con contraseña mqttbroker. Por tanto, deberemos de escribir en el bloc de notas:

ATGuser:mqttbroker

Para guardarlo, deberemos de utilizar el mismo nombre que hemos puesto en el archivo de configuración de mosquito: password-file. También puedes escoger otro nombre tú mismo, pero recuerda cambiarle el nombre en el archivo mosquitto.conf para que surta efecto.

Importante: bórrale la extensión .txt al archivo password-file para que el script de mosquitto_passwd lo encuentre. Cuando salga el aviso de que se pueden perder los datos que contenga el archivo, haz click en aceptar, no te preocupes por esto.

Cierra el bloc de notas y abre un terminal como administrador (botón de inicio y escribe “cmd”) y cambia al directorio en el que está instalado mosquitto. Por defecto, se instala en C:/Program Files/mosquitto, así que muévete con el comando “cd” hasta esta carpeta.

Ahora, tendrás que ejecutar el script de mosquitto_passwd seguido de una serie de argumentos:

mosquitto_passwd –U <passwordfile>

En nuestro caso:

mosquitto_passwd –U password-file

 Si vuelves a abrir el documento password-file verás que ha cambiado un poco el contenido.

La contraseña ahora está encriptada, pero mosquitto entiende perfectamente cuál es la contraseña que hemos escogido.

Ahora, inicia de nuevo el proceso de mosquitto desde el administrador de tareas y comprobarás que, al intentar entrar con MQTT-Explorer, necesitarás incluir usuario y contraseña para poder conectarte.

También se puede crear el archivo password-file desde la terminal de comandos de la siguiente forma:

mosquitto_passwd –c <passwordfile> <user>

En nuestro caso, tomando el mismo ejemplo, sería:

mosquitto_passwd –c password-file ATGuser

Desde el terminal te pedirá una contraseña. No podrás ver lo que estás escribiendo, así que presta cuidado a escribirla correctamente.

Esto sería todo para este método, recuerda reiniciar el servicio de mosquitto desde el administrador de tareas para que surta efecto.

Cope, S. (2018). Beginners Guide To The MQTT Protocol. Obtenido de http://www.steves-internet-guide.com/mqtt/.

Cope, S. (2022). Mosquitto Username and Password Authentication -Configuration and Testing. Obtenido de http://www.steves-internet-guide.com/mqtt-username-password-example/.

Cope, S. (2022). Using The JavaScript MQTT Client With Websockets. Obtenido de http://www.steves-internet-guide.com/using-javascript-mqtt-client-websockets/.

Eclipse. (2023). Eclipse MQTT Broker. Obtenido de https://projects.eclipse.org/projects/iot.mosquitto.

HiveMQ. (2023). The Free Public MQTT Broker. Obtenido de https://www.hivemq.com/public-mqtt-broker/.

Mosquitto. (2023). Mosquitto MQTT. Obtenido de https://test.mosquitto.org/.

MQTT. (2023). Página principal de MQTT. Obtenido de https://mqtt.org/.

Nordquist, T. (2019). MQTT Explorer. Obtenido de http://mqtt-explorer.com/.

npm – . (2022). MQTTjs. Obtenido de https://www.npmjs.com/package/mqtt#store.

Python Package Index. (2021). paho-mqtt. Obtenido de https://pypi.org/project/paho-mqtt/.

Söderby, K. (s.f.). Sending Data over MQTT. Obtenido de https://docs.arduino.cc/tutorials/uno-wifi-rev2/uno-wifi-r2-mqtt-device-to-device.

No hay comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *