Débuter avec NodeRed

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…

Perso, pour le même besoin que j’avais eu, j’étais parti sur la solution décrite ici Run flow on homeassistant restart - #2 by oriolism - Node-RED - Home Assistant Community
Un sensor uptime et une automatisation qui appelle NR en REST.

Justement c’est pas comme ça que ça marche :wink:

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 :slight_smile:

ça fonctionne déjà comme ça chez moi … Veolia par exemple. Message là depuis le 18/12
image
relu il y a 1 heure
image
Qos à 0 …

Ah, j’ai appris un truc alors!!

1 « J'aime »

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.

1 « J'aime »

Merci pour ton retour et le test ! comme ça moi aussi j’ai appris un truc :wink:

1 « J'aime »

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.

Salut

ça plus probablement parce que ta collecte n’a pas tourné correctement

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.

Bonjour,
Je n’ai pas le noeud current state et le call service ! où peut-on le trouver ?
Pourtant j’ai bien cherché, faut-il installer quelque chose ?

Merci d’avance.

Tu utilises l’addon nodered ?

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 ::frowning: :frowning:
Si tu sais me guider, je suis preneur :slight_smile:
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 :frowning:

Voilà ce que j’aimerais récupérer via mqtt et l’insérer dans ma base de données.

Bonjour,
Pas certain de ta config mais tu dois pouvoir intégrer tes données dans influxDB en configurant influxDB dans configuration.yaml:

include: 
    entities:
       - entity.id3
       - entity.id4

A moins que ce soit les événements des tes scénarios Node Red que tu souhaites suivre.

Bob

Bonjour Bob,
Je vais essayer avec ce que tu me donnes comme infos, je verrais si ça marche.
Merci pour ton aide.
John