NEWS
[gelöst] Auf Änderung in Enumeration reagieren
-
Hi Leute,
Wie kann ich darauf reagieren, wenn sich eine Enumeration-Liste ändert?
Ich habe ein allgemeines Skript, dass bei Änderungen in einem der Devices in einer Enumeration eine "spezielle" Logmeldung schreibt.
Aber wenn ich ein Device zu der Liste hinzufüge, muss ich das Skript immer neu starten$('state[id=*](functions=log)').on(function(dp) { log("$" + dp.name + (dp.newState.val ? " eingeschaltet" : " ausgeschaltet")); });Soweit funktioniert das auch, aber der Trigger registriert die beim Start vorhanden Devices in der Liste.
Ich hätte nun gerne, dass ich nur die Function dem Device zuordne und das automatisch erkannt wird. Sozusagen ein äusserer Trigger, der bei Änderungen den inneren Trigger neu aufsetzt. -
@diwoma
Ich möchte da noch einmal nachhaken, sollte meine Anfrage unverständlich sein, und die Fragen präzisieren.
Wie erkenne ich im JavaScript, dass sich eine Enumerationsliste geändert hat? Das also Einträge hinzugekommen sind oder weggenommen worden sind?Und daraus eine weitere Frage:
Kann ich den Trigger aus dem ersten Post irgendwie benennen um ihn in JS vor dem neu Aufsetzen löschen?
Oder kann ich das gesamte Skript in JS restarten? -
@diwoma
Ich möchte da noch einmal nachhaken, sollte meine Anfrage unverständlich sein, und die Fragen präzisieren.
Wie erkenne ich im JavaScript, dass sich eine Enumerationsliste geändert hat? Das also Einträge hinzugekommen sind oder weggenommen worden sind?Und daraus eine weitere Frage:
Kann ich den Trigger aus dem ersten Post irgendwie benennen um ihn in JS vor dem neu Aufsetzen löschen?
Oder kann ich das gesamte Skript in JS restarten?@diwoma sagte: Wie erkenne ich im JavaScript, dass sich eine Enumerationsliste geändert hat?
Da nur auf Datenpunkte getriggert werden kann, hilft höchstens eine zyklische Abfrage von
getObject('enum.functions.log').common.membersEDIT: Gerade getestet und funktioniert:
const select = $('*(functions=Beleuchtung)'); const anzahl = getObject('enum.functions.Beleuchtung').common.members.length; schedule('*/5 * * * * *', function() { let members = getObject('enum.functions.Beleuchtung').common.members; if(members.length != anzahl) { startScript(scriptName); } }); select.each(function(id, i) { log(id); });@diwoma sagte in Auf Änderung in Enumeration reagieren:
Kann ich den Trigger aus dem ersten Post irgendwie benennen um ihn in JS vor dem neu Aufsetzen löschen?
Trigger lassen sich mit unsubscribe(handler) löschen. Ein Neustart des Skriptes erledigt es auch.
-
@diwoma sagte: Wie erkenne ich im JavaScript, dass sich eine Enumerationsliste geändert hat?
Da nur auf Datenpunkte getriggert werden kann, hilft höchstens eine zyklische Abfrage von
getObject('enum.functions.log').common.membersEDIT: Gerade getestet und funktioniert:
const select = $('*(functions=Beleuchtung)'); const anzahl = getObject('enum.functions.Beleuchtung').common.members.length; schedule('*/5 * * * * *', function() { let members = getObject('enum.functions.Beleuchtung').common.members; if(members.length != anzahl) { startScript(scriptName); } }); select.each(function(id, i) { log(id); });@diwoma sagte in Auf Änderung in Enumeration reagieren:
Kann ich den Trigger aus dem ersten Post irgendwie benennen um ihn in JS vor dem neu Aufsetzen löschen?
Trigger lassen sich mit unsubscribe(handler) löschen. Ein Neustart des Skriptes erledigt es auch.
@paul53
Vielen Dank für die ausführliche Antwort.
Schade, dass der Enumerationhandler kein Event wirft, wenn sich eine Liste ändert.
Aber die Idee, die Anzahl in einem Loop zu vergleichen, ist eine schöne Idee.Danke dafür.
Eine Frage hätte ich noch:
@paul53 said in Auf Änderung in Enumeration reagieren:
Trigger lassen sich mit unsubscribe(handler) löschen. Ein Neustart des Skriptes erledigt es auch.
Wo bekomme ich den handler her?
-
@paul53
Vielen Dank für die ausführliche Antwort.
Schade, dass der Enumerationhandler kein Event wirft, wenn sich eine Liste ändert.
Aber die Idee, die Anzahl in einem Loop zu vergleichen, ist eine schöne Idee.Danke dafür.
Eine Frage hätte ich noch:
@paul53 said in Auf Änderung in Enumeration reagieren:
Trigger lassen sich mit unsubscribe(handler) löschen. Ein Neustart des Skriptes erledigt es auch.
Wo bekomme ich den handler her?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden