Das erwartet dich in diesem Artikel
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“:
Ü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:
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:
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“:
Du kannst den Funktionsblock nach Belieben in anderen Listen oder Schleifen verwenden oder einem Text- oder SendTo-Block etc hinzufügen:
ioBroker: Mit Blockly und dem ID-Selektor auf systemweite Änderungen reagieren
13 Kommentare
Kommentieren[…] Wert auf 3. An den ersten Eingang des neuen „erzeuge Liste mit“-Blocks fügst du die Javascript-Funktion „Name“ mit „i“, an den zweiten Eingang die Javascript-Funktion „Raum“ mit […]
[…] Wie du den Namen und Raum eines Sensors auslesen kannst, erkläre ich dir in diesem Artikel. […]
[…] Der Block „Kanalname“ enthält den Namen der Instanz. Im Bereich „Trigger“ ziehst du dir den Block „Objekt ID“ in den „erstelle Text aus“ und stellst ihn auf „Kanalname“. Alternativ dazu erfährst du hier, wie du den Namen und den Raum eines Geräts auslesen kannst. […]
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
Hallo Jan, ich stehe gerade vor dem gleichen Problem, hast du inzwischen eine Lösung?
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“
Die ID, die den Trigger ausgelöst hat. Die andere ID müsstest du dann anfragen lassen.
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
Hallo und erst einmal DANKE für den Blog. Leider gibt es bei blockly nicht den Funktionsblock „Name mit ObjectID“, sondern nur „Name“. Hier komme ich nicht weiter.