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.