Sender/Absender in Notify

Begonnen von FHEMAN, 28 Juli 2016, 23:02:51

Vorheriges Thema - Nächstes Thema

FHEMAN

Guten Abend,

ich hätte in Notify gerne den Sender bzw. Absender, der das Notify triggert. Ähnlich dem Sender Parameter damals in Delphi.
Besteht irgend eine einfache Möglichkeit, sich solch ein Reading global zu konfigurieren?

Viele Grüße
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FHEMAN

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

NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

marvin78

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.

FHEMAN

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!?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Hans Franz

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
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

FHEMAN

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.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB