Enregistrer et restituer une valeur dans Node Red

Dans NodeRed, tu peux « enregistrer » des valeurs dans des variables de nodes, de flow ou globale.
Cela peut être assez pratique pour le cas que tu évoques.

Tu peux via un node Fonction, taper un code du style :

flow.set("PlanningState","ON")

Ceci permet dans l’exemple de déclarer une variable de Flow (donc pas accessible dans tous les onglets) qui se nomme PlanningState et positionner la valeur à On

Attention toutefois avec cette méthode, lors de redémarrage de ton équipement, il faut penser à forcer l’initialisation des valeurs. Elles ne sont pas persistantes au reboot.

Non, quand on déclenche l’aller/retour, le volet est fixe dans une position donnée à un moment de la journée. Mettons 50%
On le fait monter complètement et redescendre aussitôt à sa position initiale, ici 50%.

En fait, il s’agit d’un BSO pratiquement toujours baissé dont les lamelles sont souvent à demi fermées pour se protéger d’un voisinage trop proche. La nuit, il est complètement fermé mais en fait il ne remonte jamais complètement, si bien que les araignées ont vite pigé qu’elles ne se feraient jamais écraser par les lamelles dans le cache supérieur. D’où mon automate Lifedomus à retranscrire dans Node red pour éviter les toiles d’araignées ! merci Mam’zelle Domotique !!! :rofl: :rofl: :rofl:

Justement… le moment donné c’est quoi ?
Sauf si ta procédure d’aller/retour est spécifique (et donc tu as le début de l’action) ça va être difficile

Oh là là !!! je crois que je vais aller faire la vaisselle… :joy:

J’ai peur de mal m’expliquer.
Il est 10 heures, j’ouvre mon volet roulant à mi-hauteur (mettons aujourd’hui 50%) et je n’y touche plus.
A 15 heures tous les jours, mon automatisme se met en route.
Il monte complètement le volet et le redescend aussitôt à sa valeur initiale (50%).

Ok donc avec nodered :

  • à 15h tu déclenche le flow
  • tu récupères la position dans P
  • tu balances l’ordre d’aller à 0 à ou 100
  • tu attends 30s (en fonction de la durée de l’action max)
  • tu balances l’ordre de retour à la position P

Je vois le truc, c’est histoire de resynchroniser les volets… quand madame ou les enfants jouent avec la télécommande plutôt qu’avec la domotique.
Par contre, il faut prier que justement à 15h ce ne soit pas l’heure où on change la position du volet pour se faire de l’ombre en regardant la télé. Ou qu’on s’amuse avec la télécommande juste après …
Perso j’ai abandonné l’idée, ça ne me sert plus à rien : Le soir/matin, ils sont synchros et j’ai dressé ma femme…

Sauf que les araignées ne regardent pas la télé … :rofl: :rofl: :rofl:

Tu es sûr qu’elles ne le font pas en douce ? :rofl:

Effectivement, j’ai remarqué qu’elles arrêtaient de bosser quand je regardais certains films… :no_entry: :underage:

Donc j’aimerai bien balancer la variable quelque part, encore faudrait-il savoir la gauler…
Merci pour vos conseils,

Tu es dans le même Flow, donc tu as le payload pour passer les infos d’un node à l’autre. Beaucoup plus efficace qu’une variable

Je t’assure que quand on me montre une fois comment faire, je suis capable de le refaire ensuite.
Un peu comme tout le monde, en fait… :rofl: :rofl: :rofl:

c’est aussi valable pour la fonction recherche :star_struck:… C’est pas comme si c’était l’usage exceptionnel de NR que de mettre des infos dans le payload
https://nodered.org/docs/user-guide/messages

J4ai pas le cas d’usage sous la main mais je jeterai un oeil ce soir

Bonsoir,

Je suis encore sur mon problème de récupération de variable avec Node Red. Et plus j’en lis sur lui, moins j’y vois clair…
Mon volet roulant est baissé à 45%

  • entité : cover.vr_bureau
  • attribut d’état : current_position: 45 dans HA

Je voudrais récupérer cette variable et la restituer sur ce même VR après lui avoir fait faire une manœuvre.
Je résume :

  • au déclenchement, le volet est à 45%
  • tous les jours, à 17h00, je fais monter complètement le volet et je veux ensuite qu’il reprenne sa position initiale (45%)

Je n’arrive pas à piger quelles nodes employer et quoi configurer dedans pour arriver à ça…
Merci pour votre aide,
Patrick

Salut.
Bon je ne vois pas bien comment ça peut être de plus en plus compliqué au fur et à mesure de la lecture mais l’approche c’est quand même de faire des « petits morceaux » pour comprendre comment ça fonctionne…

Par exemple étape 1 : récupérer la position et l’afficher dans un node debug … ça il y a rien de difficile
Ensuite étape 2 : positionner le volet à une position fixe
Etc etc…

Bref. Voilà un exemple, qu’il te faudra adapter, je te conseille de bien lire, de comprendre de poser des questions si besoin mais là tu as 90% du boulot de fait


Et seulement ensuite, quand c’est clair, tu adaptes pour ton cas petit à petit

[{"id":"1ccdd58bcc8f7a0f","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"92bd480a74ebd0e5","type":"inject","z":"1ccdd58bcc8f7a0f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":60,"wires":[["b5fc1d340cededc7"]]},{"id":"0438bea7c4ebc49b","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":440,"y":60,"wires":[]},{"id":"9a8f620d2ac1fb83","type":"delay","z":"1ccdd58bcc8f7a0f","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":680,"y":140,"wires":[["938a560ca1ad124a","53e0f70d89d8bf7e"]]},{"id":"1429515c40077372","type":"api-call-service","z":"1ccdd58bcc8f7a0f","name":"volet","server":"94a12356.a4a14","version":5,"debugenabled":false,"domain":"cover","service":"set_cover_position","areaId":[],"deviceId":[],"entityId":["cover.volet_salon_allee_prop"],"data":"{\"position\":msg.data.position}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1090,"y":140,"wires":[["c941b2e816cc2380"]]},{"id":"6bf1a7538fe90e7b","type":"function","z":"1ccdd58bcc8f7a0f","name":"extract position","func":"msg.payload = msg.data.attributes.current_position;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":140,"wires":[["92ac3472113542c2","9a8f620d2ac1fb83","e92c9889fdb57038"]]},{"id":"92ac3472113542c2","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":680,"y":60,"wires":[]},{"id":"642221361b8870de","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":900,"y":260,"wires":[]},{"id":"938a560ca1ad124a","type":"change","z":"1ccdd58bcc8f7a0f","name":"set old position","rules":[{"t":"set","p":"data.position","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":140,"wires":[["1429515c40077372","be5ee9eeae34aabe"]]},{"id":"53e0f70d89d8bf7e","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 4","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":880,"y":60,"wires":[]},{"id":"b5fc1d340cededc7","type":"api-current-state","z":"1ccdd58bcc8f7a0f","name":"Position ?","server":"94a12356.a4a14","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.volet_salon_allee_prop","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":280,"y":140,"wires":[["0438bea7c4ebc49b","6bf1a7538fe90e7b"]]},{"id":"be5ee9eeae34aabe","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1080,"y":60,"wires":[]},{"id":"e92c9889fdb57038","type":"change","z":"1ccdd58bcc8f7a0f","name":"30%","rules":[{"t":"set","p":"data.position","pt":"msg","to":"30","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":200,"wires":[["1429515c40077372","642221361b8870de"]]},{"id":"c941b2e816cc2380","type":"debug","z":"1ccdd58bcc8f7a0f","name":"debug 6","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1220,"y":260,"wires":[]},{"id":"94a12356.a4a14","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open|1","connectionDelay":true,"cacheJson":true,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

La doc de nodered, comme celle de ha d’ailleurs, est très bien faite et explique pas à pas les grands principes de nodered: User Guide : Node-RED

Je pense qu’il faudrait commencer par la…

En l’occurrence, c’est le noeud change qui permet ce genre de chose. Et change c’est un des quelques noeuds de base à connaître/comprendre (les autres inject, debug, switch…)

Merci Pulpy !
Voilà ce que j’appelle une bonne base de travail.

Pour quelqu’un qui débute avec Node Red, même avec une « modeste » expérience d’HTML, de CSS et autres…, ce n’est pas parce que l’on a vu 36 vidéos presque identiques expliquant comment on envoie un message dans un node Debug depuis un node Inject que l’on va pouvoir se débrouiller pour la suite…
Ça me fait penser aux milliers de tutos qui expliquent comment allumer le Led 13 sur un Arduino. :rofl: :rofl: :rofl:

De plus en plus compliqué parce que je viens de me taper toutes les vidéos de ce développeur qui s’explique remarquablement bien… sauf qu’une fois de plus, il s’adresse à des développeurs (étudiants en l’occurence) et qu’à aucun moment il ne donne d’exemple concrets et pratiques d’automatisme (ici de bioautomatique).

C’est pour cela que je te remercie pour tes conseils.
Patrick

C’est mon sentiment personnel… mais les tutos c’est déjà pas forcement mieux que la doc officielle (et là @golfvert te donne les infos) parce que c’est pas à toujours à jour mais alors les tuto vidéos je n’en parle même pas :face_vomiting:
Et le mieux c’est quand même de commencer par petit/facile/assimilable : Schumacher il a commencé par une voiture à pédales, puis un kart, une formule catégorie junior, avant d’intégrer la F1 et de gagner

2 « J'aime »

Et ça marche !!!
Les araignées n’ont plus qu’à bien se tenir. :rofl:
Merci encore

Bonsoir golfvert,

Comme dit précédemment, il y a les nodes indispensables à connaître mais aussi et surtout les fonctions à utiliser à l’intérieur de ces nodes. C’est en cela que quelques exemples concrets relatifs à ce qui fait 80% des besoins de base en domotique (automatismes simples de volets, de lampes, de thermostats, de moteurs…) seraient les bienvenus et éviteraient d’ennuyer les bonnes volontés que je remercie au passage. Ensuite, que l’on veuille logiquement aller plus loin mérite que l’on se casse un peu la tête, c’est normal.
C’est vrai que j’ai fait un peu fort pour commencer avec l’exercice de l’araignée, mais avec votre aide ça m’a fait faire un pas de géant. Je vais pouvoir m’attaquer aux BSO et leur inclinaison ! :rofl: :rofl: :rofl: