Cómo instalar Mosquitto en Portainer

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 
Crear Stack Mosquitto en Portainer
Crear Stack Mosquitto en Portainer

pulsamos en “Deploy the stack”, docker descarga la imagen y crea el contenedor automáticamente.

Mosquitto container
Mosquitto container

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”

Crear fichero de configuración MQTT
Crear fichero de configuración MQTT

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”

Acceder a la consola del contenedor
Acceder a la consola del contenedor

En “Command” seleccionamos “/bin/sh” y pulsamos en “Connect”

Conectar a la consola
Conectar a la consola

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
Creación usuario Mqtt
Creación usuario Mqtt

Esto genera el usuario con el password encriptado en la ruta “/docker/mosquitto/config/password_file”

Mosquitto Password file
Mosquitto 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:

mosquitto.conf
mosquitto.conf

Por último, reiniciamos mosquitto y en los logs veremos algo similar a la siguiente imagen:

log mosquitto mqtt
log mosquitto mqtt

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

http://ipraspberry: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.

Zigbee2MQTT permitir unirse
Zigbee2MQTT permitir unirse

En cuestión de segundos Zigbee2mqtt encuentra el dispositivo y lo añade a la lista

Zigbee2MQTT enchufe inteligente descubierto
Zigbee2MQTT enchufe inteligente descubierto

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”

Zigbee2mqtt integración con Home Assistant
Zigbee2mqtt integración con Home Assistant

Introducimos los datos de nuestro servidor Mosquitto

Zigbee2mqtt configuración broker mqtt Home Assistant
Zigbee2mqtt configuración broker mqtt Home Assistant

5 comentarios en «Cómo instalar Mosquitto en Portainer»

  1. 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!

    Responder
    • 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.

      Responder

Deja un comentario