define Rollo_Wohnzimmer_DI DOIF
([[ZEIT_Rollo_hoch]])
(set EG.Wz.Ra.RolladenWohnzimmerup)
DOELSEIF
([?Weihnachtsbeleuchtung] eq "off" and [[ZEIT_Rollo_runter]])
(set EG.Wz.Ra.RolladenWohnzimmer down)
DOELSEIF
([[ZEIT_WeihnachtsbeleuchtungAusUm]])
(set EG.Wz.Ra.RolladenWohnzimmer down)
Warum wird der zweite DOELSEIF Zweig ausgeführt obwohl der erste DOELSEIF Zweig schon ausgeführt wurde, wo liegt da mein Denkfehler?
ZitatWarum wird der zweite DOELSEIF Zweig ausgeführt obwohl der erste DOELSEIF Zweig schon ausgeführt wurde?
Wahrscheinlich sind die Zeitpunkte unterschiedlich, aber wie kommst Du darauf, dass die Ausführung anders sein sollte?
Hab ich doch grad erst *suchkruschtelkram...ichfindsnoch...suchmannwoistderlinknurweitersuch*
gefunden
https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche (https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche)
Hach, was das Wiki alles so zu bieten hat - und das nicht nur zu Weihnachten ::)
Zitat von: Ellert am 25 Dezember 2016, 20:15:15
Wahrscheinlich sind die Zeitpunkte unterschiedlich, aber wie kommst Du darauf, dass die Ausführung anders sein sollte?
Weil ich bisher dachte das wenn ein DOELSEIF Zweig ausgeführt wurde wird kein anderer DOELSEIF Zweig ausgeführt.
Zitat von: Fredi69 am 26 Dezember 2016, 14:36:29
Weil ich bisher dachte das wenn ein DOELSEIF Zweig ausgeführt wurde wird kein anderer DOELSEIF Zweig ausgeführt.
So ist es auch. Durch ein Ereignis wird höchstens ein Zweig ausgeführt.
Warum ist das bei mir anders?
Zitat von: Fredi69 am 26 Dezember 2016, 17:39:09
Warum ist das bei mir anders?
Das kann nur ein Verständnisproblem sein. Poste List deines DOIFs von diesem Zustand.
Internals:
DEF ([[Rollo_hoch]]) (set EG.Wz.Ra.RolladenErker up,set EG.Wz.Ra.RolladenStrasse up) DOELSEIF ([?Weihnachtsbeleuchtung] eq "off" and [[Rollo_runter]]) (set EG.Wz.Ra.RolladenErker down,set EG.Wz.Ra.RolladenStrasse down) DOELSEIF ([[WeihnachtsbeleuchtungAusUm]]) (set EG.Wz.Ra.RolladenErker down,set EG.Wz.Ra.RolladenStrasse down)
NAME Rollo_Wohnzimmer_DI
NR 309
NTFY_ORDER 50-Rollo_Wohnzimmer_DI
STATE cmd_1
TYPE DOIF
Readings:
2016-12-26 09:27:27 cmd 1
2016-12-26 09:27:27 cmd_event timer_1
2016-12-26 09:27:27 cmd_nr 1
2016-12-26 09:27:27 state cmd_1
2016-12-26 11:28:37 timer_01_c01 27.12.2016 09:27:27
2016-12-26 17:32:41 timer_02_c02 27.12.2016 17:32:41
2016-12-26 11:28:37 timer_03_c03 26.12.2016 22:30:00
Condition:
0 DOIF_time_once($hash,0,$wday)
1 InternalDoIf($hash,'Weihnachtsbeleuchtung','STATE') eq "off" and DOIF_time_once($hash,1,$wday)
2 DOIF_time_once($hash,2,$wday)
Days:
Devices:
Do:
0:
0 set EG.Wz.Ra.RolladenErker up,set EG.Wz.Ra.RolladenStrasse up
1:
0 set EG.Wz.Ra.RolladenErker down,set EG.Wz.Ra.RolladenStrasse down
2:
0 set EG.Wz.Ra.RolladenErker down,set EG.Wz.Ra.RolladenStrasse down
3:
Helper:
event timer_2
globalinit 1
last_timer 3
sleeptimer -1
triggerDev
Bm:
Doif_notify:
cnt 1655
dmx 0
max 1
tot 2
mAr:
HASH(Rollo_Wohnzimmer_DI)
HASH(LaCrosse_38)
Doif_set:
cnt 8
dmx 0
mAr
max 0
tot 0
triggerEvents:
timer_2
Internals:
1 Weihnachtsbeleuchtung:STATE
all Weihnachtsbeleuchtung:STATE
Interval:
Itimer:
all Rollo_hoch Rollo_runter WeihnachtsbeleuchtungAusUm
Localtime:
0 1482827247
1 1482856361
2 1482787800
Readings:
Realtime:
0 09:27:27
1 17:32:41
2 22:30:00
Regexp:
State:
Time:
0 [Rollo_hoch]
1 [Rollo_runter]
2 [WeihnachtsbeleuchtungAusUm]
Timecond:
0 0
1 1
2 2
Timer:
0 0
1 0
2 0
Timers:
0 0
1 1
2 2
Triggertime:
1482787800:
localtime 1482787800
Hash:
1482827247:
localtime 1482827247
Hash:
1482856361:
localtime 1482856361
Hash:
Attributes:
room Steuerung,Wohnzimmer
verbose 5
Ich kann sehen, dass um 9:27 Uhr der Timer Rollo_hoch zugeschlagen hat und den ersten Ausführungszweig cmd_1 ausgeführt hat.
Mal abgesehen von meiner Frage, wo kann man das ablesen?
Es war halt neulich so, dass der Zweig um 17:32 zugeschlagen hat, als auch der um 22:30.
Zitat von: Fredi69 am 26 Dezember 2016, 18:08:43
Mal abgesehen von meiner Frage, wo kann man das ablesen?
Es war halt neulich so, dass der Zweig um 17:32 zugeschlagen hat, als auch der um 22:30.
Du siehts am Datum der Readings cmd oder state, wann dieser verändert wurden, das ist der Zeitpunkt vom ersten Timer. Auch der zweiter Timer hat um 17:32:41 zugeschlagen, aber da war deine Weihnachtsbeleuchtung wohl an und deswegen wurde der zweite Zweig nicht ausgeführt.
Abgesehen davon hast du wohl um 11:28:37 die Zeitpunkte für Timer 1 und 3 verändert.
Danke, zurück zur konkreten Frage:
Warum hat sowohl der Zweig um 17:32 ausgelöst, als auch der um 22:30?
Zitat von: Fredi69 am 26 Dezember 2016, 20:14:34
Danke, zurück zur konkreten Frage:
Warum hat sowohl der Zweig um 17:32 ausgelöst, als auch der um 22:30?
Weil du die Zeiten so gesetzt hast !?
Ich habe das Gefühl wir reden aneinander vorbei.
Es wird doch nur ein Zweig ausgeführt
Zitat von: Fredi69 am 26 Dezember 2016, 21:57:11
Ich habe das Gefühl wir reden aneinander vorbei.
Es wird doch nur ein Zweig ausgeführt
Ich glaube auch. Du hast doch drei Bedingungen mit der Ausführungszweigen definiert. Jeder Zweig wird jeweils ausgeführt, wenn der entsprechende Trigger der Bedingung kommt (bei dir Timetrigger) und die Bedingung wahr ist.
erster um 09:27:27
zweiter um 17:32:41
dritter um 22:30:00
Der zweite wird nicht ausgeführt um 09:27:27 und 22:30:00, der dritte nicht um 09:27:27 und 17:32:41 usw.
Ich dachte bisher von allen DOELSEIF Zweigen wird immer nur einer ausgeführt.
Zitat von: Fredi69 am 27 Dezember 2016, 09:12:58
Ich dachte bisher von allen DOELSEIF Zweigen wird immer nur einer ausgeführt.
Pro Durchgang, also pro Event, gibt es nur ein Ergebnis. Falls 3 Events kurz hintereinander eintreffen, wird DOIF auch 3 Mal ausgeführt, was als bis zu 3 verschiedene Ergebnisse ergeben kann.