FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Spartacus am 26 November 2015, 11:28:42

Titel: DOIF Rollade
Beitrag von: Spartacus am 26 November 2015, 11:28:42
Hallo,
ich habe mir ein kleines DOIF gebaut, welches den Rolladen 2min zeitverzögert schließt, wenn im Garten die Gartenbeleuchtung abgeschaltet wird.

Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([?21:30-03:00] and [GA.ss.SA.Licht] eq "off") (set EG.wz.RO.links closes)
   NAME       di.01.EG.wz.RO.links
   NR         832
   NTFY_ORDER 50-di.01.EG.wz.RO.links
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-11-26 11:20:13   state           initialized
     2015-11-26 11:20:13   timer_1_c1      26.11.2015 21:30:00
     2015-11-26 11:20:13   timer_2_c1      27.11.2015 03:00:00
     2015-11-26 11:20:23   wait_timer      no timer
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
   Days:
   Devices:
     0           GA.ss.SA.Licht
     all         GA.ss.SA.Licht
   Do:
     0:
       0          set EG.wz.RO.links closes
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
     0           GA.ss.SA.Licht:STATE
     all         GA.ss.SA.Licht:STATE
   Itimer:
   Realtime:
     0          21:30:00
     1          03:00:00
   State:
   Time:
     0          21:30:00
     1          03:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
Attributes:
   alias      autom. Rolladen schließen
   cmdState   auto on
   comment    schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 03:00
   group      Scripte
   room       01-Wohnzimmer
   wait       120

Das funktioniert soweit.
Jetzt habe ich ein Blockade. Ich möchte jetzt, das der cmdState sich so ändert, dass er mir zwischen 21:30 und 03:00 "auto on" und in der restlichen Zeit "auto off" anzeigt. Da ich nur ein Kommandozweig im DOIF habe, funktioniert das nicht. Kann mir jemand mal einen Tipp geben?
Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: kumue am 26 November 2015, 11:49:51
..würde ein leeres DOELSE am Ende setzen...

aus commandref DOIF
Zitat+ Es können beliebig viele DOELSEIF-Angaben gemacht werden, sie sind, wie DOELSE am Ende der Kette, optional

DOLESEIF muss dementsprechend nicht gesetzt werden, es kann ein leerer DOELSE sein.

([?21:30-03:00] and [GA.ss.SA.Licht] eq "off") (set EG.wz.RO.links closes) DOELSE
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 26 November 2015, 11:52:42
Hallo kumue,
super danke! Das war´s

Gruß,
Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 26 November 2015, 22:20:06
Zitat von: Spartacus am 26 November 2015, 11:52:42
Hallo kumue,
super danke! Das war´s

Gruß,
Spartacus

Wundert mich aber, da ohne do always bei einer einzigen Bedingung der DOELSE-Fall (cmd_2) bei nicht Erfüllung der Bedingung immer gesetzt wird.

DOIF (...) (set bla on)
ist das Gleiche, wie
DOIF (...) (set bla on) DOELSE

wenn kein do always gesetzt wird.

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 26 November 2015, 22:29:09
Hallo Damian,
Das heißt dann, dass man cmdState und devStateIcon auch bei nur einer Bedingung zwei Zustände zuordnen kann.
Das habe ich nicht probiert!

Christian
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 26 November 2015, 22:32:07
Zitat von: Spartacus am 26 November 2015, 22:29:09
Hallo Damian,
Das heißt dann, dass man cmdState und devStateIcon auch bei nur einer Bedingung zwei Zustände zuordnen kann.
Das habe ich nicht probiert!

Christian

ja, aber nur wenn das Attribut do always nicht gesetzt ist.

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 28 November 2015, 15:14:53
Hallo,
ich kriege das irgendwie nicht so hin, wie ich will. Es scheitert an der Visualisierung des DOIFs

Ziel soll es sein, dass der "autom.Shutdown" nur dann aktiviert wird(cmdState="on"), wenn die "autom. Gartenbeleuchtung" (Auto) aktiv ist.
Der Rolladen soll dann zeitverzögert (120s) schließen, wenn die GartenBeleuchtung (GartenLicht) abschaltet. Gleichzeitig wird der "autom. Shutdown" wieder deaktiviert(cmdState="off"). Damit soll sichergestellt sein, dass Rolladen und GartenLicht unabhängig gefahren/geschaltet werden können. "Auto" sich quasi der trigger für Shutdown-Automatik.

DEF:
([?Auto] eq "on" and [GartenLicht] eq "off")
(set Rollo close, set Auto off)
DOELSEIF ([Auto] eq "on")
DOELSEiF ([Auto] eq "off")

cmdState:
devStateIcon:
.*on:general_an@lightgreen .*off:general_aus@red

Hat jemand einen Tipp?
Christian
on|on|off

Spartacus.

P.S. AUTO ist ein dummy, welches in dem DOIF der Gartenbeleuchtung gesetzt wird.
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 28 November 2015, 17:32:01
Zitat von: Spartacus am 28 November 2015, 15:14:53
Hallo,
ich kriege das irgendwie nicht so hin, wie ich will. Es scheitert an der Visualisierung des DOIFs

Ziel soll es sein, dass der "autom.Shutdown" nur dann aktiviert wird(cmdState="on"), wenn die "autom. Gartenbeleuchtung" (Auto) aktiv ist.
Der Rolladen soll dann zeitverzögert (120s) schließen, wenn die GartenBeleuchtung (GartenLicht) abschaltet. Gleichzeitig wird der "autom. Shutdown" wieder deaktiviert(cmdState="off"). Damit soll sichergestellt sein, dass Rolladen und GartenLicht unabhängig gefahren/geschaltet werden können. "Auto" sich quasi der trigger für Shutdown-Automatik.

DEF:
([?Auto] eq "on" and [GartenLicht] eq "off")
(set Rollo close, set Auto off)
DOELSEIF ([Auto] eq "on")
DOELSEiF ([Auto] eq "off")

cmdState:
devStateIcon:
.*on:general_an@lightgreen .*off:general_aus@red

Hat jemand einen Tipp?
Christian
on|on|off

Spartacus.

P.S. AUTO ist ein dummy, welches in dem DOIF der Gartenbeleuchtung gesetzt wird.

Rekursionen werden mit dem aktuellen DOIF-Modul unterbunden. set Auto off triggert nicht das gleiche Modul, somit bleibt das Modul im ersten Zustand.

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 30 November 2015, 21:02:15
Hallo Damian,
ne,ich glaube wir reden aneinander vorbei. Auto ist nur ein dummy der in einem anderen DOIF gesetzt wird.
Deshalb hier mal ein List:

Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([Auto] eq "on")
DOELSEIF
([Auto] eq "off")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links position 100 0, set Auto off)

   NAME       di.01.EG.wz.RO.links
   NR         839
   NTFY_ORDER 50-di.01.EG.wz.RO.links
   STATE      on
   TYPE       DOIF
   Readings:
     2015-11-30 20:43:49   Device          Auto
     2015-11-30 20:43:49   cmd_event       Auto
     2015-11-30 20:43:49   cmd_nr          1
     2015-11-30 20:43:49   e_Auto_STATE    on
     2015-11-30 20:43:49   state           on
   Condition:
     0          InternalDoIf('Auto','STATE','') eq "on"
     1          InternalDoIf('Auto','STATE','') eq "off"
     2          InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
   Devices:
     0           Auto
     1           Auto
     2           GA.ss.SA.Licht
     all         Auto GA.ss.SA.Licht
   Do:
     0:
       0
     1:
       0
     2:
       0          set EG.wz.RO.links position 100 0, set Auto off
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           Auto:STATE
     1           Auto:STATE
     2           GA.ss.SA.Licht:STATE
     all         Auto:STATE GA.ss.SA.Licht:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      autom. Rolladen schließen
   cmdState   on|off|off
   comment    schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 02:30
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   group      Scripte
   icon       fts_shutter_down
   room       01-Wohnzimmer
   wait       0:0:120


Im Prinzip funktioniert es ja wie es soll, und der Zustand des Moduls wird auch richtig angezeigt, allerdings mit einem Schönheitsfehler:

Wenn "GA.ss.SA.Licht" während des Wait-Timers wieder auf "on" geht, soll der Wait-Timer abgebrochen werden und die Aktionen " (set EG.wz.RO.links position 100 0, set Auto off)" abgebrochen werden.
Ich habe gedacht, dies mit "do resetwait" zu realisieren, aber das klappt nicht. In der Commandref steht: "Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird." Aber offenbar verstehe ich den Sachverhalt falsch.
Bin ich hier auf dem falschen Dampfer?
Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 30 November 2015, 22:58:36
Zitat von: Spartacus am 30 November 2015, 21:02:15
Hallo Damian,
ne,ich glaube wir reden aneinander vorbei. Auto ist nur ein dummy der in einem anderen DOIF gesetzt wird.
Deshalb hier mal ein List:

Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([Auto] eq "on")
DOELSEIF
([Auto] eq "off")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links position 100 0, set Auto off)

   NAME       di.01.EG.wz.RO.links
   NR         839
   NTFY_ORDER 50-di.01.EG.wz.RO.links
   STATE      on
   TYPE       DOIF
   Readings:
     2015-11-30 20:43:49   Device          Auto
     2015-11-30 20:43:49   cmd_event       Auto
     2015-11-30 20:43:49   cmd_nr          1
     2015-11-30 20:43:49   e_Auto_STATE    on
     2015-11-30 20:43:49   state           on
   Condition:
     0          InternalDoIf('Auto','STATE','') eq "on"
     1          InternalDoIf('Auto','STATE','') eq "off"
     2          InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
   Devices:
     0           Auto
     1           Auto
     2           GA.ss.SA.Licht
     all         Auto GA.ss.SA.Licht
   Do:
     0:
       0
     1:
       0
     2:
       0          set EG.wz.RO.links position 100 0, set Auto off
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           Auto:STATE
     1           Auto:STATE
     2           GA.ss.SA.Licht:STATE
     all         Auto:STATE GA.ss.SA.Licht:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      autom. Rolladen schließen
   cmdState   on|off|off
   comment    schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 02:30
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   group      Scripte
   icon       fts_shutter_down
   room       01-Wohnzimmer
   wait       0:0:120


Im Prinzip funktioniert es ja wie es soll, und der Zustand des Moduls wird auch richtig angezeigt, allerdings mit einem Schönheitsfehler:

Wenn "GA.ss.SA.Licht" während des Wait-Timers wieder auf "on" geht, soll der Wait-Timer abgebrochen werden und die Aktionen " (set EG.wz.RO.links position 100 0, set Auto off)" abgebrochen werden.
Ich habe gedacht, dies mit "do resetwait" zu realisieren, aber das klappt nicht. In der Commandref steht: "Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird." Aber offenbar verstehe ich den Sachverhalt falsch.
Bin ich hier auf dem falschen Dampfer?
Spartacus

Ein laufender Timer kann nur zurückgesetzt werden, wenn der Status des Moduls wechselt. Evtl. ein DOELSE hinten dranhängen für diesen Fall.

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 01 Dezember 2015, 14:31:02
Hallo Damian,
ZitatEin laufender Timer kann nur zurückgesetzt werden, wenn der Status des Moduls wechselt. Evtl. ein DOELSE hinten dranhängen für diesen Fall.

Gruß

Damian
yep, das scheint es gewesen zu sein. Hier noch einmal meine Teststruktur:
Internals:
   DEF        ([Auto1] eq "on")
DOELSEIF
([Auto1] eq "off")
DOELSEIF
([?Auto1] eq "on" and [GartenLicht] eq "off")
(set Auto1 off) (set Rollo close)
DOELSE
   NAME       diRollo
   NR         945
   NTFY_ORDER 50-diRollo
   STATE      off
   TYPE       DOIF
   Readings:
     2015-12-01 13:49:37   Device          GartenLicht
     2015-12-01 13:49:37   cmd_event       GartenLicht
     2015-12-01 13:49:37   cmd_nr          4
     2015-12-01 13:49:30   e_Auto1_STATE   off
     2015-12-01 13:49:37   e_GartenLicht_STATE on
     2015-12-01 13:49:37   state           off
     2015-12-01 13:49:37   wait_timer      no timer
   Condition:
     0          InternalDoIf('Auto1','STATE','') eq "on"
     1          InternalDoIf('Auto1','STATE','') eq "off"
     2          InternalDoIf('Auto1','STATE','') eq "on" and InternalDoIf('GartenLicht','STATE','') eq "off"
   Devices:
     0           Auto1
     1           Auto1
     2           GartenLicht
     all         Auto1 GartenLicht
   Do:
     0:
       0
     1:
       0
     2:
       0          set Auto1 off
       1          set Rollo close
     3:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice GartenLicht
     sleepsubtimer 1
     sleeptimer -1
   Internals:
     0           Auto1:STATE
     1           Auto1:STATE
     2           GartenLicht:STATE
     all         Auto1:STATE GartenLicht:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      auto Rollo schließen
   cmdState   on|off|off|off
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   do         resetwait
   group      Scripte
   icon       fts_shutter_down
   wait       0:0:0,40


Ich habe eine neue Funktion des Wait-Timers verwendet (0,40). Allerdings habe ich es nicht hingekriegt, den cmdState für diesen Teil zu überschreiben. Ist das noch ein Fehler von mir, oder ist das so von Dir gewollt, dass er mir dann cmd_3_1 (oder ähnlich) anzeigt.

Christian
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 03 Dezember 2015, 17:17:03
Zitat von: Spartacus am 01 Dezember 2015, 14:31:02
Ich habe eine neue Funktion des Wait-Timers verwendet (0,40). Allerdings habe ich es nicht hingekriegt, den cmdState für diesen Teil zu überschreiben. Ist das noch ein Fehler von mir, oder ist das so von Dir gewollt, dass er mir dann cmd_3_1 (oder ähnlich) anzeigt.

Christian

Z. Zt. lassen sich nur die Endzustände cmd_1, cmd_2, ... mit dem Attribut cmdState überschreiben. Die Zwischenzustände cmd_1_1, cmd_1_2, usw. lassen sich noch nicht umdefinieren. Das wird aber nächstes Jahr kommen.

Gruß

Damian

Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 03 Dezember 2015, 22:13:58
Damin,
alles klar! kein Thema!

@ all:
Ich habe immer noch ein Problem mit meiner Rolladenautomatik. Ich versuche mal den ganzen Sachverhalt vollständig zu beschreiben. Vielleicht hat ja jemand einen Tipp für mich:

Ich habe ein DOIF, welches die Gartenbeleuchtung schaltet (di.01.GA.ss.SA.Licht).

([16:30-[offtime.GA.ss.SA.Licht.dum]] and
[state.TW.Tageslicht.dum] eq "dunkel" and
[?state.TW.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)

Attribute:
cmdstate on|off

Die Offtime wird in einer Funktion berechnet und im Dummy offtime.GA.ss.SA.Licht.dum gespeichert.
Das funktioniert auch einwandfrei.

Jetzt arbeite ich daran, das in einem zweiten DOIF "diRollo" eine Rolladenautomatik aktiviert werden soll, wenn das erste DOIF in den cmdState "on"  wechselt.
([di.01.GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Attribute:
cmdState on|off|off
wait 0:30:0
do resetwait


Damit soll "diRollo" anzeigen, dass nun die Rolladenautomatik aktiviert wurde. Schaltet nun der Aktor GA.ss.SA.Licht ab, wird der Rolladen zeitverzögert heruntergefahen. Wird  "GA.ss.SA.Licht" innerhalb der zeitverzögerung wieder eingeschaltet, wird der Wait-Timer abgebrochen. Bleibt das Licht aus und läuft der Timer ab, fährt der Rolladen herunter. Gleichzeitig wird damit auch die Rolladenautomatik deaktiviert. Dafür benutze ich das Dummy-Device "Auto", welches im 1. DOIF zusammen mit dem Gartenlicht gesetzt wird.
Das zur Theorie:

Leider klappt das nicht so wie es soll. Ich habe erwartet, dass diRollo auf "on" geht, wenn "di.01.GA.ss.SA.Licht "den cmdState "on" annimmt. Das passiert aber nicht, das Reading cmd_nr von "diRollo" steht auf 3, obwohl "di.01.GA.ss.SA.Licht" auf "on" steht. Ein manuelles "trigger di.01.GA.ss.SA.Licht" schafft Abhilfe und diRollo steht auf "on"

Warum ist das so? Hat jemand ggf. eine bessere Idee, das o.a. Szenario abzubilden?
Christian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 04 Dezember 2015, 23:06:36
Hallo,
also, vom Prinzip her scheint die o.a  Logik zu funktionieren, aber wenn das 1. DOIF triggert, schaltet das 2te DOIF nicht auf "on" ! Wo ist der Fehler?
Christian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 07 Dezember 2015, 15:15:02
Hallo,
hat niemand einen Tipp für mich? Ich krieg das irgendwie nicht sauber gelöst!
Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 10 Dezember 2015, 16:58:19
Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.

Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})


Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"

Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

   NAME       diRollo
   NR         951
   NTFY_ORDER 50-diRollo
   STATE      off
   TYPE       DOIF
   Readings:
     2015-12-10 16:31:59   Device          GA.ss.SA.Licht
     2015-12-10 16:31:59   cmd_event       GA.ss.SA.Licht
     2015-12-10 16:31:59   cmd_nr          3
     2015-12-10 16:31:59   e_Auto_STATE    on
     2015-12-10 16:31:59   e_GA.ss.SA.Licht_STATE on
     2015-12-10 16:31:59   state           off
     2015-12-09 22:00:30   wait_timer      no timer
   Condition:
     0          InternalDoIf('Auto','STATE','') eq "on"
     1          InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
   Devices:
     0           Auto
     1           GA.ss.SA.Licht
     all         Auto GA.ss.SA.Licht
   Do:
     0:
       0
     1:
       0          set Rollo close, set Auto off
     2:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice GA.ss.SA.Licht
     sleepsubtimer -1
     sleeptimer -1
   Internals:
     0           Auto:STATE
     1           GA.ss.SA.Licht:STATE
     all         Auto:STATE GA.ss.SA.Licht:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      auto Rollo schließen
   cmdState   on|off|off
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   do         resetwait
   group      Scripte
   icon       fts_shutter_down
   wait       0:30:0


Für Hilfe wäre ich dankbar!
Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 10 Dezember 2015, 19:56:50
Zitat von: Spartacus am 10 Dezember 2015, 16:58:19
Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.

Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})


Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"

Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE


Es ist ganz einfach. Es werden nicht immer alle Bedingungen ausgewertet, sondern nur die, bei denen auch das triggernde Device vorkommt, da bei dir der Trigger von GA.ss.SA.Licht kam, wird der erste Fall bei der Auswertung erst gar nicht angepackt.

D. h. wenn der erste Fall auch beim Lichttrigger ausgewertet werden soll, dann muss dieses Device auch in der ersten Bedingung  wie auch immer abgefragt werden.

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 10 Dezember 2015, 21:05:56
Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?

Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Christian
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 11 Dezember 2015, 18:12:43
Zitat von: Spartacus am 10 Dezember 2015, 21:05:56
Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?

Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Christian

Wie ich es schon geschrieben habe, steht es auch in der Commandref:
Zitat
Die Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

Eine Bedingung wird nur dann ausgewertet, wenn das triggernde Device drin vorkommt, ansonsten wird diese Bedingung nicht berücksichtigt.


Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 11 Dezember 2015, 19:47:49
Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!

Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst  das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...

Spartacus
Titel: Antw:DOIF Rollade
Beitrag von: Damian am 11 Dezember 2015, 23:11:40
Zitat von: Spartacus am 11 Dezember 2015, 19:47:49
Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!

Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst  das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...

Spartacus

Ich habe doch nicht behauptet, dass "Auto" nicht triggert. In deiner ersten Definition:

Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE


hat zuletzt "GA.ss.SA.Licht" mit "on" getriggert, weil:
    2015-12-10 16:31:59   Device          GA.ss.SA.Licht
    2015-12-10 16:31:59   cmd_event       GA.ss.SA.Licht
    2015-12-10 16:31:59   e_GA.ss.SA.Licht_STATE on


und dann geht DOIF wie folgt vor:

1. schaue in der ersten Bedingung, ob GA.ss.SA.Licht vor kommt, nein -> dann gehe zu nächsten Bedingung
2. schaue in der zweiten Bedingung, ob GA.ss.SA.Licht vor kommt, ja -> werte die Bedingung aus, sie ist nicht wahr, dann gehe zur nächsten Bedingung
3. DOELSE -> setze cmd_3
4. Ende der Abarbeitung der Definition

Gruß

Damian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 14 Dezember 2015, 22:31:38
Hallo,
jetzt bin ich am Ende! Der o.a. Code hat jetzt mehrere Tage sauber funktioniert.
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Jetzt habe ich das Dummy Auto umbenannt und das DOIF arbeitet nicht mehr.

([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links closes, set EG.wz.RO.rechts closes, set state.di.01.GA.ss.SA.Licht.dum off)
DOELSE


Wenn GA.ss.SA.Licht abgeschaltet wird, dann wird zwar cmd2 kurz ausgeführt, aber der Befehl state.di.01.GA.ss.SA.Licht.dum off wird nicht ausgeführt.
Was ist denn da jetzt passiert?
Christian
Titel: Antw:DOIF Rollade
Beitrag von: Spartacus am 15 Dezember 2015, 09:20:57
Hallo,
Keine Ahnung was da passiert ist, aber nach einem Neustart der Kiste, lief es plötzlich wieder!
Alles wieder OK!
Christian