Hauptmenü

DOIF schaltet zur falschen Zeit

Begonnen von math78, 17 April 2019, 23:18:26

Vorheriges Thema - Nächstes Thema

math78

Hallo,

verstehe nicht, wieso mein nachfolgender DOIF Befehl immer abends um 23.00 Uhr von Status cmd1 auf cmd3 geht und nach wenigen Minuten sich wieder auf Status cmd1 stellt?

([15:00-10:00] and [rgr_Eltern:state] eq "home" and [Licht_Flur_unten_Deckenspots_an:state] <= 15) (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1) DOELSEIF ([15:00-23:00] and [rgr_Eltern:state] eq "absent" and [Licht_Flur_unten_Deckenspots_an:state] <= 15) (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1) DOELSE (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Tag)

Internals:
   DEF        ([15:00-10:00] and [rgr_Eltern:state] eq "home" and [Licht_Flur_unten_Deckenspots_an:state] <= 15) (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1) DOELSEIF ([15:00-23:00] and [rgr_Eltern:state] eq "absent" and [Licht_Flur_unten_Deckenspots_an:state] <= 15) (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1) DOELSE (set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Tag)
   FUUID      5c764f14-f33f-3b81-34cf-dd40a56c26af3316
   MODEL      FHEM
   NAME       Licht_Esszimmer_Lightstrip_an
   NR         376
   NTFY_ORDER 50-Licht_Esszimmer_Lightstrip_an
   STATE      cmd_1
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-04-17 23:16:20   Device          Licht_Flur_unten_Deckenspots_an
     2019-04-17 23:02:12   cmd             1
     2019-04-17 23:02:12   cmd_event       Licht_Flur_unten_Deckenspots_an
     2019-04-17 23:02:12   cmd_nr          1
     2019-04-17 23:16:20   e_Licht_Flur_unten_Deckenspots_an_state 0.0
     2019-04-17 16:38:29   e_rgr_Eltern_state home
     2019-03-17 18:57:04   mode            enabled
     2019-04-17 23:02:12   state           cmd_1
     2019-04-17 18:46:56   timer_01_c01    18.04.2019 15:00:00
     2019-04-17 18:46:56   timer_02_c01    18.04.2019 10:00:00
     2019-04-17 23:00:00   timer_03_c02    18.04.2019 15:00:00
     2019-04-17 23:00:00   timer_04_c02    18.04.2019 23:00:00
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'rgr_Eltern','state') eq "home" and ::ReadingValDoIf($hash,'Licht_Flur_unten_Deckenspots_an','state') <= 15
     1          ::DOIF_time($hash,2,3,$wday,$hms) and ::ReadingValDoIf($hash,'rgr_Eltern','state') eq "absent" and ::ReadingValDoIf($hash,'Licht_Flur_unten_Deckenspots_an','state') <= 15
   days:
   devices:
     0           rgr_Eltern Licht_Flur_unten_Deckenspots_an
     1           rgr_Eltern Licht_Flur_unten_Deckenspots_an
     all         rgr_Eltern Licht_Flur_unten_Deckenspots_an
   do:
     0:
       0          set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1
     1:
       0          set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1
     2:
       0          set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Tag
   helper:
     event      0.0
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Licht_Flur_unten_Deckenspots_an
     timerevent 0.0
     triggerDev Licht_Flur_unten_Deckenspots_an
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Licht_Flur_unten_Deckenspots_an
       state: cmd_1
     timerevents:
       0.0
       e_Licht_Flur_unten_Deckenspots_an_state: 0.0
     timereventsState:
       state: 0.0
     triggerEvents:
       0.0
       e_Licht_Flur_unten_Deckenspots_an_state: 0.0
     triggerEventsState:
       state: 0.0
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1555592400
     1          1555574400
     2          1555592400
     3          1555621200
   perlblock:
   readings:
     0           rgr_Eltern:state Licht_Flur_unten_Deckenspots_an:state
     1           rgr_Eltern:state Licht_Flur_unten_Deckenspots_an:state
     all         rgr_Eltern:state Licht_Flur_unten_Deckenspots_an:state
   realtime:
     0          15:00:00
     1          10:00:00
     2          15:00:00
     3          23:00:00
   time:
     0          15:00:00
     1          10:00:00
     2          15:00:00
     3          23:00:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   trigger:
   triggertime:
     1555574400:
       localtime  1555574400
       hash:
     1555592400:
       localtime  1555592400
       hash:
     1555621200:
       localtime  1555621200
       hash:
   uiState:
   uiTable:
Attributes:
   group      Lichtsteuerung
   room       EG_Esszimmer


Danke für Eure Hilfe.

Matthias

Per

Erster Schritt sollte das Einfügen von <Enter> und <Tab> sein, dann kann man das besser lesen.
([15:00-10:00] and [rgr_Eltern:state] eq "home" and [Licht_Flur_unten_Deckenspots_an:state] <= 15)
(set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1)
DOELSEIF ([15:00-23:00] and [rgr_Eltern:state] eq "absent" and [Licht_Flur_unten_Deckenspots_an:state] <= 15)
(set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Abend1)
DOELSE
(set Tagesrhythmus_EG_Esszimmer_LightstripSzene scene Tag)


Sendet rgr_Eltern regelmäßig seinen state?
Wird Licht_Flur_unten_Deckenspots durch Tagesrhythmus_EG_Esszimmer_LightstripSzene beeinflusst?

Kannst du einen Ausschnitt des Eventlog zur betreffenden Zeit (23 + "wenige Minuten") einstellen?

Otto123

#2
Hi,

genau hingeschaut, ergibt sich für mich folgende Erklärung:

Licht_Flur_unten_Deckenspots_an_state liefert regelmäßig
Bedingung cmd_1
([15:00-10:00] and [rgr_Eltern:state] eq "home" and [Licht_Flur_unten_Deckenspots_an:state] <= 15)
Es ist zwischen 15:00 und 10:00 gewesen -> wahr
2019-04-17 16:38:29   e_rgr_Eltern_state home -> wahr
    2019-04-17 23:16:20   e_Licht_Flur_unten_Deckenspots_an_state 0.0 <= 15 -> wahr

3 x wahr ergibt  in der UND Verknüpfung wahr - also cmd 1

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

math78

Danke für Eure Antworten.

Aber was Otto gesagt hat, genau das ist ja das Problem - alle 3 Bedingungen treffen zu, aber dennoch schaltet das DOIF z.B. um 23.00 Uhr (oder wie gestern passiert ganz kurz vorher) in cmd 3 und in ein paar Minuten nach 23.00 Uhr wieder in cmd 1.

rgr_Eltern gehört zum Residents Modul, so weit ich weiß, aktualisiert sich state nur bei Statuswechsel.
Licht_Flur_unten_Deckenspots ist ein Homematic Bewegungssensor innen, der regelmäßig die Helligkeit sendet.
Tagesrhythmus_EG_Esszimmer_LightstripSzene schaltet eine entsprechende Lichtszene der Wohnzimmerlampe.

Grüße

Ellert

Vermutlich wird um 23 Uhr Bedingung 2 unwahr und Bedingung 1 ist noch nicht wahr, also tritt der DOELSE-Fall ein und dann etwas später wird Bed. 1 wahr. Du müsstest Dir die Zustände der beteiligten Operanden zum Zeitpunkt 23 Uhr ansehen.

Otto123

Sorry, dann hatte ich dein Problem falsch verstanden:
([15:00-23:00] and [rgr_Eltern:state] eq "absent" and [Licht_Flur_unten_Deckenspots_an:state] <= 15)
Das DOIF steht ruhig in cmd 1
Es ist 23:00 das DOIF triggert und bearbeitet den zweiten Zweig
[rgr_Eltern:state] eq "absent" ist scheinbar nicht wahr, denn es war ein paar min später "home"
[Licht_Flur_unten_Deckenspots_an:state] <= 15 ist sicher wahr, denn es war ein paar min. später auch wahr.
Damit ist die Bedingung für cmd 2 nicht wahr.
Damit bleibt ihm nur DOELSE :) -oder?
Beim nächsten trigger ist dann wieder cmd 1 wahr. (Licht_Flur_unten_Deckenspots_an_state liefert regelmäßig)

So habe ich DOIF bisher verstanden, er arbeitet von oben (Triggereintrittspunkt?) nach unten alles durch. Ist eine Bedingung erfüllt macht er bis zum nächsten trigger nicht weiter.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

math78

Hallo,

habe es umgewandelt - scheint jetzt nach dem Testen ohne Probleme zu funktionieren.

(([Licht_Flur_unten_Deckenspots_an:state] <= 15 and [15:00-10:00] and [rgr_Eltern:state] eq "home") or
([Licht_Flur_unten_Deckenspots_an:state] <= 15 and [15:00-23:00] and [rgr_Eltern:state] eq "absent")) (set Tagesrhythmus_EG_Wohnzimmer_StehlampeSzene scene Abend1)
DOELSE (set Tagesrhythmus_EG_Wohnzimmer_StehlampeSzene scene Tag)