Hallo.
Gerne würde ich eine einfaches DOIF umsetzen, allerdings funktioniert es nicht so wie ich es mir vorstelle.
Hier die Bedingung:
Ich würde gerne einen Wert in einem Dummy ändern,wenn ein weiterer Dummy 30 Sekunden den Wert nicht ändert.
Hier ist mein Ansatz:
define Backup_Status DOIF ([Backup_Dummy:state:sec] > 30) (set Stromstatus ok)
attr Backup_Status do always
Wenn ich nun manuell den Dummy Backup_Dummy mit set Backup_Dummy ok
ändere,
müsste ja nach 30 Sekunden der Wert state im Gerät Stromstatus auf ok gehen.
Dies passiert aber nicht.
Wo liegt mein Fehler?
Wenn ich allerdings das Zeichen > durch < ersetze, wechselt der Dummy Stromstatus sofort den Wert,wenn ich das Dummy Backup_Dummy ändere. Also so wie es sein sollte.
Danke für die Hilfe
Zitat von: fetzz am 20 Mai 2016, 20:45:27
Hallo.
Gerne würde ich eine einfaches DOIF umsetzen, allerdings funktioniert es nicht so wie ich es mir vorstelle.
Hier die Bedingung:
Ich würde gerne einen Wert in einem Dummy ändern,wenn ein weiterer Dummy 30 Sekunden den Wert nicht ändert.
Hier ist mein Ansatz:
define Backup_Status DOIF ([Backup_Dummy:state:sec] > 30) (set Stromstatus ok)
attr Backup_Status do always
Wenn ich nun manuell den Dummy Backup_Dummy mit set Backup_Dummy ok
ändere,
müsste ja nach 30 Sekunden der Wert state im Gerät Stromstatus auf ok gehen.
Dies passiert aber nicht.
Wo liegt mein Fehler?
Wenn ich allerdings das Zeichen > durch < ersetze, wechselt der Dummy Stromstatus sofort den Wert,wenn ich das Dummy Backup_Dummy ändere. Also so wie es sein sollte.
Danke für die Hilfe
So wird es nicht funktionieren.
[Backup_Dummy:state:sec] ist zum Zeitpunkt der Triggerung immer Null.
Was du möchtest ist wahrscheinlich so etwas:
http://fhem.de/commandref_DE.html#DOIF_do_resetwait
Gruß
Damian
Hallo,
Danke für die schnelle Antwort, als einzelne Bedingung bekomme ich nun das Ergebniss, wie ich es gerne hätte.
Danke schon mal. ;D
Nun meine Idee beides in eine DOIF zu bekommen,allerdings funktiniert dies nicht so wie geacht.
Grundidee:
Ich werte einen Maileingang auf einen bestimmten Betreff aus und schreibe dann eine Statusmeldung in den Dummy, sollte die Meldung länger als x-Sekunden ausbleiben, wechselt der Status der Meldung.
Hier meine Versuche:
define Backup_Status DOIF
([FhemMail:Subject] =~ "RPi-FHEM: Backup erfolgreich beendet")(set Backup_Dummy Erfolgreich)
DOELSEIF
([Backup_Dummy])(set Backup_Dummy Fehler)
attr Backup_Status do resetwait
attr Backup_Status wait 0:30
Ist dies überhaupt so möglich?
Was genau soll denn die zweite Bedingung sein? So triggers Du auf das selbe Device wo Du auch den Status für schreibst. ???
Die zweite Bedingung sollte lauten, wenn länger als die Zeitspanne x keine Triggerung(oder Statusänderung an dem Dummy) vorgenommen worden ist, ändere den Status auf "Fehler"
Keine Ahnung ob das mit DOIF geht. Da bin ich erstmal raus.
Hi,
ich hole das hier nochmal hoch, weil es hier um das Problem geht, welches ich besprechen möchte. (Wieder in den Sinn gekommen ist es mir aufgrund von https://forum.fhem.de/index.php/topic,67642.0.html)
Zitat von: fetzz am 20 Mai 2016, 20:45:27
Hier ist mein Ansatz:
define Backup_Status DOIF ([Backup_Dummy:state:sec] > 30) (set Stromstatus ok)
attr Backup_Status do always
Das hier beschriebene Beispiel ist sehr einfach und kann sicherlich sehr einfach anders gelöst werden.
Zitat von: Damian am 21 Mai 2016, 08:42:03
So wird es nicht funktionieren.
[Backup_Dummy:state:sec] ist zum Zeitpunkt der Triggerung immer Null.
Damian
Allerdings benutze ich Ausdrücke wie "[Backup_Dummy:state:sec] > 30" auch gerne innerhalb von komplexeren DOIFs und da wäre es wirklich schön, wenn es hier möglich wäre, dass das DOIF für einen solchen Fall einen internen Timer anlegt, der den Ausdruck dann triggert, wenn die Zeit > 30 Sekunden ist.
Was ich sagen möchte ist, dass sich DOIF in einem solchen Fall selber darum kümmert, dass ein Trigger ausgelöst wird, auch wenn das Device natürlich kein Event generiert.
Wäre sowas denkbar?
LG
Christian
Keine Ahnung ob ich genau verstanden habe was du meinst. Aber selber triggern kann DOIF sich bereits. Thema $self. Musst mal in der Commandref schauen.
Hi,
mein Problem ist, dass ein "[Backup_Dummy:state:sec] > 30" zur Zeit wenig Sinn macht, da das DOIF ja nur triggert, wenn Backup_Dummy:state geändert wird. Und dann ist natürlich das :sec == 0 und der Ausdruck ist false. Wenn jetzt die 30 Sekunden vergangen sind, wird der Audruck zwar true, aber das DOIF wird halt nicht ausgeführt, weil einfach kein Trigger da ist :-).
Ich habe komplexere DOIFs, da helfe ich mir so:
([:01] and [Backup_Dummy:state:sec] > 30)
Hier sorgt halt das [:01], dass immerwieder getriggert wird.
Ein manueller Workaround könnte sein, bei der Änderung von Backup_Dummy:state einen at-Job zu starten, der nach 30 Sekunden (irgendwie) das DOIF triggert.
Jetzt verständlicher? Ich befürchte nicht :-\
LG
Christian
Hallo Christian,
Ich befürchte das muss sich ein DOIF User mal anschauen was Du da machen willst.
Grüße
Zitat von: choenig am 25 Februar 2017, 12:33:50
Hi,
ich hole das hier nochmal hoch, weil es hier um das Problem geht, welches ich besprechen möchte. (Wieder in den Sinn gekommen ist es mir aufgrund von https://forum.fhem.de/index.php/topic,67642.0.html)
Das hier beschriebene Beispiel ist sehr einfach und kann sicherlich sehr einfach anders gelöst werden.
Allerdings benutze ich Ausdrücke wie "[Backup_Dummy:state:sec] > 30" auch gerne innerhalb von komplexeren DOIFs und da wäre es wirklich schön, wenn es hier möglich wäre, dass das DOIF für einen solchen Fall einen internen Timer anlegt, der den Ausdruck dann triggert, wenn die Zeit > 30 Sekunden ist.
Was ich sagen möchte ist, dass sich DOIF in einem solchen Fall selber darum kümmert, dass ein Trigger ausgelöst wird, auch wenn das Device natürlich kein Event generiert.
Wäre sowas denkbar?
LG
Christian
Du willst doch 30 Sekunden nachdem das Ereignis eingetreten ist etwas tun, richtig?
Warum nimmst du dann nicht das wait-Attribut?
Hi,
bei meinen simplen DOIFs mache ich das mit dem wait-Attribut, aber bei komplexeren ist das eher ein Problem. Ich suche mal eins heraus, wo ich damit gescheitert bin. Das werde ich aber vermutlich erst morgen schaffen.
Alaaf und LG
Christian
Sodele,
ich habe durch Damian angespornt gefühlt und habe eines meiner komplizierteren DOIFs umgestellt und nutze nun das wait-Attribut :).
Ich werde mal beobachten, ob es so funktioniert, wie ich will.
LG
Christian