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 ]Osram Plug in Script „Lichter zählen“ einfügen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[ gelöst ]Osram Plug in Script „Lichter zählen“ einfügen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 4 Kommentatoren 1.4k 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.
  • B Offline
    B Offline
    Baerny
    schrieb am zuletzt editiert von
    #1

    durch den Einsatz von dem Ziggbe Adapter mit einem CC2531 USB Stick nutze ich mittlerweile auch einige Osram Plug Steckdosen um die Reichweite zu erhöhen. Da die Steckdosen nun schon mal im Einsatz sind, nutze ich diese auch als Aktor für Licht.

    Ich würde diese jetzt gerne in das Script „ Lichter zählen“ einbauen damit diese in meiner VIS angezeigt werden.Nur, ich weis nicht wie.

    Ich nutze folgendes 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
    Sonoff hinzugefügt
    */
    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 = $('channel[state.id=*.POWER](functions="Licht")'); // 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);
    });
    

    Hier noch ein Screenshot des Osram Plug

    PS: Leider habe ich in der Suche nichts entsprechendes gefunden.
    3933_osram_plug.png

    CCU 2 | Intel NUC mit Proxmox

    1 Antwort Letzte Antwort
    0
    • H Offline
      H Offline
      hannoi
      schrieb am zuletzt editiert von
      #2

      Probier mal beim Selector den State Wert "klein" zu schreiben:

      var cacheSelectorState = $('channelstate.id=*.state');

      Grüße

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        https://forum.iobroker.net/viewtopic.php?f=21&t=16963&p=178783#p178783.

        const osram = $('state[id=*.state](functions="Licht")');
        

        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
        • B Offline
          B Offline
          Baerny
          schrieb am zuletzt editiert von
          #4

          @paul53

          Hallo Paul53, vielen Dank für deinen Vorschlag. Leider bin ich aber zu blöd, deinen Code in mein Script zu integrieren.

          Auch den Link zu den Fensterscript verstehe ich nicht wirklich oder willst du mir damit sagen, das das was ich vorhabe, mit dem Script "Lichter zählen" nicht möglich ist. Ich würde mich freuen, wenn du mir das ganze kurz erklären könntest.

          Gruß Baerny

          CCU 2 | Intel NUC mit Proxmox

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            Mit dem Selektor osram musst Du eine weitere Schleife

            osram.each(function(id, i) {
               // Schleifen-Operationen
            });
            

            innerhalb der Funktion checkDevices() erstellen und außerdem einen zusätzlichen Trigger

            osram.on(function(obj) {});
            

            Das Fensterskript zeigt, wie es prinzipiell funktioniert.

            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
            • B Offline
              B Offline
              Baerny
              schrieb am zuletzt editiert von
              #6

              Vielen Dank, schau mal ob Ichs hinbekomme

              Baerny

              CCU 2 | Intel NUC mit Proxmox

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                Baerny
                schrieb am zuletzt editiert von
                #7

                Habe jetzt einige Tage alles mögliche ausprobiert, leider werden meine Osram Plug + von dem Lichterscript nicht gefunden.

                Ich habe zuletzt dieses Script benutzt da es für mich übersichtlicher ist die das bereits oben gepostete

                // Tread: https://forum.iobroker.net/viewtopic.php?t=18239&p=190534#p190534
                
                var logging = true;
                
                //Variablen deklarieren
                var idAnzahlEin = 'Beleuchtung.Anzahl_ein',
                    idAnzahl = 'Beleuchtung.Anzahl',
                    idText = 'Beleuchtung.Text',
                    idRaum = 'Beleuchtung.Raum',
                    idAnsage = 'Beleuchtung.Ansage';
                
                // Status erstellen
                createState(idAnzahl, {
                    type: 'number',
                    name: 'Anzahl aller Lichter',
                    min: 0,
                    def: 0,
                    role: 'value'
                });
                createState(idAnzahlEin, {
                    type: 'number',
                    name: 'Anzahl der eingeschalteten Lichter',
                    min: 0,
                    def: 0,
                    role: 'value'
                });
                createState(idText, {
                    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, {
                    type: 'string',
                    name: 'Räume mit eingeschalteten Lichter',
                    desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                    def: ' ',
                    role: 'value'
                });
                
                //Variablen der Geräte deklarieren
                var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")');
                var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")');
                var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); 
                var cacheSelectorOsram = $('channel[state.id=*.state](functions="Licht")'); // Osram
                var cacheSelectorPOWER = $('channel[state.id=*.POWER](functions="Licht")'); // Sonoff
                
                function checkDevices(obj) {
                     var anzahlLichterAn = 0;
                    var anzahlLichter = 0;
                    var textLichterAn = [];
                    var textRaum = [];
                    if (logging) {
                        log('++++++ Lichter Anzahl ++++ ');
                        log('#### SCHALTER ##### ');
                    }
                
                cacheSelectorState.each(function(id, i) { 
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val;
                        var devicename = name.substring(0, name.indexOf(".STATE")); 
                        var raumname = getObject(id, "rooms");
                
                        if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status);
                        }
                        if (status) {
                            ++anzahlLichterAn;
                            textLichterAn.push(devicename); 
                            textRaum.push(raumname.enumNames); 
                        }
                        ++anzahlLichter;
                           });
                
                cacheSelectorOsram.each(function(id, i) { // Osram Plug
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val;
                        var devicename = name; 
                        var raumname = getObject(id, "rooms");
                
                        if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status);
                        }
                        if (status) {
                            ++anzahlLichterAn;
                            textLichterAn.push(devicename); 
                            textRaum.push(raumname.enumNames); 
                        }
                        ++anzahlLichter;
                           });
                
                cacheSelectorPOWER.each(function(id, i) { // Sonoff 
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val;
                        var devicename = name; 
                        var raumname = getObject(id, "rooms");
                
                        if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status);
                        }
                        if (status) {
                            ++anzahlLichterAn;
                            textLichterAn.push(devicename); 
                            textRaum.push(raumname.enumNames); 
                        }
                        ++anzahlLichter;
                           });
                
                    // Array mit Lichternamen sortieren
                    textLichterAn.sort();
                    textRaum.sort();
                     if (logging) log("Text: " + textLichterAn);
                    if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                    setState(idText, textLichterAn.join(',
                '));
                    setState(idAnzahlEin, textLichterAn.length);
                    setState(idAnzahl, anzahlLichter); 
                    setState(idRaum, textRaum.join(', '));
                }
                
                // Trigger
                cacheSelectorState.on(function(obj) {
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); 
                    checkDevices();
                });
                cacheSelectorOsram.on(function(obj) { // Osram Plug
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val);
                    checkDevices();
                });
                cacheSelectorPOWER.on(function(obj) { // Sonoff 
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val);
                    checkDevices();
                });
                
                cacheSelectorHue.on(function(obj) { 
                    if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val);
                    checkDevices();
                });
                cacheSelectorLevel.on(function(obj) { 
                    if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val);
                    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);
                });
                

                In diesem Script habe ich folgendes geändert:

                var cacheSelectorOsram = $('channel[state.id=*.state](functions="Licht")'); 
                ````und````
                cacheSelectorOsram.each(function(id, i) { // Osram Plug
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val;
                        var devicename = name; 
                        var raumname = getObject(id, "rooms");
                
                        if (logging) {
                            log('-------');
                            log('Kanal: ' + name);
                            log('Status: ' + status);
                        }
                        if (status) {
                            ++anzahlLichterAn;
                            textLichterAn.push(devicename); 
                            textRaum.push(raumname.enumNames); 
                        }
                        ++anzahlLichter;
                           });
                ````und````
                cacheSelectorOsram.on(function(obj) { // Osram Plug
                    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val);
                    checkDevices();
                });
                ````woran könnte es denn liegen. Die Abfrage von HM und Sonoff Geräten funktioniert
                
                Über Hilfe würde ich mich freuen.
                
                Baerny

                CCU 2 | Intel NUC mit Proxmox

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  Die Osram-Geräte haben keinen Channel. Das Gewerk ist laut Deinem ersten Post dem Datenpunkt zugeordnet. Das ist beim Selector zu berücksichtigen. Versuche es mal so:

                  var cacheSelectorOsram = $('state[id=*.state](functions="Licht")'); // Osram
                  
                  

                  Außerdem verpasse den Datenpunkten .state sinnvolle Namen, da sie sonst nicht unterscheidbar sind.

                  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
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    Möchtest Du den Gerätenamen (z.B. "Plug 03") verwenden, muss die Schleifenfunktion geändert werden.

                        cacheSelectorOsram.each(function(id, i) { // Osram Plug
                            var status = getState(id).val;
                            var deviceid = id.substring(0, id.indexOf('.state')); //.state aus ID entfernen
                            var devicename = getObject(deviceid).common.name; 
                            var raumname = getObject(id, "rooms");
                    
                            if (logging) {
                                log('-------');
                                log('Gerät: ' + devicename);
                                log('Status: ' + status);
                            }
                            if (status) {
                                ++anzahlLichterAn;
                                textLichterAn.push(devicename); 
                                textRaum.push(raumname.enumNames); 
                            }
                            ++anzahlLichter;
                        });
                    

                    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
                    • B Offline
                      B Offline
                      Baerny
                      schrieb am zuletzt editiert von
                      #10

                      ja würde ich gerne, muss natürlich noch sinnvoll geändert werden

                      CCU 2 | Intel NUC mit Proxmox

                      1 Antwort Letzte Antwort
                      0
                      • B Offline
                        B Offline
                        Baerny
                        schrieb am zuletzt editiert von
                        #11

                        @Paul53

                        ganz herzlichen Dank für deine Hilfe

                        CCU 2 | Intel NUC mit Proxmox

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

                          Hallo zusammen,

                          ich versuche gerade die Anpassung für die Osram Steckdosen zu übernehmen. Irgendwie mag es bei mir aber nicht funktionieren. Kann jemand mal über die Anpassung schauen?

                          var logging = true;
                          var idAnzahlEin = 'javascript.0.Buero.Steckdose.Anzahl_ein',
                          idAnzahl = 'javascript.0.Buero.Steckdose.Anzahl',
                          idText = 'javascript.0.Buero.Steckdose.Text',
                          idRaum = 'javascript.0.Buero.Steckdose.Raum', // <---- NEU
                          idAnsage = 'javascript.0.Buero.Steckdose.Ansage';
                          
                          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'
                          });
                          
                          /* ------------------------- Selektor Start ------------------------------------------------------*/
                          
                          var cacheSelectorSwitch = $('state[id=*.Switch](functions="onbuerosocket")'); // Shelly
                          
                          var cacheSelectorOsram = $('state[id=*.available](functions="onbuerosocket")'); // Osram
                          
                          /* ------------------------- Selektor Ende ------------------------------------------------------*/
                          
                          
                          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 ##### ');
                          }
                           /* -----------------------Schleife Start -----------------------------------------------------*/
                          
                           if (logging) {
                          
                          log('++++++ Lichter Anzahl ++++ ');
                          
                          log('#### SCHALTER ##### ');
                          
                          }
                          
                          //osram//
                          cacheSelectorOsram.each(function(id, i) { // Osram Plug
                          var obj = getObject(id);
                          var name = getObject(id).common.name;
                          var status = getState(id).val;
                          var devicename = name; 
                          var raumname = getObject(id, "rooms");
                          if (logging) {
                          log('-------');
                          log('Kanal: ' + name);
                          log('Status: ' + status);
                          }
                          
                          if (status) {
                          ++anzahlLichterAn;
                          textLichterAn.push(devicename); 
                          textRaum.push(raumname.enumNames); 
                          }
                          ++anzahlLichter;
                          });
                          
                          //shelly//
                          cacheSelectorSwitch.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 *.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
                          });
                          
                           /* -----------------------Schleife Ende -----------------------------------------------------*/
                          
                          // 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 Start ------------------------------------------------------------*/
                          
                          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();
                          });
                          
                          /* ----------------- Trigger Ende ------------------------------------------------------------*/
                          
                          
                          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);
                          });
                          

                          enums - ioBroker 2019-06-03 20-24-27.png

                          objects - ioBroker 2019-06-03 20-24-54.png

                          Ich versuche das Script so anzupassen das nur die "Steckdosen" gezählt werden. Da ich mir für jeden Raum einzelnt eine Übersicht basteln möchte welche Steckdosen eingeschaltet sind. Darum gibt es mehrere Gewerke bei mir.

                          Die Shellys werden erkannt und gezählt, die Osram leider nicht :(

                          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

                          757

                          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