Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Überwachung Fensterkontakte (zigbee) per Javascript 4.0.5 funktioniert nicht mehr

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst] Überwachung Fensterkontakte (zigbee) per Javascript 4.0.5 funktioniert nicht mehr

Scheduled Pinned Locked Moved Skripten / Logik
25 Posts 3 Posters 1.9k Views
  • 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.
  • smartboartS Offline
    smartboartS Offline
    smartboart
    wrote on last edited by
    #16

    @paul53:

    @smartboart:

    sobald .state oder die functions dazu kommen geht nix… Wie sieht das Objekt "enum.functions.Steckdose" aus (RAW-Ansicht) ?

    geht um das zählen script… siehe cahceselektor unten...Alle gehen bis auf die fürs Zigbee nicht...

    diese funktionieren ja auch...die states sehen nicht anders aus...

    var cacheSelectorPOWER1 = $('state[state.id=*.POWER1](functions="Steckdose")');
    var cacheSelectorPOWER2 = $('state[state.id=*.POWER2](functions="Steckdose")');
    var cacheSelectorPOWER3 = $('state[state.id=*.POWER3](functions="Steckdose")');
    var cacheSelectorPOWER4 = $('state[state.id=*.POWER4](functions="Steckdose")'); 
    //var cacheSelectorPOWER = $('state[state.id=*.POWER](functions="Steckdose")'); 
    var cacheSelectorState = $('state[state.id=*.STATE](functions="Steckdose")'); 
    

    objekt siehe Foto…

    Habe schon etliche varianten durch...

    all das habe ich ausprobiert..

    var cacheSelector = $('stateid=zigbee.0.*');

    var cacheSelector = $('stateid=zigbee.0.*.state');

    var cacheSelector = $('stateid=*.state');

    var cacheSelector = $('stateid=zigbee.0.zigbee.0.84182600000b343c.state');

    var cacheSelector = $('statestate.id=zigbee.0.*.state');
    6558_unbenannt.png

    var logging = true;
    
    var idAnzahlEin = 'javascript.0.Status.Steckdosen.Anzahl_ein',
    idAnzahl = 'javascript.0.Status.Steckdosen.Anzahl',
    idText = 'javascript.0.Status.Steckdosen.Text',
    idAnsage = 'javascript.0.Status.Steckdosen.Ansage';
    
    // Ab hier nix mehr ändern
    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Steckdosen
    type: 'number',
    name: 'Anzahl aller Steckdosen',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idAnzahlEin, { // Anzahl der Steckdosen, die auf sind als Variable unter Javascript.0 anlegen
    type: 'number',
    name: 'Anzahl der eingeschalteten Steckdosen',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idText, { // Anzahl der brennenden Steckdosen und deren Namen als Variable unter Javascript.0 anlegen
    type: 'string',
    name: 'Eingeschaltete Steckdosen',
    desc: 'Namen der eingeschalteten Steckdosen',
    def: ' ',
    role: 'value'
    });
    createState(idAnsage, {
    type: 'string',
    name: 'Eingeschaltete Steckdosen (Ansage)',
    desc: 'Namen der eingeschalteten Steckdosen (für Ansage aufbereitet)',
    def: ' ',
    role: 'value'
    });
    
    var cacheSelectorPOWER1 = $('state[state.id=*.POWER1](functions="Steckdose")');
    var cacheSelectorPOWER2 = $('state[state.id=*.POWER2](functions="Steckdose")');
    var cacheSelectorPOWER3 = $('state[state.id=*.POWER3](functions="Steckdose")');
    var cacheSelectorPOWER4 = $('state[state.id=*.POWER4](functions="Steckdose")'); 
    //var cacheSelectorPOWER = $('state[state.id=*.POWER](functions="Steckdose")'); 
    var cacheSelectorState = $('state[state.id=*.STATE](functions="Steckdose")'); 
    var cacheSelector = $('state[state.id=*.state](functions="Steckdose")');
    
    function checkDevices(obj) {
    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Steckdose auf 0
    var anzahlSteckdosenAn = 0;
    var anzahlSteckdosen = 0;
    var textSteckdosenAn = [];
    //******************************************************
    
    cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    //******************************************************
    
    cacheSelector.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    //****************************************************************** */
    /*
    
    cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Steckdose
    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(".POWER")); //.state aus Text entfernen
    
    if (status) { // Wenn Dimmwert über 0
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // Ende Abfrage VK 
    
    }); 
    */
    //***************************************************
    
    cacheSelectorPOWER1.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    cacheSelectorPOWER2.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    cacheSelectorPOWER3.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    cacheSelectorPOWER4.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose
    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); //.state aus Text entfernen
    
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt
    ++anzahlSteckdosenAn; 
    textSteckdosenAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status
    // } // ENDE VK-Abfrage
    
    });
    
    // Array mit Steckdosennamen sortieren
    textSteckdosenAn.sort();
    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
    if (logging) log("Text: " + textSteckdosenAn);
    if (logging) log("Anzahl Steckdosen: " + anzahlSteckdosen + "  davon Steckdosen an:  " + anzahlSteckdosenAn);
    // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
    setState(idText, textSteckdosenAn.join(',
    ')); // Schreibt die aktuelle Namen der eingeschalteten Steckdosen
    setState(idAnzahlEin, textSteckdosenAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Steckdosen
    setState(idAnzahl, anzahlSteckdosen); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Steckdose
    }
    
    // Trigger
    
    cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    /*
    cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Steckdose
    if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    */
    cacheSelectorPOWER1.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelectorPOWER2.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelectorPOWER3.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelectorPOWER4.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    cacheSelector.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose
    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(/( |<([^>]+)>)|(_)|(0)|(:)/ig, " ");
    return(rueckgabe);
    }
    
    on(idText, function (obj) {
    var text = obj.state.val;
    text = (getState(idAnzahl).val > 0 ) ? '' + strip_tags(text) : ' Alle Steckdosen sind ausgeschaltet ';
    setState(idAnsage, text);
    });
    
    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #17

      @smartboart:

      objekt siehe Foto… `
      Du hast "Steckdose" dem Gerät zugeordnet. Da Zigbee-Geräte keine Kanäle haben, https://forum.iobroker.net/viewtopic.php?f=21&t=16564&p=174031#p174031.

      Wenn Du "Steckdose" den betreffenden Datenpunkten zuordnest, wird der Selektor funktionieren (alle Versionen). Vorzugsweise:

      var cacheSelector = $('state[id=zigbee.0.*.state](functions="Steckdose")');
      

      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 Reply Last reply
      0
      • paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #18

        @smartboart:

        javascript 4.0.5 `
        In dieser Version wurde gegenüber der Version 3.6.4 einiges geändert. Vielleicht funktioniert jetzt

        var cacheSelector = $('device[state.id=*.state](functions="Steckdose")');
        

        , wenn das Gewerk dem Gerät zugeordnet ist ?

        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 Reply Last reply
        0
        • smartboartS Offline
          smartboartS Offline
          smartboart
          wrote on last edited by
          #19

          @paul53:

          @smartboart:

          javascript 4.0.5 `
          In dieser Version wurde gegenüber der Version 3.6.4 einiges geändert. Vielleicht funktioniert jetzt

          var cacheSelector = $('device[state.id=*.state](functions="Steckdose")');
          

          , wenn das Gewerk dem Gerät zugeordnet ist ? `

          Hallo Paul, danke für deine Unterstützung…

          Habe ich auch ausprobiert...funktioniert auch nicht...

          beide Varianten nicht...

          vermute eher das irgendwas mit den zigbee states nicht stimmt... Habe die aber schon gelöscht und wieder angelegt...

          Habe 12 verschiedene Scripte um mittels Selektor infos zu visualiieren...funktionieren alle! Ausser die welche ich nun für meine neue Zigbe Hardware anlegen wollte, bzw. diese Geräte integrieren wollte...

          6558_unbenannt2.png 6558_unbenannt1.png 6558_unbenannt.png

          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #20

            Habe auf Version 4.0.5 hochgezogen und getestet (Gewerk "batterie" zwei Geräten zugeordnet).

            $('device[state.id=*.state](functions=batterie)');
            

            funktioniert nicht.

            const rm = $('*.state(functions=batterie)');
            
            rm.each(function(id, i) {
                log(id);
            });
            
            

            funktioniert erst nach Neustart (Javascript / ioBroker).

            19:50:11.243	info	javascript.1 script.js.common.Test3: zigbee.0.002.state
            19:50:11.243	info	javascript.1 script.js.common.Test3: zigbee.0.003.state
            
            

            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 Reply Last reply
            0
            • M Offline
              M Offline
              Mitch
              wrote on last edited by
              #21

              Hallo Paul,

              erstmal vielen Dank für deine Hilfe. Bei mir funktioniert der obere Teil noch nicht so ganz. Ist da ein Fehler im Javascript 4.0.5 Adapter?

              Dann sollte man doch den Fehler melden, oder?

              Folgendes Skript führe ich auf Anforderung aus:

              `const sensor = getObject('enum.functions.sensors').common.members;
              
                       sendTo('telegram.0', {
                          text:   'BlaBla'
                       });
              
              for(let i = 0; i < sensor.length; i++) {
                 var name = getObject(sensor[i]).common.name;
                 on(sensor[i] + '.voltage', function (dp) { 
                    if(dp.state.val <= 4.8) {
                       sendTo('telegram.0', {
                          text:   'Die Batterie vom Sensor ' + name + ' neigt sich dem Ende zu. Die aktuelle Spannung beträgt ' + dp.state.val + ' V.'
                       });
                    }
                 });
              }`
              
              Effekt: BlaBla schreibt er noch, aber bzgl. des Batterie-Anzeige wird nichts generiert. Ich habe mal den Value auf 4.8 hochgesetzt. Das sollte bei allen meinen Zigbee-Devices gelten, aber nichts passiert.
              
              Kann man vielleicht nur den Javascript-Adapter auf die ältere Version downgraden, ohne Probleme zu erwarten?
              
              Zumindestens bis das Problem behoben ist?[/i][/i]
              
              1 Reply Last reply
              0
              • paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #22

                @Mitch:

                Das sollte bei allen meinen Zigbee-Devices gelten, aber nichts passiert. `
                Während das Skript aktiv ist, muss sich der Wert <u>ändern</u>, damit getriggert wird.

                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 Reply Last reply
                0
                • M Offline
                  M Offline
                  Mitch
                  wrote on last edited by
                  #23

                  Hallo zusammen,

                  vielen Dank nochmal an Paul. Er hat mir mit seinen Hinweisen zum Ziel geleitet.

                  Hier das fertige Skript. Es läuft unter dem Javascript 4.0.5 Adapter:

                  `const sensor = getObject('enum.functions.sensors').common.members;
                  
                  for(let i = 0; i < sensor.length; i++) {
                      var name = getObject(sensor[i]).common.name;
                      on(sensor[i] + '.battery', function (dp) { 
                          if(dp.state.val <= 20) {
                              var name = getObject(sensor[i]).common.name;
                              sendTo('telegram.0', {
                                  text:   'Die Batterie vom Sensor '+ name +' neigt sich dem Ende zu. Aktuell noch ' + dp.state.val + '% Batterie.'
                              });
                          }
                      });
                      on(sensor[i] + '.voltage', function (dp) { 
                          if(dp.state.val <= 2.8) {
                              var name = getObject(sensor[i]).common.name;
                              sendTo('telegram.0', {
                                  text:   'Die Batterie vom Sensor ' + name + ' neigt sich dem Ende zu. Die aktuelle Spannung beträgt ' + dp.state.val + 'V.'
                              });
                          }
                      });
                      on(sensor[i] + '.opened', function (dp) { 
                          if(dp.state.val == true) {
                              var name = getObject(sensor[i]).common.name;
                              var id = getObject(sensor[i])._id;
                              var idkurz = id.split('.')[2];            
                              createState('isopen.'+idkurz, true, {
                                  read: true, 
                                  write: true, 
                                  desc: name, 
                                  type: "boolean", 
                                  def: false
                              });
                          }
                          if(dp.state.val == false) {
                              var name = getObject(sensor[i]).common.name;
                              var id = getObject(sensor[i])._id;
                              var idkurz = id.split('.')[2];
                              deleteState('isopen.'+idkurz);
                          }
                      });
                  }`
                  
                  Ich setze den Thread auf gelöst.[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                  
                  1 Reply Last reply
                  0
                  • smartboartS Offline
                    smartboartS Offline
                    smartboart
                    wrote on last edited by
                    #24

                    @paul53:

                    Habe auf Version 4.0.5 hochgezogen und getestet (Gewerk "batterie" zwei Geräten zugeordnet).

                    $('device[state.id=*.state](functions=batterie)');
                    

                    funktioniert nicht.

                    const rm = $('*.state(functions=batterie)');
                    
                    rm.each(function(id, i) {
                        log(id);
                    });
                    
                    

                    funktioniert erst nach Neustart (Javascript / ioBroker).

                    19:50:11.243	info	javascript.1 script.js.common.Test3: zigbee.0.002.state
                    19:50:11.243	info	javascript.1 script.js.common.Test3: zigbee.0.003.state
                    
                    ```` `  
                    

                    Also stimmst du mir zu, das die enum funktionen sich nicht so verhalten wie sie sollten?

                    Was ist jetzt die Ursache?

                    Sollte man das bei github als issue melden? Bei Zigbee oder javascript?

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #25

                      @smartboart:

                      Sollte man das bei github als issue melden? Bei Zigbee oder javascript? `
                      Ja, bei Javascript.

                      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 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

                      572

                      Online

                      32.7k

                      Users

                      82.3k

                      Topics

                      1.3m

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

                      • Don't have an account? Register

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