Mosquitto es un agente o broker de mensajes de código abierto, muy liviano y por lo tanto muy adecuado para nuestra Raspberry. También lo es para el Internet de las Cosas, como por ejemplo sensores e interruptores que tengo previsto instalar.
Mosquitto utiliza el protocolo de mensajería de máquina a máquina MQTT, utilizado comúnmente para el seguimiento de flotas, automatización del hogar, redes de sensores y recopilación de datos.
La comunicación de este protocolo se basa en topics. Cada dispositivo publica mensajes sobre un topic, y todos los suscriptores de este topic recibirán este mensaje. Por ejemplo, los sensores de temperatura enviarán un mensaje con la información registrada, mientras que un interruptor estará esperando la orden de encendido o apagado.
Empezaremos instalando Mosquitto:
sudo pacman -Sy mosquittoActualización agosto 2022: En instalaciones posteriores, he permitido que cualquier dispositivo en mi red se pueda comunicar con Mosquitto. Sólo he añadido al final del archivo de configuración las siguientes líneas:
sudo nano /etc/mosquitto/mosquitto.conflistener 1883
allow_anonymous trueSi también eliges esta opción, salta hasta la configuración de UFW más abajo.
Si prefieres añadir usuarios y contraseñas, sigue leyendo.
Utilizaremos el siguiente comando para añadir nuestro usuario al fichero de contraseñas:
sudo mosquitto_passwd -c /etc/mosquitto/passwd usuarioIntroduciremos el password cuando nos lo pida, y lo confirmamos a continuación.
Importante: La opción -c crea un nuevo fichero de contraseñas. Si el fichero ya existe, lo sobrescribe.
Modificaremos el fichero de configuración para indicarle dónde encontrar el fichero de contraseñas:
sudo nano /etc/mosquitto/mosquitto.confAñadiremos las dos líneas siguientes, una es para indicarle dónde buscar el fichero de contraseñas, y la otra línea es para evitar que se conecten clientes al broker sin autenticarse:
password_file /etc/mosquitto/passwd
allow_anonymous falseEl fichero de contraseñas, como es de esperar, se guarda encriptado:
cat /etc/mosquitto/passwdusuario1:$6$AIWA34jlkfGxMlKLmillBjL$u3qrtyufi5QL6J+IVZz4bysqKiiotRQI5/belyJ3WBPYKyxrmneeXdQVuqQ5Z+gUrQOPBpbsMBK+7jRe462reQyzgQ3giLSw==Aprovecharemos para añadir a nuestro cortafuegos el puerto 1883, que permitirá que los diferentes dispositivos se comuniquen con el broker:
sudo ufw allow 1883Arrancaremos manualmente:
sudo systemctl start mosquittoNecesitaremos dos terminales.
En la primera terminal nos suscribiremos a un topic, al que llamaremos miTema:
mosquitto_sub -u usuario --pw contraseña -h localhost -t miTemaY en la segunda terminal, enviaremos un mensaje al mismo topic:
mosquitto_pub -u usuario --pw contraseña -h localhost -t miTema -m "Hola Mundo"Importante: Añadir los parámetros -u y --pw que serán el usuario y la contraseña que escogimos anteriormente. Si introducimos los comandos sin estos parámetros, el resultado no será el esperado:
Connection Refused: not authorised.
Error: The connection was refused.En cambio, si todo se ha introducido correctamente, deberíamos tener, casi de manera instantánea, el mensaje "Hola Mundo" en la primera terminal, lo que significa que tenemos todo bien configurado y que hemos enviado y recibido nuestro primer mensaje MQTT.
Saldremos de la primera terminal con CTRL+C.
Si todo es correcto, no hay que olvidarse de añadir el servicio en el arranque:
sudo systemctl enable mosquittoCon Mosquitto configurado ya puedes:
Tu Raspberry Pi está lista para convertirse en el cerebro de tu sistema domótico con comunicación MQTT.