Guten Abend,
ich hätte in Notify gerne den Sender bzw. Absender, der das Notify triggert. Ähnlich dem Sender Parameter (http://delphi.about.com/od/objectpascalide/a/sender.htm) damals in Delphi.
Besteht irgend eine einfache Möglichkeit, sich solch ein Reading global zu konfigurieren?
Viele Grüße
Ronny
$NAME
Hallo betateilchen,
$NAME liefert nach meinem Verständnis nur den Namen der in der Notify Definition hinterlegten zu triggernden "Geräte". Im Folgenden also einmal die Langversion als einfaches (wie sinnloses) Beispiel:
define Licht dummy
define notify.Licht notify Licht:(on|off) {
fhem("set Licht $EVENT");
Log 1, "Licht EVENT NAME: $NAME";
}
define notify.Regen notify Regen:(on|off) {
fhem("set Licht $EVENT");
}
define notify.Temperatur notify Temperatur:low {
fhem("set Licht on");
}
$NAME ist immer Licht!
2016.07.29 07:03:51 1: DEBUG Licht EVENT NAME:EVENT Licht:on
Neben diversen Notifies habe ich noch Funktionen und webCMD, die den Status von Licht ändern.
Beim Schalten des Lichts möchte ich den Auslöser erfahren und ggf. davon abhängig reagieren.
Unrein gesprochen wäre mein Wunsch so etwas wie ein Reading oder eine Abfrage a la Sender("$NAME") ähnlich OldValue("$NAME) oder einfach nur $SENDER.
Schönen Gruß
Ronny
Der Auslöser dieses notifys ist Licht und kein anderes Device. Das notify kann nicht wissen, durch was Licht geändert wurde. Sehr wohl kann es aber die Funktion (das notify, das DOIF oder anderes) wissen, die Licht geändert hat. Und nein, $NAME enthält nicht die zu triggernden Geräte, sondern den Namen des Gerätes, dass das notify (nach FHEM Defintion auch ein Gerät) getriggert hat.
Zitat von: marvin78 am 29 Juli 2016, 14:22:04
Sehr wohl kann es aber die Funktion (das notify, das DOIF oder anderes) wissen, die Licht geändert hat.
Das wäre ja schon etwas, aber wie geht das? Mir sind nur $NAME, $EVENT und $TYPE aus einem Notify heraus bekannt. Damit kann ich aber nicht auf den Namen schließen!?
Spendiere z.B. Licht noch ein zusätzliches Reading:
define notify.Regen notify Regen:(on|off) {
fhem("set Licht $EVENT");
fhem("setreading Licht Ausloeser Regen");
}
und werte dieses im Notify aus.
Gruß
Hans
Hier nun meine Lösung für die Anforderung, das "triggernde" Device am Ziel-Device zu erfahren:
define c_setex cmdalias setex .* AS {
if (my $EVTP2 = (split(/\s+/,$EVENT))[2]) {
fhem("setreading $EVTPART0:FILTER=STATE!=$EVTPART1 trigger " . $EVTP2);
}
fhem("set $EVTPART0:FILTER=STATE!=$EVTPART1 $EVTPART1");
}
Wenn man nun innerhalb eines Notify
setex Licht.* on $NAME
ausführt, wird
1. An den Zieldevices ein Attribut "trigger" gesetzt
2. Nur geschaltet, wenn der Zielzustand nicht dem aktuellen Zustand entspricht
Angewandt bspw. bei einem Alarmsystem kann ich nun recht einfach den Auslöser identifizieren und bspw. per Pushover Nachricht mitsenden.