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] Skript "Lichter zählen": Kombination von z-Wave + Homematic

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    949

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Gelöst] Skript "Lichter zählen": Kombination von z-Wave + Homematic

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 4 Kommentatoren 1.7k 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.
  • malorossM Offline
    malorossM Offline
    maloross
    schrieb am zuletzt editiert von
    #1

    Das hier veröffentlichte Skript zum Zählen und Auflisten vorhandener Lichter habe ich seit einiger Zeit im Einsatz und es funktioniert einwandfrei.

    Nun möchte ich einen Fibaro Double Relay Switch, der 2 Lichter schaltet, mit einbinden, was mir bisher nicht gelungen ist.

    Gewerke in Homematic problemlos; z-wave bietet das nicht (zumindest hab ich auf der ioBroker-Oberfläche keine Möglichkeit gefunden).

    Daher habe ich im Tab "Objekte" den betroffenen Switches per Hand dem Gewerk "Licht" (unter Funktion) zugeordnet.

    Trotz Neustart werden die Switches nicht mitgezählt.

    Was habe ich übersehen oder falsch gemacht?

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

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

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo,

      kannst du einen Screenshot der Zuordnung posten?

      Hast du gesehen, dass in den functions nur Kanäle zugeordnete sind, nicht die Datenpunkte (zB State oder Level)?

      Gruß

      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • malorossM Offline
        malorossM Offline
        maloross
        schrieb am zuletzt editiert von
        #3

        So wie ich das verstehe, liegt es in der unterschiedlichen Namensgebung, also "Garagenlicht.State" bei Homematic, aber bei z-wave lediglich "switch". Hab schon versucht, händisch im Node ein Objekt anzulegen und darin die Namensstruktur von Homematic zu erzeugen, aber iwie haut es trotzdem nicht hin.

        So sieht das im Original ohne meine Veränderungen aus.
        483_screenshot_lichtzaehlen.png

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

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

        1 Antwort Letzte Antwort
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          schrieb am zuletzt editiert von
          #4

          @maloross:

          So wie ich das verstehe, liegt es in der unterschiedlichen Namensgebung, also "Garagenlicht.State" bei Homematic, aber bei z-wave lediglich "switch". Hab schon versucht, händisch im Node ein Objekt anzulegen und darin die Namensstruktur von Homematic zu erzeugen, aber iwie haut es trotzdem nicht hin.

          So sieht das im Original ohne meine Veränderungen aus.

          screenshot_lichtzaehlen.png `

          Welche skript benutzt du ? Ich vermute ma er triggert nur auf die waerte STATE, das skript muesste man dan fuer diesen teil anpassen damit er auch mit deinen objecten uerbeinstimmt.

          ~Dutch

          1 Antwort Letzte Antwort
          0
          • malorossM Offline
            malorossM Offline
            maloross
            schrieb am zuletzt editiert von
            #5

            Dieses hier:

            ! /* System Zahl Lichter
            ! zaehlt die Lichter in allen Raeumen und meldet die Eingeschalteten namentlich
            ! Daten kommen vom Gewerk "Licht"
            ! */
            ! createState('zaehlen_Lichter.anzahlLichter', {
            ! def: 0,
            ! name: 'Anzahl der vorhandenen Lichter',
            ! desc: 'Anzahl aller Lichter im Gewerk',
            ! read: true,
            ! write: true,
            ! min: 0,
            ! type: 'number'
            ! });
            ! createState('zaehlen_Lichter.anzahlLichterAn', {
            ! def: 0,
            ! name: 'Anzahl eingeschaltete Lichter',
            ! desc: 'Anzahl aller eingeschalteten Lichter im Gewerk',
            ! read: true,
            ! write: true,
            ! min: 0,
            ! type: 'number'
            ! });
            ! createState('zaehlen_Lichter.textLichterAn', {
            ! def: "",
            ! name: 'Aufzaehlung eingeschaltete Lichter',
            ! desc: 'Namen aller eingeschalteten Lichter im Gewerk als Liste',
            ! read: true,
            ! write: true,
            ! type: 'string'
            ! });
            ! var cacheSelector = $('channelstate.id=*.STATE');
            ! var cacheSelectorState = $('channelstate.id=*.STATE');
            ! var cacheSelectorDimmer = $('channelstate.id=*.LEVEL');

            ! function countLamps(obj) {
            ! // Setzt die Zaehler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
            ! var anzahlLichterAn = 0;
            ! var anzahlLichter = 0;
            ! var textLichterAn = [];
            ! log('Ausloesender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geaendert hat
            ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
            ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
            ! var obj = getObject(id);
            ! if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezaehlt
            ! textLichterAn.push(obj.common.name); // Zu Array hinzufügen
            ! }
            ! log("Licht Nr. " + i + ": " + getObject(id).common.name + ": " + status);
            ! ++anzahlLichter; // Zaehlt die Anzahl der vorhandenen Lichter unabhaengig vom Status
            ! });
            ! cacheSelectorDimmer.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
            ! var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
            ! if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
            ! textLichterAn.push(obj.common.name); // Zu Array hinzufügen
            ! }
            ! log("Licht Nr. " + i + ": " + id + ": " + status); // gibt alle Elemente *.LEVEL im Gewerk Licht mit dem aktuelle Status im Log aus
            ! ++anzahlLichter; // Zaehlt die Anzahl der vorhandenen Lichter unabhaengig vom Status
            ! });
            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
            ! log("Text: " + textLichterAn);
            ! log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
            ! setState("zaehlen_Lichter.textLichterAn", textLichterAn.join(',
            ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
            ! setState("zaehlen_Lichter.anzahlLichterAn", textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
            ! setState("zaehlen_Lichter.anzahlLichter", anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
            ! }
            ! cacheSelectorState.on(function(obj) { // bei Zustandaenderung *. STATE im Gewerk Fenster
            ! countLamps(obj);
            ! });
            ! cacheSelectorDimmer.on(function(obj) { // bei Zustandaenderung *. LEVEL im Gewerk Licht
            ! countLamps(obj);
            ! });

            Die Definition der Variablen hab ich im Skript rot markiert, da müsste noch der Double Switch rein, weiß aber nicht wie. Im Vergleich sind die Datenpunkte so definiert (links Homematic, rechts z-wave):

            483_vergleich.jpg

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

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

            1 Antwort Letzte Antwort
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              schrieb am zuletzt editiert von
              #6

              Auf den ersten schnellen Blick macht das Script was mir state.id.

              Bei den einen heißt die id so bei den anderen switch_xx, morgen Mal an pc Schaun…

              ~Dutch


              Send from mobile device

              1 Antwort Letzte Antwort
              0
              • malorossM Offline
                malorossM Offline
                maloross
                schrieb am zuletzt editiert von
                #7

                @Dutchman:

                Auf den ersten schnellen Blick macht das Script was mir state.id.

                Bei den einen heißt die id so bei den anderen switch_xx, morgen Mal an pc Schaun…

                ~Dutch


                Send from mobile device `

                dachte ich mir auch, aber meine Kenntnisse reichen nicht aus, das umzusetzen. Das Erstellen eines neuen Datenpunktes für den Switch, wo ich die id angepasst hatte, war nicht erfolgreich.

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

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

                1 Antwort Letzte Antwort
                0
                • malorossM Offline
                  malorossM Offline
                  maloross
                  schrieb am zuletzt editiert von
                  #8

                  Nachdem ich nun eine ganze Weile rumexperimentiert habe, bin ich noch nicht weiter. Hier ein Auszug aus meinem aktuellen Skript (eingeschränkt funktionsfähig).

                  ! [… Definition Variablen]
                  ! [… Anlegen Status]
                  ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                  ! var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                  ! var cacheSelectorSwitch_1 = $('channelstate.id=*.Switch_1'); // Zwave 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
                  ! });
                  ! ` > cacheSelectorSwitch_1.each(function(id, i) { // Schleife für jedes gefundenen Element *.Switch_1 im Gewerk Licht

                  var obj = getObject(id);

                  var name = getObject(id).common.name;

                  var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)

                  var devicename = name.substring(0, name.indexOf(".Switch_1")); //.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

                  }); ! [… Dimmer] ! [… Array sortieren] ! // 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(); ! }); > CacheSelectorSwitch_1.on(function(obj) { // bei Zustandänderung *.Switch_1 von ZwaveLampen im Gewerk Licht

                  if (logging) log('Auslösende SWITCH: ' + 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);
                  ! });

                  Auch ein manuell erstellter Datenpunkt im entsprechenden Node wird nicht erfasst. HM-Geräte werden hingegen einwandfrei erkannt und ausgewertet. Wo hab ich da noch einen Fehler drin?

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

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

                  1 Antwort Letzte Antwort
                  0
                  • lobomauL Offline
                    lobomauL Offline
                    lobomau
                    schrieb am zuletzt editiert von
                    #9

                    Vielleicht hilft ja das Script für Lichter homematic + hue weiter.

                    Da wird irgendwie noch mit der role gearbeitet:

                    var cacheSelectorHue = $('state[id=*.on](functions=Licht)[role=switch]');   //var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); // HUE Lampen (müssen im Gewerk Licht sein)
                    

                    Komplettes Script:

                    ! ````
                    /* Status Zahl Lichter
                    ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                    Daten kommen vom Gewerk "Licht"
                    ! erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                    23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                    Log Ausgabe auskommentiert
                    05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                    24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                    06.05.2016 Datenpunkt für Ansagen zugefügt
                    02.07.2016 abgeschaltet, da Fehler
                    03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                    search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                    27.11.2016 Verschoben in Status
                    Code optimiert
                    23.12.2016 Räume eingebaut
                    21.06.2017 HUE Lampen eingebaut
                    */
                    var logging = false;
                    ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                    idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                    idText = 'javascript.0.Status.Lichter.Text',
                    idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                    idAnsage = 'javascript.0.Status.Lichter.Ansage';
                    ! // Ab hier nix mehr ändern
                    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                    type: 'number',
                    name: 'Anzahl aller Lichter',
                    min: 0,
                    def: 0,
                    role: 'value'
                    });
                    createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                    type: 'number',
                    name: 'Anzahl der eingeschalteten Lichter',
                    min: 0,
                    def: 0,
                    role: 'value'
                    });
                    createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                    type: 'string',
                    name: 'Eingeschaltete Lichter',
                    desc: 'Namen der eingeschalteten Lichter',
                    def: ' ',
                    role: 'value'
                    });
                    createState(idAnsage, {
                    type: 'string',
                    name: 'Eingeschaltete Lichter (Ansage)',
                    desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                    def: ' ',
                    role: 'value'
                    });
                    createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                    type: 'string',
                    name: 'Räume mit eingeschalteten Lichter',
                    desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                    def: ' ',
                    role: 'value'
                    });
                    ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                    var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                    var cacheSelectorHue = $('stateid=*.on[role=switch]'); //var cacheSelectorHue = $('channelstate.id=*.ON'); // HUE 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
                    });

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

                    ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                    if (logging) {
                    log('-------');
                    log('Kanal: ' + name);
                    log('Status: ' + status);
                    }
                    if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt
                    ++anzahlLichterAn;
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    textRaum.push(raumname.enumNames); // <---- NEU
                    }
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    // } // ENDE VK-Abfrage
                    });
                    ! if (logging) log('#### DIMMER ##### ');
                    cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                    var obj = getObject(id);
                    var name = getObject(id).common.name;
                    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                    var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                    var raumname = getObject(id, "rooms"); // <---- NEU
                    ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                    // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                    ! if (logging) {
                    log('-------');
                    log('Kanal: ' + name);
                    log('Status: ' + status + '%');
                    }
                    if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                    ++anzahlLichterAn;
                    textLichterAn.push(devicename); // Zu Array hinzufügen
                    textRaum.push(raumname.enumNames); // <---- NEU
                    }
                    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                    // } // Ende Abfrage VK
                    });
                    ! // Array mit Lichternamen sortieren
                    textLichterAn.sort();
                    textRaum.sort(); // <---- NEU
                    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                    if (logging) log("Text: " + textLichterAn);
                    if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                    // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                    setState(idText, textLichterAn.join(',
                    ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                    setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                    setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                    // setState(idRaum, textRaum.join(',
                    ')); // Räume, in denen Licht brennt // <---- NEU
                    setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                    }
                    ! // Trigger
                    cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    checkDevices();
                    });
                    cacheSelectorHue.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht
                    if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                    checkDevices();
                    });
                    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);
                    });

                    Host: NUC8i3 mit Proxmox:

                    • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                    • Slave: Pi4
                    1 Antwort Letzte Antwort
                    0
                    • malorossM Offline
                      malorossM Offline
                      maloross
                      schrieb am zuletzt editiert von
                      #10

                      Danke, genau dieses Skript habe ich versucht zu modifizieren.

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

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

                      1 Antwort Letzte Antwort
                      0
                      • malorossM Offline
                        malorossM Offline
                        maloross
                        schrieb am zuletzt editiert von
                        #11

                        Das Problem ist gelöst, das Skript modifiziert und lauffähig. Danke für die Unterstützung.

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

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

                        1 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

                        656

                        Online

                        32.6k

                        Benutzer

                        82.2k

                        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