Zigbee2mqtt, passeport domotique pour une maison connectée fluide

par Alex

Durée de lecture : 19 minutes

La passerelle libre Zigbee2mqtt transforme un dongle USB à dix euros en tour de contrôle pour plus de 3 000 objets connectés. Capteurs Aqara, ampoules Philips Hue ou prises Lidl communiquent alors en MQTT, sans cloud ni abonnement. Le résultat : une maison vraiment indépendante, évolutive, prête pour Matter, avec des performances dignes des solutions premium.

Photo zigbee2mqtt-domotique-maison-connectee
Sommaire de l'article afficher

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.

  1. 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).
  2. 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.
  3. 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 fichier configuration.yaml à éditer ensuite. Tant que cette étape n’est pas terminée, laissez le paramètre permit_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é dans data.

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 :

  1. générer des identifiants : sudo mosquitto_passwd -c /etc/mosquitto/passwd zigbee
  2. é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
  3. 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. Ajouter network_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 :

  1. Depuis l’interface web, passer permit_join à ON puis surveiller l’onglet Logs.
  2. 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....
  3. Dès l’apparition du JSON d’inclusion, nommer l’appareil. Le topic par défaut est zigbee2mqtt/AqaraDoor1.
  4. 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 :

  1. Activer l’option ota_update: true dans configuration.yaml puis relancer le service.
  2. 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.
  3. 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.
  4. Une fois le message ota update succeeded affiché, vérifier que le topic update_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 :

  1. Relever les adresses IEEE dans la page Devices ou via zigbee2mqtt/bridge/devices.
  2. 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 dongle
  • state.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.

  1. 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.
  2. 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.
  3. 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 ?

Cet article est utile ?
4.9/5 (42)
TAGS
Photo of author

À propos de l'auteur, Alex

Passionné par la techno et l'écologie, je suis le cerveau derrière Elec Store après une carrière riche chez les géants de la mobilité électrique et de la domotique. Diplômé en ingénierie électrique, mon but est de démocratiser la tech verte et favoriser un futur durable. Je simplifie les innovations pour tous, partageant astuces et insights pour embrasser un mode de vie éco-responsable. Avec Elec Store, je vise à inspirer un quotidien connecté et respectueux de notre planète.

Elec Store est édité de façon indépendante. Soutenez la rédaction en nous ajoutant dans vos favoris sur Google Actualités :

Suivez-nous sur Google News

À lire aussi dans Maison Connectée

Laisser un commentaire