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] Lichter zählen Script läuft nicht

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
156 Beiträge 33 Kommentatoren 29.4k Aufrufe 6 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.
  • M Offline
    M Offline
    mech
    schrieb am zuletzt editiert von mech
    #132

    Hallo FredF,

    unter Aufzählungen habe ich "Licht" bereits zugefügt und auch bei den Objekten.

    objects - ioBroker 2019-05-30 19-39-26.png
    enums - ioBroker 2019-05-30 19-31-32.png

    javascript - ioBroker 2019-05-30 19-33-12.png

    /* Status Zahl Lichter
    
        zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
        Daten kommen vom Gewerk "licht"
    
        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 cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
        var cacheSelectorLevel = $('channelstate.id=.level');
        var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
    
        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
        }
        ++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(',')); // 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();
        });
        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(/( |<([^>]+)>)/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);
        });
    
    

    Hab mal ein paar mehr Informationen mit Screens angehangen, vielleicht kannst du ja so einen Fehler erkennen, über Hilfe bin ich echt dankbar :)

    htreckslerH 1 Antwort Letzte Antwort
    0
    • M mech

      Hallo FredF,

      unter Aufzählungen habe ich "Licht" bereits zugefügt und auch bei den Objekten.

      objects - ioBroker 2019-05-30 19-39-26.png
      enums - ioBroker 2019-05-30 19-31-32.png

      javascript - ioBroker 2019-05-30 19-33-12.png

      /* Status Zahl Lichter
      
          zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
          Daten kommen vom Gewerk "licht"
      
          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 cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
          var cacheSelectorLevel = $('channelstate.id=.level');
          var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
      
          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
          }
          ++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(',')); // 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();
          });
          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(/( |<([^>]+)>)/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);
          });
      
      

      Hab mal ein paar mehr Informationen mit Screens angehangen, vielleicht kannst du ja so einen Fehler erkennen, über Hilfe bin ich echt dankbar :)

      htreckslerH Offline
      htreckslerH Offline
      htrecksler
      Forum Testing
      schrieb am zuletzt editiert von
      #133

      @mech hast du den Javascript Adapter danach neu gestartet? Ich meine mich zu erinnern das das nötig ist.

      Gruss Hermann

      ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

      M 1 Antwort Letzte Antwort
      0
      • htreckslerH htrecksler

        @mech hast du den Javascript Adapter danach neu gestartet? Ich meine mich zu erinnern das das nötig ist.

        M Offline
        M Offline
        mech
        schrieb am zuletzt editiert von
        #134

        @htrecksler

        Ja das habe ich bereits erledigt.

        Ich denke das diese abfragen bestimmt nicht auf einen Shelly ausgelegt sind:

        var cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
            var cacheSelectorLevel = $('channelstate.id=.level');
            var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
        
        htreckslerH 1 Antwort Letzte Antwort
        0
        • M mech

          @htrecksler

          Ja das habe ich bereits erledigt.

          Ich denke das diese abfragen bestimmt nicht auf einen Shelly ausgelegt sind:

          var cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
              var cacheSelectorLevel = $('channelstate.id=.level');
              var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
          
          htreckslerH Offline
          htreckslerH Offline
          htrecksler
          Forum Testing
          schrieb am zuletzt editiert von
          #135

          @mech haben die Shelly denn einen Datenpunkt STATE, level, oder POWER?
          Ich hatte mal einen und ich meine mich zu erinnern das der einen Datenpunkt "Switch" (true/false) hat

          Gruss Hermann

          ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mech
            schrieb am zuletzt editiert von
            #136

            Hey , für mich sieht es nach "switch" aus.

            objects - ioBroker 2019-05-30 19-49-07.png

            htreckslerH paul53P 2 Antworten Letzte Antwort
            0
            • M mech

              Hey , für mich sieht es nach "switch" aus.

              objects - ioBroker 2019-05-30 19-49-07.png

              htreckslerH Offline
              htreckslerH Offline
              htrecksler
              Forum Testing
              schrieb am zuletzt editiert von
              #137

              @mech genau, aber den (Groß- /Kleinschreibung beachten) berücksichtigt das Script ja nicht. Das Script schaut ja nur auf STATE, level und POWER

              Gruss Hermann

              ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                mech
                schrieb am zuletzt editiert von
                #138

                Hey,

                so wäre es dann ja richtig oder?

                 var cacheSelectorState = $('channelstate.id=.Switch'); // Gewerk Licht
                
                1 Antwort Letzte Antwort
                0
                • M mech

                  Hey , für mich sieht es nach "switch" aus.

                  objects - ioBroker 2019-05-30 19-49-07.png

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

                  @mech Versuche es mal so

                  const cacheSelectorState = $('state[id=*.Switch](functions=light)');
                  

                  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

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    mech
                    schrieb am zuletzt editiert von
                    #140

                    Prima vielen Dank. Das hat wohl zu Erfolg geführt.

                    20:00:45.499	info	javascript.0 Stop script script.js.Lichter_EIN
                    20:00:46.651	info	javascript.0 Start javascript script.js.Lichter_EIN
                    20:00:46.652	info	javascript.0 script.js.Lichter_EIN: registered 3 subscriptions and 0 schedules
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Auslöser Skriptstart
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Text: ,
                    20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 2
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Auslösender Schalter: shelly.0.SHSW-PM#B1D869#1.Relay0.Switch: false
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                    20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Text:
                    20:00:54.156	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 1
                    

                    Wie könnte ich den nun noch die Homematic "aktoren" abfragen? Dort habe ich leider bedingt durch eine Wechselschaltung noch 2 von laufen?

                    Hast du da ggf. auch eine Lösung für mich?

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • crunchipC Abwesend
                      crunchipC Abwesend
                      crunchip
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #141

                      habe es so, für Mi-Light, Shelly, Sonoff...

                      /* Status Zahl Lichter
                      
                      zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                      Daten kommen vom Gewerk "licht"
                      
                      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 cacheSelectorState = $('channel[state.id=*.STATE](functions="licht")'); // Gewerk licht
                      var cacheSelectorLevel = $('channel[state.id=*.level](functions="licht")');
                      var cacheSelectorPOWER = $('state[id=*.POWER](functions="licht")'); // Sonoff
                      var cacheSelectorSwitch = $('state[id=*.Switch](functions="licht")'); // Shelly
                      var cacheSelectorMi = $('state[id=*.state](functions=licht)'); //Mi-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
                      }
                      ++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();
                      });
                      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);
                      });
                      

                      umgestiegen von Proxmox auf Unraid

                      1 Antwort Letzte Antwort
                      1
                      • M mech

                        Prima vielen Dank. Das hat wohl zu Erfolg geführt.

                        20:00:45.499	info	javascript.0 Stop script script.js.Lichter_EIN
                        20:00:46.651	info	javascript.0 Start javascript script.js.Lichter_EIN
                        20:00:46.652	info	javascript.0 script.js.Lichter_EIN: registered 3 subscriptions and 0 schedules
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Auslöser Skriptstart
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Text: ,
                        20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 2
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Auslösender Schalter: shelly.0.SHSW-PM#B1D869#1.Relay0.Switch: false
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                        20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Text:
                        20:00:54.156	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 1
                        

                        Wie könnte ich den nun noch die Homematic "aktoren" abfragen? Dort habe ich leider bedingt durch eine Wechselschaltung noch 2 von laufen?

                        Hast du da ggf. auch eine Lösung für mich?

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

                        @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)');
                        

                        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

                        M 1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          mech
                          schrieb am zuletzt editiert von
                          #143

                          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 Antwort Letzte Antwort
                          0
                          • paul53P 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 Offline
                            M Offline
                            mech
                            schrieb am zuletzt editiert von
                            #144

                            @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?

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • M mech

                              @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?

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

                              @mech sagte:

                              Die Objekte sehen so aus:

                              const cacheSelectorOn = $('state[id=*.on](functions=light)');
                              

                              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

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                mech
                                schrieb am zuletzt editiert von
                                #146

                                @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 Antwort Letzte Antwort
                                0
                                • M Offline
                                  M Offline
                                  mech
                                  schrieb am zuletzt editiert von mech
                                  #147

                                  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 Antwort Letzte Antwort
                                  0
                                  • M Offline
                                    M Offline
                                    mech
                                    schrieb am zuletzt editiert von
                                    #148

                                    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 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      mech
                                      schrieb am zuletzt editiert von
                                      #149

                                      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 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        mech
                                        schrieb am zuletzt editiert von
                                        #150

                                        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 Antwort Letzte Antwort
                                        0
                                        • H Offline
                                          H Offline
                                          hannoi
                                          schrieb am zuletzt editiert von
                                          #151

                                          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?

                                          Grüße

                                          paul53P 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

                                          421

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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