Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Batteriescripterweiterung Mihome auf Zigbee-Ad.

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Batteriescripterweiterung Mihome auf Zigbee-Ad.

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

      Ich habe seit längerem ein Batteriescript für meine MiHub-Sensoren am laufen. Das funktioniert prima.
      Mittlerweile habe ich einige Batteriegeräte im Zigbee-Adapter (Denonz und Hue-Bridge zwar auch...wenn auch wenig aber eins nach dem anderen 🙂 ).
      Mit meinen Quasi nicht vorhandenen Java Kenntnissen habe ich versucht zu der Mi-Home Abfrage einige Zeilen hinzuzufügen die auch den Zigbee Adapter abfragen. Leider ohne Erfolg. Hat mir jemand einen Tip das ganze so anzupassen, dass auch die Zigbee-States abgefragt werden??

      
      
      const mihome = $('channel[state.id=mihome.0.devices.*.percent]');
      
      const zigbee = $('channel[state.id=zigbee.0.*.battery]');
      
       
      
      var Infos = [];
      
      var Values = [];
      
       
      
      function checkBatt(id, i) {
      
          var value = getState(id).val;
      
          if(value < 101) { // Anpassen !
      
              var pathname = id.substring(0, id.lastIndexOf('.'));
      
              var name = getObject(pathname).common.name;
      
              if(Infos.indexOf(name) == -1) {
      
                  Infos.push(name);
      
                  Values.push(value);
      
              }
      
          }
      
      }
      
       
      
      function lowBatt() {
      
         Infos = []; 
      
         Values= [];    
      
         var InfoMessage = 'Batterien Stand Liste:\n';
      
         mihome.each(checkBatt);
      
         zigbee.each(checkBatt);
      
         if(Infos.length) {
      
            for(let i = 0; i < Infos.length; i++) {
      
               InfoMessage = InfoMessage + Infos[i] + ': ' + Values[i] + ' %\n';
      
            }  
      
            sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
      
         }
      
      }
      
      
      on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
      
      on({id: /^zigbee\.0\.devices\..+\.battery$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
      
      lowBatt(); // Aufruf bei Skriptstart
      

      Hier die Fehlermeldung:

      25.1.2020, 00:02:34.525	[info ]: javascript.0 (9360) Start javascript script.js.Bot-Scripts.Batterieliste_Tigger
      25.1.2020, 00:02:34.652	[warn ]: javascript.0 (9360)     at checkBatt (script.js.Bot-Scripts.Batterieliste_Tigger:17:17)
      25.1.2020, 00:02:34.652	[warn ]: javascript.0 (9360)     at lowBatt (script.js.Bot-Scripts.Batterieliste_Tigger:49:11)
      25.1.2020, 00:02:34.652	[warn ]: javascript.0 (9360)     at script.js.Bot-Scripts.Batterieliste_Tigger:70:1
      25.1.2020, 00:02:34.658	[error]: javascript.0 (9360) script.js.Bot-Scripts.Batterieliste_Tigger: script.js.Bot-Scripts.Batterieliste_Tigger:23
      25.1.2020, 00:02:34.659	[error]: javascript.0 (9360)     at checkBatt (script.js.Bot-Scripts.Batterieliste_Tigger:23:39)
      25.1.2020, 00:02:34.659	[error]: javascript.0 (9360)     at lowBatt (script.js.Bot-Scripts.Batterieliste_Tigger:49:11)
      25.1.2020, 00:02:34.660	[error]: javascript.0 (9360)     at script.js.Bot-Scripts.Batterieliste_Tigger:70:1
      25.1.2020, 00:02:50.842	[info ]: javascript.0 (9360) Stop script script.js.Bot-Scripts.Batterieliste_Tigger
      
      1 Reply Last reply Reply Quote 0
      • D
        DocGame last edited by

        Hab jetzt wirklich alles versucht.... ich bekomme es nicht hin.
        @paul53 von dir hatte ich ja das Ursprungsscript für die MiHub Abfrage. Was muss ich ändern um auch die Zigbee-Adapter Batteriewerte rein zu bekommen?

        Gruß Ralf

        T 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @DocGame last edited by ticaki

          @DocGame
          Kannst du mir mal den kompletten Datenpfad für zigbee.0.*.battery als Beispiel posten mit Wert? Wollte nachher sowas ähnliches für mich schreiben. Kann ich mir sparen 🙂

          D 1 Reply Last reply Reply Quote 0
          • D
            DocGame @ticaki last edited by

            @ticaki Hier das Script, das mit den MiHome Geräten einwandfrei läuft:

            const mihome = $('channel[state.id=mihome.0.devices.*.percent]');
            var Infos = [];
            var Values = [];
            function checkBatt(id, i) {
                var value = getState(id).val;
                if(value < 101) { // Anpassen !
                    var pathname = id.substring(0, id.lastIndexOf('.'));
                    var name = getObject(pathname).common.name;
                    if(Infos.indexOf(name) == -1) {
                        Infos.push(name);
                        Values.push(value);
                    }
                }
            }
            
            function lowBatt() {
               Infos = []; 
               Values= [];    
               var InfoMessage = 'Batterien Stand Liste:\n';
               mihome.each(checkBatt);
            
               if(Infos.length) {
                  for(let i = 0; i < Infos.length; i++) {
                     InfoMessage = InfoMessage + Infos[i] + ': ' + Values[i] + ' %\n';
                  }  
                  sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
               }
            }
            on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
            
            lowBatt(); // Aufruf bei Skriptstart
            

            Das will ich noch für die Batteriegeräte der Zigbee (am wichtigsten), Hue und Deconz-Adapter erweitern, damit ich alles in der Liste habe.
            Hier scheitere ich allerdings mit meinen Künsten.
            PS: Den Wert von 101 habe ich drin, damit ich bei Start des Scripts eine gesamtliste (egal welcher Stand) bekomme. Die Leermeldung kommt ja weiter unten.

            sigi234 T 2 Replies Last reply Reply Quote 0
            • sigi234
              sigi234 Forum Testing Most Active @DocGame last edited by

              @DocGame

              https://forum.iobroker.net/topic/28789/script-fürtabelle-der-batterie-zustände

              D 1 Reply Last reply Reply Quote 0
              • T
                Tictactoo last edited by

                Also so funktioniert es bei mir mit den Zigbee-Geräten. Mit MiHome, keine Ahnung, hab das leider so nicht drin.

                const mihome = $('mihome.0.devices.*.percent');
                const zigbee = $('zigbee.0.*.battery');
                
                var Infos = [];
                var Values = [];
                
                function checkBatt(id, i) {
                    var value = getState(id).val;
                
                    if(value < 101) { // Anpassen !
                        var pathname = id.substring(0, id.lastIndexOf('.'));
                        var name = getObject(pathname).common.name;
                        if(Infos.indexOf(name) == -1) {
                            Infos.push(name);
                            Values.push(value);
                
                        }
                    }
                }
                
                function lowBatt() {
                   Infos = []; 
                   Values= [];    
                
                   var InfoMessage = 'Batterien Stand Liste:\n';
                
                   mihome.each(checkBatt);
                   zigbee.each(checkBatt);
                
                   if(Infos.length) {
                      for(let i = 0; i < Infos.length; i++) {
                         InfoMessage = InfoMessage + Infos[i] + ': ' + Values[i] + ' %\n';
                      }  
                      sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
                   }
                }
                
                on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                on({id: /^zigbee\.0\.devices\..+\.battery$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                
                lowBatt(); // Aufruf bei Skriptstart
                
                
                1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @DocGame last edited by

                  @DocGame
                  ich werde das Skript nachher auf Devonz und MQTT erweitern, kann es ja posten. Zigbee hab ich nicht installiert.

                  D 1 Reply Last reply Reply Quote 0
                  • D
                    DocGame @sigi234 last edited by

                    @sigi234 Das habe ich vor einigen Tagen versucht zum laufen zu bringen, weil es toll aussieht....bin aber schon an der 1. Zeile(Pfad für HTML) gescheitert.
                    Siehr gut und interessant aus. Ich bin normal in Blockly unterwegs und das klappt auch recht gut. Leider ist nicht alles so toll umzusetzen wie mit deinem Script.
                    Muss mich nochmal daran versuchen. Ich würde es für IQControl verwenden.

                    1 Reply Last reply Reply Quote 0
                    • D
                      DocGame @ticaki last edited by

                      @ticaki MQTT hab ich hauptsächlich auf meinen Tasmotageräte und die haben keine Batterie. Dann hätte ich ja aber schon MiHome, Zigbee und Deconz. Da bekomme ich bestimmt auch noch Hue rein. Wäre toll.

                      T 1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer @DocGame last edited by ticaki

                        @DocGame
                        Habs umgeändert das es die Ladestände sortiert.

                        const deconz = $('channel[state.id=deconz.0.*.battery]');
                        var Infos = [[]];
                        function checkBatt(id, i) {
                            var value = getState(id).val;
                            if(value < 101) { // Anpassen !
                                var pathname = id.substring(0, id.lastIndexOf('.'));
                                var name = getObject(pathname).common.name;
                                for(let i = 0; i < Infos.length; i++) {
                                    if (Infos[i][0] == name) break;
                                    if (i == Infos.length-1) Infos.push([name,value]);
                                }
                            }
                        }
                        
                        function lowBatt() {
                            Infos = [[]]; 
                            var InfoMessage = 'Ladestand der Batterien:\n';
                            deconz.each(checkBatt);
                            Infos.shift();
                            Infos.sort(SortArray);
                            if(Infos.length) {
                                for(let i = 0; i < Infos.length; i++) {
                                    InfoMessage += Infos[i][0] + ': ' + Infos[i][1] + '%\n';
                                }  
                                sendTo("telegram", "send", {user: 'Tim', text: InfoMessage});
                                //log(Infos);
                            }
                        }
                        on({id: /^deconz\.0\..*\.battery$/, valLt: 20, oldValGe: 20}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                         
                        lowBatt(); // Aufruf bei Skriptstart... dat nervt aber wenn man den rechner jede nacht neustartet :P
                         
                        function SortArray(a,b) {
                            return a[1]-b[1];
                        }
                        

                        hue und zigbee hab ich leider nicht. Hue ging mir auf die Nerven und der Zigbee stick kam erst vor ein paar Tagen.

                        EDIT: Ne war in Ordnung

                        D 1 Reply Last reply Reply Quote 0
                        • D
                          DocGame @ticaki last edited by DocGame

                          @ticaki Hab jetzt Deconz, Zigbee und MiHome und deinen Sort drin.....klappt gut.
                          Morgen werde ich noch Hue reinbasteln.
                          Welchen Zigbee hast du denn bekommen. Ich habe seit 4 Wochen den CC1352P2 und bin so zufrieden, das ich fast alles vom Deconz umgezogen habe.
                          Auf den 5 MiHubs habe ich noch ca. 70 Geräte. Da besteht kein Handlungsbedarf zum Umziehen. Die Hue-Bridge habe ich mir erst vor eine Woche zugelegt, weil ich den Philips Outdor BWM nicht vernünftig in die anderen reinbekommen habe. Jetzt habe ich zumindest im Zigbeebereich quasi "Vollausstattung" 😊

                          Nachtrag: Jetzt ist Hue auch noch drin.

                          @sigi234 dein Projekt sieht zu interessant aus um es zu ignorieren. Werde mich ab morgen nochmals daran versuchen.

                          sigi234 T 2 Replies Last reply Reply Quote 0
                          • sigi234
                            sigi234 Forum Testing Most Active @DocGame last edited by sigi234

                            @DocGame sagte in Batteriescripterweiterung Mihome auf Zigbee-Ad.:

                            @sigi234 dein Projekt sieht zu interessant aus um es zu ignorieren. Werde mich ab morgen nochmals daran versuchen.

                            Ist von @liv-in-sky ! Coole Sache.

                            Screenshot (1504).png

                            D 1 Reply Last reply Reply Quote 0
                            • D
                              DocGame @sigi234 last edited by

                              @sigi234 Stimmt... Sorry. Habe zwar in meiner Verzweiflung es zum laufen zu bringen zwar alle Posts durchgekaut, mit eure Namen aber leider nicht gemerkt.

                              1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer @DocGame last edited by

                                @DocGame
                                CC2540 der der in diesem Projekt empfohlen wurde. Bin aber jetzt mit dekonz zufrieden und spiel erstmal mit meinen ESP rum.

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

                                  Hallo,
                                  hab mir eben auch ein Skrip für Batteriecheckup gebastelt und möchte das sharen.

                                  Prüfung einmal in der Woche nach Schedule.

                                  Ausgabe in Telegram ist:
                                  Low Battery @ sensor_ht_wz im Wohnzimmer = 56.9 (mihome.0.devices.sensor_ht_158d0002b8e917.percent)

                                  // Battery check
                                  
                                  schedule('0 8 * * 0', function () {
                                  
                                      var itemfound = false;
                                  
                                      //find Xiaomi battery percent
                                      $('state[state.id=*.percent][role=battery.percent]').each(function (id, i) {
                                          //console.log(id);
                                          if (getState(id).val < 40){
                                              sendTo("telegram.0", "send", {
                                                  text: '🔋 Low Battery @ ' 
                                                      + getObject(id.substring(0, id.lastIndexOf('.'))).common.name
                                                      + ' im '
                                                      + getObject( id, "rooms").enumNames
                                                      +  ' = ' + getState(id).val
                                                      + ' (' + id + ')',
                                                  user: 'Michael'
                                              });
                                              itemfound = true;
                                          }
                                      });
                                  
                                      // find Homematic lowBat
                                      $('state[state.id=LOWBAT][role=indicator.lowbat]').each(function (id, i) {
                                          //console.log(id);
                                          if (getState(id).val){
                                              sendTo("telegram.0", "send", {
                                                  text: '🔋 Low Battery @ ' 
                                                      + getObject(id.substring(0, id.lastIndexOf('.'))).common.name
                                                      + ' im '
                                                      + getObject( id, "rooms").enumNames
                                                      +  ' = ' + getState(id).val
                                                      + ' (' + id + ')',
                                                  user: 'Michael'
                                              });
                                              itemfound = true;
                                          }
                                      });
                                  
                                      if (!itemfound){
                                          sendTo("telegram.0", "send", {
                                                  text: '🔋 Batteries checked. Everything alright.',
                                                  user: 'Michael'
                                              });
                                      }
                                  
                                      itemfound = false;
                                  
                                  });
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  954
                                  Online

                                  31.6k
                                  Users

                                  79.6k
                                  Topics

                                  1.3m
                                  Posts

                                  javascript monitoring
                                  5
                                  15
                                  767
                                  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