Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Überwachung Fensterkontakte (zigbee) per Javascript 4.0.5 funktioniert nicht mehr

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mitch last edited by

      Das mit latest ist bei mir auch.

      1 Reply Last reply Reply Quote 0
      • smartboart
        smartboart last edited by

        Node.js: v8.14.0

        NPM: 6.4.1

        Zigbee 0.8.0

        Admin 3.5.10

        javascript 4.0.5

        all das habe ich ausprobiert.. sobald .state oder die functions dazu kommen geht nix…

        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');

        funtkionieren tut nur das

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

        1 Reply Last reply Reply Quote 0
        • smartboart
          smartboart last edited by

          Hier steht auch was zu dem Thema…

          Wurde ein issue auf github angelegt...

          viewtopic.php?f=21&t=16224&p=203966#p203966

          vestehe nur nicht warum das am javascript Adapter liegen soll, wenn es nur mit zigbee Geräten nicht geht...

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Mitch:

            Es hängt wirklich daran, das die Liste unter enum.functions.sensors nicht mehr funktioniert. `
            Wie sieht die Liste aus ?

            const sensor = getObject('enum.functions.sensors').common.members;
            log(JSON.stringify(sensor));
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @smartboart:

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

              1 Reply Last reply Reply Quote 0
              • M
                Mitch last edited by

                @paul53:

                @Mitch:

                Es hängt wirklich daran, das die Liste unter enum.functions.sensors nicht mehr funktioniert. `
                Wie sieht die Liste aus ?

                const sensor = getObject('enum.functions.sensors').common.members;
                log(JSON.stringify(sensor));
                ```` `  
                

                javascript.0 script.js.Skriptsammlung.Test_enumsensors: ["zigbee.0.00158d000232c0b0","zigbee.0.00158d000232c10f","zigbee.0.00158d000232c17f","zigbee.0.00158d000232c18e","zigbee.0.00158d000232c1ac","zigbee.0.00158d000232c51a","zigbee.0.00158d000232cb9f","zigbee.0.00158d000232dcbb","zigbee.0.00158d000232dd62","zigbee.0.00158d00023870bf","zigbee.0.00158d0002387310","zigbee.0.00158d00024354f0","zigbee.0.00158d0002436400","zigbee.0.00158d000243640f"]

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  Das Array mit den Zigbee-Geräten wir geliefert. Dann muss auch die Schleife funktionieren:

                  `const sensor = getObject('enum.functions.sensors').common.members;
                  
                  for(let i = 0; i < sensor.length; i++) {
                     log(sensor[i]);
                  }`[/i]
                  
                  1 Reply Last reply Reply Quote 0
                  • M
                    Mitch last edited by

                    Stimmt, ist auch so:

                    14.12.2018, 15:42:30.367	[info ]: javascript.0 Start javascript script.js.Skriptsammlung.Test_enumsensors2
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c0b0
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c10f
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c17f
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c18e
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c1ac
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c51a
                    14.12.2018, 15:42:30.369	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232cb9f
                    14.12.2018, 15:42:30.370	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232dcbb
                    14.12.2018, 15:42:30.370	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232dd62
                    14.12.2018, 15:42:30.370	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d00023870bf
                    14.12.2018, 15:42:30.370	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d0002387310
                    14.12.2018, 15:42:30.371	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d00024354f0
                    14.12.2018, 15:42:30.371	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d0002436400
                    14.12.2018, 15:42:30.371	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000243640f
                    14.12.2018, 15:42:30.371	[info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: registered 0 subscriptions and 0 schedules
                    

                    Dann muss das Problem erst später auftreten, richtig!

                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      @Mitch:

                      Dann muss das Problem erst später auftreten, richtig! `
                      Ja, den Selector kann ich nicht nachvollziehen. Außerdem - wenn der Selector funktionieren würde - wird eine Trigger auf jeden Datenpunkt der Zigbee-Geräte aus dem Array gebildet. Viele sind aber unnötig und erhöhen nur die Systemlast. Ich würde nur auf die Datenpunkte triggern, die relevant sind.

                      `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] + '.voltage', function (dp) { 
                            if(dp.state.val <= 2.8) {
                               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] + '.battery', function(dp) {
                      //       ...usw.`
                      Es ist ohnehin besser, die Datenpunkt-ID als Selektionskriterium zu verwenden, da der Name beliebig geändert werden kann.[/i][/i][/i]
                      
                      1 Reply Last reply Reply Quote 0
                      • M
                        Mitch last edited by

                        @smartboart:

                        Node.js: v8.14.0

                        NPM: 6.4.1

                        Zigbee 0.8.0

                        Admin 3.5.10

                        javascript 4.0.5 `

                        Ich habe:

                        Node.js: v6.14.4

                        NPM: 3.10.10

                        Zigbee 0.8.0

                        Admin 3.5.10

                        javascript 4.0.5

                        Ich habe eine ältere Node.js und NPM Version. Ich nutze den buanet docker container auf der synology.

                        1 Reply Last reply Reply Quote 0
                        • smartboart
                          smartboart last edited by

                          @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 Reply Quote 0
                          • paul53
                            paul53 last edited by

                            @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")');
                            
                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 last edited by

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

                              1 Reply Last reply Reply Quote 0
                              • smartboart
                                smartboart last edited by

                                @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 Reply Quote 0
                                • paul53
                                  paul53 last edited by

                                  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
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    Mitch last edited by

                                    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 Reply Quote 0
                                    • paul53
                                      paul53 last edited by

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

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        Mitch last edited by

                                        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 Reply Quote 0
                                        • smartboart
                                          smartboart last edited by

                                          @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 Reply Quote 0
                                          • paul53
                                            paul53 last edited by

                                            @smartboart:

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

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            796
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            25
                                            1725
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo