Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Lichter zählen Script läuft nicht

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Lichter zählen Script läuft nicht

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

      @mech sagte:

      Wie könnte ich den nun noch die Homematic "aktoren" abfragen?

      Wenn die Kanäle dem Gewerk "Licht" zugeordnet sind:

      const cacheSelectorSTATE = $('channel[state.id=*.STATE](functions=light)');
      
      M 1 Reply Last reply Reply Quote 0
      • M
        mech last edited by

        Wow, danke für eure Hilfe 🙂 Das hat mir echt geholfen.

        Jetzt habe ich in diesem Beitrag ein Widget dafür gefunden: https://forum.iobroker.net/topic/3884/licht-skript-liefert-falsche-gerätenamen/2

        Besteht hier die Möglichkeit das ich mir die angeschalteten Lichter anzeigen lassen kann? Und diese dann direkt auch ausschalten kann, bisher sieht mein Widget so aus:

        vis 2019-05-30 20-21-45.png

        1 Reply Last reply Reply Quote 0
        • M
          mech @paul53 last edited by

          @paul53

          Hm, die Homematic findet er nicht. Die Objekte sehen so aus:

          objects - ioBroker 2019-05-30 20-54-46.png

          Jemand eine Idee dazu?

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

            @mech sagte:

            Die Objekte sehen so aus:

            const cacheSelectorOn = $('state[id=*.on](functions=light)');
            
            1 Reply Last reply Reply Quote 0
            • M
              mech last edited by

              @paul53 said in [gelöst] Lichter zählen Script läuft nicht:

              const cacheSelectorOn = $('stateid=*.on');

              Danke das du noch antwortest 🙂

              Ich habe das so zugefügt, bekomme dann aber an anderer Stelle einen JS Fehler:

              21:42:11.798	error	javascript.0 script.js.Verbraucher: script.js.Verbraucher:538
              21:42:11.799	error	javascript.0 at script.js.Verbraucher:538:1
              
              

              Das ist die betroffene Zeile 538

              cacheSelectorON.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
              
              1 Reply Last reply Reply Quote 0
              • M
                mech last edited by mech

                Okay fehler selbst gesehen.

                ON = On

                Das habe ich unter Trigger noch zugefügt.

                cacheSelectorOn.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                
                if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                
                checkDevices();
                
                });
                

                Aber leider zeigt er mir bisher nur die Shellys an =/

                1 Reply Last reply Reply Quote 0
                • M
                  mech last edited by

                  Update: Es scheint auf jedenfall den HM Schalter zu triggern:

                  21:48:40.204	info	javascript.0 script.js.Verbraucher: Auslösender Schalter: hmip.0.devices.3014F711A0000858A9919754.channels.1.on: false
                  

                  Nur dieser wird wohl nicht in die Variable für die Lampen geschrieben.

                  1 Reply Last reply Reply Quote 0
                  • M
                    mech last edited by

                    Hier mal das ganze Script:

                    /* Status Zahl Lichter
                    
                    {1}
                    
                    zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                    
                    Daten kommen vom Gewerk "licht"
                    
                    {1}
                    
                    erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                    
                    23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                    
                    Log Ausgabe auskommentiert
                    
                    05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                    
                    24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                    
                    06.05.2016 Datenpunkt für Ansagen zugefügt
                    
                    02.07.2016 abgeschaltet, da Fehler
                    
                    03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                    
                    search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                    
                    27.11.2016 Verschoben in Status
                    
                    Code optimiert
                    
                    23.12.2016 Räume eingebaut
                    
                    */
                    
                    var logging = true;
                    
                     
                    
                    var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                    
                    idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                    
                    idText = 'javascript.0.Status.Lichter.Text',
                    
                    idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                    
                    idAnsage = 'javascript.0.Status.Lichter.Ansage';
                    
                     
                    
                    // Ab hier nix mehr ändern
                    
                    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                    
                    type: 'number',
                    
                    name: 'Anzahl aller Lichter',
                    
                    min: 0,
                    
                    def: 0,
                    
                    role: 'value'
                    
                    });
                    
                    createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                    
                    type: 'number',
                    
                    name: 'Anzahl der eingeschalteten Lichter',
                    
                    min: 0,
                    
                    def: 0,
                    
                    role: 'value'
                    
                    });
                    
                    createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                    
                    type: 'string',
                    
                    name: 'Eingeschaltete Lichter',
                    
                    desc: 'Namen der eingeschalteten Lichter',
                    
                    def: ' ',
                    
                    role: 'value'
                    
                    });
                    
                    createState(idAnsage, {
                    
                    type: 'string',
                    
                    name: 'Eingeschaltete Lichter (Ansage)',
                    
                    desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                    
                    def: ' ',
                    
                    role: 'value'
                    
                    });
                    
                    createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                    
                    type: 'string',
                    
                    name: 'Räume mit eingeschalteten Lichter',
                    
                    desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                    
                    def: ' ',
                    
                    role: 'value'
                    
                    });
                    
                    //var cacheSelectorHM = $('state[id=*.switch](functions=light)');
                    
                    var cacheSelectorState = $('channel[state.id=*.STATE](functions="light")'); // Gewerk licht
                    
                    var cacheSelectorLevel = $('channel[state.id=*.level](functions="light")');
                    
                    var cacheSelectorPOWER = $('state[id=*.POWER](functions="light")'); // Sonoff
                    
                    var cacheSelectorSwitch = $('state[id=*.Switch](functions="light")'); // Shelly
                    
                    var cacheSelectorMi = $('state[id=*.state](functions=light)'); //Mi-Light
                    
                    //var cacheSelectorON = $('switch[id=*.switch](functions=light)'); //Homematic
                    
                    const cacheSelectorOn = $('state[id=*.on](functions=light)');
                    
                    function checkDevices(obj) {
                    
                    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                    
                    var anzahlLichterAn = 0;
                    
                    var anzahlLichter = 0;
                    
                    var textLichterAn = [];
                    
                    var textRaum = [];
                    
                     
                    
                    if (logging) {
                    
                    log('++++++ Lichter Anzahl ++++ ');
                    
                    log('#### SCHALTER ##### ');
                    
                    }
                    
                    cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                    
                    var obj = getObject(id);
                    
                    var name = getObject(id).common.name;
                    
                    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                    
                    var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                    
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    
                     
                    
                     
                    
                    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                    
                    
                    /*
                    if (logging) {
                    
                    log('-------');
                    
                    log('Kanal: ' + name);
                    
                    log('Status: ' + status); 
                    
                    }}
                    */
                    
                    
                    
                    
                     
                    
                    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                    
                    ++anzahlLichterAn; 
                    
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    
                    textRaum.push(raumname.enumNames); // <---- NEU
                    
                    }
                    
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                    // } // ENDE VK-Abfrage
                    
                     
                    
                    });
                    
                     
                    
                     
                    
                    if (logging) log('#### DIMMER ##### ');
                    
                    cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                    
                    var obj = getObject(id);
                    
                    var name = getObject(id).common.name;
                    
                    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                    
                    var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                    
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    
                     
                    
                    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                    
                    /*
                    
                    if (logging) {
                    
                    log('-------');
                    
                    log('Kanal: ' + name);
                    
                    log('Status: ' + status + '%'); 
                    
                    }
                    
                    */
                    
                     
                    
                    if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                    
                    ++anzahlLichterAn; 
                    
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    
                    textRaum.push(raumname.enumNames); // <---- NEU
                    
                    }
                    
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                    // } // Ende Abfrage VK 
                    
                     
                    
                    }); 
                    
                     
                    
                    if (logging) {
                    
                    log('++++++ Lichter Anzahl ++++ ');
                    
                    log('#### SCHALTER ##### ');
                    
                    }
                    
                    cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                    
                    var obj = getObject(id);
                    
                    var name = getObject(id).common.name;
                    
                    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                    
                    var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                    
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    
                     
                    
                     
                    
                    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                    
                    /*
                    
                    if (logging) {
                    
                    log('-------');
                    
                    log('Kanal: ' + name);
                    
                    log('Status: ' + status); 
                    
                    }
                    
                    */
                    
                     
                    
                    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                    
                    ++anzahlLichterAn; 
                    
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    
                    //textRaum.push(raumname.enumNames); // <---- NEU
                    textRaum.push(raumname.enumRooms); // <---- NEU
                    
                    }
                    
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                    // } // ENDE VK-Abfrage
                    
                     
                    
                    });
                    
                     
                    
                    if (logging) {
                    
                    log('++++++ Lichter Anzahl ++++ ');
                    
                    log('#### SCHALTER ##### ');
                    
                    }
                    
                    cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                    
                    var obj = getObject(id);
                    
                    var name = getObject(id).common.name;
                    
                    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                    
                    var devicename = name;
                    
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    
                     
                    
                    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                    
                    /*
                    
                    if (logging) {
                    
                    log('-------');
                    
                    log('Kanal: ' + name);
                    
                    log('Status: ' + status); 
                    
                    }
                    
                    */
                    
                     
                    
                    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                    
                    ++anzahlLichterAn; 
                    
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    
                    textRaum.push(raumname.enumNames); // <---- NEU
                    
                    }
                    
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                    // } // ENDE VK-Abfrage
                    
                    });
                    
                     
                    
                     
                    
                     
                    
                    if (logging) {
                    
                    log('++++++ Lichter Anzahl ++++ ');
                    
                    log('#### SCHALTER ##### ');
                    
                    }
                    
                    cacheSelectorMi.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                    
                    var obj = getObject(id);
                    
                    var name = getObject(id).common.name;
                    
                    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                    
                    var devicename = name.substring(0, name.indexOf(" Switch ON/OFF")); //.state aus Text entfernen
                    
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    
                     
                    
                    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                    
                    /*
                    
                    if (logging) {
                    
                    log('-------');
                    
                    log('Kanal: ' + name);
                    
                    log('Status: ' + status); 
                    
                    }
                    
                    */
                    
                     
                    
                    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                    
                    ++anzahlLichterAn; 
                    
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    
                    textRaum.push(raumname.enumNames); // <---- NEU
                    
                    }
                    
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    
                    // } // ENDE VK-Abfrage
                    
                    });
                    
                     
                    
                    // Array mit Lichternamen sortieren
                    
                    textLichterAn.sort();
                    
                    textRaum.sort(); // <---- NEU
                    
                    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                    
                    if (logging) log("Text: " + textLichterAn);
                    
                    if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                    
                    // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                    
                    setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                    
                    setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                    
                    setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                    
                    // setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
                    
                    setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                    
                    }
                    
                     
                    
                    // Trigger
                    
                    cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                    
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                    
                    if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                    
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                    
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    cacheSelectorMi.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                    
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    cacheSelectorOn.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                    
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    
                    checkDevices();
                    
                    });
                    
                    function main() {
                    
                    setTimeout(function(){
                    
                    if (logging) log('Auslöser Skriptstart');
                    
                    checkDevices();
                    
                    }, 2000);
                    
                    }
                    
                     
                    
                    main(); // Skriptstart-Auslöser
                    
                     
                    
                    // Aufbereitung für Ansage
                    
                    function strip_tags(data) {
                    
                    var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                    
                    return(rueckgabe);
                    
                    }
                    
                     
                    
                    on(idText, function (obj) {
                    
                    var text = obj.state.val;
                    
                    text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet';
                    
                    setState(idAnsage, text);
                    
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • M
                      mech last edited by

                      okay gelöst 🙂

                      Man muss den Log Part auf für den selector anlegen. Hier der Code falls mal jemand ähnlich unbegabt im JS ist.

                      f (logging) {
                      
                      log('++++++ Lichter Anzahl ++++ ');
                      
                      log('#### SCHALTER ##### ');
                      
                      }
                      
                      cacheSelectorOn.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                      
                      1 Reply Last reply Reply Quote 0
                      • H
                        hannoi last edited by

                        Moin moin,

                        ich habe nach einem Systemumzug ein Problem mit meinem "Lichter zählen" Skript.

                        Das Skript läuft auch soweit wie es soll, nur 2 Lampen aus dem identischen Gewerk licht werden mit falschem Raumnamen aufgelistet: mit [object Object]:
                        Bildschirmfoto 2019-07-04 um 13.02.57.png

                        Hier das Skript:

                        /* Status Zahl Lichter
                        
                        zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                        Daten kommen vom Gewerk "Licht"
                        */
                        const logging = true;
                        
                        const idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                              idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                              idText = 'javascript.0.Status.Lichter.Text',
                              idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                              idAnsage = 'javascript.0.Status.Lichter.Ansage';
                        
                        // Ab hier nix mehr ändern
                        createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                            type: 'number',
                            name: 'Anzahl aller Lichter',
                            min: 0,
                            def: 0,
                            role: 'value'
                        });
                        createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                            type: 'number',
                            name: 'Anzahl der eingeschalteten Lichter',
                            min: 0,
                            def: 0,
                            role: 'value'
                        });
                        createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                            type: 'string',
                            name: 'Eingeschaltete Lichter',
                            desc: 'Namen der eingeschalteten Lichter',
                            def: ' ',
                            role: 'value'
                        });
                        createState(idAnsage, {
                            type: 'string',
                            name: 'Eingeschaltete Lichter (Ansage)',
                            desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                            def: ' ',
                            role: 'value'
                        });
                        createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                            type: 'string',
                            name: 'Räume mit eingeschalteten Lichter',
                            desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                            def: ' ',
                            role: 'value'
                        });
                        
                        // HM Schalter, HM Dimmer und Hue Schalter im Gewerk Licht
                        const hmSTATE = $('channel[state.id=*.state](functions=licht)');
                        const hmLEVEL = $('channel[state.id=*.LEVEL](functions=licht)');
                        const hueon   = $('state[id=*.on](functions=licht)');
                        
                        var anzahlLichterAn,
                            anzahlLichter,
                            textLichterAn,
                            textRaum;
                        
                        function checkLicht(id, vorn, hinten) {
                            var name = getObject(id).common.name;
                            var devicename = name.substring(vorn, name.indexOf(hinten)); //Zeichen vorn, State hinten aus Text entfernen
                            var raum = getObject(id, "rooms").enumNames[0]; 
                            if (getState(id).val) { // wenn Zustand != false / 0, dann wird die Anzahl der Lichter hochgezählt
                                ++anzahlLichterAn;
                                textLichterAn.push(devicename); // Zu Array hinzufügen
                                if(textRaum.indexOf(raum) == -1) textRaum.push(raum); // zu Array hinzu, wenn noch nicht vorhanden
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                        }
                        
                        function checkDevices() {
                            // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                            anzahlLichterAn = 0;
                            anzahlLichter = 0;
                            textLichterAn = [];
                            textRaum = [];
                            hmSTATE.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                        	    checkLicht(id, 0, '.state');
                            });
                        
                            hueon.each(function(id, i) { // Schleife für jedes gefundenen Element *.on im Gewerk Licht
                        	    checkLicht(id, 6, '.on');
                            });
                        
                            hmLEVEL.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                        	    checkLicht(id, 0, '.LEVEL');
                            });
                        
                            // Array mit Lichternamen sortieren
                            textLichterAn.sort();
                            textRaum.sort(); // <---- NEU
                            // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                            if (logging) log("Text: " + textLichterAn);
                            if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                            // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                            //setState(idText, textLichterAn.join(',')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                            setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                            setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                            setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                            setState(idRaum, textRaum.join(',')); // Räume, in denen Licht brennt // <---- NEU
                        }
                        // Trigger
                        hmSTATE.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                            if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                        });
                        hueon.on(function(obj) { // bei Zustandänderung *.on von HUE Lampen im Gewerk Licht
                            if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                        });
                        hmLEVEL.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                            if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                        });
                        
                        // Skriptstart
                        setTimeout(function() {
                            if (logging) log('Auslöser Skriptstart');
                            checkDevices();
                        }, 500);
                        
                        // Aufbereitung für Ansage
                        function strip_tags(data) {
                            var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                            return (rueckgabe);
                        }
                        
                        on(idText, function(obj) {
                            var text = obj.state.val;
                            text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                            setState(idAnsage, text);
                        });
                        

                        Das Skript findet alle Lichter aus dem Gewerk, das passt nur eben die Anzeige des Raumes nicht.
                        Hat noch jemand eine Idee?

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

                          @hannoi sagte:

                          Das Skript findet alle Lichter aus dem Gewerk

                          Wirklich ? Bei HomeMatic-Geräten wird "state" groß geschrieben:

                          const hmSTATE = $('channel[state.id=*.STATE](functions=licht)');
                          

                          und

                          	    checkLicht(id, 0, '.STATE');
                          
                          1 Reply Last reply Reply Quote 0
                          • H
                            hannoi last edited by

                            Sorry hatte ich nicht erwähnt, nutze die Tradfri Lampen. Dort wird der "state" kleingeschrieben.
                            Bildschirmfoto 2019-07-05 um 11.28.52.png

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

                              @hannoi
                              Mit dem Namen "on/off" kann das Skript nichts anfangen !

                              1 Reply Last reply Reply Quote 0
                              • H
                                hannoi last edited by

                                D.h. ich brauche dort eine weitere Konstante ?

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

                                  @hannoi
                                  Ändere den Datenpunktnamen analog der Struktur der HomeMatic-Namen in: "Kanalname.state". "Kanalname" steht für den Namen der jeweiligen Tradfri-Lampe.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  970
                                  Online

                                  31.7k
                                  Users

                                  79.7k
                                  Topics

                                  1.3m
                                  Posts

                                  33
                                  156
                                  22355
                                  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