Hallo zusammen,
ich habe mich gestern mal hingesetzt, und versucht, mir eine Schaltuhr für einen E-Heizkörper mit diesem (https://wiki.fhem.de/wiki/DOIF/Ein-_und_Ausgabe_in_FHEMWEB_und_Tablet-UI_am_Beispiel_einer_Schaltuhr#ReadingsGroup) Beispiel aus dem Wiki zu bauen.
Leider funktioniert mein DOIF nicht wie gewünscht...
Der E-Heizkörper ist mit einem Wandthermostaten gepeert.
Ich habe das DOIF so gestaltet, dass es einen "button" mit drei Zuständen gibt: auto, manuell und tag
- Bei Zustand auto soll dass DOIF den Thermostaten zur einer auswählbaren Zeit auf bestimmte Temperaturen setzen, so dass die Heizung ein- und ausschaltet: begin und end
- Bei Zustand tag soll die Temperatur im Thermostaten auf 21 °C gestzt werden
- Bei Zustand manuell soll einfach nichts gemacht werden
Gestern Abend stand das DOIF auf cmd_4, also im letzten DOELSEIF. Dann habe ich den "button" auf auto gesetzt und entsprechende Zeiten gewählt.
Heute Morgen sprang es zur eingestellten Zeit aber nicht um, und die Heizung blieb kalt.
Dann habe ich eben nochmal versucht, dies anzustoßen.
Stelle ich den "button" auf tag, wird wie gewünscht am Thermostaten 21 °C gesetzt, und das DOIF springt in cmd_3. Danach habe ich den "button" auf auto gestellt und entsprechende Zeiten gewählt. Ergebnis, das DOIF springt nicht auf cmd_1 bzw. cmd_2, und die Temperatur im Thermostaten wird nicht geändert. Das DOIF bleibt auf cmd_3. Im Event-Monitor erscheint auch nichts zu den gewählten Zeiten.
Hier komme ich leider nicht weiter, bzw. weiß nicht, wo mein Fehler liegt...wahrscheinlich sehe ich nur den Wald vor lauter Bäumen nicht...
Vielleicht kann ja jemand helfen, bzw. mich in die richtige Richtung schubsen?
Danke schonmal!
DEF des DOIF:
(["$SELF:button: auto"] and [[$SELF:begin,"00:00"]])
(set bz_202_thermostat_klima desired-temp 21.0)
DOELSEIF (["$SELF:button: auto"] and [[$SELF:end,"00:01"]])
(set bz_202_thermostat_klima desired-temp 18.0)
DOELSEIF (["$SELF:button: tag"])
(set bz_202_thermostat_klima desired-temp 21.0)
DOELSEIF (["$SELF:button: manuell"])
()
list des DOIF:
Internals:
CFGFN
DEF (["$SELF:button: auto"] and [[$SELF:begin,"00:00"]]) (set bz_202_thermostat_klima desired-temp 21.0) DOELSEIF (["$SELF:button: auto"] and [[$SELF:end,"00:01"]])(set bz_202_thermostat_klima desired-temp 18.0) DOELSEIF (["$SELF:button: tag"]) (set bz_202_thermostat_klima desired-temp 21.0) DOELSEIF (["$SELF:button: manuell"]) ()
NAME di_bz_heizung_zeitprogramm
NR 542
NTFY_ORDER 50-di_bz_heizung_zeitprogramm
STATE cmd_3
TYPE DOIF
Readings:
2017-01-28 11:25:30 Device di_bz_heizung_zeitprogramm
2017-01-28 11:25:13 begin 11:30
2017-01-28 11:25:30 button auto
2017-01-28 11:21:59 cmd 3
2017-01-28 11:21:59 cmd_event di_bz_heizung_zeitprogramm
2017-01-28 11:21:59 cmd_nr 3
2017-01-28 11:23:15 end 11:35
2017-01-28 11:25:30 matched_event_c1_1 button: auto
2017-01-28 11:25:30 matched_event_c2_1 button: auto
2017-01-28 11:21:59 matched_event_c3_1 button: tag
2017-01-28 11:21:33 matched_event_c4_1 button: manuell
2017-01-28 11:21:59 state cmd_3
2017-01-28 11:30:00 timer_01_c01 29.01.2017 11:30:00
2017-01-28 11:35:00 timer_02_c02 29.01.2017 11:35:00
Condition:
0 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: auto',0) and DOIF_time_once($hash,0,$wday)
1 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: auto',0) and DOIF_time_once($hash,1,$wday)
2 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: tag',0)
3 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: manuell',0)
Days:
Devices:
Do:
0:
0 set bz_202_thermostat_klima desired-temp 21.0
1:
0 set bz_202_thermostat_klima desired-temp 18.0
2:
0 set bz_202_thermostat_klima desired-temp 21.0
3:
0
4:
Helper:
event timer_2
globalinit 1
last_timer 2
sleeptimer -1
timerdev di_bz_heizung_zeitprogramm
timerevent button: tag
triggerDev
timerevents:
button: tag
timer_01_c01: 29.01.2017 07:15:00
timer_02_c02: 29.01.2017 08:30:00
Device: di_bz_heizung_zeitprogramm
matched_event_c3_1: button: tag
cmd_nr: 3
cmd: 3
cmd_event: di_bz_heizung_zeitprogramm
cmd_3
timereventsState:
button: tag
timer_01_c01: 29.01.2017 07:15:00
timer_02_c02: 29.01.2017 08:30:00
Device: di_bz_heizung_zeitprogramm
matched_event_c3_1: button: tag
cmd_nr: 3
cmd: 3
cmd_event: di_bz_heizung_zeitprogramm
cmd_3
triggerEvents:
timer_2
triggerEventsState:
button: auto
timer_01_c01: 28.01.2017 11:30:00
timer_02_c02: 28.01.2017 11:35:00
Device: di_bz_heizung_zeitprogramm
matched_event_c1_1: button: auto
matched_event_c2_1: button: auto
Internals:
Interval:
Itimer:
all di_bz_heizung_zeitprogramm
Localtime:
0 1485685800
1 1485686100
Powermap:
Readings:
Readingsdesc:
Pm_consumption:
rtype w
Pm_energy:
rtype whr
Realtime:
0 11:30:00
1 11:35:00
Regexp:
0:
0 di_bz_heizung_zeitprogramm:button: auto
1:
0 di_bz_heizung_zeitprogramm:button: auto
2:
0 di_bz_heizung_zeitprogramm:button: tag
3:
0 di_bz_heizung_zeitprogramm:button: manuell
All:
0 di_bz_heizung_zeitprogramm:button: auto
1 di_bz_heizung_zeitprogramm:button: tag
2 di_bz_heizung_zeitprogramm:button: manuell
State:
Time:
0 [di_bz_heizung_zeitprogramm:begin,"00:00"]
1 [di_bz_heizung_zeitprogramm:end,"00:01"]
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Trigger:
Triggertime:
1485685800:
localtime 1485685800
Hash:
1485686100:
localtime 1485686100
Hash:
Attributes:
readingList button begin end
room 999_Automatiken
setList button:auto,manuell,tag begin:time end:time
webCmd button:begin:end
Gruß
Andreas
Du benutzt indirekte Timer innerhalb des Moduls. Du solltest zuerst ein Update von heute machen.
Siehe: https://forum.fhem.de/index.php/topic,64736.msg570947.html#msg570947
Hallo Damian,
danke für den Tipp. Update ist durch...leider keine Änderung.
Sowohl aus initialized, als auch aus cmd_4 heraus...
Noch irgendwelche Ideen?
EDIT: Zumindest wird der timer_01_c01 bei Erreichen der begin-Zeit einen Tag weitergeschoben...
Gruß
Andreas
Aktuelles list von 12:41 Uhr:
Internals:
CFGFN
DEF (["$SELF:button: auto"] and [[$SELF:begin,"00:00"]]) (set bz_202_thermostat_klima desired-temp 21.0) DOELSEIF (["$SELF:button: auto"] and [[$SELF:end,"00:01"]]) (set bz_202_thermostat_klima desired-temp 18.0) DOELSEIF (["$SELF:button: tag"]) (set bz_202_thermostat_klima desired-temp 21.0) DOELSEIF (["$SELF:button: manuell"]) ()
NAME di_bz_heizung_zeitprogramm
NR 542
NTFY_ORDER 50-di_bz_heizung_zeitprogramm
STATE cmd_4
TYPE DOIF
Readings:
2017-01-28 12:32:43 Device di_bz_heizung_zeitprogramm
2017-01-28 12:35:58 begin 12:40
2017-01-28 12:32:43 button auto
2017-01-28 12:32:35 cmd 4
2017-01-28 12:32:35 cmd_event di_bz_heizung_zeitprogramm
2017-01-28 12:32:35 cmd_nr 4
2017-01-28 12:35:42 end 12:45
2017-01-28 12:32:43 matched_event_c1_1 button: auto
2017-01-28 12:32:43 matched_event_c2_1 button: auto
2017-01-28 12:32:35 matched_event_c4_1 button: manuell
2017-01-28 12:32:35 state cmd_4
2017-01-28 12:40:00 timer_01_c01 29.01.2017 12:40:00
2017-01-28 12:35:58 timer_02_c02 28.01.2017 12:45:00
Condition:
0 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: auto',0) and DOIF_time_once($hash,0,$wday)
1 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: auto',0) and DOIF_time_once($hash,1,$wday)
2 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: tag',0)
3 EventDoIf('di_bz_heizung_zeitprogramm',$hash,'button: manuell',0)
Days:
Devices:
Do:
0:
0 set bz_202_thermostat_klima desired-temp 21.0
1:
0 set bz_202_thermostat_klima desired-temp 18.0
2:
0 set bz_202_thermostat_klima desired-temp 21.0
3:
0
4:
Helper:
event timer_1
globalinit 1
last_timer 2
sleeptimer -1
timerdev di_bz_heizung_zeitprogramm
timerevent button: manuell
triggerDev
timerevents:
button: manuell
timer_01_c01: 28.01.2017 12:35:00
timer_02_c02: 28.01.2017 12:40:00
Device: di_bz_heizung_zeitprogramm
matched_event_c4_1: button: manuell
cmd_nr: 4
cmd: 4
cmd_event: di_bz_heizung_zeitprogramm
cmd_4
timereventsState:
button: manuell
timer_01_c01: 28.01.2017 12:35:00
timer_02_c02: 28.01.2017 12:40:00
Device: di_bz_heizung_zeitprogramm
matched_event_c4_1: button: manuell
cmd_nr: 4
cmd: 4
cmd_event: di_bz_heizung_zeitprogramm
cmd_4
triggerEvents:
timer_1
triggerEventsState:
button: auto
timer_01_c01: 28.01.2017 12:35:00
timer_02_c02: 28.01.2017 12:40:00
Device: di_bz_heizung_zeitprogramm
matched_event_c1_1: button: auto
matched_event_c2_1: button: auto
Internals:
Interval:
Itimer:
all di_bz_heizung_zeitprogramm
Localtime:
0 1485690000
1 1485603900
Powermap:
Readings:
Readingsdesc:
Pm_consumption:
rtype w
Pm_energy:
rtype whr
Realtime:
0 12:40:00
1 12:45:00
Regexp:
0:
0 di_bz_heizung_zeitprogramm:button: auto
1:
0 di_bz_heizung_zeitprogramm:button: auto
2:
0 di_bz_heizung_zeitprogramm:button: tag
3:
0 di_bz_heizung_zeitprogramm:button: manuell
All:
0 di_bz_heizung_zeitprogramm:button: auto
1 di_bz_heizung_zeitprogramm:button: tag
2 di_bz_heizung_zeitprogramm:button: manuell
State:
Time:
0 [di_bz_heizung_zeitprogramm:begin,"00:00"]
1 [di_bz_heizung_zeitprogramm:end,"00:01"]
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Trigger:
Triggertime:
1485603900:
localtime 1485603900
Hash:
1485690000:
localtime 1485690000
Hash:
Attributes:
readingList button begin end
room 999_Automatiken
setList button:auto,manuell,tag begin:time end:time
webCmd button:begin:end
(["$SELF:button: auto"] and [[$SELF:begin,"00:00"]])
Diese Abfrage ist nie wahr, denn der erste Teil ist nur zum Zeitpunkt des Events wahr und der zweite nur zum Zeitpunkt des Zeittriggers.
OK, vestanden.
Aber wie müsste es aussehen, damit nur geschaltet wird, wenn der button auf auto steht und ein bestimmter Zeitpunkt erreicht ist?
Sprich, wenn z.B. um 07:00 der button auf auto steht, soll Thermostat auf 21 °C gestellt werden, dann um 08:30 wieder auf 18 °C runter.
Muss ich den button dann ohne Triggerung, also mit ?, angeben, oder geht sowas gar nicht?
Gruß
Andreas
Ja, ja, ich sagte ja...Wald und Bäume...
Also, nun funktioniert es.
Ich muss nur das Reading abfragen, nicht das Event zum button.
Ersetze
["$SELF:button: auto"]
durch
[$SELF:button] eq "auto"
Danke nochmal für die Tipps und die Hilfe!
Gruß
Andreas