Heimnetz Smart-Home-Zentralen Tutorial

Fibaro HomeCenter Guide Teil 4: Globale Variablen

Geschrieben von boomx

In fast allen Artikeln auf siio.de ist von sogenannten globalen Variablen die Rede und in den meisten Skripts wird auch eine benötigt. In diesem Artikel werden wir uns mal mit den globalen Variablen weiter auseinandersetzen.

Bei dem Fibaro HomeCenter sind die globalen Variablen ein sehr mächtiges Mittel, neben der Möglichkeit mit LUA zu programmieren oder beim HCL die Blockszenen zusammen zu klicken, um Szenen so anzupassen, dass  die auch unseren Wünschen entsprechen. Außerdem sind sie die einzige Möglichkeit Abhängigkeiten zwischen einzelnen Szenen zu realisieren. So können zum Beispiel Abwesenheitssimulationen, Szenen, welche alle Lichter im Haus ausschalten oder die Heizung herunterfahren, erstellt werden.

Variablen Steuerung

Um die Variablen-Steuerung auf dem HomeCenter aufzurufen, müsst Ihr in der Menü-Leiste auf "Steuerung" (eng. Panels) und dort dann links auf "Variablen-Steuerung" (eng. Variables Panel). Dann befindet Ihr euch im Hauptmenü der Steuerung. Hier können Variablen erstellt, verändert und wieder gelöscht werden.

Variablen

Die Variablen Steuerung im HomeCenter

Bevor Ihr hier eine Variable eurer Wahl erstellen könnt, solltet Ihr wissen, dass es zwei Arten von Variablen gibt. Dies sind zum einen die normalen, bei denen der Wert frei gesetzt werden kann und zum anderen die vordefinierten Variablen. Bei den vordefinierten müssen die Werte, welche die Variable annehmen kann, vorher festgelegt werden.

Wenn Ihr euch eine normale Variable anlegen möchtet, dann klickt unter dem Punkt "Variablen" auf "Hinzufügen". Dabei geht dann ein neues Fenster auf, in dem Ihr den Namen und den Wert festlegen könnt.

var_add1

Variable anlegen

In dem rechten Feld "Wert" können nur Zahlenwerte eingegeben werden. Texteingaben werden sofort wieder entfernt (WICHTIG: Mit LUA kann hier auch Text gesetzt werden. Dies wird weiter unten im Artikel noch erläutert. Bei Blockszenen können ebenfalls nur Zahlenwerte gesetzt werden) Links kann der "Variablen Name" frei gewählt werden.


Bei den vordefinierten Variablen habt Ihr mehr Optionen, wenn Ihr auf den Button "Hinzufügen" klickt. Hierbei müssen alle möglichen Zustände beim Anlegen (Können natürlich im Nachhinein mit einem Klick auf den Bleistift noch geändert werden) definiert werden. Hier können auch Texte eingegeben werden.

var_add2

Variable anlegen II

"Standard"-Variablen setzen

Es gibt ein paar Variablen, welche wir und auch die globale Fibaro-Community in vielen Skripten immer wieder mal nutzen. Es wäre natürlich von Vorteil, wenn Ihr euch diese Variablen erstellt. Hierbei geht es vor allem um die Variable "PresentState", welche wir in folgenden Artikeln bereits nutzen:

Eine weitere Variable ist die "TimeOfDay"-Variable. Hier haben wir auch schon diverse Artikel, unter anderem zu der perfekten Lichtsteuerung geschrieben:

Wie geschrieben, werden die Variablen auch von der globalen Community genutzt. Ein Beispiel hierfür ist das "Very Smart Light"-Skript:

Variablen mit Blockszenen auslesen und verändern

Mit Blockszenen im Fibaro HomeCenter können die Variablen ausgelesen und geändert werden. Hier bitte beachten, dass bei normalen Variablen nur Zahlenwerte eingegeben werden können. Bei vordefinierten Variablen können alle angelegten Werte in einem Pulldown-Menü ausgewählt werden. Zum Abfragen des Value's muss in der Blockszene die entsprechende Variable ausgewählt werden oder mittels des Textfeldes vorgegeben werden:

var_block1

Wenn Ihr Variablen mit Blockszenen ändert wollt, dann müssen diese in der "DANN"-Bedingung gesetzt werden. Hier können wieder in den vordefinierten Variablen die Werte mittels PullDown-Menü ausgewählt werden, oder Ihr könnt dies in dem zugehörigen Textfeld selbstständig eingeben:

var_block2

Möglichkeiten mit LUA - Variablen auslesen

Mit LUA habt Ihr noch mehr Möglichkeiten mit den Variablen zu arbeiten. Wir gehen in diesem Teil davon aus, dass Ihr die bereits beschriebene Variable "PresentState" bereits angelegt habt. Solltet Ihr diese nicht angelegt haben, dann kann hier auch jeweils eine andere eingesetzt werden. Es gibt folgende drei LUA-Codes, um den Inhalt auszulesen:

Wir haben mal uns mal in einer LUA-Szene diese drei Möglichkeiten in einem Debug ausgegeben, um euch die Unterschiede zu erläutern:

var_debug

Debug

Wie Ihr an der Ausgabe erkennt, sind alle Rückgabewerte anders. Die Funktion fibaro:getGlobal setzt sich aus dem Value (Inhalt) der Variablen und dem Zeitpunkt der letzten Änderung in Unix-Zeit zusammen. Solltet Ihr mehr Informationen zu der Weiterverarbeitung von Unix-Zeiten in LUA benötigen, dann empfehlen wir euch die dazugehörige Befehlsübersicht mal anzuschauen. Um die Rückgabewerte mit LUA richtig zu verarbeiten, haben wir für euch mal ein kurzes Beispiel geschrieben:

In Zeile 1 schreiben wir die Werte der Rückgabe in die lokalen Variablen (lokale Variable gelten nur für die Zeit, in der die Szene läuft. Danach sind diese nicht mehr abrufbar) value und modificationTime. Danach lassen wir uns ins Zeile 2 den Status von value ausgeben und in Zeile 3 berechnen wir die Stunden seit der letzten Änderung der Variablen. Wenn wir eine Division durch den Wert 60 weglassen, dann würden die Minuten seit der letzten Änderung ausgegeben werden. Sollte gar keine Division durchgeführt werden, dann erhalten wir die Sekunden zurück. Wenn die Szene jetzt ausgeführt wird, dann wird folgender Debug ausgegeben:

var_debug_2

Debug der Szene

Solltet Ihr nur die Zeit der letzten Veränderung benötigen, dann könnt Ihr euch diese mit dem Befehl fibaro:getGlobalModificationTime aus der API holen. Hier bekommt Ihr dann nur die vergangenen Sekunden seit der letzten Änderung zurückgeliefert. Mit dem Befehl fibaro:getGlobalValue erhalten Ihr nur den Inhalt der Variablen zurück. Dies würde dann so aussehen:

Der Debug der Szene würde sich von dem oben geposteten Bild nicht unterscheiden, da grundsätzlich die gleichen Befehle ausgeführt werden. Es werden nur die value und die modificationTime getrennt ausgelesen.

Möglichkeiten mit LUA - Variablen ändern

Neben der Möglichkeit die Inhalte über Blockszenen und über das Steuerungs-Panel zu verändern, könnt Ihr den Inhalt natürlich auch über LUA verändern. Dies passiert mit folgendem Code:

Damit würdet Ihr beispielhaft den Wert der Variable 'PresentState' auf Away setzen. Vor dem Komma befindet sich also die betreffende Variable und nach dem Komma der gewünschte Wert. Wenn Ihr eine vordefinierte Variable nutzt, dann müsst Ihr darauf achten, dass der zu setzende Wert auch existiert. Ansonsten wird der erste mögliche Wert gesetzt. Dies könnte schnell zu Fehlern in Skripten führen, wenn der Wert Away gesetzt wird und Ihr aber eigentlich zu Hause seid.

Mit LUA Variablen anlegen

Es können mit LUA auch Variablen angelegt werden. Hier gibt es allerdings keine Funktion seitens Fibaro, sondern es muss die API des HomeCenters genutzt werden, um die Variable anzulegen. Wir haben euch dafür eine Funktion programmiert, welche Ihr in euren Szenen nutzen könnt und wir auch schon in diversen Skripten genutzt haben.

Wie bereits geschrieben, könnt Ihr mit diesem Skript eine Variable erstellen. Das Skript prüft ab, ob die definierte Variable bereits existiert und gibt das im Debug aus. Wenn diese nicht existiert, dann wird diese Variable angelegt. Es wird auch debuggt, ob das Anlegen erfolgreich durchgeführt wurde, oder ob ein Problem aufgetreten ist.

Der Name und Value können in den beiden lokalen Variablen festgelegt werden:


Alle Guides findet Ihr hier:

  1. Zeitgesteuerte Szenen
  2. Trigger einer Szene
  3. Trigger auswerten
  4. Globale Variablen (Dieser Artikel)

Wir hoffen, dass wir euch diesen Part des Fibaro HomeCenter mit diesem Skript ein wenig näher gebracht haben. Solltet Ihr noch Fragen haben, dann würden wir uns freuen, wenn Ihr uns einen Kommentar hinterlasst. :)

Diesen Blogpost hat geschrieben ...

boomx

15 Kommentare

  • Schöne Anleitung, Danke.
    Kann man über LUA auch neue globale Variablen erstellen, oder muss man diese immer zuerst im Panel manuell anlegen?

    • Hallo, das Anlegen der Varaible über das Skript funktioniert. Nur leider wird bei mir immer eine "normale" Variable angelegt. Ich hätte gerne eine "Predefined variables" angelegt.

      Kennt ihr eine Möglichkeit wie das möglich ist?

      Gruß

  • Hi boomx,

    kann man mit LUA auch System-Logmeldungen auslesen? Als Beispiel hätte ich da diese Meldung, auf die ich mit einer Szene gern reagieren würde:
    [00:15:52] ID 5: unlocked by user 1

    Mein Problem ist, dass es nie einen Statuswechsel auf Away geben soll, daher wird immer unlocked gesendet.
    Wie du dir bestimmt denken kannst, verwende ich ein RFID Keypad. Es soll nur die Taste Home benutzt werden. Gut wäre es. wenn man einfach irgendeinen Knopf auf dem Keypad drücken könnte (Away oder Home) und dann in jedem Fall eine Szene aktiviert wird, die den Alarm entschärft.

    Vielleicht hast du ja eine Idee, wie es gehen könnte.
    Danke im Voraus

    Grüße
    thedarknight

      • Hallo boomx,

        danke für die schnelle Rückmeldung. Ich habe gesehen, dass bei jedem einlesen eines Chips immer eine Meldung im Fibaro Home Center 2 Frontend eingetragen wird (egal, ob da nun ein Statuswechsel von Away->Home oder andersrum erfolgt ist). An diese Meldungen würde ich gerne per LUA Skript rankommen und diese auswerten. Sagst du mir, wie das geht?

        Danke dir

        Grüße
        thedarknight

  • Hi boomx,

    Kann man auch eine Szene mit einer Globalen Variable starten?
    so in etwa:
    --[[
    %% properties
    fibaro:getGlobal('Test') value
    %% globals
    --]]

    Da könnte man alle Module zentral im Panel pflegen und wenn man mal was tauscht dann nur die neue ID im V-Panel eintragen...

    Danke im Voraus für deine Hilfe!
    MFG

  • Danke dir für die schnelle Antwort :)

    Geht das zufällig auch mit der sceneActivation Funktion ?

    Wenn ich das so einstelle dann funktioniert das so leider nicht...

    Danke dir erneut im Voraus!

Gib deinen Senf dazu!

Cookie Consent mit Real Cookie Banner