Hello zusammen
nach meinem Verständnis wäre es möglich mit DOIF / DOELSEIF zwei verschiedene Bedingungen abzufragen und wenn keine der beiden wahr ist würde der DOELSE Befehl ausgeführt werden.
Bei meiner Einstellung wird aber regelmäßig auch der der DOELSE Befehl ausgeführt obwohl mindestens einer der vorhergehenden Bedingungen noch wahr ist ?
Hier mal das List zum DOIF
Internals:
CFGFN
DEF ([14:00 - 00:50] and [Anwesenheit] eq "anwesend" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on )DOELSEIF ([SamsungTV_Status] eq "present" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on )
DOELSE (set Lichter_b_Anwesenheit off)
MODEL FHEM
NAME Light_at_pressence
NR 5474
NTFY_ORDER 50-Light_at_pressence
STATE disabled
TYPE DOIF
READINGS:
2018-03-29 22:23:03 Device SamsungTV_Status
2018-03-29 22:23:03 cmd 3
2018-03-29 22:23:03 cmd_event SamsungTV_Status
2018-03-29 22:23:03 cmd_nr 3
2018-03-29 22:23:03 e_SamsungTV_Status_STATE absent
2018-03-29 22:23:42 last_cmd cmd_3
2018-03-29 22:23:42 mode disabled
2018-03-29 22:23:42 state disabled
2018-03-29 22:21:53 timer_01_c01 30.03.2018 14:00:00
2018-03-29 22:21:53 timer_02_c01 30.03.2018 00:50:00
Regex:
condition:
0 DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'Anwesenheit','STATE') eq "anwesend" and ReadingValDoIf($hash,'Daemmerung','twilight')<65
1 InternalDoIf($hash,'SamsungTV_Status','STATE') eq "present" and ReadingValDoIf($hash,'Daemmerung','twilight')<65
days:
devices:
0 Anwesenheit Daemmerung
1 SamsungTV_Status Daemmerung
all Anwesenheit Daemmerung SamsungTV_Status
do:
0:
0 set Lichter_b_Anwesenheit on
1:
0 set Lichter_b_Anwesenheit on
2:
0 set Lichter_b_Anwesenheit off
helper:
DOIF_Readings_events
DOIF_eventas
event absent,presence: absent
globalinit 1
last_timer 2
sleeptimer -1
timerdev SamsungTV_Status
timerevent absent,presence: absent
triggerDev SamsungTV_Status
timerevents:
absent
presence: absent
timereventsState:
state: absent
presence: absent
triggerEvents:
absent
presence: absent
triggerEventsState:
state: absent
presence: absent
internals:
0 Anwesenheit:STATE
1 SamsungTV_Status:STATE
all Anwesenheit:STATE SamsungTV_Status:STATE
interval:
0 -1
1 0
itimer:
localtime:
0 1522411200
1 1522363800
readings:
0 Daemmerung:twilight
1 Daemmerung:twilight
all Daemmerung:twilight
realtime:
0 14:00:00
1 00:50:00
time:
0 14:00:00
1 00:50:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
triggertime:
1522363800:
localtime 1522363800
hash:
1522411200:
localtime 1522411200
hash:
uiState:
uiTable:
Attributes:
room Übersicht
Kann mir jemand sagen warum ich in den DOELSE rutsche obwohl ich DOIF oder DOELSEIF noch erfüllt habe ?
Danke schon mal vorab
Gruß
Wurzelx²
Hi,
dein Grundgedanke ist richtig, aber Deine Bedingungen sind mehrdeutig.
Jedes der Geräte triggert das Modul
0 Anwesenheit Daemmerung
1 SamsungTV_Status Daemmerung
Was ist wenn die erste und zweite Bedingung erfüllt ist?
Warum er DOELSE macht ist mir jetzt nicht klar, aber eventuell gibt es Übergangszustände.
Schau Dir alles im Eventmonitor an.
Gruß Otto
das "do always" fehlt.
Dadurch werden die CMDs nacheinander abgearbeitet, 1->2->3->1->2->3....
Dastriggernde Event war der Samsung TV. der ging "absent" und das DOIF dadurch in DOELSE
2018-03-29 22:23:03 Device SamsungTV_Status
2018-03-29 22:23:03 cmd 3
2018-03-29 22:23:03 cmd_event SamsungTV_Status
2018-03-29 22:23:03 cmd_nr 3
2018-03-29 22:23:03 e_SamsungTV_Status_STATE absent
Hi
also der Grund für das DOELSEIF ist folgender.
1) ich möchte Licht im Haus haben wenn ich zuhause bin , und zwar zu bestimmten Zeiten und wenn es dämmert
2) manchmal wird es später weil ich vor dem TV hängen geblieben bin und dann will ich das Licht im Haus anlassen
3) sobald ich dann aber den TV ausschalte soll es überall finster werden im Haus.
Wie sollte ich das denn machen ???
Bin ich da mit den DOELSEIF auf dem falschen Dampfer ??
Wurzelx²
Servus
also ich habe das jetzt so gelöst .....
DOIF :
([SamsungTV_Status] eq "present" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on) DOELSEIF ([14:00 - 23:55] and [Anwesenheit] eq "anwesend" and [Daemmerung:twilight]<65 and [SamsungTV_Status] eq "absent" ) (set Lichter_b_Anwesenheit on )
DOELSE (set Lichter_b_Anwesenheit off)
Jetzt bleibt das Licht auch länger an falls ich am TV sitze. Wenn nicht dann geht es 23:55 aus.
Ja Ja ......ein kleiner Schritt für die Menschheit aber ein großer Schritt für Wurzelx²
So ähnlich wollte ich das auch gerade schreiben... jetzt hast du - wie Otto schon angemerkt hat - die Mehrdeutigkeit ausgeschlossen.
Schreibst du noch [Gelöst] vor das Subject des ersten Posts?