[résolu] Node switch conditionnel 2 entrées/1 sortie

Bonjour,
A l’inverse du switch traditionnel qui aiguille sur la valeur de l’entrée vers plusieurs sorties, je recherche un node ou un flow pour aiguiller 2 entrées non logiques vers une sortie, grâce à une condition logique. Du style si condition vraie, alors sortie égale entrée 1 et inversement si faux.

J’ai cherché des switchs inversés ou autre dénomination, mais je retombe toujours sur un switch classique…
En gros, c’est pour faire un forçage de valeur.

Merci.

Euh… C’est pas limpide :slight_smile:

Par exemple ?

???

Par exemple, 2 valeurs numériques en entrée, une condition logique qui aiguille l’une ou l’autre vers la sortie.

Hello

Tu parles d’une automatisation HA ou Node Red ???
Ou autre chose ? Car ce n’est pas clair…

Un node (dans le titre), donc node red, merci :wink:

Il y a un exemple là: Node-RED Soustraction - #9 par golfvert
Il faut utiliser le noeud join

Avec des inject:

[{"id":"96d158a96a822c43","type":"inject","z":"671609705841dfab","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"A","payload":"12","payloadType":"num","x":280,"y":840,"wires":[["74e308d889a97046"]]},{"id":"6a788be9b3c48048","type":"inject","z":"671609705841dfab","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"B","payload":"15","payloadType":"num","x":280,"y":900,"wires":[["74e308d889a97046"]]},{"id":"74e308d889a97046","type":"join","z":"671609705841dfab","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":450,"y":880,"wires":[["3f20c594abdd547c"]]},{"id":"3f20c594abdd547c","type":"debug","z":"671609705841dfab","name":"debug 132","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"( payload.A >= payload.B ) ? payload.A : payload.B","targetType":"jsonata","statusVal":"","statusType":"auto","x":610,"y":880,"wires":[]}]

Merci, mais je parlais de ça =>

En mettant le tag sur le post ça peut aider à ce que certain puisse t’aider.
Il y a des recherches sur tag pour info

Il suffit de rajouter un 3ème inject avec le booléen et de le tester, par exemple.
Après, suivant comment tu récupères les deux entiers, il y peut être d’autres façons.

Salut, si tu nous disais ce que tu souhaites faire concrètement au lieu de nous demander l’élément de l’outil dont tu penses avoir besoin?
C’est un peu comme si tu nous disais: Je cherche une clé plate de 17 alors qu’un simple tournevis suffit !
Cela me rappelle, au tout début de mon arrivée sur NR où je cherchais désespéramment un node équivalent à la fonction logique « OU ».
NR permet de faire la même chose de plusieurs manières. L’important est de savoir où tu veux aller pour que l’on puisse te donner le chemin le plus rapide et adapté à ton niveau.

Bon, j’ai une consigne sur une vanne thermostatique donnée par la fonction décodage , je veux pouvoir forcer cette valeur, par exemple à 14°C si je m’absente, à l’aide d’un booléen sur la page dashboard dédiée à la gestion du chauffage. Cette consigne est a injecter à l’endroit de la flèche et ne doit pas être en conflit avec celle qui sort de la fonction. Je peux faire ce forçage dans la fonction, mais c’est réécrire du code, donc je voulais juste savoir si ce type de node existait, histoire de visualiser le fonctionnement sur la page node red, et de rester « low code » de mon côté. Merci.

Donc, un switch fait parfaitement l’affaire. En sortie de la fonction, tu testes si le booléen est vrai/faux. Et, dans le cas où tu veux ne pas envoyer la consigne, le switch est bloquant…

Si j’ai bien compris avec le switch, le test de validité peut se faire via une valeur autre que la valeur qui est en entrée ? dans ce style (là j’ai crée une entrée mode absent dans HA) =>
Et du coup ça donnerait quelque chose comme ça, avec les 2 switchs avec les tests inversés qui laisseraient passer l’une ou l’autre info ?

Oui.

OK. Mais, ce n’est pas comme ça que l’on récupère dans nodered une info de ha.
Il faut regarder la doc et les exemples de la palette qui fait le lien entre HA et NR. Il faut utiliser le noeud current state de la palette.

1 « J'aime »

Bon j’avoue, on ne doit pas se comprendre, ou je ne t’ai pas compris.
J’utilise current_state qui me donne l’état de mon mode absent en entrée du switch qui va basculer suivant sa valeur, et je change le message avec une consigne à 14°c par exemple qui va en entrée du climate, jusque là ça fonctionne.,

mais du coup comment bloquer la valeur de consigne qui sort du node fonction ?
J’ai cherché et pas vraiment trouvé de doc ou d’exemple de switch qui a des règles sans rapport avec les valeurs en entrée. Ca aurait plus simple avec un node switch avec en entrées mes 2 consignes et en règle l’état du booléen absent ou pas.

Il y a comme souvent avec NodeRed plusieurs méthodes.
Une que j’aime bien, parce que ça évite de complexifier les flots.
J’ai un premier flot qui vérifie toutes les 5 minutes (par exemple) l’état absent/présent. Je mets ça dans une variable nodered.
Ensuite, en sortie de noeud function, dans un switch, tu testes si cette variable est à true/false. Si le mode absent est true, le flot s’arrête et sinon le flot continue.

Finalement, j’ai fait ce que je comprenais, à savoir intégrer le booléen dans la fonction, ça fonctionne très bien, bien que j’aurai préféré voir sous forme de nodes (il faut ouvrir la fonction pour voir ce qu’elle fait) =>
Si jamais tu as un schéma sommaire de ton flow, histoire de comprendre comment tu aurais géré avec un switch, je suis preneur, merci :wink: Merci à tous pour votre aide.

Par exemple comme ça, à adapter…

[{"id":"b9e21c24a8b4de6e","type":"api-current-state","z":"671609705841dfab","name":"","server":"d28c9492.f419c8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.armed_away","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":580,"y":1040,"wires":[["05310418c5759b1d"]]},{"id":"724ccf7906a633ce","type":"inject","z":"671609705841dfab","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":300,"y":1040,"wires":[["b9e21c24a8b4de6e"]]},{"id":"05310418c5759b1d","type":"change","z":"671609705841dfab","name":"","rules":[{"t":"set","p":"etat","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":1040,"wires":[[]]},{"id":"2aae3113ab6e95a0","type":"inject","z":"671609705841dfab","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":320,"y":1120,"wires":[["a643e97e37b4c296"]]},{"id":"a4a05ac7488a460e","type":"switch","z":"671609705841dfab","name":"","property":"etat","propertyType":"flow","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":630,"y":1120,"wires":[["8958142687e8106a"],["e4844e4cb0a2c089"]]},{"id":"e4844e4cb0a2c089","type":"debug","z":"671609705841dfab","name":"debug 133","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"$flowContext(\"etat\")","targetType":"jsonata","statusVal":"","statusType":"auto","x":830,"y":1160,"wires":[]},{"id":"8958142687e8106a","type":"debug","z":"671609705841dfab","name":"debug 134","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":830,"y":1100,"wires":[]},{"id":"a643e97e37b4c296","type":"change","z":"671609705841dfab","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Un autre message","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":1120,"wires":[["a4a05ac7488a460e"]]},{"id":"d28c9492.f419c8","type":"server","name":"hassio","version":5,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Merci, du coup j’ai appris beaucoup comme la création d’une variable NR et la mettre en règle dans le switch (le flow est plus parlant visuellement), un grand merci @golfert