Etape 8: Installation de Zigbee2MQTT
Source:
Pour utilisation avec un Dongle Zigbee sur port USB :
sudo ls -l /dev/serial/by-id
![]()
Il faut recopier la partie usb-Itead…-if00-port0 dans la pile ci-dessous.
Creer un nouveau stack zigbee2mqtt ainsi :
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: ghcr.io/koenkk/zigbee2mqtt
restart: always
volumes:
- /opt/docker/zigbee2mqtt:/app/data
- /run/udev:/run/udev:ro # donne accès en lecture au gestionnaire de périphériques
- /etc/letsencrypt:/etc/letsencrypt:ro
ports:
- 8080:8080 # Port pour le frontend
environment:
- TZ=Europe/Paris
devices:
- /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-if00-port0:/dev/ttyUSB0
networks:
reseau_mqtt:
ipv4_address: 172.20.0.2
networks:
reseau_mqtt:
external: true
Maintenant cliquer sur « Deploy the stack » pour installer Zigbee2mqtt sur docker.
A ce stade il faut arreter le conteneur Zigbee2MQTT et passer à l’installation de Home Assistant (étape 10) avant de poursuivre.
Une fois HomeAssistant installé, reprenons la configuration de Zigbee2MQTT.
Configuration de Zigbee2mqtt sur docker :
Connectez vous à nouveau en SSH sur votre serveur puis aller dans votre dossier Zigbee2mqtt /opt/docker/zigbee2mqtt et éditer le fichier configuration.yaml
Si vous avez configurer FileEditor (étape 9), ça peut être fait depuis ce dernier.
cd /opt/docker/zigbee2mqtt
sudo nano configuration.yaml
et recopier ces lignes au debut du fichier :
homeassistant:
enabled: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://172.20.0.10:1883
user: login_de_MQTT
password: mdp_de_MQTT
serial:
port: /dev/ttyUSB0
adapter: ember
frontend:
enabled: true
package: zigbee2mqtt-frontend
port: 8080
host: 172.20.0.2
auth_token: '!secret.yaml auth_token'
url: 'https://toto.duckdns.org:8080'
ssl_cert: /etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
ssl_key: /etc/letsencrypt/live/toto.duckdns.org/privkey.pem
base_url: /
notification_filter:
- 'z2m: Failed to ping.*'
disable_ui_serving: false
Pensez à corriger avec vos identififants du broker Mosquitto MQTT et mettre votre nom de DNS.
La ligne auth_token: '!secret.yaml auth_token' fait référence à un mot de passe enregistré dans un fichier secret.yaml dans le meme répertoire que configuration.yaml.
Dans ce fichier, il y a une ligne par paramètre secret. Dans le mien j’ai mis simplement :
auth_token: mot_de_passe_admin_de_Zigbee
Ce mot de passe est demandé à l’ouverture du frontend de Zigbee2MQTT.
C'est terminé pour Zigbee2MQTT. Si le conteneur était arrété, pensez à le relancer. Vous pouvez vous connecter au Frontend à cette adresse : `https://172.20.0.2:8080`
Bonus
Personnelement j’ai un bug sur mon dongle: quand je le touche, il se déconnecte et arrête Zigbee2Mqtt avec le message exit code 2 et Docker ne le relance pas malgrès la politique restart: always
Mon contournement : créer un script qui vérifie toute les minutes si Zigbee2Mqtt est toujours actif, sinon le rédemarre.
Pour cela je créé un script relunch_zigbee.sh dans mon répertoire scripts
touch relunch_zigbee.sh # cree le fichier
chmod +x relunch_zigbee.sh # le rend executable
nano relunch_zigbee.sh # ouvre l'editeur
Voici le script :
#!/bin/bash
MY_DOCK=zigbee2mqtt
if [ $(docker ps 2>&1 | grep -c "${MY_DOCK}") -eq 1 ]
then
echo "Docker ${MY_DOCK} is running"
exit 0
fi
echo "Docker ${MY_DOCK} is stopped..."
#relance le docker
docker start ${MY_DOCK}
#docker logs ${MY_DOCK} --follow --tail 5
#envoi une notification par email
docker run --rm nickfedor/shoutrrr:latest send --message "Docker ${MY_DOCK} has been relunched!" --url "smtp://login:mdp@smtp.free.fr:587/?fromaddress=email@free.fr&toaddresses=email@gmail.com&encryption=ExplicitTLS&usestarttls=yes&timeout=30s"
exit 0
Penser à remplacer login/mdp et email pour vos identifiants free par exemple.
Pour que ce script soit executé toutes les minutes, il faut l’ajouter au planificateur de tache cron:
crontab -e
et ajouter cette ligne au cron :
* * * * * /home/user/scripts/relunch_zigbee.sh >/dev/null
user à remplacer par votre nom d’utilisateur sur le raspberry.