Bitte nicht Teeren & Federn, falls das schon längst geht: Google & Wiki habe ich bemüht.
Ich wüsste gerne bei einem Event, welches Gerät dieses ausgelöst hatBeispiel:Eine Lampe wird eingeschaltet oder auf einen Dimmwert gesetzt. Ein notify ist auf diese Änderung subscribed. Für die Behandlung im Notify wäre es jetzt hilfreich zu wissen, wer den Stellwert der Lampe geändert hat, indem z.B. eine Variable $INITIATOR auf das ursprünglich auslösende Gerät verweist.
Anwendungsbeispiel:
Die Lampe wird von Alexa, der FHEM-Zeile, einem Dimmswitch, zwei Bewegungsmeldern und einer at-Direktive getriggert (man kann es auch einfacher fassen, aber warum?).
"Total logisch" sind nun folgende Hierarchie-Ebenen:
- at ist ein Default der niedrigsten Priorität, wenn z.B. bei Dämmerung ein schwaches Grundleuchten eingeschaltet werden soll
- Der Bewegungsmelder darf die Lampe einschalten, sollte sie aber nicht ausschalten, wenn sie vorher durch ein Kommando (Dimmswitch / Alexa) eingeschaltet wurde
- Möglicherweise überlappen sich Bewegungen bei beiden Bewegungsmeldern. "Ausschalten" sollte die Lampe nur der Bewegungsmelder, bei dem die Bewegung zuletzt stoppt.
- Den Befehlen von Switch und Alexa ist unmittelbar Folge zu leisten
Im Kern stelle ich mir vor, dass ein Dummy eine Liste der Geräte enthält, die sich z.Zt. für in der Verantwortung halten, "das Licht auszumachen". Erlischt die Bewegungsmeldung am 1. Melder, wird geprüft, ob Melder 1 der einzige in der Liste ist. Wenn ja, macht er das Licht aus. Wenn nein, löscht er sich in der Liste, denn "der Letzte macht das Licht aus". Ist er nicht in der Liste, macht er gar nichts. Ein Willenbekundungsgerät wie Schalter oder Alexa hingegen löschen die Liste, sodass die Abschaltung durch Bewegungsmelder dadurch entfällt.
Nun könnte ich für jeden Eingabekanal ein Dummy vorschalten, dass neben der Operation auf der Lampe selbst die "Wer macht das Licht aus?"-Liste manipuliert. Alexa hat also ihren Dummy für die Lampe, der Switch einen anderen, u.s.w. Einfacher wäre es, auf die Lampe ein Notify zu hängen und je nach Initiator die Logik abzubilden.
Denke ich hier verquer?