Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. "Licht-Skript" liefert falsche Gerätenamen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    "Licht-Skript" liefert falsche Gerätenamen

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      baluderbär last edited by

      Hallo Pix,

      danke für deine Hilfe.Du hast Recht, der Teil mit den Dimmern fehlte. Hab es angepasst, leider nicht richtig.

      Habe versucht dein Skript zu benutzen. Leider zeigt er mir anstatt 6 Lampen immer 0 Lampen an (habe 3 Lampen mit Dimmer und 3 Lampen ohne Dimmer).

      Solange ich nur die Lampen mit *state schalte, passen die Namen der Lampen –> Anzahl falsch

      Solange ich nur die Lampen mit *level schalte, passen auch hier die Namen der Lampen --> Anzahl falsch

      Schalte ich 1*state, zeigt er mir an: 0 Lampen, eine an

      Schalte ich dann 1*level, zeigt er mir an: 0 Lampen, eine an

      Schalte ich dann 1*state, zeigt er an: 0 Lampen, zwei an

      Schalte ich dann 1*level, zeigt er an: 0 Lampen, zwei an

      Virtuelle Kanäle habe ich nicht. CuXd kann man auch vernachlässigen.

      Auch stimmt bei mir Lichter.textLichterAnAnsage nicht wirklich. z.B. habe ich eine Lampe an kommt die Meldung "Alle Lichter sind ausgeschaltet" (siehe Bild).

      Sind alle Lampen aus kommt die Meldung "Lichter eingeschaltet:".

      Kannst du noch mal drüber schauen?

      /* System 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: http://forum.iobroker.net/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?f=21&t=473&start=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
      */
      
      createState('zählen_Lichter.anzahlLichter', 0);                     // wenn benötigt: Anzahl der vorhandenen Lichter
      createState('zählen_Lichter.anzahlLichterAn', 0);                   // Anzahl der Lichter, die an sind als Variable unter Javascript.0 anlegen
      createState('zählen_Lichter.textLichterAn');                        // Namen der Lichter, die an sind als Variable unter Javascript.0 anlegen
      
      var cacheSelectorState  = $('channel[state.id=*.STATE](functions="Licht indoor")');
      var cacheSelectorDimmer = $('channel[state.id=*.LEVEL](functions="Licht indoor")');
      
      function countLamps(obj) {
           // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
          var anzahlLichterAn = 0;
          var anzahlLichter = 0;
          var textLichterAn = [];
      
         //log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);   // Info im Log, welcher Zustand sich geändert hat
      
         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 devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {  
                  var status = getState(id).val;                              // Zustand *.STATE abfragen (jedes Element)
      
                  //log(devicename + ' Status: ' + status);
                  if (status) {                                      // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                      ++anzahlLichterAn;  
                      textLichterAn.push(devicename);                       // Zu Array hinzufügen
                  }
                  // log("Licht Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                  ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              } // ENDE VK-Abfrage
          });
      
          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
              //log("Text: " + textLichterAn);
              //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("zählen_Lichter.textLichterAn", textLichterAn.join(',
      '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
         setState("zählen_Lichter.anzahlLichterAn", textLichterAn.length);        // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
         setState("zählen_Lichter.anzahlLichter", anzahlLichter);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
      }
      
      function countDimmer(obj) {
           // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
          var anzahlLichterAn = 0;
          var anzahlLichter = 0;
          var textLichterAn = [];
      
         //log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);   // Info im Log, welcher Zustand sich geändert hat
      
          cacheSelectorDimmer.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 devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                  var status = getState(id).val;                              // Zustand *.LEVEL abfragen (jedes Element)
      
                  //log(devicename + ' Status: ' + status); 
                  if (parseFloat(status) > 0) {                               // Wenn Dimmwert über 0
                      ++anzahlLichterAn;  
                      textLichterAn.push(devicename);                         // Zu Array hinzufügen
                  }
              } // Ende Abfrage VK 
              // log("Licht Nr. " + i + ": " + getObject(id).common.name + ": " + status);          // gibt alle Elemente *.LEVEL im Gewerk Licht mit dem aktuelle Status im Log aus
              ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
          }); 
      
          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
              //log("Text: " + textLichterAn);
              //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("zählen_Lichter.textLichterAn", textLichterAn.join(',
      '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
         setState("zählen_Lichter.anzahlLichterAn", textLichterAn.length);        // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
         setState("zählen_Lichter.anzahlLichter", anzahlLichter);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
      }
      
      cacheSelectorState.on(function(obj) {    // bei Zustandänderung *.STATE im Gewerk Licht
         countLamps(obj);
      });
      cacheSelectorDimmer.on(function(obj) {    // bei Zustandänderung *.LEVEL im Gewerk Licht
         countDimmer(obj);
      });
      
      // Variable für Ansage aufbereiten
      createState('zählen_Lichter.textLichterAnAnsage', " ");  // Anzahl der Fenster, die auf sind, für Ansage aufbereitet
      var idAnzahl = "javascript.0.zählen_Lichter.anzahlLichterAn"/*zählen_Lichter.anzahlLichterAn*/,
          idQuelle = 'javascript.0.zählen_Lichter.textLichterAn',
          idAnsage = 'javascript.0.zählen_Lichter.textLichterAnAnsage';
      
      function strip_tags(data) {
          var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
          return(rueckgabe);
      }
      
      on(idQuelle, function (obj) {
          var text = obj.state.val;
          text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
          setState(idAnsage, text);
      });
      

      1525_snipimage_1.jpg
      1525_snipimage_2.jpg

      1 Reply Last reply Reply Quote 0
      • B
        BobBruni last edited by

        Habe ähnliches Verhalten wie baluderbär…

        Hier mein Log:

        ! javascript.0 2016-11-26 13:58:36.762 info script.js.System_Zahl_Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:58:36.761 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:58:36.755 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.1.JEQ0713856.13.STATE: false
        ! javascript.0 2016-11-26 13:58:31.493 info script.js.System_Zahl_Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:58:31.493 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:58:31.486 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.1.JEQ0713856.15.STATE: false
        ! javascript.0 2016-11-26 13:58:11.688 info script.js.System_Zahl_Lichter: Anzahl Lichter: 3 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:58:11.687 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:58:11.687 info script.js.System_Zahl_Lichter: Licht Nr. 2: 1:wohnen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:11.686 info script.js.System_Zahl_Lichter: Licht Nr. 1: 1:essen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:11.685 info script.js.System_Zahl_Lichter: Licht Nr. 0: 2:bad_licht gross.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:11.684 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.0.LEQ0126380.1.LEVEL: 0
        ! javascript.0 2016-11-26 13:58:08.908 info script.js.System_Zahl_Lichter: Anzahl Lichter: 3 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:58:08.907 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:58:08.906 info script.js.System_Zahl_Lichter: Licht Nr. 2: 1:wohnen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:08.905 info script.js.System_Zahl_Lichter: Licht Nr. 1: 1:essen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:08.903 info script.js.System_Zahl_Lichter: Licht Nr. 0: 2:bad_licht gross.LEVEL: undefined
        ! javascript.0 2016-11-26 13:58:08.902 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.0.LEQ0126380.1.LEVEL: 68.5
        ! javascript.0 2016-11-26 13:57:34.566 info script.js.System_Zahl_Lichter: Anzahl Lichter: 3 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:57:34.564 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:57:34.561 info script.js.System_Zahl_Lichter: Licht Nr. 2: 1:wohnen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:34.560 info script.js.System_Zahl_Lichter: Licht Nr. 1: 1:essen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:34.559 info script.js.System_Zahl_Lichter: Licht Nr. 0: 2:bad_licht gross.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:34.557 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.0.LEQ0126380.1.LEVEL: 72
        ! javascript.0 2016-11-26 13:57:31.281 info script.js.System_Zahl_Lichter: Anzahl Lichter: 3 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:57:31.280 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:57:31.280 info script.js.System_Zahl_Lichter: Licht Nr. 2: 1:wohnen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:31.279 info script.js.System_Zahl_Lichter: Licht Nr. 1: 1:essen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:31.278 info script.js.System_Zahl_Lichter: Licht Nr. 0: 2:bad_licht gross.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:31.277 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.0.LEQ0126380.1.LEVEL: 67.5
        ! javascript.0 2016-11-26 13:57:30.940 info script.js.System_Zahl_Lichter: Anzahl Lichter: 3 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:57:30.940 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:57:30.939 info script.js.System_Zahl_Lichter: Licht Nr. 2: 1:wohnen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:30.937 info script.js.System_Zahl_Lichter: Licht Nr. 1: 1:essen_licht.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:30.935 info script.js.System_Zahl_Lichter: Licht Nr. 0: 2:bad_licht gross.LEVEL: undefined
        ! javascript.0 2016-11-26 13:57:30.932 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.0.LEQ0126380.1.LEVEL: 0.5
        ! javascript.0 2016-11-26 13:57:21.477 info script.js.System_Zahl_Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:57:21.477 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:57:21.471 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.1.JEQ0713856.13.STATE: true
        ! javascript.0 2016-11-26 13:56:46.723 info script.js.System_Zahl_Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
        ! javascript.0 2016-11-26 13:56:46.722 info script.js.System_Zahl_Lichter: Text:
        ! javascript.0 2016-11-26 13:56:46.713 info script.js.System_Zahl_Lichter: Auslösender Aktor: hm-rpc.1.JEQ0713856.15.STATE: true
        ! javascript.0 2016-11-26 13:55:31.735 info script.js.System_Zahl_Lichter: registered 21 subscriptions and 0 schedules
        ! javascript.0 2016-11-26 13:55:31.670 info Start javascript script.js.System_Zahl_Lichter

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo zusammen,

          ich habe mir das Skript nochmal vorgenommen, es war ein grundlegender Fehler drin (obwohl Bluefox das http://forum.iobroker.net/viewtopic.php?f=21&t=473&p=5511 schon korrekt erklärt/vorgekaut hatte) :oops: :

          Die Anzahl und Liste der Geräte wurde bei jeder Auslösung ja genullt/geleert. Wenn also ein Dimmer eingeschaltet wurde, dann wurden alle Schalter (State) gelöscht und nicht wieder durchgezählt. Genauso, nur umgekehrt, wenn ein State auf true ging.

          Das neue Skript hat das nun korrigiert. Es gibt eine besseres logging. Das sollte aber nach dem ausgeschaltet werden, da es viele Zeilen im Log produziert.

          Ausserdem wird die Liste der eingeschalteten Geräte nun alphabetisch sortiert.

          Die Struktur und der Pfad der Datenpunkte sind neu (bei mir) und ggf. anzupassen (auch in den Widgets).

          Es gibt

          • Anzahl aller Licht

          • Anzahl eingeschalteter Lichter

          • Text mit allen eingeschalteten Lichtern

          • Ansage(text) mit Aufzählung der eingeschalteten Lichter oder mit sprechbarem Text, wenn kein Licht eingeschaltet

          Das Skript startet, wenn einer der betreffenden Aktoren im Gewerk "Licht" seinen Wert ändert und jetzt auch nach dem Skriptstart (2s verzögert).

          Wer die Abfrage nach den Virtuellen Kanälen oder den CUXD-Geräten nicht braucht, kann die beiden if-Abfragen (State und Level) einfach rausnehmen oder auskommentieren. Aber nur die Abfrage, nicht den Inhalt!

          ! ````
          /* 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: http://forum.iobroker.net/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?f=21&t=473&start=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
          */
          var logging = false;
          ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
          idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
          idText = 'javascript.0.Status.Lichter.Text',
          idAnsage = 'javascript.0.Status.Lichter.Ansage';

          // Abhier 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'
          });

          ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
          var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
          ! 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 = [];
          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
          // ########## 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
          }
          ++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
              // ########## 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
                  }
                  ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              } // Ende Abfrage VK 
          });   
          
          // Array mit Lichternamen sortieren
          textLichterAn.sort();
          // 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
          }

          ! // 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();
          });
          ! 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);
          });

          
          Bitte um Feedback!
          
          Hier noch ein Widget (bzw. zwei übereinanderliegende Widgets):
          

          [{"tpl":"tplMetroTileDialogStatic","data":{"visibility-cond":"==","visibility-val":1,"hover":false,"transform":"true","bg_class":"bg-transparent","icon_class":"","icon_badge":"","badge_bg_class":"","brand_bg_class":"","dialog_draggable":"true","dialog_icon_class":"","name":"Lichter Dialog liegt oben","label":"","content_oid":"","html":"{javascript.0.Status.Lichter.Text}","dialog_width":"800px","dialog_height":"500px","dialog_title":"Diese Lichter sind eingeschaltet ({javascript.0.Status.Lichter.Anzahl_ein})","dialog_shadow":true,"gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"dialog_flat":true,"dialog_modal":true,"label_prepend":"von {javascript.0.Servicemeldungen.Homematic.UNREACH.moegliche} ","visibility-groups-action":"hide"},"style":{"left":"364px","top":"508px","z-index":"30","width":"137px","height":"137px"},"widgetSet":"metro"},{"tpl":"tplMetroTileString","data":{"visibility-cond":"==","visibility-val":1,"bg_class_true":"ribbed-yellow","bg_class_false":"bg-transparent","icon_class_true":"icon-custom","icon_class_false":"icon-custom","badge_bg_class_true":"","badge_bg_class_false":"","icon_badge_true":"","icon_badge_false":"","brand_bg_class_true":"","brand_bg_class_false":"","name":"Lichter an","visibility-oid":"","content_prepend":"Lichter an  ","content_append":"","content_oid":"javascript.0.Status.Lichter.Anzahl_ein","label_prepend":"von {javascript.0.Status.Lichter.Anzahl} ","label_append":" Lichtern","label_id":"","state_oid":"javascript.0.Status.Lichter.Anzahl_ein","transform":false,"select_on_true":false,"icon":"/vis.0/main/img/schritte.png","icon_width":"60","icon_height":"60","icon_false":"/icons-mfd-png/light_light.png","icon_top":"38","icon_left":"40","hover":false,"html":"Homematic Hardware","icon_true":"/icons-mfd-png/light_light_dim_100.png","badge_top":"0","badge_left":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"dialog_title":"Diese Lichter sind eingeschaltet ({javascript.0.Status.Lichter.Anzahl_ein})","visibility-groups-action":"hide"},"style":{"left":"364px","top":"508px","width":"137px","height":"137px","z-index":"15","font-family":"","color":"","font-size":""},"widgetSet":"metro"}]

          
          Hier noch für Interessierte das CSS für den Dialogstil für den Reiter CSS in VIS (2spaltige Darstellung)
          
          >! ````
          .dialogstil {
              height: 96%;
              width: 99%;
              padding: 15px 0 0 15px;
             /* background: url(http://192.168.178.38:8082/vis/img/back/oblique-line-bk.png) repeat scroll 0% 0% / auto padding-box border-box, rgba(0, 0, 0, 0) radial-gradient(50% 105.41% at 50% 350px, rgb(66, 140, 189) 0px, rgb(39, 98, 134) 20%, rgb(34, 78, 114) 33%, rgb(0, 3, 41) 100%) repeat scroll 0% 0% / auto padding-box border-box; */
              font-family: futura; 
              font-size: 16px;
              color: rgba(250,250,250,1);
              overflow-y: hidden;
              column-count: 2;
              column-gap: 20px;
              column-rule: 1px solid rgba(250,250,250,0.6);
          }
          

          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • S
            stephan61 last edited by

            Danke Pix

            für das Script

            Funktioniert super !!

            kann man auch Hue lampen mit einbinden ?

            Gruß Stephan

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              HAllo,

              ich habe leider keine HUE-Lampen, aber denkbar ist die Einbindung aller Geräte mit einem Datenpunkt LEVEL. Ausserdem sollten sie dem Gewerk/Enum "Licht" zugeordnet sein.

              Gruß

              Pix

              1 Reply Last reply Reply Quote 0
              • B
                BobBruni last edited by

                Anscheinend mache ich grundlegend etwas Falsch! Es funktioniert einfach nicht…

                Hier nochmal mein Log:

                ! javascript.0 2016-11-28 20:01:00.604 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:01:00.602 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 50
                ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:00:58.093 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:00:58.092 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 40.5
                ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 50
                ! hm-rpc.0 2016-11-28 20:00:57.774 info hm-rpc.0 setValue ["LEQ0126380:1","LEVEL",{"explicitDouble":0.5}] FLOAT
                ! javascript.0 2016-11-28 20:00:39.341 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:00:39.339 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:00:39.339 info javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.17.STATE: true
                ! hm-rpc.1 2016-11-28 20:00:39.328 info hm-rpc.1 setValue ["JEQ0713856:17","STATE",true] BOOL
                ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:00:37.931 info javascript.0 script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:00:37.931 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:00:37.930 info javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.14.STATE: true
                ! hm-rpc.1 2016-11-28 20:00:37.921 info hm-rpc.1 setValue ["JEQ0713856:14","STATE",true] BOOL
                ! javascript.0 2016-11-28 20:00:22.942 info script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                ! javascript.0 2016-11-28 20:00:22.942 info script.js.Lichter: Text:
                ! javascript.0 2016-11-28 20:00:22.941 info script.js.Lichter: #### DIMMER #####
                ! javascript.0 2016-11-28 20:00:22.937 info script.js.Lichter: #### SCHALTER #####
                ! javascript.0 2016-11-28 20:00:22.934 info script.js.Lichter: ++++++ Lichter Anzahl ++++
                ! javascript.0 2016-11-28 20:00:22.931 info script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.13.STATE: true
                ! hm-rpc.1 2016-11-28 20:00:22.925 info setValue ["JEQ0713856:13","STATE",true] BOOL
                ! web.0 2016-11-28 20:00:15.902 info 2016-11-28T19:00:15.902Z Connected system.user.admin
                Was muss bei der Adapterkonfiguration bei "zusätzliche NPM Module" eingetragen werden?

                Gruß

                Bob

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

                  Hallo pix

                  mir geht es ebenfalls so

                  verwende Script 28.11.2016 02:46

                  ! ````
                  20:27:02.340
                  [info]
                  javascript.0 Start javascript script.js.Lichter
                  20:27:02.341
                  [info]
                  javascript.0 script.js.Lichter: registered 15 subscriptions and 0 schedules
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: Auslöser Skriptstart
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: #### SCHALTER #####
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: #### DIMMER #####
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: Text:
                  20:27:04.345
                  [info]
                  javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                  20:27:12.051
                  [info]
                  javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.JEQ0475027.1.LEVEL: 0
                  20:27:12.052
                  [info]
                  javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                  20:27:12.053
                  [info]
                  javascript.0 script.js.Lichter: #### SCHALTER #####
                  20:27:12.053
                  [info]
                  javascript.0 script.js.Lichter: #### DIMMER #####
                  20:27:12.053
                  [info]
                  javascript.0 script.js.Lichter: Text:
                  20:27:12.053
                  [info]
                  javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                  20:27:15.913
                  [info]
                  javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.0.HEQ0149562.1.STATE: true
                  20:27:15.913
                  [info]
                  javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                  20:27:15.914
                  [info]
                  javascript.0 script.js.Lichter: #### SCHALTER #####
                  20:27:15.914
                  [info]
                  javascript.0 script.js.Lichter: #### DIMMER #####
                  20:27:15.914
                  [info]
                  javascript.0 script.js.Lichter: Text:
                  20:27:15.914
                  [info]
                  javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
                  20:27:26.478
                  [info]
                  javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.0.IEQ0405132.1.STATE: false
                  20:27:26.479
                  [info]
                  javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
                  20:27:26.480
                  [info]
                  javascript.0 script.js.Lichter: #### SCHALTER #####
                  20:27:26.480
                  [info]
                  javascript.0 script.js.Lichter: #### DIMMER #####
                  20:27:26.480
                  [info]
                  javascript.0 script.js.Lichter: Text:
                  20:27:26.480
                  [info]
                  javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0

                  
                  Mausi70
                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    Hallo Bob,
                    @BobBruni:

                    Was muss bei der Adapterkonfiguration bei "zusätzliche NPM Module" eingetragen werden? `
                    Keine!

                    Dein Log sagt mir, dass das eingeschaltete Gerät schon erkannt wird. Das Durchzählen klappt aber nicht.

                    Du und mausi70 haben vermutlich auch kein Interesse an den Abfragen nach Virtuellen oder CUxD Kanälen.

                    Deshalb setzt bitt vor Zeile 73 if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { und vor Zeile 84 } // ENDE VK-Abfrageund vor Zeile 94 if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachtenund schließlich vor Zeile 105 } // Ende Abfrage VK bitt einmal zwei Schrägstriche zum Auskommentieren````
                    //

                    
                    Gruß
                    
                    Pix
                    1 Reply Last reply Reply Quote 0
                    • M
                      mausi70 last edited by

                      Hallo pix

                      jetzt funktioniert

                      habe etwas ausprobiert, liegt an Zeile 73 bei mir. Cux Geräte sind aber bei mir ein Thema.

                      Danke erstmal für die Schnelle Hilfe

                      Mausi70

                      1 Reply Last reply Reply Quote 0
                      • B
                        BobBruni last edited by

                        Hallo Pix,

                        besten Dank!! Funktioniert super!!!!

                        Gruß

                        Bob

                        1 Reply Last reply Reply Quote 0
                        • B
                          baluderbär last edited by

                          @BobBruni:

                          Hallo Pix,

                          besten Dank!! Funktioniert super!!!!

                          Gruß

                          Bob `
                          Hallo Pix, ich bin bisher nicht dazu gekommen es zu testen. Aber da es bei den beiden anderen funktioniert, gehe ich davon aus, dass es auch bei mir läuft und bedanke mich schon einmal im Voraus. Daumen hoch.

                          Viele Grüße

                          Balu

                          Gesendet von iPhone mit Tapatalk

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            @mausi70:

                            Hallo pix

                            jetzt funktioniert

                            habe etwas ausprobiert, liegt an Zeile 73 bei mir. Cux Geräte sind aber bei mir ein Thema.

                            Danke erstmal für die Schnelle Hilfe

                            Mausi70 `
                            Bei mir sind sie ein Thema, da ich noch aus Zeiten, in denen ich ausschließlich über HM automatisiert habe, einige CUx-Geräte zB für die Türfensterkontakte in der CCU habe. Sie haben Statistik Werte u.ä. geliefert. Ich brauche die nicht mehr, sie sind aber noch da. Könnte sie eigentlich löschen.

                            Wenn du über CUxD Lampen eingebunden hast, sollte das Ausklammern der Abfrage der richtige Weg sein.

                            Gruß

                            Pix

                            1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active last edited by

                              Guten Morgen,

                              Kann man das Script mit einer variablen erweitern wo die Räume angezeigt werden.

                              (Analog altem ccu.io Script)

                              Also:

                              Eine Variable wo die Räume angezeigt werden in denen Licht an ist.

                              Mit freundlichen Grüßen

                              Dieter

                              1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active last edited by

                                Ich bekomms nicht hin (mit den Räumen).

                                Keiner eine Idee?

                                mfg

                                Dieter

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  Dieter, habs probiert, bin aber nicht fertig geworden. Bin zur Zeit nicht in der Nähe von iobroker und kann nicht testen. Sorry.

                                  Pix

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    pix last edited by

                                    Hallo,

                                    hier die Variante, die auch den Raumnamen liefert.

                                    ! ````
                                    /* 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: http://forum.iobroker.net/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?f=21&t=473&start=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 = false;
                                    ! 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');
                                    ! 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 
                                    });   
                                    
                                    // 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
                                    }

                                    ! // 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();
                                    });
                                    ! 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);
                                    });
                                    ! ````

                                    Mir fehlte noch die Ausgabe des passenden Raumes zum Licht. Dieser Thread hat mir geholfen: http://forum.iobroker.net/viewtopic.php?t=1085#p8731

                                    Suche die Zeilen mit diesem Kommentar, dort sind die Neuerungen.````
                                    // <---- NEU

                                    Es wird wieder ein Array erstellt, in das die Namen der betroffenen Räume geschrieben werden, sobald ein Licht dazukommt oder wegfällt (bei Änderung). Genau genommen werden bei jeder Änderung alle Lampen neu durchgeprüft und ihr Status/Level abgefragt. Wenn der Status __true__ oder das Level größer als __0__, dann wird der Raumname des Aktors ins Array geschrieben.
                                    
                                    Das Objekt ist idRaum, die Raumnamen werden alphabetisch sortiert jeweils in eine neue Zeile geschrieben (.sort() und "
                                    ").
                                    
                                    Gruß
                                    
                                    Pix
                                    1 Reply Last reply Reply Quote 0
                                    • bahnuhr
                                      bahnuhr Forum Testing Most Active last edited by

                                      Super, Danke schön.

                                      Funktioniert einwandfrei.

                                      Ich hatte mir die Datenpunkte von den eq3-Scripten angeschaut.

                                      Dort war auch dieses.

                                      .rooms

                                      und enum

                                      aufgeführt.

                                      Habs aber nicht hingekommen.

                                      Nochmals danke.

                                      mfg

                                      Dieter

                                      1 Reply Last reply Reply Quote 0
                                      • bahnuhr
                                        bahnuhr Forum Testing Most Active last edited by

                                        Hallo Pix,

                                        habe dein Script mal abgeändert auf: Heizung.

                                        Also: Wo ist überall die Heizung an !

                                        Folglich: State von Licht entfernt.

                                        valve_state von heizung eingefügt.

                                        Ich habe aber irgendwo noch nen Knicks drin.

                                        Kannst du mal drüberschauen. Dürfte für andere vielleicht auch interessant sein.

                                        In dashui hatte ich diese Scripte für:

                                        Licht, Heizung und Bewegung.

                                        /* Status Zahl Heizung
                                        
                                        zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
                                        Daten kommen vom Gewerk "Heizung"
                                        
                                        23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
                                        */
                                        var logging = true;
                                        
                                        var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
                                            idAnzahl =    'javascript.0.Status.Heizung.Anzahl',
                                            idText =      'javascript.0.Status.Heizung.Text',
                                            idRaum =      'javascript.0.Status.Heizung.Raum',
                                            idAnsage =    'javascript.0.Status.Heizung.Ansage';
                                        
                                        // Ab hier nix mehr ändern
                                        createState(idAnzahl, {     // wenn benötigt: Anzahl der vorhandenen Heizung
                                            type: 'number',
                                            name: 'Anzahl aller Heizung',
                                            min: 0,
                                            def: 0,
                                            role: 'value'
                                        });
                                        createState(idAnzahlEin, {  // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
                                            type: 'number',
                                            name: 'Anzahl der eingeschalteten Heizung',
                                            min: 0,
                                            def: 0,
                                            role: 'value'
                                        });
                                        createState(idText, {      // Anzahl der brennenden Heizung und deren Namen als Variable unter Javascript.0 anlegen
                                            type: 'string',
                                            name: 'Eingeschaltete Heizung',
                                            desc: 'Namen der eingeschalteten Heizung',
                                            def: ' ',
                                            role: 'value'
                                        });
                                        createState(idAnsage, {
                                            type: 'string',
                                            name: 'Eingeschaltete Heizung (Ansage)',
                                            desc: 'Namen der eingeschalteten Heizung (für Ansage aufbereitet)',
                                            def: ' ',
                                            role: 'value'
                                        });
                                        createState(idRaum, {
                                            type: 'string',
                                            name: 'Räume mit eingeschalteten Heizung',
                                            desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
                                            def:  ' ',
                                            role: 'value'
                                        });
                                        
                                        var cacheSelectorLevel = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
                                        
                                        function checkDevices(obj) {
                                             // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
                                            var anzahlHeizungAn = 0;
                                            var anzahlHeizung = 0;
                                            var textHeizungAn = [];
                                            var textRaum = [];
                                            if (logging) log('++++++ Heizung Anzahl ++++ ');
                                            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");
                                        
                                                // ########## 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(VALVE_STATE) > 0) {                               // Wenn Dimmwert über 0
                                                        ++anzahlHeizungAn;    
                                                        textHeizungAn.push(devicename);                         // Zu Array hinzufügen
                                                        textRaum.push(raumname.enumNames);  
                                                    }
                                                    ++anzahlHeizung;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                        //        } // Ende Abfrage VK 
                                            });   
                                        
                                            // Array mit Lichternamen sortieren
                                            textHeizungAn.sort();
                                            textRaum.sort();
                                            // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                            if (logging) log("Text: " + textHeizungAn);
                                            if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
                                            // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                            setState(idText, textHeizungAn.join(',
                                        '));    // Schreibt die aktuelle Namen der eingeschalteten Heizung
                                            setState(idAnzahlEin, textHeizungAn.length);        // Schreibt die aktuelle Anzahl der eingeschalteten Heizung
                                            setState(idAnzahl, anzahlHeizung);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                            setState(idRaum, textRaum.join(', '));         // Räume, in denen Heizung an ist
                                        }
                                        
                                        // Trigger
                                        cacheSelectorLevel.on(function(obj) {    // bei Zustandänderung *.LEVEL im Gewerk Licht
                                           if (logging) log('Auslösende Heizung: ' + 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 ) ? 'Heizung eingeschaltet: ' + strip_tags(text) : 'Alle Heizung sind ausgeschaltet';
                                            setState(idAnsage, text);
                                        });
                                        

                                        mfg

                                        Dieter

                                        1 Reply Last reply Reply Quote 0
                                        • bahnuhr
                                          bahnuhr Forum Testing Most Active last edited by

                                          Hallo,

                                          und nur nun das Script für Bewegungsmelder.

                                          Dieses läuft.

                                          Gewerk: Bewegungsmelder

                                          Die id mit der Ansage habe ich entfernt. Wenn gewünscht kann man es aber wieder einsetzen.

                                          /* Status Zahl Bewegung
                                          
                                          zählt die Bewegung in allen Räumen und meldet die Eingeschalteten namentlich
                                          Daten kommen vom Gewerk "Bewegung"
                                          
                                          23.12.2016 Script von pix; geändert von Bahnuhr auf Bewegung
                                          */
                                          var logging = false;
                                          
                                          var idAnzahlEin = 'javascript.0.Status.Bewegung.Anzahl_ein',
                                              idAnzahl =    'javascript.0.Status.Bewegung.Anzahl',
                                              idRaum =      'javascript.0.Status.Bewegung.Raum';
                                          
                                          // Ab hier nix mehr ändern
                                          createState(idAnzahl, {     // wenn benötigt: Anzahl der vorhandenen Bewegung
                                              type: 'number',
                                              name: 'Anzahl aller Bewegung',
                                              min: 0,
                                              def: 0,
                                              role: 'value'
                                          });
                                          createState(idAnzahlEin, {  // Anzahl der Bewegung, die auf sind als Variable unter Javascript.0 anlegen
                                              type: 'number',
                                              name: 'Anzahl der vorhandenen Bewegung',
                                              min: 0,
                                              def: 0,
                                              role: 'value'
                                          });
                                          createState(idRaum, {
                                              type: 'string',
                                              name: 'Räume mit Bewegung',
                                              desc: 'Namen der Räume, in denen Bewegung ist',
                                              def:  ' ',
                                              role: 'value'
                                          });
                                          
                                          var cacheSelectorState = $('channel[state.id=*.MOTION](functions="Bewegungsmelder")'); // Gewerk Bewegungsmelder
                                          
                                          function checkDevices(obj) {
                                               // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                              var anzahlBewegungAn = 0;
                                              var anzahlBewegung = 0;
                                              var textRaum = [];
                                              if (logging) {
                                                  log('++++++ Bewegung Anzahl ++++ ');
                                                  log('#### SCHALTER ##### ');
                                              }
                                              cacheSelectorState.each(function (id, i) {                       // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                                  var obj    = getObject(id);
                                                  var status = getState(id).val;                              // Zustand *.STATE abfragen (jedes Element)
                                                  var raumname = getObject(id, "rooms"); 
                                          
                                                      if (logging) {
                                                          log('-------');
                                                          log('Kanal: ' + name);
                                                          log('Status: ' + status); 
                                                      }
                                                      if (status) {                                      // wenn Zustand = true, dann wird die Anzahl der Bewegung hochgezählt
                                                          ++anzahlBewegungAn;  
                                                          textRaum.push(raumname.enumNames); 
                                                      }
                                                      ++anzahlBewegung;                                            // Zählt die Anzahl der vorhandenen Bewegung unabhängig vom Status
                                              });
                                          
                                              // Array mit Lichternamen sortieren
                                              textRaum.sort(); 
                                              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                              if (logging) log("Anzahl Bewegung: " + anzahlBewegung + " # davon Bewegung an: " + anzahlBewegungAn);
                                              // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                              setState(idAnzahl, anzahlBewegung);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Bewegung
                                              setState(idAnzahlEin, anzahlBewegungAn); 
                                              setState(idRaum, textRaum.join(', '));         // Räume, in denen Bewegung ist
                                          }
                                          
                                          // Trigger
                                          cacheSelectorState.on(function(obj) {    // bei Zustandänderung *.STATE im Gewerk Bewegung
                                             if (logging) log('Auslösende Bewegung: ' + 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
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • bahnuhr
                                            bahnuhr Forum Testing Most Active last edited by

                                            So, habs hinbekommen.

                                            Anbei nun die 3 Scripte die bei mir laufen.

                                            Licht:

                                            ! /* 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: http://forum.iobroker.net/viewtopic.php … 79c1#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 = false;
                                            ! 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');
                                            ! 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
                                            ! });
                                            ! // 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();
                                            ! });
                                            ! 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);
                                            ! });

                                            Heizung:

                                            ! /* Status Zahl Heizung
                                            ! zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
                                            ! Daten kommen vom Gewerk "Heizung"
                                            ! 23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
                                            ! */
                                            ! var logging = true;
                                            ! var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
                                            ! idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
                                            ! idRaum = 'javascript.0.Status.Heizung.Raum';
                                            ! // Ab hier nix mehr ändern
                                            ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
                                            ! type: 'number',
                                            ! name: 'Anzahl aller Heizung',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
                                            ! type: 'number',
                                            ! name: 'Anzahl der eingeschalteten Heizung',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idRaum, {
                                            ! type: 'string',
                                            ! name: 'Räume mit eingeschalteten Heizung',
                                            ! desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! var cacheSelectorLevel = $('channelstate.id=*.VALVE_STATE'); // Gewerk Heizung
                                            ! function checkDevices(obj) {
                                            ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
                                            ! var anzahlHeizungAn = 0;
                                            ! var anzahlHeizung = 0;
                                            ! var textRaum = [];
                                            ! if (logging) log('++++++ Heizung Anzahl ++++ ');
                                            ! cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                            ! var obj = getObject(id);
                                            ! var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                                            ! var raumname = getObject(id, "rooms");
                                            ! if (logging) {
                                            ! log('–-----');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status + '%');
                                            ! }
                                            ! if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                                            ! ++anzahlHeizungAn;
                                            ! textRaum.push(raumname.enumNames);
                                            ! }
                                            ! ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                            ! });
                                            ! // Array mit Lichternamen sortieren
                                            ! textRaum.sort();
                                            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                            ! if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
                                            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                            ! setState(idAnzahlEin, anzahlHeizungAn);
                                            ! setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                            ! setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
                                            ! }
                                            ! // Trigger
                                            ! cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                                            ! if (logging) log('Auslösende Heizung: ' + 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

                                            Bewegung:

                                            ! /* Status Zahl Bewegung
                                            ! zählt die Bewegung in allen Räumen und meldet die Eingeschalteten namentlich
                                            ! Daten kommen vom Gewerk "Bewegung"
                                            ! 23.12.2016 Script von pix; geändert von Bahnuhr auf Bewegung
                                            ! */
                                            ! var logging = false;
                                            ! var idAnzahlEin = 'javascript.0.Status.Bewegung.Anzahl_ein',
                                            ! idAnzahl = 'javascript.0.Status.Bewegung.Anzahl',
                                            ! idRaum = 'javascript.0.Status.Bewegung.Raum';
                                            ! // Ab hier nix mehr ändern
                                            ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Bewegung
                                            ! type: 'number',
                                            ! name: 'Anzahl aller Bewegung',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnzahlEin, { // Anzahl der Bewegung, die auf sind als Variable unter Javascript.0 anlegen
                                            ! type: 'number',
                                            ! name: 'Anzahl der vorhandenen Bewegung',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idRaum, {
                                            ! type: 'string',
                                            ! name: 'Räume mit Bewegung',
                                            ! desc: 'Namen der Räume, in denen Bewegung ist',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! var cacheSelectorState = $('channelstate.id=*.MOTION'); // Gewerk Bewegungsmelder
                                            ! function checkDevices(obj) {
                                            ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                            ! var anzahlBewegungAn = 0;
                                            ! var anzahlBewegung = 0;
                                            ! var textRaum = [];
                                            ! if (logging) {
                                            ! log('++++++ Bewegung Anzahl ++++ ');
                                            ! log('#### SCHALTER ##### ');
                                            ! }
                                            ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                            ! var obj = getObject(id);
                                            ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                            ! var raumname = getObject(id, "rooms");
                                            ! if (logging) {
                                            ! log('–-----');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status);
                                            ! }
                                            ! if (status) { // wenn Zustand = true, dann wird die Anzahl der Bewegung hochgezählt
                                            ! ++anzahlBewegungAn;
                                            ! textRaum.push(raumname.enumNames);
                                            ! }
                                            ! ++anzahlBewegung; // Zählt die Anzahl der vorhandenen Bewegung unabhängig vom Status
                                            ! });
                                            ! // Array mit Lichternamen sortieren
                                            ! textRaum.sort();
                                            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                            ! if (logging) log("Anzahl Bewegung: " + anzahlBewegung + " # davon Bewegung an: " + anzahlBewegungAn);
                                            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                            ! setState(idAnzahl, anzahlBewegung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Bewegung
                                            ! setState(idAnzahlEin, anzahlBewegungAn);
                                            ! setState(idRaum, textRaum.join(', ')); // Räume, in denen Bewegung ist
                                            ! }
                                            ! // Trigger
                                            ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Bewegung
                                            ! if (logging) log('Auslösende Bewegung: ' + 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

                                            Danke an alle, insbesondere an pix.

                                            mfg

                                            bahnuhr

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            894
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            10
                                            34
                                            4775
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo