Leuchtmittel dimmbar mit Farbe _ Philips Hue Color LCT001 - jensweigele/ioBroker.yahka GitHub Wiki
Im Beispiel handelte es sich um eine Philips Hue White & Color Ambiance E27 LED Lampe (LCT001) welcher über den ZigBee Adapter angebunden ist.
🚨 Die Characteristics Hue
UND ColorTemperature
können aktuell nicht zusammen konfiguriert werden. Entweder man kann die Farbe steuern oder die Farbtemperatur, beides zusammen führt zu einem Anzeige Bug in HomeKit - die 6 gespeicherten Farben werden ständig überschrieben oder die Farben / Temperaturen werden nicht korrekt eingestellt. Issue #76
Es müssen zwei Variablen / Objekte in ioBroker angelegt werden:
- varSchlafzimmerTischlampeHue
- varSchlafzimmerTischlampeSaturation
Service-Typ: Lightbulb
Characteristic: On
InOut: ioBroker.State
State: zigbee.0.0017880100d9b0aa.state
Conversion: passthrough
Characteristic: Brightness
InOut: ioBroker.State
State: zigbee.0.0017880100d9b0aa.brightness
Conversion: passthrough
Characteristic: Hue
InOut: ioBroker.State
State: 0_userdata.0.beleuchtung.varSchlafzimmerTischlampeHue
Conversion: passthrough
Characteristic: Hue
InOut: ioBroker.State
State: 0_userdata.0.beleuchtung.varSchlafzimmerTischlampeSaturation
Conversion: passthrough
Nun brauchen wir noch ein Skript was aus unseren Variablen "varSchlafzimmerTischlampeHue" und "varSchlafzimmerTischlampeSaturation" den HEX-Wert für den Zigbee-Color-Datenpunkt berechnet. (lightbulb-philips-color-js.txt)
In den ersten 5 Zeilen des Skripts müssen drei Datenpunkte ausgetauscht werden:
0_userdata.0.beleuchtung.varSchlafzimmerTischlampeHue
in eure Hue-Variable ändern, welche ihr in YAHKA hinterlegt habt0_userdata.0.beleuchtung.varSchlafzimmerTischlampeSaturation
in eure Saturation-Variable ändern, welche ihr in YAHKA hinterlegt habtzigbee.0.0017880100d9b0aa.color
in euren Zigbee-Color Datenpunkt eures Leuchtmittels
on({id:"0_userdata.0.beleuchtung.varSchlafzimmerTischlampeHue", ack: false, change: 'any'}, function (obj) {
var hue = parseInt(obj.state.val);
var sat = parseInt(getState("0_userdata.0.beleuchtung.varSchlafzimmerTischlampeSaturation").val);
var res = hsvToRgb(hue, sat, 100);
setRGB(res[0], res[1], res[2], "zigbee.0.0017880100d9b0aa.color");
});
function setRGB(r, g, b, id){
var val = ''+('00'+r.toString(16)).slice(-2)+('00'+g.toString(16)).slice(-2)+('00'+b.toString(16)).slice(-2);
setState(id, val);
}
function hsvToRgb(h, s, v) {
var r, g, b;
var i;
var f, p, q, t;
// Make sure our arguments stay in-range
h = Math.max(0, Math.min(360, h));
s = Math.max(0, Math.min(100, s));
v = Math.max(0, Math.min(100, v));
// We accept saturation and value arguments from 0 to 100 because that's
// how Photoshop represents those values. Internally, however, the
// saturation and value are calculated from a range of 0 to 1. We make
// That conversion here.
s /= 100;
v /= 100;
if(s === 0) {
// Achromatic (grey)
r = g = b = v;
return [
Math.round(r * 255),
Math.round(g * 255),
Math.round(b * 255)
];
}
h /= 60; // sector 0 to 5
i = Math.floor(h);
f = h - i; // factorial part of h
p = v * (1 - s);
q = v * (1 - s * f);
t = v * (1 - s * (1 - f));
switch(i) {
case 0:
r = v;
g = t;
b = p;
break;
case 1:
r = q;
g = v;
b = p;
break;
case 2:
r = p;
g = v;
b = t;
break;
case 3:
r = p;
g = q;
b = v;
break;
case 4:
r = t;
g = p;
b = v;
break;
default: // case 5:
r = v;
g = p;
b = q;
}
return [
Math.round(r * 255),
Math.round(g * 255),
Math.round(b * 255)
];
}
Anpassungen vornehmen, Skript speichern und starten. FERTIG!