Migration HAOS vers Home Assistant Docker

Etape 8: Installation de Zigbee2MQTT

Source:

Pour utilisation avec un Dongle Zigbee sur port USB :

sudo ls -l /dev/serial/by-id

20251220_13h10m04s_grim

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.