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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Lichter zählen Script läuft nicht

NEWS

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
156 Beiträge 33 Kommentatoren 29.4k Aufrufe 6 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    PrinzEisenherz1
    schrieb am zuletzt editiert von
    #129

    @noleck123 sagte in [gelöst] Lichter zählen Script läuft nicht:

    /* Status Zahl Lichter

    zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
    Daten kommen vom Gewerk "licht"

    erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
    23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
    Log Ausgabe auskommentiert
    05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
    24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
    06.05.2016 Datenpunkt für Ansagen zugefügt
    02.07.2016 abgeschaltet, da Fehler
    03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
    search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
    27.11.2016 Verschoben in Status
    Code optimiert
    23.12.2016 Räume eingebaut
    */
    var logging = true;

    var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
    idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
    idText = 'javascript.0.Status.Lichter.Text',
    idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
    idAnsage = 'javascript.0.Status.Lichter.Ansage';

    // Ab hier nix mehr ändern
    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
    type: 'number',
    name: 'Anzahl aller Lichter',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
    type: 'number',
    name: 'Anzahl der eingeschalteten Lichter',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
    type: 'string',
    name: 'Eingeschaltete Lichter',
    desc: 'Namen der eingeschalteten Lichter',
    def: ' ',
    role: 'value'
    });
    createState(idAnsage, {
    type: 'string',
    name: 'Eingeschaltete Lichter (Ansage)',
    desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
    def: ' ',
    role: 'value'
    });
    createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
    type: 'string',
    name: 'Räume mit eingeschalteten Lichter',
    desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
    def: ' ',
    role: 'value'
    });

    var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk licht
    var cacheSelectorLevel = $('channelstate.id=*.level');
    var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)

    function checkDevices(obj) {
    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
    var anzahlLichterAn = 0;
    var anzahlLichter = 0;
    var textLichterAn = [];
    var textRaum = [];

    if (logging) {
    log('++++++ Lichter Anzahl ++++ ');
    log('#### SCHALTER ##### ');
    }
    cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
    var obj = getObject(id);
    var name = getObject(id).common.name;
    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
    var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
    var raumname = getObject(id, "rooms"); // <---- NEU

    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
    /*
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status);
    }
    */

    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
    ++anzahlLichterAn;
    textLichterAn.push(devicename); // Zu Array hinzufügen
    textRaum.push(raumname.enumNames); // <---- NEU
    }
    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
    // } // ENDE VK-Abfrage

    });

    if (logging) log('#### DIMMER ##### ');
    cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
    var obj = getObject(id);
    var name = getObject(id).common.name;
    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
    var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
    var raumname = getObject(id, "rooms"); // <---- NEU

    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
    /*
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status + '%');
    }
    */

    if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
    ++anzahlLichterAn;
    textLichterAn.push(devicename); // Zu Array hinzufügen
    textRaum.push(raumname.enumNames); // <---- NEU
    }
    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
    // } // Ende Abfrage VK

    });

    if (logging) {
    log('++++++ Lichter Anzahl ++++ ');
    log('#### SCHALTER ##### ');
    }
    cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
    var obj = getObject(id);
    var name = getObject(id).common.name;
    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
    var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
    var raumname = getObject(id, "rooms"); // <---- NEU

    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
    /*
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status);
    }
    */

    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
    ++anzahlLichterAn;
    textLichterAn.push(devicename); // Zu Array hinzufügen
    textRaum.push(raumname.enumNames); // <---- NEU
    }
    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
    // } // ENDE VK-Abfrage

    });

    // Array mit Lichternamen sortieren
    textLichterAn.sort();
    textRaum.sort(); // <---- NEU
    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
    if (logging) log("Text: " + textLichterAn);
    if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
    // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
    setState(idText, textLichterAn.join(',
    ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
    setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
    setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
    // setState(idRaum, textRaum.join(',
    ')); // Räume, in denen Licht brennt // <---- NEU
    setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
    }

    // Trigger
    cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
    if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    function main() {
    setTimeout(function(){
    if (logging) log('Auslöser Skriptstart');
    checkDevices();
    }, 2000);
    }

    main(); // Skriptstart-Auslöser

    // Aufbereitung für Ansage
    function strip_tags(data) {
    var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
    return(rueckgabe);
    }

    on(idText, function (obj) {
    var text = obj.state.val;
    text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
    setState(idAnsage, text);
    });

    Hi zusammen!
    Wollte jetzt auch mal das Script für meine Shelly 1 verwenden aber leider bekomme ich das irgendwie nicht gebacken.
    Ich habe meine Shellys mit dem Shelly-Adapter in ioBroker eingebunden.
    Wie muss ich das Script ändern damit diese abgefragt werden?
    Der Datenpunkt der erfasst werden muss ist dieser:
    Bildschirmfoto vom 2019-03-03 23-07-53.png

    Für Licht verwende ich nur Shellys.

    Wie muss ich das Script ändern das alle meine Shellys abgefragt werden?
    RAW vom Datenpunkt sieht so aus

    {
      "type": "state",
      "common": {
        "def": false,
        "type": "boolean",
        "read": true,
        "write": true,
        "role": "switch",
        "name": "Switch",
        "custom": {
          "sql.0": {
            "enabled": true,
            "changesOnly": true,
            "debounce": "500",
            "maxLength": 10,
            "retention": "2678400",
            "changesRelogInterval": 0,
            "changesMinDelta": 0,
            "storageType": "Boolean",
            "aliasId": ""
          },
          "influxdb.0": {
            "enabled": true,
            "changesOnly": true,
            "debounce": "500",
            "maxLength": 10,
            "retention": "2678400",
            "changesRelogInterval": 0,
            "changesMinDelta": 0,
            "storageType": "Boolean",
            "aliasId": ""
          },
          "virtualpowermeter.0": {
            "enabled": true,
            "maxpower": "30",
            "group": "LichtWohnzimmer"
          }
        }
      },
      "native": {},
      "from": "system.adapter.shelly.0",
      "ts": 1551571293474,
      "_id": "shelly.0.SHSW-1#2BDD14#1.Relay0.Switch",
      "acl": {
        "object": 1636,
        "state": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator"
      },
      "user": "system.user.admin"
    }
    

    Gruß
    Johnny

    Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

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

      Die Frage von Johnny würde mich auch interessieren, würde das Script gerne für homematic und Shelly 1.5pm benutzen. Könnte das vielleicht jemand anpassen? :) Ich selbst habe leider keinen Bezug zur Programmierung und mich reizt dieses Script wahnsinnig. Habe selbst schon überall im Code "rumgespielt" aber komme hier leider zu keinem funktionierenden Ergebnis.

      1 Antwort Letzte Antwort
      0
      • FredFF Online
        FredFF Online
        FredF
        Most Active Forum Testing
        schrieb am zuletzt editiert von FredF
        #131

        @mech @PrinzEisenherz1
        Das Skript schaut in den Objekten nach der Funktion Licht. Wenn eure Objekte also nicht mit dieser Funktion versehen sind, zählt das Skript auch nichts.
        So gehts: Aufzählungen - Funktionen - Neue Aufzählung (+) - Licht
        Danach in Objekte die gewünschte Objekt ID auswählen und in der Spalte Funktion mit dem Bleistift die Licht Funktion hinzufügen.
        2019-05-30-15-55-53.png

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

          Hallo FredF,

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

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

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

          /* Status Zahl Lichter
          
              zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
              Daten kommen vom Gewerk "licht"
          
              erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
              23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
              Log Ausgabe auskommentiert
              05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
              24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
              06.05.2016 Datenpunkt für Ansagen zugefügt
              02.07.2016 abgeschaltet, da Fehler
              03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
              search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
              27.11.2016 Verschoben in Status
              Code optimiert
              23.12.2016 Räume eingebaut
              */
              var logging = true;
          
              var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
              idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
              idText = 'javascript.0.Status.Lichter.Text',
              idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
              idAnsage = 'javascript.0.Status.Lichter.Ansage';
          
              // Ab hier nix mehr ändern
              createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
              type: 'number',
              name: 'Anzahl aller Lichter',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
              type: 'number',
              name: 'Anzahl der eingeschalteten Lichter',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
              type: 'string',
              name: 'Eingeschaltete Lichter',
              desc: 'Namen der eingeschalteten Lichter',
              def: ' ',
              role: 'value'
              });
              createState(idAnsage, {
              type: 'string',
              name: 'Eingeschaltete Lichter (Ansage)',
              desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
              def: ' ',
              role: 'value'
              });
              createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
              type: 'string',
              name: 'Räume mit eingeschalteten Lichter',
              desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
              def: ' ',
              role: 'value'
              });
          
              var cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
              var cacheSelectorLevel = $('channelstate.id=.level');
              var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
          
              function checkDevices(obj) {
              // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
              var anzahlLichterAn = 0;
              var anzahlLichter = 0;
              var textLichterAn = [];
              var textRaum = [];
          
              if (logging) {
              log('++++++ Lichter Anzahl ++++ ');
              log('#### SCHALTER ##### ');
              }
              cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
          
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
              /*
              if (logging) {
              log('-------');
              log('Kanal: ' + name);
              log('Status: ' + status);
              }
              */
          
              if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
              ++anzahlLichterAn;
              textLichterAn.push(devicename); // Zu Array hinzufügen
              textRaum.push(raumname.enumNames); // <---- NEU
              }
              ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              // } // ENDE VK-Abfrage
          
              });
          
              if (logging) log('#### DIMMER ##### ');
              cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
          
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
              /*
              if (logging) {
              log('-------');
              log('Kanal: ' + name);
              log('Status: ' + status + '%');
              }
              */
          
              if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
              ++anzahlLichterAn;
              textLichterAn.push(devicename); // Zu Array hinzufügen
              textRaum.push(raumname.enumNames); // <---- NEU
              }
              ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              // } // Ende Abfrage VK
          
              });
          
              if (logging) {
              log('++++++ Lichter Anzahl ++++ ');
              log('#### SCHALTER ##### ');
              }
              cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms"); // <---- NEU
          
              // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
              /*
              if (logging) {
              log('-------');
              log('Kanal: ' + name);
              log('Status: ' + status);
              }
              */
          
              if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
              ++anzahlLichterAn;
              textLichterAn.push(devicename); // Zu Array hinzufügen
              textRaum.push(raumname.enumNames); // <---- NEU
              }
              ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              // } // ENDE VK-Abfrage
          
              });
          
              // Array mit Lichternamen sortieren
              textLichterAn.sort();
              textRaum.sort(); // <---- NEU
              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
              if (logging) log("Text: " + textLichterAn);
              if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
              // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
              setState(idText, textLichterAn.join(',')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
              setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
              setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
              // setState(idRaum, textRaum.join(',')); // Räume, in denen Licht brennt // <---- NEU
              setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
              }
          
              // Trigger
              cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
              if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              });
              cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
              if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              });
              cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
              if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              });
              function main() {
              setTimeout(function(){
              if (logging) log('Auslöser Skriptstart');
              checkDevices();
              }, 2000);
              }
          
              main(); // Skriptstart-Auslöser
          
              // Aufbereitung für Ansage
              function strip_tags(data) {
              var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
              return(rueckgabe);
              }
          
              on(idText, function (obj) {
              var text = obj.state.val;
              text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
              setState(idAnsage, text);
              });
          
          

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

          htreckslerH 1 Antwort Letzte Antwort
          0
          • M mech

            Hallo FredF,

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

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

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

            /* Status Zahl Lichter
            
                zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                Daten kommen vom Gewerk "licht"
            
                erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                Log Ausgabe auskommentiert
                05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                06.05.2016 Datenpunkt für Ansagen zugefügt
                02.07.2016 abgeschaltet, da Fehler
                03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                27.11.2016 Verschoben in Status
                Code optimiert
                23.12.2016 Räume eingebaut
                */
                var logging = true;
            
                var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                idText = 'javascript.0.Status.Lichter.Text',
                idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                idAnsage = 'javascript.0.Status.Lichter.Ansage';
            
                // Ab hier nix mehr ändern
                createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                type: 'number',
                name: 'Anzahl aller Lichter',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                type: 'number',
                name: 'Anzahl der eingeschalteten Lichter',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                type: 'string',
                name: 'Eingeschaltete Lichter',
                desc: 'Namen der eingeschalteten Lichter',
                def: ' ',
                role: 'value'
                });
                createState(idAnsage, {
                type: 'string',
                name: 'Eingeschaltete Lichter (Ansage)',
                desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                def: ' ',
                role: 'value'
                });
                createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                type: 'string',
                name: 'Räume mit eingeschalteten Lichter',
                desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                def: ' ',
                role: 'value'
                });
            
                var cacheSelectorState = $('channelstate.id=.STATE'); // Gewerk licht
                var cacheSelectorLevel = $('channelstate.id=.level');
                var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
            
                function checkDevices(obj) {
                // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                var anzahlLichterAn = 0;
                var anzahlLichter = 0;
                var textLichterAn = [];
                var textRaum = [];
            
                if (logging) {
                log('++++++ Lichter Anzahl ++++ ');
                log('#### SCHALTER ##### ');
                }
                cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                var obj = getObject(id);
                var name = getObject(id).common.name;
                var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                var raumname = getObject(id, "rooms"); // <---- NEU
            
                // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                /*
                if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status);
                }
                */
            
                if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                ++anzahlLichterAn;
                textLichterAn.push(devicename); // Zu Array hinzufügen
                textRaum.push(raumname.enumNames); // <---- NEU
                }
                ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                // } // ENDE VK-Abfrage
            
                });
            
                if (logging) log('#### DIMMER ##### ');
                cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                var obj = getObject(id);
                var name = getObject(id).common.name;
                var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                var raumname = getObject(id, "rooms"); // <---- NEU
            
                // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                /*
                if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status + '%');
                }
                */
            
                if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                ++anzahlLichterAn;
                textLichterAn.push(devicename); // Zu Array hinzufügen
                textRaum.push(raumname.enumNames); // <---- NEU
                }
                ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                // } // Ende Abfrage VK
            
                });
            
                if (logging) {
                log('++++++ Lichter Anzahl ++++ ');
                log('#### SCHALTER ##### ');
                }
                cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                var obj = getObject(id);
                var name = getObject(id).common.name;
                var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                var raumname = getObject(id, "rooms"); // <---- NEU
            
                // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                /*
                if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status);
                }
                */
            
                if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                ++anzahlLichterAn;
                textLichterAn.push(devicename); // Zu Array hinzufügen
                textRaum.push(raumname.enumNames); // <---- NEU
                }
                ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                // } // ENDE VK-Abfrage
            
                });
            
                // Array mit Lichternamen sortieren
                textLichterAn.sort();
                textRaum.sort(); // <---- NEU
                // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                if (logging) log("Text: " + textLichterAn);
                if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                setState(idText, textLichterAn.join(',')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                // setState(idRaum, textRaum.join(',')); // Räume, in denen Licht brennt // <---- NEU
                setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                }
            
                // Trigger
                cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                });
                cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                });
                cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                });
                function main() {
                setTimeout(function(){
                if (logging) log('Auslöser Skriptstart');
                checkDevices();
                }, 2000);
                }
            
                main(); // Skriptstart-Auslöser
            
                // Aufbereitung für Ansage
                function strip_tags(data) {
                var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                return(rueckgabe);
                }
            
                on(idText, function (obj) {
                var text = obj.state.val;
                text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                setState(idAnsage, text);
                });
            
            

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

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

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

            Gruss Hermann

            ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

            M 1 Antwort Letzte Antwort
            0
            • htreckslerH htrecksler

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

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

              @htrecksler

              Ja das habe ich bereits erledigt.

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

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

                @htrecksler

                Ja das habe ich bereits erledigt.

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

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

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

                Gruss Hermann

                ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

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

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

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

                  htreckslerH paul53P 2 Antworten Letzte Antwort
                  0
                  • M mech

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

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

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

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

                    Gruss Hermann

                    ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

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

                      Hey,

                      so wäre es dann ja richtig oder?

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

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

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

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

                        @mech Versuche es mal so

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

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

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

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

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

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

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

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

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

                            /* Status Zahl Lichter
                            
                            zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                            Daten kommen vom Gewerk "licht"
                            
                            erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                            23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                            Log Ausgabe auskommentiert
                            05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                            24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                            06.05.2016 Datenpunkt für Ansagen zugefügt
                            02.07.2016 abgeschaltet, da Fehler
                            03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                            search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                            27.11.2016 Verschoben in Status
                            Code optimiert
                            23.12.2016 Räume eingebaut
                            */
                            var logging = true;
                            
                            var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                            idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                            idText = 'javascript.0.Status.Lichter.Text',
                            idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                            idAnsage = 'javascript.0.Status.Lichter.Ansage';
                            
                            // Ab hier nix mehr ändern
                            createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                            type: 'number',
                            name: 'Anzahl aller Lichter',
                            min: 0,
                            def: 0,
                            role: 'value'
                            });
                            createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                            type: 'number',
                            name: 'Anzahl der eingeschalteten Lichter',
                            min: 0,
                            def: 0,
                            role: 'value'
                            });
                            createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                            type: 'string',
                            name: 'Eingeschaltete Lichter',
                            desc: 'Namen der eingeschalteten Lichter',
                            def: ' ',
                            role: 'value'
                            });
                            createState(idAnsage, {
                            type: 'string',
                            name: 'Eingeschaltete Lichter (Ansage)',
                            desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                            def: ' ',
                            role: 'value'
                            });
                            createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                            type: 'string',
                            name: 'Räume mit eingeschalteten Lichter',
                            desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                            def: ' ',
                            role: 'value'
                            });
                            
                            var cacheSelectorState = $('channel[state.id=*.STATE](functions="licht")'); // Gewerk licht
                            var cacheSelectorLevel = $('channel[state.id=*.level](functions="licht")');
                            var cacheSelectorPOWER = $('state[id=*.POWER](functions="licht")'); // Sonoff
                            var cacheSelectorSwitch = $('state[id=*.Switch](functions="licht")'); // Shelly
                            var cacheSelectorMi = $('state[id=*.state](functions=licht)'); //Mi-Light
                            
                            function checkDevices(obj) {
                            // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                            var anzahlLichterAn = 0;
                            var anzahlLichter = 0;
                            var textLichterAn = [];
                            var textRaum = [];
                            
                            if (logging) {
                            log('++++++ Lichter Anzahl ++++ ');
                            log('#### SCHALTER ##### ');
                            }
                            cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                            var obj = getObject(id);
                            var name = getObject(id).common.name;
                            var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                            var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                            var raumname = getObject(id, "rooms"); // <---- NEU
                            
                            
                            // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                            // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                            /*
                            if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status); 
                            }
                            */
                            
                            if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            ++anzahlLichterAn; 
                            textLichterAn.push(devicename); // Zu Array hinzufügen
                            textRaum.push(raumname.enumNames); // <---- NEU
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                            // } // ENDE VK-Abfrage
                            
                            });
                            
                            
                            if (logging) log('#### DIMMER ##### ');
                            cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                            var obj = getObject(id);
                            var name = getObject(id).common.name;
                            var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                            var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                            var raumname = getObject(id, "rooms"); // <---- NEU
                            
                            // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                            // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                            /*
                            if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status + '%'); 
                            }
                            */
                            
                            if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                            ++anzahlLichterAn; 
                            textLichterAn.push(devicename); // Zu Array hinzufügen
                            textRaum.push(raumname.enumNames); // <---- NEU
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                            // } // Ende Abfrage VK 
                            
                            }); 
                            
                            if (logging) {
                            log('++++++ Lichter Anzahl ++++ ');
                            log('#### SCHALTER ##### ');
                            }
                            cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                            var obj = getObject(id);
                            var name = getObject(id).common.name;
                            var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                            var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                            var raumname = getObject(id, "rooms"); // <---- NEU
                            
                            
                            // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                            // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                            /*
                            if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status); 
                            }
                            */
                            
                            if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            ++anzahlLichterAn; 
                            textLichterAn.push(devicename); // Zu Array hinzufügen
                            textRaum.push(raumname.enumNames); // <---- NEU
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                            // } // ENDE VK-Abfrage
                            
                            });
                            
                            if (logging) {
                            log('++++++ Lichter Anzahl ++++ ');
                            log('#### SCHALTER ##### ');
                            }
                            cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                            var obj = getObject(id);
                            var name = getObject(id).common.name;
                            var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                            var devicename = name;
                            var raumname = getObject(id, "rooms"); // <---- NEU
                            
                            // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                            // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                            /*
                            if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status); 
                            }
                            */
                            
                            if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            ++anzahlLichterAn; 
                            textLichterAn.push(devicename); // Zu Array hinzufügen
                            textRaum.push(raumname.enumNames); // <---- NEU
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                            // } // ENDE VK-Abfrage
                            });
                            
                            
                            
                            if (logging) {
                            log('++++++ Lichter Anzahl ++++ ');
                            log('#### SCHALTER ##### ');
                            }
                            cacheSelectorMi.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                            var obj = getObject(id);
                            var name = getObject(id).common.name;
                            var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                            var devicename = name.substring(0, name.indexOf(" Switch ON/OFF")); //.state aus Text entfernen
                            var raumname = getObject(id, "rooms"); // <---- NEU
                            
                            // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                            // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                            /*
                            if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status); 
                            }
                            */
                            
                            if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                            ++anzahlLichterAn; 
                            textLichterAn.push(devicename); // Zu Array hinzufügen
                            textRaum.push(raumname.enumNames); // <---- NEU
                            }
                            ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                            // } // ENDE VK-Abfrage
                            });
                            
                            // Array mit Lichternamen sortieren
                            textLichterAn.sort();
                            textRaum.sort(); // <---- NEU
                            // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                            if (logging) log("Text: " + textLichterAn);
                            if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                            // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                            setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                            setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                            setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                            // setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
                            setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                            }
                            
                            // Trigger
                            cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                            if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                            });
                            cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                            if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                            });
                            cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                            if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                            });
                            cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                            if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                            });
                            cacheSelectorMi.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                            if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                            checkDevices();
                            });
                            function main() {
                            setTimeout(function(){
                            if (logging) log('Auslöser Skriptstart');
                            checkDevices();
                            }, 2000);
                            }
                            
                            main(); // Skriptstart-Auslöser
                            
                            // Aufbereitung für Ansage
                            function strip_tags(data) {
                            var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                            return(rueckgabe);
                            }
                            
                            on(idText, function (obj) {
                            var text = obj.state.val;
                            text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet';
                            setState(idAnsage, text);
                            });
                            

                            umgestiegen von Proxmox auf Unraid

                            1 Antwort Letzte Antwort
                            1
                            • M mech

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

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

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

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

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

                              @mech sagte:

                              Wie könnte ich den nun noch die Homematic "aktoren" abfragen?

                              Wenn die Kanäle dem Gewerk "Licht" zugeordnet sind:

                              const cacheSelectorSTATE = $('channel[state.id=*.STATE](functions=light)');
                              

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

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

                                Wow, danke für eure Hilfe :) Das hat mir echt geholfen.

                                Jetzt habe ich in diesem Beitrag ein Widget dafür gefunden: https://forum.iobroker.net/topic/3884/licht-skript-liefert-falsche-gerätenamen/2

                                Besteht hier die Möglichkeit das ich mir die angeschalteten Lichter anzeigen lassen kann? Und diese dann direkt auch ausschalten kann, bisher sieht mein Widget so aus:

                                vis 2019-05-30 20-21-45.png

                                1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @mech sagte:

                                  Wie könnte ich den nun noch die Homematic "aktoren" abfragen?

                                  Wenn die Kanäle dem Gewerk "Licht" zugeordnet sind:

                                  const cacheSelectorSTATE = $('channel[state.id=*.STATE](functions=light)');
                                  
                                  M Offline
                                  M Offline
                                  mech
                                  schrieb am zuletzt editiert von
                                  #144

                                  @paul53

                                  Hm, die Homematic findet er nicht. Die Objekte sehen so aus:

                                  objects - ioBroker 2019-05-30 20-54-46.png

                                  Jemand eine Idee dazu?

                                  paul53P 1 Antwort Letzte Antwort
                                  0
                                  • M mech

                                    @paul53

                                    Hm, die Homematic findet er nicht. Die Objekte sehen so aus:

                                    objects - ioBroker 2019-05-30 20-54-46.png

                                    Jemand eine Idee dazu?

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

                                    @mech sagte:

                                    Die Objekte sehen so aus:

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

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

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

                                      @paul53 said in [gelöst] Lichter zählen Script läuft nicht:

                                      const cacheSelectorOn = $('stateid=*.on');

                                      Danke das du noch antwortest :)

                                      Ich habe das so zugefügt, bekomme dann aber an anderer Stelle einen JS Fehler:

                                      21:42:11.798	error	javascript.0 script.js.Verbraucher: script.js.Verbraucher:538
                                      21:42:11.799	error	javascript.0 at script.js.Verbraucher:538:1
                                      
                                      

                                      Das ist die betroffene Zeile 538

                                      cacheSelectorON.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                      
                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        mech
                                        schrieb am zuletzt editiert von mech
                                        #147

                                        Okay fehler selbst gesehen.

                                        ON = On

                                        Das habe ich unter Trigger noch zugefügt.

                                        cacheSelectorOn.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                        
                                        if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                        
                                        checkDevices();
                                        
                                        });
                                        

                                        Aber leider zeigt er mir bisher nur die Shellys an =/

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

                                          Update: Es scheint auf jedenfall den HM Schalter zu triggern:

                                          21:48:40.204	info	javascript.0 script.js.Verbraucher: Auslösender Schalter: hmip.0.devices.3014F711A0000858A9919754.channels.1.on: false
                                          

                                          Nur dieser wird wohl nicht in die Variable für die Lampen geschrieben.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          963

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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