Wie kann ich den Zustand einer Funktion ändern, ohne den zugehörigen setValue auszulösen, wenn ich den Zustand einer anderen Funktion ändere?
Denn ich habe eine deviceFeature, die die Farben verwaltet, und eine, die den Zustand verwaltet, aber eigentlich ist der Zustand fiktiv: Aus = schwarze Farbe und An = Farbe, die mit dem abhängt, was auf dem Bildschirm passiert.
Es ist nicht wirklich ein Ein-/Aus-Schalter.
Daher kann ich die Farbe ändern, auch wenn aus Gladys-Sicht die Status-Funktion auf Aus steht.
Ich möchte, dass es konsistent ist, sodass der Binärwert virtuell auf An springt, wenn ich eine Farbe setze.
Ich weiß nicht, ob ich mich klar ausgedrückt habe.. Ich glaube nicht, dass ich eine interne Bibliothek von meiner Integration aus aufrufen kann.
Eigentlich geht es darum, mein Ambilight-System auf Basis von Hyperion zu steuern.
Um es einfach auszudrücken, handelt es sich dabei um ein LED-Band hinter dem Fernseher, das die Farben des Bildschirmrandes übernimmt.
Und in der aktuellen Version wählt man entweder
einen Modus (z. B. blinkend oder ein mehrfarbiger Schlauch usw.)
alle LEDs auf die gleiche Farbe zu setzen.
Aber es gibt kein AN/AUS
Das AUS ist die schwarze Farbe.
Also habe ich in Gladys einen Binärtyp mit folgendem erstellt:
AUS, alle LEDs auf Schwarz setzen
AN, in den Modus „Farbfolge des TV-Bildes“ wechseln
Ich habe auch einen Modustyp und einen Farbtyp.
Das Problem ist also, dass, wenn ich auf AUS setze, die LEDs ausgeschaltet werden.
Dann, wenn ich statt AN eine Farbe wähle, funktioniert es, aber der Binärtyp bleibt auf AUS, da ich keine echte Statusrückmeldung habe.
Ich frage mich also, welcher der beste Ansatz ist, damit, wenn ich die Farbe oder den Modus ändere, der Binärwert auf AN gesetzt wird, um Inkonsistenzen zu vermeiden.
Ich würde in deiner Integration eine On/Off-Funktion hinzufügen (auch wenn es dahinter nicht wirklich eine On/Off-Funktion gibt), und in der setValue-Funktion deiner Integration würdest du den On/Off-Fall verwalten, indem du das tust, was dein Gerät erwartet (schwarze Farbe für „Aus“).
Das Ziel ist, dass es für den Benutzer transparent ist, ihm ist es egal, wie es implementiert ist, solange er das Licht an- und ausschalten kann
Ja, das ist gut, aber meine Frage ist, wie man den Binary auf Ein stellt, wenn man direkt auf eine Farbe zugreift, obwohl das Band schwarz / Aus war?
Beispiel:
Abends habe ich das Gerät auf Aus gestellt, wodurch der Status Binary auf 0 gesetzt und die Farbe auf Schwarz geändert wird.
Morgens stelle ich direkt die Farbe auf Vollrot ein, ohne den Binary zu ändern, der auf Aus bleibt.
Damit gibt es eine offensichtliche Inkonsistenz.
Ich kann kein Binary = Ein-Event auslösen, denn wenn ich mich nicht irre, wird Gladys die Funktion zum Einschalten aufrufen, die tatsächlich ein clear() der Farbe durchführt.
Übrigens, wenn ich auf Aus schalte, könnte ich auch den Farbauswahl auf Schwarz sehen wollen.
Diese Funktion speichert nur den Zustand, es ist kein setValue! Also wird es keine endlose Schleife geben, es wird deinen setValue nicht erneut aufrufen.