ich habe 2 Homegramme geschrieben, welche die Farbtemperatur meiner Hue Deckenlampe (Zigbee) regeln.
Beispiel:
HG1: Wenn Schalter 1 gedrückt wird - und Farbtemperatur der Lampe ist auf 3500 - dann setze die Farbtemperatur der Lampe auf 4502.
HG2: Wenn Schalter 1 gedrückt wird - und Farbtemperatur der Lampe ist auf 4502 - dann setze die Farbtemperatur der Lampe auf 3500.
Immer wenn ich den Schalter drücke ändert sich so die Farbtemperatur.
Das ganze funktioniert auch eine ganze Zeit lang.
Problem: Irgendwann steht die Farbtemperatur plötzlich aber nicht mehr auf 4502 sondern auf 4504. Damit funktioniert dann logischerweise mein Homeegramm nicht mehr.
Wie kann sich der Wert für die Farbtemperatur von selbst von 4502 auf 4504 ändern ?
Wenn ich jetzt einen Wert von 4600 setzte ändert sich auch dieser irgendwann von selbst auf 4602.
Der ZigBee Standard definiert die Farbtemperatur wie folgt:
The ColorTemperature attribute contains a scaled inverse of the current value of the color temperature. It is updated as fast as practical during commands that change the color.
The color temperature value in Kelvins shall be related to the ColorTemperature attribute by the relationship:
Color temperature = 1,000,000 / ColorTemperature in the range 1 to 65279 inclusive, giving a color temperature range from 1,000,000 Kelvins to 15.32 Kelvins).
Wenn wir also eine Farbtemperatur von 4502 versenden wollen müssen wir in Wirklichkeit 222,1235006664 schicken. Gebrochene Zahlen können nur bedingt genau digital übertragen werden, das bedeutet es wird gerundet. Auf der Seite von homee wird gerundet und auf der Seite der Lampe ebenfalls. Daher kann es dazu kommen dass es da kleine Unterschiede gibt. Wenn homee also im Heartbeat irgendwann mal den Zustand der Lampe abfragt, kann ein minimal anderer Wert dabei zustande kommen. Die Homeegramme funktionieren so dann natürlich richtigerweise nicht. Da müsstest du dir etwas anderes überlegen. In Zukunft wird es noch die „ist nicht“ Bedingung geben, vielleicht kann man damit etwas clevereres machen.