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

      Wenn es dir reicht, dass du das Batteriesysmbol rot hast, dann kannst du im Bereich Signalbilder über CSS den Hintergrund rot einfärben.

      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,

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

                                613
                                Online

                                32.0k
                                Users

                                80.5k
                                Topics

                                1.3m
                                Posts

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