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.
¿Cómo funciona MQTT?
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.
Instalación de Mosquitto
Empezaremos instalando Mosquitto:
sudo pacman -Sy mosquittoConfiguración
Opción 1: Permitir acceso anónimo (más simple)
Actualizació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.
Opción 2: Configurar usuarios y contraseñas (más seguro)
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.
Configurar autenticación
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==Configurar firewall
Aprovecharemos para añadir a nuestro cortafuegos el puerto 1883, que permitirá que los diferentes dispositivos se comuniquen con el broker:
sudo ufw allow 1883Iniciar el servicio
Arrancaremos manualmente:
sudo systemctl start mosquittoProbando Mosquitto
Necesitaremos dos terminales.
Terminal 1: Suscriptor
En la primera terminal nos suscribiremos a un topic, al que llamaremos miTema:
mosquitto_sub -u usuario --pw contraseña -h localhost -t miTemaTerminal 2: Publicador
Y 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 sobre autenticación
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.Resultado esperado
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.
Habilitar en el arranque
Si todo es correcto, no hay que olvidarse de añadir el servicio en el arranque:
sudo systemctl enable mosquittoPróximos pasos
Con Mosquitto configurado ya puedes:
- Conectar sensores y dispositivos IoT
- Integrar con OpenHAB o Home Assistant
- Crear automatizaciones basadas en eventos MQTT
- Monitorear dispositivos en tiempo real
Tu Raspberry Pi está lista para convertirse en el cerebro de tu sistema domótico con comunicación MQTT. 🏠📡
¿Te ha sido útil?
Ayúdame a mejorar con tu puntuación y comentarios.
💬 Comentarios
Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!