Hallo,
ich habe hier ein kleines DOIF, mit dem ich eine Warmwasser-Umwälzpumpe in Abhängigkeit von unserer Anwesenheit, der Uhrzeit und dem Wochentag steuere.
Alles funktioniert soweit, ausser daß die Pumpe in der Nacht von Sonntag auf Montag halbstündlich durchläuft, statt bis zum frühen Montagmorgen auszubleiben. Alles nicht kriegsentscheidend, aber ich würde halt gerne verstehen, was ich da falsch gemacht habe....
Hier das List des DOIF:
Internals:
DEF ([07:00-00:00|7] and [rgr_Residents:presence] eq "present") (set Zirkulationspumpe on) (set Zirkulationspumpe off)
DOELSEIF ([06:00-23:30|8] and [rgr_Residents:presence] eq "present") (set Zirkulationspumpe on) (set Zirkulationspumpe off)
DOELSE (set Zirkulationspumpe off)
FUUID 5c65c109-f33f-74ea-bffe-1d2a37268b51daad
MODEL FHEM
NAME zirkulationspumpe
NOTIFYDEV rgr_Residents,global
NR 422
NTFY_ORDER 50-zirkulationspumpe
STATE WT
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-27 16:23:22 Device rgr_Residents
2020-04-27 20:25:24 cmd 2.2
2020-04-27 20:25:24 cmd_event rgr_Residents
2020-04-27 20:25:24 cmd_nr 2
2020-04-27 20:25:24 cmd_seqnr 2
2020-04-27 16:23:22 e_rgr_Residents_presence present
2020-04-24 17:56:44 mode enabled
2020-04-27 20:25:24 state WT
2020-04-27 00:00:00 timer_01_c01 27.04.2020 07:00:00|7
2020-04-27 00:00:00 timer_02_c01 28.04.2020 00:00:00|7
2020-04-26 23:30:00 timer_03_c02 27.04.2020 06:00:00|8
2020-04-26 23:30:00 timer_04_c02 27.04.2020 23:30:00|8
2020-04-27 20:25:24 wait_timer 27.04.2020 20:53:24 cmd_2_1 rgr_Residents
Regex:
accu:
cond:
rgr_Residents:
0:
presence ^rgr_Residents$:^presence:
1:
presence ^rgr_Residents$:^presence:
attr:
cmdState:
0:
WE
WE
1:
WT
WT
2:
Abwesend
repeatcmd:
1680
1680
wait:
0:
0
120
1:
0
120
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms,"7") and ::ReadingValDoIf($hash,'rgr_Residents','presence') eq "present"
1 ::DOIF_time($hash,2,3,$wday,$hms,"8") and ::ReadingValDoIf($hash,'rgr_Residents','presence') eq "present"
days:
0 7
1 7
2 8
3 8
devices:
do:
0:
0 set Zirkulationspumpe on
1 set Zirkulationspumpe off
1:
0 set Zirkulationspumpe on
1 set Zirkulationspumpe off
2:
0 set Zirkulationspumpe off
helper:
DEVFILTER ^global$|^rgr_Residents$
NOTIFYDEV global|rgr_Residents
event presence: present
globalinit 1
last_timer 4
sleepdevice rgr_Residents
sleepsubtimer 0
sleeptimer 1
timerdev rgr_Residents
timerevent presence: present
triggerDev rgr_Residents
DOIF_eventa:
cmd_nr: 2
cmd_seqnr: 2
cmd_event: rgr_Residents
WT
DOIF_eventas:
cmd_nr: 2
cmd_seqnr: 2
cmd_event: rgr_Residents
state: WT
timerevents:
presence: present
timereventsState:
presence: present
triggerEvents:
presence: present
triggerEventsState:
presence: present
internals:
interval:
0 -1
1 0
2 -1
3 2
intervalfunc:
intervaltimer:
localtime:
0 1587963600
1 1588024800
2 1587960000
3 1588023000
readings:
all rgr_Residents:presence
realtime:
0 07:00:00
1 00:00:00
2 06:00:00
3 23:30:00
time:
0 07:00:00
1 00:00:00
2 06:00:00
3 23:30:00
timeCond:
0 0
1 0
2 1
3 1
timer:
0 0
1 0
2 0
3 0
timers:
0 0 1
1 2 3
trigger:
triggertime:
1588023000:
localtime 1588023000
hash:
1588024800:
localtime 1588024800
hash:
uiState:
uiTable:
Attributes:
cmdState WE,WE|WT,WT|Abwesend
do always
icon helper_doif
repeatcmd 1680:1680
room Heizung
startup set $SELF checkall
wait 0,120:0,120
Bin für jede Hilfe dankbar
oelidoc
Hi,
von heute aus gesehen ist 00:00 morgen, 23:59 wäre noch heute. Ich denke Du musst:
07:00-23:59 machen.
Vielleicht auch 07:00-24:00 ;) Ich glaube da gab es mal einen Beitrag von Damian dazu ...
Gruß Otto
Hallo Otto,
daran hatte ich als "Krücke" auch schon gedacht....
Aber die Zeitdefinition darf doch lt. Commandref durchaus über die Tagesgrenze hinweggehen:
ZitatZeitintervalle über Mitternacht:
define di_light DOIF ([22:00-07:00]) (set light on) DOELSE (set light off)
in Verbindung mit Wochentagen (einschalten am Freitag ausschalten am Folgetag):
define di_light DOIF ([22:00-07:00|5]) (set light on) DOELSE (set light off)
Und 1:00 Montagmorgen ist doch nicht definiert oder?
07:00-24:00 hatte ich auch schon - gleicher Fehler.
Gruß und Dank
oelidoc
Darf es, aber ich glaube in Kombination mit dem Wochentag kommt es da zu "Irritationen". Aber vielleicht hat Damian noch den richtigen Tipp.
Ich bilde mir ein er bleibt dann bis 00:00 nächstes WE?
Zitat von: Otto123 am 27 April 2020, 21:20:35
Ich bilde mir ein er bleibt dann bis 00:00 nächstes WE?
Oha, das könnte natürlich sein. Aber wie geht´s dann richtig?
Und wie gesagt 07:00-24:00 geht ja auch nicht :(
Du findest 1 min vor 12 ist eine extreme Einschränkung? Geht nicht auch 23:59:59?
Oder eben nicht WE sondern 5 und 6 :)
Aber ich weiß es nicht genau :)
Na klar geht das. Werde ich ausprobieren.
Aber was wäre, wenn die Pumpe Sa und So bis sagen wir mal 01:00 laufen soll. Laut Commanref müsste das ja gehen. Wo ist dann der Unterschied zu 00:00 oder 24:00?
Scheint für mich logisch zu sein, wenn man von einer Püfung auf Uhrzeit am Wochenende ausgeht, muss das Uhrzeitintervall UND die Prüfung auf Wochende erfüllt sein. Das Wochenende endet 23:59:59. Wenn das an anderen Wochentagen funktioniert (also Montags bis 01:00 geht tatsächlich bis Dienstag 01:00) dann hat Damian das Wochenende vergessen;-)
Kurz, weil mobil....
Zitat von: KernSani am 27 April 2020, 22:00:09
... dann hat Damian das Wochenende vergessen;-)
Das könnte natürlich sein, kann ich aber nicht beurteilen.
Vielleicht meldet sich Damian ja gelegntlich zu diesem Problem.
Gruß
oelidoc
Zitat von: oelidoc am 27 April 2020, 22:03:07
Das könnte natürlich sein, kann ich aber nicht beurteilen.
Vielleicht meldet sich Damian ja gelegntlich zu diesem Problem.
Gruß
oelidoc
Ich befürchte, dass [22:00-07:00|5] schon seit geraumer Zeit nicht mehr funktioniert.
Früher mal hat das Modul um 07:00 getriggert. Unabhängig vom Wochentag wurde die Bedingung ausgewertet, das Modul lief dann zwangsläufig in den DOELSE-Fall. Inzwischen wird vorher geschaut, ob der Wochentag passt und wenn der Wochentag nicht passt, dann wird die Bedingung gar nicht erst ausgewertet.
Daher muss ich dieses Beispiel aus der Doku entfernen.
Vielleicht erweitere ich die Syntax mal, damit so etwas funktioniert:
[22:00|5-07:00|6]
00:00 dürfte bereits der Folgetag sein.
Hallo Damian,
dann ist die Lösung also 23:59:59?
Was mich aber wundert, ist, daß es von Samstag auf Sonntag mit 00:00 klappt, aber nicht von Sonntag auf Montag. Oder habe ich da was nicht verstanden?
Zitat von: oelidoc am 27 April 2020, 23:04:02
Hallo Damian,
dann ist die Lösung also 23:59:59?
Was mich aber wundert, ist, daß es von Samstag auf Sonntag mit 00:00 klappt, aber nicht von Sonntag auf Montag. Oder habe ich da was nicht verstanden?
([07:00-00:00|7]
bedeutet:
07:00 Samstag->Trigger, 00:00 ist schon Sonntag->Trigger, 07:00 Sonntag->Trigger, 00:00 ist Montag -> kein Trigger
Zitat von: Damian am 27 April 2020, 23:09:47
07:00 Samstag->Trigger, 00:00 ist schon Sonntag->Trigger, 07:00 Sonntag->Trigger, 00:00 ist Montag -> kein Trigger
Oje, ich glaub ich versteh´s wirklich nicht. Müsste denn bei Montag -> kein Trigger nicht das DOELSE Pumpe aus zuschlagen?
Zitat von: oelidoc am 27 April 2020, 23:17:18
Oje, ich glaub ich versteh´s wirklich nicht. Müsste denn bei Montag -> kein Trigger nicht das DOELSE Pumpe aus zuschlagen?
Nein, weil, wie ich schon geschrieben habe, um 00:00 von Sonntag auf Montag die Bedingung nicht ausgewertet wird. Früher mal (vor paar Jahren) wurde immer getriggert, das war aber oft unerwünscht.
Okay, vielen Dank.
Dann warte ich mal auf
Zitat von: Damian am 27 April 2020, 22:57:26
Vielleicht erweitere ich die Syntax mal, damit so etwas funktioniert:
[22:00|5-07:00|6]
;) ;)
Gute Nacht
oelidoc