Hallo,
wenn ich z.B. einen Lampe in den Zustand "on" schalte kann ich ja über das Ereignis und eben den Statuswechsel der Lampe zu "on" ein notify starten lassen was dann irgendetwas ausführt.
Soweit ist mir das klar.
Wenn jetzt dieses erste notify durchgelaufen ist, ist es dann möglich auf Grund dieses Ereignisses ein weiteres notify zu starten?
Beim Einschalten der Lampe frage ich ja im ersten notify den Status ab.
Was würde man bei einem notify abfragen?
Ich hoffe Ihr versteht in etwa was ich meine.
Es wäre klasse wenn Ihr mir da weitere Infos geben könntet.
Danke und Gruß
Dieter68
Moin,
je nach Anwendungsfall würde sich da wohl eher ein DOIF mit wait-Attribut anbieten. D.h., DOIF triggert auf das Ereignis, führt etwas aus, wartet kurz und führt dann das nächste aus.
LG
Andreas
Hallo,
stimmt das wäre wohl der schönere Weg.
Da werde ich mal sehen wie das geht - leider komme ich nicht dazu mich mal etwas mehr in Fhem einzuarbeiten.
Danke für den Tipp.
Gruß
Dieter68
Sicherlich kann man mit DOIF die tollsten Sachen machen, aber das beantwortet leider nicht die Frage:
Du startest das nächste notify DIREKT mit dem Befehl "trigger". Beispiel: trigger testnotify
Das reagieren eines notify kannst du nicht direkt erfassen, aber im Ausführungsteil lassen sich ja mehrere
Befehle unterbringen. Man könnte also einen Dummy anlegen und im Ausführungsteil des ersten Notify z.B.
sinngemäß schreiben: "set lampe 1 on , set lampe 2 aus , set dummy on" Ob dummy off oder on oder hallo
ist egal. Nur das Event das den Dummy triggert kannst du nun in einem weiteren Notify auswerten.
Hast du mehrere Notifys die den Dummy triggern, könnte jedes einen anderen Wert zuweisen, wonach sich
dann die verschiedenen Notifys unterscheiden ließen. Man nimmt dann als Auslöser das Dummyevent mit
dem gewünschten Wert. Welchen Wert der Dummy gerade hat ist übrigens egal. Entscheidend ist immer
nur der Augenblick des "set" auf den Dummy.
Sieh dir auch die Perl- Funktionalität des Notify an. Damit kannst du viele Dinge gleich im Notify erschlagen.
Hier mal ein Beispiel von mir, wo je nach Wert des Dummy "Haus_Status" verschiedene Aktionen ausgeführt
werden wenn es bei mir klingelt (Beispiel ist in RAW!):
defmod Func_Tuerklingel_N notify Klingel:off { \
\
my $H_Status = (Value("Haus_Status"));;\
my $Sperre = (Value("Dum_Kl_Sperr_D"));;\
my $TelNum = (Value("Dum_Telnum_D"));;\
\
if ($Sperre eq "off") { \
Log 1, 'Haustür Klingelsignal erkannt';; \
}\
if ($H_Status eq "Garten" and $Sperre eq "off") { \
Log 1, 'Türsprechstelle verbinden mit Schnurlostelefon';; \
fhem("set Dum_Telnum_D **123#");;\
}\
if ($H_Status eq "Haus_verlassen" and $Sperre eq "off") { \
Log 1, 'Türsprechstelle verbinden mit Mobiltelefon';; \
fhem("set Dum_Telnum_D **456#");;\
}\
if ($H_Status eq "Schlafen" and $Sperre eq "off") { \
Log 1, 'Türsprechstelle verbinden mit AB';; \
fhem("set Dum_Telnum_D **789#");;\
}\
if ($Sperre eq "off") { \
fhem("set Dum_Kl_Sperr_D on");;\
fhem("define -temporary Reset_Kl_Sperr_A at +00:00:07 set Dum_Kl_Sperr_D off");;\
}\
}
Gruß
Frank
Als Ergänzung:
Wenn das Notify z.B. per "set Tolles_Device on" ein Device Ändert, wird natürlich ein notify, was auf das Device hört, getrikert.
Einzige Einschränkung:
Wenn es ein Reading im gleichen Device ist, wird dieses nicht Ausgefürt (Absicht), um Endlosschleifen zu verhinern. Um das zu umgehen muß man (siehe Doku) z.B. mit "sleep" arbeiten ...
Ansonsten gäbe es ja auch noch "sleep", das man in den ersten notify-Code reinbasteln kann...
Das kann seit einiger Zeit auch auf ein zweites, anderes Ereignis warten: https://forum.fhem.de/index.php/topic,100306.msg937338.html#msg937338
Zitat von: justme1968 am 06 Mai 2019, 21:27:04
hintergrund des ganzen war mein wunsch die bewässerungszonen im garten nacheinander laufen zu lassen. das kann man zwar im prinzip auch über das bisherige sleep, at oder notfy, aber mit den folgenden nachteilen:
- sleep: wenn sich die einschaltzeiten ändern (on-for-timer im device) muss man die sleep anpassen oder von vornherein genug zeit gelassen haben
- at: wie bei sleep
- notify: wenn die reihenfolge nicht immer gleich sein soll (morgens rasen->beet1->beet2 nachmittags nur rasen->beet2) wird es unhandlich
jetzt kann man einfach der reihe nach ein ventil öffnen und danach warten bis es wieder zu ist:
set v1 on-for-timer 600; sleep v1:off; set v2 on-for-timer 300; sleep v2:off; set v3 on-for-timer 300