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 habt
  • 0_userdata.0.beleuchtung.varSchlafzimmerTischlampeSaturation in eure Saturation-Variable ändern, welche ihr in YAHKA hinterlegt habt
  • zigbee.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!