Hallo,
ich habe ein problem mit dem folgenden Code.
Grundidee ist wie folgt:
- Morgends bei sonnenaufgang soll geprüft werden, ob es an dem Tag sonnig oder leicht bewölkt wird.
[?MeinWetter:fc1_code]==30 or [?MeinWetter:fc1_code]==32
- Falls dann die Höchsttemperatur über 20° ist, soll der Rolladen nur halb hochgefahren werden.
[?MeinWetter:fc1_high_c] > 20
- um 14 Uhr werden die Rolläden dann vollständig hochgefahren
Damit will ich verhindern, dass sich im Sommer der Raum zu stark aufheizt.
Jetzt ist es mir im Winter schon des öfteren so gegeangen, dass die Rolläden vormittags dennoch nur halb hoch gefahren wurden. Hat jemand eine gute Idee, woran das liegen kann?
Die Temperatur wird über das WEATHER Modul von Yahoo abgerufen. Immer wenn ich dort dann später reinschaue sehe ich höchsttemperaturen deutlich unter 20°. Kann es sein, dass es ein problem gibt, wenn es negative Höchsttemperaturen gibt? Oder habe ich Klammern im Code vergssen?
Bin um jeden Tipp dankbar.
Hier das def meines DOIF's
([{sunrise("HORIZON=1",0,"6:30","10:00")}] and [?MeinWetter:fc1_high_c] > 20 and [?MeinWetter:fc1_code]==30 or [?MeinWetter:fc1_code]==32) (set EG_WZ_ROLL_FENST 28,set EG_WZ_Soll_Pos_Roll 28)
DOELSEIF ([{sunrise("HORIZON=1",0,"6:30","10:00")}]) (set EG_WZ_ROLL_FENST 100,set EG_WZ_ROLL_TUER 100,set EG_WZ_Soll_Pos_Roll 100)
DOELSEIF ([14:00]) (set EG_WZ_ROLL_FENST 100, set EG_WZ_ROLL_TUER 100,set EG_WZ_Soll_Pos_Roll 100)
Hi,
Du willst doch, dass der or Ausdruck in sich erstmal aufgelöst wird. or steht aber als letztes in der Rangfolge (https://wiki.selfhtml.org/wiki/Perl/Operatoren)
Deshalb werden erstmal alle and Ausdrücke aufgelöst und dann zum Schluss der or Ausdruck.
Ich denke Du musst den or Ausdruck Klammern. Aber eventuell habe ich es falsch verstanden. Bau Dir am Besten eine Logiktabelle auf und alle Zustände rein und das tastsächliche und gewünschte Ergebnis dahinter.
Gruß Otto
Hallo,
Otto hat vollkommen Recht.
Aufgrund der Rangfolge des "or"s gehen deine Rollos auf 28, wenn
- sunrise(blabla) UND (fc1_high<20) UND (fc1_code==30)
- ODER wenn (fc1_code==32)
ist.
Lösung, wie schon vorgeschlagen, die beiden ODER Operanden klammern.
Grüße
James
Hey,
super vielen Dank für die Antworten, werde das gleich mal probieren und die nächsten Tage beobachten. Hatte ich dann wohl im Sommer übersehen.
/Edit:
Habe gerade noch gesehen, dass fc1_code auf 32 steht - würde also passen.
Vielen Dank