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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Lichter Script funktioniert nicht

NEWS

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

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

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

Lichter Script funktioniert nicht

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
10 Beiträge 2 Kommentatoren 655 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    saxonica
    schrieb am zuletzt editiert von
    #1

    Hallo, habe im Script folgende Problemzeilen:

    var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); // Gewerk Licht
    var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")');
    

    Im anhängenden Screenshot seht ihr die enum.functions

    Das Gewerk Licht steckt wie viele andere Gewerke unter "Object object". Warum? Ich weiß es nicht und hab keine Ahnung wie ich das Gewerk "Licht" da drin ansprechen soll.

    Alternativ habe ich ein neues Gewerk "Lichter" in der HM-Zentrale erstellt und alle Lampen dort zugeordnet.

    Leider funktionieren dann aber auch die abgewandelten Codezeilen nicht:

    var cacheSelectorState = $('channel[state.id=*.STATE](functions="Lichter")'); // Gewerk Licht
    var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Lichter")');
    

    Ich hoffe ihr könnt mir helfen.

    Ach ja…meine HM läuft auf einem Raspberry (Raspberrymatic). Aktuellste Firmware.
    10010_screenshot-192.168.2.135_8081-2018-11-27-09-23-58.png

    1 Antwort Letzte Antwort
    0
    • bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #2

      Müsste funktionieren mit "Lichter"

      Was hast du bei dem Reiter "Aufzählungen"; und dann "Funktionen".

      Sind dann bei "Lichter" alle HM-Geräte aufgeführt ?

      Wenn nicht, musst du auf der ccu2 unter Gewerk "Lichter" anklicken.

      mfg


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        saxonica
        schrieb am zuletzt editiert von
        #3

        Wo finde ich den Reiter "Aufzählungen"?

        Ja bei "Lichter" sind alle drin. Siehe Screenshot.

        Mit "Lichter" findet er keine Geräte.
        10010_screenshot-192.168.2.135_8081-2018-11-27-10-49-03.png

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          saxonica
          schrieb am zuletzt editiert von
          #4

          Habe die aktuelle ioBroker Version 3.5.10. Hier gibt es in der Übersicht den Reiter "Aufzählungen" nicht mehr.

          1 Antwort Letzte Antwort
          0
          • bahnuhrB Online
            bahnuhrB Online
            bahnuhr
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #5

            Ja ich habe auch 3.5.10.

            Klicke mal ganz links oben auf das Dreieck und wähle dann aus.


            Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
            Danke.
            gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
            ScreenToGif :https://www.screentogif.com/downloads.html

            1 Antwort Letzte Antwort
            0
            • bahnuhrB Online
              bahnuhrB Online
              bahnuhr
              Forum Testing Most Active
              schrieb am zuletzt editiert von
              #6

              Wenn die Aktoren alle drin sind, dann muss das Script auch laufen.

              Stell bitte mal das komplette Script ein.


              Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
              Danke.
              gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
              ScreenToGif :https://www.screentogif.com/downloads.html

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                saxonica
                schrieb am zuletzt editiert von
                #7

                @bahnuhr: Vielen Dank. Das Dreieck hatte ich übersehen.

                Hier der Screenshot:
                10010_screenshot-192.168.2.135_8081-2018-11-28-07-04-04.png

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  saxonica
                  schrieb am zuletzt editiert von
                  #8

                  Das komplette Script ist wie folgt:

                  /* 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 = $('channel[state.id=*.STATE](functions="Lichter")'); // Gewerk Licht
                  var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Lichter")');
                  
                  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);
                  });
                  
                  1 Antwort Letzte Antwort
                  0
                  • bahnuhrB Online
                    bahnuhrB Online
                    bahnuhr
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #9

                    Ich stelle dir mal meines ein (läuft bei mir seit Jahren einwandfrei).

                    /* 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';
                    
                    var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); // Gewerk Licht
                    var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")');
                    
                    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 
                    }); 
                    
                      // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
                    function deleteDuplicates(arr) { 
                        var temp = {}; 
                        for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
                        var r = []; 
                        for (var k in temp) r.push(k); 
                        return r;
                    }
                    
                    // Array mit Lichternamen sortieren
                    textLichterAn.sort();
                    textRaum = deleteDuplicates(textRaum);
                    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);
                    });
                    
                    

                    mfg


                    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                    Danke.
                    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                    ScreenToGif :https://www.screentogif.com/downloads.html

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      saxonica
                      schrieb am zuletzt editiert von
                      #10

                      Vielen lieben Dank. Warum auch immer. Dein Script funktioniert.

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      767

                      Online

                      32.5k

                      Benutzer

                      81.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe