NEWS
JS: wie Datenpunkte Unterstrukturen lesen?
-
Hi,
ich möchte bei all meinen Shelly Geräten die IDs auslesen (shelly.0.info.FOLDER.id), so dass ich hinterher die Datenpunkte shelly.0.abc.id, shelly.0.def.id usw auslesen kann.
Wie mach ich das am Besten in Javascript?
Hintergrund: ich will ein Script nicht immer dann anpassen, wenn ein neues Gerät dazu kommt - da es sich in die gleiche Ordnerstruktur einsortiert, will ich es dann direkt auslesen können.
-
@maddm sagte: Datenpunkte shelly.0.abc.id, shelly.0.def.id usw
Im Trigger mit RegExp.
on(/^shelly\.0\..+\.id$/, function(dp) { log(dp.id); });Oder mit dem $Selector. Dann muss aber nach Hinzufügen eines Gerätes das Skript oder die JS-Instanz neu gestartet werden.
-
@paul53
Danke für die Antwort, aber ich verstehe sie (noch) nicht...
Du hast geschrieben "im Trigger" - ich möchte das Auslesen aber nicht machen, wenn irgendwas triggert, sondern jede Stunde.
Sprich: geh jede Stunde durch alle Devices durch, gibt die Datenpunkte .id und .power aus.Output wäre dazu:
shelly.0.abc.id = 15, shelly.0.abc.power = 100
shelly.0.efg.id = 16, shelly.0.efg.power = 120
shelly.0.hij.id = 17, shelly.0.hij.power = 170 -
@maddm sagte: jede Stunde durch alle Devices durch, gibt die Datenpunkte .id und .power aus.
Das geht mittels $Selector.
const ids = $('shelly.0.*.id'); schedule('0 * * * *', function() { ids.each(function(id) { const idPower = id.replace('.id', '.power'); log(id + ' = ' + getState(id).val + ', ' + idPower + ' = ' + getState(idPower).val); }); }); -
@paul53 Am besten den Selektor mit in den Callback, dann werden auch neue Geräte gefunden
-
@haus-automatisierung: den Selektor mit in den Callback, dann werden auch neue Geräte gefunden
Sicher?
Das sähe dann so aus:
schedule('0 * * * *', function() { $('shelly.0.*.id').each(function(id) { const idPower = id.replace('.id', '.power'); log(id + ' = ' + getState(id).val + ', ' + idPower + ' = ' + getState(idPower).val); }); }); -
@paul53 Klar dann wird der Selektor ja jedes mal neu ausgewertet
-
@haus-automatisierung sagte: Klar dann wird der Selektor ja jedes mal neu ausgewertet
Nach meiner Erfahrung holt sich der Selektor die IDs aus dem Puffer der JS-Instanz. Ist der Puffer zu jeder Zeit aktuell?
-
@paul53 Ja der hat ja Subscriptions auf alle States und Objekte um das aktuell zu halten
-
@haus-automatisierung sagte: Ja der hat ja Subscriptions auf alle States und Objekte
Gerade getestet: Funktioniert.
EDIT: Früher hat es nicht funktioniert. Es musste erst die JS-Instanz neu gestartet werden, um neue Objekte / Zustände einzulesen, die nicht durch den Javascript-Adapter selbst erzeugt wurden.