ioBroker: Name und Raum eines Geräts mit Blockly auslesen

Damit du den Namen und zugeordneten Raum eines Datenpunkts in Blockly auslesen kannst, benötigst du ein kleines Script als Funktion, das diese Attribute ausliest.

Blockly-Script

Namen eines Objekts auslesen

Erstelle zuerst eine „JS-Funktion mit Ergebnis“ aus dem Bereich „Funktionen“. Über das blaue Zahnrad kannst du eine Variable einfügen. Benenne diese „ObjectID“ und die Funktion als solche „Name“:

Blockly-Beispiel: Name und Raum von Datenpunkten mit Blockly auslesen

Über die 3 Punkte „…“ öffnest du den Funktions-Editor. In diesen fügst du folgenden Code ein:

let name = getObject(ObjectID).common.name;
return name;

Anschließend speicherst du die Funktion und schließt den Editor. Dann kannst du dir einen „debug“-Block aus dem Bereich „System“ unter die Funktion ziehen. An den Eingang des Blocks setzt du den Funktionsblock „Name mit ObjectID“. Als Wert nimsmt du aus dem Bereich „System“ den Block „Objekt ID“ mit einem Datenpunkt nach Wahl:

Blockly-Beispiel: Name und Raum von Objekten mit Blockly auslesen

Wenn du das Script nun startest, erhältst du im Debug-Log den Namen des Objekts.

Raum eines Objekts auslesen

Die Vorgehensweise ist gleich mit „Namen eines Objekts auslesen“, jedoch mit folgendem Code:

let room = getObject(ObjectID, 'rooms').enumNames[0];
return room.de;

Hinweis: je nach Version deines Javascript-Adapters musst du folgenden Code verwenden:

let room = getObject(ObjectID, 'rooms').enumNames[0];
return room;

Benenne die Funktion am besten „Raum“ und lasse dir das Ergebnis wieder mit einem „debug“-Block ausgeben:

Blockly-Beispiel: Name und Raum von Objekten mit Blockly auslesen

Einsatz in einem Trigger-Block

Wenn du innerhalb eines Trigger-Blocks den Namen einer Objekt-ID auslesen möchtest, setzt du an den Eingang des des Funktionsblock einfach einen „Objekt ID“-Block aus dem Bereich „Trigger“:

Blockly-Beispiel: Name und Raum von Objekten mit Blockly auslesen

Du kannst den Funktionsblock nach Belieben in anderen Listen oder Schleifen verwenden oder einem Text- oder SendTo-Block etc hinzufügen:

Blockly-Beispiel: Name und Raum von Objekten mit Blockly auslesen

ioBroker: Mit Blockly und dem ID-Selektor auf systemweite Änderungen reagieren

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.

12 Kommentare

Kommentieren

Hallo,
danke für die Anleitung. Leider komme ich damit noch nicht weiter.
Wenn ich mir mit dem Javascript „Name“ den Namen der Objectid wiedergeben lasse, steht da ja nur der kryptische Name des Objektes, ist es auch möglich mir den Namen des dazugehörigen devices ausgeben zu lassen?

danke

Hallo Markus,
hast Du versucht den „kryptischen Namen“ im ioB ganz generell unter Objekte umzubennen? Du gehst in den richtigen Adapter, suchst Dir die passende Zeile aus und drückst ganz hinten auf den Stift.

Hi, dies ist mein erster Einstieg in JS und demenstprechend scheitere ich. Mit „.de“ bei der Raum-Funktion bekomme ich Fehler. Ohne „.de“ gibt er mir die Liste mit den Raumbezeichnungen jeweils in mehreren Klammern verschachtelt in mehreren Sprachen aus. Auffällig: Das ist nur bei den standardmäßig beim Import von der CCU übernommenen Räume der Fall. Bei selbst angelegten Räumen fehlen ihm die anderen Sprachsätze/Übersetzungen und er meldet ’null‘. Gibt es da einen Tipp?

Beitrag vom 22.05.2022 19:13 Uhr hat sich erledigt. Klappt, sobald ich die von der CCU importierten Räume einmal lösche, eigene anlege und vor allem den JS-Adapter einmal durchstarte! Das ist häufig ja schon die Lösung.

Hallo und vielen Dank für diesen Beitrag.
Ich versuche dies aktuell zu nutzen, um den Onlinestatus einzelner Shellys zu überwachen. Der Name des Datenpunktes der überwacht wird ist aber schlicht nur „online“.
Gibt es eine Möglichkeit direkt den Namen des zugehörigen Devices zu ermitteln? Dieser wäre wesentlich aussagekräftiger.
Danke

Danke. Was aber steht in der Variable „ObjectID“, wenn ich einen „Falls geändert“ Block mit ZWEI Object-ID-Datenpunkten habe (man kann ja auch dabei die Zahl der „Elemente“ erhöhen). Ich habe dann doch weiterhin nur einen „ObjectID“

Hallo Max,
ein sehr geklungener Blog mit vielen nützlichen Beispielen für den Einstieg in iOBroker. Vielen Dank dafür.
Ich habe gerade deiner Fensterfunktion umgesetzt. Bei den Räumen hatte ich das Problem, dass bei rooms.de die bereits definierte Räume (die bereits mehrsprechig in JS implementiert sind) mit ausgegeben werden, aber nicht definierte Räume fehlen. Umgekehrt mit rooms. Ich habe daher deine Funktion ein wenig modifiziert und fange die Meldung der nicht definierten Räume ab.
So funktioniert es dann sehr gut:

let room = getObject(ObjectID, ‚rooms‘).enumNames[0];
if (room.de ==undefined)
{
return room;
}
else{
return room.de;
};

Viele Grüße

Thomas

Schreibe einen Kommentar