Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Suche nach einem funktionsfähigen Skript...

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    231

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

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

Suche nach einem funktionsfähigen Skript...

Suche nach einem funktionsfähigen Skript...

Scheduled Pinned Locked Moved JavaScript
javascript
7 Posts 3 Posters 566 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • malorossM Offline
    malorossM Offline
    maloross
    wrote on last edited by
    #1

    Es gibt gerade im Skript-Bereich eine ganze Anzahl an unterschiedlichen Threads, die sich mit Teilaspekten eines einzigen Skriptes beschäftigen, bspw. das Zählen von Lichtern. Hatte ich auch im Einsatz, leicht an meine Bedürfnisse angepasst.
    Seit geraumer Zeit geht's halt nicht mehr, vermutlich wegen dem Befehl $cacheSelector.

    Lange Rede, kurzer Sinn: in allen Threads finden sich komplette Skripte, die bei mir alle nicht funktionieren.Bisher habe ich 17 getestet; teils mit Fehlermeldungen, teils ohne. Aber immer ohne dass auch nur ein einziger Wert ermittelt wurde.

    Gibt es eine Ecke, wo aktuelle und voll funktionsfähige Skripte zu finden sind? Oder zumindest eine Anleitung, was an meinem alten Skript genau zu ändern ist.

    Auch Frauen können sich für Technik begeistern! ;)

    Equipment:
    diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

    PeoplesP paul53P 2 Replies Last reply
    0
    • malorossM maloross

      Es gibt gerade im Skript-Bereich eine ganze Anzahl an unterschiedlichen Threads, die sich mit Teilaspekten eines einzigen Skriptes beschäftigen, bspw. das Zählen von Lichtern. Hatte ich auch im Einsatz, leicht an meine Bedürfnisse angepasst.
      Seit geraumer Zeit geht's halt nicht mehr, vermutlich wegen dem Befehl $cacheSelector.

      Lange Rede, kurzer Sinn: in allen Threads finden sich komplette Skripte, die bei mir alle nicht funktionieren.Bisher habe ich 17 getestet; teils mit Fehlermeldungen, teils ohne. Aber immer ohne dass auch nur ein einziger Wert ermittelt wurde.

      Gibt es eine Ecke, wo aktuelle und voll funktionsfähige Skripte zu finden sind? Oder zumindest eine Anleitung, was an meinem alten Skript genau zu ändern ist.

      PeoplesP Offline
      PeoplesP Offline
      Peoples
      wrote on last edited by Peoples
      #2

      @maloross sagte in Suche nach einem funktionsfähigen Skript...:

      Versuch mal meines das läuft bei mir und mein System ist eigentlich aktuell.

      Script anbei:

      // *******************************************************************************************************
      //
      // Beleuchtung komplett 
      //
      // ********************************************************************************************************
      
      
      // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var logging = false;  // Logging on/off
      var debug = false;  // Debug on/off
      var instanz = 'javascript.0';   instanz = instanz + '.';    // 
                                                                  //
      var pfad0 =   'Beleuchtung';      pfad0 = pfad0 + '.';        // Pfad der Beleuchtung innerhalb der Instanz 
      
      var cacheSelectorState =    $('[id=*.STATE](functions="Beleuchtung")'); // Lichtschalter
      var cacheSelectorLevel =    $('[id=*.LEVEL](functions="Beleuchtung")'); // Lichtdimmer
      //var cacheSelectorSonoff =   $('channel[state.id=*.POWER](functions="Beleuchtung")'); // Sonoff Lampen
      var cacheSelectorSonoff =   $('[id=*.POWER](functions="Beleuchtung")');
      var cacheSelectorHue =      $('[id=*.ON](functions="Beleuchtung")'); // HUE Lampen 
      var cacheSelectorYEELIGHT = $('[id=*.power](functions="Beleuchtung")'); // Yeelight Lampen 
      
      var time;
      
      //Lichtautomatik 
      var timer = [];
      var GeraeteListe = [];
      // -----------------------------------------------------------------------------
      // Objekte
      // -----------------------------------------------------------------------------
      // Objekt: Zeigt den Status der Beleuchtung (irgend ein Licht an?)
      createState(pfad0 + 'Status_Lichter',  {def:'false', type:'boolean', name:'Status Beleuchtung',});
      
      // Objekt: Zeigt den Zeitstempel der letzen Änderung
      createState(pfad0 + 'Status_Lichter_Zeitstempel',  {def:'', type:'string', name:'Zeitstempel Beleuchtung_',});
      
      // Objekt: Schalte alle Lichter in Abhängikeit des Status ein oder aus
      createState(pfad0 + 'Schalter_Lichter',  {def:'false', type: 'boolean',name: 'Schalter Beleuchtung',desc: 'Schaltet alle Lichter aus, und wenn alles aus ist alle ein'});
      
      // Objekt: Anzahl der vorhandenen Lichter
      createState(pfad0 + 'Anzahl_Lichter_gesamt', {def:0, min:0, type:'number', name: 'Anzahl aller Lichter'});
      
      // Objekt: Anzahl der eingeschalteten Lichter
      createState(pfad0 + 'Anzahl_Lichter_ein', {def: 0,min: 0, type:'number', name:'Anzahl der eingeschalteten Lichter'});
      
      // Objekt: Mit den Namen der eingeschalteten Lichter
      createState(pfad0 + 'Text', {def:' ', type:'string', name: 'Eingeschaltete Lichter'});
      
      // Objekt: Ansage für Sprachausgabe
      createState(pfad0 + 'Ansage', {def:' ', type:'string', name: 'Eingeschaltete Lichter (für Ansage aufbereitet)'});
      
      // Objekt: Liste der Räume mit eingeschalteten Lichtern
      createState(pfad0 + 'Raum', {def:' ', type: 'string', name: 'Räume mit eingeschalteten Lichter'});
      
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion Prüfen der Beleuchtungsstati der einzelnen Aktoren              #
      // #  und generierung der Sprachausgabe                                        #
      // #                                                                           #
      // #############################################################################
      
      function checkDevices(obj) {
          // Zeitstempel
          var datum = formatDate(new Date(getState("javascript.0.Beleuchtung.Anzahl_Lichter_ein").lc), 'DD.MM.YYYY');
          var uhrzeit = formatDate(new Date(getState("javascript.0.Beleuchtung.Anzahl_Lichter_ein").lc), 'hh:mm:ss');
          var zeitstempel = datum +' um '+uhrzeit;
          
          // 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 Beleuchtung
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
      
              if (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
          });
          
          if (logging) log('#### DIMMER ##### ');
          cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
      
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
      
              if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status + '%');
              }
              if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                  ++anzahlLichterAn;
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
              }
              ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              // } // Ende Abfrage VK 
          });
          if (logging) log('#### SONOFF ##### ');
          cacheSelectorSonoff.each(function(id, i) { // Schleife für jedes gefundenen Element *.Power im Gewerk Beleuchtung
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.POWER abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".POWER")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
      
              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
          });
          if (logging) log('#### HUE ##### ');
          cacheSelectorHue.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Beleuchtung
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".ON")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
      
              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
          });
          if (logging) log('#### HUE ##### ');
          cacheSelectorYEELIGHT.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Beleuchtung
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.power abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".power")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
      
              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
          });
          // 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(pfad0 + 'Text', textLichterAn.join(',<br>')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
          setState(pfad0 + 'Anzahl_Lichter_ein', textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
          setState(pfad0 + 'Anzahl_Lichter_gesamt', anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
          // setState(pfad0 + 'Raum', textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
          setState(pfad0 + 'Raum', textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
          
          if(anzahlLichterAn > 0){
              setState(instanz + pfad0 + 'Status_Lichter', true);
              setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
          }
          else{
              setState(instanz + pfad0 + 'Status_Lichter', false);
              setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
          }
      }
      
      // #############################################################################
      // #                                                                           #
      // # Funktion schalten aller Aktoren des Gewerks Beleuchtung einzelnen Aktoren #
      // #                                                                           #
      // #############################################################################
      
      function switchDevices(dp) {
          cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
            if(dp){
                  if(!status) setState(id, true);
              }
              else{
                  if(status)setState(id, false);
              }
          });
          
          cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              if(dp){
                  if(parseFloat(status) === 0) setState(id, 100);
              }
              else{
                  if(parseFloat(status) > 0) setState(id, 0);
              }
          });
          cacheSelectorSonoff.each(function(id, i) { // Schleife für jedes gefundenen Sonoff Element im Gewerk Licht
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
            if(dp){
                  if(!status) setState(id, true);
              }
              else{
                  if(status)setState(id, false);
              }
          });
          cacheSelectorYEELIGHT.each(function(id, i) { // Schleife für jedes gefundenen Yeelight Element im Gewerk Licht
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
            if(dp){
                  if(!status) setState(id, true);
              }
              else{
                  if(status)setState(id, false);
              }
          });
      }
      
      
      // 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();
      });
      cacheSelectorHue.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht
          if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
          checkDevices();
      });
      cacheSelectorSonoff.on(function(obj) { // bei Zustandänderung *.POWER von Sonoff Lampen im Gewerk Licht
          if (logging) log('Auslösender Sonoff: ' + 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(/(&nbsp;|<([^>]+)>)/ig, " ");
          return (rueckgabe);
      }
      
      on(pfad0 + 'Text', function(obj) {
          var text = obj.state.val;
          text = (getState(pfad0 + 'Anzahl_Lichter_gesamt').val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
          setState(pfad0 + 'Ansage', text);
      });
      
      // #############################################################################
      // #                                                                           #
      // # Alle Lichter Aus / Ein schalten                                           #
      // #                                                                           #
      // #############################################################################
      
      //Hier können alle Lichter ein/aus geschaltet werden
      on("javascript.0.Beleuchtung.Schalter_Lichter", function(dp) { 
            if(getState("javascript.0.Beleuchtung.Status_Lichter").val){
             switchDevices(false);
          }  
          else{
              switchDevices(true);
          }
             
      });
      
      

      Ich beantworte keine Fragen zu Themen via PN

      malorossM 1 Reply Last reply
      0
      • malorossM maloross

        Es gibt gerade im Skript-Bereich eine ganze Anzahl an unterschiedlichen Threads, die sich mit Teilaspekten eines einzigen Skriptes beschäftigen, bspw. das Zählen von Lichtern. Hatte ich auch im Einsatz, leicht an meine Bedürfnisse angepasst.
        Seit geraumer Zeit geht's halt nicht mehr, vermutlich wegen dem Befehl $cacheSelector.

        Lange Rede, kurzer Sinn: in allen Threads finden sich komplette Skripte, die bei mir alle nicht funktionieren.Bisher habe ich 17 getestet; teils mit Fehlermeldungen, teils ohne. Aber immer ohne dass auch nur ein einziger Wert ermittelt wurde.

        Gibt es eine Ecke, wo aktuelle und voll funktionsfähige Skripte zu finden sind? Oder zumindest eine Anleitung, was an meinem alten Skript genau zu ändern ist.

        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #3

        @maloross sagte:

        Seit geraumer Zeit geht's halt nicht mehr

        Seit welcher Kombination der Versionen von js-controller und Javascript-Adapter ?

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Reply Last reply
        0
        • PeoplesP Peoples

          @maloross sagte in Suche nach einem funktionsfähigen Skript...:

          Versuch mal meines das läuft bei mir und mein System ist eigentlich aktuell.

          Script anbei:

          // *******************************************************************************************************
          //
          // Beleuchtung komplett 
          //
          // ********************************************************************************************************
          
          
          // -----------------------------------------------------------------------------
          // allgemeine Variablen
          // -----------------------------------------------------------------------------
          var logging = false;  // Logging on/off
          var debug = false;  // Debug on/off
          var instanz = 'javascript.0';   instanz = instanz + '.';    // 
                                                                      //
          var pfad0 =   'Beleuchtung';      pfad0 = pfad0 + '.';        // Pfad der Beleuchtung innerhalb der Instanz 
          
          var cacheSelectorState =    $('[id=*.STATE](functions="Beleuchtung")'); // Lichtschalter
          var cacheSelectorLevel =    $('[id=*.LEVEL](functions="Beleuchtung")'); // Lichtdimmer
          //var cacheSelectorSonoff =   $('channel[state.id=*.POWER](functions="Beleuchtung")'); // Sonoff Lampen
          var cacheSelectorSonoff =   $('[id=*.POWER](functions="Beleuchtung")');
          var cacheSelectorHue =      $('[id=*.ON](functions="Beleuchtung")'); // HUE Lampen 
          var cacheSelectorYEELIGHT = $('[id=*.power](functions="Beleuchtung")'); // Yeelight Lampen 
          
          var time;
          
          //Lichtautomatik 
          var timer = [];
          var GeraeteListe = [];
          // -----------------------------------------------------------------------------
          // Objekte
          // -----------------------------------------------------------------------------
          // Objekt: Zeigt den Status der Beleuchtung (irgend ein Licht an?)
          createState(pfad0 + 'Status_Lichter',  {def:'false', type:'boolean', name:'Status Beleuchtung',});
          
          // Objekt: Zeigt den Zeitstempel der letzen Änderung
          createState(pfad0 + 'Status_Lichter_Zeitstempel',  {def:'', type:'string', name:'Zeitstempel Beleuchtung_',});
          
          // Objekt: Schalte alle Lichter in Abhängikeit des Status ein oder aus
          createState(pfad0 + 'Schalter_Lichter',  {def:'false', type: 'boolean',name: 'Schalter Beleuchtung',desc: 'Schaltet alle Lichter aus, und wenn alles aus ist alle ein'});
          
          // Objekt: Anzahl der vorhandenen Lichter
          createState(pfad0 + 'Anzahl_Lichter_gesamt', {def:0, min:0, type:'number', name: 'Anzahl aller Lichter'});
          
          // Objekt: Anzahl der eingeschalteten Lichter
          createState(pfad0 + 'Anzahl_Lichter_ein', {def: 0,min: 0, type:'number', name:'Anzahl der eingeschalteten Lichter'});
          
          // Objekt: Mit den Namen der eingeschalteten Lichter
          createState(pfad0 + 'Text', {def:' ', type:'string', name: 'Eingeschaltete Lichter'});
          
          // Objekt: Ansage für Sprachausgabe
          createState(pfad0 + 'Ansage', {def:' ', type:'string', name: 'Eingeschaltete Lichter (für Ansage aufbereitet)'});
          
          // Objekt: Liste der Räume mit eingeschalteten Lichtern
          createState(pfad0 + 'Raum', {def:' ', type: 'string', name: 'Räume mit eingeschalteten Lichter'});
          
          // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          
          // #############################################################################
          // #                                                                           #
          // #  Funktion Prüfen der Beleuchtungsstati der einzelnen Aktoren              #
          // #  und generierung der Sprachausgabe                                        #
          // #                                                                           #
          // #############################################################################
          
          function checkDevices(obj) {
              // Zeitstempel
              var datum = formatDate(new Date(getState("javascript.0.Beleuchtung.Anzahl_Lichter_ein").lc), 'DD.MM.YYYY');
              var uhrzeit = formatDate(new Date(getState("javascript.0.Beleuchtung.Anzahl_Lichter_ein").lc), 'hh:mm:ss');
              var zeitstempel = datum +' um '+uhrzeit;
              
              // 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 Beleuchtung
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
          
                  if (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
              });
              
              if (logging) log('#### DIMMER ##### ');
              cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
          
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
          
                  if (logging) {
                      log('-------');
                      log('Kanal: ' + name);
                      log('Status: ' + status + '%');
                  }
                  if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                      ++anzahlLichterAn;
                      textLichterAn.push(devicename); // Zu Array hinzufügen
                      textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // Ende Abfrage VK 
              });
              if (logging) log('#### SONOFF ##### ');
              cacheSelectorSonoff.each(function(id, i) { // Schleife für jedes gefundenen Element *.Power im Gewerk Beleuchtung
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.POWER abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".POWER")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
          
                  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
              });
              if (logging) log('#### HUE ##### ');
              cacheSelectorHue.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Beleuchtung
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".ON")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
          
                  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
              });
              if (logging) log('#### HUE ##### ');
              cacheSelectorYEELIGHT.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Beleuchtung
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.power abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".power")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
          
                  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
              });
              // 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(pfad0 + 'Text', textLichterAn.join(',<br>')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
              setState(pfad0 + 'Anzahl_Lichter_ein', textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
              setState(pfad0 + 'Anzahl_Lichter_gesamt', anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
              // setState(pfad0 + 'Raum', textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
              setState(pfad0 + 'Raum', textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
              
              if(anzahlLichterAn > 0){
                  setState(instanz + pfad0 + 'Status_Lichter', true);
                  setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
              }
              else{
                  setState(instanz + pfad0 + 'Status_Lichter', false);
                  setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
              }
          }
          
          // #############################################################################
          // #                                                                           #
          // # Funktion schalten aller Aktoren des Gewerks Beleuchtung einzelnen Aktoren #
          // #                                                                           #
          // #############################################################################
          
          function switchDevices(dp) {
              cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                if(dp){
                      if(!status) setState(id, true);
                  }
                  else{
                      if(status)setState(id, false);
                  }
              });
              
              cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                  var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                  if(dp){
                      if(parseFloat(status) === 0) setState(id, 100);
                  }
                  else{
                      if(parseFloat(status) > 0) setState(id, 0);
                  }
              });
              cacheSelectorSonoff.each(function(id, i) { // Schleife für jedes gefundenen Sonoff Element im Gewerk Licht
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                if(dp){
                      if(!status) setState(id, true);
                  }
                  else{
                      if(status)setState(id, false);
                  }
              });
              cacheSelectorYEELIGHT.each(function(id, i) { // Schleife für jedes gefundenen Yeelight Element im Gewerk Licht
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                if(dp){
                      if(!status) setState(id, true);
                  }
                  else{
                      if(status)setState(id, false);
                  }
              });
          }
          
          
          // 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();
          });
          cacheSelectorHue.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht
              if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
          });
          cacheSelectorSonoff.on(function(obj) { // bei Zustandänderung *.POWER von Sonoff Lampen im Gewerk Licht
              if (logging) log('Auslösender Sonoff: ' + 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(/(&nbsp;|<([^>]+)>)/ig, " ");
              return (rueckgabe);
          }
          
          on(pfad0 + 'Text', function(obj) {
              var text = obj.state.val;
              text = (getState(pfad0 + 'Anzahl_Lichter_gesamt').val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
              setState(pfad0 + 'Ansage', text);
          });
          
          // #############################################################################
          // #                                                                           #
          // # Alle Lichter Aus / Ein schalten                                           #
          // #                                                                           #
          // #############################################################################
          
          //Hier können alle Lichter ein/aus geschaltet werden
          on("javascript.0.Beleuchtung.Schalter_Lichter", function(dp) { 
                if(getState("javascript.0.Beleuchtung.Status_Lichter").val){
                 switchDevices(false);
              }  
              else{
                  switchDevices(true);
              }
                 
          });
          
          
          malorossM Offline
          malorossM Offline
          maloross
          wrote on last edited by
          #4

          Guten Morgen,

          @paul53 Javaskript läuft bei mir mit Version 4.1.12, der Controller mit mit 2.1.1
          Ich versuche alles immer aktuell zu halten; allerdings installiere ich neue Versionen nicht gleich bei Erscheinen, sondern erst 1-2 Wochen später.

          @Peoples vielen Dank, es läuft - das wird jetzt meine Vorlage für das Zählen anderer Zustände.

          Auch Frauen können sich für Technik begeistern! ;)

          Equipment:
          diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

          paul53P 1 Reply Last reply
          1
          • malorossM maloross

            Guten Morgen,

            @paul53 Javaskript läuft bei mir mit Version 4.1.12, der Controller mit mit 2.1.1
            Ich versuche alles immer aktuell zu halten; allerdings installiere ich neue Versionen nicht gleich bei Erscheinen, sondern erst 1-2 Wochen später.

            @Peoples vielen Dank, es läuft - das wird jetzt meine Vorlage für das Zählen anderer Zustände.

            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @maloross sagte:

            Javaskript läuft bei mir mit Version 4.1.12, der Controller mit mit 2.1.1

            Diese Kombination hat offenbar Probleme mit dem $Selector.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            malorossM 1 Reply Last reply
            0
            • paul53P paul53

              @maloross sagte:

              Javaskript läuft bei mir mit Version 4.1.12, der Controller mit mit 2.1.1

              Diese Kombination hat offenbar Probleme mit dem $Selector.

              malorossM Offline
              malorossM Offline
              maloross
              wrote on last edited by
              #6

              @paul53
              Ja, ich habe die Diskussion im Thread durchgelesen, dass es damit problematisch zu sein scheint.
              Ich habe zum Glück bisher nur relativ einfach gestrickte Blockly, das Lichtzählen-Skript, dass ich auch für das Zählen anderer Verbraucher einsetzte, ist das umfangreichste und aufwendigste - zumindest bei mir.

              Auch Frauen können sich für Technik begeistern! ;)

              Equipment:
              diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

              1 Reply Last reply
              0
              • malorossM Offline
                malorossM Offline
                maloross
                wrote on last edited by
                #7

                Ich habe einen Zwave Double Switch als Lichtschalter. Da Skripting für mich noch absolutes Neuland ist und zum besseren Verständnis für mich: ich muss ich im Skript
                1. Zwei Variablen definieren
                bb46b54d-a3b6-472e-86e6-40e8a70b8efe-image.png

                2. Dazu die Schleife gemäß diesem Muster

                // Schleife für jedes gefundenen Element *.Power im Gewerk Beleuchtung
                    if (logging) log('#### ZWAVE1 ##### ');
                    cacheSelectorZwave1.each(function(id, i) {         
                	var obj = getObject(id);
                        var name = getObject(id).common.name;
                usw.
                

                3. Trigger einfügen

                cacheSelectorZwave1.on(function(obj) { 
                    if (logging) log('Auslösender Zwave1: ' + obj.id + ': ' + obj.state.val);
                    checkDevices();
                });
                

                Der Rest kann so bleiben, wie er ist. Ist meine Logik soweit korrekt?

                Auch Frauen können sich für Technik begeistern! ;)

                Equipment:
                diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                61

                Online

                32.4k

                Users

                81.3k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe