Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Aufzählungen auswerten - Hilfe bei Fehler in Script

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      n3ucr0n last edited by 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!

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

            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 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            836
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            javascript monitoring
            2
            4
            388
            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