Script Einstieg


Wenn Sie die eine Lightify-Lampe erfolgreich mit dem Web-UI ein und ausschalten können, gehen wir jetzt einen Minischritt weiter. Die Lightify-Lampen lassen sich ja nicht nur ein- und ausschalten, sondern auch -je nach Typ- dimmen und/oder können die Farbe wechseln.

Ziehen Sie für eine zweite Lampe nicht das 'button bool'-, sondern das 'button dimmer'-widget auf die Arbeitsfläche, und verbinden Sie die Object-ID unter 'Common' mit der Eigenschaft 'bri' der gewünschten Lampe, anstatt mit 'on' (Den Eintrag unter 'Visibility' werde ich weiter unten erklären).



Zum "Spielen" habe ich hier noch eine Uhr und den Yahoo Wetterdienst hinzugefügt. Beide müssen nicht mit Objekten in der Wohnung verknüpft werden: Die Uhr nützt einfach die Systemzeit des Computers als Quelle, der Wetterdienst einen Webservice von Yahoo. Sie müssen nur Ihren Standord in den Settings eingeben.

Wie auch immer: Dieses UI macht optisch nicht viel her, zugegeben. Die Demo-View von Vis, die wir schnöde links liegen liessen, ist viel ausgefeilter.

Dazu kommen wir später. Es ist sinnvoll, zunächst mal nur die gewünschten Objekte zu erstellen und zu konfigurieren, und das Layout erst am Ende zusammenzubauen. Sonst verheddert man sich im Designüberlegungen und Millimeterarbeiten und muss doch jedes Mal alles wieder über den Haufen werfen, wenn einem doch noch ein zusätzliches Element einfällt, dass dazu kommen muss.

Spielen Sie ein wenig mit den beiden Lampen. Beide lassen sich durch Antippen des Icons ein und ausschalten, das Dimmer-Icon erlaubt aber auch Wischbewegungen, um die Helligkeit zu regulieren. Farbänderungen bleiben im Moment noch aussen vor.

Lampen erkennen, erstes Scripten

Nun ist dieses kleine Beispiel ganz nett, man kann durch Mausklick oder Fingertipps die Lampen einschalten, ausschalten und dimmen. Allerdings gibt es noch mehrere Haken. Der wichtigste: Wenn jemand eine Lampe am "echten" Lichtschalter ausknipst, dann ist sie aus Sicht von Lightify einfach "weg". Leider kriegt das unser UI nicht mit. Hier scheinen die Lampen immer noch bestens zu funktionieren. Bloss tut sich nichts, wenn man darauf klickt.

Um ein weiteres Feature von ioBroker zu nutzen, werden wir jetzt ein kleines Script erstellen.

Gehen Sie wieder zur Admin-Oberfläche (http://ihr_server:8081). Falls dort kein Reiter 'Scripts' zu sehen ist, klicken Sie auf das Bleistift-Symbol rechts oben und klicken in der Dropdown-Box 'Show' auf 'Scripts'. Dann sollte die Admin-Oberfläche ungefähr so aussehen (nur noch ohne das Script):



Klicken Sie in der Werkzeugleiste links oben auf das + Symbol, um eine neue Gruppe zu erstellen, die ich hier 'Lichter' genannt habe. Markieren Sie diese Gruppe und klicken Sie dann auf das Dokument-Symbol links neben dem +, also 'New Script'. Erstellen Sie ein neues Script, das ich hier 'LoadLampState' genannt habe. Der Inhalt des Scripts ist trivial:

Als erstes definieren wir Variablen, die die ObjectID jeder interessierenden Lampe enthalten. Dadurch werden spätere Änderungen und Erweiterungen einfacher.  An die ObjectID kommen Sie, indem Sie im Script Editor rechts oben auf "insert ID" klicken und das Objekt dann aus Ihrer Liste auswählen.

Dann erzeugen wir mit 'createState' State-Variablen für jede der Lampen. Diese können wir später von Vis aus
abfragen.

In der Funktion 'loadData' lesen wir den momentanen Zustand der mit dem Parameter 'lamp' übergebenen Lampe. Die Objekt-Eigenschaft 'reachable' sollte zeigen, ob die gewünschte Lampe überhaupt erreichbar ist (oder vielleicht abgeschraubt oder mit dem Lichtschalter ausgeschaltet). Wir setzen unseren 'State' auf undefined, wenn die Lampe nicht erreichbar ist, ansonsten auf true, wenn sie an ist und auf false, wenn sie aus ist.

Danach kommt die Funktion "reload()", welche in der zweitletzten Zeile erstmals aufgerufen wird. Diese Funktion ruft für jede Lampe 'loadData' auf.

Die letzte Zeile ruft reload() alle 10 Sekunden auf.

Visualisierung des Scripts

Nun bauen wir das eben erstellte Script in unsere View ein. Rufen Sie wieder das Vis-Editor-Fenster auf und klicken Sie auf die Lampe. Öffnen Sie jetzt die Rubrik 'Visibility' und tragen Sie unter ObjectID unseren vorhin erstellten "state" ein (Hangeln Sie sich dazu in der Element-Liste ausgehend von der Gruppe 'javascript' bis zum gewünschten state-object). Darunter, unter 'Condition' wählen Sie !=, und unter 'value for condition' schreiben Sie 'null'.

Der Effekt ist nun: Wenn die Lampe nicht erreichbar ist, dann wird sie im UI gar nicht sichtbar sein. Probieren Sie es aus!

Probleme

Wenn Sie ein wenig damit gespielt haben, werden Sie feststellen, dass es oft sehr lang dauert, bis unser UI mitkriegt, dass eine Lampe nicht mehr erreichbar ist. Das scheint systembedingt zu sein. Zwar können Sie in den Einstellungen des lightify-Adapters ein kürzeres Polling-Intervall einstellen, aber das hilft nur bedingt.

Wie auch immer, es ging hier ja nur darum, einen ersten Einstieg ins Scripten zu finden. (Offengestanden hötten wir unter 'Visibility' auch einfach direkt den Status 'reachable' der Lampe abfragen können, aber das wäre viel weniger interessant gewesen, nicht wahr?).

Tiefer gehende Informationen

Eine gute Einführung zu ioBroker Scripten finden Sie hier.

Allgemeinere Informationen und Grundlagenwissen liefert der riesige Fundus an Literatur zu NodeJS (ioBroker ist eine NodeJS Anwendung)

Kommentare

Beliebte Posts aus diesem Blog

von Schedules und Triggern

myStrom WiFi Button an ioBroker anbinden

Einfache Script-Beispiele