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] Aufzählungen auswerten - Hilfe bei Fehler in Script

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[gelöst] Aufzählungen auswerten - Hilfe bei Fehler in Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptmonitoring
4 Beiträge 2 Kommentatoren 577 Aufrufe 1 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.
  • N Offline
    N Offline
    n3ucr0n
    schrieb am zuletzt editiert von n3ucr0n
    #1

    Hallo Community,

    ich habe ein Script welches mit verschiedene Aufzählungen auswerten soll.
    Da ist nicht wirklich Ahnung von JS habe, musste ich mich an eine Anleitung aus dem Internet halten.
    Ich habe dabei diese gewählt:

    https://www.smarthome-tricks.de/software-iobroker/iobroker-aufzaehlungen-fuer-das-zaehlen-von-offenen-fenstern-oder-tueren-verwenden/

    Ich habe nun versucht dieses Script an meine Bedürfnisse anzupassen.

    function countOpenWindowsDoors()
    {
        var openWindows = 0;
        var openDoors = 0;
        var openGaragen = 0;
        var LampenAn = 0;
          
        // Fenster
        var windows = getObject("enum.functions.fenster").common.members;
        for(let i = 0; i < windows.length; i++) {
            var Status = getState(windows[i]).val;
            if ( Status ) { 
                openWindows = openWindows + 1;
            }
        }
        
        // Türen
        var doors = getObject("enum.functions.tueren").common.members;
        for(let i = 0; i < doors.length; i++) {
            var Status = getState(doors[i]).val;
            if ( Status ) { 
                openDoors = openDoors + 1;
            }
        } 
        
        // Garagen
        var Garagen = getObject("enum.functions.garagen").common.members;
        for(let i = 0; i < Garagen.length; i++) {
            var Status = getState(Garagen[i]).val;
            if ( Status ) { 
                openGaragen = openGaragen + 1;
            }
        } 
          
        // Lampen
        var Lampen = getObject("enum.functions.light").common.members;
        for(let i = 0; i < Lampen.length; i++) {
            var Status = getState(Lampen[i]).val;
            if ( Status ) { 
                LampenAn = LampenAn + 1;
            }
        }   
    
        var openWindowsText = "Alle geschlossen";
        var openDoorText = "Alle geschlossen";
        var openGaragenText = "Alle geschlossen";
        var LampenAnText = "Alle ausgeschaltet"
    
        if ( openWindows > 0 ) {
            openWindowsText = openWindows + " geöffnet"; 
        }
        
        if ( openDoors > 0 ) {
            openDoorText = openDoors + " geöffnet"; 
        }        
       
        if ( openGaragen > 0 ) {
            openGaragenText = openGaragen + " geöffnet"; 
        }    
       
        if ( LampenAn > 0 ) {
            LampenAnText = LampenAn + " eingeschaltet"; 
        }    
    
        setState('0_userdata.0.Aufzählungen.AnzahlFensterOffenText', openWindowsText );
        setState('0_userdata.0.Aufzählungen.AnzahlTürenOffenText', openDoorText );    
        setState('0_userdata.0.Aufzählungen.AnzahlGaragenOffenText', openGaragenText );       
        setState('0_userdata.0.Aufzählungen.AnzahlLichterAnText', LampenAnText );         
        setState('0_userdata.0.Aufzählungen.AnzahlFensterOffen', openWindows );
        setState('0_userdata.0.Aufzählungen.AnzahlTürenOffen', openDoors );    
        setState('0_userdata.0.Aufzählungen.AnzahlGaragenOffen', openGaragen );    
        setState('0_userdata.0.Aufzählungen.AnzahlLichterAn', LampenAn );  
    }
    
    $('state(functions=Licht)').on(function(obj) {
        countOpenWindowsDoors();
    });
    
    $('state(functions=Garagen)').on(function(obj) {
        countOpenWindowsDoors();
    });
    
    $('state(functions=Fenster)').on(function(obj) {
        countOpenWindowsDoors();
    });
    
    $('state(functions=Tueren)').on(function(obj) {
        countOpenWindowsDoors();
    });
    
    countOpenWindowsDoors();
    

    Die benötigten Aufzählungen sind erstellt:

    Unbenannt.PNG

    Ebenso wie die Datenpunkte:

    Unbenannt1.PNG

    Das Skript habe ich unter "Global" gespeichert:

    Unbenannt2.PNG

    Starte ich das Script, werden die Datenpunkte aktualisiert und passen auch zum aktuellen Status.
    Allerdings reagiert das Script nicht auf Änderungen bei den Elementen die zu den Aufzählungen hinzugefügt wurden.
    Ich habe vor kurzem meinen ioBroker komplett neu aufgesetzt, davor hatte ich das Script auch laufen und es hat funktioniert.

    Kann mir jemand sagen, wo der Fehler in meinem Script liegt?

    Node.js: v12.18.3
    NPM 6.14.6
    Admin 4.1.6
    Script Engine 4.6.22

    Danke für Eure Hilfe!

    paul53P 1 Antwort Letzte Antwort
    0
    • N n3ucr0n

      Hallo Community,

      ich habe ein Script welches mit verschiedene Aufzählungen auswerten soll.
      Da ist nicht wirklich Ahnung von JS habe, musste ich mich an eine Anleitung aus dem Internet halten.
      Ich habe dabei diese gewählt:

      https://www.smarthome-tricks.de/software-iobroker/iobroker-aufzaehlungen-fuer-das-zaehlen-von-offenen-fenstern-oder-tueren-verwenden/

      Ich habe nun versucht dieses Script an meine Bedürfnisse anzupassen.

      function countOpenWindowsDoors()
      {
          var openWindows = 0;
          var openDoors = 0;
          var openGaragen = 0;
          var LampenAn = 0;
            
          // Fenster
          var windows = getObject("enum.functions.fenster").common.members;
          for(let i = 0; i < windows.length; i++) {
              var Status = getState(windows[i]).val;
              if ( Status ) { 
                  openWindows = openWindows + 1;
              }
          }
          
          // Türen
          var doors = getObject("enum.functions.tueren").common.members;
          for(let i = 0; i < doors.length; i++) {
              var Status = getState(doors[i]).val;
              if ( Status ) { 
                  openDoors = openDoors + 1;
              }
          } 
          
          // Garagen
          var Garagen = getObject("enum.functions.garagen").common.members;
          for(let i = 0; i < Garagen.length; i++) {
              var Status = getState(Garagen[i]).val;
              if ( Status ) { 
                  openGaragen = openGaragen + 1;
              }
          } 
            
          // Lampen
          var Lampen = getObject("enum.functions.light").common.members;
          for(let i = 0; i < Lampen.length; i++) {
              var Status = getState(Lampen[i]).val;
              if ( Status ) { 
                  LampenAn = LampenAn + 1;
              }
          }   
      
          var openWindowsText = "Alle geschlossen";
          var openDoorText = "Alle geschlossen";
          var openGaragenText = "Alle geschlossen";
          var LampenAnText = "Alle ausgeschaltet"
      
          if ( openWindows > 0 ) {
              openWindowsText = openWindows + " geöffnet"; 
          }
          
          if ( openDoors > 0 ) {
              openDoorText = openDoors + " geöffnet"; 
          }        
         
          if ( openGaragen > 0 ) {
              openGaragenText = openGaragen + " geöffnet"; 
          }    
         
          if ( LampenAn > 0 ) {
              LampenAnText = LampenAn + " eingeschaltet"; 
          }    
      
          setState('0_userdata.0.Aufzählungen.AnzahlFensterOffenText', openWindowsText );
          setState('0_userdata.0.Aufzählungen.AnzahlTürenOffenText', openDoorText );    
          setState('0_userdata.0.Aufzählungen.AnzahlGaragenOffenText', openGaragenText );       
          setState('0_userdata.0.Aufzählungen.AnzahlLichterAnText', LampenAnText );         
          setState('0_userdata.0.Aufzählungen.AnzahlFensterOffen', openWindows );
          setState('0_userdata.0.Aufzählungen.AnzahlTürenOffen', openDoors );    
          setState('0_userdata.0.Aufzählungen.AnzahlGaragenOffen', openGaragen );    
          setState('0_userdata.0.Aufzählungen.AnzahlLichterAn', LampenAn );  
      }
      
      $('state(functions=Licht)').on(function(obj) {
          countOpenWindowsDoors();
      });
      
      $('state(functions=Garagen)').on(function(obj) {
          countOpenWindowsDoors();
      });
      
      $('state(functions=Fenster)').on(function(obj) {
          countOpenWindowsDoors();
      });
      
      $('state(functions=Tueren)').on(function(obj) {
          countOpenWindowsDoors();
      });
      
      countOpenWindowsDoors();
      

      Die benötigten Aufzählungen sind erstellt:

      Unbenannt.PNG

      Ebenso wie die Datenpunkte:

      Unbenannt1.PNG

      Das Skript habe ich unter "Global" gespeichert:

      Unbenannt2.PNG

      Starte ich das Script, werden die Datenpunkte aktualisiert und passen auch zum aktuellen Status.
      Allerdings reagiert das Script nicht auf Änderungen bei den Elementen die zu den Aufzählungen hinzugefügt wurden.
      Ich habe vor kurzem meinen ioBroker komplett neu aufgesetzt, davor hatte ich das Script auch laufen und es hat funktioniert.

      Kann mir jemand sagen, wo der Fehler in meinem Script liegt?

      Node.js: v12.18.3
      NPM 6.14.6
      Admin 4.1.6
      Script Engine 4.6.22

      Danke für Eure Hilfe!

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

      @n3ucr0n sagte:

      Das Skript habe ich unter "Global" gespeichert:

      Dort ist es falsch ! Unter "global" gespeicherte Skripte werden in alle anderen Skripte kopiert und sollten nur häufig verwendete eigene Funktionen enthalten.

      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

      N 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @n3ucr0n sagte:

        Das Skript habe ich unter "Global" gespeichert:

        Dort ist es falsch ! Unter "global" gespeicherte Skripte werden in alle anderen Skripte kopiert und sollten nur häufig verwendete eigene Funktionen enthalten.

        N Offline
        N Offline
        n3ucr0n
        schrieb am zuletzt editiert von n3ucr0n
        #3

        @paul53 okai danke für den Hinweis! Ich verschiebe das Script!

        Ich habe das Script nun an einern "Standardort" verschoben

        Unbenannt.PNG

        Leider keine Änderung im Verhalten.... Das Skript aktualisiert die Datenpunkte weiterhin nur, wenn ich das Script händisch neu starte.
        Mein Fehler scheint demnach an der Stelle im Script zu liegen, welche dafür sorgt, dass das Script bei einer Änderung der in den Aufzählungen enthaltenen Werte ausgeführt wird.
        Wenn ich das Script richtig verstanden habe, ist dieser Teil dafür verantwortlich, oder?

        
        $('state(functions=Licht)').on(function(obj) {
            countOpenWindowsDoors();
        });
         
        $('state(functions=Garagen)').on(function(obj) {
            countOpenWindowsDoors();
        });
         
        $('state(functions=Fenster)').on(function(obj) {
            countOpenWindowsDoors();
        });
         
        $('state(functions=Tueren)').on(function(obj) {
            countOpenWindowsDoors();
        });
         
        countOpenWindowsDoors();
        
        N 1 Antwort Letzte Antwort
        0
        • N n3ucr0n

          @paul53 okai danke für den Hinweis! Ich verschiebe das Script!

          Ich habe das Script nun an einern "Standardort" verschoben

          Unbenannt.PNG

          Leider keine Änderung im Verhalten.... Das Skript aktualisiert die Datenpunkte weiterhin nur, wenn ich das Script händisch neu starte.
          Mein Fehler scheint demnach an der Stelle im Script zu liegen, welche dafür sorgt, dass das Script bei einer Änderung der in den Aufzählungen enthaltenen Werte ausgeführt wird.
          Wenn ich das Script richtig verstanden habe, ist dieser Teil dafür verantwortlich, oder?

          
          $('state(functions=Licht)').on(function(obj) {
              countOpenWindowsDoors();
          });
           
          $('state(functions=Garagen)').on(function(obj) {
              countOpenWindowsDoors();
          });
           
          $('state(functions=Fenster)').on(function(obj) {
              countOpenWindowsDoors();
          });
           
          $('state(functions=Tueren)').on(function(obj) {
              countOpenWindowsDoors();
          });
           
          countOpenWindowsDoors();
          
          N Offline
          N Offline
          n3ucr0n
          schrieb am zuletzt editiert von
          #4

          So ich setzte den Thread mal auf closed.
          Ich habe den Fehler zwar nicht gefunden, aber ich habe alle Datenpunkte, alle Aufzählungen und das Script einfach nochmal neu aufgebaut und nun funktioniert es. Es sieht eigentlich genauso aus wie vorher aber das Verhalten ist jetzt ein anderes. Ich kann selbst nicht erklären wieso.

          Liebe Grüße

          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

          486

          Online

          32.7k

          Benutzer

          82.4k

          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