Hello everyone,
I am very new to Node Red and with help from the HA forum ( How to automatically retrieve device name from entity_id? - #7 by AleXSR7001 - Node-RED - Home Assistant Community ), I am trying to solve a problem.
So, I have a global defined as homeassistant.config. This is built as follows
inputdata: object
areas: array[7]
devices: array [25]
entities: array[144]
[0 … 9]
0: object
config_entry_id: "d25740dd25bb73"
device_id: "f6af38b97d9"
area_id: null
disabled_by: "integration"
entity_id: "sensor.ambient_light"
1: object
config_entry_id: "d2dd25bb73"
device_id: "f6af7d9"
area_id: null
disabled_by: "integration"
entity_id: "sensor.main_light"
and so on.
Now I am trying to find a string inside the "entity_id". So let's say the string is "ambient". I want it to find "ambient" in entity_id, then from that object get the device_id, then search through the array of devices and return the friendly_name of the matching device.
Probably sounds simple to all of you, but is proving to be complicated to me.
I am unable to find the string "ambient", so I am failing with step one already
So, here is where I am at right now.
[{"id":"aa642c6f.01afa","type":"tab","label":"Flow 4","disabled":false,"info":""},{"id":"ce4e8cef.b3c4a","type":"inject","z":"aa642c6f.01afa","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"ambient","payloadType":"str","x":90,"y":360,"wires":[["a328617b.422e"]]},{"id":"744fa604.4422c8","type":"function","z":"aa642c6f.01afa","name":"exact search (exists true/false)","func":"var findWhat = msg.payload;\nvar data = msg.inputdata;\nmsg.payload = data.entities.filter(e => {\n try {\n var conditions = e.conditions[0].condition\n if(conditions.includes(findWhat)) {\n return true;\n }\n } catch {\n \n }\n return false\n});\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":360,"wires":[["d11e148d.d87bb8","30041c9c.853d44"]]},{"id":"a328617b.422e","type":"change","z":"aa642c6f.01afa","name":"","rules":[{"t":"set","p":"inputdata","pt":"msg","to":"homeassistant.config","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":360,"wires":[["744fa604.4422c8","607e9988.3398c8"]]},{"id":"d11e148d.d87bb8","type":"debug","z":"aa642c6f.01afa","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":1050,"y":360,"wires":[]},{"id":"607e9988.3398c8","type":"function","z":"aa642c6f.01afa","name":"partial search (exists true/false) (case insensitive)","func":"var findWhat = msg.payload.toLowerCase();\nvar data = msg.inputdata;\nmsg.payload = data.entities.filter(e => {\n try {\n var conditions = e.conditions[0].condition;\n var found = conditions.some(e => {\n return (e && e.length) ? e.toLowerCase().includes(findWhat) : false\n })\n return found;\n } catch {\n }\n return null\n});\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":420,"wires":[["c8cd13ba.4b378","7c039174.c795d"]]},{"id":"c8cd13ba.4b378","type":"debug","z":"aa642c6f.01afa","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":1090,"y":420,"wires":[]},{"id":"30041c9c.853d44","type":"switch","z":"aa642c6f.01afa","name":"Found?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":810,"y":320,"wires":[["19b7b63f.b0b46a"]]},{"id":"19b7b63f.b0b46a","type":"debug","z":"aa642c6f.01afa","name":"first found item","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":980,"y":320,"wires":[]},{"id":"7c039174.c795d","type":"switch","z":"aa642c6f.01afa","name":"Found?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":800,"y":480,"wires":[["f6d949dd.411978"]]},{"id":"f6d949dd.411978","type":"debug","z":"aa642c6f.01afa","name":"first found item","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":970,"y":480,"wires":[]}]
but the message is always undefined, so I am guessing that my way of searching is not appropriate for the input data.
Could someone here maybe help me find a solution?
Could the problem be the ‘catch’ command. I just saw that the editor states that the optional catch binding is only available in ES10.
Thank you all for your help.
Alex