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
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?
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
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
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.
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
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)