Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Dynamische Event-Registrierung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Dynamische Event-Registrierung

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

      Hallo,

      ich möchte für alle Lichter bei einer Statusänderung einen Wert setzen.

      log("Rooms" + JSON.stringify(getObject("enum.functions.${funcLight}")));
      
      var lightsOn = [];
      
      function processObject (v, i, ar)
      {
          var state = getState(v);
      
          if (state.val === "null" || state.val === null)
          {
              setState(v, 0);
              log(v + ", State: false gesetzt");
              log(v + ", State: " + getState(v).val);
          }
          else
          {
              log(v + ", State: " + state.val);
      
              if (state.val || state.val === 1)
              {
                  lightsOn.push(v);
              }
          }
      
          on({id: v, change: 'ne', function(obj) {
          	// ToDo
          }});
      
      }
      
      var objects = getObject("enum.functions.${funcLight}").common.members;
      objects.forEach(processObject);
      

      Bei "on({id: v, change'ne', function(obj){…})" kommt im Log allerdings folgende Meldung:

      javascript.0 2017-09-02 21:21:55.356 warn State "undefined" not found

      Woran liegt das ? Ich will den Status ja noch nicht auslesen. Der Status ist aber eigentlich bekannt.

      Oder gibt es eine andere Möglichkeit ein "Change-Event" des Objekt zu nutzen?

      Vielen Dank

      Tucca

      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Versuch mal:

        on({id: v, change: 'ne'}, function(obj) {
               // ToDo
            });
        

        …

        1 Reply Last reply Reply Quote 0
        • T
          Tucca last edited by

          Leider immer noch die gleiche Warn-Meldung im Log 😞

          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            Gib doch mal die Parameter, vor alles v aus in deiner Schleife. Bzw wie sieht denn das Array was du da durchgehst genau aus? Gibs mal aus.

            1 Reply Last reply Reply Quote 0
            • T
              Tucca last edited by

              Ich habe das Skript noch weiter angepasst.

              Jetzt läuft es 🙂

              Für Interessierte:

              ! Das Skript speichert in der Variablen "LichterAn" ein Array mit den IDs der Lichter. Wird ein Licht ausgeschaltet, wird die ID aus der Liste entfernt.
              ! Mit "javascript.0.LichterAn.length" kann man die Anzahl der Lichter abfragen.
              ! "enum.functions.${funcLight}" ersetzen durch andere Werte natürlich möglich 😉
              ! ````
              // Skript zum prüfen ob Lichter an sind und einen EventHandler bei allen Lichtern registrieren.
              // Bei Änderung eines Lichts, wird die Variable 'javascript.0.LichterAn' geändert
              ! log("Rooms" + JSON.stringify(getObject("enum.functions.${funcLight}")));
              ! createState('LichterAn', {
              name: 'Lichter an',
              desc: 'Lichter die an sind'
              });
              ! var lightsOn = [];
              ! function filterValues(value)
              {
              return value != this;
              }
              ! function processObject (v, i, ar)
              {
              var state = getState(v);

              if (state.val === "null" || state.val === null)
              {
                  setState(v, 0);
                  log(v + ", State: false gesetzt");
                  log(v + ", State: " + getState(v).val);
              }
              else
              {
                  log(v + ", State: " + state.val);
              
                  if (state.val || state.val === 1)
                  {
                      lightsOn.push(v);
                  }
              }
              
              setState('javascript.0.LichterAn', lightsOn);
              
              on({id: v, change: 'ne'}, function(obj) {
                  var status = getState(v).val;
              
                  var objList = getState('javascript.0.LichterAn', lightsOn);
              
                  if (objList.val === null)
                  {
                      objList.val = [];
                  }
              
                  if (status)
                  {
                      log(v + ": an");
                      objList.val.push(v);
              
                      setState('javascript.0.LichterAn', objList);
                  }
                  else
                  {
                      log (v + ": aus");
              
                      var list2 = objList.val.filter(filterValues, v);
              
                      objList.val = list2;
              
                      if (list2.length === 0)
                      {
                          objList.val = [];
                      }
              
                      setState('javascript.0.LichterAn', objList);
                  }
              });
              

              ! }
              ! var objects = getObject("enum.functions.${funcLight}").common.members;
              objects.forEach(processObject);

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

              Support us

              ioBroker
              Community Adapters
              Donate

              845
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              2
              5
              983
              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