FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: edition am 01 Januar 2018, 11:55:06

Titel: DOIF Operator "zwischen"?
Beitrag von: edition am 01 Januar 2018, 11:55:06
Hallo zusammen und allen ein frohes neues Jahr.

Ich bastle gerade an einem DOIF, welches in Abhängigkeit des "brightness" Wertes meines Bewegungsmelders bestimmte Texte an einen dummy sendet, dessen Status ich dann auf einem Display darstellen will. Sinngemäß soll bei Werten unter 100 ein Text generiert werden, bei Werten zwischen 100 und 150 ein anderer Text usw.. Da ich keinen Operator für "zwischen" kenne, habe ich das Ganze erst einmal so versucht:

([Bewegungsmelder_Terasse:brightness]<100) (set HellRSS Es ist dunkel) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>120 and [Bewegungsmelder_Terasse:brightness]<150) (set HellRSS Es dämmert) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>150 and [Bewegungsmelder_Terasse:brightness]>230) (set HellRSS Es ist bedeckt) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>230) (set HellRSS Es ist sonnig)

Leider funktioniert das nur bis zur 2. Bedingung. Wenn es heller als "150" wird, ändert sich nichts mehr. Der Status bleibt bei "Es dämmert" stehen, obwohl "brightness" schon über 200 liegt. Da das Ganze auch schon sehr lang ist, würde ich am liebsten mit so etwas wie:

DOELSEIF ([Bewegungsmelder_Terasse:brightness]zwischen120 & 150 (set HellRSS Es dämmert)

arbeiten. Ob es so etwas gibt, weiß ich nicht und ob es damit funktioniert leider auch nicht. Oder habe ich gar einen Denkfehler?

Gruß
edition
Titel: Antw:DOIF Operator "zwischen"?
Beitrag von: igami am 01 Januar 2018, 12:01:57
Prinzipiell ist es schon richtig so mit zwei Vergleichen zu arbeiten, aber es wird einfacher einen Fehler zu finden, wenn du den Code mit ein paar Zeilenumbrüchen und Einrückungen strukturierst
Titel: Antw:DOIF Operator "zwischen"?
Beitrag von: Damian am 01 Januar 2018, 12:04:21
Zitat von: edition am 01 Januar 2018, 11:55:06
Hallo zusammen und allen ein frohes neues Jahr.

Ich bastle gerade an einem DOIF, welches in Abhängigkeit des "brightness" Wertes meines Bewegungsmelders bestimmte Texte an einen dummy sendet, dessen Status ich dann auf einem Display darstellen will. Sinngemäß soll bei Werten unter 100 ein Text generiert werden, bei Werten zwischen 100 und 150 ein anderer Text usw.. Da ich keinen Operator für "zwischen" kenne, habe ich das Ganze erst einmal so versucht:

([Bewegungsmelder_Terasse:brightness]<100) (set HellRSS Es ist dunkel) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>120 and [Bewegungsmelder_Terasse:brightness]<150) (set HellRSS Es dämmert) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>150 and [Bewegungsmelder_Terasse:brightness]>230) (set HellRSS Es ist bedeckt) DOELSEIF ([Bewegungsmelder_Terasse:brightness]>230) (set HellRSS Es ist sonnig)

Leider funktioniert das nur bis zur 2. Bedingung. Wenn es heller als "150" wird, ändert sich nichts mehr. Der Status bleibt bei "Es dämmert" stehen, obwohl "brightness" schon über 200 liegt. Da das Ganze auch schon sehr lang ist, würde ich am liebsten mit so etwas wie:

DOELSEIF ([Bewegungsmelder_Terasse:brightness]zwischen120 & 150 (set HellRSS Es dämmert)

arbeiten. Ob es so etwas gibt, weiß ich nicht und ob es damit funktioniert leider auch nicht. Oder habe ich gar einen Denkfehler?

Gruß
edition

"Zwischen" hast du bereits schon definiert: ([Bewegungsmelder_Terasse:brightness]>120 and [Bewegungsmelder_Terasse:brightness]<150)

Titel: Antw:DOIF Operator "zwischen"?
Beitrag von: edition am 01 Januar 2018, 12:30:08
Ja, damit habe ich mir beholfen, weil ich den Operator nicht kenne. Ich wollte das Ganze kürzer gestalten. Wenn es keinen Operator für zwischen gibt, muss ich es eben so machen.
Aber warum wird nur die erste und zweite Bedingung umgesetzt, nicht aber die dritte? Wenn der "brightness" Wert höher als 150 ist, ist doch die zweite Bedingung gar nicht mehr erfüllt, sondern die dritte. Das DOIF bleibt aber bei cmd_2 stehen. Warum? Habe ich da einen Denkfehler?

edition
Titel: Antw:DOIF Operator "zwischen"?
Beitrag von: Damian am 01 Januar 2018, 12:37:09
Zitat von: edition am 01 Januar 2018, 12:30:08
Ja, damit habe ich mir beholfen, weil ich den Operator nicht kenne. Ich wollte das Ganze kürzer gestalten. Wenn es keinen Operator für zwischen gibt, muss ich es eben so machen.
Aber warum wird nur die erste und zweite Bedingung umgesetzt, nicht aber die dritte? Wenn der "brightness" Wert höher als 150 ist, ist doch die zweite Bedingung gar nicht mehr erfüllt, sondern die dritte. Das DOIF bleibt aber bei cmd_2 stehen. Warum? Habe ich da einen Denkfehler?

edition

So ziemlich in allen höheren Programmiersprachen wird "zwischen" so oder so ähnlich definiert.

([Bewegungsmelder_Terasse:brightness]>150 and [Bewegungsmelder_Terasse:brightness]>230)

Dass diese Bedingung nicht sinnvoll ist, wirst du feststellen, wenn du gedanklich Werte 100, 200, 300 durchspielst:



Titel: Antw:DOIF Operator "zwischen"?
Beitrag von: edition am 01 Januar 2018, 12:45:44
Oh sch... Da ist ja ein Fehler drin. Mit 2x größer als kann es auch nicht funktionieren. :-[

Ich ziehe meine Frage zurück!
Fehler behoben und funktioniert.

edition