Convert Loxone color string to Hue RGB
This flow converts a Loxone hsv(...) or temp(...) string from a LightControllerV2 directly to a RGB array.
You will need these nodes:
- node-red-contrib-loxone
- node-red-contrib-huemagic
- node-red-contrib-color-convert
In Loxone:
- Configure a LightControllerV2
- Set the outputs to RGB
In Node-RED
- Place a Loxone "control in" node and configure it with the LightControllerV2 and state color
- Place a "Hue Lamp" or "Hue Group" node
- Connect both with this flow. Loxone on the input and Hue on the output.
Loxone and Hue are now connected. The color and brightness setting in Loxone is then transferred to Hue.
[{"id":"7fa10a6e.8bda14","type":"subflow","name":"Loxone color string to Hue RGB","info":"","category":"","in":[{"x":327.5,"y":307,"wires":[{"id":"616f6d48.4176b4"}]}],"out":[{"x":1237.5,"y":319,"wires":[{"id":"21e6122.56392ee","port":0},{"id":"527b719d.025c7","port":0}]}]},{"id":"52121dad.3e9224","type":"color-convert","z":"7fa10a6e.8bda14","input":"hsv","output":"rgb","outputType":"array","x":898.5,"y":251,"wires":[["21e6122.56392ee"]]},{"id":"c0a01e2b.be63","type":"function","z":"7fa10a6e.8bda14","name":"split hsv","func":"msg.payload = msg.payload.replace(\"hsv(\", \"\").replace(\")\", \"\").split(\",\");\nflow.set(\"brightness\", msg.payload[2]);\nreturn msg;","outputs":1,"noerr":0,"x":732.5,"y":251,"wires":[["52121dad.3e9224"]]},{"id":"21e6122.56392ee","type":"function","z":"7fa10a6e.8bda14","name":"RGB > msg","func":"var brightness = flow.get(\"brightness\");\nif (brightness == '0') {\n return { payload: { on: false } };\n}\nreturn { payload: { on: true, rgb: msg.payload, brightness: brightness } };","outputs":1,"noerr":0,"x":1078.5,"y":251,"wires":[[]]},{"id":"616f6d48.4176b4","type":"switch","z":"7fa10a6e.8bda14","name":"hsv or temp","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"hsv(","vt":"str"},{"t":"cont","v":"temp(","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":518.5,"y":310,"wires":[["c0a01e2b.be63"],["fd3e393c.a0cbb8"]]},{"id":"fd3e393c.a0cbb8","type":"function","z":"7fa10a6e.8bda14","name":"spilt temp","func":"msg.payload = msg.payload.replace(\"temp(\", \"\").replace(\")\", \"\").split(\",\");\nreturn msg;","outputs":1,"noerr":0,"x":730.5,"y":368,"wires":[["527b719d.025c7"]]},{"id":"527b719d.025c7","type":"function","z":"7fa10a6e.8bda14","name":"Temp > RGB > msg","func":"var brightness = parseInt(msg.payload[0]);\nif (brightness == '0') {\n return { payload: { on: false } };\n}\n\nvar kelvin = parseFloat(msg.payload[1]);\nvar temp = kelvin / 100;\nvar red, green, blue;\n\nif (temp <= 66) { \n red = 255; \n\n green = temp;\n green = 99.4708025861 * Math.log(green) - 161.1195681661;\n\n if (temp <= 19) {\n blue = 0;\n } \n else {\n blue = temp - 10;\n blue = 138.5177312231 * Math.log(blue) - 305.0447927307;\n }\n} \nelse {\n red = temp - 60;\n red = 329.698727446 * Math.pow(red, -0.1332047592);\n\n green = temp - 60;\n green = 288.1221695283 * Math.pow(green, -0.0755148492 );\n\n blue = 255;\n\n}\n\nred = Math.round(Math.min(Math.max(red, 0), 255));\ngreen = Math.round(Math.min(Math.max(green, 0), 255));\nblue = Math.round(Math.min(Math.max(blue, 0), 255));\n\nreturn { payload: { on: true, rgb: [ red, green, blue ], brightness: brightness } };","outputs":1,"noerr":0,"x":920.5,"y":368,"wires":[[]]}]