FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: heikoh81 am 15 März 2016, 19:15:06

Titel: DOIF: In einem DOIF mit demselben trigger mehrere DOELSEIFs
Beitrag von: heikoh81 am 15 März 2016, 19:15:06
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
Titel: Antw:DOIF: In einem DOIF mit demselben trigger mehrere DOELSEIFs
Beitrag von: Sirel am 15 März 2016, 19:37:21
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
Titel: Antw:DOIF: In einem DOIF mit demselben trigger mehrere DOELSEIFs
Beitrag von: Ellert am 15 März 2016, 20:00:36
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 ...
Titel: Antw:DOIF: In einem DOIF mit demselben trigger mehrere DOELSEIFs
Beitrag von: heikoh81 am 15 März 2016, 20:58:37
Danke, das werde ich versuchen.
Der Code sieht schon mal einfach und sehr übersichtlich aus dadurch.

Viele Grüße,
Heiko