Die Logik von Programmen

  • Stand: Sonntag, 12 Januar 2014
  • Artikel:
Die Möglichkeit, mit HomeMatic eigene Ablaufsteuerungen mit Bezug auf bestimmte Ereignisse zu erstellen, erweitert das System enorm und bietet in dieser Hinsicht einen großen Vorteil gegenüber manch anderem System auf dem Markt. Gerade Einsteiger dürften am Anfang aber über den ein oder anderen Stein stolpern, die dieser Artikel versuchen soll aus dem Weg zu räumen.

Direktverknüpfungen vs. Programme

Wie bereits an anderer Stelle beschrieben, ist der grundlegendste Unterschied zwischen Direktverknüpfungen und Programmen neben der Ausführungsgeschwindigkeit die Einflussnahme auf Ereignisse und Zustände anderer Komponenten auf den Ablauf einer Steuerungsaufgabe. Zwar lassen sich mit den von neueren Komponenten eingeführten, virtuellen Kanälen schon einiges mehr in eine Direktverknüpfungen packen als zuvor, an die Möglichkeiten von Programmen gerade bei Verwendung mehrerer Beteiligter reichen sie aber nicht heran. Und selbst, wenn sich mit einem herkömmlichen Programm evtl. die ein oder andere Aufgaben nicht lösen lässt, kann der Einsatz von Skripten zum Erfolg führen, die sich in Direktverknüpfungen nicht nutzen lassen.

Die Struktur eines Programmes

Die Struktur eines HomeMatic-Programmes folgt dem klassischen »Wenn - Dann - Sonst« Prinzip:

Wenn
   ...der Lichtschalter gedrückt wird
   ...und
   ...das Deckenlicht aus ist
Dann
   ...schalte das Deckenlicht an
Sonst
   ....schalte das Deckenlicht aus

Bei dem obigen Programm handelt es sich um die einfachste Form einer so genannten »Toggle-Funktion«, die einen Verbraucher über einen Lichtschalter abwechselnd ein- bzw. ausschaltet.

Wann wird ein Programm ausgelöst?

Ein Programm wird unter anderem ausgeführt, wann immer mindestens eine Auslösebedingung innerhalb eines »Wenn«- oder »Sonst Wenn«-Abschnitts erfüllt wurde. Das heißt aber noch nicht, das ein erwarteter »Dann«-Abschnitt auch ausgeführt wird - dazu aber später mehr. Im obigen Beispiel wäre der Auslösegrund das Betätigen des Lichtschalters. HomeMatic unterscheidet zwischen verschiedenen Auslösetypen:

Auslösen auf Änderung

Eine Änderung liegt vor, wenn sich der aktuelle Zustand gegenüber der letzten Abfrage geändert hat. Bei dem Lichtschalter trifft dies bei jedem getätigten Tastendruck zu, ändert sich der Zustand doch von »nicht gedrückt« auf »gedrückt« wieder in den Ursprung auf »nicht gedrückt«. Bei analogen Meßwerten wird ausgelöst, wenn sich der Wahrheitsgehalt der Bedingung ändert: Eine Abfrage auf > 18°C löst also nur aus, wenn zuvor dieser Wert auch erreicht war und sich nun geändert hat.

Auslösen auf Aktualisierung

Bleiben wir bei dem Beispiel mit dem Temperatursensor, würde dieser nun auch das entsprechende Programm auslösen, wenn eigentlich keine Änderung der Temperatur vorliegt, er aber seinen aktuellen Wert der HomeMatic-Zentrale gemeldet hat. Batteriebetriebene Sensoren funken mindestens einmal am Tag die Zentrale an, um neben den aktuellen Daten (z.Bsp. Batteriestand) auch noch ihre einwandfreie Funktion zu signalisieren. Andernfalls würde in den Servicemeldungen ein Eintrag generiert, dass die Kommunikation aktuell gestört sei. Ein Temperatursensor übermittelt seine aktuelle Daten etwa alle 180 Sekunden.

Nur prüfen

Es gibt noch einen dritten Typ zur Auswahl, der aber nicht verwendet werden kann, ein Programm auszulösen, sondern nur, um den aktuellen Zustand eines Gerätes abzufragen. Im obigen Beispiel wurde er dazu genutzt, den Status der Deckenlampe zu ermittelt und diese dann entsprechend ein- bzw. auszuschalten. An dieser Stelle sei angemerkt, das der geprüfte Wert unter Umständen nicht dem aktuellen Zustand entsprechen muss. Bei jeder Statusänderung, die die HomeMatic-Zentrale mitbekommt, wird diese in einem internen Zwischenspeicher abgelegt, der beim Prüfen verwendet wird, um den Zugriff zu beschleunigen. Es kann Situationen geben, bei der z.Bsp. aufgrund einer Kommunikationsstörung der aktuelle Zustand eines Gerätes nicht übermittelt wird. In der Praxis kommt dies bei einer normalerweise guten Funkverbindung aber eher selten vor.

Auslösen beim Starten der Zentrale

Wird z.Bsp. nach einem Firmware-Update oder dem Enspielen einer Zusatzsoftware die HomeMatic-Zentrale neu gestartet, werden sämtliche Programme in unbestimmter Reihenfolge nacheinander abgearbeitet und nach folgender Logik einmalig ausgeführt:

  • Enthält ein Programm keine Wenn-Bedingung, wird immer der »Dann«-Abschnitt ausgeführt.
  • Enthält ein Programm eine Wenn-Bedingung, und diese ist wahr, wird ebenfalls der »Dann«-Abschnitt ausgeführt.
  • Enthält ein Programm eine Wenn-Bedingung, diese ist aber falsch, wird der »Sonst«-Abschnitt ausgeführt.

Manuelles Ausführen

Jedes Programm kann über den WebUI-Punkt »Status & Bedienung« auch manuell ausgeführt werden. Die Liste enthält dazu neben jedem Programm eine entsprechende Schaltfläche zum Auslösen. Dabei wird immer(!) der »Dann«-Abschnitt ausgeführt, unabhängig davon, ob die hinterlegten Bedingungen im »Wenn«-Abschnitt zutreffen würden.

Was wird ausgeführt?

Jede Bedingung mit »Auslösen auf Änderung« bzw. »Auslösen auf Aktualisierung« innerhalb eines »Wenn«-Abschnitts führt zum Auslösen des entsprechenden Programmes. Es ist dabei sehr wichtig zu verstehen, dass dann aber nicht unbedingt der »Dann«-Abschnitt hinter der vermeintlich auslösenden Bedingung abgearbeitet wird. Vielmehr prüft HomeMatic alle gegebenen Bedingungen von oben nach unten ab und führt den darunterlegenden »Dann«-Abschnitt des ersten, zutreffenden »Wenn«-Blocks aus.

Beispiel:


Wenn
   ...Fernbedienung = Tastendruck kurz (Auslösen auf Änderung)
   ...oder
   ...Temperatur < 20 (nur prüfen)
Dann
   ...Deckenlicht an
Sonst wenn
   ...Bewegung erkannt (Auslösen auf Änderung)
Dann
   ...Deckenlicht aus

Das obige Programm wird ausgelöst, wenn entweder die Fernbedienung kurz betätigt oder eine Bewegung erkannt wird. Liegt die Temperatur unter 20C, wird das Deckenlicht aber ein- und nicht, wie vielleicht vermutet, ausgeschaltet - warum?

Wie bereits gesagt, führt sowohl ein kurzer Tastendruck als auch eine erkannte Bewegung zum Auslösen des Programmes. Nun werden alle »Wenn«-Blöcke von oben nach unten abgearbeitet. Der erste Abschnitt prüft auf den kurzen Tastendruck und die Temperatur, die mit »nur prüfen« zwar nicht zum Auslösen geführt hat, wohl aber eine Rolle beim Vergleich spielt. Durch die “Oder«-Operation reicht nämlich die Erfüllung einer Bedingung aus, um den darunter liegenden »Dann«-Abschnitt auszuführen. Liegt die Temperatur unter 20C, ist die Bedingung erfüllt und das Licht wird eingeschaltet.

Diese Logik mag am Anfang für Verwirrung sorgen, ermöglicht in der Praxis aber effizientere und kürzere Programme. Arbeitet ein Programm nicht so wie erwartet, ist der Fehler meistens in genau dieser Abarbeitungslogik zu finden.

Kommentare (2)

  • Stephan Grahl

    Stephan Grahl

    18 Dezember 2012 um 11:48
    Zum Punkt "Auslösen auf Änderung" möchte ich mal auf die Diskussion hier verweisen:
    http://homematic-forum.de/forum/viewtopic.php?f=26&t=11194&p=82617#p82617

    antworten

  • Rubbi Markovic

    Rubbi Markovic

    20 Dezember 2015 um 22:04
    ich möchte gerne scripts als module vorbereiten, welche ich jeweils aufrufen kann. nicht nur inline code. habe nichts davon in der doku gefunden. bisher kenne ich zbso inline für mail aufruf. ich suche erklärung wie man system variablen definiert, im programm setzt und ändert und wie man sie in scripts einsetzt. möchte wissen ob man ins log textschreiben kann zbsp "datum/uhrzeit dasunddasistpassiert". oder ist die script sprache nur rudimentär? vielen dank. rubbi

    antworten

Einen eigenen Kommentar verfassen

Du musst auf dieser Seite angemeldet sein, um einen Kommentar für diesen Artikel verfassen zu können.
Soll es schnell gehen? Dann melde Dich jetzt einfach über Dein soziales Netzwerk an:

Kommentare // TecBase

Gonzalo Jacob

Gonzalo Jacob

31. Dezember, 2016 |

Hallo, Admin !
vielleicht können Sie mir helfen, Ich habe keine Ahnung, wie ich einen Anwesenheitsimulator zum Ein- und Ausschalten...

thi

thi

16. November, 2016 |

Hallo Petrus,

dieses Jahr hat mir das Script den Buß- und Bettag auf den 17.11.berechnet. Ursache ist offenbar eine falsche...