NEWS
[gelöst] Geräte-Name ermitteln mit JS-Funktion
-
@paul53
Es muss aber eine Funktion mit Ergebnis sein. Sonst ist die hier relativ sinnbefreit -
@codierknecht sagte: Es muss aber eine Funktion mit Ergebnis sein.
Du hast natürlich recht. Habe oben korrigiert.
-
und die Variable "id" beinhaltete dann das Ergebnis ?
Ach so ne das geht ja nicht, weiß er ja garnicht woraus er das nehmen soll ...
dann so ?
EDIT: da kommt dann das raus:
javascript.0 2022-11-14 12:23:17.361 info script.js.common.testen.eigene.JS_Funktion_mit_ergebnis: undefined
-
@cinimod sagte: weiß er ja garnicht woraus er das nehmen soll ...
Habe ich doch geschrieben:
An die Funktion muss bei Aufruf die Datenpunkt-ID übergeben werden.
-
Sorry, hatte ich nicht gleich verstanden. Jetzt klappt es wie gewünscht.
Danke euch beiden. -
@paul53 @Cinimod
Wenn's dann funktioniert, könnte man die Funktion noch etwas verschlanken:id = id.split('.',3).join('.'); // die ersten 3 Teil-Strings if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name; // Name aus DP lesen
Da wird das Pferd von der anderen Seite aufgezäumt und man spart sich 2 Durchläufe
OK, ich weiß ... Erbsenzählerei
-
@cinimod
Zum rumprobieren kann man auch das hier gut brauchen: https://playcode.io/javascript
Da fehlen dann zwar die ioBroker-spezifischen Dinge, aber für ein paar Gehversuche mit JS kann man das ganz gut einsetzen.
-
@codierknecht sagte: die Funktion noch etwas verschlanken:
Das wird mit 3 nicht funktionieren, da noch ein Ordner "devices" dazwischen hängt:
hmip.0.devices.3014F711A0001118A9925C9B -
@paul53
Jetzt wirst Du aber kleinlich ... dann sind's halt 4Das wird jeder vielleicht ein bisschen anders sehen, aber ich persönlich finde die so deutlich besser lesbar.
Und wenn man die Funktion dann noch umbenennt in z.B.getDeviceNameFromID
kann man auch im Blockly direkt erkennen, was die denn so macht und auch die CleanCode-Fraktion ist zufrieden -
@codierknecht
Beide Versionen sind an den HmIP-Adapter angepasste Versionen.
Eine Version, die mit allen Adaptern (auch Zigbee) funktioniert, würde so aussehen:id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name; id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name; id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name;
-
@paul53 sagte in [gelöst] Geräte-Name ermitteln mit JS-Funktion:
Beide Versionen sind an den HmIP-Adapter angepasste Versionen.
Jepp - war ja hier auch die Anforderung.
Eine Version, die mit allen Adaptern (auch Zigbee) funktioniert, würde so aussehen:
Auch dazu:
Ob die Roundtrips dann (spürbare) negative Auswirkungen auf das Laufzeitverhalten haben, kannst Du besser beurteilen als ich.