En esta entrada vamos a ver como instalar MQTT o Mosquitto Broker en Portainer creando un nuevo stack, que es la configuración de Docker Compose.
¿Qué es MQTT?
MQTT (Message Queing Telemetry Transport) es uno de los protocolos de comunicaciones más empleados en el mundo IoT.
El protocolo MQTT en el mundo de la domótica se utiliza para transmitir información entre dispositivos, básicamente consiste en crear y suscribirse a colas de mensajes.
Supongamos que tenemos un enchufe inteligente que mide el consumo y lo publica en el canal “energía”, desde Node Red por ejemplo puedo suscribirme al canal “energia” y de esta forma tendría las medidas del enchufe.
Instalar Mosquitto (MQTT) en Portiner
Vamos a instalar Mosquitto Broker en Portainer, para ello vamos a hacerlo creando un nuevo stack en Portainer con nombre “mosquitto” añadiendo las siguientes líneas:
version: '3.8'
services:
mqtt:
container_name: mosquitto
image: eclipse-mosquitto
ports:
- "1883:1883"
- "9001:9001"
volumes:
- /docker/mosquitto/config:/mosquitto/config
- /docker/mosquitto/logs:/mosquitto/log
- /docker/mosquitto/data:/mosquitto/data
restart: always
environment:
- TZ=Europe/Madrid
pulsamos en “Deploy the stack”, docker descarga la imagen y crea el contenedor automáticamente.
Configuración MQTT
El primer paso es crear el archivo de configuración, para ello paramos el contenedor y creamos el fichero “mosquitto.conf” dentro de la ruta “/docker/mosquitto/config”
Y dentro pegamos las siguientes líneas
persistence true
persistence_location /mosquitto/data/
listener 1883
bind_interface eth0
allow_anonymous false
Ahora arrancamos el contenedor
En las primeras versiones de mosquitto era posible conectarse sin usuario y password, a partir de la versión 2 se ha incrementado el nivel de seguridad y tenemos que crear un nuevo usuario con contraseña para poder conectar con mosquitto.
Cómo crear un usuario en Mosquitto
Vamos a crear el usuario “mqtt” aunque puedes crearlo con el nombre que prefieras, para ello en Portainer vamos al contenedor de mosquitto que se ha creado y hacemos click en “console”
En “Command” seleccionamos “/bin/sh” y pulsamos en “Connect”
Esto abre una consola en la que podemos lanzar comandos dentro del contenedor de mosquitto, ejecutamos el siguiente comando:
mosquitto_passwd -c /mosquitto/config/password_file mqtt
Esto genera el usuario con el password encriptado en la ruta “/docker/mosquitto/config/password_file”
Pulsamos “Disconnect” para desconectarnos de la consola.
Ahora tenemos que hacer que mosquitto lea este fichero, para ello editamos el fichero de configuración que hemos creado al principio añadiendo la siguiente línea:
password_file /mosquitto/config/password_file
quedando de la siguiente forma:
Por último, reiniciamos mosquitto y en los logs veremos algo similar a la siguiente imagen:
Es probable que cuando edites los ficheros no tengas permisos, para ello puedes darles permisos tal como hemos explicado en anteriores entradas ejecutando el comando:
sudo chown pi:pi -R /docker
Añadir un dispositivo en Zigbee2mqtt
Accedemos al administrado de Zigbee2mqtt introduciendo en el navegador la ip de la raspberry seguida del puerto 8099
En este caso vamos a añadir un enchufe inteligente, para ello el dispositivo tiene que estar sin asociar o reseteado, podemos resetearlo manteniendo pulsado el botón de encendido/apagado hasta que el led empiece a parpadear
Ahora en pulsamos “Permitir Unirse (Todos)” y comienza una cuanta atrás durante la que se detectará el dispositivo y que podemos parar en cualquier momento.
En cuestión de segundos Zigbee2mqtt encuentra el dispositivo y lo añade a la lista
Lo primero que debemos hacer es pulsar en el icono del lapicero para editar el nombre amigable y cambiarlo por algo más entendible, si además marcamos “Actualizar el ID de entidad en Home Assistant” también se actualizará en HA, si lo marcamos y ya existe una entidad con el nombre nos dará un error diciendo que la entidad ya existe, por lo que solo podemos marcarla la primera vez o si modificamos el nombre.
Integración con Home Assistant
En Home Assistant vamos a “Configuración – Dispositivos y Servicios” y pulsamos en “Añadir Integración”
Introducimos los datos de nuestro servidor Mosquitto
Hola, interesante tutorial, he seguido todos los pasos y bien todo Ok hasta que ejecuto el comando mosquitto_passwd para crear el usuario, entonces me pide el password 2 veces y después me sale en la linea de abajo esto:
Password:
Reenter password:
Killed <<< esto no debería salir
/ #
El archivo lo crea pero a 0 bytes, no hay nada, en principio el log no manda ningún error, parece que esta todo bien, que podria ser? He seguido al pie de la letra tu tutorial, mi Synology lo tengo con varios contenedores corriendo sin problemas, con Home Assistant, Pi-Hole, Homebridge…mas de 15.
el log de mosquitto:
1653590672: Config loaded from /mosquitto/config/mosquitto.conf.
1653590672: Opening ipv4 listen socket on port 1883.
1653590672: Opening ipv6 listen socket on port 1883.
1653590672: Warning: Interface eth0 does not support IPv6 configuration.
1653590672: mosquitto version 2.0.14 running
Gracias!
Prueba a dar permisos al usurio:
sudo chown pi:pi -R /docker
El comando da permisos al usuario pi para escribir en la carpeta docker que es donde se ha instalado todo si has seguido los tutoriales, si usas un Synology tienes que averiguar que usuario usa y en que carpeta lo has instalado y darle permisos a la carpeta al usuario del Synology.
Hola, he seguido todos los pasos, pero el el log me sale:
No log line matching the ” filter
Parece funcionar en HA bien, pero el log es extraño.
Gracias
Hola, revisa la parte de la creación del stack, y sobre todo la parte de aplicar los permisos, una vez aplicados reinicia el contenedor.
Funciona perfectamente, mil gracias!!! Me costó mucho encontrar una configuración bien explicada y que funcione.