Autor: Oscar Gonzalez
Tiempo de lectura: 21 minutos
En ésta guía aprenderás cómo instalar Node-RED en Raspberry Pi para automatizar procesos IoT con MQTT y Arduino ESP8266/ESP32
En ésta página verás cómo instalar y configurar el broker MQTT Mosquitto. Es realmente muy sencillo tanto de instalar como de utilizar pero por si todavía no conoces MQTT, haré un repaso breve de qué es y cómo funciona.
El protocolo MQTT se ha vuelto especialmente popular en entornos domésticos ya que es muy ligero y es fácil de utilizar tanto por un cliente como por el propio servidor. Originalmente, MQTT (siglas de MQ Telemetry Transport) fue inventado y desarrollado por IBM a finales de los 90. Su aplicación original era conectar sensores de los oleoductos con satélites.
Tal como sugiere su nombre, es un protocolo de mensajería que soporta la comunicación asíncrona entre las partes. Un protocolo de mensajería asíncrona disocia al emisor y al receptor de los mensajes tanto en espacio como en tiempo, y, por lo tanto, es escalable en entornos de red no confiables. Y con no confiables, se refiere a entornos propensos a fallos.
Esquema básico de un sistema MQTT (créditos: IBM)
El protocolo MQTT utiliza un modelo de publicación y suscripción para intercambiar datos. La principal ventaja del protocolo MQTT es que es muy liviano. Pero, ¿porqué no utilizar otros protocolos ha establecidos como HTTP?
El protocolo HTTP es un protocolo sincronizado, es decir, que el cliente espera a que el servidor responda y eso no es siempre posible en redes de microcontroladores IoT en entornos donde tanto la conectividad como el ancho de banda pueda fallar en cualquier momento.
Otra ventaja importante de MQTT es su escalabilidad ya que al ser clientes pasivos, transmitir datos a toda la red es computacionalmente muy barato. Además, a diferente de HTTP, una conexión MQTT se mantiene activa y se reutiliza en cada comunicación, por lo tanto haciendo el sistema mucho más eficiente, rápido y ligero.
Podríamos hablar mucho más sobre éste excelente protocolo para IoT, pero se saldría del foco de éste tutorial. Si quieres profundizar sobre cómo funciona MQTT, te sugiero visitar la web de IBM sobre IoT.
El Broker MQTT más popular es Mosquitto. Es un Broker MQTT Open Source que fue creado por la Eclipse Foundation y es distribuido bajo licencia EPL/EDL. Además es compatible con Windows, Linux y Mac, por lo tanto podremos instalarlo en practicamente cualquier sitio.
Como en nuestro caso lo que queremos es instalar Mosquitto MQTT en nuestra Raspberry Pi, abrimos una consola y primero nos aseguramos de que tenemos todos los paquetes actualizados.
sudo apt update
sudo apt upgrade
Un vez hecho esto, pasamos a instalar Mosquitto
sudo apt-get install mosquitto mosquitto-clients
Aquí se descargaran los paquetes y dependencias necesarias y ya lo tendremos instalado. Ahora veamos cómo podemos probar su correcto funcionamiento antes de entrar de lleno con Node-Red
Lo primero que vamos a hacer es abrir dos consolas SSH al mismo tiempo y que estén ambas logeadas en nuestro servidor de Raspberry Pi. Esto es por que necesitamos similar por un lado un dispositivo que publica datos y otro dispositivos que se suscribe a esos datos.
El broker Mosquitto proporciona dos herramientas para eso llamadas mosquitto_pub y mosquitto_sub que usaremos precisamente para eso.
El la primera consola inicializamos un suscriptor, que escuchará los mensajes publicados en un topic:
mosquitto_sub -d -h localhost -p 1883 -t "casa/prueba"
Lo parámetro necesarios son muy simples:
El topic es la parte más fundamental y no es necesario darla de alta en ningún sitio. Solamente indicarla. Si no existe, o más bien si nadie publica en ella, los peor que puede pasar es que el suscriptor nunca recibirá mensajes de nadie.
Es muy recomendable organizar los topics en forma de arbol, especialmente si vas a tener muchos dispositivos ya que de esa forma quedará todo mucho más claro.
Imagínate que pones sensores de temperatura en toda tu casa. Una forma de organizar los topics sería por ejemplo:
Esta forma de estructurar los topics permite por un lado, tener todo muy claro a nivel de estructura, pero por otro lado permite hacer cosas muy interesantes como utilizar comodines o "wildcard".
Por supuesto un suscriptor puede leer los valores publicado en un determinado topic, como por ejemplo, leer la temperatura de la habitación de pedro tal que así:
Pero también podemos leer todas las actualizaciones de temperatura de todas las habitaciones usando "#"
Cualquier cliente que se suscriba a este topic recibirá los valores de temperatura de todas las habitaciones. Como ves, si organizas bien tu arbol de topics, es mucho mas sencillo hacer cosas así.
Ahora volvamos a nuestro ejemplo y en la segunda consola, vamos a crear o "publicar" un mensaje a nuestro topic "casa/prueba" y lo hacemos usando el comando mosquitto_pub:
mosquitto_pub -d -h localhost -p 1883 -t "casa/prueba" -m "Esto es un mensaje de prueba!"
Los parámetros utilizados son básicamente los mismos que ya hemos visto con mosquitto_sub, salvo que ahora tenemos uno más:
Con esto se enviará el mensaje al broker y a su vez lo recibirán todos los dispositivos suscritos al topic, como la primera consola que dejaste abierta antes y lo mostrará tal que así:
Lo que hemos hecho es una instalación de Mosquitto con todos los parámetros por defecto y con eso vemos que funciona perfectamente. Pero Mosquitto permite configurar muchas más cosas. Para eso y como casi todo en un entorno Linux, tenemos disponible un fichero de configuración que está localizado en /etc/mosquitto/mosquitto.conf
Ese fichero guarda toda la configuración del servidor Broker Mosquitto y podremos ajustar los parámetros a nuestro gusto. Dado que la configuración es muy extensa y está bien documentada, no entraré en muchos detalles, pero debes tener en cuenta que por defecto Mosquitto permite a cualquiera publicar topics, es decir, es un servicio público sin restricciones.
Eso se puede cambiar haciendo que requiera a los clientes una contraseña. De esta forma tu servidor MQTT será un poco más seguro. Eso y mucho más puedes verlo la documentación de Mosquitto.
Ahora que ya tenemos todo instalado, configurado y sabemos que funciona, en la siguiente página veremos un ejemplo práctico de IoT con Arduino usando todo el sistema.