Hallo!
Dieses Thema betrifft die Fähigkeit, ein schrittweises Einschalten einer Hue-Glühbirne zu programmieren, wie in diesem Issue beschrieben.
Ich hatte nicht viel Zeit, um mich damit zu beschäftigen, aber ich habe einen ersten funktionierenden Entwurf.
Ich denke, dass eine Diskussion notwendig ist, bevor ich weitermache und alles erledige, was nötig ist, damit der PR gültig ist.
Die Punkte, die zur Diskussion stehen:
- Bisher gibt es im Projekt keine „Szenerie“-Funktion, die mit einer Szene verbunden ist. Bisher besteht jede Szene aus einer Reihe von Grundaktionen wie dem Einschalten eines Lichts oder dem Betätigen eines Schalters. Ein Fade-In erfordert die Verkettung mehrerer Grundaktionen, da die Hue-API keine direkte Aktion für ein schrittweises Einschalten bietet. Hier müssen also mehrere einfache Aktionen verkettet werden: das Licht einschalten und dann die Helligkeit in regelmäßigen Abständen ändern. Diese „Szenerie“ erfordert einen komplexeren Satz von Parametern als für Grundaktionen: Es werden sowohl die Dauer des Einschaltens als auch die Zielhelligkeit benötigt. Diese Parameter können nicht in das aktuelle Modell integriert werden, und ich musste schummeln, indem ich die Validierung des Formats der Aktionen einer Szene änderte, um etwas zum Laufen zu bringen. Ich denke also, dass wir etwas Geeigneteres brauchen.
- Auf der Frontend-Seite musste ich auch für die Komponente LightFadeInParams schummeln, um diese „Aktion“ mit mehreren Parametern zu verwalten. Auch hier muss diskutiert werden, um etwas Saubereres zu machen.
- Ich habe mit setTimeout gespielt, um das schrittweise Einschalten zu erreichen, aber ich mag diese Lösung nicht so sehr: Es besteht die Gefahr, dass das Einschalten verspätet endet. Wir sollten wahrscheinlich eine bessere angepasste Bibliothek verwenden. Wenn es kein passendes Paket gibt, das bereits in Gladys verwendet wird, werde ich schauen, was infrage kommt. Außerdem scheint die Hue-API, wenn die Einschaltzeit kurz ist, den Zustand des Lichts etwas verspätet im Vergleich zur Rückrufzeit zu ändern. Dies verursacht „Ruckler“ im Prozess des schrittweisen Einschaltens. Ich werde schauen, ob ich vielleicht die Anzahl der API-Aufrufe begrenzen kann.
Es gibt noch viele andere Dinge, die im PR überarbeitet werden müssen, aber ich möchte diese Themen lieber diskutieren, bevor ich weitergehe.
