Hauptmenü

Verstehe DOIF nicht

Begonnen von Escrimark, 26 November 2016, 10:44:23

Vorheriges Thema - Nächstes Thema

Escrimark

Hallo, bei mir ist das Studium schon einige Zeit her, und verstehe die DOIF Syntax einfach nicht.
Ich Habe einen Fibaro Motion Sensor. Der liefert folgende Events:
2016-11-26 10:40:49 ZWave wz_Fibaro_Eye alarm: HomeSecurity: Motion Detection - Unknown Location
und
2016-11-26 10:41:20 ZWave wz_Fibaro_Eye alarm: HomeSecurity: Event cleared: Motion Detection - Unknown Location, arg 0108

Ich würde gerne per DOIF abhängig davon eine Licht einschalten bzw. ausschalten. Aber nur wenn es nicht schon manuell eingeschaltet war dazu verwende ich den dummy:
define wz_LichtAnDurchMotion dummy  ##Normal off, soll on sein, wenn das Licht durch den Fibaro Motion Sensor eingeschalten wurde
Nur mein DOIF geht überhaupt nicht. Wenn ich es einmal verstanden, habe werde ich auch keine derartigen Anfängerfragen mehr stellen - versprochen!

DOIF (([wz_Fibaro_Eye:"cleared"]) AND ([wz_LichtAnDurchMotion] eq "off"))
((set wz_Deckenlicht off) (set wz_LichtAnDurchMotion "off"))
DOELSEIF (([wz_Fibaro_Eye:"otion"]) and ([wz_Deckenlicht] eq "off"))
((set wz_Deckenlicht on) (set wz_LichtAnDurchMotion on))


Ellert

Sieht erstmal gut aus, bis auf die vielen unnötigen Klammern und die falsche Schreibung von "and", das würde ich an Deiner Stelle erst mal berichtigen.

Aus der Commandref:
Zitatdefine <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

Angaben im Ausführungsteil:

Der Ausführungsteil wird immer, wie die Bedingung, in runden Klammern angegeben. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)

Wenn Du das berichtigen magst und es nicht funktioniert oder falls Du Schwierigkeiten hast das Syntaxmuster zu erkennen, können wir ja mal weiter sehen.

Und poste Deinen Code bitte in Code-Tags #, dann ist er lesbarer.



Escrimark

Hi Elbert, ja danke hat geklappt. Eine schöne Syntax schaut aber anders aus.

der-Lolo

Wenn dein "wz_LichtAnDurchMotion" z.b. "wz_DurchMotionLichtAn"
heissen würde -
könntest Du auch (set wz_D.* off) schreiben anstelle von

((set wz_Deckenlicht off) (set wz_LichtAnDurchMotion "off"))

vorausgesetzt Du hast nicht noch mehr wz_D in Deiner config.