Node-RED, utiliser des variables globales dans les flows?

Mon problème

Bonjour,

Je suis sur Home Assistant depuis quelques semaines maintenant,
j’utilise des dimmers Philips Hue dans toutes mes pièces pour gérer mes lampes et mes ambiances lumineuses.
J’utilise Node-RED afin de reproduire les mêmes fonctions d’origines que Philips (1 flow par dimmer) c’est à dire :

Bouton 1 = Allumer/Eteindre
Bouton 2 et 3 = Intensitée + et -
Bouton 4 (Hue) = Pour passer d’une ambiance l’umineuse à une autre.

C’est pour ce 4ième bouton que j’ai une question !
Pour toutes mes pièce j’utilise des ambiances lumineuses prédéfinies communes, genre rouge, bleu, blanc froid…
Je gère ces couleurs via Note-RED aussi en passant mes valeurs via un « call service ».
Tout fonctionne comme espéré, mais j’aimerais pouvoir prédéfinir toutes mes couleurs dans une variable de tel sorte qui si par exemple je décide de modifier mon rouge il le sera automatiquement dans toutes les pièces.

Pour l’instant j’ai défini mes couleurs (ambiances lumineuses) dans chaques flow.

Merci d’avance pour votre aide.

Ma configuration


Home Assistant Core ## System Health
version core-2022.5.3
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.15.32-v8+
arch aarch64
timezone Europe/Brussels
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2022.05.1
docker_version 20.10.14
disk_total 235.0 GB
disk_used 6.6 GB
healthy true
supported true
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.4.0), File editor (5.3.3), Mosquitto broker (6.1.2), Zigbee2mqtt (1.25.1-1), Node-RED (11.1.2), Glances (0.15.0), Let’s Encrypt (4.12.2)

Salut,
Peux-tu exporter ton flow pour l’on puisse te guider sans que tu sois obligé de tout refaire?

Bonjour,

Oui voici :

[{"id":"1698aa8017bd5404","type":"tab","label":"Séjour","disabled":false,"info":"Séjour\nDimmer Switch Philips Hue - 001","env":[]},{"id":"b6f076c6f4b0c1a4","type":"api-call-service","z":"1698aa8017bd5404","name":"On-Off","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"toggle","areaId":[],"deviceId":[],"entityId":["light.lampes_sejour"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":250,"y":40,"wires":[[]]},{"id":"18f26677b4930cbd","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton On-Off","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"on_press","discovery_id":"0x001788010b7362f1 action_on_press"},"capabilities":[],"outputProperties":[],"x":90,"y":40,"wires":[["b6f076c6f4b0c1a4"]]},{"id":"9b6259dfa87955c3","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton Plus","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"up_press","discovery_id":"0x001788010b7362f1 action_up_press"},"capabilities":[],"outputProperties":[],"x":90,"y":100,"wires":[["dc01eda37e8fa85f"]]},{"id":"73629a951bcae0a2","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton Moins","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"down_press","discovery_id":"0x001788010b7362f1 action_down_press"},"capabilities":[],"outputProperties":[],"x":90,"y":220,"wires":[["f46b40ae449255ad"]]},{"id":"876cf2bd8c14c039","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton Hue","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"off_press","discovery_id":"0x001788010b7362f1 action_off_press"},"capabilities":[],"outputProperties":[],"x":90,"y":340,"wires":[["fd87e45fdb2aa04c"]]},{"id":"48df5449d8026069","type":"switch","z":"1698aa8017bd5404","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"},{"t":"eq","v":"7","vt":"str"},{"t":"gte","v":"8","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":250,"y":440,"wires":[["7941f1e140848a95"],["1af20d42e3e76f40"],["727174c6a6c0444e"],["3b4061bdbc5a3ad9"],["915c2949886b0e2e"],["f087c10143bcd031"],["dd9ca9ae4aae4f9d"],["fcb6ae76076464cf"]]},{"id":"fcb6ae76076464cf","type":"change","z":"1698aa8017bd5404","name":"Reset Counter","rules":[{"t":"set","p":"counter","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":260,"y":540,"wires":[["fd87e45fdb2aa04c"]]},{"id":"fd87e45fdb2aa04c","type":"function","z":"1698aa8017bd5404","name":"counter","func":"var counter = flow.get(\"counter\") || 0\n\ncounter ++\n\nflow.set (\"counter\", counter)\n\nmsg.payload = counter\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":340,"wires":[["48df5449d8026069","e6f7af3b467ee89f"]]},{"id":"e6f7af3b467ee89f","type":"debug","z":"1698aa8017bd5404","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":470,"y":340,"wires":[]},{"id":"dd9ca9ae4aae4f9d","type":"api-call-service","z":"1698aa8017bd5404","name":"Coin Lecture","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.sejour_coin_lecture"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":760,"wires":[["cba883cad68d5601"]]},{"id":"dc01eda37e8fa85f","type":"api-call-service","z":"1698aa8017bd5404","name":"Brightness+","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.lampes_sejour"],"data":"{\"brightness_step_pct\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":270,"y":100,"wires":[[]]},{"id":"f46b40ae449255ad","type":"api-call-service","z":"1698aa8017bd5404","name":"Brightness-","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.lampes_sejour"],"data":"{\"brightness_step_pct\":-5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":270,"y":220,"wires":[[]]},{"id":"c2c89ae39ee8485a","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton Moins","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"down_hold","discovery_id":"0x001788010b7362f1 action_down_hold","metadata":{}},"capabilities":[],"outputProperties":[],"x":90,"y":280,"wires":[["9f959e6281422cea"]]},{"id":"9f959e6281422cea","type":"api-call-service","z":"1698aa8017bd5404","name":"Brightness-","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.lampes_sejour"],"data":"{\"brightness_step_pct\":-5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":270,"y":280,"wires":[[]]},{"id":"b98637f3a9959d0f","type":"ha-device","z":"1698aa8017bd5404","name":"Bouton Plus","server":"5f35fe5b.a2073","version":0,"debugenabled":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":0,"deviceType":"trigger","device":"0882da1a702fb3d42385967c0420ec3f","event":{"platform":"device","domain":"mqtt","device_id":"0882da1a702fb3d42385967c0420ec3f","type":"action","subtype":"up_hold","discovery_id":"0x001788010b7362f1 action_up_hold","metadata":{}},"capabilities":[],"outputProperties":[],"x":90,"y":160,"wires":[["7d3c7ab04ea26d6b"]]},{"id":"7d3c7ab04ea26d6b","type":"api-call-service","z":"1698aa8017bd5404","name":"Brightness+","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.lampes_sejour"],"data":"{\"brightness_step_pct\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":270,"y":160,"wires":[[]]},{"id":"7941f1e140848a95","type":"api-call-service","z":"1698aa8017bd5404","name":"Rouge","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"rgb_color\": [255, 0, 0]\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":400,"wires":[["cba883cad68d5601"]]},{"id":"1af20d42e3e76f40","type":"api-call-service","z":"1698aa8017bd5404","name":"Vert","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"rgb_color\": [0, 255, 0]\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":460,"wires":[["cba883cad68d5601"]]},{"id":"727174c6a6c0444e","type":"api-call-service","z":"1698aa8017bd5404","name":"Bleu","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"rgb_color\": [0, 0, 255]\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":520,"wires":[["cba883cad68d5601"]]},{"id":"3b4061bdbc5a3ad9","type":"api-call-service","z":"1698aa8017bd5404","name":"Blanc Chaud","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"rgbww_color\": [0,0,0,200,200],\t    \"brightness_pct\": \"70\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":580,"wires":[["cba883cad68d5601"]]},{"id":"915c2949886b0e2e","type":"api-call-service","z":"1698aa8017bd5404","name":"Blanc Froid","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"color_temp\": \"440\",\t    \"brightness_pct\": \"70\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":640,"wires":[["cba883cad68d5601"]]},{"id":"f087c10143bcd031","type":"api-call-service","z":"1698aa8017bd5404","name":"Blanc Eclatant","server":"5f35fe5b.a2073","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["37cae4cb8d0dfd2b514bc04baa000603"],"entityId":[],"data":"{\t    \"color_temp\": \"153\",\t    \"brightness_pct\": \"100\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":480,"y":700,"wires":[["cba883cad68d5601"]]},{"id":"bfc7855b3c17b692","type":"debug","z":"1698aa8017bd5404","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":970,"y":760,"wires":[]},{"id":"cba883cad68d5601","type":"api-current-state","z":"1698aa8017bd5404","name":"","server":"5f35fe5b.a2073","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.lampes_sejour","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":740,"y":760,"wires":[["bfc7855b3c17b692"]]},{"id":"5f35fe5b.a2073","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]

Merci !

Pour sélectionner le mode prédéfini, pourquoi ne pas passer par une liste déroulante pour choisir directement le mode désiré au lieu de les passer tous en revue ?

mode

Comment vas tu modifier les paramètres du rouge? depuis HA ou en dur dans NR ?

Bonjour, merci pour la réponse, je ne suis pas certain de comprendre mais peut-être que j’ai mal exprimé ce que je souhaites faire.

Pour faire simple :

Durant mes phases de testes avec mes lampes j’ai définis quelques ambiances de couleurs.
Par exemple un ‹ vert › code sur node red : « rgb_color »: « [0,255,0] ».

je passe sur ce vert en appuyant sur un bouton de mon dimmer Philips Hue.
ces dimmers j’en ai dans chaque pièces.

J’ai créé un flow par dimmer et donc par pièce.

Ce que j’aimerai savoir c’est si il est possible de définir une variable par couleur par exemple :

var green_color = 0,255,0

et en suite d’appeler cette variable green_color dans mes flows.

L’idée est que mon vert dans cette exemple soit le même partout donc si un jour je décide de le modifier, j’aurais juste à le faire dans la variable global et pas dans tous mes flows.

J’espère que je suis plus clair et encore merci pour votre temps !

edit : et pour réponde à la question je passe d’une couleur à l’autre avec un switch et un compteur de pressions sur le bouton Hue →

Bonjour,

Pour moi, c’est (bien sur) possible dans node red avec des variables globales mais il me semble que ces variables globales seront « interne » à node red et donc non manipulable dans l’interface Home A.

(…si j’ai bien compris?)

Bonjour Sabamimi,

Oui c’est bien ça et pas besoin de modifier ces variables dans HA.
Je veux juste créer quelques variables prédéfinie dans node-red et les utiliser dans mes différents flows.

Bon OK, alors un simple Change node peut etre utilisé pour définir une variable Global.

Ok je vais regarder ça merci !

Voici comment stocker et utiliser les variables sur le call service.

[{"id":"27b143e62c23b87e","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"2716efc8116066eb","type":"inject","z":"27b143e62c23b87e","name":"255, 0, 0","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"255, 0, 0","payloadType":"str","x":160,"y":100,"wires":[["4eea63b6063cb7f1"]]},{"id":"4eea63b6063cb7f1","type":"change","z":"27b143e62c23b87e","name":"rouge","rules":[{"t":"set","p":"rouge","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":100,"wires":[[]]},{"id":"fa3b006756e11303","type":"inject","z":"27b143e62c23b87e","name":"0, 255, 0","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0, 255, 0","payloadType":"str","x":160,"y":140,"wires":[["3041cffa38cb43b2"]]},{"id":"3041cffa38cb43b2","type":"change","z":"27b143e62c23b87e","name":"vert","rules":[{"t":"set","p":"vert","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":140,"wires":[[]]},{"id":"3f069c3b2375f8b3","type":"inject","z":"27b143e62c23b87e","name":"0, 0, 255","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0, 0, 255","payloadType":"str","x":160,"y":180,"wires":[["067f64453bebbfa2"]]},{"id":"067f64453bebbfa2","type":"change","z":"27b143e62c23b87e","name":"bleu","rules":[{"t":"set","p":"bleu","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":180,"wires":[[]]},{"id":"5e85c25b0d0c6ccf","type":"inject","z":"27b143e62c23b87e","name":"rouge","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":340,"wires":[["abf3cc4dd1e4e6cf"]]},{"id":"fa1d0568910f15d9","type":"api-call-service","z":"27b143e62c23b87e","name":"salon","server":"df03acce.f940b","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":["5ffdd31f3543429c5253c8747b38389e"],"entityId":[],"data":"{\"rgb_color\":[{{payload}}]}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":570,"y":400,"wires":[[]]},{"id":"abf3cc4dd1e4e6cf","type":"change","z":"27b143e62c23b87e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"rouge","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":340,"wires":[["fa1d0568910f15d9"]]},{"id":"d3274e5df8f78034","type":"inject","z":"27b143e62c23b87e","name":"vert","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":400,"wires":[["c4b3574d753848a4"]]},{"id":"c4b3574d753848a4","type":"change","z":"27b143e62c23b87e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"vert","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":400,"wires":[["fa1d0568910f15d9"]]},{"id":"c4a922913263d59e","type":"inject","z":"27b143e62c23b87e","name":"bleu","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":460,"wires":[["c1cf511e84f06569"]]},{"id":"c1cf511e84f06569","type":"change","z":"27b143e62c23b87e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"bleu","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":460,"wires":[["fa1d0568910f15d9"]]},{"id":"c80b1def3143c50f","type":"comment","z":"27b143e62c23b87e","name":"Définition des variables","info":"","x":180,"y":40,"wires":[]},{"id":"9ca957228f784d63","type":"comment","z":"27b143e62c23b87e","name":"couleurs en fonction des variables","info":"","x":220,"y":300,"wires":[]},{"id":"df03acce.f940b","type":"server","name":"Home Assistant","version":2,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]

1 « J'aime »

Merci, je suppose que je dois utiliser ceci après pour passer mes variables de ce flow vers d’autres flows ?

image

Non . C’est des variables GLOBAL. Tu peux les utiliser dans tous les flows de ton NR.
Si c’est des variables de type FLOW, elles ne sont utilisables que dans le flow où elles sont déclarées.

Ok merci je vais tester ça demain, car là je suis en surchauffe :wink: !
Merci pour tous les retours !

Bonne soirée.

Bonjour,

Merci pour la solution ça fonctionne !
Petit détail, il manquait 2 crochets dans la fonction du service call.

{
   "rgb_color": [{{{payload}}}]
}