MQTT2 commande info issue d'un couple clé valeur dans un json ne se met pas à jour alors que ok avec jmqtt

Bonjour. Je bascule depuis quelques temps mes Jeelink en MQTT ainsi que divers modules pouvant fonctionner directement en MQTT comme mes shelly plug S et récemment mon ampouler shelly bulb. Je rencontre un problème de mise à jour de la valeur d’une commande info sur mon shelly bulb que je ne comprends pas et ne parviens pas à résoudre. Cette commande info s’appuie sur un couple clé valeur dans le json publié par mon ampoule. C’est vrai pour l’info brightness mais en fait toutes les autres comme la température de blanc.

Au départ quand je créé l’équipement, la commande info est valorisée avec la valeur en cours. Si je change cette valeur en manipulant l’ampoule, la commande n’est pas mise à niveau. MQTT Manager trouve donc bien la valeur au départ avec le topic et chemin dans le topicet même au sein du json publié dans « status » de mon ampoule mais ensuite rien ne se passe. En parallèle via mqtt explorer, je vérifie bien que les valeurs soient publiées à chaque manip. J’ai d’abord pensé à un bete souci de syntaxe dans ma commande (je n’ai rien trouvé et la doc indique bien qu’on peut récupérer une valeur dans un json en mettant juste le chemin du json derrière le topic, puis à un défaut au sein du json côté Shelly sans trouver. En dernier recours disposant du plugin jmqtt sur un autre de mes jeedom j’ai créé un équipement similaire sur le shelly bulb qui lui reçoit bien l’evenement de maj du json status et parvient à correctement ventiler les valeurs dans des commandes infos.

Je ne sais pas s’il existe une limite sous mqtt2 dans la gestion de topic avec des json ou si je me trompe juste dans une syntaxe de topic pour ma commande.

Ci-dessous divers éléments :

  • capture de la définition de mon équipement MQTT2 (commandes infos concernées gain, brightness, temp vous verrez diverses syntaxe que j’ai testé mais ma compréhension est que celle avec juste /brightness ou /temp à la fin du topic doit marcher : color/0/status renvoie un json contenant entre autres ces mesures) :

  • capture meme équipement côté Jmqtt :

  • côté broker mqtt : je n’ai pas pris de capture, le json publié sous shellies/monAmpoule/color/0/status est visible dans la capture du JMQTT dans la zone status. Côté mqtt2 je n’ai toujours pas trouvé comment faire apparaitre un équivalent pour des topics donnant du json ou des tableaux

Je précise au cas où que mes équipements mqtt2 et jmqtt2 écoutent les memes topics sur le meme broker distant sur mon NAS.

Par avance merci pour votre aide.

(ps : je ne souhaite pas contourner en utilisant jmqtt, même si ce plugin est très bien conçu, mon idée étant d’utiliser un seul plugin pour tous mes équipements et comme mqtt2 est obligatoirement présent pour ZWaveJS et que jusque la tout fonctionne sur les nombreux autres équipements que j’ai basculé en mqtt je souhaite rester sur ce plugin)

complément au cas où avec le log debug de jmqtt montrant les messages MQTT et en particulier le json reçu de status ampoule :

[2026-01-06 00:26:57,328][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0", payload="on", QoS=1, retain=False)
[2026-01-06 00:26:57,329][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.013351ms (qToJ size 1): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}
[2026-01-06 00:26:57,332][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0/status", payload="{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}", QoS=1, retain=False)
[2026-01-06 00:26:57,332][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.011683ms (qToJ size 2): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}
[2026-01-06 00:26:57,409][DEBUG] JMsg.Snd        SockOut           _loopSnd() : Sending 2 messages (0 left in queue)
[2026-01-06 00:26:57,527][DEBUG] JMsg.Snd        SockOut               send() : Sent TO Jeedom 2 messages handled in 116.372824ms (qToJ size 0): [{'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}, {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}]
[2026-01-06 00:27:02,574][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0", payload="on", QoS=1, retain=False)
[2026-01-06 00:27:02,575][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.013113ms (qToJ size 1): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}
[2026-01-06 00:27:02,578][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0/status", payload="{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}", QoS=1, retain=False)
[2026-01-06 00:27:02,579][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.014782ms (qToJ size 2): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}
[2026-01-06 00:27:02,586][DEBUG] JMsg.Snd        SockOut           _loopSnd() : Sending 2 messages (0 left in queue)
[2026-01-06 00:27:02,702][DEBUG] JMsg.Snd        SockOut               send() : Sent TO Jeedom 2 messages handled in 115.805149ms (qToJ size 0): [{'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}, {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}]
[2026-01-06 00:27:03,163][DEBUG] Main            MainThread             run() : Heartbeat received from Jeedom
[2026-01-06 00:27:32,578][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0", payload="on", QoS=1, retain=False)
[2026-01-06 00:27:32,579][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.014782ms (qToJ size 1): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}
[2026-01-06 00:27:32,581][INFO] Client138       Brk138Th        on_message() : Message received (topic="shellies/shellybulb-A5A051/color/0/status", payload="{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}", QoS=1, retain=False)
[2026-01-06 00:27:32,582][DEBUG] JMsg.Snd        Brk138Th        send_async() : Enqued the message in 0.010252ms (qToJ size 2): {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}
[2026-01-06 00:27:32,610][DEBUG] JMsg.Snd        SockOut           _loopSnd() : Sending 2 messages (0 left in queue)
[2026-01-06 00:27:32,698][DEBUG] JMsg.Snd        SockOut               send() : Sent TO Jeedom 2 messages handled in 87.288618ms (qToJ size 0): [{'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0', 'payload': 'on', 'qos': 1, 'retain': False}, {'cmd': 'messageIn', 'id': '138', 'topic': 'shellies/shellybulb-A5A051/color/0/status', 'payload': '{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","red":112,"green":254,"blue":79,"white":0,"gain":100,"temp":3000,"brightness":50,"effect":0}', 'qos': 1, 'retain': False}]
[2026-01-06 00:27:49,369][DEBUG] Main            MainThread             run() : Heartbeat received from Jeedom
[2026-01-06 00:27:51,675][INFO] Main            MainThread   set_log_level() : New log level set to: ERROR

Avec quelle version de jeedom de l’os et du plugin?

Ah oui mince j’ai oublié de préciser cela. Globalement je suis à jour de jeedom et des plugins, OS en debian 11 sur rpi3b+. Ci-dessous la capture de santé et du plugin :


Pour le jeedom sur lequel j’ai fait le test jmqtt ce sont les mêmes caractéristiques : rpi3b+ et memes versions de jeedom

et pour la doc indiquant qu’on peut récupérer des infos dans un json c’est la https://doc.jeedom.com/fr_FR/plugins/programming/mqtt2/#Configuration%20des%20équipements

Le système est capable de gérer les champs de type json, dans ce cas il faut mettre toto/1/key1 ou toto/1/key1/key2 pour descendre d’un niveau.

ce qui correspond bien à mon cas de color/0/status et dans le json status prendre temp ou gain ou brightness en mettant color/0/status/temp