ioBrokerioBroker Blockly

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.

5 Gedanken zu „Blockly – Grundlagen – Funktionen

  • Matthias

    Tolle Tutorial,
    Ich suche eine Beschreibung wie sich eingebetter Javascript Code mit Rückgabe nutzen lässt. Denn der entstande Block sieht leider anders aus der ohne und ich kann ihn in meinen Ablauf nicht andocken.

    Antwort
  • Thomas Berkel

    Hallo,
    vielen Dank für das tolle Tutorial. Blockly wurde wohl zwischenzeitlich weiter entwickelt und so sieht bei mir der Block für den Funktionsaufruf einer Funktion mit Rückgabewert anders aus, als der Funktionsaufruf einer Funktion ohne Rückgabewert. Der Block kann nur nach links angedockt werden (wie zB eine Variable). Wie also kann ich eine Funktion mit Rückgabewert mit einem solchen Block aufrufen?

    Vielen Dank & Gruß
    Thomas

    Antwort
  • HarryW

    Hi,

    hatte das Problem auch mit dem nur links Andocken sobald eine Return Wert definiert wird. Diesen habe ich in einen Textblock (erstelle Text aus) gehängt dort wird der korrekt bearbeitet/berechnet!

    Evtl. nicht die Programmers Wunschlösung aber so geht es halt!
    Vg
    HarryW

    Antwort
  • Sven Flaßhaar

    Hallo Mathias,
    im Laufe der Zeit sind es immer mehr Schalter, Sensoren ….Datenpunkte geworden.
    Kannst du mir ein Skript aufzeigen, mit dem ich einen Datenpunkt dahingehend überprüfe, ob Er schon einmal verwendet wurde und in welchem Skript.
    Dies entweder direkt in einem Dibug,…. sicher wäre auch ne Liste möglich, was das Ganze wohl aufblähen würde? Eine Ausgabe der Blockly’s, in dem der Datenpunkt verwendet wird, wäre echt cool.
    Mir geht es um eine sich negativ auswirkende Doppelnutzung auszuschließen.

    VG Sven

    Antwort
    • Wolfgang

      gib es schon.
      in der Script-Übersicht oben auf die Lupe klicken und dann den Datenpunkt eingeben.

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.