Heute will ich Dir zeigen, wie Du ein Virtuell Device mit Deinem Fibaro Home Center brauen kannst am Beispiel mit einer smarten DoorBird Türklingel aus der Modellreihe D2101V. Diese Türklingel haben wir Dir bereits in einem vergangenen Tutorial genauer vorgestellt. Hier soll es nun um das Virtuell Device, also ein Plugin, gehen, mit dem man eigene Inhalte darstellen kann. Dazu werde ich Dir Schritt für Schritt zeigen, wie Du dieses umsetzen kannst. Gerade für Anfänger ist dieses Tutorial sehr gut geeignet, da dieses Plugin sehr einfach und leicht zu erstellen ist.
Erste Schritte für die Grundstruktur
Zunächst finden wir im Browser in unserem Home Center noch die 5 angelegten Szenen vor, welche wir im Rahmen des HTTP-Request-Videos angelegt haben. Bisher können diese außer eine Debug-Ausgabe nicht weiteres umsetzen. Wir wollen nun einen Device für eine der Szenen bauen. Beispielsweise für die Szene “Bewegung erkannt.” Dafür klicken wir auf “Lösche oder Füge Gerät hinzu” und wählen danach das Hinzufügen eines virtuellen Moduls aus.
Bisher ist das Modul noch nicht mit Inhalt gefüllt. Dies kannst Du nun ändern, indem Du eine “Reihe” hinzufügst. Dafür wählen wir das “Label-Element” aus. Es gibt zwar noch andere Auswahlmöglichkeiten, doch wir wollen zunächst einmal nur einen Text einfügen. Das “Label” wird danach weiter unten eingefügt. Wir fügen hier ingesamt drei dieser Label hinzu: eines für eine erkannte Bewegung, eines für ein Klingeln und das letzte für eine Personenerkennung (wer zuletzt zur Tür gekommen ist). Speicher nun alles und gib jedem einzelnen Modul (Label) einen passenden Namen.
Danach ist eine Grundstruktur für die virtuellen Module geschaffen.
Variablen erstellen
Bisher haben wir durch die Szenen nur eine Debug-Ausgabe geschaffen. Als nächstes wollen wir alle Daten speichern. Also die Zeit der letzten erkannten Bewegung durch die DoorBird, wann das letzte Klingeln stattgefunden hat und wer zuletzt nach Hause gekommen ist. Dafür legen wir drei globale Variablen über “Steuerungen”- “Variablensteuerungen” an. Über “Hinzufügen” legen wir eine neue Variable an. Diesen drei Variablen geben wir jeweils einen einheitlichen Namen, in unserem Fall: “doorbird_motion” für die letzte Bewegung, “doorbird_ring” für das letzte Klingeln und “doorbird_last” für die letzte Person, die nach Hause gekommen ist.
Szenen weiter anpassen
Als nächstes müssen wir in unsere einzelnen Szenen die erste Logik hinzufügen. Dafür öffnen wir die entsprechenden drei Szenen, welche bisher jeweils nur eine Debug-Ausgabe vorweisen. Nun wollen wir die Zeit speichern, wann die einzelne Szene aufgerufen wurde. Dafür gibt es durch LUA eine Funktion. Diese nennt sich “os.time()”. Dieses “timestamp-Format” ist allerdings noch nicht gut lesbar, daher wollen wir dieses gleich noch umrechnen.
Für das Speichern der aktuellen Zeit setzen wir eine lokale Variable, die nur in der vorliegenden Szene ihre Gültigkeit hat.
local timestamp = os.time();
Zuvor hatten wir uns eine globale Variable für die erkannte Bewegung angelegt. Diese wollen wir nun ansprechen mit. Dafür setzen wir zum einen die Variable selbst (doorbird_motion) ein sowie den passenden Wert dazu.
fibaro:setGlobal('doorbird_motion',timestamp);
Nun kannst Du den bereits erstellten Code noch kommentieren mit “–” und Deinem Text. Hierbei zum Beispiel “– Setze globale Variable auf aktuelle Zeit”. Ein solches Kommentieren ist sehr wichtig, damit Du auch noch zukünftig weißt, was Du mit dem erstellten Code machen möchtest!
Nun alles speichern. Das gleiche muss bei der Szene für die Klingel umgesetzt werden, genauso wie bei der Szene, wann jemand nach Hause kommt. Allerdings muss dabei die Variable geändert werden. Genauso muss die Variable auf einen festen Wert gesetzt werden. Dabei wird der zeitliche Aspekt ausgelassen:
fibaro:setGlobal('Variable','Wert')
Diesen Vorgang kann man nun für weitere Hausbesitzer umsetzen. Je nachdem wieviele Benutzer man verwaltet.
Am Ende nach dem Speichern sind alle Szenen angepasst.
Das Virtuell Device – weitere Schritte
Zurück in unserem Virtuell Device können wir nun sehen, was wir bereits für Labels erstellt haben und können auch weitere Buttons hinzufügen. Bei jedem einzelnen Label sieht man den zugewiesenen Namen sowie die dazugehörige ID, die wir später benötigen, um das entsprechende Label ansprechen zu können. Gleichzeitig kann man noch weitere Einstellungen vornehmen: Zum Beispiel kannst Du einen Haken bei “Primär” setzen. Dadurch würde dieses Label auf der Seite im Home Center angezeigt werden. Dabei kann man nur ein einziges Label auf “Primär” setzen, nur dieses wird dann auf der Startseite dargestellt. Die restlichen Labels/Buttons werden über Mouseover angezeigt.
Im Code-Feld das Device ansprechen
Scrollst Du innerhalb Deines virtuelen Moduls noch weiter nach unten, wird Dir ein Code-Feld angezeigt (Primäre Schleife). Mit diesem kannst Du Dinge ansprechen. Dafür benötigst Du zunächst immer die ID des entsprechenden Device.
Ebenfalls bietet es sich hier an eine lokale Variable anzulegen:
local thisdevice = fibaro:getSelfId();
Um im weiteren Schritt die Buttons beschreiben zu können, sprechen wir diese mit folgender Funktion an:
fibaro:call(thisdevice,'setProperty','ui.Label1.value','test1');
Hierfür geben wir erst wieder das passende Device an, danach das Feld und welches genau bearbeitet werden soll, also die ID des Buttons und den Wert. Genauso am Ende den Text angeben, der angezeigt werden soll, zum Beispiel “test1”. Wenn Du anschließend speicherst, wird Dir diese Änderung im virtuellen Modul angezeigt.
Die einzelnen Labels ansprechen
Auch wenn Du nun weißt, wie Du das Label ansprechen kannst, ist dies nicht der eigentliche Schritt den wir umsetzen wollen. Wir möchten stattdessen die Zeit ausgeben, wann die letzte Bewegung, das letzte Klingeln war und welche Person zuletzt gekommen ist. Dafür benötigen wir die Variablen, die wir zuvor aneglegt haben und in unseren Szenen beschreiben. Diese sprechen wir jeweil an mit:
local deinevariable = fibaro:GetGlobal('deinparameter');
Hierfür setzt Du alle drei Variablen um, hast am Ende also drei Funktionen untereinander stehen. Es könnte dann wie folgt aussehen:
Zeitangabe für die letzte Bewegung
Um nun die Zeit festzustellen, wann die letzte Bewegung von der DoorBird erkannt wurde, benötigen wir folgende Funktionen: einmal den “timestamp” und eine neue Variable für die Zeit.
local timestamp = os.time(); local motion_sec = timestamp-last_motion;
In diesem Fall wäre “last_motion” die Variable für unsere letzte Bewegung.
Mit folgender Funktion kannst Du den bisher erstellten Code ausführen, indem Du eine Debug-Ausgabe machst:
fibaro:debug(motion_sec);
Danach speichern und die Szene starten. Die Zeit wird dann berechnet, wann die letzte Bewegung stattgefunden hat. Dabei wird die Zeit wie vorgegeben in Sekunden berechnet.
Als nächstes kann man noch eien Wenn-Dann-Bedingung innerhalb der Szene erstellen, um die Zeit genauer zu definieren. Also nicht nur in Sekunden zu nennen. Wir können also beispielsweise sagen, “wenn” die Zeitangabe der Bewegung kleiner oder gleich 60 Sekunden ist, “dann” soll eine neue Variable gesetzt werden. Und zwar die Variable “jetzt”. “Wenn” dies aber nicht der Fall ist, “dann” soll ein normales Datum und die Uhrzeit angegeben werden. Diese Bedingungen erstellt man mit:
if(motion_sec <= 60) then motion_last_display = 'jetzt'; else motion_last_display = os.date('%c',last_motion); end
Tipp
Sobald die Wenn-Dann-Bedingung eingetragen und die entsprechenden Werte/Variablen ergänzt wurden, kannst Du eine neue Debug-Ausgabe starten. Dafür erst den neuen Wert in diese Ausgabe setzen. Bei uns wäre dies dann: “fibaro:debug(motion_last_display);”. Anschließend müsste entsprechend nach dem Skript ein Datum sowie die dazugehörige Zeitangabe passend zur letzten erkannten Bewegung angezeigt werden.
Du kannst natürlich das Format nach eigenem Belieben noch ändern. Welche Werte Du dafür benötigst und ändern musst, findest Du auf der Seite, die oben in der Infobox verlinkt ist.
Am Ende auch die passende Variable für die Bewegung (hier: “motion_last_display) in die Funktion “fibaro:call” zum Schluss des Skripts setzen und alles speichern. Danach wird der Wert in der Ansicht Deines Virtuell Device dauerhaft angezeigt und laufend von selbst aktualisiert.
Zeitangabe für das letzte Benutzen der Klingel
Die zuvor erwähnten Schritte setzen wir nun auch für die Klingel um, sodass man eine Zeitangabe dafür erhält, wann diese das letzte Mal betätigt wurde. Dafür einfach den bisher erstellten Code kopieren und erneut einfügen. Jetzt müssen natürlich nur alle Werte und Variablen passend angepasst werden. Genauso muss am Ende des Skipts auch das Label angepasst werden. Zum Schluss natürlich wieder speichern. Wenn Du nun klingelst, wird Dir in Deinem Virtuell Device auch die richtige Zeitangabe angezeigt.
Dritte Variable einrichten – letzter Benutzer
Tipp
Eine hilfreiche Seite für wichtige und umfassende LUA-Funktionen mit Fibaro findest Du hier!
Dein Virtuell Device ist nun fertig gestellt. Wenn Du auf “Module” klickst, wird Dir zunächst nur die letzte Bewegung (als Beispiel) angezeigt. Um die weiteren Angaben einsehen zu können, muss man auf das “Plus-Symbol” klicken. Nur der Wert, welcher zuvor als “primär” festgelegt wurde, wird hier angezeigt. Wenn Du alle auf einmal sehen möchtest, müsstest Du drei verschiedene virtuelle Module anlegen.