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. Dynamische Event-Registrierung

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Dynamische Event-Registrierung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 1.2k Aufrufe
  • Ä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.
  • T Offline
    T Offline
    Tucca
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Versuch mal:

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

      …

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        Tucca
        schrieb am zuletzt editiert von
        #3

        Leider immer noch die gleiche Warn-Meldung im Log :(

        1 Antwort Letzte Antwort
        0
        • apollon77A Offline
          apollon77A Offline
          apollon77
          schrieb am zuletzt editiert von
          #4

          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.

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            Tucca
            schrieb am zuletzt editiert von
            #5

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

            386

            Online

            32.6k

            Benutzer

            82.2k

            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