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. JavaScript
  5. Licht Script zählen Shellys hinzufügen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Licht Script zählen Shellys hinzufügen

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 494 Aufrufe 3 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.
  • T Offline
    T Offline
    Torsten G.
    schrieb am zuletzt editiert von
    #1

    Guten Tag,

    ich benutze seit längerem das Licht Script zählen von diesem Topic
    https://forum.iobroker.net/topic/5369/gelöst-lichter-zählen-script-läuft-nicht/113

    Ich habe mir nun, auch der Preisfrage wegen, zusätzlich Shelly´s als Lichtschalter verbaut. Gerne würde ich diese Schalter auch mit dem Script abfragen. Nur habe ich von dieser Sprache keine Ahnung.

    Wer könnte das Script um die Shelly´s erweitern? Der Datenpunkt müsste folgender sein:
    8d11c43a-a6c2-455d-9344-d42c3fe7df00-image.png

    Dieses Script ist bei mir im Einsatz - entnommen aus verlinktem Topic:

    /* Status Zahl Lichter
    
    zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
    Daten kommen vom Gewerk "Licht"
    */
    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'
    });
    
    // 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, 12, '.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
        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);
    });
    

    Für die Mühe danke ich schonmal im Voraus :)

    Gruß
    Torsten

    PS: Sollte ich mein Thema in der Forensuche übersehen haben reicht auch ein Hinweis auf den entsprechenden Eintrag

    crunchipC 1 Antwort Letzte Antwort
    0
    • T Torsten G.

      Guten Tag,

      ich benutze seit längerem das Licht Script zählen von diesem Topic
      https://forum.iobroker.net/topic/5369/gelöst-lichter-zählen-script-läuft-nicht/113

      Ich habe mir nun, auch der Preisfrage wegen, zusätzlich Shelly´s als Lichtschalter verbaut. Gerne würde ich diese Schalter auch mit dem Script abfragen. Nur habe ich von dieser Sprache keine Ahnung.

      Wer könnte das Script um die Shelly´s erweitern? Der Datenpunkt müsste folgender sein:
      8d11c43a-a6c2-455d-9344-d42c3fe7df00-image.png

      Dieses Script ist bei mir im Einsatz - entnommen aus verlinktem Topic:

      /* Status Zahl Lichter
      
      zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
      Daten kommen vom Gewerk "Licht"
      */
      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'
      });
      
      // 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, 12, '.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
          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);
      });
      

      Für die Mühe danke ich schonmal im Voraus :)

      Gruß
      Torsten

      PS: Sollte ich mein Thema in der Forensuche übersehen haben reicht auch ein Hinweis auf den entsprechenden Eintrag

      crunchipC Abwesend
      crunchipC Abwesend
      crunchip
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #2

      @Torsten-G kann selbst kein Javascript.
      Ich verwende ein anderes script und hab es für mich angepasst, unter anderem , für sonoff, shelly, Mi-light, Tuya, Milight-Smart-Light
      du benötigst für shelly eigentlich

      $('state[id=*.Switch](functions="Licht")'); // Shelly
      

      dein Script ruft ab

      $('channel[state.id=*.STATE](functions=Licht)');
      

      falls du es testen möchtest, bei mir ist funktions="licht" kleingeschrieben, müsstest Zeile 64-70, ändern in "Licht"
      hier das Script

      /* 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
      var cacheSelectorTuya = $('state[id=*.1](functions="licht")'); //Tuya
      var cacheSelectorSmart = $('state[id=*.onoff](functions="licht")');//Milight-Smart-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
      
      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
      
      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
      
      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
      
      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
      
      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 ##### ');
      }*/
      cacheSelectorTuya.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")); //.state aus Text entfernen
      var raumname = getObject(id, "rooms"); // <---- NEU
      
      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 ##### ');
      }*/
      cacheSelectorSmart.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("On/Off")); //.state aus Text entfernen
      var raumname = getObject(id, "rooms"); // <---- NEU
      
      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();
      });
      cacheSelectorTuya.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();
      });
      cacheSelectorSmart.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

      Z T 2 Antworten Letzte Antwort
      0
      • crunchipC crunchip

        @Torsten-G kann selbst kein Javascript.
        Ich verwende ein anderes script und hab es für mich angepasst, unter anderem , für sonoff, shelly, Mi-light, Tuya, Milight-Smart-Light
        du benötigst für shelly eigentlich

        $('state[id=*.Switch](functions="Licht")'); // Shelly
        

        dein Script ruft ab

        $('channel[state.id=*.STATE](functions=Licht)');
        

        falls du es testen möchtest, bei mir ist funktions="licht" kleingeschrieben, müsstest Zeile 64-70, ändern in "Licht"
        hier das Script

        /* 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
        var cacheSelectorTuya = $('state[id=*.1](functions="licht")'); //Tuya
        var cacheSelectorSmart = $('state[id=*.onoff](functions="licht")');//Milight-Smart-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
        
        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
        
        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
        
        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
        
        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
        
        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 ##### ');
        }*/
        cacheSelectorTuya.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")); //.state aus Text entfernen
        var raumname = getObject(id, "rooms"); // <---- NEU
        
        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 ##### ');
        }*/
        cacheSelectorSmart.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("On/Off")); //.state aus Text entfernen
        var raumname = getObject(id, "rooms"); // <---- NEU
        
        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();
        });
        cacheSelectorTuya.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();
        });
        cacheSelectorSmart.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);
        });
        

        Z Offline
        Z Offline
        zahnheinrich
        schrieb am zuletzt editiert von
        #3

        @crunchip
        Oder alle Lichter in alias Datenpunkte überführen.
        Alias ist dein Freund 🙂

        MfG Ulrich

        1 Antwort Letzte Antwort
        0
        • crunchipC crunchip

          @Torsten-G kann selbst kein Javascript.
          Ich verwende ein anderes script und hab es für mich angepasst, unter anderem , für sonoff, shelly, Mi-light, Tuya, Milight-Smart-Light
          du benötigst für shelly eigentlich

          $('state[id=*.Switch](functions="Licht")'); // Shelly
          

          dein Script ruft ab

          $('channel[state.id=*.STATE](functions=Licht)');
          

          falls du es testen möchtest, bei mir ist funktions="licht" kleingeschrieben, müsstest Zeile 64-70, ändern in "Licht"
          hier das Script

          /* 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
          var cacheSelectorTuya = $('state[id=*.1](functions="licht")'); //Tuya
          var cacheSelectorSmart = $('state[id=*.onoff](functions="licht")');//Milight-Smart-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
          
          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
          
          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
          
          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
          
          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
          
          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 ##### ');
          }*/
          cacheSelectorTuya.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")); //.state aus Text entfernen
          var raumname = getObject(id, "rooms"); // <---- NEU
          
          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 ##### ');
          }*/
          cacheSelectorSmart.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("On/Off")); //.state aus Text entfernen
          var raumname = getObject(id, "rooms"); // <---- NEU
          
          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();
          });
          cacheSelectorTuya.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();
          });
          cacheSelectorSmart.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);
          });
          

          T Offline
          T Offline
          Torsten G.
          schrieb am zuletzt editiert von
          #4

          @crunchip Vielen Dank Script ausgetauscht und angepasst klappt.

          Erledigt

          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

          813

          Online

          32.5k

          Benutzer

          81.7k

          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