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
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
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)
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
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:
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