[gelöst] Schaltuhr für Heizung funktioniert bei mir nicht richtig

Begonnen von Vize, 28 Januar 2017, 12:02:28

Vorheriges Thema - Nächstes Thema

Vize

Hallo zusammen,

ich habe mich gestern mal hingesetzt, und versucht, mir eine Schaltuhr für einen E-Heizkörper mit diesem 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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vize

#2
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

Damian

(["$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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vize

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

Vize

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