FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Fredi69 am 25 Dezember 2016, 17:43:44

Titel: DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Fredi69 am 25 Dezember 2016, 17:43:44
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?
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Ellert am 25 Dezember 2016, 20:15:15
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?
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Puschel74 am 25 Dezember 2016, 20:18:22
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  ::)
Titel: DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Fredi69 am 26 Dezember 2016, 14:36:29
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.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 17:38:12
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.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Fredi69 am 26 Dezember 2016, 17:39:09
Warum ist das bei mir anders?
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 17:40:41
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.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Fredi69 am 26 Dezember 2016, 17:46:34
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
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 18:01:26
Ich kann sehen, dass um 9:27 Uhr der Timer Rollo_hoch zugeschlagen hat und den ersten Ausführungszweig cmd_1 ausgeführt hat.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag 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.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 18:21:31
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.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag 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?
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 21:54:51
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 !?
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag 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
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Damian am 26 Dezember 2016, 22:19:29
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.


Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Fredi69 am 27 Dezember 2016, 09:12:58
Ich dachte bisher von allen DOELSEIF Zweigen wird immer nur einer ausgeführt.
Titel: Antw:DOELSEIF Zweig sollte nicht ausgeführt werden
Beitrag von: Per am 27 Dezember 2016, 12:29:20
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.