Mehrere IF Bedingungen kombinieren

Begonnen von Gunjahx, 23 März 2016, 21:43:14

Vorheriges Thema - Nächstes Thema

Gunjahx

Ich versuche gerade eine Rollladensteuerung zu realisieren. Soweit funktioniert diese auch. Nun soll sie eine Urlaubsschaltung bekommen, da einige Rollläden am Wochenende nur auf Knopfdruck geöffnet werden können und dann im Urlaub den ganzen Tag geschlossen bleiben würden.

ich habe mir dafür einen dummy "Urlaub" angelegt mit EventMap "on off".
Folgender Eintrag funktioniert und schaltet um 21.30 bei "Urlaub = on" den Rolladen

define Buero_Rollladen_Urlaub at *21:30:00 { if ( Value ("Urlaub") eq "on")  { fhem("set RollladenBuero on");; } }


Wenn ich diesen jetzt kombiniere mit dem $we Befehl, dann klappt das nicht:

define Buero_Rollladen_Urlaub at *21:36:00 { if ($we) && ( Value ("Urlaub") eq "on")  { fhem("set RollladenBuero on");; } }



Den Umkehrschluss hab ich auch probiert, also das Wochentags um 06:30 Uhr die Rollläden NICHT automatisch hoch gehen sollen wenn Urlaub aktiviert ist. Das klappt auch nicht. Auch bei "Urlaub = on" gehen die Rollläden hoch.

define SchlaZi_Rollladen_AutoUp at *06:30:00 { if (!($we)) && ( Value ("Urlaub") eq "off")  { fhem("set RollladenBuero on");; } }


Hat jemand eine Idee was der Fehler sein könnte?

Hauenschild

Ich finde für solche Funktionen ein DOIF übersichtlicher. Im folgenden ein Beispiel für meine "Wasserwand-Schaltung", welche auch einen Dummy [Unterwegs] beinhaltet und am Wochende unterschiedlich schaltet:

define di_Wasserwandpumpe_Tag DOIF ([09:30|8] or [12:00|7] and [Unterwegs] eq "nein") (set Wasserwandpumpe on) DOELSEIF ([17:30|8] or [14:00|7]) (set Wasserwandpumpe off)

Mit diesem DOIF wird die Wasserwand am Wochenende und an Feiertagen [ |7 ] um 12:00 Uhr eingeschaltet und um 14:00 Uhr ausgeschaltet. An Arbeitstagen[ |8 ] wird die Wasserwand um 09:30 Uhr eingeschaltet und um 17:30 Uhr ausgeschaltet.

Ich hoffe der Hinweis hilft weiter.

Gunjahx

Danke, das werde ich morgen mal probieren.

Dennoch wäre natürlich auch schön zu wissen wo oben der Fehler liegt.

linuxpaul

#3
Ich denke es muss die Bedingung in einer Klammer stehen, oder?
Bsp 1: if () {} -> OK
Bsp 2 & 3: if () && () {} -> nicht OK

Da sollte eine Klammer rum, also:
if ($we && ( Value ("Urlaub") eq "on")) {...}



ist das besser ?

:)
linuxpaul

Gunjahx

Ja, das war das Problem. Wie so oft einfacher Fehler mit vergessener Klammer.

Danke für die Hilfe.

Den Vorschlag mit dem DOIF werd ich auch mal testen die Tage