MQTT, o Message Queuing Telemetry Transport, se ha consolidado como un protocolo de mensajería ligero y sumamente eficiente, encontrando su nicho principal en la comunicación entre dispositivos del Internet de las Cosas (IoT). Su diseño, basado en el modelo de publicación/suscripción, permite que dispositivos con recursos limitados, como microcontroladores, puedan intercambiar información de manera efectiva incluso en redes con ancho de banda restringido. En el ecosistema de la domótica, y particularmente en plataformas como Home Assistant, MQTT desempeña un papel crucial, actuando como el conducto para la integración de diversas automatizaciones. Un ejemplo paradigmático de su utilidad se observa al integrar sistemas de análisis de video como Frigate con Home Assistant. En este escenario, Frigate, al detectar un evento específico -por ejemplo, la presencia de una persona en un área determinada-, publica un mensaje al broker MQTT. Home Assistant, actuando como suscriptor, recibe este mensaje y puede desencadenar acciones subsiguientes, como el encendido de luces o el envío de notificaciones.

Para comprender a fondo la arquitectura de MQTT y su implementación, es fundamental desglosar los roles que intervienen en este protocolo:
- Publisher (Publicador): En el contexto de la integración Frigate-Home Assistant, Frigate asume el rol de publicador. Su función es monitorear las transmisiones de las cámaras IP y, al detectar un evento de interés, generar un mensaje que será enviado al broker MQTT.
- Subscriber (Suscriptor): Home Assistant actúa como suscriptor. Se registra para recibir mensajes publicados en temas específicos. Una vez que recibe un mensaje, puede procesarlo para activar las automatizaciones configuradas.
- Broker (Intermediario): Mosquitto, en este caso, funciona como el broker MQTT. Su labor es centralizar la comunicación, recibiendo mensajes de los publicadores y distribuyéndolos eficientemente a todos los suscriptores interesados en dichos temas. Es importante destacar que, en este modelo, Frigate y Home Assistant no se comunican directamente; su interacción se canaliza a través del broker Mosquitto.
La implementación de un broker MQTT como Mosquitto, especialmente en entornos Linux como Debian o sus derivados, puede realizarse de diversas maneras. Una aproximación moderna y eficiente es a través de contenedores Docker, gestionados con herramientas como Portainer. Esta metodología facilita la implementación, configuración y escalabilidad del servicio.
Instalación y Configuración de Mosquitto Broker
La instalación y configuración de un broker Mosquitto es un paso fundamental para establecer una infraestructura MQTT robusta. Si bien existen métodos directos en sistemas operativos, el uso de contenedores Docker, orquestados mediante Portainer, ofrece una capa adicional de aislamiento y facilidad de gestión.
Despliegue de Mosquitto mediante Portainer
Portainer proporciona una interfaz gráfica intuitiva para la gestión de contenedores Docker, simplificando el proceso de despliegue de servicios.
Acceso a Stacks: Navega hasta la sección
Stacksdentro de tu instancia de Portainer.Creación de Nuevo Stack: Haz clic en
Agregar Stackpara iniciar la creación de una nueva configuración.Nombre del Stack: Asigna un nombre descriptivo al stack, por ejemplo,
mosquitto.Configuración del Docker Compose: En el
Editor web, pega la siguiente configuración. Esta definición dedocker-compose.ymlespecifica los parámetros para desplegar el broker Mosquitto en un contenedor.version: "3.8"services: # --- MQTT Broker (Eclipse Mosquitto) --- mosquitto: image: eclipse-mosquitto:2 container_name: mosquitto restart: unless-stopped volumes: - mosquitto_config:/mosquitto/config - mosquitto_data:/mosquitto/data - mosquitto_log:/mosquitto/log ports: - "1883:1883" # MQTT - "9001:9001" # WebSocketvolumes: mosquitto_config: mosquitto_data: mosquitto_log:image: eclipse-mosquitto:2: Especifica la imagen Docker a utilizar, en este caso, la versión 2 del broker Mosquitto de Eclipse.container_name: mosquitto: Asigna un nombre al contenedor para facilitar su identificación.restart: unless-stopped: Configura el contenedor para que se reinicie automáticamente a menos que sea detenido manualmente.volumes: Define volúmenes para persistir la configuración, los datos y los logs del broker fuera del ciclo de vida del contenedor. Esto es crucial para mantener la configuración y los datos incluso si el contenedor se elimina y se recrea.ports: Mapea los puertos del host a los puertos del contenedor. El puerto1883es el estándar para MQTT, y el9001es comúnmente utilizado para la comunicación WebSocket, que puede ser útil para clientes web.
Despliegue del Stack: Una vez pegada la configuración, haz clic en el botón
Desplegar la pilapara que Portainer cree y ejecute el contenedor de Mosquitto.
Configuración de Mosquitto y Autenticación
Tras el despliegue inicial, es esencial configurar el broker Mosquitto para asegurar su funcionamiento óptimo y, lo que es más importante, para implementar medidas de seguridad.
Acceso a la Consola del Contenedor:
- Dirígete a la página
Contenedoresen Portainer. - Busca el contenedor llamado
mosquitto. - Haz clic en el contenedor para acceder a su página de detalles.
- Selecciona la pestaña
Consola. - En el campo
Comando, ingresa/bin/shy haz clic enConectar. Esto te abrirá una interfaz de línea de comandos dentro del contenedor.
- Dirígete a la página
Creación del Archivo de Contraseñas:
Dentro de la consola del contenedor, ejecuta el siguiente comando para crear un archivo de contraseñas y añadir un usuario.
mosquitto_passwd -c -b /mosquitto/config/passwd <usuario> <contraseña>- Reemplaza
<usuario>con el nombre de usuario deseado y<contraseña>con la contraseña correspondiente. Se recomienda utilizar combinaciones de letras y números, evitando caracteres especiales que puedan causar conflictos. - El flag
-ccrea un nuevo archivo de contraseñas. Si el archivo ya existe, este comando lo sobrescribirá. - El flag
-bpermite especificar el nombre de usuario y la contraseña directamente en la línea de comandos.
- Reemplaza
Para verificar que el archivo de contraseñas se ha creado correctamente, ejecuta
ls /mosquitto/configy asegúrate de quepasswdaparece en la lista junto conmosquitto.conf.
Edición del Archivo de Configuración de Mosquitto:
En la misma consola del contenedor, edita el archivo de configuración principal de Mosquitto:
vi /mosquitto/config/mosquitto.confPresiona la tecla
ipara entrar en modo de inserción del editorvi.Agrega las siguientes líneas al archivo. Estas directivas deshabilitan el acceso anónimo y especifican la ubicación del archivo de contraseñas que acabamos de crear.
allow_anonymous falsepassword_file /mosquitto/config/passwdlistener 1883 0.0.0.0socket_domain ipv4allow_anonymous false: Esta línea es crucial para deshabilitar el acceso no autenticado al broker, forzando a los clientes a proporcionar credenciales válidas.password_file /mosquitto/config/passwd: Indica a Mosquitto dónde encontrar el archivo que contiene los nombres de usuario y sus contraseñas.listener 1883 0.0.0.0: Configura el broker para que escuche en el puerto 1883 en todas las interfaces de red disponibles (0.0.0.0), permitiendo conexiones desde cualquier cliente en la red.socket_domain ipv4: Asegura que el listener utilice el protocolo IPv4.
Una vez que hayas añadido las líneas, presiona la tecla
Escpara salir del modo de inserción. Luego, escribe:wqy presionaEnterpara guardar los cambios y salir del editorvi. Si deseas descartar los cambios, puedes escribir:q!y presionarEnter.
Reiniciar el Contenedor Mosquitto:
- Para que los cambios en la configuración surtan efecto, es necesario reiniciar el contenedor.
- Regresa a la página
Contenedoresen Portainer. - Localiza el contenedor
mosquitto. - Haz clic en el botón
Reiniciarasociado al contenedor.
🖥️Explicado con gracia!, Instalar Mosquitto Broker para MQTT. Curso Completo Home Assistant: 🚀CAP. 6
Configuración de la Integración MQTT en Home Assistant
Una vez que el broker Mosquitto está operativo y configurado con autenticación, el siguiente paso es integrarlo con Home Assistant para que pueda comunicarse con otros dispositivos y servicios.
Agregar Integración MQTT:
- Dentro de Home Assistant, navega a
Configuración>Dispositivos y Servicios. - Haz clic en el botón
Agregar Integración.
- Dentro de Home Assistant, navega a
Seleccionar Integración MQTT:
- En el cuadro de búsqueda, escribe
MQTTy selecciona la integración correspondiente.
- En el cuadro de búsqueda, escribe
Configurar los Detalles del Broker:
Aparecerá un cuadro de diálogo emergente. Aquí deberás introducir la información de conexión a tu broker Mosquitto:
- Broker: Introduce
localhostsi Home Assistant y el broker Mosquitto se ejecutan en el mismo servidor (o dentro del mismo Docker network), o la dirección IP de la máquina donde está desplegado el broker Mosquitto si están en hosts diferentes. - Puerto: Ingresa
1883(el puerto estándar de MQTT). - Nombre de usuario: Proporciona el nombre de usuario que configuraste al crear el archivo de contraseñas para Mosquitto.
- Contraseña: Ingresa la contraseña correspondiente al nombre de usuario configurado.
- Broker: Introduce
Una vez completados los campos, haz clic en
EnviaroConectarpara establecer la conexión. Si la configuración es correcta, Home Assistant se conectará al broker Mosquitto y estará listo para enviar y recibir mensajes.
MQTT en la Práctica: Un Ejemplo con Frigate y Home Assistant
La verdadera potencia de MQTT se manifiesta cuando se integra con otros servicios. Consideremos el ejemplo de Frigate, un sistema de detección de objetos basado en IA para cámaras de seguridad, y su integración con Home Assistant.
Frigate (Publisher): Cuando Frigate detecta un evento (por ejemplo, una persona entrando en una zona de interés), genera un mensaje MQTT. Este mensaje contendrá información detallada sobre el evento, como el tipo de objeto detectado, la marca de tiempo y la cámara donde ocurrió. Frigate publica este mensaje en un tema específico, por ejemplo,
frigate/events.Home Assistant (Subscriber): Home Assistant, configurado con la integración MQTT, se suscribe al tema
frigate/events. Al recibir un mensaje en este tema, Home Assistant puede procesar la información y desencadenar una serie de automatizaciones.Por ejemplo, una automatización podría ser configurada para:
- Si el evento detectado es de tipo
personay ocurre durante la noche, encender las luces exteriores. - Enviar una notificación al teléfono del usuario con una instantánea del evento.
- Registrar el evento en un historial más detallado.
- Si el evento detectado es de tipo

Este flujo de comunicación, mediado por el broker Mosquitto, permite una integración fluida y desacoplada entre diferentes sistemas, abriendo un abanico de posibilidades para la automatización del hogar y la monitorización inteligente.
Consideraciones Adicionales y Mejores Prácticas
La implementación de MQTT y Mosquitto, si bien es relativamente sencilla, se beneficia de la consideración de ciertos aspectos para asegurar un funcionamiento robusto y seguro.
Uso de Certificados TLS/SSL para Conexiones Seguras
Para entornos donde la seguridad es primordial, especialmente si el broker MQTT es accesible desde redes externas o si se manejan datos sensibles, es altamente recomendable configurar Mosquitto para utilizar conexiones cifradas mediante TLS/SSL.
Generación de Certificados: Se deben generar certificados autofirmados o utilizar certificados de una Autoridad Certificadora (CA) reconocida. Esto implica la creación de un archivo de clave privada (
.key) y un archivo de certificado (.pem).Configuración en
mosquitto.conf: En el archivo de configuración de Mosquitto (/etc/mosquitto/mosquitto.confo dentro del contenedor), se deben añadir las siguientes directivas:# Configuración para TLS/SSL# Reemplaza con las rutas reales a tus archivos de certificadotls_certfile /mosquitto/config/server.crttls_keyfile /mosquitto/config/server.key# Opcional: si usas una CA intermedia o tu propio CA# tls_cafile /mosquitto/config/ca.crt# Escuchar en el puerto seguro (por defecto 8883)listener 8883# Opcional: Limitar el puerto 1883 a localhost si no quieres que sea accesible externamente# listener 1883 localhostConfiguración del Cliente: Los clientes MQTT que deseen conectarse de forma segura deberán ser configurados para utilizar TLS y proporcionar la ruta a los certificados de cliente o CA necesarios, dependiendo del método de autenticación configurado.
Monitoreo del Broker Mosquitto
Mantener un ojo en el estado y rendimiento del broker Mosquitto es crucial para detectar y solucionar problemas de manera proactiva.
- Logs de Mosquitto: Los logs del broker, que pueden ser redirigidos a un volumen persistente o a un sistema de recolección de logs centralizado, proporcionan información valiosa sobre las conexiones, desconexiones, errores y actividad general.
- Temas de Sistema (
$SYS): Mosquitto expone una serie de temas bajo el prefijo$SYSque proporcionan métricas en tiempo real sobre el estado del broker, como el número de clientes conectados, el número de mensajes publicados y suscritos, y el uso de memoria. Los clientes MQTT pueden suscribirse a estos temas para monitorear el broker. Por ejemplo, suscribirse a$SYS/#permitirá recibir información de todos los temas del sistema.
Consideraciones sobre la Red
- Puertos Abiertos: Asegúrate de que los puertos necesarios para MQTT (generalmente 1883 para conexiones no cifradas y 8883 para conexiones cifradas) estén abiertos en el firewall de la máquina donde se ejecuta el broker y en cualquier dispositivo de red intermedio.
- Firewall en el Contenedor: Si utilizas Docker, los puertos se mapean desde el host al contenedor. Asegúrate de que el firewall del host permita el tráfico hacia los puertos mapeados.
Cliente MQTT de Ejemplo
Para probar la conectividad y el funcionamiento del broker, es útil contar con herramientas cliente.
mosquitto-clients: En sistemas Linux, la instalación del paquetemosquitto-clientsproporciona las utilidadesmosquitto_pub(para publicar mensajes) ymosquitto_sub(para suscribirse a temas).- Publicar un mensaje:
bashmosquitto_pub -h <ipBroker> -t "raspberry/topic1" -m "Hola desde la terminal!" -u <usuario> -P <contraseña> - Suscribirse a un tema:
bashmosquitto_sub -h <ipBroker> -t "raspberry/topic1" -u <usuario> -P <contraseña>
Donde
<ipBroker>es la dirección IP de tu broker Mosquitto, y<usuario>y<contraseña>son tus credenciales.- Publicar un mensaje:
MQTT Explorer: Es una herramienta gráfica popular para interactuar con brokers MQTT, permitiendo visualizar temas, publicar y suscribirse a mensajes de forma sencilla.
La implementación correcta de MQTT con Mosquitto sienta las bases para arquitecturas de IoT eficientes y escalables, permitiendo la comunicación fluida entre una vasta gama de dispositivos y aplicaciones.