Basics: Zeitgesteuerte Szenen

Basics: Zeitgesteuerte Szenen

25. Januar 2017 1 209 Von Bastian

Zeitgesteuerte Szenen werfen – gerade bei Einsteigern – immer wieder Fragen auf. In diesem Artikel zeige ich wie diese funktionieren und was zu beachten ist. Weiterhin erkläre ich die Mechanismen die von Fibaro für die Realisierung von zeitgesteuerten Szenen mitgeliefert werden.

Zeitgesteuerte Szenen

Zeitgesteuerte Szenen

Zeitgesteuerte Szenen

Als Ergänzung zu den Triggern aus dem ersten Teil der Basics-Reihe dreht sich dieser Artikel um zeitgesteuerte Szenen. Also Szenen die abhängig von Datum, Tag und Zeit ablaufen sollen. Entgegen der allgemeinen Erwartungen verfügt das Home Center 2 nicht über einen klassischen Task-Planer in dem die Einplanung von Szenen zu bestimmten Zeitpunkten möglich sind. Dies führt bei vielen Einsteigern zu Verwirrungen. Das „Fehlen“ eines solchen ist aber bei näherem Hinsehen absolut berechtigt.

Der Zeitpunkt zur Ausführung einer Szene wird innerhalb der Szene definiert und diese mit einem Autostart Trigger gestartet. Sie laufen also im Dauerbetrieb und prüfen in einem definierten Intervall, ob die gewünschte Startzeit erreicht ist.

Vorlage aus einer Blockszene

Die für Einsteiger einfachste Methode zeitbasierte Szenen zu erstellen ist der Blockszenen-Editor. In der nachfolgend dargestellten Szene wird jeden Tag um 18:00 Uhr ein Fibaro Wallplug eingeschaltet an dem ein kleines Stimmungslicht im Hausflur angeschlossen ist.

Zeitgesteuerte Blockszene

Zeitgesteuerte Blockszene

Um den daraus resultierenden Lua Code näher zu analysieren bietet das Home Center 2 die Möglichkeit der Wandlung von Block- in Lua-Szenen. Die dafür benötigte Schaltfläche befindet sich unter dem Blockszenen-Editor. Aus der oben dargstellten Blockszene wird Lua:

Die erste Zeitgesteuere Szene

Beim Anblick des Lua Codes werden die meisten Anfänger erst einmal zurückschrecken und sich wundern, warum diese harmlose Blockszenen einen so umfangreichen Code zur Folge hat. Die hängt damit zusammen, dass jede Szene im HC2 für sich alleine steht. Es also keine Interaktion zwischen Szenen gibt. Daher müssen alle Mechanismen zur Realisierung der Zeitsteuerung  – mit ganz wenigen Ausnahmen – in jeder einzuplanenden Szene vorhanden sein.

In den nachfolgenden Kapiteln werde ich die oben dargestellte Szene in handliche Teile zerlegen und von oben nach unten erklären.

Die Trigger

Wie bereits im Artikel zu den Triggern erklärt, verfügt jede Fibaro Szene über Kopfzeilen in denen definiert wird wann und wie die Szene gestartet wird.


Entscheidend ist hier die Zeile 2, also %% autostart damit wird definiert, dass diese Szenen beim Start des Home Center sowie beim Speichern der Szene direkt gestartet wird. Im Gegensatz zu den übrigen Zeilen im Header benötigt die Autostart-Zeile keine nähere Definition und steht für sich alleine.

Der Source-Trigger

Um unterschiedliche Szenarien mit einzelnen Szenen realisieren zu können wird in Zeile 8 abgefragt, wodurch die Szene gesartet wurde. Dies ist für den späteren Verlauf der Szene relevant.


Die Variable sourceTriggerwird hier mit dem Rückgabewert der Fibaro Funktion fibaro:getSourceTrigger gefüllt. Zum genauen Inhalt der Variable komme ich später. Für den Moment ist es nur wichtig zu wissen, dass in der Variable Informationen zum Auslöser der Szene gespeichert werden.

Die Funktion tempFunc

Als nächstes wird eine Funktion deklariert. Deklarieren bedeutet soviel wie „öffentlich bekannt machen“. Dies trifft es hier ganz gut, denn das reine Deklarieren von Funktionen bedeutet noch nicht, dass diese zum jetzigen Zeitpunkt auch ausgeführt werden.


Innerhalb der Funktion (Zeile 2-7) werden die nachfolgenden Schritte abgehandelt:

  1. In der currentDate wird mit dem Rückgabewert von os.date(„*t“) gefüllt. Die Funktion os.date() gibt das aktuelle Systemdatum und die Uhrzeit des Home Center 2 zurück.
  2. Es wird erneut abgefragt, durch welchen Trigger die Szene gestartet wurde.
  3. Nun folgt die eigentliche Prüfung des Datums in einer sogenannten if-then-else Anweisung. Diese macht – vereinfacht dargestellt – nichts anderes, als das aktuelle Datum und die Uhrzeit mit den Vorgaben der Szene zu vergleichen. Sind die Bedingungen erfüllt, wird die Lampe mit fibaro:call(112, „turnOn“) eingeschaltet. Ist sie nicht erfüllt, passiert nichts. Damit ist die Abfrage der Bedingung abgeschlossen.
  4. In Zeile 7 der Funktion tempFunc() wird widerum eine andere Szene aufgerufen. Dazu mehr im nächsten Kapitel.

Die Funktion setTimeout

Die am Ende der Funktion tempFunc() aufgerufene Funktion setTimeout(60*1000) wird vom Fibaro HC2 zur Verfügung gestellt und tut etwas ganz geschicktes. Sie startet die oben deklarierte Funktion tempFunc() immer wieder aufs Neue. Und zwar im Rythmus des angegebenen Wertes (60*1000). Hierbei handelt es sich um 60 Mal 1000 Milisekunden, also in Summe eine Minute. Damit sorgt setTimeout() dafür, dass jede Minute geprüft wird, ob die Bedingungen erfüllt werden. Diese Funktion von Fibaro ist also dafür verantwortlich, dass unsere zeitgesteuerte Szene in Dauerschleife läuft.

Die unterschiedlichen Startarten

Am Ende der Szene finden wir eine weitere if-then-else Anweisung mit der je nach Startart der Szene unterschieden wird, was passieren soll. Hier kommt auch wieder die Eingangs definierte Variable sourceTrigger zum Einsatz. In dieser Variable befinden sich Informationen über den Auslöser der Szene. Also welches Ereignis (Autostart, Geräteeigenschaft, Event, globale Variable) den Start der Szene ausgelöst hat.


In dieser if-then-else Anweisung werden folgende Bedingungen abgefragt:

  1. Wenn der Start-Type „autostart“ ist, die Szene also automatisch gestartet wurde, dann führe die Funktion tempFunc() aus. Wir erinnern uns, diese Funktion läuft dann in Dauerschleife.
  2. Ist der Start-Type nicht „autostart“, dann lese das Datum und die Start-Informationen erneut aus.
    1. Ist der Start-Type nun „Other“, schalte das Licht unabhängig von der Zeitstuerung ein.

Zusammenfassung

Das Home Center 2 verfügt nicht über einen klassischen Scheduler dem man Tag, Zeit und Szene zur Ausführung mitgeben kann. Dies scheint auf den ersten Blick unnötige Mehrarbeit und überflüssigen Code produzieren. Jedoch ist die Realisierung derartiger Steuerungen innerhalb von Szenen um ein Vielfaches flexibler. Es lassen sich beliebig viele Bedingungen und Abhängigkeiten definieren.

Als Einstieg in die Thematik ist das Umwandeln von Blockszenen die einfachste und schnellste Möglichkeit sich mit dem Thema auseinander zu setzen. Der dabei generierte Code ist allerdings alles andere als optimal und wird mit der Zeit sicher selbst entwickelten Scheduler-Funktionen weichen bzw. optimiert.

Feedback und Anregungen

Dies war nun der zweite Teil der Basics-Reihe. Feddback gern in die Kommentare oder ins Fibaro Forum. Da ich den Status des Anfängers mittlerweile verlassen habe, würde ich mich über Anregung für weitere Einstiegsthemen sehr freuen. Was bereitet Probleme? Womit kann ich in den nächsten Artikeln beschäftigen?

Der Autor

Moin, ich heiße Bastian und bin Autor dieser kleinen bescheidenen Seite. Zwanghaft, ja fast schon neurotisch beschäftige ich mich seit Jahren mit jedem erdenklichen technischen Schnick-Schnack. Nichts, was einen Stecker hat ist vor mir sicher. So war es klar, dass ich eines Tages das Haus auf den Kopf stellen und alles vernetzen würde.

Da ich bei meinem Vorhaben sehr viel Hilfe und Unterstützung in diversen Foren, Blogs und Boards erfahren habe, möchte ich diesen Blog zum sammeln meiner Smarthome- und Technikerrungenschaften nutzen um der Community zumindest ein klein wenig was zurückgeben zu können.

Artikel teilen