Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Auf Änderung in Enumeration reagieren

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    231

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[gelöst] Auf Änderung in Enumeration reagieren

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 161 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    diwoma
    schrieb am zuletzt editiert von diwoma
    #1

    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

    ioBroker in LX-Container in Proxmox
    Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

    1 Antwort Letzte Antwort
    0
    • D Offline
      D Offline
      diwoma
      schrieb am zuletzt editiert von
      #2

      @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

      ioBroker in LX-Container in Proxmox
      Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

      paul53P 1 Antwort Letzte Antwort
      0
      • D diwoma

        @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?

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #3

        @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.members
        

        EDIT: 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.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        D 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @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.members
          

          EDIT: 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.

          D Offline
          D Offline
          diwoma
          schrieb am zuletzt editiert von
          #4

          @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?

          -- diwoma

          ioBroker in LX-Container in Proxmox
          Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

          paul53P 1 Antwort Letzte Antwort
          0
          • D diwoma

            @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?

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @diwoma sagte: Wo bekomme ich den handler her?

            Siehe unsubscribe. Das ist eine Variable, die on() zugewiesen wird.

            var handler = on(id, callback);
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              diwoma
              schrieb am zuletzt editiert von
              #6

              @paul53
              Danke

              -- diwoma

              ioBroker in LX-Container in Proxmox
              Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              340

              Online

              32.7k

              Benutzer

              82.5k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe