You are currently viewing Zigbee2Mqtt – Passage en V2

Zigbee2Mqtt – Passage en V2

0. Introduction

Dans un monde où la domotique devient de plus en plus centrale dans nos foyers, il est essentiel de maintenir à jour les outils qui orchestrent nos environnements connectés. Ces mises à jour ne sont pas seulement une question de nouvelles fonctionnalités ; elles garantissent également une meilleure sécurité, une compatibilité accrue avec les périphériques récents et une performance optimisée.

Dans cet article, je vais vous partager mon expérience pour mettre à jour Zigbee2MQTT en V2 (Z2M), un élément clé de mon système domotique. Voici un aperçu de ma configuration actuelle :

  • Un serveur Debian hébergé dans une machine virtuelle, qui intègre l’installation de Mosquitto, le célèbre broker MQTT, et de Zigbee2MQTT.
  • Un environnement HAOS (Home Assistant Operating System) et Jeedom, qui interagissent avec le broker MQTT pour piloter et surveiller les périphériques connectés de mon domicile.

Mon objectif avec cette mise à jour est de renforcer la fiabilité de mon système, de m’assurer que mes équipements Zigbee communiquent de manière optimale, et de profiter des dernières améliorations de Zigbee2MQTT. Je vais détailler les étapes de ce processus, les éventuels défis rencontrés et les bénéfices obtenus.

1. Go for update

Un avertissement important avant de commencer :
Je tiens à préciser que cette mise à jour est effectuée dans mon environnement personnel. Par conséquent, je suis entièrement responsable de la gestion et des éventuels incidents qui pourraient survenir. Ni Youdom ni moi-même ne pourrons être tenus responsables si la mise à jour de votre système entraîne des problèmes. Cependant, soyez rassurés : notre communauté est là pour vous accompagner et vous aider en cas de besoin.

1.1 les URL nécessaires

La release note de Z2M: https://github.com/Koenkk/zigbee2mqtt/releases/tag/1.42.0

Le GIT de Z2M pour les correctifs: https://github.com/Koenkk/zigbee2mqtt/discussions/24198

Notre page facebook: https://www.facebook.com/groups/entraidejeedom

1.2 Avant de commencer

Avant de commencer à mettre à jour Zigbee2MQTT en V2, voici les best-practice:

  • avoir un backup fonctionnel de chaque environnement
    • Sauvegarde de mes VM (HA et Z2M)
    • Sauvegarde de la configuration Z2M
    • Sauvegarde de la configuration HA
    • Mes informations de connexion
    • Un minimum de patiente, car si souci, il faudra certainement faires des recherches)

Il faudra aussi prendre en compte la liste des adapter compatibles: https://www.zigbee2mqtt.io/guide/adapters/
La gestion de la WebUI (frontend) qui à changer: https://www.zigbee2mqtt.io/guide/configuration/

# Minimal configuration.yml example
permit_join: true
mqtt:
    server: mqtt://localhost:1883
serial:
    # Could be either USB port (/dev/ttyUSB0), network Zigbee adapters (tcp://192.168.1.1:6638) or mDNS adapter (mdns://my-adapter).
    port: /dev/ttyUSB0
# Will run frontend on port 8080
frontend:
    enabled: true

1.3 Go SSH

Dans le cadre de la mise à jour je fais donc directement les actions sur la machine virtuelle qui héberge mon écosystème Z2M
Donc connexion en ssh sur la machine et avant toutes choses, je fais une bonne mise à jour de ma machine

# Connexion sur la machine en ssh
ssh monuser@monip
# mise à jour de l'environnement
apt update && apt upgrade -y

Ensuite on redémarre la machine, cela aidera aussi pour bien faire la mise à jour.
On retourne en ssh et on lance les hostilités

# Connexion sur la machine
ssh monuser@monip
# Je passe en superuser
su
# Direction le dossier pour la configuration comme noté dans les best-practice
cd /opt/zigbee2mqtt/data/

Comme évoqués dans le GIT, il faudra:

Pour minimiser les risques de changements perturbateurs lors de la mise à jour de la version 1.x.x vers la version 2.0.0, assurez-vous d’avoir les éléments suivants dans votre fichier de configuration Zigbee2MQTT configuration.yaml :

advanced:
  homeassistant_legacy_entity_attributes: false
  homeassistant_legacy_triggers: false
  legacy_api: false
  legacy_availability_payload: false
device_options:
  legacy: false

Donc on va faire le changement dans mon fichier de configuration:

# Modification du fichier avec nano
nano configuration.yaml
# On ajoute les lignes, il faudra adapter en fonction de votre fichier
advanced:
  homeassistant_legacy_entity_attributes: false
  homeassistant_legacy_triggers: false
  legacy_api: false
  legacy_availability_payload: false
device_options:
  legacy: false

Ensuite on commence à mettre à jour Zigbee2MQTT en V2:

# Commande pour la mise à jour de Z2M
.\update.sh

# Ce qui sort lors de la commande
root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh
Checking Zigbee2MQTT status...
Stopping Zigbee2MQTT...
Creating backup of configuration...
Checking out changes to package-lock.json...
Updated 0 paths from the index
Updating...
remote: Enumerating objects: 1999, done.
remote: Counting objects: 100% (1609/1609), done.
remote: Compressing objects: 100% (618/618), done.
remote: Total 1228 (delta 972), reused 818 (delta 607), pack-reused 0 (from 0)
Receiving objects: 100% (1228/1228), 559.84 KiB | 7.46 MiB/s, done.
Resolving deltas: 100% (972/972), completed with 70 local objects.
From https://github.com/Koenkk/zigbee2mqtt
   cc31cea..060ae99  master     -> origin/master
 * [new tag]         2.0.0      -> 2.0.0
 * [new tag]         1.42.0     -> 1.42.0
Updating cc31cea..060ae99
error: Your local changes to the following files would be overwritten by merge:
        data/configuration.example.yaml
        data/configuration.yaml
Please commit your changes or stash them before you merge.
Aborting

On peut voir un message d’erreur concernant un « change » en attente de commit, comme mentionner dans le correctif, ici, il faut lancer les commande dans l’ordre:

git checkout data/configuration.example.yaml
mv data/configuration.yaml data/configuration.yaml.bak
./update.sh 

# Petit message d'erreur
root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh
ERROR: Backup directory exists. May be previous restoring was failed?
1. Save 'data-backup' and 'data' dirs to safe location to make possibility to restore config later.
2. Manually delete 'data-backup' dir and try again.

# Suppression du dossier de sauvegarde et on relance l'update
root@Z2Mosquitto:/opt/zigbee2mqtt# rm -R data-backup/
root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh

# La sauvegarde ce lance...
root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh
Checking Zigbee2MQTT status...
Creating backup of configuration...
Checking out changes to package-lock.json...
Updated 0 paths from the index
Updating...
Updating cc31cea..060ae99
Fast-forward
 .github/workflows/ci.yml                                         |  114 +-
 .github/workflows/codeql.yaml                                    |    7 +-
 .github/workflows/release_please.yml                             |    6 +-
 .github/workflows/stale.yml                                      |    8 +-

Erreur lors de la mise à jour des dépendances:

Installing dependencies...
npm error code EUSAGE
npm error
npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or
npm error later to generate a package-lock.json file, then try again.
npm error
npm error Clean install a project
npm error
npm error Usage:
npm error npm ci

Il est conseiller de faire les commandes suivantes pour résoudre le problème:

npm install
# Et ensuite
npm ci

# Voici les sorties:
root@Z2Mosquitto:/opt/zigbee2mqtt# npm install
⠼
added 57 packages, removed 321 packages, changed 50 packages, and audited 387 packages in 34s
81 packages are looking for funding
  run `npm fund` for details
found 0 vulnerabilities

root@Z2Mosquitto:/opt/zigbee2mqtt# npm ci
added 387 packages, and audited 388 packages in 8s
81 packages are looking for funding
  run `npm fund` for details
found 0 vulnerabilities

On vérifie les versions npm et node et on mets à jour NPM

root@Z2Mosquitto:/opt/zigbee2mqtt# node -v
npm -v
v20.11.1
10.7.0

# Mise à jour de NPM
root@Z2Mosquitto:/opt/zigbee2mqtt# npm install -g npm@latest
npm error code EBADENGINE
npm error engine Unsupported engine
npm error engine Not compatible with your version of node/npm: npm@11.0.0
npm error notsup Not compatible with your version of node/npm: npm@11.0.0
npm error notsup Required: {"node":"^20.17.0 || >=22.9.0"}
npm error notsup Actual:   {"npm":"10.7.0","node":"v20.11.1"}

npm error A complete log of this run can be found in: /root/.npm/_logs/2025-01-13T16_32_02_882Z-debug-0.log

Erreur sur la mise à jour des packages, il ne trouve pas un OS compatible, on relance donc un apt update/upgrade

apt update && apt upgrade -y

Et dans les logs on peut voir pas mal de dépendance mise à jour pour nodeJ et npm
On relance donc la mise à jour de Z2M

root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh
Checking Zigbee2MQTT status...
Updating...
Already up to date.
Installing dependencies...
./update.sh: line 21: pnpm: command not found

# Il manque le package pnpm qui est la nouvelle version de npm, donc on l'installe
root@Z2Mosquitto:/opt/zigbee2mqtt# npm install -g pnpm
added 1 package in 2s
1 package is looking for funding
  run `npm fund` for details

# Et on relance la mise à jour (ENCORE !)
root@Z2Mosquitto:/opt/zigbee2mqtt# ./update.sh
Checking Zigbee2MQTT status...
Updating...
Already up to date.
Installing dependencies...
Lockfile is up to date, resolution step is skipped
Packages: +368
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

YOUHOU la mise à jour passe, CHAMPAGNE !!!

# Petit message qui fait plaisir
Done in 18.6s
Building...
> zigbee2mqtt@2.0.0 build /opt/zigbee2mqtt
> tsc && node index.js writehash
Done!

# Il nous reste donc a lancer la derniere commande
mv data/configuration.yaml.bak data/configuration.yaml

Redémarrage de la machine et on regarde sur la web interface

Une bonne nouvelle, nous somme sur la version 2.0.0 et nous n’avons pas de souci.

Vérification de la communication avec Jeedom et Home assistant faite. Les états remontent bien.

2. Avec ZigbeeLinker

Retour d’expérience sur l’installation de XIao Nico, j’étais en version 1.42 du 04/01, la MAJ du 14/01 m’a été proposé. J’ai donc lancé la MAJ, elle s’est faite puis j’ai relancé les dépendances comme indiqué sur le changelog. Je suis dorénavant « Version Zigbee2MQTT installée : 2.0.0 (votre version de Zigbee2MQTT est à jour) ». Pour l’instant, tout va bien.

Je rends l’antenne.

3. Conclusion suite à la mise à jour Zigbee2MQTT en V2

Des frayeurs maîtrisées grâce à l’assurance d’avoir des backups

Il est important de souligner que cette mise à jour, bien que maîtrisée dans mon cas grâce à des sauvegardes régulières, n’a pas été de tout repos. Pour information, au moment de la rédaction de cet article, cette version est encore en BETA. Elle peut comporter des effets de bord et d’autres problèmes potentiels.

Cependant, il est crucial de rappeler que chaque installation domotique est unique, avec ses propres spécificités matérielles et logicielles. Ce qui fonctionne parfaitement dans un environnement peut rencontrer des obstacles dans un autre.

C’est pourquoi je vous encourage vivement à effectuer des sauvegardes complètes avant de vous lancer dans ce type de mise à jour, et à vous préparer à gérer d’éventuels ajustements ou retours en arrière si nécessaire.

3.1 Article sur le sujet

Avant de vous lancer, n’oubliez pas que Loïc a déjà publié un article détaillé sur la mise en place de la version 2 de Zigbee2MQTT. Cet article constitue une excellente base pour comprendre les étapes essentielles et les spécificités de cette nouvelle version.

Mon objectif ici est de compléter son travail en partageant mon expérience personnelle, notamment sur les défis rencontrés et les ajustements spécifiques à ma configuration. Ces deux approches combinées devraient vous offrir une vision complète pour réussir votre mise à jour.
L’article: https://youdom.net/installer-zigbee2mqtt-2-0-sur-debian-12-avec-une-smlight-efr32mg24/

Bon courage pour la mise à jour et surtout….

HAVE FUN !

Jonathan WEBER

Ingénieur système et consultant Citrix, également moniteur canin avec un intérêt toujours marqué pour le tir. J'aime comprendre ce que je fais, maîtriser chaque détail et je suis constamment en quête d'amélioration.