ioBroker: Automatische Listen einfach mit Blockly erstellen

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder …

Verschiedene Varianten

Ich habe festgestellt, dass mit dem ID-Selektor auch Werte, in denen der angegebene Selektor (z.B. „*battery“) vorkommt, ausgegeben werden (z.B. „batteryTemperature“, „batteryLevel“ , …). Das kannst du mit einer Aufzählung (sog. „Functions“) umgehen.

Wenn du also das gleiche Fehlverhalten feststellst und es die Anzahl deiner Objekte zulässt, dass diese in einer Aufzählung zusammengefasst werden können, solltest du Variante 2 verwenden.

Für eine schnelle und einfache Übersicht über einen bestimmten State, kannst du Variante 1 nutzen.

Variante 1: Automatische Listen ohne Aufzählung (functions)

Blockly-Script erstellen

Zuerst benötigst du eine Variable, der du eine leere Liste zuweist. In diesem Beispiel nennst du die Variable „automatische Liste“:

Blockly-Beispiele: Automatische Listen einfach mit Blockly erstellen

Als nächstes fügst du an diesen Block einen Schleifen-Block „für jeden Wert aus Liste“ an:

Blockly-Beispiele: Automatische Listen einfach mit Blockly erstellen

Aus dem System-Bereich holst du dir den „IDs vom Selektor“-Block und setzt ihn an den grünen Schleifen-Block an:

Blockly-Beispiele: Automatische Listen einfach mit Blockly erstellen

In diesem Beispiel lässt du dir alle Sensoren, die einen „Battery“-Datenpunkt haben, als automatische Liste ausgeben. Zusätzlich holst du dir dazu den Wert des Datenpunkts, also den Batteriestand. Du musst den ID-Selektor also wie folgt einstellen:

channel[state.id=*battery]
Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Wie genau der „IDs vom Selektor“-Block funktioniert, erfährst du in diesem Artikel.

Dann steckst du einen „in der Liste setze für“-Block aus dem Bereich „Liste“ in den grünen Schleifen-Block. Als Einstellung benötigst du „füge als Letzte“. Als Listen-Variable nimmst du wieder „automatische Liste“:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Damit die Liste gefüllt wird, benötigst du aus dem Bereich „Liste“ noch einen „erzeuge Liste mit“-Block, den du neben das „ein“ ansetzt. Über das blaue Zahnrad kannst du die Anzahl der Werte definieren. Für das Beispiel reichen 2 Eingänge:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Damit du den Kanalnamen des Sensors in die Liste bekommst, ziehst du dir aus dem Bereich „Variablen“ das „i“ an den ersten Eingang. Für den Wert bzw. Zustand des Sensors benötigst du den Block „Wert von Objekt ID <Text>“ aus dem Bereich „System“:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Nun ziehst du erneut die Variable „i“ in das <Text>-Feld des „Wert von Objekt ID“-Blocks. Abschließend kannst du dir über eine Debug-Block die Liste ausgeben lassen oder diese weiterverarbeiten, in deinen Datenpunkt schreiben, sortieren lassen, …:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Wie du nach den Werten in dieser Liste sortieren kannst, zeige ich dir in diesem Artikel.


Variante 2: Automatische Listen mit Aufzählung (functions)

Sensoren einer Aufzählung zuweisen

Zuerst musst du jedem „battery-„State der Geräte, die du überwachen willst, eine „Funktion“ zuweisen. Erstelle dazu unter „Aufzählungen“ eine neue Funktion:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Danach wechselst du in „Objekte“ und wählst der Reihe nach die Batterie-Geräte aus. Dem State, der den Batterie überwacht („battery“, „percent“, …), weist du die neue Funktion „Batterie“ zu:

Mit Blockly und dem ID-Selektor kannst ganz einfach automatische Listen erstellen. Zum Beispiel kannst du dir damit ohne zusätzliche Einstellungen alle Devices zusammen mit dem Batteriestand anzeigen kassen. Oder eine Liste aller Kontaktsensoren und deren Status ausgeben. Oder oder ...

Blockly-Script erstellen

Das dazugehörige Blockly baust du wie in Variante 1 auf, jedoch setzt du den ID-Selektor auf:

channel[state.id=*](functions=batterie)

Dadurch werden ausschließlich die States innerhalb dieser Aufzählung abgefragt. Dieser Aufzählung kannst du jederzeit weitere Datenpunkte/Geräte hinzufügen, ohne das Script anpassen zu müssen.

War dieser Beitrag hilfreich?
Hat dir der Beitrag geholfen?
Die mit Sternchen (*) gekennzeichneten Links sind sogenannte Affiliate-Links. Wenn du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekomme ich von dem betreffenden Online-Shop oder Anbieter eine Provision. Für dich verändert sich der Preis nicht.

11 Kommentare

Kommentieren

Hallo,

die Erklärung ist nachvollziehbar. Nur leider kann ich die Systematik nicht nachbauen. Ich finde ich das Element „anfügen zu Liste“ nicht… muss ich weitere Einstellungen vornehmen, dass ich hierauf zugreifen kann?

Hallo,

vielen Dank für dein Tutorial. ich benutze deine Lösung um meine Meross-Steckdosen in einer Liste zu speichern. Diese schalte ich dann ganz einfach über eine Funktion. Und auch nur dann, wenn die Steckdosen online sind und sich der neue Schaltzustand vom aktuellen unterscheidet. Das funktioniert sehr gut. Nur leider werden nur 8 von meinen 9 Steckdosen in die Liste eingetragen. Die fehlende Steckdose unterscheidet sich leider in keinster Weise von den anderen. Die ID ist auch exakt gleich lang und muss somit durch den Filter „channel[state.id=meross.0*.0]“ eigentlich eingetragen werden.

Hast du evtl einen brandheißen Tip für mich?

Vielen Dank
Gruß
Heiko

Aus der Ferne nicht, du könntest aber mit Aufzählungen/Functions arbeiten, um präzise die Geräte zu steuern, denen du die Function zugeordnet hast. Viele Grüße

Sorry. Deine Antwort habe ich erst jetzt gesehen.

Also im Objektbaum sind bei der „Steckdose 8“ alle vier Datenpunkte vorhanden – aber Blockly „sieht“ nur den „.online“ Datenpunkt – die anderen drei eben nicht. Somit findet die Funktion mit dem Filter „*.0“ diese nicht.

Ok. Jede Steckdose hat 4 Datenpunkte:
– 0 = Aus / Ein
– IP
– dnd
– online

Ich habe soeben herausgefunden, dass Blockly bei einer Steckdose nur den „online“ Datenpunkt lesen kann. Die anderen 3 findet er nicht. Ich hab aber keine Ahnung woran das liegen mag. Habe auch die eine Steckdose mal komplett gelöscht und neu eingelesen…

Schreibe einen Kommentar