Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Wie warn-Meldungen bei nicht gesetztem Selector vermeiden

    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

    Wie warn-Meldungen bei nicht gesetztem Selector vermeiden

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

      @AndyUM61:

      Hallo,

      ich benutze zum zählen der eingeschalteten Lichter das hier schon mal veröffentlichte "LichterAn"-Script.

      Leider habe ich bei jedem Script-Aufruf Warnungen der Art:

      javascript.0	2016-09-24 20:46:09.870	warn	javascript.0 State "hm-rpc.2.CUX4000008.6.LEVEL" not found
      javascript.0	2016-09-24 20:46:09.870	warn	javascript.0 State "hm-rpc.2.CUX4000008.3.LEVEL" not found
      javascript.0	2016-09-24 20:46:09.869	warn	javascript.0 State "hm-rpc.2.CUX4000008.1.LEVEL" not found
      

      Die ID's und auch die entsprechenden States, also z.B. ".LEVEL", sind vorhanden, können aber irgendwie nicht gefunden werden.

      Wie kann ich die Warn-Meldungen vermeiden? `
      Kann es sein, dass für diese States noch nie ein Wert geliefert wurde?

      1 Reply Last reply Reply Quote 0
      • A
        AndyUM61 last edited by

        Ja, kann sein.

        Die Actoren werden derzeit nicht benutzt.

        Aber irgend wie müsste man das doch auch abfangen können.

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

          @AndyUM61:

          Die ID's und auch die entsprechenden States, also z.B. ".LEVEL", sind vorhanden, `
          Du meinst, dass die Datenpunktobjekte vorhanden sind. Die States (im Sinne von ioBroker: Zustände) sind noch nicht vorhanden, wenn diese Warnung kommt.
          @AndyUM61:

          Wie kann ich die Warn-Meldungen vermeiden? `
          Im Reiter "Zustände" einen Wert (0) eintragen.

          1 Reply Last reply Reply Quote 0
          • A
            AndyUM61 last edited by

            @paul53:

            Im Reiter "Zustände" einen Wert (0) eintragen. `

            Ähm, na ja, da soll ich also alle meine Actoren nach Nullen durchsuchen??

            Das kann ja nicht wirklich die Lösung sein!?

            Ich muss das doch Scrip-Technisch irgend wie abfangen können;)?

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

              @AndyUM61:

              Ich muss das doch Scrip-Technisch irgend wie abfangen können;)? `
              Ja, indem das Script so ergänzt wird, dass wenn getState(id) nicht existiert, mit setState(id, 0) der State erzeugt wird. Beispiel:

              if(!getState(id)) setState(id, 0);
              else {
                var x = getState(id).val;
              }
              

              Dann kommt die Warnung nur noch einmal.

              1 Reply Last reply Reply Quote 0
              • A
                AndyUM61 last edited by

                @paul53:

                if(!getState(id)) setState(id, 0);
                else {
                  var x = getState(id).val;
                }
                ```` `  
                

                Dann könnte ich ja auch gleich die Schleife mit

                if (!getState(id)) return;
                

                beenden.

                Aber leider funktioniert ja genau das - aus welchem Grund auch immer - eben NICHT.

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

                  @AndyUM61:

                  Dann könnte ich ja auch gleich die Schleife mit

                  if (!getState(id)) return;
                  

                  beenden. `
                  Eben nicht, da die Abfrage if(!getState(id)) die Warnung erzeugt, solange der State nicht gesetzt ist.

                  Bei meinem Vorschlag passiert dies nur noch genau einmal, weil bei Nichtexistenz der State erzeugt wird.

                  1 Reply Last reply Reply Quote 0
                  • A
                    AndyUM61 last edited by

                    Die warn-Meldung kommt trotzdem bei jedem Scriptaufruf.

                    Hier mal das komplette Script, vielleicht ist ja da trotzdem noch ein anderer Fehler.

                    createState('zählenLichter.anzahlLichter', 0);    // wenn benötigt: Anzahl der vorhandenen Lichter
                    createState('zählenLichter.anzahlLichterAn', 0);  // Anzahl der Lichter, die an sind als Variable unter Javascript.0 anlegen
                    
                    var cacheSelectorState  = $('channel[state.id=*.STATE](functions=Licht)');
                    var cacheSelectorDimmer = $('channel[state.id=*.LEVEL](functions=Licht)');
                    
                    function countLamps(obj) {
                        if (!obj) return;
                         // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                        var anzahlLichterAn = 0;
                        var anzahlLichter = 0;
                    
                        //log('New state of ' + obj.id + ': ' + obj.newState.val);    // Info im Log, welcher Zustand sich geändert hat
                    
                        cacheSelectorState.each(function (id, i) {                       // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                            if(!getState(id)) {setState(id, 0);} else {
                            var status = getState(id).val;                      // Zustand *.STATE abfragen (jedes Element)
                            }   
                            if (status === true) {++anzahlLichterAn}                // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            // log("Licht Nr. " + i + ": " + id + ": " + status);    // gibt alle Elemente *.STATE im Gewerk Licht mit dem aktuelle Status im Log aus
                            if (status != "undefined") {++anzahlLichter;}            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                        });
                        cacheSelectorDimmer.each(function (id, i) {  // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                            if(!getState(id)) {setState(id, 0);} else {
                            var status = getState(id).val;                          // Zustand *.LEVEL abfragen (jedes Element)
                            }
                            if (parseFloat(status) > 0) {++anzahlLichterAn}                // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            // log("Licht Nr. " + i + ": " + id + ": " + status);    // gibt alle Elemente *.STATE im Gewerk Licht mit dem aktuelle Status im Log aus
                            if (status != "undefined") {++anzahlLichter;}            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                        });
                    
                        // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                    
                        //log("Anzahl Lichter: " + anzahlLichter + " # davon an: " + anzahlLichterAn);
                    
                        // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                        setState("zählenLichter.anzahlLichter", anzahlLichter);        // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                        setState("zählenLichter.anzahlLichterAn", anzahlLichterAn);    // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                    }
                    
                    cacheSelectorState.on(function(obj) {    // bei Zustandänderung *. STATE im Gewerk Licht
                       countLamps(obj);
                    });
                    cacheSelectorDimmer.on(function(obj) {    // bei Zustandänderung *. LEVEL im Gewerk Licht
                       countLamps(obj);
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      Man sollte boolsche Werte nicht mit 0 sondern mit false initialisieren:

                          cacheSelectorState.each(function (id, i) {                 // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                              if(!getState(id)) setState(id, false);
                              else {
                              	var status = getState(id).val;                      // Zustand *.STATE abfragen (jedes Element)
                              	if (status === true) ++anzahlLichterAn;                 // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                              	// log("Licht Nr. " + i + ": " + id + ": " + status);   // gibt alle Elemente *.STATE im Gewerk Licht mit dem aktuelle Status im Log aus
                              	++anzahlLichter;                                    // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                      	    }
                          });
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • D
                        dering last edited by

                        Das sollte die Lösung dafür sein oder?

                        http://forum.iobroker.net/viewtopic.php … 37#p130837

                        nur der vollständigkeithalber.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        794
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        4
                        11
                        1736
                        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