Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Auf Änderung in Enumeration reagieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Auf Änderung in Enumeration reagieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      diwoma last edited by diwoma

      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.

      1 Reply Last reply Reply Quote 0
      • D
        diwoma last edited by

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

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @diwoma last edited by 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 1 Reply Last reply Reply Quote 0
          • D
            diwoma @paul53 last edited by

            @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 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @diwoma last edited by

              @diwoma sagte: Wo bekomme ich den handler her?

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

              var handler = on(id, callback);
              
              1 Reply Last reply Reply Quote 0
              • D
                diwoma last edited by

                @paul53
                Danke

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                811
                Online

                31.8k
                Users

                80.1k
                Topics

                1.3m
                Posts

                2
                6
                158
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo