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.
    • opossum
      opossum last edited by

      Hallo,

      ich habe als Batteriewidget das jqui-mfd Widget. Da kannst Du die Anzahl der Signalbilder angeben.

      122c424d-bc8c-4cc3-9f1a-a70e29c402ad-image.png

      839b897a-3dbb-439f-816e-97190023bc4a-image.png

      Du kannst dann unter Eigenschaften für insgesamt 10 Zustände eigene Icons und Farben wählen.

      18331739-5e08-4ecf-8642-368bee2facb2-image.png

      Vielleicht hilft es Dir ja.

      Gruß
      Egbert

      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,

          Du könntest aber auch eine neue Variable unter admin.0 anlegen. Dazu dann noch ein Blocklyscript zusammenklicken. Dort alle Batteriezustände abfragen. Ist eine unter Deiner gewählten Schwellspannung, dann die Variable von grün auf rot setzen. Diese Variable für Deinen Button auswerten. Dann kannst Du mit den Signalbildern wie oben genannt arbeiten. Wobei grün und rot hier nur von mir so benannt werden. Man kann da natürlich true und false als logischen Wert nehmen. Das Script dann zyklisch laufen lassen, eventuell reicht hier ja 4 mal am Tag oder so.

          Gruß
          Egbert

          1 Reply Last reply Reply Quote 0
          • 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
            • 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

                              853
                              Online

                              32.0k
                              Users

                              80.5k
                              Topics

                              1.3m
                              Posts

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