Hallo,
ich möchte eine Pumpensteuerung mit DOIF realisieren.
Scheitere aber an der von mir gewünschten Logik. Wenn PumpeSteuerung auf 2h gestellt wird schaltet das DOIF zu, das funktioniert. Das DOIF bleibt 2h ein, soweit ok. Schalte ich die Bedingung wieder weg, soll das DOIF die Pumpe, und den Timer wieder abschalten.
Wie bekomme ich das zurückgesetzt?
Ich habe schon mit waitdel, waitreset, repeatsame probiert. Aber noch nicht das richtige gefunden. Welche Attribute könnten meine Wünsche erfüllen?
define Pumpe_2h DOIF ([PumpeSteuerung] eq "2h") (set Pumpe on) DOELSE (set Pumpe off)
attr Pumpe_2h waitdel 7200:0
attr Pumpe_2h wait 0:7200
Danke
Was Du möchtest ist mir nicht ganz klar, falls es so funktionieren soll:
Wenn Bedingung wahr, dann 2 h Pumpe an
Wenn Bedingung falsch, dann ausschalten
geht es so
Zum Import mit Raw definition (https://wiki.fhem.de/wiki/DOIF/Import_von_Code_Snippets)
defmod Pumpe_Labor DOIF ([$SELF:Laufzeit]) (set Pumpe on) (set Pumpe off)\
DOELSE (set Pumpe off)
attr Pumpe_Labor group Labor: Pumpen-Timer
attr Pumpe_Labor readingList Laufzeit
attr Pumpe_Labor room DOIF_Labor
attr Pumpe_Labor setList Laufzeit:0,0.5,1,1.5,2,2.5,3
attr Pumpe_Labor wait 0,[$SELF:Laufzeit] * 3600:0
attr Pumpe_Labor webCmd Laufzeit
defmod Pumpe dummy
attr Pumpe group Labor: Pumpen-Timer
attr Pumpe room DOIF_Labor
setstate Pumpe_Labor initialized
setstate Pumpe_Labor 2016-12-23 17:31:37 Laufzeit 0
setstate Pumpe_Labor 2016-12-23 17:32:13 cmd 0
setstate Pumpe_Labor 2016-12-23 17:32:13 state initialized
Danke, ich glaube damit wird es was, sogar besser als geplant.
und falls du, während die Pumpe läuft, die Zeit nochmal ändern willst, hilft
attr Pumpe_Labor do resetwait
Hallo,
interessantes Thema.
Ich benötige auch ein Waitreset für die Alarmanalage.
Hintergrund:
Mit einem Homestatus Dummy schalte ich die Zustände "Zuhause, Urlaub, Nacht, Unterwegs".
Wird geschaltet "Urlaub oder Nacht oder Unterwegs" dann wird per DOIF der Dummy "ALARM_armed an" geschaltet. Alarmanlage ist damit scharf.
Damit man dann noch das Haus verlassen kann, ist es natürlich einfach möglich ein "attr wait 300" (5 Minuten) zu verwenden. Dann wird eben der Dummy "ALARM_armed" auf "an" gesetzt.
Der Wunsch ist nun diese DOIF nicht den Befehl ausführen zu lassen, wenn man innerhalb dieser 5 Minuten die Alarmanlage wieder ausschalten möchte. Anwendung wäre z.B. Ich schalte den Alam durch "Unterwegs" scharf und stelle dann fest, das ich noch etwas vergessen haben und dafür zurück ins Haus muss und dieses Vorhaben länger als 5 Minuten dauert (vergessenes Telefonat als Beispiel).
Die Frage ist nun wie man das umsetzen könnte.
Ich habe noch ein DOIF, welches bei "ALARM_armed aus" den Homestatus auf "Zuhause" setzt. Der Dummy "ALARM_armed" wird per Pineingabe und damit verbundenes Notify auf "aus" gesetzt.
Hier Alarm scharf schalten:
define ALARM_scharf_HOMESTATUS DOIF ([HOMESTATUS:state] eq "Nacht" or [HOMESTATUS:state] eq "Urlaub" or [HOMESTATUS:state] eq "Unterwegs") (set ALARM_armed an)
attr wait 300
Hier Homestatus zurück auf "Zuhause" schalten wenn Alarm abgeschaltet) - ist eigentlich nur eine Rückmeldung für FTUI:
define ALARM_unscharf_HOMESTATUS DOIF ([ALARM_armed:state] eq "aus") (set HOMESTATUS Zuhause)
Hier das Notify für Alarm ausschalten:
define Alarm_unscharf_schalten NOTIFY Alarm_unscharf_pin:trigger set ALARM_armed aus
Ich habe mir das Wiki "DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich" allerdings nicht richtig verstanden.
An welcher Stelle macht es Sinn das Auslösen des Alarms zu verhindern und den Timer zurück zusetzten?
Wie könnte man so etwas umsetzen?
Bin dankbar über jede Unterstützung.
Viele Grüße
ZitatIch habe mir das Wiki "DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich" allerdings nicht richtig verstanden.
Dann hilf mit und werde konkreter, damit das Wiki besser werden kann. Was hast Du nicht verstanden und was ist die Ursache für das nicht richtige Verständnis?
ZitatAn welcher Stelle macht es Sinn das Auslösen des Alarms zu verhindern und den Timer zurück zusetzten?
Der Artikel bezieht sich nicht auf Alarme, sondern allgemein auf die Deaktivierung eines oder mehrer Bedingungszweige im DOIF insofern also partiell.
ZitatWie könnte man so etwas umsetzen?
Durch einen Statuswechsel wird der Timer zurück gesetzt. Eine Abbruchbedingung müsste in einen DOELSEIF-Zeig des ersten DOIF.