Blockly – Grundlagen – Funktionen

In dieser Artikelserie möchte ich das Thema Blockly in ioBroker näher erklären. Im Artikel zeige ich, welchen Vorteil Funktionen bieten.

1. Einführung

2. Funktionen

2.1 Einfache Funktion

2.2 Übergabewerte an die Funktion

2.3 Rückgabewert

2.4 Eingebetter JavaScript-Code in einer Blockly Funktion

 



1. Einführung

Funktionen sind ein elementarer Grundbaustein in JavaScript.  Mittels Funktionen können mehrere Anweisungen in Reihe ausgeführt werden. Die Funktion wird dazu im Script definiert und kann dann an verschiedenen Stellen aufgerufen werden.

 

2. Funktionen

In den folgenden Kapiteln werden wir eine einfache Funktion zum Ein- und Ausschalten von Leuchtmitteln erstellen. Diese Funktion wird im Verlauf noch um einen Parameter zur Vereinfachung des Scripts erweitert.

 

2.1 Einfache Funktionen

Um eine Funktion zu erstellen öffnen wir zunächst die Liste der verfügbaren Blöcke und klicken auf den Bereich „Funktionen“. Hier können wir nun den Block „etwas tun“ auf das Script ziehen. Der Block besitzt eine Schaltfläche (Zahnrad) für die Konfiguration des Blocks sowie eine Beschreibungs-Schaltfläche (Fragezeichen).

Bevor wir mit den einzelnen Anweisungen der Funktion beginnen, geben wir der Funktion einen sprechenden Namen. Für den Beispiel habe ich den Namen „FunktionLampenAn“ gewählt. Der Namen kann mit einem Klick auf den Text „etwas tun“ eingegeben werden.

Über die Konfigurations-Schaltfläche können wir Übergabeparameter hinzufügen. Dieses Thema werden wir im nächsten Abschnitt genauer betrachten.

 

Zusätzlich zur Konfiguration kann der Funktion auch eine Dokumentation hinzugefügt werden. Hier kann der Sinn und Zweck der Funktion dokumentiert werden.

 

Die Funktion können wir nun z.B. in einem Trigger aufrufen. Dazu klicken wir wieder auf die Liste der verfügbaren Blöcke und wählen erneut den Bereich der Funktionen aus. Im Bereich Funktionen sehen wir nun ganz unten unsere definierten Funktionen. Diese können wir nun wieder per Drag&Drop auf das Script übernehmen.

 

Für das Beispiel habe ich nun den Funktionsaufruf in einen Triggert integriert. Bei einer Veränderung des definierten Datenpunktes wird die Funktion aufgerufen.

 

 

 

 

2.2 Übergabewerte an die Funktion

In diesem Kapitel wollen wir eine neue Funktion erstellen, welche einen Parameter zur Steuerung von mehreren Lampen entgegen nimmt. Dafür erstellen wir uns zunächst eine neue Funktion.

 

Über die Konfiguration der Funktion können wir nun die Parameter hinzufügen. Für unser Beispiel benötigen wir einen Parameter. Um den Parameter hinzuzufügen klicken wir auf die Variable links und ziehen diese in die Liste der Parameter auf der rechten Seite:

 

Im nächsten Schritt passen wir noch den Namen des Parameters an. Ich habe den Parameter „newState“ genannt, da er den neuen Status der Lampe entgegennehmen soll.

 

Im nächsten Schritt fügen wir den Block zum Schalten der Lampe (HomeMatic Steckdosen-Zwischenstecker) ein und definieren den zu schaltenden Datenpunkt.

 

Nun müssen wir die Variable der Funktion an den Block „aktualisieren“ übergeben. Dazu klappen wir die Liste der Blöcke auf und öffnen den Bereich „Variablen“. Hier sind nun alle angelegten Variablen vorhanden. Wir können dann die Variable in den Block „aktualisieren“ ziehen.

 

Nun ist die Funktion soweit fertig. Wir können hier jetzt noch weitere Leuchtmittel oder Aktoren hinzufügen. Die Funktion nimmt jetzt den neuen Wert entgegen und gibt diesen an den Block „aktualisieren“ weiter.

 

Nun können wir die Funktion aufrufen. Dazu klappen wir die Liste der Blöcke auf und öffnen den Bereich „Funktionen“. Hier ist nun unsere neue Funktion mit dem Parameter „newState“ zu finden. Die Funktion können wir nun in den Ausführungsblock des Triggers ziehen. Nun müssen wir nur noch den Wert des Triggers an den Parameter „newState“ anhängen.

 

 

 

2.3 Rückgabewert

In diesem Kapitel erstellen wir uns nun eine Funktion, welche einen Rückgabewert besitzt. Als Beispiel wollen wir eine einfache Funktion erstellen, mit der wir die eingeschalteten Lampen zählen wollen. Dazu öffnen wir zunächst wieder die Liste der Blöcke und wählen den Bereich „Funktionen“. In diesem Bereich gibt es den Block „etwas tun“ mit dem Zusatz „gib zurück“. Diesen Block ziehen wir uns auf das Script.

 

Im nächsten Schritt habe ich den Namen der Funktion in „FunktionAnzahlLampenAn“ umbenannt.

 

Nun fügen wir aus dem Bereich „Variablen“ den Block „setze .. auf“ ein, mit der wir einer Variable einen Wert zuweißen können.  Dazu klicken wir in dem Block auf „etwas“ und wählen in der Liste der Aktionen die Aktion „Variable erstellen“. Im nächsten Schritt geben wir für die Variable einen Namen ein. Ich habe hier den Namen „Anzahl“ vergeben, da diese Variable die Anzahl eingeschalteter Lichter zählen soll. Zu Beginn der Funktion wird die Variable mit Null Initialisiert. Den numerischen Wert können wir aus dem Bereich „Mathematik“ auswählen und an den Block „setze Anzahl auf“ anhängen und mit 0 initialisieren. Zusätzlich müssen wir die erstellte Variable, die nun auch im Bereich „Variablen“ sichtbar ist, noch als Rückgabewert an die Funktion anhängen. Dazu wird die Variable einfach an „gib zurück“ angehängt.

 

Die meiste Arbeit haben wir nun gemacht. Jetzt müssen wir nur noch die entsprechende Logik zur Ermittlung des State verwenden um die Anzahl eingeschalteter Lichter zu ermitteln. Dazu wird einfach unterhalb des Blocks „setze Anzahl auf“ ein Falls-Block gesetzt, mit dem nun der Status der Lampe abgefragt und im Falle von „wahr“ die Variable „Anzahl“ mit dem Block „erhöhe“ um eins erhöht wird.

 

 



 

2.4 Eingebetter JavaScript-Code in einer Blockly Funktion

Falls der gewünschte Algorithmus mit Blockly nicht umgesetzt werden kann, ist es mit einer JavaScript-Funktion auch möglich direkt JavaScript-Code in einer Blockly-Funkion zu kapseln. Dazu wählen wir zunächst im Bereich „Funktionen“ den Block „Javascript-Funktion“ aus und ziehen diesen auf unser Script.

 

Der Funktions-Block besitzt eine eigene Konfiguration, mit der Parameter hinzugefügt oder entfernt werden können. Zudem kann über das Fragezeichen eine Dokumentation hinterlegt werden.

 

Bevor wir den JavaScript-Code einfügen ändern wir zunächst den Namen des Funktions-Blocks. Dazu einfach auf den Text „Javascript-Funktion“ klicken und hier einen eigenen Funktionsnamen eingeben. Ich habe die Funktion „TestFunktionA“ genannt. Um nun den Code einfügen zu können, klicken wir neben dem Namen der Funktion auf die drei Punkte. Die Schaltfläche ist leider sehr schlecht zu erkennen.

 

Nun öffnen sich ein Code-Editor, in den wir unseren JavaScript-Code einfügen können. Für das Beispiel habe ich hier nun das Schalten eines Aktors hinzufügt.

 

Wenn wir nun die Funktion aufrufen möchten, klicken wir einfach wieder auf den Bereich „Funktionen“ und können dort unsere Funktion „TestFunktionA“ in unser Blockly-Script ziehen.

 

Für das Beispiel habe ich hier nun den Funktionsaufruf in einen Trigger gepackt.

 

Damit lässt sich so auch in Blockly direkt JavaScript-Code ausführen. Im Beispiel habe ich das ganz einfach dargestellt, im JavaScript Funktionscode könnte aber zum Beispiel eine Berechnung stattfinden, die sich so in Blockly nicht oder nur sehr aufwändig abbilden lässt.

 

Ich hoffe Dir gefällt der Artikel 🙂 Ich freue mich über Deinen Kommentar!

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere