Bug v4.17.0 Zigbee2MQTT?

Bon, j’ai des bonnes nouvelles, après 2 heures d’expérimentations je viens de réussir à reproduire le souci !! :smiley:

Je suis parti d’une installation vierge sur un Raspberry Pi 3 avec un dongle Sonoff Zigbee et un capteur de température Xiaomi Aqara.

Je pense que ce setup importe peu, mais je voulais partir d’une base totalement vierge.

1. Simulation d’un container MQTT arrêté (en cours de mise à jour peut-être ?)

docker stop gladys-z2m-mqtt

2. Redémarrage de Gladys (par exemple, lors d’une mise à jour)

docker restart gladys

Au redémarrage, le service Zigbee2mqtt relance le container MQTT arrêté :

2023-04-03T06:39:52+0200 <debug> init.js:64 (Zigbee2mqttManager.init) Zibgee2mqtt: installing and starting required docker containers...
2023-04-03T06:39:52+0200 <info> checkForContainerUpdates.js:14 (Zigbee2mqttManager.checkForContainerUpdates) Checking for current installed versions and required updates...
2023-04-03T06:39:53+0200 <info> installMqttContainer.js:98 (Zigbee2mqttManager.installMqttContainer) MQTT broker is starting...
2023-04-03T06:39:58+0200 <info> installMqttContainer.js:104 (Zigbee2mqttManager.installMqttContainer) MQTT broker container successfully started
2023-04-03T06:39:58+0200 <info> installZ2mContainer.js:59 (Zigbee2mqttManager.installZ2mContainer) Preparing Zigbee2mqtt environment...
2023-04-03T06:39:58+0200 <trace> installZ2mContainer.js:63 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt : configuration file already exists.
2023-04-03T06:39:58+0200 <info> installZ2mContainer.js:78 (Zigbee2mqttManager.installZ2mContainer) Zigbee2mqtt container successfully started

Puis tente de se connecter au broker:

2023-04-03T06:39:58+0200 <info> connect.js:14 (Zigbee2mqttManager.connect) Connecting Gladys to mqtt://localhost:1884 MQTT broker...
2023-04-03T06:39:59+0200 <debug> saveConfiguration.js:20 (Zigbee2mqttManager.saveConfiguration) Zigbee2mqtt: storing configuration...
2023-04-03T06:39:59+0200 <info> connect.js:24 (MqttClient.<anonymous>) Connected to MQTT container mqtt://localhost:1884
2023-04-03T06:39:59+0200 <info> subscribe.js:12 (Zigbee2mqttManager.subscribe) Subscribing to MQTT topic zigbee2mqtt/#

Jusque là tout semble bon !

Sauf qu’à partir de là, impossible de recevoir quoi que ce soit, tout échoue avec la même erreur que tout le monde a:

2023-04-03T06:40:17+0200 <debug> findMatchingExpose.js:32 (Zigbee2mqttManager.findMatchingExpose) Device "0x00158d0001a4c7c7" not found
2023-04-03T06:40:17+0200 <error> handleMqttMessage.js:103 () Failed to convert value for device 0x00158d0001a4c7c7: Error: Zigbee2mqqt expose not found on device "0x00158d0001a4c7c7" with property "battery".
at Zigbee2mqttManager.readValue (/src/server/services/zigbee2mqtt/lib/readValue.js:16:11)
at /src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:99:31
at Array.forEach (<anonymous>)
at Zigbee2mqttManager.handleMqttMessage (/src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:91:41)
at MqttClient.<anonymous> (/src/server/services/zigbee2mqtt/lib/connect.js:53:12)
at MqttClient.emit (node:events:513:28)
at MqttClient.\_handlePublish (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:1277:12)
at MqttClient.\_handlePacket (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:410:12)
at work (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:321:12)
at processTicksAndRejections (node:internal/process/task_queues:77:11)
2023-04-03T06:40:17+0200 <debug> findMatchingExpose.js:32 (Zigbee2mqttManager.findMatchingExpose) Device "0x00158d0001a4c7c7" not found

En investiguant un peu, je vois que ces fameux expose sont stockés dans une variable this.discoveredDevices dans le code.

Cette variable a l’air d’être remplie lors de la réception d’un message sur le topic zigbee2mqtt/bridge/devices

Ce qui devrait afficher un log Getting config devices from Zigbee2mqtt

Hors, dans mes logs, je n’ai pas ce log Getting config devices from Zigbee2mqtt, et ainsi je pense que ce fameux discoveredDevices n’est pas initialisé !

Du coup viens la question: a quelle condition le container Zigbee2mqtt envoie les informations sur les devices ?

La documentation mentionne:

Ce qui expliquerait donc pourquoi on n’obtient rien dans cette variable !

Mais du coup, j’ai du mal à comprendre comment ça peut fonctionner le reste du temps ?

Je viens de refaire un:

docker restart gladys

Et malgré ça, toujours impossible de faire marcher le service, j’obtiens toujours :

2023-04-03T07:02:30+0200 <debug> findMatchingExpose.js:32 (Zigbee2mqttManager.findMatchingExpose) Device "0x00158d0001a4c7c7" not found
2023-04-03T07:02:30+0200 <error> handleMqttMessage.js:103 () Failed to convert value for device 0x00158d0001a4c7c7: Error: Zigbee2mqqt expose not found on device "0x00158d0001a4c7c7" with property "voltage".
    at Zigbee2mqttManager.readValue (/src/server/services/zigbee2mqtt/lib/readValue.js:16:11)
    at /src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:99:31
    at Array.forEach (<anonymous>)
    at Zigbee2mqttManager.handleMqttMessage (/src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:91:41)
    at MqttClient.<anonymous> (/src/server/services/zigbee2mqtt/lib/connect.js:53:12)
    at MqttClient.emit (node:events:513:28)
    at MqttClient._handlePublish (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:1277:12)
    at MqttClient._handlePacket (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:410:12)
    at work (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:321:12)
    at processTicksAndRejections (node:internal/process/task_queues:77:11)

@AlexTrovato Est-ce que tu sais quand ce topic est appelé par Zigbee2mqtt, et quelle était l’hypothèse faite lors du développement pour que ça marche ? ^^