[gelöst] Verständnisproblem mit Status und Schaltfunktion

Begonnen von Brockmann, 12 Dezember 2017, 10:48:55

Vorheriges Thema - Nächstes Thema

Brockmann

Folgendes DOIF soll eine einfache Boost-Funktion für eine Heizung realisieren. Setzt man das DOIF auf "on", wird die Zieltemperatur erhöht. Wird eine Temperaturschwelle erreicht oder das DOIF zuvor auf "off" gesetzt, sollt das Thermostat zu einem voreingestellten Wert zurückkehren.


Internals:
   CFGFN
   DEF        (["$SELF:state: on"])
(
set WZ_Heizung desired-temp 23
)
DOELSEIF(([WZ_Heizung:measured-temp] => 22 and [?$SELF:state] eq "on") or ["$SELF:state: off"])
(
set WZ_Heizung desired-temp [WZ_TC:desired-temp-manu]
)
   NAME       WZ_Heizung_Boost
   NR         424722
   NTFY_ORDER 50-WZ_Heizung_Boost
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-12-12 10:27:56   cmd             0
     2017-12-12 10:27:56   state           initialized
   Condition:
     0          EventDoIf('WZ_Heizung_Boost',$hash,'state: on',0)
     1          (ReadingValDoIf($hash,'WZ_Heizung','measured-temp') => 22 and ReadingValDoIf($hash,'WZ_Heizung_Boost','state') eq "on") or EventDoIf('WZ_Heizung_Boost',$hash,'state: off',0)
   Devices:
     1           WZ_Heizung
     all         WZ_Heizung
   Do:
     0:
       0            set WZ_Heizung desired-temp 23
     1:
       0            set WZ_Heizung desired-temp [WZ_TC:desired-temp-manu]
     2:
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     1           WZ_Heizung:measured-temp
     all         WZ_Heizung:measured-temp
   Regexp:
     0:
       0          WZ_Heizung_Boost:state: on
     1:
       0          WZ_Heizung_Boost:state: off
     All:
       0          WZ_Heizung_Boost:state: on
       1          WZ_Heizung_Boost:state: off
   State:
Attributes:
   cmdState   on|off
   setList    on off


Da habe ich aber wohl zu einfach gedacht. Denn wenn ich das DOIF auf "on" setze, stellt es sich eine Sekunde später wieder auf "off" zurück. Getriggert wird das "Zurückspringen" offenbar durch ein Event von WZ_Heizung, aber nach meinem Verständnis sollte in dem Moment keine Variante der Bedingung 2 erfülllt sein. measured-temp ist kleiner 22, also scheint die Bedingung ["$SELF:state: off"] erfüllt zu sein, was ich nicht verstehe. Vermutlich habe ich da etwas mit Status und $Self noch nicht ganz durchdrungen. Kann mir jemand auf die Sprünge helfen?

Log des Ablaufs:

2017-12-03 11:47:24 CUL_HM WZ_Heizung set_desired-temp 23
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost cmd_nr: 1
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost cmd: 1
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost cmd_event: set_on_cmd_1
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost on
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost Device: WZ_Heizung_Boost
2017-12-03 11:47:25 DOIF WZ_Heizung_Boost e_WZ_Heizung_Boost_STATE: on

2017-12-03 11:47:26 DOIF WZ_Heizung_Boost cmd_nr: 2
2017-12-03 11:47:26 DOIF WZ_Heizung_Boost cmd: 2
2017-12-03 11:47:26 DOIF WZ_Heizung_Boost cmd_event: WZ_Heizung
2017-12-03 11:47:26 DOIF WZ_Heizung_Boost off
2017-12-03 11:47:26 CUL_HM WZ_Heizung desired-temp: 23.0
2017-12-03 11:47:26 CUL_HM WZ_Heizung set_desired-temp 21.0
2017-12-03 11:47:26 CUL_HM WZ_TC desired-temp: 23.0

2017-12-03 11:47:27 CUL_HM WZ_Heizung desired-temp: 21.0
2017-12-03 11:47:27 CUL_HM WZ_TC desired-temp: 21.0

Ellert


Brockmann