Plugin ZigbeeLinker (Jeedom) : FAQ

Sommaire

Contactez-moi

Si après avoir fait toutes ces vérifications, vous n’arrivez pas à faire fonctionner ZigbeeLinker, contactez moi ici : https://community.jeedom.com/u/mrgreen/summary
Cliquez sur Message en haut à droite. Et expliquez moi votre problème.

Comment taper des lignes SSH

Dans les FAQ, vous trouverez souvent : en ssh, tapez …
Comment faire :
Dans Jeedom, allez le menu Réglages -> Système -> Configuration
Onglet _>OS/DB, bouton_>Administration Système

Tapez le code dans la zone que j’ai souligné en rouge, et cliquez sur OK

Liste des adaptateurs compatibles.

Zigbee2MQTT est développé pour utiliser un adaptateur USB ou Série.
Voici la liste des adaptateurs actuellement compatibles : https://www.zigbee2mqtt.io/information/supported_adapters.html

Démon NOK ou non stable

Vérifier la configuration de l’adaptateur USB

Dans le menu Configuration du plugin, pour une clé :

ConbeeII

Adaptateur : Conbee II
Port : Non Utilisé

CC2531

Adaptateur : Z-Stack
Port : /dev/ttyACM0 (ou ACM1 etc…)

Zigate

Adaptateur : Zigate
Port : /dev/ttyUSB0 (ou USB1 etc…)

Popp Elelabs

Adaptateur : EZSP (EFR32/MGM)
Port : /dev/ttyUSB0 (ou USB1 etc…)
Raspberry PI : Branchez la clé sur un Hub USB autoalimenté et en Port USB2 du RPI.

SONOFF Zigbee EFR32

Adaptateur : EZSP (EFR32/MGM)
Port : Non utilisé

SONOFF Zigbee CC2652

Adaptateur : Z-Stack
Port : Non utilisé

Jeedom Atlas

Adaptateur : EZSP (EFR32/MGM)
Port : USB Jeedom atlas (/dev/ttyS2)

Electrolama zig-a-zig-ah (zzh // CC2652R)

Adapter : Non utilisé
Port : /dev/ttyUSB0 (ou ttyUSB1 etc…)

Mise à jour du Firmware

Mise en garde

ATTENTION ces manipulations comportent des risques ! Vous pouvez endommager votre clé USB. Ne faites ces manipulations que si vous êtes sûr de ce que vous faite !

Page de la liste des firmwares

Passez le Firmware de votre adaptateur (USB) en dernière version. Le github de Zigbee2MQTT est super bien fait pour cela.
La plus part des mises à jour sont sur cette page : https://www.zigbee2mqtt.io/information/supported_adapters.html
Il y a une colonne « Flashing ».

Firmware Clé Popp Elelabs (EZSP)

Mettre à jour le firmware, avec Putty:
(git sources : https://github.com/Elelabs/elelabs-zigbee-ezsp-utility et https://github.com/zha-ng/EZSP-Firmware/)

sudo git clone https://github.com/Elelabs/elelabs-zigbee-ezsp-utility.git ~/ezsp/
cd ~/ezsp/
sudo pip3 install -r requirements.txt
Trouver le port usb /dev/ttyUSB0 ou /dev/ttuACM0
sudo ls -l /dev/serial/by-id

Résultat :

lrwxrwxrwx 1 root root 13 May  4 18:48 usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0

Généralement, la clé se nomme « usb-1a86_USB_Serial », le port est donc ttyUSB0. Le nom complet du port est donc /dev/ttyUSB0

Effectuer les vérifications :

sudo python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0

Si le résultat ressemble à cela :

root@raspberrypi:/tmp/ezsp# sudo python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 501, in read
    'device reports readiness to read but returned no data '
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Elelabs_EzspFwUtility.py", line 526, in <module>
    elelabs.probe()
  File "Elelabs_EzspFwUtility.py", line 307, in probe
    ezsp_status = ezsp.initEzspProtocol()
  File "Elelabs_EzspFwUtility.py", line 286, in initEzspProtocol
    ash_status = self.ash.sendResetFrame()
  File "Elelabs_EzspFwUtility.py", line 178, in sendResetFrame
    status, response = self.getResponse()
  File "Elelabs_EzspFwUtility.py", line 153, in getResponse
    receivedbyte = self.serial.read()
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 509, in read
    raise SerialException('read failed: {}'.format(e))
serial.serialutil.SerialException: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Ce n’est pas bon. Vérifiez que vous avez arrêté le démon de ZigbeeLinker, car apparemment il utilise la clé, et elle ne peut pas être interrogée.

Voici le type de résultat attendu :

root@raspberrypi:/root/ezsp# sudo python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0
2021/05/04 20:24:29 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:24:29 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:24:29 Elelabs_EzspFwUtility:   Firmware: 6.0.3-64
2021/05/04 20:24:29 Elelabs_EzspFwUtility:   EZSP v6

Si vous êtes en Elelabs_EzspFwUtility: EZSP v6, on va basculer en V8 (sinon ignorez cette étape.

sudo python3 Elelabs_EzspFwUtility.py ele_update -v zigbee -p /dev/ttyUSB0

Ne pas faire : sudo python3 Elelabs_EzspFwUtility.py ele_update -v v8 -p /dev/ttyUSB0

Le résultat doit-être le suivant :

root@raspberrypi:~/ezsp# sudo python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0
2021/05/04 20:48:16 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:48:16 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:48:16 Elelabs_EzspFwUtility:   Firmware: 6.0.3-64
2021/05/04 20:48:16 Elelabs_EzspFwUtility:   EZSP v6
root@raspberrypi:~/ezsp# sudo python3 Elelabs_EzspFwUtility.py ele_update -v v8 -p /dev/ttyUSB0
2021/05/04 20:48:35 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:48:35 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:48:35 Elelabs_EzspFwUtility:   Firmware: 6.0.3-64
2021/05/04 20:48:35 Elelabs_EzspFwUtility:   EZSP v6
2021/05/04 20:48:36 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:48:36 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:48:36 Elelabs_EzspFwUtility:   Firmware: 6.0.3-64
2021/05/04 20:48:36 Elelabs_EzspFwUtility:   EZSP v6
2021/05/04 20:48:36 Elelabs_EzspFwUtility:   Launch in bootloader mode
2021/05/04 20:48:42 Elelabs_EzspFwUtility:   EZSP adapter in bootloader mode detected:
2021/05/04 20:48:42 Elelabs_EzspFwUtility:   Gecko Bootloader v1.A.0
2021/05/04 20:48:43 Elelabs_EzspFwUtility:   Successfully restarted into X-MODEM mode! Starting upload of the new firmware... DO NOT INTERRUPT(!)
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
....
2021/05/04 20:49:20 Elelabs_EzspFwUtility:   Firmware upload complete
2021/05/04 20:49:20 Elelabs_EzspFwUtility:   Rebooting NCP...
2021/05/04 20:49:27 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:49:27 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:49:27 Elelabs_EzspFwUtility:   Firmware: 6.7.0-149
2021/05/04 20:49:27 Elelabs_EzspFwUtility:   EZSP v8

SUITE A LA DERNIERE MISE A JOUR EZSP : Le dernier firmware est automatiquement installé avec la commande précédente : NE PAS FAIRE LA SUITE (qui est gardée ici pour historique)

On vérifie que la clé USB n’est pas restée dans le bootloader :

sudo python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0

Le résultat doit-être

root@raspberrypi:~/ezsp# python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0
2021/05/04 20:50:42 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 20:50:42 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 20:50:42 Elelabs_EzspFwUtility:   Firmware: 6.7.0-149
2021/05/04 20:50:42 Elelabs_EzspFwUtility:   EZSP v8

Si vous n’avez pas ce résultat et que la dernière ligne contient « Bootloader » comme ci-dessous :

root@raspberrypi:~/ezsp# python3 Elelabs_EzspFwUtility.py probe -p /dev/ttyUSB0
2021/05/04 20:53:42 Elelabs_EzspFwUtility:   EZSP adapter in bootloader mode detected:
2021/05/04 20:53:42 Elelabs_EzspFwUtility:   Gecko Bootloader v1.A.0

Laissez cette commande pour switcher en mode normal :

sudo python3 Elelabs_EzspFwUtility.py restart -m nrml -p /dev/ttyUSB0

Si et seulement si vous êtes en Chipset EFR32MG13 (clé domadoo par exemple) : Téléchargez et installez le firmware conseillé par Zigbee2MQTT :

wget https://github.com/zha-ng/EZSP-Firmware/raw/master/Elelabs-ELU013/efr32mg13p-v8-6780-sw-115200.gbl

sudo python3 Elelabs_EzspFwUtility.py flash -f efr32mg13p-v8-6780-sw-115200.gbl -p /dev/ttyUSB0

Le résultat doit-être le suivant :

root@raspberrypi:~/ezsp# sudo python3 Elelabs_EzspFwUtility.py flash -f efr32mg13p-v8-6780-sw-115200.gbl -p /dev/ttyUSB0
2021/05/04 21:10:24 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 21:10:24 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 21:10:24 Elelabs_EzspFwUtility:   Firmware: 6.7.0-149
2021/05/04 21:10:24 Elelabs_EzspFwUtility:   EZSP v8
2021/05/04 21:10:24 Elelabs_EzspFwUtility:   Launch in bootloader mode
2021/05/04 21:10:30 Elelabs_EzspFwUtility:   EZSP adapter in bootloader mode detected:
2021/05/04 21:10:30 Elelabs_EzspFwUtility:   Gecko Bootloader v1.A.0
2021/05/04 21:10:31 Elelabs_EzspFwUtility:   Successfully restarted into X-MODEM mode! Starting upload of the new firmware... DO NOT INTERRUPT(!)
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....

2021/05/04 21:11:09 Elelabs_EzspFwUtility:   Firmware upload complete
2021/05/04 21:11:09 Elelabs_EzspFwUtility:   Rebooting NCP...
2021/05/04 21:11:16 Elelabs_EzspFwUtility:   Elelabs adapter detected:
2021/05/04 21:11:16 Elelabs_EzspFwUtility:   Adapter: ELR023
2021/05/04 21:11:16 Elelabs_EzspFwUtility:   Firmware: 6.7.8-117
2021/05/04 21:11:16 Elelabs_EzspFwUtility:   EZSP v8

Cette ligne permet de vérifier la version : Elelabs_EzspFwUtility: Firmware: 6.7.8-117

Plugin et dépendances à jour

Vérifiez que vous êtes sur la dernière version du plugin : Dans Jeedom, menu Réglages -> Système -> Centre de mise à jour
Cliquez sur le bouton Vérifier les mises à jour, puis vérifiez que le plugin id « zigbee2mqtt » est bien en OK vert

sinon lancez la mise à jour en cliquant sur Mettre à jour sur la même ligne :

Ensuite, allez dans la configuration du plugin, et cliquez sur Relancer dans le cadre des dépendances :

Les dépendances n’arrivent pas à installer/mettre à jour Zigbee2MQTT

Il peut arriver qu’un élément bloque la mise à jour de zigbee2MQTT.
Un exemple : error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion : package-lock.json.

Dans un premier temps, allez dans la configuration du plugins, section « Expert » et cliquez sur « Réparer zigbee2MQTT », puis relancez les dépendances :

Si cela ne fonctionne toujours pas, arrêtez le démon, puis en ssh, supprimez l’installation de zigbee2MQTT avec la commande (les données ne seront pas perdues si c’est ZigbeeLinker qui gère l’installation de Zigbee2MQTT) :

sudo rm -Rf /opt/zigbee2mqtt

Puis relancez le démon (pensez à le remettre en démarrage auto), et relancez les dépendances.

La mise à jour des dépendances ne fait pas évoluer la version de Zigbee2MQTT

Faites les manipulations décrites juste au dessus dans la section « Les dépendances n’arrivent pas à installer/mettre à jour Zigbee2MQTT ».

Désactiver les autres Plugin utilisant l’adaptateur

Un adaptateur USB n’est utilisable que par un seul logiciel. Pensez à arrêter le démon des autres plugins pouvant utiliser votre adaptateur Zigbee, puis désactivez le plugin. Pour cela allez dans la configuration du plugin en question, et cliquez sur désactiver :

Puis arrêtez le démon :

Et pour finir désactivez le plugin :

Fichier de configuration compromis

En debug, le message suivant apparaît :

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined

Généralement du a un bug connu qui laisse une ligne groups: [ ] dans le fichier de configuration zigbee2mqtt.
Pour vérifier cela et supprimer cette ligne, allez dans la configuration du plugin ZigbeeLinker et cliquez sur

Puis parcourez (généralement la fin) du fichier pour supprimer la ligne groupe: [ ] et relancez le démon.

Factory reset

Vous passez d’un autre plugin à ZigbeeLinker, ou vous venez de recevoir votre clé. Faite un factory reset (selon la clé USB, la procédure est différente : Google est votre ami)

Débrancher / Rebrancher l’adaptateur (USB)

L’adaptateur peut avoir besoin d’un reset (reboot). Débranchez le, attendez bien 1mn, et rebranchez le.

Utilisez un port USB2

Le port USB3 (souvent sur le RPI4) peuvent poser des problèmes. Utilisez l’adaptateur USB sur un port USB2.
Un des problèmes constaté, c’est que la clé conbeeII arrivait à recevoir des données, mais il était impossible de rentrer en mode inclusion (Permit Join) ou d’envoyer des données (activer/désactiver une prise).

Adaptateur USB connecté ?

En ssh, tapez

sudo lsusb

Cette ligne permet d’afficher la liste des équipements USB connecté.

Pour une ConbeeII, il s’agit de la ligne Dresden Elektronik, elle est bien connectée.

Adaptateur USB sous-alimenté: Hub USB autoalimenté

Utilisez la ligne au dessus pour vérifier cela (Adaptateur USB connecté).
On va regarder le nombre à côté de Device. Dans notre cas 43.
Ce n’est pas normal. A chaque déconnection (pour sous-alimentation ou autre problème), le nombre à côté de Device va s’incrémenter. S’il est trop élevé, c’est qu’il y a un problème.
Commencez par mettre la clé sur un hub USB autoalimenté (avec sa propre alimentation), et sur un port USB2.

Voici une petite astuce pour surveiller les déconnexions. En ssh, tapez :

sudo journalctl | grep "USB device number"

Les résultats seront du format :

avril 29 16:50:21 raspberry kernel: usb 1-1.3.4: new full-speed USB device number 42 using xhci_hcd
avril 29 16:50:25 raspberry kernel: usb 1-1.3.4: new full-speed USB device number 43 using xhci_hcd

Cela veut dire qu’un périphérique USB s’est déconnecté puis reconnecté 2 fois et a changé de device number : Problème d’alimentation généralement. Si les déconnexions sont rare, vous pouvez ignorer ces messages.

Utilisation d’une rallonge USB : Eloignez la clé !

Parfois cela aide (si vous n’avez pas encore le Hub USB autoalimenté) à éloigner la clé USB de votre équipement où est installé Jeedom. Par exemple un Raspberry avec son Wifi et Bluetooth intégré peut déranger votre adaptateur USB.

J’ai remarqué cela avec les Raspberry PI et les clés POPP EZSP Elelabs… Si la clé est trop proche du RPI, il est impossible d’appairer de nouveaux équipement. Il faut l’éloigner de 1 bon mètre pour que cela fonctionne à nouveau.

Raspberry

Désactiver ModemManager

Modem Manager est un logiciel de gestion de modem qui peut tenter de déconnecter/connecter les périphériques USB nouvellement connectés. Des problèmes ont étés constastés avec certaines clés USB (dont la conbeeII)

sudo systemctl disable ModemManager
sudo systemctl stop ModemManager
sudo apt-get purge modemmanager

Désactivez le Port série, le SPI, le Bluetooth et le Wifi du RPI

Le Bluetooth et le Wifi du Raspberry peuvent faire des interférences avec l’adaptateur. Une box domotique étant généralement branchée au réseau par cable RJ45, et le Bluetooth étant généralement utilisé via une clé SENA ou autre (le Bluetooth du RPI étant trop faible), on peut désactiver ces deux éléments. En ssh :

sudo systemctl disable wpa_supplicant
sudo systemctl disable bluetooth
sudo systemctl disable hciuart

Il faudra maintenant utiliser un logiciel comme Putty et Winscp pour éditer le fichier /boot/config.txt et placer ces lignes à la fin du fichier :

sudo nano /boot/config.txt
enable_uart=0
dtoverlay=disable-wifi
dtoverlay=disable-bt
dtparam=spi=off
#Ctrl+O pour enregistrer, Ctrl+X pour quitter

Redémarrez votre système après ces modifications

Mettez à jour votre Raspberry

Toujours avec un logiciel tel que Putty :

sudo rpi-update

Répondez Yes et redémarrez. Pour tester que votre RPI est à jour sans avoir eu d’erreur tapez en ssh :

sudo modprobe loop

S’il n’y a aucun message, c’est que tout va bien.

Mettez à jour votre système Linux

En ssh :

sudo apt update
sudo apt upgrade -y

Si des messages apparaissent, il faut les traiter. Par exemple :

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  libegl-mesa0 libegl1 libevdev2 libgbm1 libgles2 libinput-bin libinput10 libmtdev1 libqt5gui5 libqt5sql5 libqt5sql
  libwayland-server0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-util0 lib
Veuillez utiliser « apt autoremove » pour les supprimer.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Des paquets sont installés et ne sont plus nécessaires, faire :

sudo apt autoremove -y

D’autres messages peuvent aussi bloquer l’installation des paquetages nécessaires au système, voici des commandes de réparation :

sudo apt autoclean
sudo apt clean
sudo apt update
sudo dpkg --configure -a
sudo apt -f install
sudo apt --fix-broken install
sudo apt upgrade -y

Pour terminer lancer à nouveau :

sudo apt upgrade -y

Un résultat propre et correct doit donner cela (sans autre message) :

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Zigbee2MQTT s’est arrêté (Zigbee2MQTT ne démarre pas)

Redémarrage en boucle du service (Error: Command failed: npm run build)

> zigbee2mqtt@1.32.2 start
> node index.js

Building Zigbee2MQTT... (initial build), failed
Error: Command failed: npm run build

    at ChildProcess.exithandler (node:child_process:402:12)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)

Résolution en 2 étapes :

1- Mettre à jour votre linux : https://www.pasteck.com/plugin-zigbeelinker-jeedom-faq/#Mettez_a_jour_votre_systeme_Linux

2- Arrêter le démon du plugin ZigbeeLinker
En ssh : sudo rm -Rf /opt/zigbee2mqtt
Relancer les dépendances.
Relancer le démon, et attendez 5mn.

Réparer Zigbee2MQTT

Si le démon Zigbee2MQTT est en cause, vous pouvez tenter une réparation du plugin. Pour cela allez dans Configuration du plugin, et cliquez sur le bouton « Réparer Zigbee2MQTT »

Après cette étape, cliquez sur le bouton « Relancer » pour relancer l’installation des dépendances.

Débugger le démarrage de Zigbee2MQTT

Dans le log du démon du plugin ZigbeeLinker, le service Zigbee2MQTT démarre, puis après 30 à 60 secondes, le service s’arrête. Une manipulation permet de lancer le service Zigbee2MQTT à la main et voir les messages d’erreur de celui-ci.

Dans la configuration du plugin, il y a un bouton pour redémarrer en mode debug, et un bouton pour consulter le log :

Voici un exemple de résultat de log avec des erreurs :

> zigbee2mqtt@1.18.2 start /opt/zigbee2mqtt
> node index.js

·[32mZigbee2MQTT:info ·[39m 2021-04-30 17:15:42: Logging to console and directory: '/var/www/html/plugins/zigbee2mqtt/data/zigbee2mqtt/log/2021-04-30.17-15-41' filename: log.txt
·[32mZigbee2MQTT:info ·[39m 2021-04-30 17:15:42: Starting Zigbee2MQTT version 1.18.2 (commit #abd8a092)
·[32mZigbee2MQTT:info ·[39m 2021-04-30 17:15:42: Starting zigbee-herdsman (0.13.88)
·[31mZigbee2MQTT:error·[39m 2021-04-30 17:15:48: Error while starting zigbee-herdsman
·[31mZigbee2MQTT:error·[39m 2021-04-30 17:15:48: Failed to start zigbee
·[31mZigbee2MQTT:error·[39m 2021-04-30 17:15:48: Check https://www.zigbee2mqtt.io/information/FAQ.html#help-zigbee2mqtt-fails-to-start for possible solutions
·[31mZigbee2MQTT:error·[39m 2021-04-30 17:15:48: Exiting...
·[31mZigbee2MQTT:error·[39m 2021-04-30 17:15:48: Error: failed to connect to zigate adapter [object Object] after 5000ms
    at ZiGateAdapter. (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/zigate/adapter/zigateAdapter.js:79:23)
    at Generator.throw ()
    at rejected (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/zigate/adapter/zigateAdapter.js:25:65)
    at runNextTicks (internal/process/task_queues.js:58:5)
    at listOnTimeout (internal/timers.js:523:9)
    at processTimers (internal/timers.js:497:7)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! zigbee2mqtt@1.18.2 start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the zigbee2mqtt@1.18.2 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-04-30T15_15_48_185Z-debug.log

Le message qui nous intéresse est toujours après la ligne Exiting…
Voici donc le message d’erreur important :
Error: failed to connect to zigate adapter [object Object] after 5000ms
On constate que Zigbee2MQTT n’arrive pas à communiquer avec l’adaptateur USB. Il faut vérifier qu’il est bien connecté, et mis à jour avec le bon firmware etc…

Le service MQTT ne démarre pas

Une configuration du plugin jMQTT bloque

Si vous avez installé jMQTT, et désinstallé le plugin, il est possible que sa configuration soit restée en place et bloque le démarrage de MQTT. Pour voir la liste des configurations, en ssh :

sudo ls -al /var/www/html/plugins/zigbee2mqtt/data/mosquitto/include

Ici on peut constater qu’une configuration jMQTT.conf existe. Vérifiez aussi cela pour tous les .conf. Pour la supprimer :

sudo rm -f /var/www/html/plugins/zigbee2mqtt/data/mosquitto/include/jMQTT.conf

Le résultat sera vide : C’est normal. Relancez le démon du plugin zigbeeLinker après cette manipulation.

Debugger le démarrage du service

En ssh, tapez

sudo /usr/sbin/mosquitto -c /var/www/html/plugins/zigbee2mqtt/data/mosquitto/mosquitto.conf

Généralement, un message d’erreur vous permettra de connaître la raison du non démarrage du service.

Debugger MQTT s’il démarre

Dans le bouton configuration du plugin, vous pouvez faire remonter le log Mosquitto dans Jeedom. Pour cela il suffit d’ajuster l’option « Log MQTT » :

Un log va alors se créer en haut (pensez à rafraichir) :

Impossible de démarrer le service Client MQTT (Le client MQTT ne démarre pas)

Pour une installation complète sur la même machine, essayez en mettant localhost dans votre client MQTT dans le champ « IP du serveur ».

Pour d’autres installations où le serveur MQTT n’est pas installé en local, mettez l’adresse IP dans ce champ, et ouvrez le port 1883 (Port par défaut pour MQTT).

Lenteur ou impossibilité de piloter une prise/ampoule/autres

Débrancher / Rebrancher l’adaptateur (USB)

L’adaptateur peut avoir besoin d’un reset (reboot). Débranchez le, attendez bien 1mn, et rebranchez le.
Attendez 10mn ou redémarrez le démon du plugin (dans Configuration).

Généralement quand ce symptôme est présent, le plugin reçoit des données mais a du mal à envoyer des données (on reçoit les températures des capteurs, mais on arrive pas à piloter une prise, ou difficilement).

Impossible de lancer l’inclusion,

Débrancher / Rebrancher l’adaptateur (USB)

L’adaptateur peut avoir besoin d’un reset (reboot). Débranchez le, attendez bien 1mn, et rebranchez le.
Attendez 10mn ou redémarrez le démon du plugin (dans Configuration).

Lenteurs au démarrage

Symptômes : Au démarrage du démon, l’interface Zigbee2MQTT n’est pas disponible, et il faut attendre avant de pouvoir y accéder.

Aussi, certains équipements peuvent mettre du temps à être utilisables.

Vérifiez que l’option Report est à false dans /var/www/html/plugins/zigbee2mqtt/data/zigbee2mqtt/configuration.yaml :

advanced:
  report: false

Cette option n’est plus utilisée, et surtout dès le démarrage du réseau, elle risque de le saturer en essayant de paramétrer le reporting sur les modules.

Erreur dépendance NOK :  PHP yaml manquant

Généralement c’est par ce que vous avez plusieurs version de PHP sur votre machine. Dans un premier temps il faut vérifier que le système (cli) utilise la même version que apache.

Pour connaître la version « php cli » lancez en ssh :

Pour connaître la version apache, allez dans la configuration du plugin ZibgeeLinker :

Si les versions ne sont pas les mêmes, ou < à 7.3, il est préférable d’aligner cli et apache sur la même version.
Pour aligner la version cli sur la version 7.3.xxx en ssh il faut faire :

sudo update-alternatives --set php /usr/bin/php7.3

Pour activer la version 7.3.xxx dans apache, il faut au préalable désactiver l’ancienne version, puis activer la nouvelle :

sudo a2dismod php7.0
sudo a2enmod php7.3
systemctl restart apache2

Quelques points utiles : Pour lister les versions php installées sur un linux, en ssh faite : sudo locate php.ini

php.ini est le fichier de configuration php. S’il est présent, c’est que généralement le php est installé en la version est noté dans le dossier.
(si locate n’est pas installé, faites : sudo apt-get install locate, puis sudo updatedb pour mettre à jour la base de donnée de locate)

Zigbee2MQTT ne veut plus passer en Permit Join et impossible de charger la liste des équipements dans l’interface Zigbee2MQTT (:8080)

Vérifiez le fichier de configuration

Le fichier de configuration de Zigbee2MQTT peut-être bugué.
Par défaut le fichier se trouve dans cet emplacement :

/var/www/html/plugins/zigbee2mqtt/data/zigbee2mqtt/configuration.yaml

Voici un exemple de contenu :

homeassistant: false
permit_join: false
mqtt:
  base_topic: z2mMaison
  server: 'mqtt://192.168.1.100:1883'
  user: jeedom
  password: jeedom
  include_device_information: true
  keepalive: 60
  reject_unauthorized: true
  version: 4
serial:
  adapter: deconz
frontend:
  port: 8080
  host: 192.168.1.100
devices:
  '0x00158d0003d2c1da':
    friendly_name: Interrupteur
  '0xec1bbdfffeb9bb18':
    friendly_name: Prise
groups:
  '1':
    friendly_name: Mon groupe
    devices:
      - 0xec1bbdfffeb9bb18/1

Vérifiez qu’il n’y ait rien de plus en haut et en bas du fichier (des  »’ ou — par exemple). Supprimez ces lignes inutiles.

Il m’est arrivé de voir une ligne groups: [ ] (ou équivalente).
Si votre système ne contient pas de groupes, supprimez ces lignes. (cela bloque tout)

Interface loading please wait…

Ce message apparaît dans l’interface Zigbee2MQTT (:8080) et est suivi d’un message d’erreur.
Vérifiez tout d’abord votre fichier de configuration comme expliqué juste au dessus.

Désactivez Adblock ou tout bloqueur de popup.

NodeJS (réinstallation)

#Désinstaller NodeJs
sudo apt-get -y --purge autoremove npm
sudo apt-get -y --purge autoremove node*
sudo rm -f /etc/apt/sources.list.d/nodesource.list

#Installer NodeJs 14
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

#Vérifier la version installée
node -v

Ensuite relancez les dépendances de tous les plugins utilisant NodeJS.

Veuillez exécuter le script : /bin/bash /var/www/html/plugins/zigbee2mqtt/core/class/…

Votre Jeedom n’a pas les droits pour exécuter les scripts. En ssh exécutez les commandes :

sudo su - root
echo "www-data ALL=(ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)
echo "jeedom ALL=(ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)

Puis relancez les dépendances.

Mon équipement ne veut pas s’inclure, ou il est mal inclus (interview incomplet)

Débranchez / rebranchez le contrôleur (la clé usb)

Débranchez la clé USB, attendez 1mn et rebranchez la clé USB. Puis patientez quelques minutes que Zigbee2MQTT se reconnecte à la clé. Vous pouvez alors relancer un Permit Join.

Branchez en port USB2

Préférez le port USB2 surtout sur un Rapsberry.

Eloignez le contrôleur (la clé usb)

N’hésitez pas à éloigner la clé USB de 1 mètre minimum de votre box Jeedom.

Rapprocher l’équipement du contrôleur

Sans supprimer l’équipement, refaites une procédure d’inclusion, mais en rapprochant l’équipement à inclure à 1 à 2 mètres de votre contrôleur USB (de votre Box Jeedom généralement)

Les piles

Vérifiez que les piles de l’équipement sont à 100% !

J’ai inclu un équipement, il a fonctionné, mais maintenant il ne renvoie plus de données (perte de communication avec l’équipement).

Les piles !

Changez les piles avant tout (ou vérifiez la charge).

Pas assez de routeurs

Un point important : Utilisez des routeurs (prises / ampoules / etc…) Un routeur n’est valable que s’il est tout le temps sous tension (attention aux ampoules qui sont mises hors tension).
Couvrez votre réseau avec des routeurs (Voir explication plus bas)

Conflit fréquence canal 11

Apparemment, le canal 11 correspond à un canal du réseau Wifi et il est conseillé de le changer si vous constatez des pertes de communication avec certains de vos équipements.

Si vous le pouvez passez en canal 25, et étant donné qu’il faudra réinclure vos équipements, profitez en pour changer le pan_id et le network_key (sauvegardez votre fichier de configuration avant toutes modifications). Pour ce faire, dans la configuration du plugin, tout en bas, cliquez sur le bouton « Configuration Zigbee2MQTT » et mettez ces valeurs :

advanced:
   channel: 25
   network_key: GENERATE
   pan_id: GENERATE

Remarque : Avec les clés type CCXXXX, le démarrage Zigbee2MQTT risque de bloquer (la configuration channel network_key et pan_id sont sauvegardées à la première utilisation).

Relancez une inclusion

Directement dans l’interface Zigbee2MQTT, cliquez en haut à droite sur Permit Join (il n’est pas nécessaire de supprimer votre équipement avant cela). Et relancez la procédure d’inclusion de votre équipement.

Le réseau Zigbee

Les routeurs, indispensables !

Un routeur, c’est tout simplement un élément directement connecté à votre réseau électrique. Cela peut-être une ampoule, une prise, interrupteur sur secteur, une sirène ou tout simplement un répéteur.

Ma version pour avoir un réseau stable (et chacun aura la sienne) :
Si votre réseau dépasse les 10 équipements, il vous faut des routeurs !
1 équipement à pile doit-être à moins de 10 mètres sans mur d’un routeur.
Si vous avez des murs, divisé la distance par le nombre de murs (bon sans parler des murs de 50cm… on oublie)
Dans ces règles, 1 équipement à pile doit pouvoir accéder à 2 routeurs minimums.

Pensez aussi à une chose : Une ampoule est un bon routeur si elle est tout le temps alimentée (une ampoule derrière un interrupteur qui coupe l’électricité n’est pas un bon routeur).

L’inclusion

Commencez par inclure vos équipements sur secteur.
Puis lancez l’inclusion de vos équipements à pile.

La force de Zigbee2MQTT est que vous pouvez inclure vos équipements à pile directement sur un routeur (option disponible en haut à droite de l’interface de Zigbee2MQTT)

Pour inclure un équipement, placez vous entre 1 et 2 mètres de point d’inclusion (prise/ampoule/adaptateur USB).
Cliquez sur Permit Join dans Zigbee2MQTT ou sur Activer l’inclusion dans le plugin ZigbeeLinker.
Lancez la procédure d’inclusion sur l’équipement et lorsque celui-ci signale que l’inclusion est faite, cliquez toutes les 5 secondes sur le bouton d’inclusion pour réveiller l’équipement (5 ou 6 fois). Ceci permet d’avoir une interview complète.
Ne soyez pas pressé. Laissez le module posé à moins de 2 mètres du point d’inclusion pendant 5mn.

La map

Une option Map -> Load Map existe dans Zigbee2MQTT, mais elle est assez perturbante car souvent aucun lien n’existe ou alors très peu.

Ne vous en occupez pas. Laissez le système travailler doucement : Si ça fonctionne, ne touchez à rien !