DOIF/do always Alternative am Beispiel einer Rollladenautomatik
DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes 'do' mit dem Wert 'always' geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.
Rollladensteuerung mittels Twilight
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.
Beschreibung
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.
Auf den ersten Blick erscheint das 'do always' hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder 'scharf' für den nächsten Einsatz.
Definition
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] > [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] > 75 and [?06:15-11:00|8]) (set du_Labor_Rollladen 0) DOELSEIF ([TL_Labor_Berlin:twilight_weather] > [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] > 75 and [?06:15-11:00|7]) (set du_Labor_Rollladen 0) DOELSEIF ([TL_Labor_Berlin:twilight_weather] < [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] < 10 and [?15:00-22:00]) (set du_Labor_Rollladen 85) DOELSEIF ([00:15] or [12:00])
Laborgruppe zum Import mit Raw definition
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242 attr TL_Labor_Berlin alias Twilight Wetter attr TL_Labor_Berlin group Rollläden attr TL_Labor_Berlin room DOIF_Labor attr TL_Labor_Berlin sortby 4 attr TL_Labor_Berlin stateFormat twilight_weather% define du_Labor_Rollo_TL_auf dummy attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -> 100=aus) attr du_Labor_Rollo_TL_auf group Rollläden attr du_Labor_Rollo_TL_auf room DOIF_Labor attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100 attr du_Labor_Rollo_TL_auf webCmd state setstate du_Labor_Rollo_TL_auf 40 define du_Labor_Rollo_TL_WE_auf dummy attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -> 100=aus) attr du_Labor_Rollo_TL_WE_auf group Rollläden attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100 attr du_Labor_Rollo_TL_WE_auf webCmd state setstate du_Labor_Rollo_TL_WE_auf 50 define du_Labor_Rollo_TL_zu dummy attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -> 0=aus) attr du_Labor_Rollo_TL_zu group Rollläden attr du_Labor_Rollo_TL_zu room DOIF_Labor attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100 attr du_Labor_Rollo_TL_zu webCmd state setstate du_Labor_Rollo_TL_zu 20 define du_Labor_Rollladen dummy attr du_Labor_Rollladen alias Simmulation Rollladen attr du_Labor_Rollladen group Rollläden attr du_Labor_Rollladen room DOIF_Labor attr du_Labor_Rollladen setList state:slider,0,1,100 attr du_Labor_Rollladen stateFormat state% attr du_Labor_Rollladen webCmd state setstate du_Labor_Rollladen 0 define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] > [?du_Labor_Rollo_TL_auf:state]\ and\ [?du_Labor_Rollladen:state] > 75\ and\ [?06:15-11:00|12345])\ (set du_Labor_Rollladen 0)\ DOELSEIF\ ([TL_Labor_Berlin:twilight_weather] > [?du_Labor_Rollo_TL_WE_auf:state]\ and\ [?du_Labor_Rollladen:state] > 75 and [?06:15-11:00|06])\ (set du_Labor_Rollladen 0)\ DOELSEIF\ ([TL_Labor_Berlin:twilight_weather] < [?du_Labor_Rollo_TL_zu:state]\ and\ [?du_Labor_Rollladen:state] < 10\ and\ [?15:00-22:00])\ (set du_Labor_Rollladen 100)\ DOELSEIF\ ([00:15] or [12:00]) attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight attr di_Labor_Rollo_TL group Rollläden attr di_Labor_Rollo_TL room DOIF_Labor save