Node-red-contrib-wled2 is not working anymore after latest update WLED

I do use node-red-contrib-wled2 for controlling a LED-ring with ESPHome.
I do use it to give signals for events.
It worked very nice until latest update of the WLED integration.
After a restart of the WLED device it is working for a little time. After that The ledring is only showing the pattern in bright white but not the color anymore of a pattern until I do a restart of the WLED.
node-red-contrib-wled2 is not maintained anymore.
Is there an other option to control WLED and using patterns in NodeRed?

Thanks

EDIT:
I learned that in the WLED 0.15.3 the API is changed and sometimes the segment is changed from 0 to something else.
I added a function node before the WELD2 node to force to use segment 0:

// kopieer bestaande payload van WLED2 node

msg.payload = msg.payload || {};

// voeg segment 0 toe

msg.payload.seg = [{ id: 0 }];

return msg;

I hope this will work

EDIT 2:
No is not working. I’m not able to select color in HA that choice is not available only effect

I don’t know what to do

I love wled but find it unruly when trying to automate it. I rely heavily on presets mainly because I use different segment configurations.

Thanks for the answer.
How to create presets?
I do have the feeling that the integration itself is buggy.
It differents all the time
Then I can only choose effect, then color and effect, then it shows color and effects, but color is not changig when choosing different color
All within a minute and not changing anything

I do receive an error in NodeRed:

msg : error
error
name: "HomeAssistantError"
message: "Invalid response from WLED API: (503, {'error': 3})"
stack: string
HomeAssistantError: Invalid response from WLED API: (503, {'error': 3})
    at p (/data/node_modules/node-red-contrib-home-assistant-websocket/dist/common/errors/inputErrorHandler.js:1:1032)
    at m (/data/node_modules/node-red-contrib-home-assistant-websocket/dist/common/errors/inputErrorHandler.js:1:1318)
    at #t (/data/node_modules/node-red-contrib-home-assistant-websocket/dist/common/controllers/InputOutputController.js:1:1340)

The presets are created through the wled web gui. General color temperature and brightness is handled by adaptive.

Since I rely on the ‘on chip’ presets I created this flow that will find any wled in ha and then back up the config and preset file.

[{"id":"c9cdf4624b107923","type":"function","z":"0126d250209d4133","name":"Create requests","func":"let array = msg.payload;\nlet servers = [];\n\nfor (let i = 0; i < array.length; i++) {\n    const element = array[i].state;\n    servers.push(element);\n    \n}\n\nlet i = 0;\nlet x = 0;\nvar delay = 0;\n\nfunction getPresetConfig() {         \n    setTimeout(function () {   \n        if (i < servers.length) {\n            let serverAddress = servers[i];\n            msg.url = \"http://\" + serverAddress + \"/edit?download=/presets.json\";\n            node.send(msg);\n            node.status({fill:\"green\",shape:\"dot\",text: \"preset req \" + serverAddress});\n            delay = 5000;\n            i++;\n            getPresetConfig();             \n        }\n        else if (i >= servers.length && i < servers.length*2) {\n            let serverAddress = servers[x];\n            msg.url = \"http://\" + serverAddress + \"/edit?download=/cfg.json\";\n            node.send(msg);\n            node.status({ fill: \"green\", shape: \"dot\", text: \"config req \" + serverAddress })\n            i++;\n            x++;\n            getPresetConfig()\n        }\n        else {         \n            node.status({ fill: \"green\", shape: \"dot\", text: \"done\" })\n            node.done\n        }                       \n    }, delay)\n}\n\ngetPresetConfig();                   ","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":80,"wires":[["1478da51e18492f4"]]},{"id":"1478da51e18492f4","type":"http request","z":"0126d250209d4133","name":"Get presets/cfg","method":"GET","ret":"txt","paytoqs":"body","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":680,"y":80,"wires":[["4a7be5914f598c5a"]]},{"id":"c9293467f3a7f0d7","type":"file","z":"0126d250209d4133","name":"Save preset/config","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1030,"y":80,"wires":[[]]},{"id":"4a7be5914f598c5a","type":"change","z":"0126d250209d4133","name":"format save","rules":[{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"statusCode","pt":"msg"},{"t":"delete","p":"headers","pt":"msg"},{"t":"delete","p":"responseUrl","pt":"msg"},{"t":"delete","p":"retry","pt":"msg"},{"t":"delete","p":"redirectList","pt":"msg"},{"t":"delete","p":"_msgid","pt":"msg"},{"t":"change","p":"url","pt":"msg","from":"http://","fromt":"str","to":"/media/wled/","tot":"str"},{"t":"change","p":"url","pt":"msg","from":"/edit?download=/","fromt":"str","to":"_","tot":"str"},{"t":"move","p":"url","pt":"msg","to":"filename","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":80,"wires":[["c9293467f3a7f0d7"]]},{"id":"0eeb14d984affba2","type":"ha-get-entities","z":"0126d250209d4133","name":"Get wled IPs","server":"","version":1,"rules":[{"property":"attributes.friendly_name","logic":"is","value":"WLED","valueType":"re"},{"property":"attributes.friendly_name","logic":"is","value":"IP","valueType":"re"}],"outputType":"array","outputEmptyResults":false,"outputLocationType":"msg","outputLocation":"payload","outputResultsCount":1,"x":310,"y":80,"wires":[["c9cdf4624b107923","4b3c6bd18e250073"]]},{"id":"a56f494492557eb3","type":"inject","z":"0126d250209d4133","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":80,"wires":[["0eeb14d984affba2"]]},{"id":"05f3197309c81de8","type":"global-config","env":[],"modules":{"node-red-contrib-home-assistant-websocket":"0.80.3"}}]
[quote="Mikefila, post:4, topic:961750"]
`[{"id":"c9cdf4624b107923","type":"function","z":"0126d250209d4133","name":"Create requests","func":"let array = msg.payload;\nlet servers = [];\n\nfor (let i = 0; i < array.length; i++) {\n    const element = array[i].state;\n    servers.push(element);\n    \n}\n\nlet i = 0;\nlet x = 0;\nvar delay = 0;\n\nfunction getPresetConfig() {         \n    setTimeout(function () {   \n        if (i < servers.length) {\n            let serverAddress = servers[i];\n            msg.url = \"http://\" + serverAddress + \"/edit?download=/presets.json\";\n            node.send(msg);\n            node.status({fill:\"green\",shape:\"dot\",text: \"preset req \" + serverAddress});\n            delay = 5000;\n            i++;\n            getPresetConfig();             \n        }\n        else if (i >= servers.length && i < servers.length*2) {\n            let serverAddress = servers[x];\n            msg.url = \"http://\" + serverAddress + \"/edit?download=/cfg.json\";\n            node.send(msg);\n            node.status({ fill: \"green\", shape: \"dot\", text: \"config req \" + serverAddress })\n            i++;\n            x++;\n            getPresetConfig()\n        }\n        else {         \n            node.status({ fill: \"green\", shape: \"dot\", text: \"done\" })\n            node.done\n        }                       \n    }, delay)\n}\n\ngetPresetConfig();                   ","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":80,"wires":[["1478da51e18492f4"]]},{"id":"1478da51e18492f4","type":"http request","z":"0126d250209d4133","name":"Get presets/cfg","method":"GET","ret":"txt","paytoqs":"body","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":680,"y":80,"wires":[["4a7be5914f598c5a"]]},{"id":"c9293467f3a7f0d7","type":"file","z":"0126d250209d4133","name":"Save preset/config","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1030,"y":80,"wires":[[]]},{"id":"4a7be5914f598c5a","type":"change","z":"0126d250209d4133","name":"format save","rules":[{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"statusCode","pt":"msg"},{"t":"delete","p":"headers","pt":"msg"},{"t":"delete","p":"responseUrl","pt":"msg"},{"t":"delete","p":"retry","pt":"msg"},{"t":"delete","p":"redirectList","pt":"msg"},{"t":"delete","p":"_msgid","pt":"msg"},{"t":"change","p":"url","pt":"msg","from":"http://","fromt":"str","to":"/media/wled/","tot":"str"},{"t":"change","p":"url","pt":"msg","from":"/edit?download=/","fromt":"str","to":"_","tot":"str"},{"t":"move","p":"url","pt":"msg","to":"filename","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":80,"wires":[["c9293467f3a7f0d7"]]},{"id":"0eeb14d984affba2","type":"ha-get-entities","z":"0126d250209d4133","name":"Get wled IPs","server":"","version":1,"rules":[{"property":"attributes.friendly_name","logic":"is","value":"WLED","valueType":"re"},{"property":"attributes.friendly_name","logic":"is","value":"IP","valueType":"re"}],"outputType":"array","outputEmptyResults":false,"outputLocationType":"msg","outputLocation":"payload","outputResultsCount":1,"x":310,"y":80,"wires":[["c9cdf4624b107923","4b3c6bd18e250073"]]},{"id":"a56f494492557eb3","type":"inject","z":"0126d250209d4133","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":80,"wires":[["0eeb14d984affba2"]]},{"id":"05f3197309c81de8","type":"global-config","env":[],"modules":{"node-red-contrib-home-assistant-websocket":"0.80.3"}}]`
[/quote]

Thanks again. This is highlevel NodeRed for me :smile:

1 Like

There is no configuration necessary. Just deploy and hit the inject to create the backup. You can set the inject node to fire on a regular basis. The file are stored in media/wled.

I did find a workaround by restarting the WLED device after every action