Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Gelöst] Anzeige des Batteriestatus in der Startseite

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    SOLVED [Gelöst] Anzeige des Batteriestatus in der Startseite

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tempestas @Alero last edited by

      @Alero
      Nimm das Batterieskript und verlinke auf die Anzahl der leeren Batterien. Wenn größer 0, dann rot.
      So sparst du dir viel geklicke und manuelle Arbeit

      A 1 Reply Last reply Reply Quote 0
      • T
        tempestas @opossum last edited by tempestas

        @opossum

        Skript für Homematic und Homematic IP.
        Erstellt eine Liste und einen Counter mit Geräten, die Lowbattery melden und reagiert auf jede Änderung des Status, d.h. man muss nicht Intervalmäßig ständig einzeln definierte Batterien abfragen.
        Original von Pix erstellt

        var debug = false;
        
        createState('zählenLowbat.möglicheLOWBAT', 0);   // wenn benötigt: Anzahl der vorhandenen Geräte
        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]');
        var cacheSelectorLOW_BAT  = $('channel[state.id=*.LOW_BAT]');   // für Homematic IP, dort LOWBAT in LOW_BAT umbenannt
        
        function countLowbat(obj) {
           // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
           var moeglicheLOWBAT = 0;
           var anzahlLOWBAT    = 0;
           var textLOWBAT      = [];
        
           if (obj) {
              if(debug) log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);  // Info im Log, welcher Zustand sich geändert hat
           } else {
              if(debug) 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)
                if (status === true) {                                              // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                var name = getObject(id).common.name;                                   // neu eingefügt
                var devicename = name.substring(0, name.indexOf(":0.LOWBAT"));    // neu eingefügt, LOWBAT aus Bezeichnung entfernen   
                textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                ++anzahlLOWBAT;
              }                
              if(debug) log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
              ++moeglicheLOWBAT;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
           }); 
        
           cacheSelectorLOW_BAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOW_BAT, Homematic IP
              var status = getState(id).val;                                    // Zustand *.LOW_BAT abfragen (jedes Element)
                if (status === true) {                                            // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt      
                var name = getObject(id).common.name;                             // neu eingefügt
                var devicename = name.substring(0, name.indexOf(":0.LOW_BAT"));   // neu eingefügt, LOW_BAT aus Bezeichnung entfernen         
                textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                ++anzahlLOWBAT;
              }                
              if(debug) 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
           if(debug) log("Text: " + textLOWBAT);
           log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " +  anzahlLOWBAT);
        
           // 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('<br>')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung
           setState("zählenLowbat.anzahlLOWBAT",   anzahlLOWBAT);        // 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);
        });
        
        cacheSelectorLOW_BAT.on(function(obj) {    // bei Zustandänderung *. LOW_BAT in allen Gewerken
           countLowbat(obj);
        });
        
        
        // Bei Start
        
        countLowbat();
        
        S 1 Reply Last reply Reply Quote 1
        • opossum
          opossum last edited by opossum

          Hallo @tempestas

          welches Batteriescript meinst Du, hast Du da einen Link?

          Gruß
          Egbert

          T 1 Reply Last reply Reply Quote 0
          • T
            tempestas @opossum last edited by tempestas

            @opossum

            Skript für Homematic und Homematic IP.
            Erstellt eine Liste und einen Counter mit Geräten, die Lowbattery melden und reagiert auf jede Änderung des Status, d.h. man muss nicht Intervalmäßig ständig einzeln definierte Batterien abfragen.
            Original von Pix erstellt

            var debug = false;
            
            createState('zählenLowbat.möglicheLOWBAT', 0);   // wenn benötigt: Anzahl der vorhandenen Geräte
            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]');
            var cacheSelectorLOW_BAT  = $('channel[state.id=*.LOW_BAT]');   // für Homematic IP, dort LOWBAT in LOW_BAT umbenannt
            
            function countLowbat(obj) {
               // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
               var moeglicheLOWBAT = 0;
               var anzahlLOWBAT    = 0;
               var textLOWBAT      = [];
            
               if (obj) {
                  if(debug) log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);  // Info im Log, welcher Zustand sich geändert hat
               } else {
                  if(debug) 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)
                    if (status === true) {                                              // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                    var name = getObject(id).common.name;                                   // neu eingefügt
                    var devicename = name.substring(0, name.indexOf(":0.LOWBAT"));    // neu eingefügt, LOWBAT aus Bezeichnung entfernen   
                    textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                    ++anzahlLOWBAT;
                  }                
                  if(debug) log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                  ++moeglicheLOWBAT;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
               }); 
            
               cacheSelectorLOW_BAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOW_BAT, Homematic IP
                  var status = getState(id).val;                                    // Zustand *.LOW_BAT abfragen (jedes Element)
                    if (status === true) {                                            // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt      
                    var name = getObject(id).common.name;                             // neu eingefügt
                    var devicename = name.substring(0, name.indexOf(":0.LOW_BAT"));   // neu eingefügt, LOW_BAT aus Bezeichnung entfernen         
                    textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                    ++anzahlLOWBAT;
                  }                
                  if(debug) 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
               if(debug) log("Text: " + textLOWBAT);
               log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " +  anzahlLOWBAT);
            
               // 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('<br>')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung
               setState("zählenLowbat.anzahlLOWBAT",   anzahlLOWBAT);        // 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);
            });
            
            cacheSelectorLOW_BAT.on(function(obj) {    // bei Zustandänderung *. LOW_BAT in allen Gewerken
               countLowbat(obj);
            });
            
            
            // Bei Start
            
            countLowbat();
            
            S 1 Reply Last reply Reply Quote 1
            • opossum
              opossum last edited by

              Hallo,

              danke für das Script, werde ich mir mal anschauen.

              Gruß
              Egbert

              1 Reply Last reply Reply Quote 0
              • A
                Alero last edited by

                Hi,
                erst einmal vielen Dank für die ganzen Antworten. Werde sie mal ausprobieren. Kam nicht ins Forum, daher jetzt erst die Antwort.
                Melde mich.

                Gruß
                Alero

                1 Reply Last reply Reply Quote 0
                • A
                  Alero @tempestas last edited by

                  @tempestas
                  Hi,

                  ich bin noch recht neu unterwegs im IoBroker.
                  Was genaumeinst du mit verlinken der leeren Batt.?
                  Das Script habe ich unter Javascript0 eingefügt. Welches Widget sollte ich jetzt nehmen damit ich den Verweis auf das Script verbinden kann.
                  Oder bin ich jetzt völlig auf der falschen Spur?

                  Gruß
                  Alero

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    tempestas @Alero last edited by

                    @Alero

                    Wenn das Skript gestartet ist, wirst du unter Objekten --> Javascript.0 --> zählenlowbat --> anzahlLowbat

                    Da steht entweder 0 oder eben eine höhere Zahl.
                    Je nachdem was du willst kannst du z.B. ein widget nehmen, dass direkt die Zahl ausliest. z.B. köntnest du dir ein Bild einer Batterie einstellen und daran ein buble machen mit der Verlinkung auf die Anzahl der leeren Batterien. Oder du gehst über die Sichtbarkeit. Nimm z.B. ein einfaches Image Widget, stell dir dort ein Batterie-Image ein (was auch immer du magst). Gehe rechts im Menü auf Sichtbarkeit und stelle als Bedingung ein, dass anzahlLowbat > 0 sein soll. Dann wird die Batterie nur angezeigt, wenn mindestens eine Batterie leer ist. So habe ich es z.b eingestellt.

                    A 1 Reply Last reply Reply Quote 1
                    • A
                      Alero @tempestas last edited by

                      @tempestas
                      Hi,
                      Danke. Klappt. Habe es noch angepasst. Wenn Lowbat =0 soll er mir die Batt anzeigen und erst umspringen wenn er min. 1 leere Batt hat.

                      Vielen Dank noch einmal.

                      Gruß
                      Alero

                      1 Reply Last reply Reply Quote 0
                      • S
                        Semmy @tempestas last edited by

                        @tempestas sagte in [Gelöst] Anzeige des Batteriestatus in der Startseite:

                        @opossum

                        Skript für Homematic und Homematic IP.
                        Erstellt eine Liste und einen Counter mit Geräten, die Lowbattery melden und reagiert auf jede Änderung des Status, d.h. man muss nicht Intervalmäßig ständig einzeln definierte Batterien abfragen.
                        Original von Pix erstellt

                        var debug = false;
                        
                        createState('zählenLowbat.möglicheLOWBAT', 0);   // wenn benötigt: Anzahl der vorhandenen Geräte
                        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]');
                        var cacheSelectorLOW_BAT  = $('channel[state.id=*.LOW_BAT]');   // für Homematic IP, dort LOWBAT in LOW_BAT umbenannt
                        
                        function countLowbat(obj) {
                           // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
                           var moeglicheLOWBAT = 0;
                           var anzahlLOWBAT    = 0;
                           var textLOWBAT      = [];
                        
                           if (obj) {
                              if(debug) log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);  // Info im Log, welcher Zustand sich geändert hat
                           } else {
                              if(debug) 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)
                                if (status === true) {                                              // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                                var name = getObject(id).common.name;                                   // neu eingefügt
                                var devicename = name.substring(0, name.indexOf(":0.LOWBAT"));    // neu eingefügt, LOWBAT aus Bezeichnung entfernen   
                                textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                                ++anzahlLOWBAT;
                              }                
                              if(debug) log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                              ++moeglicheLOWBAT;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                           }); 
                        
                           cacheSelectorLOW_BAT.each(function (id, i) {                         // Schleife für jedes gefundenen Element *.LOW_BAT, Homematic IP
                              var status = getState(id).val;                                    // Zustand *.LOW_BAT abfragen (jedes Element)
                                if (status === true) {                                            // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt      
                                var name = getObject(id).common.name;                             // neu eingefügt
                                var devicename = name.substring(0, name.indexOf(":0.LOW_BAT"));   // neu eingefügt, LOW_BAT aus Bezeichnung entfernen         
                                textLOWBAT.push(devicename);                                   // Zu Array hinzufügen; aktualisiert, vormals obj.common.name
                                ++anzahlLOWBAT;
                              }                
                              if(debug) 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
                           if(debug) log("Text: " + textLOWBAT);
                           log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " +  anzahlLOWBAT);
                        
                           // 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('<br>')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung
                           setState("zählenLowbat.anzahlLOWBAT",   anzahlLOWBAT);        // 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);
                        });
                        
                        cacheSelectorLOW_BAT.on(function(obj) {    // bei Zustandänderung *. LOW_BAT in allen Gewerken
                           countLowbat(obj);
                        });
                        
                        
                        // Bei Start
                        
                        countLowbat();
                        

                        Hallo
                        Ich habe ein Problem, dass mir z.B. bei einen optischen Fenstermelder immer zwei Einträge angezeigt werden bei lowbattery. Wie kann man das lösen?

                        I 1 Reply Last reply Reply Quote 0
                        • I
                          Int17 @Semmy last edited by

                          @tempestas
                          Wenn ich
                          var debug = true;
                          setze bekomme ich keinerlei Ausgaben.
                          Weder im iobroker Log noch im Console Log, wenn ich mit console.log arbeite.
                          Das Script zählt richtigerweise, dass ein HmIP Gerät Lowbat Warnung hat.
                          Idee, woran das liegen kann?

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          382
                          Online

                          32.0k
                          Users

                          80.5k
                          Topics

                          1.3m
                          Posts

                          vis
                          6
                          14
                          8009
                          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