Homematic Die Programm Logik

Aus WagoTEC

Die Programmierung der HomeMatic, hat mich am Anfang einiges an Nerven gekostet, weil die Programm-Logik etwas gewöhnungsbedürftig ist. Nachdem ich die Programmlogik verstanden hatte, waren viele Probleme gelöst.

Deshalb sollten Neueinsteiger die folgenden Informationen sorgfältig lesen und auch verstehen.

Testprogramm A

Homematic Grundwissen TestprogrammA.png

Ausgangszustand:

  • X=4
  • Y=3
  • X Ändert sich auf den Wert 5

Was passiert: Es wird das Licht eingeschaltet!

Ausgangszustand:

  • X = 6
  • Y = 2
  • Y ändert sich auf den Wert 3

Was passiert: Es wird die Heizung eingeschaltet

War das wirklich so beabsichtigt?

Testprogramm B

Homematic Grundwissen TestprogrammB.png

Ich vermute mal, zumindest erging es mir so, dass der tatsächliche Programmablauf nicht wie geplant abläuft. Ich ging davon aus, dass wenn sich X ändert, nur der erste Programm Abschnitt ausgeführt wird, und wenn sich Y ändert, soll der zweite Programm Abschnitt ausgeführt werden, soweit die Theorie.

  • Es ist wichtig zu wissen, dass wenn eine Auslösebedingung innerhalb eines Programms zutrifft, das komplette Programm aufgerufen wird, nicht nur ein bestimmter Programmabschnitt!
  • Egal, ob sich jetzt X oder Y ändert, es wird das gesamte Programm, von oben nach unten abgearbeitet
  • Bei der ersten zutreffenden Bedingung die erfüllt ist, wird dann nur dieser Abschnitt abgearbeitet und danach das Programm beendet
  • In unserem Beispiel bedeutet dies, dass wenn X den Wert 6 hat und Y sich ändert, das Programm zwar aufgerufen wird, jedoch die Bedingung zum prüfen des Wertes Y nie erreicht wird, da zuvor ja schon die Bedingung X=6 zutreffend war
  • Eine Sonderstellung ergibt sich, wenn keine der Bedingungen erfüllt sind, in diesem Fall wird das Programm beendet, wenn keine Sonst-Bedingung vorhanden ist
  • Man muss also immer die Reihenfolge der "Wenn-Abfragen" beachten, um unvorhergesehene Programmabläufe zu verhindern. Deshalb ist oft von Vorteil, nur so viel wie unbedingt nötig in ein einzelnes Programm zu packen und den Programmablauf auf mehrere Programme zu verteilen.

Nur wenn man diese Logik verstanden hat, bleibt einem so manches Rätsel erspart! Ich habe das erst später so richtig realisiert und tagelang sinniert, warum so einiges verkehrt herum lief! Deshalb finde ich diesen Hinweis für Neulinge sehr wichtig!

Wann wird ein Programm ausgeführt

Ein Programm wird unter folgenden Umständen aufgerufen:

  • Nach einem Reboot der CCU (z.B. Stromausfall, Neustart etc.) wird jedes als aktiv markiertes Programm einmal aufgerufen, das ist ein wichtiger Hinweis! Man muss dafür Sorge tragen, dass dadurch nicht ungewollte Steuer-Funktionen ausgelöst werden. Wie man das verhindert, dazu später mehr.
  • Nach zutreffen einer Auslöse-Bedingung (Bei Aktualisierung, Bei Änderung, Zeitmodul)
  • Nach dem erstellen und speichern eines Programms
  • Beim manuellen Start eines Programms über die Bedienoberfläche der CCU, dabei wird immer der erste Programmabschnitt ausgeführt, egal ob die Bedingung zutrifft, im obigen Beispiel wird die Heizung eingeschaltet, egal welchen Wert X oder Y hat.

Auslösebedingungen kurz erklärt

  • Bei Aktualisierung: Trifft zu, wenn der entsprechenden Wert, der in der WENN-Bedingung abgefragt, aktualisiert wird. Sensoren senden in bestimmten Abständen Messwerte/Zustände, unabhängig ob sich der Wert in der Zwischenzeit geändert hat. Als Beispiel dient ein Fensterkontakt, der jede Stunde seinen Zustand sendet, auch wenn sich dieser nicht geändert hat. In diesem Fall wird also jede Stunde das Programm aufgerufen, obwohl das Fenster immer noch zu ist.
  • Bei Änderung: Trifft zu, wenn sich ein Messwert/Zustand, auf den sich die WENN-Abfrage bezieht, seit der letzten Abfrage geändert hat. Zum Beispiel Fenster wurde geöffnet, Stromverbrauch hat sich erhöht.
  • Nur prüfen: Dies ist keine Auslösebedingung, hier wird nur im Programmablauf geprüft, ob dieser Zustand zutrifft, durch die WENN-Abfrage wird das Programm nicht aufgerufen.

Fallstricke bei Auslösebedingungen

Einige Besonderheiten gibt es bei den Auslösebedingungen noch zu beachten, hier als Beispiel ein Programm, das einen Temperatur Sensor ausliest und dann eine Lampe einschalten soll.

Wenn Temperatur im Bereich von 23º - 30.0º (bei Änderung auslösen) Dann schalte das Licht ein
Temperatur Aktion Licht ist
Licht ist ausgeschaltet Aus
Ist 22.9º Das Programm wird nicht ausgelöst Aus
Steigt auf 23.0º Das Licht wird eingeschaltet Ein
Steigt auf 23.1º Das Programm wird nicht ausgelöst Ein
Nun schalten wir das Licht manuell aus Aus
Steigt auf 23.3º Das Programm wird nicht ausgelöst Aus

Hier ist zu beachten, dass das Programm nur beim Übergang von 22.9º auf 23.0º oder darüber ausgelöst wird, nicht jedoch wenn die Temperatur bereits über den 23.0º ist.

Wer jetzt zu der einfachen Idee greift, die Auslösebedingung von bei Änderung auslösen auf bei Aktualisierung auslösen zu ändern, tut sich vermutlich keinen großen Gefallen, da der Temperatur-Sensor in regelmäßigen Abständen die Daten sendet und dann das Programm immer aktiv wird, egal ob sich die Temperatur geändert hat oder nicht. Dadurch wird bei jeder Temperaturänderung über 22.9º jedes mal das Licht eingeschaltet, obwohl es ja bereits eingeschaltet ist. Das erzeugt viel Funkverkehr und kann dazu führen, dass der Duty-Cycle auf 100% steigt und danach nichts mehr geht, weil der komplette Funkverkehr zum erliegen kommt. Deshalb immer den Duty-Cycle im Auge behalten!

Es gibt da noch so einige Fallstricke, aber ich kann nur dazu raten: Versuch macht Klug!