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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. HM Fenster Zähler Anzeige

NEWS

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

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

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

HM Fenster Zähler Anzeige

HM Fenster Zähler Anzeige

Scheduled Pinned Locked Moved Skripten / Logik
7 Posts 5 Posters 892 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    Camuri
    wrote on last edited by
    #1

    Hi ist es irgendwie möglich das anstelle von Geöffnete Fenster_Erdgeschoss: EG-KÜCHE-SENSOR-FENSTER:1 ( offen) einfach nur da steht Geöffnet Fenster_Erdgeschoss : Küche ?

    1 Reply Last reply
    0
    • wendy2702W Offline
      wendy2702W Offline
      wendy2702
      wrote on last edited by
      #2

      Hi,

      Wo soll das stehen?

      Wie ermittelst du denn welche Fenster offen sind?

      Sind leider etwas wenig Informationen die du bereitstellst um dir konkret helfen zu können?

      Gruß

      Bitte keine Fragen per PN, die gehören ins Forum!

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      1 Reply Last reply
      0
      • C Offline
        C Offline
        Camuri
        wrote on last edited by
        #3

        Skript läuft das hier http://www.iobroker.net/docu/?page_id=5158&lang=de

        das soll dann in der Vis angezeigt werden momentan sieht das so aus wie auf dem Bild, und es Sollte halt nur dort stehen Geöffnet Fenster_Erdgeschoss : Küche

        Wäre das nicht möglich mit einer Textdatei oder sowas.
        5264_6eb2a176cf3c77a8a811db2f361004aa.png

        1 Reply Last reply
        0
        • wendy2702W Offline
          wendy2702W Offline
          wendy2702
          wrote on last edited by
          #4

          Denke dein Device heißt so: EG-Küche-Sensor-Fenster !?

          Der wird im Script für den Text verwendet, also entweder den Sensor umbenennen, das Skript ändern das nicht mehr der Device Name verwendet wird sondern etwas anderes eindeutiges oder eventuell mal bei diesem Skript vorbei schauen und das für Fenster umbauen:

          viewtopic.php?f=21&t=5735&hilit=Lichter

          Oder, wenn verfügbar einen anderen Datenpunkte für die VIS Anzeige wählen. Habe das Skript aber nicht in Benutzung und weiß nicht welche Datenpunkte erzeugt werden.

          Bitte keine Fragen per PN, die gehören ins Forum!

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          1 Reply Last reply
          0
          • bahnuhrB Offline
            bahnuhrB Offline
            bahnuhr
            Forum Testing Most Active
            wrote on last edited by
            #5

            Hallo,

            anbei mal meine script für:

            Wo ist Licht an ?

            Wo ist Heizung an ?

            Wo ist Bewegung ?

            In vis sieht es dann so aus:
            1540_bild1.jpg

            Und nun die Scripte:

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

            mfg


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

            1 Reply Last reply
            0
            • dslraserD Offline
              dslraserD Offline
              dslraser
              Forum Testing Most Active
              wrote on last edited by
              #6

              @bahnuhr:

              Hallo,

              anbei mal meine script für:

              Wo ist Licht an ?

              Wo ist Heizung an ?

              Wo ist Bewegung ?

              In vis sieht es dann so aus:

              bild1.jpg

              Und nun die Scripte:

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

              mfg `

              Mit welchem Befehl bekomme ich geändert das auch ein Teil vom Gerätenamen ersetzt bzw. gestrichen wird ? Ich vermute mal hier:

              var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
              

              Konkret habe ich das Licht Script probiert und möchte für die Aufbereitung der Ansage aus allen Philips Lampen (sieht so aus –- Philips_hue.Fensterlampe.level) das Philips_hue. entfernen. Ich möchte die Ausgabe für den Alexa2 Adapter verwenden, was ja auch funktioniert, nur die Namen sind halt blöd und werden automatisch so angelegt.

              1 Reply Last reply
              0
              • totocotonioT Offline
                totocotonioT Offline
                totocotonio
                wrote on last edited by
                #7

                Hi,

                ich hätte mal eine Frage.

                Ich habe auch 2 Sonoff im Gewerk "Licht" drin.

                Die werden aber nicht gefunden.

                Kann ich das irgendwie auch erreichen?

                Gruß Totocotonio

                Bin noch Anfänger in Sachen IO-Broker und lerne gerne dazu. :P

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


                Support us

                ioBroker
                Community Adapters
                Donate

                101

                Online

                32.4k

                Users

                81.3k

                Topics

                1.3m

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

                • Don't have an account? Register

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