Die Logik von WebUI - Programmen
Verfasst: 23.02.2010, 14:21
Hallo.
Immer wieder scheint es schwierigkeiten bzgl. der Logik in Programmen zu geben. Gemeint sind hierbei die "normalen" Programme, also alles das, was mit in den WebUI unter Programme zusammenklicken kann - Skripte sind hierbei erstmal außen vor.
Der Unterschied zwischen "Auslösen auf Änderung", "Auslösen auf Aktualisierung" und "nur prüfen".
Möchte man in einem Programm auf etwas reagieren, so passiert dies innerhalb der "Wenn"-Abschnitte. Also z.B., wenn es draußen heiß ist, dann fahre den Dachfenster-Rolladen ein. Der auslösende Faktor wäre also hier die Außentemperatur, die man mit einem entsprechenden Sensor messen kann. Diesen Sensor träge man also in den "Wenn"-Abschnitt des Programmes ein. Doch unter welcher Bedingung soll eine veränderte Temperatur nun erkannt werden (und das Programm auslösen)? Hier kommen die drei Möglichkeiten ins Spiel, die die Überschrift bereits suggerieren:
Auslösen auf Änderung: Nehmen wir an, das Programm wird gestartet, wenn draußen noch 24°C sind. Steigt die Temperatur nun auf 25°C, wird dies als Änderung erkannt und der erste Teil der Abfrage würde ausgeführt werden.
Auslösen auf Aktualisierung: Bleibt die Temperatur nun z.B. eine Stunde konstant auf 26°C, würde ein Auslösen auf Aktualisierung dennoch bewirken, dass das Programm in regelmäßigen Abständen ausgelöst wird (wenn die Soll-Temperatur im Vergleich natürlich auch passt = zweiter Teil der Wenn-Abfrage!). Eine Aktualisierung findet immer dann statt, wenn der Sensor seine aktuellen Meßwerte an die Zentrale überträgt.
Nur prüfen: Ein Programm wird NIEMALS ausgeführt (mit einer einzigen Ausnahme, siehe unten), wenn als einzige Bedingungen "nur prüfen" Einträge existieren. Diese Einträge folgen immer nur vorangestellten Bedingungen, also z.B. "Wenn Temperatur > 26 Grad UND Rolladenposition > 50%". In diesem Fall würde man zum Ermitteln der aktuellen Rolladenposition den Eintrag "nur prüfen" wählen. Es wird also nur der aktuelle Wert VON DER ZENTRALE ausgelesen!
Wann wird ein Programm gestartet?
Programme werden erstmalig gestartet, wenn man dieses neu angelegt hat. Zudem werden sie ausgeführt, wenn sie die Befehle "Auslösen auf Änderung" oder "Auslösen auf Aktualisieren" enthalten (und entsprechende Bedingungen übereinstimmen). Man kann Programme aber auch manuell starten, indem man diese im Bereich "Status & Bedienung -> Programme" anklickt. Zu guter Letzt werden Programme auch bei einem Neustart der Zentrale abgearbeitet. Welcher Teil des Programmes dabei abgearbeitet wird, zeigt folgender, kurzer Überblick:
Wer glaubt, ein Programm wird hinter einer auslösenden Bedingung abgearbeitet, der irrt. Hat man aber erstmal die Logik verstanden, wann welche Bedingung erfüllt und welcher Abschnitt dann ausgeführt wird, sind komplexere Sachverhalte durch wenige Programmzeilen darstellbar.
Wann immer mindestens EINE Bedingung innerhalb eines Programmes zutrifft, wird dieses ausgeführt. Dabei wird aber nicht der Programmcode abgearbeitet, der hinter der betreffenden Bedingung steht, sondern schön erstmal brav von oben nach erstmal geguckt, ob bereits andere Bedingungen zutreffen!!!
Hat man Programme mit nur einem oder zwei "Wenn"-Bedingungen, kann nicht viel schiefgehen. Bei mehreren Abschnitten sollte man sich aber immer darüber im Klaren sein, und sich die Logik von oben nach unten durchgucken, was wann passiert.
MERKE: Ausgelöst wird immer, wenn eine Bedingung zutrifft. Abgearbeitet wird dann aber, von oben nach unten. Trifft eine frühere Bedingung zu, wird diese ausgeführt!
Ich hoffe, das bringt ein wenig Licht ins Dunkle.
Lieben Gruß,
kaju
Immer wieder scheint es schwierigkeiten bzgl. der Logik in Programmen zu geben. Gemeint sind hierbei die "normalen" Programme, also alles das, was mit in den WebUI unter Programme zusammenklicken kann - Skripte sind hierbei erstmal außen vor.
Der Unterschied zwischen "Auslösen auf Änderung", "Auslösen auf Aktualisierung" und "nur prüfen".
Möchte man in einem Programm auf etwas reagieren, so passiert dies innerhalb der "Wenn"-Abschnitte. Also z.B., wenn es draußen heiß ist, dann fahre den Dachfenster-Rolladen ein. Der auslösende Faktor wäre also hier die Außentemperatur, die man mit einem entsprechenden Sensor messen kann. Diesen Sensor träge man also in den "Wenn"-Abschnitt des Programmes ein. Doch unter welcher Bedingung soll eine veränderte Temperatur nun erkannt werden (und das Programm auslösen)? Hier kommen die drei Möglichkeiten ins Spiel, die die Überschrift bereits suggerieren:
Auslösen auf Änderung: Nehmen wir an, das Programm wird gestartet, wenn draußen noch 24°C sind. Steigt die Temperatur nun auf 25°C, wird dies als Änderung erkannt und der erste Teil der Abfrage würde ausgeführt werden.
Auslösen auf Aktualisierung: Bleibt die Temperatur nun z.B. eine Stunde konstant auf 26°C, würde ein Auslösen auf Aktualisierung dennoch bewirken, dass das Programm in regelmäßigen Abständen ausgelöst wird (wenn die Soll-Temperatur im Vergleich natürlich auch passt = zweiter Teil der Wenn-Abfrage!). Eine Aktualisierung findet immer dann statt, wenn der Sensor seine aktuellen Meßwerte an die Zentrale überträgt.
Nur prüfen: Ein Programm wird NIEMALS ausgeführt (mit einer einzigen Ausnahme, siehe unten), wenn als einzige Bedingungen "nur prüfen" Einträge existieren. Diese Einträge folgen immer nur vorangestellten Bedingungen, also z.B. "Wenn Temperatur > 26 Grad UND Rolladenposition > 50%". In diesem Fall würde man zum Ermitteln der aktuellen Rolladenposition den Eintrag "nur prüfen" wählen. Es wird also nur der aktuelle Wert VON DER ZENTRALE ausgelesen!
Wann wird ein Programm gestartet?
Programme werden erstmalig gestartet, wenn man dieses neu angelegt hat. Zudem werden sie ausgeführt, wenn sie die Befehle "Auslösen auf Änderung" oder "Auslösen auf Aktualisieren" enthalten (und entsprechende Bedingungen übereinstimmen). Man kann Programme aber auch manuell starten, indem man diese im Bereich "Status & Bedienung -> Programme" anklickt. Zu guter Letzt werden Programme auch bei einem Neustart der Zentrale abgearbeitet. Welcher Teil des Programmes dabei abgearbeitet wird, zeigt folgender, kurzer Überblick:
- CCU-Neustart -> Dann-Abschnitt (Wenn-Bedingung trifft zu oder existiert nicht), ansonsten Sonst-Abschnitt
Auslösen durch Ereignis -> Dann-Abschnitt (Wenn-Bedingung trifft zu), ansonsten Sonst-Abschnitt
Programm wird manuell ausgelöst -> Dann-Abschnitt
Wer glaubt, ein Programm wird hinter einer auslösenden Bedingung abgearbeitet, der irrt. Hat man aber erstmal die Logik verstanden, wann welche Bedingung erfüllt und welcher Abschnitt dann ausgeführt wird, sind komplexere Sachverhalte durch wenige Programmzeilen darstellbar.
Wann immer mindestens EINE Bedingung innerhalb eines Programmes zutrifft, wird dieses ausgeführt. Dabei wird aber nicht der Programmcode abgearbeitet, der hinter der betreffenden Bedingung steht, sondern schön erstmal brav von oben nach erstmal geguckt, ob bereits andere Bedingungen zutreffen!!!
Hat man Programme mit nur einem oder zwei "Wenn"-Bedingungen, kann nicht viel schiefgehen. Bei mehreren Abschnitten sollte man sich aber immer darüber im Klaren sein, und sich die Logik von oben nach unten durchgucken, was wann passiert.
MERKE: Ausgelöst wird immer, wenn eine Bedingung zutrifft. Abgearbeitet wird dann aber, von oben nach unten. Trifft eine frühere Bedingung zu, wird diese ausgeführt!
Ich hoffe, das bringt ein wenig Licht ins Dunkle.
Lieben Gruß,
kaju