Hallo,
ich versuche seit einiger Zeit den WeekdayTimer korrekt für meine Heizungssteuerung einzuricht. Leider habe ich das Problem, dass er zwar spannenderweise sehr zuverlässig einschaltet, aber nicht ausschaltet.
Grundsätzlich habe ich 5 verschiedene Heizkreisläufe, welche ich einzeln ansteuere. Das Problem existiert bei allen 5 - ich gehe aber nur auf einen näher ein.
Definition
defmod liv_wdt_heating WeekdayTimer sys_http_alpha2_changes de Mo-Mi|15:00|liv_set_mode:1 Do-Fr|07:00|liv_set_mode:1 Mo-Fr|23:00|liv_set_mode:2 $we|08:00|liv_set_mode:1 $we|23:55|liv_set_mode:2
attr liv_wdt_heating commandTemplate set $NAME $EVENT
attr liv_wdt_heating disable 0
attr liv_wdt_heating room Heizung,Wohnzimmer
attr liv_wdt_heating switchInThePast 1
attr liv_wdt_heating verbose 5
liv_set_mode ist ein set von einem HTTPMOD. 1 ist hierbei "Ein" und 2 ist "Aus".
switchInThePast ist aktiviert, weil HTTPMOD nicht als Heizung erkannt wird, ich aber meinen Raspberry immer um 01:30 reboote (nicht wegen FHEM) und ich aufgrund meiner schwerfälligen Heizung hier sonst falsche Werte hätte, wenn der WeekdayTimer nicht die richtigen Werte nochmals setzt. Daher wird im Startup Notify der Befehl ausgeführt: set bat_wdt_heating WDT_Params all. Dadurch wird auch immer der richtige Status der Heizung gesetzt (2). Ohne switchInThePast würde das ja meines Verständins nach (und auch laut meinen Tests) nicht klappen.
Internals
Internals:
COMMAND
CONDITION
DEF sys_http_alpha2_changes de Mo-Mi|15:00|liv_set_mode:1 Do-Fr|07:00|liv_set_mode:1 Mo-Fr|23:00|liv_set_mode:2 $we|08:00|liv_set_mode:1 $we|23:55|liv_set_mode:2
DEVICE sys_http_alpha2_changes
FUUID 5dadfe35-f33f-393b-b6d7-affb65a9bf44b5db
GlobalDaylistSpec
LANGUAGE de
NAME liv_wdt_heating
NR 317
Profil 0: Sonntag 08:00:00 liv_set_mode:1, 23:55:00 liv_set_mode:2
Profil 1: Montag 15:00:00 liv_set_mode:1, 23:00:00 liv_set_mode:2
Profil 2: Dienstag 15:00:00 liv_set_mode:1, 23:00:00 liv_set_mode:2
Profil 3: Mittwoch 15:00:00 liv_set_mode:1, 23:00:00 liv_set_mode:2
Profil 4: Donnerstag 07:00:00 liv_set_mode:1, 23:00:00 liv_set_mode:2
Profil 5: Freitag 07:00:00 liv_set_mode:1, 23:00:00 liv_set_mode:2
Profil 6: Samstag 08:00:00 liv_set_mode:1, 23:55:00 liv_set_mode:2
Profil 7: Wochenende 08:00:00 liv_set_mode:1, 23:55:00 liv_set_mode:2
STATE liv_set_mode:1
STILLDONETIME 0
TYPE WeekdayTimer
READINGS:
2019-11-20 17:57:20 currValue liv_set_mode:1
2019-11-20 17:56:03 disabled 0
2019-11-20 17:57:20 nextUpdate 2019-11-20 23:00:00
2019-11-20 17:57:20 nextValue liv_set_mode:2
2019-11-20 17:57:20 state liv_set_mode:1
SWITCHINGTIMES:
Mo-Mi|15:00|liv_set_mode:1
Do-Fr|07:00|liv_set_mode:1
Mo-Fr|23:00|liv_set_mode:2
$we|08:00|liv_set_mode:1
$we|23:55|liv_set_mode:2
TIMER:
liv_wdt_heating_1:
HASH liv_wdt_heating
MODIFIER 1
NAME liv_wdt_heating_1
immerSchalten 1
liv_wdt_heating_3:
HASH liv_wdt_heating
MODIFIER 3
NAME liv_wdt_heating_3
liv_wdt_heating_SetTimerOfDay:
HASH liv_wdt_heating
MODIFIER SetTimerOfDay
NAME liv_wdt_heating_SetTimerOfDay
SETTIMERATMIDNIGHT 1
liv_wdt_heating_delayed:
HASH liv_wdt_heating
MODIFIER delayed
NAME liv_wdt_heating_delayed
dayNumber:
!$we 8
$we 7
di 2
do 4
fr 5
mi 3
mo 1
sa 6
so 0
helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
SWITCHINGTIME:
0:
08:00:00 liv_set_mode:1
23:55:00 liv_set_mode:2
1:
15:00:00 liv_set_mode:1
23:00:00 liv_set_mode:2
2:
15:00:00 liv_set_mode:1
23:00:00 liv_set_mode:2
3:
15:00:00 liv_set_mode:1
23:00:00 liv_set_mode:2
4:
07:00:00 liv_set_mode:1
23:00:00 liv_set_mode:2
5:
07:00:00 liv_set_mode:1
23:00:00 liv_set_mode:2
6:
08:00:00 liv_set_mode:1
23:55:00 liv_set_mode:2
7:
08:00:00 liv_set_mode:1
23:55:00 liv_set_mode:2
WEDAYS:
3 1
4 1
longDays:
de:
Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Wochenende
Werktags
en:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
weekend
weekdays
fr:
Dimanche
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
weekend
jours de la semaine
profil:
1:
EPOCH 1574258400
PARA liv_set_mode:1
TIME 15:00
TAGE:
1
2
3
2:
EPOCH 1574229600
PARA liv_set_mode:1
TIME 07:00
TAGE:
4
5
3:
EPOCH 1574287200
PARA liv_set_mode:2
TIME 23:00
TAGE:
1
2
3
4
5
4:
EPOCH 1574233200
PARA liv_set_mode:1
TIME 08:00
TAGE:
7
5:
EPOCH 1574290500
PARA liv_set_mode:2
TIME 23:55
TAGE:
7
profile_IDX:
0:
08:00:00 4
23:55:00 5
1:
15:00:00 1
23:00:00 3
2:
15:00:00 1
23:00:00 3
3:
15:00:00 1
23:00:00 3
4:
07:00:00 2
23:00:00 3
5:
07:00:00 2
23:00:00 3
6:
08:00:00 4
23:55:00 5
7:
08:00:00 4
23:55:00 5
shortDays:
de:
so
mo
di
mi
do
fr
sa
$we
!$we
en:
su
mo
tu
we
th
fr
sa
$we
!$we
fr:
di
lu
ma
me
je
ve
sa
$we
!$we
Attributes:
commandTemplate set $NAME $EVENT
disable 0
room Heizung,Wohnzimmer
switchInThePast 1
verbose 5
Im Gegensatz zu einem anderen Thread den ich gelesen habe, werden bei mir Log Einträge zum Zeitpunkt der Abschaltung generiert (verbose 5). Was mir jedoch aufgefallen ist: "result of condition:0"
2019.11.19 23:55:00 4: [bat_wdt_heating] time=23:55/1574204100 delay=0, nextDelay=60, nextRetry=1574204160
2019.11.19 23:55:00 4: [bat_wdt_heating] delayedExecutionCond:0
2019.11.19 23:55:00 4: [bat_wdt_heating] result of delayedExecutionCond: 0
2019.11.19 23:55:00 4: [bat_wdt_heating] list of window sensors found: 'bat_wdt_heating'
2019.11.19 23:55:00 4: [bat_wdt_heating] condition: - Tage:7
2019.11.19 23:55:00 5: [bat_wdt_heating] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2019.11.19 23:55:00 5: [bat_wdt_heating] result of condition:0
2019.11.19 23:55:00 4: [kit_wdt_heating] time=23:55/1574204100 delay=0, nextDelay=60, nextRetry=1574204160
2019.11.19 23:55:00 4: [kit_wdt_heating] delayedExecutionCond:0
2019.11.19 23:55:00 4: [kit_wdt_heating] result of delayedExecutionCond: 0
2019.11.19 23:55:00 4: [kit_wdt_heating] list of window sensors found: 'kit_wdt_heating'
2019.11.19 23:55:00 4: [kit_wdt_heating] condition: - Tage:7
2019.11.19 23:55:00 5: [kit_wdt_heating] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2019.11.19 23:55:00 5: [kit_wdt_heating] result of condition:0
2019.11.19 23:55:00 4: [liv_wdt_heating] time=23:55/1574204100 delay=0, nextDelay=60, nextRetry=1574204160
2019.11.19 23:55:00 4: [liv_wdt_heating] delayedExecutionCond:0
2019.11.19 23:55:00 4: [liv_wdt_heating] result of delayedExecutionCond: 0
2019.11.19 23:55:00 4: [liv_wdt_heating] list of window sensors found: 'liv_wdt_heating'
2019.11.19 23:55:00 4: [liv_wdt_heating] condition: - Tage:7
2019.11.19 23:55:00 5: [liv_wdt_heating] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2019.11.19 23:55:00 5: [liv_wdt_heating] result of condition:0
bat_wdt_heating und kit_wdt_heating sollten zur gleichen Zeit schalten, haben aber wie geschrieben ebenfalls von dem Problem betroffen.
Hat jemand Ideen dazu? Ich wäre euch wirklich dankbar.
Beste Grüße,
Tobias
Und was ist genau das Problem? Er testet ja um 23:55 die condition, und stellt fest, dass es nicht trifft. Dann schaltet er nicht. Er tut was er soll.
Hi
Zitat von: amenomade am 20 November 2019, 18:56:02
Und was ist genau das Problem? Er testet ja um 23:55 die condition, und stellt fest, dass es nicht trifft. Dann schaltet er nicht. Er tut was er soll.
Ist grad ein wenig peinlich, aber du hast mich grad nochmals dazu gebracht genau auf die Zeit zu schauen - ich hab ihn ja auf 23:00 gestellt und da ist kein Log drin. :o
Zitat von: butsify am 20 November 2019, 18:30:25
Im Gegensatz zu einem anderen Thread den ich gelesen habe, werden bei mir Log Einträge zum Zeitpunkt der Abschaltung generiert (verbose 5). Was mir jedoch aufgefallen ist: "result of condition:0"
Daher denke ich doch, dass das Problem aus dem anderen Thread auch meins ist. Ich hab das aktualisiert und prüfe das nochmals. Danke für den Denkanstoß ;D
Update:
Hier der Thread den ich meine: https://forum.fhem.de/index.php/topic,104167.0.html (https://forum.fhem.de/index.php/topic,104167.0.html)
Vielleicht eine Anmerkung noch für die Allgemeinheit:
Die neueren Versionen des WeekdayTimer sollten sich automatisch korrekt auch am ersten Tag aktualisieren und switchInThePast ausführen, ohne dass man den setter bemühen muß.
(Wer da Probleme feststellt, also dass zu viel geschaltet wird, bitte melden...)
(Danke an den TE für's Wiederöffnen des Threads und die nette Rückmeldung via pm, eine Ergänzung des Titels mit z.B. [vermutlich Doppelmeldung] und Verlinken in den anderen Thread wäre noch nicht schlecht).