Je ne dirais pas ça comme ça… Le Retain: true garde le message dans la queue MQTT tant qu’il n’a pas été consommé.
Autrement dit, si tu publies dans ce topic et qu’au moment de la publication personne n’écoute sur ce topic, alors avec le Retain a true le message reste, avec false il est perdu.
Là, de ce que je comprends du besoin, ce n’est pas exactement ça…
Retained Messages
A retained message is a normal MQTT message with the retained flag set to true. The broker stores the last retained message and the corresponding QoS for that topic. Each client that subscribes to a topic pattern that matches the topic of the retained message receives the retained message immediately after they subscribe. The broker stores only one retained message per topic.
Il y a donc autant de réplicats du message que de clients qui se (re)connectent…
Tu chipotes… J’ai fait l’hypothèse que LE consommateur c’est HA. Donc, si HA n’est pas là avec Retain:false le message est perdu. On est d’accord?
Avec Retain: True, le message sera consommé « At least once » (avec la QOS à 1).
Oui, sauf que je pense que c’est pas comme ça que ça va se passer.
Mon hypothèse est la suivante. :
A la collecte du matin, le message est mis dans MQTT avec retain = true… QOS à 0 ou 1 peu importe à mon avis…
Le sensor qui lie le topic MQTT, est connecté, va lire les infos en direct, tout va bien.
On redémarre HA… (autant de fois qu’on veut)
Le sensor se connecte au topic, et comme le message est déjà là (le fameux retain) il retrouve la valeur du matin. Dans la mécanique actuelle, comme le retain est à 0, il y a rien à lire dans le topic.
Le cas ou ça reboote, au moment de la collecte du matin, marche pas … mais probabilité élevée que ça arrive ?
Tu y vois une erreur ?
C’est là ou nos avis divergent. Pour moi, comme le message a été consommé une fois, quand le même client (HA après son reboot) se connecte il ne relira pas le message du matin. Faudrait tester
L’influence du Qos est à confirmer : Avec 2 (exactly once), je pense que le comportement que tu décris serait correct. ça peut avoir un intérêt dans certains cas. Avec 0, le message est relu. Et je pense que c’est pareil pour 1 mais j’ai pas testé
Bonjour et merci pour cette solution à mon besoin toute simple. Avec le retain et la valeur 0 pour le QOS, cela fonctionne. Pas besoin de relancer les flux NodeRed. HA va relire les valeurs à chaque redémarrage et elles restent à disposition dans les serveurs mqtt. Et demain matin, le flux va tourner et il y aura des nouvelles valeurs dans les serveurs mqtt et cela continuera à fonctionner. Par contre, cela ne fonctionne pas avec un QOS de 1.
Cette solution est bien meilleure que de relancer les flux. Merci beaucoup et bonne nuit.
Bonjour,
Finalement, la solution n’a pas fonctionné car apparemment, à cause du retain, la valeur ne changeait pas dans le serveur mqtt. Alors j’ai opté pour la solution suivante :
créer un switch virtuel « démarrage HA »
créer une automatisation qui au démarrage de HA positionnait ce switch à « on » pendant 10 sec puis le repositionnait à « off »
créer un node events-state dans node-red en début de flux qui teste le changement du switch démarrage HA à « on » et lance alors le flux.
Cette solution n’est peut-être pas académique mais elle fonctionne. Bonne continuation et merci pour ce que j’ai encore appris.
Probablement, mais je n’en connais pas la raison.
En fait, lorsque HA tournait normalement, les valeurs étaient remises à jour avec les valeurs correctes du jour.
Mais dès que je relançais HA, ce sont les valeurs de dimanche qui étaient rechargées. Comme si elles étaient mémorisées. A force de ne pas comprendre, j’ai cessé de chercher et créer le workaround.
oui j’ai installer node-red sur mon debian, quand je fais qq tests simples ça fonction, mais dès que je veux récupérer les données mqtt et les injecter dans ma base influxdb, je n’ai que des messages d’erreurs :
Si tu sais me guider, je suis preneur
Merci d’avance.
John
Oula. Attends. Tu as parlé des noeuds current state et call service. Si tu le dis j’ai installé nodered sur mon debian tu n’utilise donc pas l’addon nodered de home assistant. Donc tu dois installer la palette node-red-contrib-home-assistant-websocket depuis l’interface de nodered.
Ensuite pour tes soucis mqtt/influxdb tu parles de messages d’erreurs. Certes mais lesquels ?
Quelle version de influxdb ?
Je ne sais pas si j’ai besoin de current state et call service, c’était pour faire les exemples qui sont sur ta page.
J’utilise influxdb 1.8
voici le message d’erreur que j’ai
msg : error
« TypeError: points.forEach is not a function »
Là je connecte directement mqtt à ma base de données.
J’ai la base créée par contre je ne sais pas comment ajouter des champs et je ne sais pas quels champs ajouter car je me doute qu’une base de données sans champ, que ça ne marchera pas.
Avec phpadmin ça irai tout seul, mais je ne connais pas du tout influxdb, mais je dois absolument l’utiliser
Oui je sais, ça fait bcp de choses en même temps
Voilà ce que j’aimerais récupérer via mqtt et l’insérer dans ma base de données.