Mosquitto es un broker de mensajería Open Source(licencia EPL/EDL) que implementa el protocolo MQTT para las versiones 3.1 y 3.1.1. Mosquitto es parte de Eclipse foundation y es un proyecto de Eclipse. Mosquitto es ligero y es adecuado para todos los dispositivos, desde computadoras de baja potencia hasta servidores complejos.
El protocolo MQTT (MQ Telemetry Transport or Message Queuing Telemetry Transport) es un estándar ISO basado en un método sencillo para realizar intercambio de mensajes conforme el modelo productor-consumidor en sistemas de Internet de las cosas ( IoT – Internet of the Thinks). Los dispositivos que se conectan pueden ser sensores, dispositivos móviles, microcontroladores o sistemas embebidos.
El sketchnote de la entrada es el definido en la siguiente imagen:
Instalación
La descripción del proceso de instalación está basada en plataformas Linux; pero, para el resto de plataformas (Windows, Mac,…), el proceso de instalación es el típico para dichas plataformas. La información de instalación para cada plataforma, se encuentra en el apartado Download de la documentación oficial.
Los comandos a ejecutar para la instalación de Mosquitto son los siguientes:
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa sudo apt-get update sudo apt-get install python-software-properties sudo apt-get install mosquitto
Estructura de carpetas
El proceso de instalación nos creará una estructura de directorios como la siguiente:
- /etc/mosquitto.- Carpeta con los ficheros de configuración del broker. El contenido del directorio es el siguiente:
-> directorio ca_certificates.-Directorio de certificados
-> certs.- Directorio de certificados
-> conf.d .- Directorio de configuración
-> mosquitto.conf .- Fichero de configuración
- /usr/sbin .- En esta carpeta se localiza el fichero de arranque mosquitto.sh
- /var/log/mosquitto .- Directorio en el que se encuentra el fichero mosquitto.log
Inicio del broker
Para iniciar el broker de mensajería Mosquitto es necesario la ejecución del comando mosquitto identificando la ubicación del fichero de configuración. El comando de ejecución del broker es el siguiente:
sudo /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
El flag -c indica al comando mosquitto la ubicación del fichero de configuración mosquitto.conf. Si se desea conocer la información del comando, es decir, la ayuda del comando, se puede ejecutar el comando:
/usr/sbin/mosquitto -h
El resultado de la ejecución del comando, será que el broker Mosquitto está ejecutándose en la máquina en el puerto por defecto 1883.
Cliente del Broker
Una vez instalado e iniciado el broker es necesario definir el mecanismo por el cual poder conectarse y realizar una comunicación. Para realizar dichas operaciones, es necesario la instalación de un cliente específico MQTT; dicho cliente, servirá para la realización de simulaciones de dispositivos MQTT. El nombre del dispositivo es mosquitto-clients y, el comando de instalación en la plataforma Linux, es el siguiente:
sudo apt-get install mosquitto-clients
El cliente instalado es aquel cliente que permite simular el funcionamiento de los productores, entidades que generan información MQTT; y, consumidores, entidades que reciben los datos suministrados por los productores.
Para el broker Mosquitto, los productores de datos se denominan publicadores y, los que consumen los datos, subscriptores.
Topic
Llegado a este punto, disponemos del broker MQTT instalado y ejecutándose; tenemos instalado el cliente para definir los publicadores y los subscriptores; pero, no tenemos definido el mecanismos de interconexión entre los clientes. El mecanismo en cuestión son los topics. Los topics son aquellos buzones en los cuales los publicadores dejan sus mensajes. Así, un publicador dejan en un topic aquel mensaje que quiere transmitir al subscritor; y, el subscriptor, en el instante de la publicación de un mensaje, recibe dicho mensaje.
Como he comentado antes, los dispositivos que se pueden conectar son múltiples: sensores, sistemas embedidos, dispositivos móviles; con lo cual, es necesario una organización de todos los elememtos. Así, para el supuesto de un sistema IoT de los sensores de una casa, podemos definir los dispositivos en una estructura jerárquica de la siguiente forma:
– casa
– habitaciones
– hab1
– luz: sensor de luz
– temperatura: sensor de temperatura
– hab2
– luz: sensor de luz
– temperatura: sensor de temperatura
– trastero
– luz: sensor de luz
– temperatura: sensor de temperatura
– humedad: sensor de humedad
Dada la estructura anterior, definimos los siguientes topic como ejemplos en el broker de la siguiente manera:
- casa/habitaciones/hab1/luz.- Topic del sensor de luz de la habitación 1
- casa/habitaciones/hab2/luz.- Topic del sensor de luz de la habitación 2
- casa/trastero/humedad.- Topic del sensor de humedad del Trastero.
Ejemplos
Los clientes del broker MQTT Mosquitto pueden ser: subscriptores, entidades que reciben datos de sensores; y, publicadores, los sensores que envían datos al broker. Para realizar la simulación desde consola, utilizamos los comandos siguientes comandos: mosquitto_sub, comando para la simulación de subscriptores; y, mosquitto_pub, comando para la simulación de sensores.
En los siguientes apartados, describiré la ejecución de cada uno de los comados.
Subscriptor
El comando para la simulación de subscriptores es el comando mosquitto_sub. Un ejemplo básico de subscripción en el topic «casa/habitaciones/hab1/luz» es el siguiente:
mosquitto_sub -t "casa/habitaciones/hab1/luz" -v
El flag -t identifica el topic de subscripción y, el flag -v, indica que sea verboso. Para visualizar la ayuda del comando se ejecuta el comando con los flag –help.
Publicador
El comando para la simulación de publicadores de mensajes es el comando mosquitto_pub. En ejemplo básico de publicación del mensaje «ON» en el topic «casa/habitaciones/hab1/luz» es el siguiente:
mosquitto_pub -t "casa/habitaciones/hab1/luz" -m "ON"
El flag -t identifica el topic de subscripción y, el flag -m, identifica el mensaje a enviar al broker.Para visualizar la ayuda del comando se ejecuta el comando con los flag –help.
La publicación del mensaje «ON» produce la salida por consola de subscriptor. Así, la salida de la consola del subscriptor es la siguiente:
casa/habitaciones/hab1/luz ON
Conclusiones
El broker MQTT Mosquitto es un broker ligero y sencillo de utilizar. En la presente entrada, me he centrado en la instalación y casos de uso básicos, no he tratado en esta entrada los aspectos orientados a la seguridad los cuáles en los sistemas IoT son importantes.
Desde un punto de vista genérico, el funcionamiento de Mosquitto es el típico de un broker que implementa un modelo productor/consumidor.
En la siguiente entrada, me centraré en la utilización del broker Mosquitto desde una aplicación en Python con el cliente paho-mqtt.