NEWS

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


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


  • @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.


  • @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();
    

  • 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

Suggested Topics

2.1k
Online

36.8k
Users

42.5k
Topics

589.4k
Posts