How to loop through list of entities in a current state in node red?

I have a flow (below) that read the status of a number of entities (temperature and energy data, repeats every 5 minutes if heating is on, and then appends the data to a CSV file for later analysis. This works well.

But I’m repeating a lot of the same stuff with the risk of making errors and it makes expanding the measurements cumbersome. I would like to have list so I only use one current state node which loops through the list and returns the state as msg.entity_name. This could be passed on to other nodes and reused eg. when formatting data and setting column names in csv.

Is there a way to make a list of the entities and then loop through them in a current state node?

[{"id":"23fa32681c0bc9d2","type":"file","z":"19045bc6.44c9c4","name":"","filename":"/config/www/data_test.csv","appendNewline":false,"createDir":false,"overwriteFile":"false","encoding":"none","x":1060,"y":420,"wires":[["3e9bbcde15490c73"]]},{"id":"5aa1215751f20f82","type":"inject","z":"19045bc6.44c9c4","name":"","props":[{"p":"timestamp","v":"","vt":"date"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"*/5 11-15 * * *","once":false,"onceDelay":"30","topic":"","x":110,"y":160,"wires":[["48630c8d0d97382d"]]},{"id":"e6ad1014c0b5d462","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.hottub_daily_energy","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"daily_energy","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":540,"y":260,"wires":[["3d3daa32c9fd31d2"]]},{"id":"6c9d6e25bd36273f","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.hottub_heatpump_water_out_temp","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"heatpump_water_out_temp","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":1570,"y":180,"wires":[["e6ad1014c0b5d462"]]},{"id":"52bd0b22a9e32532","type":"debug","z":"19045bc6.44c9c4","name":"2","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1630,"y":400,"wires":[]},{"id":"fa3c0b589375760d","type":"csv","z":"19045bc6.44c9c4","name":"","sep":",","hdrin":false,"hdrout":"once","multi":"mult","ret":"\\n","temp":"date,time,heatpump_water_in_temp,heatpump_water_out_temp,daily_energy,Ambient temp,hottub temp,temp feels like,temp open weather map,hottub_electric_heater","skip":"0","strings":true,"include_empty_strings":false,"include_null_values":false,"x":790,"y":420,"wires":[["23fa32681c0bc9d2"]]},{"id":"1ac0022f482d1919","type":"function","z":"19045bc6.44c9c4","name":"Set data","func":"var now = new Date();\n\nmsg.payload = {\n    \"date\" : msg.date,\n    \"time\" : msg.time,\n    \"heatpump_water_in_temp\" : msg.heatpump_water_in_temp,\n    \"heatpump_water_out_temp\" : msg.heatpump_water_out_temp,\n    \"daily_energy\" : msg.daily_energy,\n    \"Ambient temp\" : msg.ambient,\n\t\"hottub temp\" : msg.hottub_temp,\n\t\"temp feels like\" : msg.temp_feels_like,\n\t\"temp open weather map\" : msg.openweathermap_temp,\n\t\"hottub_electric_heater\" : msg.hottub_electric_heater\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":420,"wires":[["fa3c0b589375760d"]]},{"id":"9701b8ebe746e53f","type":"moment","z":"19045bc6.44c9c4","name":"","topic":"","input":"datetime","inputType":"msg","inTz":"Europe/Copenhagen","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"time","outputType":"msg","outTz":"Europe/Copenhagen","x":720,"y":180,"wires":[["e7174c32b04aa340"]]},{"id":"354b4697424dc2de","type":"moment","z":"19045bc6.44c9c4","name":"","topic":"","input":"datetime","inputType":"msg","inTz":"Europe/Copenhagen","adjAmount":0,"adjType":"days","adjDir":"add","format":"DD/MM/YYYY","locale":"C","output":"date","outputType":"msg","outTz":"Europe/Copenhagen","x":480,"y":180,"wires":[["9701b8ebe746e53f"]]},{"id":"e7174c32b04aa340","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.hottub_heatpump_water_in_temp","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"heatpump_water_in_temp","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1070,"y":180,"wires":[["6c9d6e25bd36273f"]]},{"id":"3d3daa32c9fd31d2","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.hottub_heatpump_ambient_temp","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"ambient","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":980,"y":260,"wires":[["c5c0898e2266f3f1"]]},{"id":"c5c0898e2266f3f1","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"climate.hottub_heater","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":1390,"y":260,"wires":[["c1a165ac5ab4d89a"]]},{"id":"c1a165ac5ab4d89a","type":"change","z":"19045bc6.44c9c4","name":"read current_temperature","rules":[{"t":"move","p":"data.attributes.current_temperature","pt":"msg","to":"hottub_temp","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1690,"y":260,"wires":[["9376fc56d10ec97d"]]},{"id":"9376fc56d10ec97d","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.openweathermap_feels_like_temperature","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"temp_feels_like","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":610,"y":340,"wires":[["91da5970e3ee1008"]]},{"id":"91da5970e3ee1008","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.openweathermap_temperature","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"openweathermap_temp","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":1100,"y":340,"wires":[["a56781509aa88c1f"]]},{"id":"c5a299f5b2060413","type":"api-current-state","z":"19045bc6.44c9c4","name":"stop loop when heat is off","server":"785585e5.21e4ec","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.hottub_heat_on_off","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":490,"y":500,"wires":[["e30887c9ce602666"],[]]},{"id":"3e9bbcde15490c73","type":"delay","z":"19045bc6.44c9c4","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1360,"y":420,"wires":[["c5a299f5b2060413"]]},{"id":"e30887c9ce602666","type":"link out","z":"19045bc6.44c9c4","name":"","mode":"link","links":["92aca86d95475ddf"],"x":1115,"y":500,"wires":[]},{"id":"92aca86d95475ddf","type":"link in","z":"19045bc6.44c9c4","name":"","links":["e30887c9ce602666"],"x":75,"y":300,"wires":[["48630c8d0d97382d"]]},{"id":"a56781509aa88c1f","type":"api-current-state","z":"19045bc6.44c9c4","name":"","server":"785585e5.21e4ec","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.shelly1_98cdac2da2b2","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"hottub_electric_heater","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":1510,"y":340,"wires":[["1ac0022f482d1919"]]},{"id":"48630c8d0d97382d","type":"change","z":"19045bc6.44c9c4","name":"Timestamp","rules":[{"t":"set","p":"datetime","pt":"msg","to":"$now()","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":180,"wires":[["354b4697424dc2de"]]},{"id":"785585e5.21e4ec","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true}]

Thanks,
Kasper

I have a flow that does something like that, but ai am not at my computer before Sunday, but I will post it then.

If you want to get all those states and build a message a function node will give you the most flexibility. Depending on your install type the path to the entities may differ from mine.

[{"id":"e514053e0212263c","type":"function","z":"f80b6c338afd5483","name":"","func":"var temp1 = global.get('homeassistant.homeAssistant.states[\"sensor.c1\"].state');\nvar temp2 = global.get('homeassistant.homeAssistant.states[\"sensor.c2\"].state');\n\n\nmsg.temp1 = temp1;\nmsg.temp2 = temp2;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":420,"wires":[["ea79752275df8cba"]]}]

Thanks. It works for getting the entity values and pass them on as msg.payload. A step in the right direction.
I can’t figure out how to set the topic to the variable from the list.
image

Instead of temperature, I would like it to be the name of entity using the list ie. “temperature” to be “sensor.hottub_heatpump_water_in_temp”.

Thanks, looking forward to seeing the flow.

There was a lot that could be removed from that sequence.
Not sure why you have both a loop and a inject on interval. That would mean it could write multiple lines that is duplicated.
I suggest just a poll state node and no loop.

[{"id":"1ac0022f482d1919","type":"function","z":"ebaa69a9.649708","name":"Set data","func":"var now = new Date();\n\nmsg.date =  now.getDate() + \"/\" + ('0' + (now.getMonth()+1)).slice(-2) + \"/\" + now.getFullYear() ;\nmsg.time =  ('0' + (now.getHours())).slice(-2) + \":\" + ('0' + (now.getMinutes())).slice(-2);\n\nvar states = global.get('homeassistant.homeAssistant.states');\n\n\nmsg.payload = {\n    \"date\" : msg.date,\n    \"time\" : msg.time,\n    \"heatpump_water_in_temp\" : states[\"sensor.hottub_heatpump_water_in_temp\"].state,\n    \"heatpump_water_out_temp\" : states[\"sensor.hottub_heatpump_water_out_temp\"].state,\n    \"daily_energy\" : states[\"sensor.hottub_daily_energy\"].state,\n    \"Ambient temp\" : states[\"sensor.hottub_heatpump_ambient_temp\"].state,\n\t\"hottub temp\" : states[\"climate.hottub_heater\"].attributes.current_temperature,\n\t\"temp feels like\" : states[\"sensor.openweathermap_feels_like_temperature\"].state,\n\t\"temp open weather map\" : states[\"sensor.openweathermap_temperature\"].state,\n\t\"hottub_electric_heater\" : states[\"switch.shelly1_98cdac2da2b2\"].state\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":680,"wires":[["fa3c0b589375760d"]]},{"id":"6b524e6858ec76d1","type":"poll-state","z":"ebaa69a9.649708","name":"","server":"4bbca37b.1700ec","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"updateinterval":"5","updateIntervalUnits":"minutes","outputinitially":false,"outputonchanged":false,"entity_id":"binary_sensor.hottub_heat_on_off","state_type":"str","halt_if":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"x":250,"y":680,"wires":[["1ac0022f482d1919"],[]]},{"id":"fa3c0b589375760d","type":"csv","z":"ebaa69a9.649708","name":"","sep":",","hdrin":false,"hdrout":"once","multi":"mult","ret":"\\n","temp":"date,time,heatpump_water_in_temp,heatpump_water_out_temp,daily_energy,Ambient temp,hottub temp,temp feels like,temp open weather map,hottub_electric_heater","skip":"0","strings":true,"include_empty_strings":false,"include_null_values":false,"x":670,"y":680,"wires":[["23fa32681c0bc9d2"]]},{"id":"23fa32681c0bc9d2","type":"file","z":"ebaa69a9.649708","name":"","filename":"/config/www/data_test.csv","appendNewline":false,"createDir":false,"overwriteFile":"false","encoding":"none","x":870,"y":680,"wires":[[]]},{"id":"4bbca37b.1700ec","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Here is my flow.

[{"id":"923de48b52bd4e38","type":"ping","z":"8fe8d010660b8493","protocol":"IPv4","mode":"triggered","name":"ping","host":"","timer":"20","inputs":1,"x":965,"y":345,"wires":[["d40fa323516aa82c"]]},{"id":"6be86cda9569458c","type":"function","z":"8fe8d010660b8493","name":"init payload","func":"msg.payload = [\n {\n \"host\":msg.ping_hosts[flow.get('host_count')].host,\n \"name\":msg.ping_hosts[flow.get('host_count')].name,\n \"timeout\":1000\n }\n]\ndelete msg.ping_hosts\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":345,"wires":[["923de48b52bd4e38"]]},{"id":"0ad124d3416b63b4","type":"ha-api","z":"8fe8d010660b8493","name":"sensor","server":"541ade28.b4a62","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"/api/states/{{entity_id}}","data":"","dataType":"json","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":965,"y":585,"wires":[["b0f043966ed43d47"]]},{"id":"d40fa323516aa82c","type":"function","z":"8fe8d010660b8493","name":"rearrange payload","func":"ping = msg.payload\nmsg.payload = [\n {\n \"host\":msg.ping.host,\n \"name\":msg.ping.name,\n \"timeout\":msg.ping.timeout,\n \"ping1\":ping\n }\n]\ndelete msg.ping\ndelete msg.topic\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":795,"y":405,"wires":[["c4283530c9d052a1"]]},{"id":"c4283530c9d052a1","type":"ping","z":"8fe8d010660b8493","protocol":"IPv4","mode":"triggered","name":"ping","host":"","timer":"20","inputs":1,"x":965,"y":405,"wires":[["a9df790ddbe9f207"]]},{"id":"a9df790ddbe9f207","type":"function","z":"8fe8d010660b8493","name":"rearrange payload","func":"ping = msg.payload\nmsg.payload = [\n {\n \"host\":msg.ping.host,\n \"name\":msg.ping.name,\n \"timeout\":msg.ping.timeout,\n \"ping1\":msg.ping.ping1,\n \"ping2\":ping\n }\n]\ndelete msg.ping\ndelete msg.topic\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":795,"y":465,"wires":[["76ed7daec89035a1"]]},{"id":"cb8eda481842d11e","type":"function","z":"8fe8d010660b8493","name":"rearrange payload","func":"ping = msg.payload\nmsg.payload = [\n {\n \"host\":msg.ping.host,\n \"name\":msg.ping.name,\n \"timeout\":msg.ping.timeout,\n \"ping1\":msg.ping.ping1,\n \"ping2\":msg.ping.ping2,\n \"ping3\":ping\n }\n]\ndelete msg.ping\ndelete msg.topic\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":795,"y":525,"wires":[["1147c65942a71bd5"]]},{"id":"76ed7daec89035a1","type":"ping","z":"8fe8d010660b8493","protocol":"IPv4","mode":"triggered","name":"ping","host":"","timer":"20","inputs":1,"x":965,"y":465,"wires":[["cb8eda481842d11e"]]},{"id":"07a2ee8734aac8ae","type":"function","z":"8fe8d010660b8493","name":"make final payload","func":"ping = msg.payload\nmsg.entity_id = sensor.ping_${msg.ping.name.toLowerCase().replace(/ /g, ‘_’ )};\npacketloss=0;\naverage = 0;\nif (msg.ping.ping1==false)\n{\n packetloss=1;\n}\nelse\n{\n average=msg.ping.ping1;\n}\n\nif (msg.ping.ping2==false)\n{\n packetloss++;\n}\nelse\n{\n average=average+msg.ping.ping2;\n}\n\nif (msg.ping.ping3==false)\n{\n packetloss++;\n}\nelse\n{\n average=average+msg.ping.ping3;\n}\n\nif (ping==false)\n{\n packetloss++;\n}\nelse\n{\n average=average+ping;\n}\n\nif (packetloss!=4)\n{\n average=average/(4-packetloss);\n}\npacketloss=packetloss*25\n\nmsg.payload = {\n data: {\n state: Date.now(),\n attributes: {\n 'name':msg.ping.name,\n 'host':msg.ping.host,\n 'ping1': msg.ping.ping1,\n 'ping2': msg.ping.ping2,\n 'ping3': msg.ping.ping3,\n 'ping4': ping,\n 'average': Math.floor(average),\n 'packetloss': packetloss,\n friendly_name: 'Ping '+msg.ping.name,\n icon: 'mdi:pulse'\n }\n }\n};\ndelete msg.ping\ndelete msg.topic\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":795,"y":585,"wires":[["0ad124d3416b63b4"]]},{"id":"1147c65942a71bd5","type":"ping","z":"8fe8d010660b8493","protocol":"IPv4","mode":"triggered","name":"ping","host":"","timer":"20","inputs":1,"x":965,"y":525,"wires":[["07a2ee8734aac8ae"]]},{"id":"8e0e518715bce137","type":"function","z":"8fe8d010660b8493","name":"set ping list","func":"msg.ping_hosts = [\n { \"name\":\"Google1\", \"host\":\"8.8.8.8\"},\n { \"name\":\"Google2\", \"host\":\"8.8.4.4\"}\n ]\nflow.set('ping_hosts_length',msg.ping_hosts.length)\nmsg.lengthhosts = msg.ping_hosts.length\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1030,"y":285,"wires":[["6be86cda9569458c"]]},{"id":"c431d2f9afc3c7a8","type":"inject","z":"8fe8d010660b8493","name":"start ping cycle","props":[],"repeat":"","crontab":"","once":true,"onceDelay":"30","topic":"","x":620,"y":285,"wires":[["8e4258bbc0d9ab2c"]]},{"id":"8e4258bbc0d9ab2c","type":"function","z":"8fe8d010660b8493","name":"initiate counter","func":"flow.set('host_count',0)\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":815,"y":285,"wires":[["8e0e518715bce137"]]},{"id":"b0f043966ed43d47","type":"function","z":"8fe8d010660b8493","name":"increase counter","func":"counter=flow.get('host_count')+1\nif (counter==flow.get('ping_hosts_length'))\n{\n counter=0\n}\nflow.set('host_count',counter)\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1125,"y":585,"wires":[["5770f799fa4a3c10"]]},{"id":"5770f799fa4a3c10","type":"delay","z":"8fe8d010660b8493","name":"2sec delay","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1225,"y":195,"wires":[["8e0e518715bce137"]]},{"id":"541ade28.b4a62","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","credentials":{"host":"","access_token":""}}]

It is just a flow that pick an item from the list in the node called “set ping list” and then pings it 4 times and post the results to a sensor with a name made from the name in the value in the list.
Then it takes the next value in the list and does the same.

You might not want a whole bunch of sensors, but you can easily see how I add attribute values to my sensors and then change it to your liking.

Thank you so much!!

@Hellis81 Very nice and clean solution - so many nodes reduced to just four. And Its a direct working replacement of what I had, thanks. This was what I was hoping for when making my clumsy solution.

@WallyR Thanks for sharing you flow - learning a lot from comparing.

Best wishes,
Kasper

1 Like