Blockly – Mit dem ID-Selektor auf Veränderungen reagieren

In diesem Artikel zeige ich Dir, wie Du mittels dem ID-Selektor Block auf Veränderungen reagieren kannst.

Mit dem Block IDs vom Selektor kannst Du eine Liste von Datenpunkten erzeugen, die mit der übergebenen Bedingung übereinstimmen. Als Beispiel wollen wir hier die eingeschalteten Leuchtmittel in ioBroker bei einer Änderung in einem separaten Datenpunkt zählen. Als Grundlage dienen uns hier die Aufzählen.

Im ersten Schritt wechseln wir dazu in den Bereich Aufzählungen und legen uns eine neue Aufzählung Licht an. Wenn Du hier bereits eine entsprechende Aufzählung angelegt hast, kannst Du den Schritt natürlich überspringen.

Als Bezeichnung habe ich hier Licht gewählt. Die Idee wird dann wie folgt generiert:

enum.functions.licht

Im nächsten Schritt habe ich dann die Leuchtmittel der Aufzählung Licht zugeordnet. Dazu einfach den entsprechenden Datenpunkt der Funktion Licht zuordnen.

Im nächsten Schritt habe ich dann noch einen eigenen Datenpunkt angelegt, in dem die Anzahl von eingeschalteten Leuchtmitteln gespeichert wird.

Nach dem wir jetzt die Vorbereitungen abgeschlossen haben, können wir nun mit der Implementierung des Scripts beginnen. Dazu wechselst Du auf den Bereich „Skripte“ und erstellst ein neues Skript. Als Art verwenden wir hier Blockly.

Als Name habe ich dann lights_on gewählt.

Im nächsten Schritt kannst Du das folgende Script herunterladen und über die Import-Funktion den Inhalt der Text-Datei in das Blockly-Script importieren.

Blockly - IDs vom Selektor Beispiel (127 Downloads)

Nach dem Import siehst Du nun die Funktion countLightsOn sowie den Trigger auf den IDs vom Selektor Block.

Im Trigger definieren wir über den IDs vom Selektor Block den Auslöser des Triggers. Bei einer Veränderung der Datenpunkte mit der Funktion light soll der Trigger ausgelöst werden. Durch die Eingrenzung state[id=*] werden alle Werte als Veränderung getriggert. Um hier einzelne Werte zu berücksichtigen muss der Stern dann mit dem entsprechenden Wert ersetzt werden. Bei einer Veränderung wird dann die Funktion countLightsOn ausgeführt.

In der Funktion wird zunächst die Zählervariable numberOfLightsOn auf 0 gesetzt. Im nächsten Schritt durchlaufen wir alle Datenpunkte, die unserer Auswahl des Selektor-Blocks entsprechen. In der Variable listWert steht während der Iteration (Durchlauf) die jeweilige ID des Datenpunkts. Mit dieser ID kann so einfach über den Block Wert vom Objekt ID der aktuelle Wert abgefragt werden. Wenn der Wert wahr entspricht erhöhen wir die Variable numerOfLightsOn um 1. Am Ende der Funktion wird dann der Status-Datenpunkt mit der Anzahl eingeschalteter Leuchtmitteln aus der Variable numberOfLightsOn aktualisiert.

Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂

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.