handleMQTTmessage et RETAIN: message initial LWT non recu

Salut

Je travaille sur un nouveau plugin qui s’abonne à un topic d’antenne en utilisant l’API du plugin-mqtt2 ex tgw:

mqtt2::addPluginTopic(__CLASS__, config::byKey('prefix', __CLASS__,''));

Quand l’antenne est online avant le deamon je constate que je ne recois jamais le message initial ex ici theengs/tgw_local/LWT=online dans handleMqttMessage pourtant je recois offline si l’antenne s’arrête.

Quand je renouvelle la même opération en ouvrant MQTT Explorer après le démarrage de l’antenne je recois bien le online direct cf ce screenshot:

Sur mon screenshot on constate que RETAIN est a true.

Je ne comprends pas comment ca peut marcher pour MQTT Explorer et pas pour mqtt2? :face_with_raised_eyebrow:

Je n’ai pas trouvé l’API pour indiquer cette option au plugin-mqtt2. Est ce un bug ou une feature?
Si quelqu’un pouvait m’éclairer…

Bonjour
Faudrait les logs du plugin pour comprendre mais pour m’en servir avec le plugin zigbee normalement pas de soucis au redémarrage du démon Mqtt je reçois bien tous les retains

Bonsoir Loic
Es tu dans les mêmes conditions? mon demon mqtt2 ne redémarre pas c’est juste un addPluginTopic.

Je ferai un recording demain si j’ai le temps

Je comprends pas le addplugintopic tu le fais une fois à l’installation du plugin normalement et c’est tout.

Bon j’ai trouvé:

log MQTT2:

[2024-07-30 19:35:23][DEBUG] : Message reçu sans prise en charge par un plugin : {"espresense":{"rooms":{"salon":{"status":"offline","max_distance":16,"absorption":3.5,"tx_ref_rssi":-59,"rx_adj_rssi":0,"arduino_ota":"OFF","auto_update":"OFF","prerelease":"OFF","switch":"OFF","button":"OFF","pir_timeout":0.5,"radar_timeout":0.5,"switch_1_timeout":0.5,"switch_2_timeout":0.5,"button_1_timeout":0.5,"button_2_timeout":0.5,"led_1":{"state":"OFF"}}},"settings":{"iBeacon:e5ca1ade-f007-ba11-0000-000000000000-44-18317":{"config":{"id":"node:salon","name":"Salon"}}}}}
[2024-07-30 19:35:23][DEBUG] : Message reçu sans prise en charge par un plugin : {"theengs":{"local":{"LWT":"online"}}}
[2024-07-30 19:35:23][DEBUG] : Message reçu sans prise en charge par un plugin : {"homeassistant":{"sensor":{"C47C8D661208-lux":{"config":{"stat_t":"+\/+\/BTtoMQTT\/C47C8D661208","dev_cla":"illuminance","unit_of_meas":"lx","state_class":"measurement","name":"HHCCJCY01HHCC-lux","uniq_id":"C47C8D661208-lux","val_tpl":"{{ value_json.lux | is_defined

log de mon plugin:

[2024-07-30 19:35:23][INFO] : Début d'activation du plugin
[2024-07-30 19:35:24][INFO] : Info sur le démon : {"launchable_message":"","launchable":"nok","state":"nok","log":"nok","auto":0}
[2024-07-30 19:35:24][DEBUG] : Lancement de : /var/www/html/core/class/../../core/php/jeePlugin.php  plugin_id=MQTTinfo function=install callInstallFunction=1
[2024-07-30 19:35:47][INFO] : Lancement démon
[2024-07-30 19:35:47][INFO] : Démon MQTTinfo lancé
[2024-07-30 19:35:47][DEBUG] : handle Mqtt Message:{"theengs":{"local":{"BTtoMQTT":{"5CC1D7613726":{"manufacturerdata":"7500420401806e5cc1d76137265ec1d761372501e3a600000000","id":"5C:C1:D7:61:37:26","rssi":-92,"mfr":"Samsung Electronics Co. Ltd."}}}}}
[2024-07-30 19:35:48][DEBUG] : handle Mqtt Message:{"theengs":{"local":{"BTtoMQTT":{"A4C138CBA207":{"name":"ATC_PARENT","id":"A4:C1:38:CB:A2:07","rssi":-75,"brand":"Xiaomi","model":"TH Sensor","model_id":"LYWSD03MMC\/MJWSD05MMC_ATC","type":"THB","tempc":26.2,"tempf":79.16,"hum":65,"batt":100,"volt":2.91,"mac":"A4:C1:38:CB:A2:07"},"C47C8D661208":{"name":"Flower care","id":"C4:7C:8D:66:12:08","rssi":-85,"brand":"Xiaomi\/VegTrug","model":"MiFlora","model_id":"HHCCJCY01HHCC","type":"PLANT","lux":2142,"mac":"C4:7C:8D:66:12:08"}}}}}

Le message theengs/tgw_local/LWT=online arrive avant le démarrage de mon plugin qui s’abonne à ce topic via mqtt2::addPluginTopic, donc c’est MQTT2 qui recoit ce message et pas moi :unamused:
Il me transfére les messages suivants mais c’est trop tard…

Du coup je ne sais pas comment m’en sortir? Des idées?

Je comprends absolu pas ce que tu fais. Pourquoi as tu un démon ? Normalement mqtt reçoit un message il appels une fonction php de ton plugin mais y’a pas d’histoire de démon normalement la.

Oui le démon ne sert à rien ici
Je n’ai jamais fait de plugin from scratch donc j’ai copié le template par défaut :wink:
Ca ne change rien à l’affaire tant que mon plugin n’est pas activé je rate les message en RETAIN que mqtt2 intercepte… je ne vais pas comment m’en sortir sauf à utiliser une autre librairie?

Je comprends toujours pas ton plugin tu l’actives pas désactives pas tout les jours. Tu installe le plugin active celui ci puis le configure et voilà.

Il va entre autres detecter l’etat des antennes…quand je l’active l’etat sera a offline tant qu’il n’y aura pas eu de redemarrage des antennes

Mais quand tu actives quoi ? Un plugin ça s’active que une fois et ensuite ça reste actif tous le temps. Donc oui à l’activation tu peux ne pas avoir l’état des antennes et donc au pire tu demandes à l’utilisateur de les redémarrer mais ensuite c’est bon ça arrivera plus.

Oui a l’activation du plugin.
Merci pour tes réponses je vais réfléchir a une solution alternative

Bonjour @Loic

Je me replonge dans ce sujet.
J’ai fini par opter pour une solution alternative pour m’abonner au LWT en utilisant mosquitto_sub au démarrage du plugin ce qui me permet de savoir si les antennes sont déjà up ou pas vu que pars du principe qu’elles ne sont pas gérées par Jeedom (ex ESP32ble). C’est pas très propre mais ca marche.

C’est le cas également pour tout plugin dépendant d’un publisher MQTT externe. Par ex j’ai récemment vu une demande similaire pour le remplacement de JeeLink ou il y a besoin d’avoir le statut du Jeedom remote. Le LWT c’est fait pour ca, c’est beaucoup plus propre que du polling…

Il me semble avoir lu que tu avais fait des modifs dans la beta du plugin-mqtt2 en ce sens, je n’arrive plus a trouver le thread qui en parle. Je suis allé voir sur la branche beta du repo mais je n’ai pas trouvé. J’ai mal compris?

Merci d’avance

Bonjour
Je sais pas de quoi tu parles à mon avis c’est la modification qui fait envoi l’état de la connexion de jeedom a mosquito. Si oui le plugin Mqtt le gère effectivement en envoyant online dans un topic spécifique à la connexion et offline si il se déconnecte (gère par mosquito lui même c’est le die message).

Par contre j’ai jamais eu de retour dessus donc aucune idée si ça marche bien.

Bonjour,

S’il est question du report de l’info « Etat », je n’ai moi non plus pas de retour visible (uniquement le titre).
Mais j’ai peut être raté une étape.

Ok j’ai trouvé le soucis la beta de demain du plugin mqtt corrigera. Il suffit de mettre state dans topic

Toujours rien même en rafraichissant et en relançant la découverte :disappointed:

Essaye de relancer le demon sur le jeedom source pour voir (et peut être aussi celui coté cible).

image

Merci.

:partying_face: :fireworks:

Je parle de ca
en s’abonnant sur le topic LWT subscriber ex un plugin est prévenu en cas d’arrêt ou de démarrage du publisher ex le Jeedom ou l’antenne remote. Le message est stocké en RETAIN ce qui permet au client de le lire en asynchrone.

Oui oui c’est bien ca que j’ai mis dans le démon le testament qui quand il se déconnecte il envoi offline