Domotique

[HomeAssistant] Installer zigbee2mqtt et mosquitto sur docker

Dernière mise à jour : 02/02/2025 à 15h19
Table des matières

Introduction



Dans cet article, je vais détailler comment installer Zigbee2mqtt et Mosquitto sur un serveur Docker.
Le but est de pouvoir piloter des équipements Zigbee (ampoules, prises, capteurs, etc.) via un serveur MQTT conectable à Home Assistant mais en installant le broker et Zigbee2mqtt à part, ce qui vous permettra dans le futur, si besoin de migrer vers un autre système domotique sans devoir appairer à nouveau tous vos équipements Zigbee.

Prérequis



- Un serveur Docker fonctionnel (personnellement, j'utilise une VM Debian sur mon serveur Proxmox avec docker et Portainer installés dessus).
- Un dongle Zigbee compatible avec Zigbee2mqtt (CC2531, CC2530, CC2531, etc.) >> pour cela, je vous invite à consulter mon article qui vous décrit le flashage du dongle Sonooff Zigbee 3.0 Dongle Plus.

Installation de Mosquitto et Zigbee2mqtt dans une stack Docker



Déploiement de la stack



Je vous donne ma méthode valable avec Portainer.
Allez sur votre portainer, puis dans votre environnement puis cliquez sur "Stacks" et enfin sur "Add stack".

Copiez le docker-compose suivant dans le champ "Web editor" :

Code YAML :
 
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    restart: always
    volumes:
      - /opt/docker/mosquitto/config:/mosquitto/config
      - /opt/docker/mosquitto/data:/mosquitto/data
      - /opt/docker/mosquitto/log:/mosquitto/log
    ports:
      - 1883:1883
      - 9001:9001
 
  zigbee2mqtt:
    image: koenkk/zigbee2mqtt
    container_name: zigbee2mqtt
    restart: unless-stopped
    volumes:
      - /opt/docker/zigbee2mqtt:/app/data
      - /run/udev:/run/udev:ro
    devices:
      - /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_d6c634615252ef1185b12a53cc32aab1-if00-port0:/dev/ttyUSB0 
    ports:
      - 8080:8080
    environment:
      - TZ=Europe/Paris
 


Quelques explications :
- pour mosquitto, on utilise l'image officielle eclipse-mosquitto. Il est important de monter les volumes pour la configuration, les données et les logs.
Pour le montage des volumes, j'utilise la méthode qui consiste à créer un dossier par conteneur dans /opt/docker/.
Pour les ports, veillez à ce que ces ports ne soient pas déjà utilisés sur votre serveur.
- pour zigbee2mqtt, on utilise l'image officielle koenkk/zigbee2mqtt. Il est important de monter le volume pour les données et de monter le device du dongle Zigbee.
Pour les ports, veillez à ce que ces ports ne soient pas déjà utilisés sur votre serveur. L'environnement TZ permet de définir le fuseau horaire.


Pour trouver le device du dongle Zigbee (ici "usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_d6c634615252ef1185b12a53cc32aab1-if00-port0"), vous pouvez utiliser la commande suivante : `ls -l /dev/serial/by-id/usb*` sur votre serveur qui héberge docker.
Faites attention à bien formater la ligne



La stack est maintenant déployée et les deux conteneurs installés. Cependant, il reste un peu de configuration à faire pour les deux conteneurs.


Configuration de zigbee2mqtt



Si votre conteneur redémarre sans arrêt (ce qui était mon cas), il est possible que le fichier de configuration ne soit pas correctement configuré (chez moi il était inexistant...).
Vous pouvez dans ce cas arrêter le conteneur avant de créer ou modifier le fichier configuration.yaml

Ici, il faut commencer par modifier (ou créer, dans mon cas le fichier n'existait pas) le fichier configuration.yaml dans le dossier /opt/docker/zigbee2mqtt.
Voici un exemple de fichier de configuration :

Code YAML :
 
homeassistant:
  enabled: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://192.168.1.82
  user: admin
  password: supermotdepasse
availability:
  enabled: true
  active:
    timeout: 10
  passive:
    timeout: 1500
serial:
  port: /dev/ttyUSB0
frontend:
  enabled: true
  port: 8080
 


Le base_topic est le nom du topic MQTT qui sera utilisé pour les équipements Zigbee. Vous pouvez mettre ce que vous souhaitez.
L'adresse IP du serveur correspond à l'adresse IP de votre serveur Docker.


Retenez bien le mot de passe que vous avez mis dans le fichier de configuration, il vous sera utile dans la configuration de mosquitto.


Ensuite, ajoutez l'utilisateur au groupe dialout pour qu'il puisse accéder au dongle Zigbee :
Code TEXT :
 
usermod -a -G dialout $USER
 


Puis donnez les bons droits aux dossier utiles :
Code TEXT :
 
chmod -R 755 /opt/docker/zigbee2mqtt/
chown -R 1000:1000 /opt/docker/zigbee2mqtt/
 



Si comme moi vous avez une erreur du type : Configuration is not consistent with adapter state/backup! dans les logs du conteneur, il faut supprimer le fichier /opt/docker/zigbee2mqtt/coordinator_backup.json et redémarrer le conteneur.


Configurations du conteneur mosquitto




Comme pour zigbee2mqtt, vous pouvez arrêter le conteneur s'il redémarre sans cesse, avant de créer le fichier de configuration.


La première chose à faire est de créer le fichier de configuration de mosquitto.
Pour cela, créez le fichier /opt/docker/mosquitto/config/mosquitto.conf (à adapter à votre installation ,ce chemin correspond à celui que j'ai utilisé dans le docker-compose)
et ajoutez-y le contenu suivant :

Code TEXT :
 
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
listener 9001
allow_anonymous true
protocol websockets
password_file mosquitto/config/mqtt_passwd
 


On retrouve ici le dossier /mosquitto/data créé dans docker-compose. Les ports sont également à adapter à votre docker-compose.
On voit également un renvoi vers le fichier mqtt_passwd, on va le créer maintenant.

Pour cela, on va devoir entrer dans le conteneur :
Code TEXT :
 
docker exec -it mosquitto sh
 


Une fois dans le conteneur, on va créer l'utilisateur avec la commande suivante :
Code TEXT :
 
mosquitto_passwd -c /mosquitto/config/mqtt_passwd admin
 


Il vous sera demandé de saisir un mot de passe, saisissez le mot de passe que vous avez mis dans le fichier de configuration de zigbee2mqtt.

Vos deux conteneurs devraient normalement être fonctionnels et vous permettre de piloter vos équipements Zigbee via MQTT.
Vous pouvez maintenant vous connecter à l'interface web de Zigbee2mqtt en vous rendant sur http://192.168.1.82:8080 (adaptez l'adresse, il s'agit de l'adresse de votre serveur Docker).
Cette page a été vue 551 fois