on-for-timer-Simulation

Begonnen von johndoe, 27 Oktober 2015, 11:31:05

Vorheriges Thema - Nächstes Thema

johndoe

Hallo zusammen,

meine Elro-Steckdosen kennen kein on-for-timer.
Ich möchte sie für das regelmäßige ein- und ausschalten unserer Umwälzpumpe nutzen. Zwischen 4.00 und 22.00 soll die Pumpe alle 30 Minuten für jeweils 5 Minuten laufen.

Im DOIF-Thread bin ich über dieses Coding gestolpert:
define schalter_d dummy

define di_Schalter DOIF ([Bewegungsmelder] eq "motion" )  (set schalter_d on, set schalter_d off)
attr di_Schalter do always

define di_Licht DOIF ([schalter_d] eq "on")  (set Licht on) DOELSE  (set Licht off)
attr di_Licht wait 0:300


Entsprechend habe ich jetzt folgendes ausprobiert (den oberen Dummy-Teil brauche ich meinem Verständnis nach nicht):
define di_lamp DOIF ([?04:00-22:00] and [:30]) (set Elro04 on) DOELSE (set Elro04 off)
attr di_lamp wait 0:300
attr di_lamp do always


Die Steckdose wird zwar eingeschaltet, bleibt aber auch an und wird nicht wieder ausgeschaltet, auch im Event monitor kommt nach dem Einschalten nichts mehr.
Kann mir als Anfänger jemand helfen, was ich nicht verstanden habe? Wenn ich nur zeitliche Events habe, wann und wie oft wird das DOIF durchlaufen? Jeweils zur halben Stunde läuft er durch das DOIF, aber das DOELSE wird augenscheinlich nie aufgerufen. Warum nicht?

Und noch eine zweite Frage: Mit obiger Anweisung würde die Steckdose nur jeweils zur halben Stunde geschaltet, nicht zur vollen. Kann ich AND und OR beim DOIF auch verknüpfen und wie ist dann die Syntax, mit weiteren Klammern?
Also z.B.
define di_lamp DOIF ([?04:00-22:00] and ([:30] OR [:00])) ...
Ich weiß dass man auch [+:30] verwenden könnte, aber die Frage interessiert mich trotzdem, falls ich z.B. nur um :15 und :45 schalten will.


Alternativ hatte ich zwei versetzte at-Anweisungen probiert, das funktioniert auch, ist aber nicht sonderlich schick und schlechter anpassbar.
define PumpeMorgensStart at *00:04:00 { { fhem("define PumpeAn at +*{36}00:30:00 set Elro04 on") } }
define PumpeMorgensStop at *00:04:05 { { fhem("define PumpeAus at +*{36}00:30:00 set Elro04 off") } }


Damian

Zitat von: johndoe am 27 Oktober 2015, 11:31:05
define di_lamp DOIF ([?04:00-22:00] and [:30]) (set Elro04 on) DOELSE (set Elro04 off)
attr di_lamp wait 0:300
attr di_lamp do always


Die Steckdose wird zwar eingeschaltet, bleibt aber auch an und wird nicht wieder ausgeschaltet, auch im Event monitor kommt nach dem Einschalten nichts mehr.

Wann soll deiner Meinung nach der DOELSE-Fall zutreffen? Da musst du noch mal die Doku zu DOIF genauer durchlesen insb. zum Thema wait-Attribut.

Das was du vorhast muss eher so aussehen:

define di_lamp DOIF ([?04:00-22:00] and [:30]) (set Elro04 on) (set Elro04 off)
attr di_lamp wait 0,300
attr di_lamp do always


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

johndoe

Mein Gedanke war: DOELSE tritt ein, wenn es NICHT halb ist, also unmittelbar danach, und das dann aber erst 5 Minuten verzögert.
Hatte die Doku gelesen, aber wohl den Wald vor Bäumen nicht gesehen.
Macht Sinn was du schreibst, werde ich mal ausprobieren. Ich hatte mich irgendwie auf den Gedanken versteift, dass das Ausschalten über DOELSE passieren muss.

Sehe ich das richtig, dass DOELSE dann eigentlich nur bei einer Zeitspanne im DOIF Sinn macht, womit es einmalig am Ende der Zeitspanne aufgerufen wird?

Damian

Zitat von: johndoe am 27 Oktober 2015, 20:29:58
Sehe ich das richtig, dass DOELSE dann eigentlich nur bei einer Zeitspanne im DOIF Sinn macht, womit es einmalig am Ende der Zeitspanne aufgerufen wird?

ja, wenn es um Zeiten geht.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF