DOIF: In einem DOIF mit demselben trigger mehrere DOELSEIFs

Begonnen von heikoh81, 15 März 2016, 19:15:06

Vorheriges Thema - Nächstes Thema

heikoh81

Hallo zusammen,

ich habe versucht, ein DOIF zu bauen, das basierend auf einem triggerenden Dummy mehrere DOELSEIFs abarbeitet.
Der Übersicht halber wollte ich alles in ein DOIF packen - nach Google-Suche und commandref geht das aber wohl nicht:

Zitat
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.

So sah das aus:

([?18:00:00-23:59:00] and [TVWohnzimmer] eq "present" and [?TVWohnzimmerSteuertAmbilight] eq "on")
(set NAME=PollinEssAmbilight:FILTER=STATE=off on)
DOELSEIF ([?18:00:00-23:59:00] and [TVWohnzimmer] eq "present" and [?TVWohnzimmerSteuertVitrine] eq "on")
(set NAME=PollinWohnzimmerVitrine:FILTER=STATE=off on)
DOELSEIF ([TVWohnzimmer:"absent"] and [?TVWohnzimmerSteuertAmbilight] eq "on")
(set NAME=PollinEssAmbilight:FILTER=STATE=on off)
DOELSEIF ([TVWohnzimmer:"absent"] and [?TVWohnzimmerSteuertVitrine] eq "on")
(set NAME=PollinWohnzimmerVitrine:FILTER=STATE=on off)
DOELSE ()


Problem:
Es wurde nur cmd_1 bzw. cmd_3 abgearbeitet, cmd_2 und cmd_4 wurden irgnoriert.

Lösung:
Jeweils ein eigenes DOIF für jeden Aktor.

Eleganter hätte ich aber gefunden, alles in ein DOIF zu packen.
Gibt es hier gar keine Möglichkeit?

Viele Grüße,
Heiko

Sirel

Hallo Heiko,

genau, wie du schon schreibst, Bedingung 2 kann nicht eintreten (wahr werden), sofern Bedingung 1 bereits schon wahr ist.

Wenn beide Devices, d.h. TVWohnzimmerSteuertAmbilight und TVWohnzimmerSteuertVitrine an sein sollen bzw. können, dann würde ich als erste Bedingung genau das abfragen.
[?18:00:00-23:59:00] and [TVWohnzimmer] eq "present" and [?TVWohnzimmerSteuertAmbilight] eq "on" and [?TVWohnzimmerSteuertVitrine] eq "on") (set NAME=PollinWohnzimmerVitrine:FILTER=STATE=off on) (set NAME=PollinEssAmbilight:FILTER=STATE=off on)

Danach greift dann Deine Einzelprüfung.

Zum Ausschalten würde ich folgendes machen:

([TVWohnzimmer:"absent"] and ([?TVWohnzimmerSteuertAmbilight] eq "on" or [?TVWohnzimmerSteuertVitrine] eq "on")) ((set PollinWohnzimmerVitrine,PollinEssAmbilight off))
Du könntest die beiden Ambilights auch in einer Struktur zusammenführen und darüber ausschalten lassen. Die gleiche Struktur könntest Du nebenbei auch auch nutzen, um im ersten Fall beide Lampen anzuschalten.

Viele Grüße,
Max

Ellert

Du könntest zuätzlich IF nutzen:

([?18:00:00-23:59:00] and [TVWohnzimmer] eq "present")
   (IF ([TVWohnzimmerSteuertAmbilight] eq "on") (set NAME=PollinEssAmbilight:FILTER=STATE=off on)),
   (IF ([TVWohnzimmerSteuertVitrine] eq "on") (set NAME=PollinWohnzimmerVitrine:FILTER=STATE=off on))
DOELSEIF ([TVWohnzimmer:"absent"])
   (IF ...

heikoh81

Danke, das werde ich versuchen.
Der Code sieht schon mal einfach und sehr übersichtlich aus dadurch.

Viele Grüße,
Heiko