notify mit elsif (verknüpfte Bedingungen)

Begonnen von WotSefak, 07 September 2014, 19:33:22

Vorheriges Thema - Nächstes Thema

WotSefak

Dahmundherrn,

ich schaff's trotz mehrerer Foren-Checks und Hirn-Aktionen nicht, eine (hoffentlich) ganz einfache Aktion zu bewerkstelligen: wenn der Bewegungsmelder (BM_Terrasse) sein motion absetzt, soll das notify in Abhängigkeit von zwei Variablen Licht(er) einschalten.
Hintergrund: Frau möchte, dass der Bewegungsmelder sie nicht in's Rampenlicht stellt, wenn sie heimlich eine rauchen möchte. Ich will das steuern, indem ich zusätzlich den Status einer bestimmten Jalousie (Rollo_W_links) abprüfen: ist diese noch offen, soll nur eine dezente Gartenbeleuchtung anspringen (L_Garten_4), wenn aber schon geschlossen, dann soll auch die helle Terrassenbeleuchtung (L_Terrasse) angehen.
Der Bewegungsmelder ist ein HM-Sen-MDIR-O; ich erwarte ein motion und prüfe brightness (im Test > bzw < 75). Die Jalousie ist ein HM-LC-Bl1PBU-FM und ich prüfe level (hier im Test > bzw < 75, aber natürlich geht's am Ende um 100 bzw 0).

Hier die DEF des notify:

BM_Terrasse:motion {
if ([BM_Terrasse:brightness] < 75 && [Rollo_T_links:level] > 75) {fhem("set L_Terrasse,L_Garten_4 on-for-timer 360")}
elsif {if(([BM_Terrasse:brightness] <= 75) && ([Rollo_T_links:level] <= 75)) {fhem ("set L_Garten_4 on-for-timer 360")}
else {fhem ("set L_Garten_1 on")}
}}}

Die ,,else"-Bedingung ist nur ein Platzhalter, falls ich noch was dranhängen möchte.

Ich bin dankbar für Fehlerindikation...

Michael

justme1968

du vermischt die syntax von perl if und fhem IF die perl und die fhem ebene.

auf perl ebene mit perl if musst du ReadingsVal verwenden um an die readings zu kommen.

wenn du das fhem IF verwendest brauchst du in deinem fall die perl ebene überhaupt nicht und kannst unter anderem die meisten geschweiften klammern und den fhem("..") aufruf um das set weg lassen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

WotSefak

Aus der gefühlten Not heraus: ich hatte angefangen mit

BM_Terrasse:motion
if ([BM_Terrasse:brightness] < 75 && [Rollo_T_links:level] < 75) set L_Terrasse,L_Garten_4 on-for-timer 360
elsif (([BM_Terrasse:brightness] < 75) && ([Rollo_T_links:level] >= 75)) set L_Garten_4 on-for-timer 360
else set L_Garten_1 on

und bin dann in Richtung perl abgewandert, weil's einfach nicht klappen wollte. Alle bisherigen Varianten wollten nicht klappen...

p.s.: den <>Fehler im ersten Beispiel hatte ich nur falsch kopiert; hier ist's logisch korrekt gezeigt (wie beabsichtigt)

justme1968

das fhem IF wird gross geschrieben...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Damian

Bevor du noch lange experimentierst:

BM_Terrasse:motion IF ([BM_Terrasse:brightness] < 75 and [Rollo_T_links:level] < 75)
  (set L_Terrasse on-for-timer 360, set L_Garten_4 on-for-timer 360)
ELSE (
  IF ([BM_Terrasse:brightness] < 75 and [Rollo_T_links:level] >= 75)
     (set L_Garten_4 on-for-timer 360)
  ELSE
     (set L_Garten_1 on)
)


So über DEF-Knopf in der WEB-Oberfläche eingeben.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

WotSefak

Danke Euch! Ich hab's voll verschwurbelt (elsif in fhem verwendet usw.); jetzt läuft es, und ich kann damit weiter arbeiten und es auch verstehen :-)
Beste Grüsse
Michael