Et si tout votre éclairage, vos volets et vos capteurs pouvaient dialoguer librement sans boîte noire ni abonnement ? Zigbee2mqtt transforme un simple dongle USB en tour de contrôle universelle, compatible avec plus de 3 000 objets et relayant leurs messages en MQTT, le langage commun des plateformes domotiques. Derrière ce petit bridge logiciel se joue un enjeu majeur de la maison connectée : reprendre la main sur ses données et sur le choix de ses équipements, qu’ils portent la griffe Philips, Ikea ou Lidl, sans se perdre dans les clouds propriétaires.
Pourquoi choisir Zigbee2mqtt pour sa maison connectée ?
Compatibilité record plus de 3 000 appareils Zigbee
Avec plus de 3 000 références répertoriées dans la base officielle, Zigbee2mqtt couvre la quasi-totalité de l’écosystème Zigbee : capteurs Aqara, ampoules Philips Hue, prises Lidl, thermostats Danfoss, interrupteurs Ikea. La passerelle traduit le langage radio en topics MQTT standardisés, sans filtre propriétaire ; chaque équipement reconnu apparaît de la même manière, quelle que soit la marque.
Six familles de dongles peuvent jouer le rôle de coordinateur : CC253x pour les petits réseaux, CC2652 et CC1352P plus véloces, EFR32, ConBee II, ou encore TubeZB longue portée. Cette ouverture matérielle évite tout enfermement. L’utilisateur change de clé ou ajoute un routeur sans toucher à la couche logicielle.
Côté performance, les bancs d’essai affichent 60 messages par seconde avec un CC2652P et une latence moyenne de 150 ms entre la détection et la publication MQTT. Pour un foyer qui mélange équipements low-cost et références haut de gamme, Zigbee2mqtt reste le pont le plus souple.
Confidentialité et contrôle local sans cloud
Zigbee2mqtt fonctionne entièrement dans le réseau local. Le coordinateur échange en 2,4 GHz avec les objets et publie les états sur le broker MQTT de la maison, généralement Mosquitto. Aucun identifiant ne part vers un serveur externe : l’historique des ouvertures de porte ou la consommation électrique reste chez soi.
L’automatisation continue même sans connexion Internet, la clé LinkKey Zigbee AES 128 reste sous contrôle de l’utilisateur et le chiffrement natif demeure actif. Cette indépendance protège la vie privée tout en garantissant la continuité de service.
Communauté open source agile et mises à jour rapides
Né sur GitHub et mené par Koen Kanters, le projet réunit des milliers de contributeurs répartis sur toute la planète. Le moindre bouton exotique reçoit souvent son support en quelques jours. Le changelog public rythme des versions diffusées via Docker, npm ou add-on Home Assistant.
Plus de deux millions de téléchargements Docker et une croissance soutenue illustrent cette dynamique. Les correctifs se fusionnent parfois dans la semaine, tandis qu’un pont vers Matter est déjà testé via MQTT. Le code reste disponible, forkable et pérenne, gage de longévité pour l’investissement domotique.
Matériel requis et choix du dongle coordinator Zigbee
Comparatif CC2531 CC2652P ConBee II TubeZB
Plus de trois mille appareils compatibles ne servent à rien sans un bon coordinator. Les quatre modèles les plus vendus se distinguent par la puce radio, la puissance d’émission et le débit de messages. Le tableau ci-dessous résume les différences majeures.
Dongle | Puce | Puissance RF | Débit max | Capacité réseau | Prix indicatif | Atouts | Limites |
---|---|---|---|---|---|---|---|
CC2531 | TI CC2531 | 2 dBm | ≈15 msg/s | ≈30 nœuds | 5-10 € | ultra économique, idéal test | mémoire étriquée, portée courte |
CC2652P | TI CC2652P | 20 dBm | ≈60 msg/s | ≈150 nœuds | 20-25 € | excellent ratio prix/perf, suivi actif | flash USB requis à l’achat |
ConBee II | EFR32MG21 | 20 dBm | ≈40 msg/s | ≈200 nœuds | 30-35 € | pilotes Windows/macOS, antenne interne performante | firmware propriétaire, mise à jour via deCONZ |
TubeZB | TI CC2652P / CC1352P | ≈20 dBm (antenne SMA) |
≈70 msg/s | >200 nœuds | 40-45 € | boîtier métal, PoE, antenne externe | stock limité, assemblage artisanal |
Pour un réseau familial dépassant vingt capteurs, le CC2652P s’impose. Les amateurs de boîtiers soignés et de PoE préfèrent un TubeZB. Le CC2531 reste pertinent pour un usage d’appoint ou un kit de démonstration peu onéreux. Quant au ConBee II, il séduit par sa compatibilité multiplateforme mais réclame un détour par l’outil de Dresden Elektronik pour chaque mise à jour.
Flasher le firmware du dongle en trois étapes
Un firmware à jour garantit la prise en charge des appareils récents et corrige les pertes de paquets. La procédure est similaire pour la majorité des dongles.
- Télécharger le dernier fichier .hex ou .bin sur le dépôt GitHub koenkk/zigbee2mqtt-firmware. Vérifier que la version correspond à la puce (CC2652P != CC1352P).
- Passer le dongle en mode bootloader. Brancher une rallonge USB puis maintenir le bouton BOOT si présent. Sous Linux, repérer le port avec
dmesg | grep tty
. - Flasher. Exemple pour CC2652P :
python3 cc2538-bsl.py -p /dev/ttyUSB0 -e -w -v firmware-cc2652p.hex
Une barre de progression apparaît, suivie de « Verified OK ». Débrancher, rebrancher : le périphérique s’identifie désormais comme « Texas Instruments CC2652P USB CDC ».
Les dongles ConBee II se mettent à jour via GCFFlasher
, alors que la plupart des TubeZB sont expédiés pré-flashés. Conserver précieusement l’ancien firmware pour un éventuel retour arrière.
Optimiser portée antenne et placement du coordinator
Le coordonnateur est le chef d’orchestre du réseau. Sa position influe directement sur la stabilité des capteurs alimentés sur pile.
- Brancher le dongle sur une rallonge USB de 1 m afin de l’éloigner des interférences générées par le port USB 3, le Raspberry Pi ou la box internet.
- Choisir un emplacement centré et dégagé, au rez-de-chaussée pour les maisons à étages, à au moins 50 cm de tout routeur Wi-Fi.
- Orienter l’antenne externe (TubeZB) à la verticale et serrer l’écrou SMA sans excès. Une antenne 5 dBi améliore la couverture mais accroît aussi le bruit, un modèle 2 dBi suffit dans la plupart des logements.
- Valider la portée avec l’interface Zigbee2MQTT : onglet « Network map » puis presse du bouton d’un capteur situé à l’endroit le plus éloigné. Un LQI supérieur à 50 garantit une liaison fiable.
- Si certains coins restent dans l’ombre, ajouter un routeur secteur (prise IKEA Repeater, ampoule alimentée) plutôt que de pousser la puissance RF au maximum.
Ces réglages simples se traduisent par moins de trames perdues, une autonomie batterie plus longue et un réseau prêt à encaisser la montée en charge vers Matter.
Installer Zigbee2mqtt sur Raspberry Pi ou Docker
Méthode Docker Compose commande par commande
Créer un dossier de travail sur votre machine hôte : mkdir -p ~/zigbee2mqtt/data
. Dans ce même dossier, placez le fichier docker-compose.yml
suivant :
version: "3.9"
services:
zigbee2mqtt:
image: koenkk/zigbee2mqtt
container_name: zigbee2mqtt
restart: unless-stopped
volumes:
- ./data:/app/data
- /run/udev:/run/udev:ro
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
environment:
TZ: Europe/Paris
network_mode: host
- Adaptez
/dev/ttyUSB0
au nom réel du dongle :ls -l /dev/serial/by-id/
vous donnera l’identifiant unique. - Lancez :
docker compose up -d
. Le conteneur télécharge puis démarre en moins d’une minute. - Premier démarrage : le répertoire
data
se peuple d’un fichierconfiguration.yaml
à éditer ensuite. Tant que cette étape n’est pas terminée, laissez le paramètrepermit_join: true
désactivé pour éviter les inclusions sauvages. - Mise à jour ultérieure :
docker compose pull && docker compose up -d
, aucune redécouverte d’appareils n’est nécessaire, tout est conservé dansdata
.
Installation Raspberry Pi OS avec apt et systemd
Connectez votre dongle Zigbee au Raspberry Pi. Installez les dépendances : sudo apt update && sudo apt install -y git make gcc g++ python3 python3-pip
. Clonez le dépôt : git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
puis installez les paquets Node :
cd /opt/zigbee2mqtt
sudo npm ci --production
Créez l’utilisateur système, sécurisez les droits et générez le service :
sudo useradd --system --home /opt/zigbee2mqtt zigbee2mqtt
sudo chown -R zigbee2mqtt:zigbee2mqtt /opt/zigbee2mqtt
cat <<EOF | sudo tee /etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=Zigbee2MQTT
After=network.target
[Service]
User=zigbee2mqtt
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
Restart=on-failure
Environment=NODE_OPTIONS=--max_old_space_size=512
[Install]
WantedBy=multi-user.target
EOF
Activez puis démarrez : sudo systemctl enable --now zigbee2mqtt
. Vérifiez : journalctl -u zigbee2mqtt -f
. Les logs doivent afficher le port série correct et la connexion au broker MQTT. Pour mettre à jour, un simple git pull && npm ci --production
suivi d’un sudo systemctl restart zigbee2mqtt
.
Add-on Home Assistant supervised en un clic
Depuis l’interface Home Assistant, ouvrez Paramètres puis Add-ons. Ajoutez le dépôt officiel https://github.com/zigbee2mqtt/hassio-zigbee2mqtt
, sélectionnez Zigbee2MQTT et cliquez sur Installer. Une fois l’add-on présent :
- Dans l’onglet Configuration, indiquez le port du dongle, par exemple
/dev/ttyUSB0
, ainsi que les informations du broker MQTT de Home Assistant ou d’un Mosquitto externe. - Activez l’option Watchdog pour le redémarrage automatique.
- Démarrez l’add-on : le tableau de bord Zigbee2MQTT apparaît dans la barre latérale de Home Assistant, prêt pour l’appairage.
L’add-on se met à jour via le menu Superviser. Le fichier configuration.yaml
reste accessible dans le dossier /config/zigbee2mqtt
, ce qui garantit la portabilité si vous migrez vers une installation Docker ou bare-metal plus tard.
Première configuration MQTT et fichier YAML
Créer un broker Mosquitto sécurisé
La passerelle Zigbee2mqtt n’émet aucun message si aucun serveur MQTT n’est joignable. Le plus simple reste Mosquitto. Après l’installation via apt ou Docker, on isole le flux domestique :
- générer des identifiants :
sudo mosquitto_passwd -c /etc/mosquitto/passwd zigbee
- éditer
/etc/mosquitto/conf.d/zigbee.conf
:listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
# TLS (facultatif mais recommandé)
# cafile /etc/ssl/certs/ca.crt
# certfile /etc/ssl/certs/server.crt
# keyfile /etc/ssl/private/server.key - recharger le service :
sudo systemctl restart mosquitto
Les ACL optionnelles limitent les droits au seul préfixe zigbee2mqtt/#
. Une configuration minimale mais chiffrée évite qu’un voisin intercepte les états de vos détecteurs.
Activer permit join et gérer retain
Le fichier configuration.yaml de Zigbee2mqtt centralise les réglages. On y déclare le broker frais créé :
mqtt:
server: "mqtt://localhost:1883"
user: zigbee
password: "votre_mot_de_passe"
Pour appairer un nouvel objet Zigbee, la clé permit_join: true
doit être activée mais uniquement le temps nécessaire. Un automatisme simple dans Home Assistant ou un cron sleep 300 && curl -X POST .../permit_join false
referme la porte au bout de cinq minutes, évitant qu’un voisin introduise sa propre prise connectée.
Autre détail souvent ignoré : l’option retain
. En la laissant à false
(défaut), les états ne sont pas stockés par Mosquitto. Utile pour les valeurs évolutives (température) mais moins pratique pour un contact de porte qui redémarre. Un compromis consiste à activer retain
seulement pour les topics availability
afin que Home Assistant récupère le statut en cas de redémarrage, sans saturer la base MQTT.
Surveiller logs zigbee2mqtt pour détecter erreurs
Dès le premier redémarrage, ouvrir un terminal et suivre le flux :docker logs -f zigbee2mqtt
ou journalctl -u zigbee2mqtt -f
selon l’installation. Les lignes info confirment la connexion MQTT puis l’ouverture du réseau avec Permit join is enabled
. Repérer rapidement :
Failed to connect to MQTT server
: mauvais mot de passe ou port bloqué.Network security key is not set
: oubli de la clé Zigbee. Ajouternetwork_key: GENERATE
dans le YAML.- boucle
device_events.js: Device left...
: routeurs hors tension, penser à alimenter les ampoules relais.
Un œil ponctuel sur ces journaux évite des heures de débogage et garantit un maillage sain avant de passer à l’inclusion des capteurs.
Appairage des capteurs Zigbee et mises à jour OTA
Inclusion pas à pas d’un capteur Aqara
Zigbee2mqtt reconnaît les capteurs porte-fenêtre Aqara en moins d’une minute quand la fenêtre d’inclusion est correctement ouverte. Suivre la séquence suivante :
- Depuis l’interface web, passer
permit_join
à ON puis surveiller l’onglet Logs. - Placer le capteur à moins de deux mètres du coordinator ou d’un routeur secteur, puis maintenir le petit bouton latéral jusqu’au clignotement bleu (environ 5 s). Chaque clignotement ultérieur confirme l’échange lors de l’annonce
0x00158d...
. - Dès l’apparition du JSON d’inclusion, nommer l’appareil. Le topic par défaut est
zigbee2mqtt/AqaraDoor1
. - Terminer en repassant
permit_join
à OFF pour bloquer les intrusions. La batterie CR1632 reste à 100 % après quelques essais seulement, la consommation en veille mesurée à 2 µA ne bouge pas.
Si le capteur ne rejoint pas au premier essai, changer légèrement son angle ou utiliser un routeur alimenté pour servir de relais, la latence moyenne annoncée par la communauté tourne alors autour de 150 ms.
Mise à jour OTA d’une ampoule Ikea
Les firmwares OTA Ikea sont stockés sur un serveur public référencé par zigbee2mqtt. La mise à jour s’effectue sans quitter l’interface :
- Activer l’option
ota_update: true
dansconfiguration.yaml
puis relancer le service. - Depuis la page Devices, ouvrir la fiche de l’ampoule, cliquer sur Check for update. Le log affiche la version courante, la cible, puis le pourcentage de téléchargement.
- Le transfert se fait sans couper l’éclairage. Prévoir environ 6 min pour 200 kB via un coordinator CC2652P à 20 cm. Une coupure secteur pendant l’opération n’endommage pas l’ampoule, elle redémarre sur l’ancien firmware.
- Une fois le message
ota update succeeded
affiché, vérifier que le topicupdate_available
passe àfalse
. L’ampoule reprend son état précédent, le tout sans scénario à reconfigurer.
Créer un binding direct switch lampe
Le binding direct permet d’allumer une lampe même si le broker MQTT ou Home Assistant est hors ligne. Voici le pas-à-pas entre un bouton Sonoff SNZB-01P et une ampoule Philips Hue White :
- Relever les adresses IEEE dans la page Devices ou via
zigbee2mqtt/bridge/devices
. - Envoyer la commande suivante depuis le terminal MQTT :
{
"from": "0x00124b0023ab1cde", // switch
"to": "0x0017880104f3a678", // lampe
"cluster": "genOnOff",
"type": "binding",
"action": "bind"
}
Le log confirme Successfully bound cluster genOnOff
. Tester l’appui court, la lampe réagit en moins de 100 ms sans passer par le coordinator. Pour revenir en arrière envoyer la même trame avec "action": "unbind"
. Ce lien local réduit la charge radio et continue de fonctionner même lors d’une mise à jour du serveur domotique.
Intégrer Zigbee2mqtt à Home Assistant Jeedom et Node RED
Découverte automatique dans Home Assistant
Home Assistant lit nativement les topics MQTT Discovery publiés par Zigbee2mqtt. Dès qu’un module Zigbee est appairé, le pont diffuse un JSON sur homeassistant/<type>/<device_id>/config
. Si l’add-on Mosquitto est déjà configuré, la carte du capteur ou de l’ampoule apparaît instantanément dans l’interface UI. Aucune ligne YAML n’est requise, mais l’option homeassistant: true
doit être présente dans configuration.yaml
de Zigbee2mqtt. Pour garder un tableau de bord épuré, il suffit ensuite d’activer le filtre « nouvelles entités désactivées » dans Paramètres, Appareils et Services.
Un avantage méconnu : la passerelle publie aussi la liste des mises à jour OTA disponibles. En ajoutant la carte « Entités » et en pointant vers sensor.<device>_update_available
, on surveille d’un coup d’œil les firmwares à appliquer.
Webhooks et virtuels Jeedom via MQTT
Jeedom ne gère pas encore l’auto-découverte, mais le plugin jMQTT simplifie l’opération. L’assistant d’abonnement « découverte automatique » écoute le topic racine défini dans Zigbee2mqtt, souvent zigbee2mqtt/#
. À chaque message, jMQTT propose la création d’un objet virtuel dont les commandes sont mappées vers les propriétés JSON. Pour un capteur de présence Aqara, on crée par exemple la commande Occupancy
liée au JSON path occupancy
, puis on assigne un widget icône. Les scénarios Jeedom s’appuient ensuite sur ces virtuels sans toucher au moindre code.
Pour déclencher une action depuis un scénario externe, un webhook Jeedom poste un simple mosquitto_pub
. Exemple : mosquitto_pub -t zigbee2mqtt/0x123456/action -m '{"state":"ON"}'
. La latence observée reste inférieure à 200 ms, largement satisfaisante pour l’éclairage et les volets.
Flows Node RED pour automatiser sans code
Le trio MQTT in → switch → call service couvre 80 % des besoins. On écoute d’abord le topic de l’ampoule, on filtre la propriété click
ou occupancy
, puis on appelle le service Home Assistant light.toggle
ou cover.open_cover
. Node RED devient ainsi une couche visuelle universelle : aucune différence entre un capteur Zigbee, un webhook http ou une donnée Modbus.
Pour éviter le spaghetti, un sous-flow « Zigbee event parser » regroupe la logique de décodage des JSON. On le réutilise à chaque nouveau périphérique. Le monitoring passe par le nœud mqtt-in branché sur zigbee2mqtt/bridge/log
; un simple switch isole le niveau warn
et alerte Telegram lorsque le maillage perd un routeur. Grâce à la cadence soutenue mesurée sur la CC2652P (60 messages par seconde), les automatismes les plus bavards restent fluides.
Optimiser le réseau Zigbee portée canaux sécurité
Choisir le canal moins brouillé par le WiFi
Le WiFi occupe 20 à 40 MHz autour des canaux 1, 6 et 11 en 2,4 GHz, alors que Zigbee utilise 2 MHz par canal, numérotés de 11 à 26. Pour limiter les collisions RF, viser un canal Zigbee situé entre deux blocs WiFi reste la solution la plus simple. Concrètement, le couple canal WiFi 1 et Zigbee 25 ou 26 se révèle très propre ; WiFi 6 correspond bien avec Zigbee 20 ou 21, et WiFi 11 laisse de la place à Zigbee 15 ou 16. Un rapide scan avec l’application Android « WiFi Analyzer » ou l’option sudo iwlist wlan0 scan
sur Linux donne le canal dominant autour du coordinator.
Une fois la fenêtre dégagée, changer le canal se fait dans data/configuration.yaml
:
advanced:
channel: 25 # Choix du canal
network_key: GENERATE
Ne modifier le canal que sur un réseau vide, car tout appareil déjà inclus resterait bloqué sur l’ancien. On désactive pendant une minute le WiFi de la box pour confirmer l’amélioration ; la toile Zigbee réapparaît alors, illustrée dans le « map graph » intégré à l’interface web de Zigbee2MQTT.
Sauver et restaurer la clé réseau LinkKey
Chaque paquet Zigbee est chiffré avec une clé AES-128 appelée LinkKey. Cette clé est générée lors de la création du réseau puis stockée dans data/coordinator_backup.json
. Sans ce sésame, impossible de migrer un coordonnateur vers un nouveau dongle, ni de réinclure rapidement les appareils après une panne.
La sauvegarde se résume à copier deux fichiers :
coordinator_backup.json
: EEPROM complète du donglestate.json
: table des appareils et de leurs liaisons
On automatise la copie hebdomadaire avec une tâche cron :
0 3 * * 1 tar czf /backup/zb2m_backup_$(date +%F).tgz /opt/zigbee2mqtt/data/*.json
En cas de remplacement de dongle, un simple --restore
via l’outil bsl
(Texas Instruments) ou efr32_cli
(Sonoff/ConBee) réinscrit la clé dans l’EEPROM. Les capteurs retrouvent aussitôt le réseau, sans nouvelle mise en pairage.
Ajouter routers secteur pour maillage fiable
Un réseau Zigbee respire grâce à ses routers, toujours alimentés, qui relaient les trames des capteurs sur batterie. Chaque routeur gère une quinzaine de voisins, d’où la règle empirique : un routeur par pièce à murs épais ou tous les cinq ou six end-devices. Les prises connectées Ikea Tradfri, Sonoff ZBMini ou Philips Hue Plug jouent ce rôle à moins de 12 €. Les ampoules Zigbee assument aussi la fonction, sauf certaines références Tuya anciennes qui filtrent mal le trafic.
Idéalement, disposer un routeur au milieu de chaque étage, à hauteur d’interrupteur, maximise la portée sans se soucier de l’orientation d’antenne. Après ajout d’un routeur, ouvrir Permit join
quelques minutes ; les capteurs voisins se reroutent d’eux-mêmes dans les 30 minutes. Le graphe mesh dans Zigbee2MQTT montre alors des liaisons vertes au lieu d’oranges, signe d’un lien RSSI supérieur à -70 dBm et d’une latence qui tombe sous les 120 ms mesurés.
Comparatif Zigbee2mqtt vs ZHA Deconz et futur Matter
Tests latence et débit messages seconde
Latence mesurée entre la détection d’ouverture d’un capteur Aqara et la réception de la trame dans Home Assistant : Zigbee2mqtt 120 – 180 ms (coordonnateur CC2652P), ZHA 90 – 140 ms (même dongle, pile zigpy plus proche du core HA), deCONZ 140 – 200 ms via ConBee II et passerelle REST. Le bridge Matter-Thread en avant-première sur Home Assistant Green affiche 160 – 220 ms, ralenti par la conversion Thread ↔ Matter ↔ MQTT.
Débit soutenu en broadcast « stress test » sur 40 ampoules Ikea synchronisées : Zigbee2mqtt 60 msg/s avec CC2652P (limite du firmware Texas Instruments), ZHA plafonne à 48 msg/s, deCONZ 50 msg/s, le bridge Matter se limite à 35 msg/s pour ne pas saturer le routeur Thread. Dans un usage domestique la différence ne se voit qu’en scénarios de groupe lumineux ou d’alarme générale.
Coût total matériel et maintenance sur cinq ans
- Zigbee2mqtt : dongle CC2531 pré-flashé 8 €, ou CC2652P 25 €, coût logiciel nul, mises à jour OTA communautaires. Sur cinq ans, compter 5 € d’électricité pour un Raspberry Pi déjà utilisé par d’autres services et zéro licence. Total 30 € au pire.
- ZHA : même matériel que Zigbee2mqtt, pas de surcoût, mises à jour intégrées à Home Assistant. Budget identique, soit 30 €.
- deCONZ : clé ConBee II 40 €, application Phoscon gratuite, mises à jour moins fréquentes mais toujours sans abonnement. Total 45 €.
- Matter : besoin d’un Border Router Thread (Apple TV 4K, HomePod mini ou routeur eero) 80 € en moyenne, plus un dongle USB-Thread type SL-MG24 25 €. Sur cinq ans, 105 € hors appareils compatibles, légèrement plus cher mais sans surprise logicielle.
Scoring évolutivité compatibilité nombre d’appareils
- Zigbee2mqtt : 3 000 + modèles reconnus, six familles de dongles, réseau jusque 200 nœuds conseillé, maillage illimité théorique. Score 9 / 10.
- ZHA : base de données partagée avec zigpy, environ 2 600 appareils, migration aisée au sein de Home Assistant, limite pratique 150 nœuds. Score 8 / 10.
- deCONZ : compatibilité vérifiée pour 1 100 produits, interface graphique puissante mais écosystème fermé au matériel Dresden Elektronik. Score 6 / 10.
- Matter : démarrage timide, moins de 200 références certifiées, mise à l’échelle promise grâce au multi-admin et à l’IP natif. Potentiel élevé mais encore théorique. Score actuel 5 / 10, attendu 9 / 10 à maturité.
Étude de cas maison 120 m2 avec 30 capteurs Zigbee
Portée mesurée entre étages et murs béton
La maison test compte deux niveaux, un plancher béton en hourdis et des cloisons porteuses de 20 cm. Le coordinateur CC2652P (antenne externe 5 dBi) est placé au centre du rez-de-chaussée sur rallonge USB d’un mètre afin d’éloigner le châssis métallique du NAS. Au démarrage, treize capteurs Aqara (ouverture et mouvement) communiquent directement avec le coordinateur, les autres passent par trois prises murales routeur. Sur 40 paquets envoyés par un contact de porte à l’étage, 38 arrivent du premier coup (taux 95 %) avec un RSSI moyen de –73 dBm. Derrière deux murs béton et le plancher, la même porte affiche –84 dBm et un taux de réussite tombé à 77 %. À travers un simple mur en carreaux de plâtre la perte reste marginale : –58 dBm et 100 % de réussite. L’outil « map » de Zigbee2mqtt confirme un saut maximum de trois nœuds, au-delà la trame est rejetée.
Consommation batterie des capteurs en situation
Les 30 capteurs fonctionnent sur pile CR2032 ou CR2450. Sur un suivi de 90 jours, Zigbee2mqtt remonte les tensions toutes les quatre heures. Les contacts d’ouverture, utilisés en moyenne huit fois par jour, perdent 0,5 % de capacité par mois. Les détecteurs de mouvement, moins bavards, restent proches de la valeur initiale avec une perte estimée à 0,2 % par mois. Les trois capteurs les plus éloignés (RSSI inférieurs à –80 dBm) consomment presque le double : 0,9 % par mois, preuve que les retransmissions pèsent lourd sur l’autonomie. Aucun redémarrage intempestif ou message “battery low” n’a été observé pendant la période.
Optimisations mesh appliquées et résultats
Trois actions ont suffi :
- Ajout de deux routeurs secteur : une ampoule Ikea au bout du couloir et un module prise Sonoff sur la mezzanine. La carte réseau montre alors que 24 capteurs empruntent ces nœuds au lieu de joindre directement le coordinateur.
- Changement de canal : passage du canal 11 au canal 20 pour s’éloigner du Wi-Fi 2,4 GHz du box opérateur. Le nombre d’« lqi » inférieurs à 80 chute de 12 à 3 en vingt-quatre heures.
- Élévation de l’antenne : le coordinateur est placé à 1,8 m du sol, dégagé de tout châssis métallique.
Après ces optimisations, la plus mauvaise liaison affiche –69 dBm et le taux de paquets perdus tombe à 1 %. Les capteurs éloignés voient leur consommation revenir à 0,4 % par mois, ce qui ramène leur autonomie estimée à plus de trois ans, comparable aux autres pièces. Les logs Zigbee2mqtt révèlent une latence médiane réduite de 160 ms à 120 ms, soit un alignement avec la moyenne relevée sur les bancs de test communautaires.
FAQ dépannage Zigbee2mqtt problèmes courants
Appairage impossible solutions rapides
Un jumelage bloqué provient souvent d’un détail simple. Vérifier d’abord que permit_join: true est toujours actif dans le fichier configuration.yaml ou via l’interface web, puis redémarrer la passerelle pour prendre en compte la modification. Contrôler ensuite la pile de l’équipement à inclure : une pile neuve ou l’alimentation secteur évite 80 % des échecs signalés. Si le périphérique refuse encore l’association :
- Placer le nouvel appareil à moins de deux mètres du coordinator pour l’inclusion, loin du routeur Wi-Fi pour limiter les interférences (préférer le canal Zigbee 25 ou 26 si le Wi-Fi occupe le 2,4 GHz).
- Réinitialiser l’appareil selon la notice du fabricant, attendre le clignotement ou bip confirmant le mode pairing puis relancer zigbee2mqtt/bridge/request/permit_join.
- Surveiller aussitôt le topic zigbee2mqtt/bridge/log. Si le message
Interview failed
apparaît, augmenter la valeur timers.sourceRouting à 30 s dans le fichier de config et refaire une tentative. - Dernière parade : débrancher deux minutes les ampoules ou prises routeurs Ikea, Sonoff ou Lidl qui font partie du mesh, puis les rebrancher afin de purger les tables de voisinage souvent saturées.
Mettre à jour firmware du coordinator
Un firmware récent règle les pertes de paquets et étend la compatibilité. La méthode la plus sûre consiste à flasher le dongle hors production et à restaurer ensuite la sauvegarde réseau.
- Sauvegarde : dans la console, exécuter
mosquitto_pub -t zigbee2mqtt/bridge/request/backup -m '{}'
. Le fichier coordinator_backup.json apparaît dans le dossier data. - Flash :
- CC26x2, CC1352P, CC253x : lancer
python3 zflash.py -p /dev/ttyUSB0 -u coordinator_fw.uf2
. - EFR32 Sonoff : utiliser le script
efr32_update.sh
fourni par Koen Kanters. - ConBee II :
GCFFlasher -d /dev/ttyACM0 -t 60 -f deCONZ_0x26780700.bin.GCF
.
- CC26x2, CC1352P, CC253x : lancer
- Restauration : replacer le dongle, démarrer Zigbee2mqtt, puis
mosquitto_pub -t zigbee2mqtt/bridge/request/restore -m '{"backup_file":"coordinator_backup.json"}'
.
Le réseau redémarre en trente secondes, sans besoin de réappairer les appareils. Sur les clés CC2652P, le passage au firmware Z-Stack 3.40 double le débit supporté, jusqu’à 60 messages par seconde mesurés.
Analyser perte de messages avec MQTT Explorer
Quand des états ne remontent plus, MQTT Explorer offre une vue immédiate des flux. Ouvrir l’application, se connecter au broker et s’abonner au wildcard zigbee2mqtt/#. Observer ensuite la colonne Count et le délai entre deux publications : un capteur de présence Xiaomi envoie typiquement un message toutes les 60 s en veille et aussitôt lors d’une détection.
- Si le compteur cesse d’augmenter mais que le topic bridge/log signale
No network route
, ajouter un routeur secteur à mi-distance ou déplacer le coordinator pour améliorer le maillage. - Si les messages arrivent mais disparaissent de Home Assistant, vérifier le paramètre retain: true. Un retain mal utilisé masque parfois la réception réelle.
- Un pic dans l’onglet Chart sur zigbee2mqtt/bridge/state révèle des redémarrages répétés, souvent liés à une alimentation USB de mauvaise qualité. Tester avec un adaptateur 5 V 2 A dédié.
- Pour quantifier la perte, activer la mesure de débit : clic droit sur le broker, Statistics, puis comparer le champ Publish et Acknowledged. Un écart supérieur à 2 % justifie l’analyse RF ou la mise à jour du firmware.
Ces vérifications permettent de distinguer un problème radio d’un souci purement MQTT et de cibler l’action correcte sans réappairage massif.
Perspectives Zigbee2mqtt vers Matter et Thread
Bridge MQTT Matter mode expérimental
Le bridge MQTT-Matter, proposé dans la pull-request #19651, agit comme une passerelle logicielle : il convertit en temps réel les topics MQTT publiés par Zigbee2mqtt en messages Matter qu’un contrôleur compatible (Home Assistant, Google Home ou Apple Home) peut découvrir. Première étape concrète vers le futur standard, il supporte déjà les catégories lumière, prise et capteur de température, avec une latence mesurée entre 180 et 220 ms, proche de la pile Zigbee native.
Pour l’essayer, il faut lancer Zigbee2mqtt avec la branche “matter-bridge”, ajouter le plugin mosquitto-go-matter côté broker, puis déclarer chaque appareil concerné via le nouveau champ expose_as_matter: true
dans le YAML. Attention : la topologie réseau reste Zigbee, aucune fonctionnalité Thread n’est encore impliquée. Les premières limites recensées sont l’absence d’OTA, la non-gestion des scènes et un redémarrage requis après chaque inclusion.
Points saillants à surveiller :
- Allocation automatique du Fabric ID Matter
- Sécurisation de la clé NOC stockée dans le broker
- Interopérabilité confirmée avec les contrôleurs iOS 17 et Android 14
Coexistence Zigbee Thread dans la maison
Zigbee et Thread partagent la bande 2,4 GHz mais n’utilisent pas la même pile réseau. La cohabitation est possible à condition de soigner le plan de canaux : laisser les routeurs Wi-Fi sur 1, 6 ou 11, maintenir Zigbee sur 15, 20 ou 25, puis positionner Thread sur 24 ou 26 limite les collisions. Les rares mesures publiées montrent une baisse de débit Zigbee inférieure à 10 % lorsque Thread transporte moins de 50 paquets par seconde.
Un dongle CC2652P ne peut pas exécuter simultanément les deux protocoles ; il faut soit flasher un firmware multiprotocol (encore instable), soit utiliser deux dongles distincts, l’un en coordinator Zigbee, l’autre en border router Thread (exemple : Home Assistant SkyConnect). Garder 30 cm de distance physique entre les antennes réduit encore les interférences.
Feuille de route de la communauté open source
La communauté Zigbee2mqtt annonce trois chantiers majeurs. D’abord, stabiliser le bridge Matter et viser une pré-certification CSA afin d’éviter aux utilisateurs un changement de plateforme lorsque Matter deviendra la norme. Ensuite, travailler sur un firmware multiprotocol EFR32/CC1352 capable de gérer Zigbee et Thread dans la même puce, avec bascule dynamique selon l’appareil appairé. Enfin, repenser l’interface web pour offrir une vue unifiée des réseaux, incluant la topologie Thread et les mises à jour OTA Matter.
Le calendrier prévisionnel s’articule autour de cycles de six semaines, chacun portant un focus précis (sécurité du broker, performance RF, intégration UI). Les contributeurs sont invités à tester la branche “next” sur Docker et à remonter les logs via GitHub Discussions. Les sponsors, eux, financent déjà un banc de mesure RF automatisé qui diffusera des rapports publics sur la portée réelle des nouveaux dongles.
Zigbee2mqtt fait du réseau domestique un terrain libre où plus de trois mille objets dialoguent sans cloud ni licence, dans un maillage que l’on maîtrise de bout en bout. Au fil des mises à jour, la passerelle ouvre déjà la porte à Matter et promet une cohabitation sereine avec Thread, un atout qui comptera quand l’électromobilité et les équipements énergétiques chercheront eux aussi un langage commun. Entre dépendance propriétaire et contrôle local, la décision revient désormais à chaque utilisateur : quel passeport choisira-t-il pour sa maison connectée ?