Instalar Mosquitto fácil y rápido

La parte de rápido depende mucho de la conexión de internet de cada uno para poder descargar los archivos, habiendo hecho esta salvedad.

Nos encontramos que para la mayoría de los proyectos IoT en los que trabajamos necesitamos tener disponible un servidor broker para poder enviar mensajes con el dispositivo que estamos armando; en muchas ocasiones con un broker publico de internet solucionamos el problema, pero otras veces necesitamos tener algo local (a raíz que nuestra conectividad no es estable o simplemente no disponemos de acceso a internet donde vamos a instalar el dispositivo).

Mosquitto es uno de los brokers mas utilizado por ser opensource y ser mantenido por la fundación Apache, para instalarlo es entornos linux es sencillo simplemente lo hacemos por medio del gestor de paquetes.

Pero la realidad es que en la mayoría de los laboratorios en escuelas o universidades las pcs tiene Windows; e instalar el servicio del broker resulta un poco engorroso, particularmente si no se va a usar de manera dedicada y no queremos el servicio corriendo.

La forma mas sencilla de instalarlo es utilizando el esquema de contenedores de Docker, tres sencillos pasos:

  1. Será necesario instalar primero Docker en nuestra pc, la instalación es sencilla simplemente damos continuar y al finalizar nos pedirá reiniciar el sistema.
  2. Luego que tengamos Docker corriendo en el sistema (en la traybar veremos el icono de la ballena) ejecutamos desde la consola:
docker pull eclipse-mosquitto

Para que descargue el contenedor de mosquitto en nuestra pc.

3. Creamos una instancia del contenedor, especificando el puerto sobre el que va a trabajar, utilizaremos los puertos 9001 y 1883 que son estándar para este servicio:

docker run -p 1883:1883 -p 9001:9001 eclipse-mosquitto

Esto crea un contenedor que sirve para entornos de prueba y laboratorio, no se guarda las configuraciones, ni tienen ningún mecanismo de seguridad.

Pero la puesta en marcha es rápida y sin complicaciones; luego de que se haya descargado la primera vez el contenedor las siguientes ejecuciones son aun mas ágiles.

MQTT a Excel

Un inconveniente que me suelo encontrar al trabajar con sensores remotos es el hecho de monitorear las mediciones y recolectar los datos de forma sencilla. Si bien existen herramientas geniales como ThingSpeak que nos permiten ver los datos en un gráfico; muchas veces trabajamos con equipos que solo implementan un protocolo MQTT y lo necesitamos para operar.

Para ello arme un pequeño programa en Python que permite conectarse a un servidor broker, suscribirse a uno o mas tópicos del servidor e ir registrando en una planilla de cálculo os datos de estos dispositivos remotos.

Además del nombre del servidor, toma el nombre con el que se va a guardar el archivo Excel y la cantidad de registros que deseamos almacenar; si no indicamos este ultimo parámetro la librería solo tomara 10 registros.

Serán los primeros 10 que lleguen, es decir si le indicamos que se suscriba a dos tópicos: TOPIC1 y TOPIC2, y recibimos 9 mensajes de TOPIC1 y solo 1 de TOPIC2 esos serán los 10 registros que se almacenaran en la planilla.

El link al repositorio es el siguiente:
https://github.com/gsampallo/mqtt2excel

Antes de comenzar a utilizarlo será necesario tener instalado Python en la pc además de dos librerías:

1. xlwt Para el manejo de la planilla de cálculo, se instala por medio de pip:

pip install xlwt

2. paho.mqtt brinda la posibilidad de conectarnos a un servidor broker, también lo instalamos por medio de pip:

pip install paho.mqtt

Luego que se haya completado el paso anterior, podemos editar el archivo example.py para adecuarlo a nuestro uso; solo necesitamos modificar en dos puntos:

from MQTT2Excel import MQTT2Excel

broker_server = "AQUI INDICAMOS EL SERVIDOR BROKER"

m2e = MQTT2Excel(broker_server,"demo1.xls")

m2e.setRecordsNumber(50) #indicamos que registre 50 lecturas (la suma de todos los mensajes de los topicos)

m2e.addTopics("TOPICO1") #Indicamos el nombre del topico al que queremos suscribirnos
# Si tuvieramos mas simplemente agregamos una linea con el nombre del segundo topico
# m2e.addTopics("TOPICO2")

m2e.start()

De esta forma el programa tomara 50 lecturas y las almacenara en una planilla excel junto con la fecha y hora en que fue recibido el mensaje.

Luego simplemente es cuestion de ejecutar el programa example.py (pueden cambiarle el nombre si lo desean)

Comenzaremos a ver los datos que llegan desde el dispositivo.

Al cabo de un tiempo tendremos completos los 50 registros (salvo que cambiemos la cantidad que requerimos) y el programa se detendrá.

En ese punto ya dispondremos de nuestro archivo excel.

Como se puede apreciar es bastante sencillo de utilizar, quedan algunas cosas por pulir por ejemplo parametrizar si el servidor broker requiere un usuario y clave (aunque solo basta agregar dos lineas); y llegado el caso detectar el tipo de dato que se recibe para formatear la celda, pero no es un problema mayor en mi caso.