NEWS
tint remote (Müller Licht) - xy in RGB oder HEX
-
Hallo,
ich habe eine Tint dim remote control in mein System eingebunden und verzweifle gerade an der Farbausgabe. Die Fernbedienung gibt die Farbe als "colorx" und "colory" ausgegeben. Die beiden Werte bewegen sich jeweils im 10.000er Bereich.
Ich versuche das nun irgendwie in HEX umzurechnen, komme da aber nicht weiter. Ich habe unter [[https://stackoverflow.com/questions/22894498/philips-hue-convert-xy-from-api-to-hex-or-rgb](Link Adresse)](Link Adresse) folgenden Code gefunden und als "JS-Funktion mit Ergebnis" versucht einzubinden:function xyBriToRgb(x, y, bri) { z = 1.0 - x - y; Y = bri / 255.0; // Brightness of lamp X = (Y / y) * x; Z = (Y / y) * z; r = X * 1.612 - Y * 0.203 - Z * 0.302; g = -X * 0.509 + Y * 1.412 + Z * 0.066; b = X * 0.026 - Y * 0.072 + Z * 0.962; r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055; g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055; b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055; maxValue = Math.max(r,g,b); r /= maxValue; g /= maxValue; b /= maxValue; r = r * 255; if (r < 0) { r = 255 }; g = g * 255; if (g < 0) { g = 255 }; b = b * 255; if (b < 0) { b = 255 }; r = Math.round(r).toString(16); g = Math.round(g).toString(16); b = Math.round(b).toString(16); if (r.length < 2) r="0"+r; if (g.length < 2) g="0"+g; if (b.length < 2) b="0"+r; rgb = "#"+r+g+b; return rgb; }
Im Blockly rechne ich den colorx und colory Wert noch durch 100.000, da das Script für HUE ist und von dort Werte mit 0,.. kommen.

Ich erhalte aber nur ein undefined, komme aber auch ehrlich gesagt mit der Debug-Funktion nicht klar.
Daher die Frage, ob mich jemand auf die richtigen Weg bzgl. des geschilderten Fehlers briungen kann oder eine andere Idee hat, wie ich XY in HEX konvertieren kann.
Danke
Viele Grüße
Ronny -
Hallo,
ich habe eine Tint dim remote control in mein System eingebunden und verzweifle gerade an der Farbausgabe. Die Fernbedienung gibt die Farbe als "colorx" und "colory" ausgegeben. Die beiden Werte bewegen sich jeweils im 10.000er Bereich.
Ich versuche das nun irgendwie in HEX umzurechnen, komme da aber nicht weiter. Ich habe unter [[https://stackoverflow.com/questions/22894498/philips-hue-convert-xy-from-api-to-hex-or-rgb](Link Adresse)](Link Adresse) folgenden Code gefunden und als "JS-Funktion mit Ergebnis" versucht einzubinden:function xyBriToRgb(x, y, bri) { z = 1.0 - x - y; Y = bri / 255.0; // Brightness of lamp X = (Y / y) * x; Z = (Y / y) * z; r = X * 1.612 - Y * 0.203 - Z * 0.302; g = -X * 0.509 + Y * 1.412 + Z * 0.066; b = X * 0.026 - Y * 0.072 + Z * 0.962; r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055; g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055; b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055; maxValue = Math.max(r,g,b); r /= maxValue; g /= maxValue; b /= maxValue; r = r * 255; if (r < 0) { r = 255 }; g = g * 255; if (g < 0) { g = 255 }; b = b * 255; if (b < 0) { b = 255 }; r = Math.round(r).toString(16); g = Math.round(g).toString(16); b = Math.round(b).toString(16); if (r.length < 2) r="0"+r; if (g.length < 2) g="0"+g; if (b.length < 2) b="0"+r; rgb = "#"+r+g+b; return rgb; }
Im Blockly rechne ich den colorx und colory Wert noch durch 100.000, da das Script für HUE ist und von dort Werte mit 0,.. kommen.

Ich erhalte aber nur ein undefined, komme aber auch ehrlich gesagt mit der Debug-Funktion nicht klar.
Daher die Frage, ob mich jemand auf die richtigen Weg bzgl. des geschilderten Fehlers briungen kann oder eine andere Idee hat, wie ich XY in HEX konvertieren kann.
Danke
Viele Grüße
Ronny@le-r-kelly
Hab es selbst hingekriegt. Ich hatte mich nie mit den Funktionen beschäftigt. Jetzt weiß ich, dass die Syntax falsch war. Falls es jemand benötigt, anbei das funktionierende Skript:
let z = 1.0 - x - y; let Y = bri / 255.0; // Brightness of lamp let X = (Y / y) * x; let Z = (Y / y) * z; let r = X * 1.612 - Y * 0.203 - Z * 0.302; let g = -X * 0.509 + Y * 1.412 + Z * 0.066; let b = X * 0.026 - Y * 0.072 + Z * 0.962; r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055; g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055; b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055; maxValue = Math.max(r,g,b); r /= maxValue; g /= maxValue; b /= maxValue; r = r * 255; if (r < 0) { r = 255 }; g = g * 255; if (g < 0) { g = 255 }; b = b * 255; if (b < 0) { b = 255 }; r = Math.round(r).toString(16); g = Math.round(g).toString(16); b = Math.round(b).toString(16); if (r.length < 2) r="0"+r; if (g.length < 2) g="0"+g; if (b.length < 2) b="0"+r; rgb = "#"+r+g+b; return rgb
Grüße
Ronny
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden