Hauptmenü

WaitTimer vorzeitig beenden

Begonnen von sek_is_back, 24 Februar 2018, 15:36:38

Vorheriges Thema - Nächstes Thema

sek_is_back

Meine Problemstellung:
Im GästeWc wird oft vergessen das Licht auszuschalten. Ich habe jetzt den Lichtschalter gegen einen ESPEasy Taster getauscht, der das Licht jetzt in einem DoIf Timer startet.

define di_GW_Licht DOIF ([ESPEasy_SW1:Switch] eq "on") (set GW_Licht on ) (set GW_Licht off)
attr di_GW_Licht do always
attr di_GW_Licht wait 0,15


Funktioniert hervorragend

Jetzt möchte ich den Timer allerdings mit dem gleichen Taster vorzeitig beenden also das Licht wieder ausschalten. Ich habe in einem Post etwas über ein zweites DoIf gelesen,das brachte mich aber nicht weiter. Stehe jetzt seit fast 4 Stunden auf dem Schlauch und probiere schon fast Sinnlos alle Post's die irgendwie danach aussehen.


define di_GW_Licht_off DOIF (([ESPEasy_SW1:Switch] eq "on") and ([GW_Licht:state] eq "on"))(set GW_Licht off)
attr di_GW_Licht_off waitdel di_GW_Licht

Damian

Zitat von: sek_is_back am 24 Februar 2018, 15:36:38
Meine Problemstellung:
Im GästeWc wird oft vergessen das Licht auszuschalten. Ich habe jetzt den Lichtschalter gegen einen ESPEasy Taster getauscht, der das Licht jetzt in einem DoIf Timer startet.

define di_GW_Licht DOIF ([ESPEasy_SW1:Switch] eq "on") (set GW_Licht on ) (set GW_Licht off)
attr di_GW_Licht do always
attr di_GW_Licht wait 0,15


Funktioniert hervorragend

Jetzt möchte ich den Timer allerdings mit dem gleichen Taster vorzeitig beenden also das Licht wieder ausschalten. Ich habe in einem Post etwas über ein zweites DoIf gelesen,das brachte mich aber nicht weiter. Stehe jetzt seit fast 4 Stunden auf dem Schlauch und probiere schon fast Sinnlos alle Post's die irgendwie danach aussehen.


define di_GW_Licht_off DOIF (([ESPEasy_SW1:Switch] eq "on") and ([GW_Licht:state] eq "on"))(set GW_Licht off)
attr di_GW_Licht_off waitdel di_GW_Licht


Der Timer wird abgebrochen, wenn der Zustand des Moduls wechselt, du musst dein DOIF um einen Zweig erweitern und den ersten Zweig verhindern, wenn er schon aktiv ist:

define di_GW_Licht_off DOIF (([ESPEasy_SW1:Switch] eq "on") and [$SELF] ne "cmd_1" and ([GW_Licht:state] eq "on") (set GW_Licht off) DOELSEIF ([ESPEasy_SW1:Switch] eq "on")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sek_is_back

Ich hab es tatsächlich hinbekommen, allerdings ist da noch ein kleiner Schönheitsfehler drin

define di_GW_Licht DOIF (([ESPEasy_GW_Taster_D2:Switch] eq "on") and ([$SELF] ne "cmd_1")) ## wenn Taster gedrückt und Timer läuft\
   (set ESPEasy_GW_Licht_D2 off)  ## schalte Licht aus\
DOELSEIF\
([ESPEasy_GW_Taster_D2:Switch] eq "on") ## wenn Taster gedrückt
   (set ESPEasy_GW_Licht_D2 on)(set ESPEasy_GW_Licht_D2 off) ## Schalte Licht ein..

attr di_GW_Licht do always
attr di_GW_Licht wait 0:0,300  ##... für 5Minuten, danach aus


Das läuft auch soweit wie es soll, ich betätige den Taster und der Timer läuft los und das Licht ist an (state = cmd_2_1), Taster nochmal, Licht ist aus (state = cmd_1)
wenn ich aber vergesse das Licht auszuschalten und der Timer ist abgelaufen (Licht geht aus) bleibt state auf cmd_2 stehen, dadurch muss ich den Taster 2x betätigen um das Licht wieder einzuschalten, weil die Bedingung ja logischerweise auf ([$SELF] ne "cmd_1") schaut und dann das Licht nochmal ausschaltet.

Ich habe dann versucht das ([$SELF] ne "cmd_1") gegen ([$SELF:wait_timer] ne "no timer") zu tauschen, dann geht aber leider gar nichts mehr.  :(

sek_is_back

Habe es gelöst bekommen

define di_GW_Licht DOIF (([ESPEasy_GW_Taster_D2:Switch] eq "on") and ([$SELF] eq "cmd_2_1")) ## wenn Taster gedrückt und Timer läuft\
   (set ESPEasy_GW_Licht_D2 off)  ## schalte Licht aus\
DOELSEIF\
([ESPEasy_GW_Taster_D2:Switch] eq "on") (set ESPEasy_GW_Licht_D2 on)(set ESPEasy_GW_Licht_D2 off)\
\

attr di_GW_Licht do resetwait
attr di_GW_Licht wait 0:0,10


Nacht drüber geschlafen und dann war es auch sehr schnell klar
DOIF (([ESPEasy_GW_Taster_D2:Switch] eq "on") and ([$SELF] eq "cmd_2_1"))