(Licht-)Steuerung mit verschiedenen Prioritäten

Begonnen von jazzor, 23 Januar 2021, 21:24:20

Vorheriges Thema - Nächstes Thema

jazzor

Hallo zusammen,

ich weiß nicht, ob die folgende Frage für das Anfängerforum richtig ist, aber ich fand sie zu allgemein, um sie in einem Detailforum zu stellen. Sollte die Moderation anderer Meinung sein, bitte ich um Verschiebung. :-)

Nachdem ich mich nun schon mehrere Jahre immer mal wieder mit Fhem beschäftige, ist mir heute ein Anwendungsfall aufgefallen, den ich zwar (sehr umständlich) abbilden könnte, aber am liebsten irgendwie... allgemeingültiger lösen würde. Es geht um Prioritäten bei Lampen, Leuchten oder beliebigen anderen Aktionen:

Die Tage saßen wir im Wohnzimmer, das Licht passte nicht ganz und ich fing an herumzustellen.
Ich hatte schonmal drüber nachgedacht, eine Lightscene für das Wohnzimmer aufzusetzen und die vorherigen Zustände der Lampen abzuspeichern aber ich hatte mich noch nicht damit ganz auseinander gesetzt. Als wir da nun saßen, lief meine Abendautomation, die das Licht im Erdgeschoss ausschaltete und wir saßen im Dunkeln. Diesen Punkt müsste ich also in einer Lightscene mit DOIF also auch irgendwie abfangen. Außer... ja außer, ich könnte den verschiedenen Aktionen Prioritäten zuweisen und die Geräte würden immer nur den Status mit der höchsten Priorität davon annehmen. Ich schreib das mal nachfolgend als pseudocode auf, wie ich mir das vorstelle:
Beispiel:
Setting: Wohnzimmer mit Lampe beim Fernsehgucken.
Intent=Statuswunsch, priority=Priorität von 0-100
Lampe : state:[["intent":"on","priority":10],["intent":"pct 50","priority":30],["intent":"off","priority":100]]

Im vorliegenden Beispiel wäre die Lampe aus, weil ich "händisch" (Prio 100) die Lampe ausgestellt habe und damit die Automatisierung 'überstimmt habe'. Wäre das nicht der Fall, würde die Lampe mit 50% leuchten (Priority 30). Sollte nun während des Filmguckens die Abendautomatisierung laufen, so würde nur die Prio 10 von on auf off gestellt, aber die Lampe bliebe weiter auf 50%. Erst nach dem Abschluss des Fernsehens und des Löschens des Intents mit Priorität 30 würde die Lampe dann ausgehen.
mir ist klar, dass ich mir bei diesen Aktionen sehr genau überlegen müsste, ob ich überhaupt noch "händisch" eingreifen möchte, oder ob ich die Prioritäten nur für verschiedene Automatisierungen schaffen sollte.

Ist das irgendwie umsetzbar? Ich hab jetzt zwar das Beispiel der "Kinobeleuchtung" genommen, aber ich hätte ähnliche Situationen auch mit Rolladen oder meinem Rasenmäher.

Ich freue mich über Feedback! Danke!




xenos1984

Ich würde das über ein DOIF lösen und die einzelnen Zweige in der Reihenfolge absteigender Priorität anlegen. Wenn ein Trigger kommt, dann testet das DOIF der Reihe nach die Bedingungen, anfangend mit der höchsten Priorität, und sobald eine wahr ist, wechselt es in den entsprechenden Zustand, bzw. bleibt dort, wenn es schon dort war. Die nachfolgenden Bedingungen mit niedriger Priorität werden dann nicht mehr getestet. Bei deinem Beispiel (Pseudo-Code):


DOIF (Bedingung für "on") \
(set lamp on) \
DOELSEIF (Bedingung für "pct 50") \
(set lamp pct 50) \
DOELSEIF (Bedingung für "off") \
(set lamp off)


Oder wenn der letzte Fall die Voreinstellung sein soll, wenn nichts anderes erfüllt ist:


DOIF (Bedingung für "on") \
(set lamp on) \
DOELSEIF (Bedingung für "pct 50") \
(set lamp pct 50) \
DOELSE \
(set lamp off)