Conseils configuration Zigbee pour une lampe ponctuellement alimentée

Hello,
J’ai une lampe Hue zigbee que j’ai choisi de ne pas alimenter en permanence (donc on continue à utiliser l’interrupteur mural qui est spécialement bien placé. Et pas besoin de routeur zigbee à cet endroit).
Mais je commande son intensité/couleur avec un Aqara Magic Cube Zigbee via un scénario. Très pratique/divertissant pour passer d’une ambiance à l’autre (repas bien éclairé, petit-déjeuner, milieu de la nuit ou couleur pour les enfants…).

Je suis passé il y a quelques temps du plugin Zigbee au plugin JeeZigbee. Et évidemment quand la lampe est éteinte et que quelqu’un touche le cube, il y a des messages d’erreur dans les logs du plugin (il me semble que sur l’ancien plugin, j’avais trouvé un truc pour qu’il n’y ait pas d’erreur dans ce cas. Je ne me rappelle plus…).

En dehors de « ne pas éteindre la lampe », quels seraient vos conseils pour une telle configuration?
J’avais imaginé :

  • Trouver une option pour ne pas logger les erreurs de communication sur cet équipement particulier dans Jeezigbee ou z2m mais je n’ai rien trouvé
  • Trouver une astuce dans le scénario pour ne pas envoyer de commande si l’équipement n’est pas allumé (mais comment le savoir ??? Ce n’est pas évident surtout quand on veut ajuster l’intensité dans la seconde qui suit l’allumage). J’ai vu qu’il y avait dans z2m une option « décriée » de suivi de la disponibilité des équipements mais ca ne semble pas si réactif que ca et impossible à utiliser sur 1 seul équipement.

Merci pour vos avis et conseils !

Peut-être dans votre scénario en utilisant la fonction lastCommunication() sur la lampe pour tester si elle est active et ne rine faire dans le cas contraire.

Sinon vous pouvez aussi desactiver l’objet jeedom (evidemment le mieux serait de trouver un declencheur) et tester cet état

Si votre interrupteur mural était lui même un module zigbee, evidemment vous auriez son état, mais je suppose que vous ne souhaitez pas avoir un module alimenté en permanence…

Hello,

Elles apparaissent comment en fait ces erreurs ? Dans le centre de message de jeedom ?

Tu as effectivement la date de dernière communication de l’équipement.

Après ce n’est pas du temps réel pour ne pas surcharger inutilement le réseau ça ne servirait à rien à une lampe d’envoyer toutes les 2 secondes un message pour dire qu’elle sont toujours en vie quand on leur demande rien.

Mais je pense que tu peux tester de définit un seuil, par exemple si la dernière communication de la lampe date d’il y a plus de 10 minutes alors je n’essaye pas d’agir dessus.

Pour tes tests, tu pourrais commencer par historiser le champ dernière communication pour voir avec un peu de recul tous les combien de temps la lampe communique en temps normal.

J’imagine que si le courant été coupé et qu’on la rallume elle va communiquer immédiatement mais à vérifier.

Après pour le scénario tu peux conditionner assez facilement par exemple avec un

SI age(#[Séjour][Lampe Bureau][Dernière communication]#) < 900

Qui ne sera valide que si l’age de la commande Dernière communication est de moins de 900 secondes.

Le mieux serait de remplacer l’ampoule connectée par une ampoule traditionnelle et de mettre un interrupteur connecté ou un module.

Antoine

Hello à tous

@Aurel :

Elles apparaissent comment en fait ces erreurs ?

Dans le log z2md du plugin jeezigbee. Le truc qui m’embête, c’est qu’il y a parfois d’autres erreurs que je ne voudrais pas manquer…

Oui la dernière date de communication est dispo et semble s’actualiser directement à l’allumage. Mais ca ne se rafraichit pas si souvent ensuite… (là par exemple, la lampe m’indique une valeur d’il y a 30min). Il y a un risque que la lampe ne réponde plus au cube si le délai est dépassé… Après si c’est la seule solution, je pourrais creuser pour affiner une valeur de délai depuis dernière com’ et aussi trouver des combinaisons sur le cube pour forcer la communication quand le délai est passé. Mais je préfère voir avant si quelqu’un a d’autres idées !

@Tonio16 : Ce n’est pas une ampoule mais un luminaire ensis avec 2 éclairages zigbee intégrés, non remplaçables. En même temps, vu que je veux régler l’intensité et la couleur avec le scénario, une ampoule traditionnelle ne marcherait pas.

@hlehoux : Oui, l’ajout d’un interrupteur/module zigbee marcherait pour savoir quand le luminaire est on/off en fait. Mais bon je voudrais éviter ca effectivement.

Le top du top serait de trouver une option qui va bien dans JeeZigbee ou zigbee2mqtt permettant de ne pas logger les commandes actions en échec pour cet équipement uniquement. Je n’ai pas trouvé mais il y a peut-être une option indirecte ou bien cachée ?

Ou une idée que je viens d’avoir : une option qui efface la ligne du log z2md (mais juste la ligne qui concerne l’équipement). Possible de faire ca avec un scénario ??? (bon ca corrige pas le problème à la source mais ca pourrait marcher).
Au cas où ca serait possible, voici le log en plain text :
(en réalité comme il y a 2 éclairages dans le ensis, il y a 2 équipements zigbee id « 0x001788010d21ed63 » et id « 0x001788010d21edc0 »)

> zigbee2mqtt@2.6.3 start
> node index.js
> Starting Zigbee2MQTT without watchdog.
> (node:12788) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
> (Use `node --trace-warnings ...` to show where the warning was created)
> [2026-01-12 13:10:17] e[31merrore[39m: 	zh:ember:uart:ash: Received frame with CRC error
> [2026-01-12 13:46:46] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 13:46:46] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-12 13:46:51] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 13:46:51] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-12 14:39:26] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 14:39:26] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-12 14:39:31] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 14:39:31] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-12 14:39:36] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 14:39:36] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-12 14:39:41] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-12 14:39:41] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-13 06:33:21] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-13 06:33:21] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-13 07:28:35] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-13 07:28:36] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-14 06:45:22] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-14 06:45:23] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-14 12:27:11] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:27:11] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:27:16] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:27:16] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:39:50] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:39:50] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:39:54] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:39:54] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:39:59] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:39:59] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:40:04] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:40:04] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:53:30] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:53:31] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-14 12:53:35] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-14 12:53:35] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-15 06:32:04] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-15 06:32:05] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-15 17:30:47] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-15 17:30:47] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-16 06:32:02] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-16 06:32:02] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-16 07:18:52] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21ed63' after reconnect (ZCL command 0x001788010d21ed63/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.))
> [2026-01-16 07:18:53] e[31merrore[39m: 	z2m: Failed to read state of '0x001788010d21edc0' after reconnect (ZCL command 0x001788010d21edc0/11 lightingColorCtrl.read(["colorMode","currentX","currentY","enhancedCurrentHue","currentSaturation","colorTemperature"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.))
> [2026-01-17 12:37:17] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-17 12:37:17] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-17 12:37:22] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-17 12:37:22] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-17 13:03:07] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-17 13:03:07] e[31merrore[39m: 	z2m: Publish 'set' 'color_temp' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 lightingColorCtrl.moveToColorTemp({"colortemp":320,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> [2026-01-17 13:03:11] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":64,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> [2026-01-17 13:03:11] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21ed63' failed: 'Error: ZCL command 0x001788010d21ed63/11 genLevelCtrl.moveToLevelWithOnOff({"level":32,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '50287'.)'
> zigbee2mqtt@2.6.3 start
> node index.js
> Starting Zigbee2MQTT without watchdog.
> [2026-01-17 17:50:56] e[31merrore[39m: 	z2m: Publish 'set' 'brightness' to '0x001788010d21edc0' failed: 'Error: ZCL command 0x001788010d21edc0/11 genLevelCtrl.moveToLevelWithOnOff({"level":8,"transtime":10}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Delivery failed for '59915'.)'
> zigbee2mqtt@2.7.2 start
> node index.js
> Starting Zigbee2MQTT without watchdog.
> [2026-01-17 17:55:27] e[31merrore[39m: 	zh:ember:uart:ash: Received frame with CRC error
> [2026-01-17 17:55:27] e[31merrore[39m: 	zh:ember:uart:ash: Received frame with CRC error
> [2026-01-17 17:55:27] e[31merrore[39m: 	zh:ember:uart:ash: Received ERROR from adapter while connecting, with code=ERROR_EXCEEDED_MAXIMUM_ACK_TIMEOUT_COUNT.
> zigbee2mqtt@2.7.2 start
> node index.js
> Starting Zigbee2MQTT without watchdog.
> [2026-01-17 18:00:03] e[31merrore[39m: 	zh:ember:uart:ash: Received frame with CRC error
> [2026-01-17 18:00:04] e[31merrore[39m: 	zh:ember:uart:ash: Received ERROR from adapter while connecting, with code=ERROR_EXCEEDED_MAXIMUM_ACK_TIMEOUT_COUNT.

(vous pouvez voir que je suis passé hier soir de zigbee2mqtt 2.6.3 à 2.7.2 et que j’ai des erreurs au redémarrage depuis. Typiquement les erreurs que je ne voudrais pas manquer…)

Merci à tous pour votre aide et vos idées !

Bon si ca intéresse quelqu’un :
J’ai ajouté à la fin de mon scénario qui envoie des commandes à mon éclairage un clean du log z2md pour les erreurs qui seraient liées à ma lampe déconnectée.
Je fais encore des tests mais ca a l’air de rouler.

$log_cleaning=1;

if ($log_cleaning==1) {
  // On attend 10 secondes que le message d'erreur arrive dans le log
  sleep(10);

  $logPath = '/var/www/html/log/z2md';
  $devices = ['0x001788010d21ed63', '0x001788010d21edc0']; // mettez vos id de devices ici

  if (file_exists($logPath)) {
      // Compter le nombre de lignes initial (via la commande système wc -l). Permettra de compter le nombre de lignes effacées à la fin
      $countBefore = (int)shell_exec("wc -l < " . $logPath);

      foreach ($devices as $id) {
          // Cette commande supprime les lignes contenant à la fois 'z2m:', l'ID de l'équipement et 'failed'
          $cmd = "sudo sed -i '/z2m:.*" . $id . ".*failed/d' " . $logPath;
          shell_exec($cmd);
      }

      // Compter après nettoyage
      $countAfter = (int)shell_exec("wc -l < " . $logPath);
      $scenario->setLog("Nettoyage log terminé : " . ($countBefore - $countAfter) . " ligne(s) supprimée(s).");
  } else {
      $scenario->setLog("Fichier log introuvable à l'adresse : " . $logPath);
  }
}

Si quelqu’un trouve une option ou un paramétrage plus « standard » dans le futur, je suis preneur !

A bientôt

1 « J'aime »

Si ca intéresse, j’ai optimisé la solution en faisant finalement 2 scénarios :

  • 1 qui s’occupe de commander les lampes (mon scénario d’origine) et qui met une variable « time_to_clean_log » à 10 à la fin.
  • 1 nouveau scénario qui s’occupe de cleaner les logs (et qui est déclenché par la variable time_to_clean_log>0).
    Ce scénario décrémente la variable de 1 chaque seconde puis clean les logs.

2 avantages :

  • Le principal : on peut faire varier la lampe plusieurs fois en très peu de temps sans attendre que le timer et le clean des logs soit fait. (et sans être obligé d’activer le multi-lancement)
  • Le clean des logs s’enclenche alors mais si le 1er scénario est exécuté encore une fois pendant le décompte, celui-ci remonte à 10 pour laisser les éventuelles erreurs du 2eme lancement arriver et ainsi faire le clean 1 seule fois au bon moment.

Je pense que cette logique est exploitable bien au delà du cas du plugin JeeZigbee, tout du moins quand on n’arrive pas à régler le problème et paramétrer les logs exactement comme on veut pour des cas connus à ignorer.

Salut,

Je suis pas vraiment fan de cette façon de faire mais bon …Chacun fait comme il le veut.
Le principe d’un log c’est de remonter une erreur, après si l’erreur est « normale » c’est autre chose.

Perso je serais plus parti sur ne pas toucher le log d’origine mais de faire une copie du log en enlevant ce que tu ne veux pas considérer comme une erreur dans un second fichier. Mais ne pas toucher à un log écrit par le daemon avec les conflits que ça peut potentiellement générer.

Après chacun sa méthode :slight_smile:

2 « J'aime »

Oui je comprends, c’est clairement pas mon objectif initial… L’idéal serait d’avoir une option dans zigbee2mqtt ou sinon dans jeezigbee en surcouche.
Je partage tout à fait ta crainte d’avoir un conflit d’écriture sur le log.
Cela dit, le log z2md n’est il pas déjà lui-même l’autre log ? (si on considère que les logs originaux sont ceux de Zigbee2MQTT qui se trouvent par défaut dans /var/www/html/plugins/z2m/data/log/). Enfin, il y a peut-être des messages additionnels propres au démon jeezigbee qui pourraient s’ajouter ?

Bref, faut pas tourner autour du pot, ton idée est plus secure. Je vais étudier cette solution quand j’aurais à nouveau du temps !

Je me pose déjà des questions… Qu’advient-il si le fichier log devient énorme à cause des lignes non cleanées ? Ou (je découvre) c’est l’option jeedom config/paramètres qui limite par défaut à 500 lignes tous les logs et il n’y aura jamais de soucis (mais ca c’est bien et pas bien car je ne vais pas avoir bcp de lignes à analyser après clean si 90% des lignes sont des erreurs « cleanables » ou 100% si mes gamins jouent avec le cube avec la lampe éteinte :slight_smile: )
Je me demande si ce n’est pas mieux pour le coup de se baser directement sur les logs de zigbee2mqtt du coup.
Mais bon ca commence à faire une usine à gaz pour qq messages à enlever. Si ca se trouve dans quelques temps, on aura une option dans le plugin ou zigbee2mqtt pour indiquer un équipement « peut être offline, ignorer erreur » ou un truc automatique. On peut rêver !

Bonjour,

la consommation d’une ampoule connectée zigbee lorsqu’elle est en veille se situe entre 0,2 w et 0,5 w.
1 kWh ≈ 0,20 €
0,5 W × 24 h × 365 ≈ 4,38 kWh
4,38 x 0,20 ≈ 0,88 € / an

Les économies sont peut-être ailleurs.

akenad :slight_smile:

3 « J'aime »

D’après ce que j’ai compris c’est pour conserver l’interrupteur mural, pas pour économiser du courant.

1 « J'aime »

Bonjour,

Pour faire cela il faut utiliser du wifi qui est fait pour avoir des appareils qui se connectent et se déconnectent. Le Zigbee n’est juste pas compatible avec cette utilisation même si dans votre cas ça fonctionne à peu près car il n’y a rien qui va chercher à se connecter à votre ampoule lorsqu’elle est allumée.

1 « J'aime »

Franchement pour en revenir à la base, perso ce que j’ai fait pour pouvoir garder l’ampoule alimentée en permanence ET avoir un interrupteur si jamais.

Au final oui c’est un peu con d’avoir un interrupteur à pile dans une boite d’interrupteur mais franchement en terme d’utilisation c’est vraiment ce qu’il y a de plus transparent !

3 « J'aime »

Sinon vous avez les recettes de ce thread : [TUTO] Des commandes Zigbee bas coût et discrètes - #228 par Yves19
qui marchent très bien
moi je l’ai fais avec du sonoff derrière un interrupteur legrand celiane (bon dans mon cas c’était pour éviter de tirer du cablage car mes gaines electrique sont anciennes et de petit diamètre)

2 « J'aime »

Ou là il y a bcp de réactions !
Merci à tous !

@Aurel : Alors ouais j’ai vraiment un soucis sur l’interrupteur mural qui est un bloc atypique multi-interrupteurs/prise… alors ca va être un peu plus compliqué de le changer. Et en même temps il est top pratique.
Bref, je ne voulais effectivement pas spécialement investir dans du matériel ni commencer à démonter quelquechose, mais plutôt voir s’il y avait une configuration possible.

A noter que j’ai remarqué que mon scénario de clean empêchait, comme anticipé par @Aurel , l’écriture de log par le demon jusqu’à un redémarrage du démon (pas seulement au moment du clean du fichier log mais pour le reste de la journée, petite faiblesse de Jeezigbee mais qui n’est clairement pas dans le cahier des charges. Je me demande si d’autres actions comme des sauvegardes pourraient avoir le même effet). Je l’ai constaté en regardant plus en détail les log de zigbee2mqtt versus z2md. Dommage :sob:
Mais ca m’a fait un bon exercice de scénario avec bloc de code. Je vais plutôt le lancer à la main une fois de temps en temps quand je serai prêt à lire les logs et avec redémarrage du demon dans la foulée.

Pour ceux qui cherchent une solution aux erreurs d’équipements éteints comme moi mais qui ont un interrupteur zigbee sur pile au lieu d’un cube Aqara, il faudrait essayer de faire un binding group entre l’interrupteur et la lampe. Je n’ai jamais utilisé cette fonctionnalité mais d’après ce que j’ai lu, dans ce cas précis, le contrôleur ne fait pas de vérification de la bonne réception et il ne devrait pas y avoir d’erreur si la lampe n’est pas alimentée. ReDommage, moi je cherchai une solution avec mon cube (j’ai la 1ere version qui ne peut pas faire du binding. Apparemment, c’est peut-être partiellement réalisable avec le dernier cube sorti).

Note :
@hlehoux : Merci pour le lien, je n’ai pas encore tout lu mais ca m’a fait découvrir au passage que je peux convertir en zigbee mes capteurs de température bluetooth lyws… . Ca c’est vraiment un truc incroyable (bon OK, ca n’a rien à voir mais quand même) ! Merci.

Pour info : Non ce n’était probablement pas mon scénario de clean qui faisait que le log z2md ne se remplissait plus…
Je fais quelques tests pour mieux comprendre la situation et je vais créer un post dédié.