Hallo zusammen,
ich nutze bei einem WeekdayTimer die Möglichkeit den time Parameter mit einer eigenen Perlfunktion zu berechnen. In der Perlfunktion benutze ich ein Reading (state = Urlaub: ja/nein) aus einem Dummy-Device. Das funktioniert auch beim Speichern der Definition prima.
Wenn ich fhem per shutdown/restart neustarte, werden die Werte im WeekdayTimer zwar neu berechnet, aber das Reading hat nur den Defaultwert aus ReadingsVal und nicht den zuletzt gesetzten Wert. Kann es sein, dass beim Neustart der state des Dummy noch nicht gesetzt ist, während WeekdayTimer die Werte neuberechnet? Oder muss ich in meiner Perlfunktion etwas für den Neustart berücksichtigen?
Beste Grüße
Torsten
Ja, es kommt auf die Reihenfolge der Definitionen an
Hallo Dietmar,
danke für die schnelle Antwort. Kann ich denn die Reihenfolge ändern?
Gruß
Torsten
Ich glaube es geht mit Löschen und neu anlegen
Ups... das wäre aber umständlich :(
Dann müsste ich ja den WeekdayTimer immer neu anlegen, wenn ich eine neue "Variable" benutzen will.
Die defines werden beim Start in einer bestimmten Reihenfolge abgearbeitet. Die Reihenfolge bestimmt fhem.cfg.
Mir ist nicht bekannt wie man das beeinflussen kann ohne löschen Neuanlegen zu nutzen.
Dann werde ich das mal versuchen...
Hallo Dietmar,
ich habe den WeekdayTimer gelöscht und neu angelegt. In der fhem.cfg ist der Timer nun der letzte Eintrag, so dass mein "Urlaubsdummy" weit vorher in der Datei steht.
Das Verhalten beim Neustart hat sich aber nicht geändert und der Dummy wird beim Berechnen der Zeiten im WeekdayTimer nicht berücksichtigt.
Was nun? Kann ich Dir mit einem Log weiterhelfen?
Gruß Torsten
Da bin auch ich dann ratlos
veröffentliche bitte mal deine Definition
Hallo Dietmar,
die vom WeekdayTimer oder meinem dummy?
Gruß
Torsten
WDT
Hallo Dietmar,
hier das list des WDT:
Internals:
COMMAND
CONDITION
DEF KG.hz.ZS.Zirkulationspumpe de !$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",1)}|on !$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",1)}|off !$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",2)}|on !$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",2)}|off $we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",1)}|on $we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",1)}|off $we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",2)}|on $we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",2)}|off
DEVICE KG.hz.ZS.Zirkulationspumpe
GlobalDaylistSpec
LANGUAGE de
NAME KG.hz.ZS.Zirkulationspumpe.tim
NR 165
Profil 0: Sonntag 06:30:00 on, 08:00:00 off, 18:30:00 on, 20:00:00 off
Profil 1: Montag 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
Profil 2: Dienstag 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
Profil 3: Mittwoch 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
Profil 4: Donnerstag 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
Profil 5: Freitag 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
Profil 6: Samstag 06:30:00 on, 08:00:00 off, 18:30:00 on, 20:00:00 off
Profil 7: Wochenende 06:30:00 on, 08:00:00 off, 18:30:00 on, 20:00:00 off
Profil 8: Werktags 04:30:00 on, 06:00:00 off, 16:30:00 on, 18:00:00 off
STATE active
STILLDONETIME 0
TYPE WeekdayTimer
Readings:
2016-12-16 19:29:32 currValue off
2016-12-16 19:29:32 nextUpdate 2016-12-17 06:30:00
2016-12-16 19:29:32 nextValue on
2016-12-16 19:29:32 state active
SWITCHINGTIMES:
!$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",1)}|on
!$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",1)}|off
!$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",2)}|on
!$we|{myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",2)}|off
$we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",1)}|on
$we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",1)}|off
$we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",2)}|on
$we|{myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",2)}|off
Timer:
Kg.hz.zs.zirkulationspumpe.tim_8:
HASH KG.hz.ZS.Zirkulationspumpe.tim
MODIFIER 8
NAME KG.hz.ZS.Zirkulationspumpe.tim_8
Kg.hz.zs.zirkulationspumpe.tim_settimerofday:
HASH KG.hz.ZS.Zirkulationspumpe.tim
MODIFIER SetTimerOfDay
NAME KG.hz.ZS.Zirkulationspumpe.tim_SetTimerOfDay
SETTIMERATMIDNIGHT 1
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:
06:30:00 on
08:00:00 off
18:30:00 on
20:00:00 off
1:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
2:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
3:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
4:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
5:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
6:
06:30:00 on
08:00:00 off
18:30:00 on
20:00:00 off
7:
06:30:00 on
08:00:00 off
18:30:00 on
20:00:00 off
8:
04:30:00 on
06:00:00 off
16:30:00 on
18:00:00 off
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 1481859000
PARA on
TIME {myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",1)}
TAGE:
8
2:
EPOCH 1481864400
PARA off
TIME {myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",1)}
TAGE:
8
3:
EPOCH 1481902200
PARA on
TIME {myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","on",2)}
TAGE:
8
4:
EPOCH 1481907600
PARA off
TIME {myWeekdayTimerTimeTable(0,"KG.hz.ZS.Zirkulationspumpe","off",2)}
TAGE:
8
5:
EPOCH 1481866200
PARA on
TIME {myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",1)}
TAGE:
7
6:
EPOCH 1481871600
PARA off
TIME {myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",1)}
TAGE:
7
7:
EPOCH 1481909400
PARA on
TIME {myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","on",2)}
TAGE:
7
8:
EPOCH 1481914800
PARA off
TIME {myWeekdayTimerTimeTable(1,"KG.hz.ZS.Zirkulationspumpe","off",2)}
TAGE:
7
Profile_idx:
0:
06:30:00 5
08:00:00 6
18:30:00 7
20:00:00 8
1:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
2:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
3:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
4:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
5:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
6:
06:30:00 5
08:00:00 6
18:30:00 7
20:00:00 8
7:
06:30:00 5
08:00:00 6
18:30:00 7
20:00:00 8
8:
04:30:00 1
06:00:00 2
16:30:00 3
18:00:00 4
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:
alias Zeitsteuerung
group Zirkulationspumpe
icon sani_pump
room Heizungsraum,Zentrale Steuerung
Meine eigene Funktion myWeekdayTimerTimeTable wertet wie beschrieben, den Dummy mit den Informationen zu Urlaub aus und passt entsprechend die Start-/Endzeiten für die Zirkulationspumpe an.
Gruß
Torsten
Die Zeitfunktionen werden immer Mitternachts ausgewertet.
Wenn du dein Dummy änderst, must du Weekdaytimer_SetAllParam() aufrufen
Hallo Dietmar,
danke für den Hinweis, das würde ich dann in mein notify des dummy einbauen. Das Problem liegt ja aber nach wie vor darin, dass bei einem Neustart von fhem der Wert des Dummy bei der Berechnung des WDT nicht "berücksichtigt" wird.
Gruß
Torsten
Starte das System mal mit hohem log Level. Nach dem Start sofort log Level auf einen normalen Wert zurück setzen.
Dann kannst du vielleicht erkennen ob die Reihenfolge oder sonst etwas stört.
Hallo Dietmar,
habe mir mal über die Feiertage die Zeit genommen und beim Neustart von fhem verbose 5 aktiviert. Nachfolgend die Ausschnitte aus der Logdatei und man sieht m.E. gut, dass das setstate für meinen "Urlaubsdummy" viel später kommt, nachdem bereits der WDT abgearbeitet wurde:
2016.12.25 17:21:03.462 5: Cmd: >get BW 12-31<
2016.12.25 17:21:03.465 4: myWeekdayTimerTimeTable - Wochenende: 1
2016.12.25 17:21:03.465 4: myWeekdayTimerTimeTable - Device: KG.hz.ZS.Zirkulationspumpe
2016.12.25 17:21:03.465 4: myWeekdayTimerTimeTable - Event: on
2016.12.25 17:21:03.465 4: myWeekdayTimerTimeTable - Index: 1
2016.12.25 17:21:03.466 4: myWeekdayTimerTimeTable - Urlaub: nein
2016.12.25 17:21:03.466 3: myWeekdayTimerTimeTable - Return: 06:30
2016.12.25 17:21:03.467 4: myWeekdayTimerTimeTable - Wochenende: 1
2016.12.25 17:21:03.467 4: myWeekdayTimerTimeTable - Device: KG.hz.ZS.Zirkulationspumpe
2016.12.25 17:21:03.467 4: myWeekdayTimerTimeTable - Event: on
2016.12.25 17:21:03.467 4: myWeekdayTimerTimeTable - Index: 1
2016.12.25 17:21:03.468 4: myWeekdayTimerTimeTable - Urlaub: nein
2016.12.25 17:21:03.468 3: myWeekdayTimerTimeTable - Return: 06:30
2016.12.25 17:21:03.469 4: myWeekdayTimerTimeTable - Wochenende: 1
2016.12.25 17:21:03.469 4: myWeekdayTimerTimeTable - Device: KG.hz.ZS.Zirkulationspumpe
2016.12.25 17:21:03.469 4: myWeekdayTimerTimeTable - Event: on
2016.12.25 17:21:03.469 4: myWeekdayTimerTimeTable - Index: 1
2016.12.25 17:21:03.469 4: myWeekdayTimerTimeTable - Urlaub: nein
2016.12.25 17:21:03.470 3: myWeekdayTimerTimeTable - Return: 06:30
2016.12.25 17:21:03.470 4: myWeekdayTimerTimeTable - Wochenende: 1
2016.12.25 17:21:03.471 4: myWeekdayTimerTimeTable - Device: KG.hz.ZS.Zirkulationspumpe
2016.12.25 17:21:03.471 4: myWeekdayTimerTimeTable - Event: on
2016.12.25 17:21:03.471 4: myWeekdayTimerTimeTable - Index: 1
2016.12.25 17:21:03.471 4: myWeekdayTimerTimeTable - Urlaub: nein
2016.12.25 17:21:03.472 3: myWeekdayTimerTimeTable - Return: 06:30
2016.12.25 17:21:03.473 5: Cmd: >get BW 12-25<
...
2016.12.25 17:21:04.986 5: Cmd: >setstate T_L_Kalender_Start active<
2016.12.25 17:21:04.987 5: Cmd: >setstate T_L_Kalender_Start 2016-12-25 17:19:00 state active<
2016.12.25 17:21:04.987 5: Cmd: >setstate Tischleuchten off<
2016.12.25 17:21:04.988 5: Cmd: >setstate Tischleuchten 2016-12-25 17:14:06 LastDevice E1.wz.ZS.Tischleuchte<
2016.12.25 17:21:04.988 5: Cmd: >setstate Tischleuchten 2016-12-25 17:14:06 LastDevice_Abs E1.wz.ZS.Tischleuchte<
2016.12.25 17:21:04.989 5: Cmd: >setstate Tischleuchten 2016-12-25 17:14:06 state off<
2016.12.25 17:21:04.989 5: Cmd: >setstate Urlaub.ZS.dum atHome<
2016.12.25 17:21:04.990 5: Cmd: >setstate Urlaub.ZS.dum 2016-12-25 17:18:40 state atHome<
2016.12.25 17:21:04.991 5: Cmd: >setstate WeatherAtHome <strong>Schwetzingen (Yahoo)</strong></br>Temperatur: 8 °C</br>Feuchtigkeit: 81 %</br>Luftdruck: 1013 hPa</br>Konditionen: wolkig</br>Wind: Wind: SW 14 km/h</br>Stand: 2016-12-25 17:20:22<
Insgesamt wir zwar WDT mehrfach durchlaufen, aber eben leider ohne, dass mein Dummy wieder den richtigen Wert hat.
Gibt es eine Lösung für das Problem?
Gruß
Torsten
Du kannst nach dem Ereignis initialized Heating_Control_SetAllTemp () in einem notify aufrufen.
Dann werden die timer erneut geladen
Hallo Dietmar,
danke für den Tipp, werde dann ein notify dafür nutzen.
Gruß
Torsten
Hallo Dietmar,
habe ein Notify eingericht, das ausgeführt wird, sobald fhem initialisiert ist.
Der Aufruf von Heating_Control_SetAllTemps() geht aber nur auf alle mit HC definierten Timer:
2016.12.26 12:44:49.897 3: Heating_Control_SetAllTemps() done on: E2.ku.ZS.Heizung.tim ST.bz.HR.Steuerung.tim
Dann habe ich es mit WeekdayTimer_SetAllParms() probiert, mit dem zwar alle WDT angesprochen werden - auch der für die Zirkulationspumpe, aber meine eigene Funktion wird dabei nicht ausgeführt. Es fehlen die Log-Einträge meiner Funktion und für die Werte der Schaltzeiten wird der Urlaubsdummy nicht berücksichtigt.
2016.12.26 12:38:46.032 3: WeekdayTimer_SetAllParms() done on: E1.wz.ZS.Bodenheizung.tim.wt E1.wz.ZS.Heizung.tim E1.wz.ZS.Wandheizung.tim.we E1.wz.ZS.Wandheizung.tim.wt E2.ez.ZS.Bodenheizung.tim.we E2.ez.ZS.Bodenheizung.tim.wt EG.fl.HR.Steuerung.tim KG.hz.ZS.Zirkulationspumpe.tim ST.sz.HR.Steuerung.tim ZS.zs.HR.mainRadiators.tim
Was mache ich falsch?
Gruß
Torsten
Es werden nur Devices, die als Heizung erkannt werden, automatisch geschaltet. Zirkulationspumpen gehören nicht dazu.
Man kann das aber mit Switchinthepast erzwingen.
Hallo Dietmar,
ich will ja auch gar nicht, dass etwas geschaltet wird, sondern nur, dass die Schaltzeiten neu berechnet werden, so dass mein "Urlaubsdummy" berücksichtigt wird.
Kann ich nicht die Funktion von WDT aufrufen, die Du um Mitternacht benutzt, um die Schaltzeiten neu zu berechnen? Wenn ja, wie lautet diese?
Gruß
Torsten
Ja, das geht, ist aber nicht so einfach.
Bin noch bis morgen Abend im Weihnachtsurlaub. Dann suche ich den Aufruf heraus.
versuch mal:
WeekdayTimer_SetTimerForMidnightUpdate( { HASH => $defs{WDTNAME}} )
WDTNAME musst du ersetzen, durch deine Bezeichung des WDT.