Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage] lowbat Script von paul

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Frage] lowbat Script von paul

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by Jey Cee

      Guten Morgen,

      bekanntlich gibt es dieses lowbat-Script von paul

      createState('zählenLowbat.möglicheLOWBAT', 0);   // wenn benötigt: Anzahl der vorhandenen LOWBAT
      createState('zählenLowbat.anzahlLOWBAT', 0);     // wenn benötigt: Anzahl der vorhandenen LOWBAT
      createState('zählenLowbat.textLOWBAT', " ");     // Anzahl LOWBAT, die an sind als Variable unter Javascript.0 anlegen
      
      var cacheSelectorLOWBAT  = $('channel[state.id=*.LOWBAT]');
      
      function countLowbat(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
          var moeglicheLOWBAT = 0;
         var textLOWBAT      = [];
      
          if (obj) {
            log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);  // Info im Log, welcher Zustand sich geändert hat
         } else {
             log('Ausgelöst bei Timer'); 
          } 
       
          cacheSelectorLOWBAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOWBAT
             var status = getState(id).val;                                  // Zustand *.LOWBAT abfragen (jedes Element)
             var obj    = getObject(id);
             if (status === true) {                                          // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                textLOWBAT.push(obj.common.name);                           // Zu Array hinzufügen
             }                
             log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
             ++moeglicheLOWBAT;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
          }); 
      
          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
          log("Text: " + textLOWBAT.join(', '));
          log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " +  textLOWBAT.length);
       
          // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
          setState("zählenLowbat.textLOWBAT",     textLOWBAT.join(',')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung
          setState("zählenLowbat.anzahlLOWBAT",   textLOWBAT.length);        // Schreibt die aktuelle Anzahl der Geräte im System
          setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT);          // Schreibt die aktuelle Anzahl der vorhandene Geräte 
       }
       
       cacheSelectorLOWBAT.on(function(obj) {    // bei Zustandänderung *. LOWBAT in allen Gewerken
          countLowbat(obj);
       });
       schedule("*/60 * * * *", function () {                                  //oder!! soll entweder ausgelöst werden alle 10 Minuten
          countLowbat();
       });
      

      Ich wollte nun diese Zeile abändern:

      alt -> var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]');

      neu -> var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions="Batterie betrieben")');

      Ziel:

      Mit der "alten" Zeile bekomme ich eine warn-meldung bei meinen cuxd Geräten. Grund dürfte sein, dass dieses manuelle angelegten Geräte kein lowbat haben.

      Deshalb wollte ich nur das Gewerk "Batterie betrieben" durchsuchen.

      Das klappt aber nicht; bzw. es werden nur ein Teil der Geräte angezeigt.

      Gibt es da einen Grund warum das nicht funktioniert?

      mfg

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

        Poste bitte das Objekt "enum.functions.Batterie betrieben" (raw in Code tags).

        1 Reply Last reply Reply Quote 0
        • bahnuhr
          bahnuhr Forum Testing Most Active last edited by

          so richtig ?

          createState('zählenLowbat.möglicheLOWBAT', 0);   // wenn benötigt: Anzahl der vorhandenen LOWBAT
          createState('zählenLowbat.anzahlLOWBAT', 0);     // wenn benötigt: Anzahl der vorhandenen LOWBAT
          createState('zählenLowbat.textLOWBAT', " ");     // Anzahl LOWBAT, die an sind als Variable unter Javascript.0 anlegen
          
          var cacheSelectorLOWBAT  = $('channel[state.id=*.LOWBAT]');
          
          function countLowbat(obj) {
             // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
             var moeglicheLOWBAT = 0;
             var textLOWBAT      = [];
          
             if (obj) {
                log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);  // Info im Log, welcher Zustand sich geändert hat
             } else {
                log('Ausgelöst bei Timer'); 
             } 
          
             cacheSelectorLOWBAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOWBAT
                var status = getState(id).val;                                  // Zustand *.LOWBAT abfragen (jedes Element)
                var obj    = getObject(id);
                if (status === true) {                                          // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                   textLOWBAT.push(obj.common.name);                           // Zu Array hinzufügen
                }                
                log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                ++moeglicheLOWBAT;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
             }); 
          
             // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
             log("Text: " + textLOWBAT.join(', '));
             log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " +  textLOWBAT.length);
          
             // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
             setState("zählenLowbat.textLOWBAT",     textLOWBAT.join(',
          ')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung
             setState("zählenLowbat.anzahlLOWBAT",   textLOWBAT.length);        // Schreibt die aktuelle Anzahl der Geräte im System
             setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT);          // Schreibt die aktuelle Anzahl der vorhandene Geräte 
          }
          
          cacheSelectorLOWBAT.on(function(obj) {    // bei Zustandänderung *. LOWBAT in allen Gewerken
             countLowbat(obj);
          });
          schedule("*/60 * * * *", function () {                                  //oder!! soll entweder ausgelöst werden alle 10 Minuten
             countLowbat();
          });
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @bahnuhr:

            so richtig ? `
            Nein, das ist das Skript. Ich würde gern das Objekt (Reiter "Objekte") sehen.

            493_objekt_raw_enum_functions_batterie.jpg

            1 Reply Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active last edited by

              ahaaaaaa

              sieht so aus:

              {
                "desc": "",
                "from": "system.adapter.hm-rpc.0",
                "ts": 1521228098628,
                "common": {
                  "name": "Batterie betrieben",
                  "members": [
                    "hm-rpc.0.LEQ0922159.1",
                    "hm-rpc.0.LEQ1177607.1",
                    "hm-rpc.0.LEQ1176746.1",
                    "hm-rpc.0.JEQ0264936.1",
                    "hm-rpc.0.KEQ0845003.1",
                    "hm-rpc.0.LEQ0030811.1",
                    "hm-rpc.0.LEQ0642545.1",
                    "hm-rpc.0.KEQ0972353.1",
                    "hm-rpc.0.JEQ0263935.1",
                    "hm-rpc.0.KEQ0972459.1",
                    "hm-rpc.0.LEQ0030556.1",
                    "hm-rpc.0.LEQ0642275.1",
                    "hm-rpc.0.LEQ0031227.1",
                    "hm-rpc.0.LEQ0030758.1",
                    "hm-rpc.0.LEQ0031043.1",
                    "hm-rpc.0.MEQ1425139.1",
                    "hm-rpc.0.NEQ0046063.1",
                    "hm-rpc.0.LEQ0031256.1",
                    "hm-rpc.0.LEQ0642555.1",
                    "hm-rpc.0.LEQ0492702.1",
                    "hm-rpc.0.LEQ0031112.1",
                    "hm-rpc.0.KEQ0972248.1",
                    "hm-rpc.0.KEQ0905371.2",
                    "hm-rpc.0.MEQ0172937.1",
                    "hm-rpc.0.MEQ0185071.1",
                    "hm-rpc.0.MEQ0369906.1",
                    "hm-rpc.0.MEQ0369829.1",
                    "hm-rpc.0.MEQ0186214.1",
                    "hm-rpc.0.MEQ0367128.1",
                    "hm-rpc.0.LEQ1469992.1",
                    "hm-rpc.0.LEQ1470572.1",
                    "hm-rpc.0.LEQ1176525.1",
                    "hm-rpc.0.LEQ0175356.1",
                    "hm-rpc.0.JEQ0684367.1",
                    "hm-rpc.0.GEQ0250711.1",
                    "hm-rpc.0.LEQ0175293.1",
                    "hm-rpc.0.LEQ0175827.1",
                    "hm-rpc.0.NEQ0530138.1",
                    "hm-rpc.0.NEQ0530138.2",
                    "hm-rpc.0.KEQ0905371.1",
                    "hm-rpc.0.KEQ0241184.1",
                    "hm-rpc.0.LEQ0175356.2",
                    "hm-rpc.0.KEQ0954261.1",
                    "hm-rpc.0.LEQ1313457.2",
                    "hm-rpc.0.LEQ1313457.1",
                    "hm-rpc.0.LEQ1313457.3",
                    "hm-rpc.0.KEQ1040434.4",
                    "hm-rpc.0.KEQ0576469.4",
                    "hm-rpc.0.LEQ0783942.4",
                    "hm-rpc.0.KEQ0574459.4",
                    "hm-rpc.0.KEQ1040651.4",
                    "hm-rpc.0.KEQ1040517.4",
                    "hm-rpc.0.KEQ0574613.4",
                    "hm-rpc.0.LEQ1200382.4",
                    "hm-rpc.0.KEQ0574642.4",
                    "hm-rpc.0.LEQ0782624.4",
                    "hm-rpc.0.LEQ0784844.4",
                    "hm-rpc.0.KEQ1040443.4",
                    "hm-rpc.0.KEQ0653104.4",
                    "hm-rpc.0.LEQ0635400.1",
                    "hm-rpc.0.LEQ0635400.2",
                    "hm-rpc.0.LEQ0635400.3",
                    "hm-rpc.0.LEQ0635400.4",
                    "hm-rpc.0.LEQ0635400.5",
                    "hm-rpc.0.LEQ0635400.6",
                    "hm-rpc.0.LEQ0636114.1",
                    "hm-rpc.0.LEQ0636114.2",
                    "hm-rpc.0.LEQ0636114.3",
                    "hm-rpc.0.LEQ0636114.4",
                    "hm-rpc.0.LEQ0636114.5",
                    "hm-rpc.0.LEQ0636114.6",
                    "hm-rpc.0.GEQ0250711.2",
                    "hm-rpc.0.GEQ0250711.3",
                    "hm-rpc.0.GEQ0250711.4",
                    "hm-rpc.0.JEQ0684367.2",
                    "hm-rpc.0.JEQ0684367.3",
                    "hm-rpc.0.JEQ0684367.4",
                    "hm-rpc.0.KEQ0056854.2",
                    "hm-rpc.0.KEQ0056929.2",
                    "hm-rpc.0.KEQ0905371.3",
                    "hm-rpc.0.LEQ0028395.1",
                    "hm-rpc.0.LEQ0028395.4",
                    "hm-rpc.0.LEQ0028395.3",
                    "hm-rpc.0.LEQ0028395.2",
                    "hm-rpc.0.LEQ0029078.1",
                    "hm-rpc.0.LEQ1221393.1",
                    "hm-rpc.0.LEQ0175356.3",
                    "hm-rpc.0.KEQ0766778.1",
                    "hm-rpc.0.NEQ0322651.1",
                    "hm-rpc.0.NEQ0322032.1",
                    "hm-rpc.0.KEQ0056929.1",
                    "hm-rpc.0.KEQ0056854.1",
                    "hm-rpc.0.NEQ0530138.3",
                    "hm-rpc.0.LTK0100483.1",
                    "hm-rpc.0.LTK0016804.1",
                    "hm-rpc.0.LTK0009865.1",
                    "hm-rpc.0.LTK0008637.1",
                    "hm-rpc.0.LTK0009942.1",
                    "hm-rpc.0.OEQ1006181.1",
                    "hm-rpc.0.OEQ1006181.2",
                    "hm-rpc.0.OEQ1006181.3",
                    "hm-rpc.0.OEQ1006181.4",
                    "hm-rpc.0.LTK0111742.1"
                  ]
                },
                "native": {
                  "Name": "Batterie betrieben",
                  "TypeName": "ENUM",
                  "EnumInfo": ""
                },
                "acl": {
                  "object": 1636,
                  "owner": "system.user.admin",
                  "ownerGroup": "system.group.administrator"
                },
                "_id": "enum.functions.Batterie betrieben",
                "type": "enum"
              }
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Bitte keine Leerzeichen in einer ID !! Das kann Probleme bringen.
                @bahnuhr:

                Mit der "alten" Zeile bekomme ich eine warn-meldung bei meinen cuxd Geräten. Grund dürfte sein, dass dieses manuelle angelegten Geräte kein lowbat haben. `
                Ich sehe bei den Members ausschließlich <u>Kanäle</u> von der Instanz hm-rpc.0 (BidCos-RF), kein CUxD.

                Da die Kanäle mehrere Datenpunkte haben, muss man eingerenzen mit [state.id=*.LOWBAT]. Wenn einige Geräte kein LOWBAT haben, muss es anders gelöst werden:

                Die <u>Datenpunkte</u> müssen dem Gewerk zugeordnet und der Selektor muss angepasst werden:

                var cacheSelectorLOWBAT  = $('state(functions=batterie_betrieben)');
                
                

                EDIT: Ich wundere mich über die Kanalnummern in der Members-Liste: Bei meinen Geräten (Thermostate) befindet sich LOWBAT im Kanal 0.

                1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active last edited by

                  So, habe nun auf der ccu2 das Gewerk geändert in "Batterie"

                  1. folgendes Script (analog paul)
                  var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); 
                  
                     cacheSelectorLOWBAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOWBAT
                        var status = getState(id).val;                                  // Zustand *.LOWBAT abfragen (jedes Element)
                        var obj    = getObject(id);
                        if (status === true) {                                          // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                           textLOWBAT.push(obj.common.name);                           // Zu Array hinzufügen
                        }                
                        log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                     }); 
                  
                  

                  Folglich cuxd Geräte erzeugen Warnung

                  javascript.0	2018-03-19 19:37:27.389	warn	at script.js.Scripte.test1:7:20
                  javascript.0	2018-03-19 19:37:27.389	warn	getState "hm-rpc.1.CUX0200010.0.LOWBAT" not found (3) states[id]=null
                  javascript.0	2018-03-19 19:37:27.389	info	script.js.Scripte.test1: Geräte Nr. 3: CUX: Wassertränke-Nachlauf:0.LOWBAT: null
                  javascript.0	2018-03-19 19:37:27.389	warn	at script.js.Scripte.test1:7:20
                  javascript.0	2018-03-19 19:37:27.388	warn	getState "hm-rpc.1.CUX0200009.0.LOWBAT" not found (3) states[id]=null
                  javascript.0	2018-03-19 19:37:27.388	info	script.js.Scripte.test1: Geräte Nr. 2: CUX: Beamer-Hide:0.LOWBAT: null
                  javascript.0	2018-03-19 19:37:27.388	warn	at script.js.Scripte.test1:7:20
                  javascript.0	2018-03-19 19:37:27.388	warn	getState "hm-rpc.1.CUX0200008.0.LOWBAT" not found (3) states[id]=null
                  javascript.0	2018-03-19 19:37:27.388	info	script.js.Scripte.test1: Geräte Nr. 1: CUX: Beamer-Power:0.LOWBAT: null
                  javascript.0	2018-03-19 19:37:27.387	warn	at script.js.Scripte.test1:7:20
                  javascript.0	2018-03-19 19:37:27.387	warn	getState "hm-rpc.1.CUX0200006.0.LOWBAT" not found (3) states[id]=null
                  javascript.0	2018-03-19 19:37:27.387	info	script.js.Scripte.test1: Geräte Nr. 0: CUX: Zisterne-Wasser:0.LOWBAT: null
                  javascript.0	2018-03-19 19:37:27.387	warn	at script.js.Scripte.test1:7:20
                  javascript.0	2018-03-19 19:37:27.386	warn	getState "hm-rpc.1.CUX0200003.0.LOWBAT" not found (3) states[id]=null
                  javascript.0	2018-03-19 19:37:27.375	info	Start javascript script.js.Scripte.test1
                  javascript.0	2018-03-19 19:37:27.355	info	Stop script script.js.Scripte.test1
                  

                  Wenn ich den selektor ändere auf:

                  var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions="Batterie")'); 
                  

                  kommt gar nichts mehr.

                  Das habe ich gemeint.

                  Mit "alt" kommt Warnung wg. cuxd.

                  Und mit "neu" kommt nichts mehr.

                  mfg

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

                    @bahnuhr:

                    Wenn ich den selektor ändere auf:

                    var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions="Batterie")');
                    
                    

                    kommt gar nichts mehr. `
                    Lautet die ID "enum.functions.Batterie" oder "enum.functions.batterie" ?

                    https://forum.iobroker.net/viewtopic.php?f=21&t=12677&p=134465#p134465, dass man nach Anlegen eines neuen Gewerkes erst ioBroker (Host) neu starten muss, damit es mit dem neuen Gewerk funktioniert.
                    @bahnuhr:

                    Folglich cuxd Geräte erzeugen Warnung

                    javascript.0   2018-03-19 19:37:27.389   warn   at script.js.Scripte.test1:7:20
                    javascript.0   2018-03-19 19:37:27.389   warn   getState "hm-rpc.1.CUX0200010.0.LOWBAT" not found (3) states[id]=null
                    javascript.0   2018-03-19 19:37:27.389   info   script.js.Scripte.test1: Geräte Nr. 3: CUX: Wassertränke-Nachlauf:0.LOWBAT: null
                    ```` `  
                    

                    Das sieht danach aus, dass es zwar das Objekt "hm-rpc.1.CUX0200010.0.LOWBAT" gibt, aber noch kein Zustand (state) existiert, da noch nie ein Wert gesendet wurde. Ich würde mit einem Hilfsscript die Zustände erzeugen (Script danach wieder löschen / deaktivieren):

                    setState("hm-rpc.1.CUX0200010.0.LOWBAT", false);
                    

                    Entsprechend für die anderen 4 Datenpunkte.

                    1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active last edited by

                      iobroker hab ich komplett neu gestartet.

                      Batterie ist bei enum vorhanden; und ja B wird groß geschrieben.

                      Und state erzeugen geht nicht; weil es doch den Datenpunkt gar nicht gibt.

                      mfg

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

                        @bahnuhr:

                        Und state erzeugen geht nicht; weil es doch den Datenpunkt gar nicht gibt. `
                        Wirklich nicht ? Wie kommt es dann zu der Warnung ?
                        @bahnuhr:

                        Batterie ist bei enum vorhanden; und ja B wird groß geschrieben. `
                        Die ID ist "enum.functions.Batterie" ? Was ergibt das Log ?

                        var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions=Batterie)');
                        log(JSON.stringify(cacheSelectorLOWBAT));
                        
                        1 Reply Last reply Reply Quote 0
                        • bahnuhr
                          bahnuhr Forum Testing Most Active last edited by

                          @paul53:

                          Wirklich nicht ? Wie kommt es dann zu der Warnung ? `

                          Du hast recht; diesen Punkt gibt es tatsächlich.

                          Hab ich übersehen; komisch!?!?!?

                          @paul53:

                          var cacheSelectorLOWBAT = $('channelstate.id=*.LOWBAT');

                          log(JSON.stringify(cacheSelectorLOWBAT)); `

                          Ergibt:

                          javascript.0	2018-03-19 21:38:44.500	info	script.js.Scripte.test2: {"length":0}
                          

                          Ehrlich gesagt; ich versteh es nicht.

                          unter Aufzählung sind bei "enum.functions.Batterie" zahlreiche Geräte ersichtlich.

                          Und dann kommt 0.

                          Ist mir zu hoch.

                          Vielleicht ist ja die Lösung mit dem "false" schreiben die richtige.

                          Oder man lässt es so; ist ja nur ne Warnung. Und das Script läuft ja.

                          mfg und Danke für deine Hilfe und Unterstützung.

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

                            @bahnuhr:

                            unter Aufzählung sind bei "enum.functions.Batterie" zahlreiche Geräte ersichtlich.

                            Und dann kommt 0. `
                            Das stimmt. Allerdings ist LOWBAT bei allen Geräten, die ich kenne, dem Kanal 0 zugeordnet. In der Liste ist aber kein Kanal 0 dabei. Ich vermute, dass es damit zusammen hängt. Das Problem ist, dass der Kanal 0 auf der CCU unsichtbar ist (zumindest war es auf meiner CCU1 so).

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            863
                            Online

                            31.7k
                            Users

                            79.8k
                            Topics

                            1.3m
                            Posts

                            javascript monitoring
                            2
                            12
                            1217
                            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