ioBroker.yahka icon indicating copy to clipboard operation
ioBroker.yahka copied to clipboard

Support for color.CIE

Open georgbachmann opened this issue 5 years ago • 13 comments

I have an IKEA Tradfri light that I've connected via a ConBee II Stick and the deconz app. If shows it's hue and saturation to ioBroker, but those have no effects. But it also has a property color.CIE, which is a x/y coordinate in the range of 0..1. Is it possible to somehow support those using the yahka plugin? Hope you understand what I mean... I am quite new to ioBroker...

georgbachmann avatar Jun 15 '19 16:06 georgbachmann

Hallo!

Genau das gleiche Problem hab ich leider auch. Ich hab eine IKEA RGB Lampe über einen Cobee II Stick importiert. Es funktioniert alles bis auf die Farbtemperatur und die Hue und Saturation. Ist es irgendwie möglich es so zu bauen das die Lampe auch übers Homekit die Farbe ändert? Wenn möglich natürlich ohne Scripte bauen zu müssen?

Ich denke das Problem haben fast alle Anwender die Phillips oder IKEA RGB leuchten benutzen.

Wäre super wenn ihr da einen Workaround schreiben könntet 😉

lokus84 avatar Jan 20 '20 08:01 lokus84

Hi @georgbachmann @lokus84,

bedeutet mit ConBee II und Deconz habt ihr nicht RGB-HEX (#111111) wie hier beschrieben, sondern CIE?

💣 🧠 😖 🤯

nicoh88 avatar Jun 08 '20 21:06 nicoh88

Leider, keine Antwort. Schließe Issue!
Unfortunately, no answer. Close Issue!

nicoh88 avatar Oct 26 '20 08:10 nicoh88

I würde diesen issue gern wieder aufmachen. IoBroker/Deconz bzw. Die IKEA Lampe verwendet CIE zur Farbkodierung. Wäre ja schön, wenn das direkt in yahka unterstützt würde. Gibt bestimmt viele solche Lampen im Einsatz.

bellagio66 avatar Nov 07 '20 21:11 bellagio66

Ich habe genau das gleiche Problem. Habe die Lidl RGBW Lampen (E27) und konnte bisher alles über yahka und iobroker steuern. Nur leider gibt die Homekit-App bei der Farbe einen Wert von 0...255 aus, die Lampe will aber einen x,y CIE-Wert haben. Kann man das über ein Skript umwandeln oder sowas?

SliVeBurnA avatar Dec 25 '20 09:12 SliVeBurnA

Das ist der Code, den ich für die Umrechnung verwendet habe. Ein bissl kompliziert, aber funktioniert. "deconz.1.lights.bc33acfffea074f5" ist die Ikea-Lampe

function hslToRgb() { C = (1 - Math.abs(2 * l - 1)) * s; var hue = h / 60; X = C * (1 - Math.abs(hue % 2 - 1)); r = g = b = 0; if (hue >= 0 && hue < 1) { r = C; g = X; } else if (hue >= 1 && hue < 2) { r = X; g = C; } else if (hue >= 2 && hue < 3) { g = C; b = X; } else if(hue >= 3 && hue < 4) { g = X; b = C; } else if (hue >= 4 && hue < 5) { r = X; b = C; } else { r = C; b = X; } m = l - C / 2; r += m; g += m; b += m; r = Math.round(r255.0); g = Math.round(g255.0); b = Math.round(b*255.0); // return [Math.round(r), Math.round(g), Math.round(b)]; }

/**

  • Converts RGB color space to CIE color space

  • @param {Number} r ed

  • @param {Number} g reen

  • @param {Number} b lue

  • @return {Array} Array that contains the CIE color values for x and y */ function rgbtocie() { //Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device r = (r > 0.04045) ? Math.pow((r + 0.055) / (1.0 + 0.055), 2.4) : (r / 12.92); g = (g > 0.04045) ? Math.pow((g + 0.055) / (1.0 + 0.055), 2.4) : (g / 12.92); b = (b > 0.04045) ? Math.pow((b + 0.055) / (1.0 + 0.055), 2.4) : (b / 12.92);

    //RGB values to XYZ using the Wide RGB D65 conversion formula var X = r * 0.664511 + g * 0.154324 + b * 0.162028; var Y = r * 0.283881 + g * 0.668433 + b * 0.047685; var Z = r * 0.000088 + g * 0.072310 + b * 0.986039;

    //Calculate the xy values from the XYZ values x = (X / (X + Y + Z)).toFixed(4); y = (Y / (X + Y + Z)).toFixed(4);

    if (isNaN(x)) x = 0;

    if (isNaN(y)) y = 0; // return [x, y]; }

// Bei Farbänderung oder Helligkeitsänderung //on({id: 'deconz.0.lights.bc33acfffea074f5.hue', change: "ne"}, function (obj) { on({id: new RegExp('deconz\.1\.lights\.bc33acfffea074f5\.hue' + "|" + 'deconz\.1\.lights\.bc33acfffea074f5\.sat'), change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val;

h = getState("deconz.1.lights.bc33acfffea074f5.hue").val; s = getState("deconz.1.lights.bc33acfffea074f5.sat").val/100; l = getState("deconz.1.lights.bc33acfffea074f5.bri").val/255;

hslToRgb(); setState("deconz.1.lights.bc33acfffea074f5.Rot", r); setState("deconz.1.lights.bc33acfffea074f5.Grün", g); setState("deconz.1.lights.bc33acfffea074f5.Blau", b); rgbtocie() setState("deconz.1.lights.bc33acfffea074f5.xy", x+","+y); });

bellagio66 avatar Dec 27 '20 10:12 bellagio66

Hi bellagio66,

kannst du erklären wie das Script im Iobroker angelegt wird. Bzw. über welche Datenpunkte dann die Farbe gesteuert werden kann?

Danke

kevin1706 avatar Apr 06 '21 18:04 kevin1706

Hi! Das täte mich auch interessieren. Wenn ich das einfach als JavaScript einfüge, bekomme ich unzähliche Compilerfehler... Please help :-) Thomas

thogens avatar Apr 08 '21 13:04 thogens

Hi. Für das JavaScript benötigt man natürlich den JavaScript Adapter in ioBroker. Einfach neues Script anlegen und die Funktionen kopieren. Die Aufrufe müsst ihr ggf. anpassen und die Variablen anlegen, entweder im script oder Manuell in ioBroker. var h, s, l, r, g, b, x, y habe ich im script verwendet. Die Ikea Lampe steuere ich über einen conbee2 Stick. Die Objekt ID für die Farbe heißt xy. Nur die muss letztendlich gesetzt werden. Viel Erfolg

bellagio66 avatar Apr 08 '21 21:04 bellagio66

die Datenpunkte Rot,Gelb,Grün gibt es bei mir nicht einzeln. hast du dafür eine Lösung @bellagio66

Fredi009sg avatar Aug 30 '21 12:08 Fredi009sg

Eine volle Unterstützung der Farbsteuerung von Ikea Leuchten über Yahka wäre spitze!

HannesMC avatar Dec 15 '21 21:12 HannesMC

Also ich habe das gleiche Problem:

deconz mit Tradfri Color will XY, Yahka gibt HSV aus. Ich kann das Skript von @bellagio66 nehmen, aber das funktioniert bei mir nur mit brightness < 80% ca. Wenn die Lampe heller eingestellt ist kommt beim RGB Wert immer 255,255,255 also weiß raus, was dann die Lampe auch anzeigt.

w-marco avatar Mar 15 '22 16:03 w-marco