Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Adapter] - Mihome

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Adapter] - Mihome

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

      Weiß jemand ob möglich ist sowas wie einen "last seen/is reachable" state zu erzeugen ?

      Während man das bei den humidity-sensoren noch gut an den geänderten Werten erkennen kann, ist das beim Rauchmelder und Gasmelder nicht mehr so einfach. Im Iobroker ist defacto überhaupt nicht zu erkennen das mein Rauchmelder seit 3 Wochen ohne Batterie hier rumliegt.

      Nur um sicher zu gehen, dass das Gerät auch das Gateway erreichen kann, wäre so ein state praktisch.

      1 Reply Last reply Reply Quote 0
      • X
        xbow42 last edited by

        hab keinen Rauchmelder von xiaomi, aber der Rauchmelder liefert doch bestimmt auch seinen Batteriestatus in %

        Da kannst du doch mit script auf dem Datenpunt auf "last update" prüfen.

        Blockly: das Puzzle-Ding mit "[Wert] von [ObjectID]" nehmen, auf Wert klicken und [letzte Änderung] auswählen.

        JS: getState("mihome.0.devices.magnet_0815abcd0000000.percent").lc;

        wenn länger als 1 Tag her Nachricht wohin auch immer…

        edit: oder der Wert<15 Warnhinweis" batterie kaufen; wert=0 Fehlermeldung :idea:

        1 Reply Last reply Reply Quote 0
        • J
          J Riemann last edited by

          @ramses:

          Nur um sicher zu gehen, dass das Gerät auch das Gateway erreichen kann, wäre so ein state praktisch. `
          Eine „unreach“ Meldung oder ähnliches ist bei Xiaomi anscheinend nicht üblich. Auch in der App habe ich bisher keine Meldefunktion bei Nichterreichbarkeit gefunden.

          Die Rauchmelder aktualisieren mind. 1x pro Stunde ihren Batteriestatus, was man wiederum gut als „alive“ Meldung weiterverarbeiten kann. Meldet sich das Gerät nicht innerhalb 1 Stunde ist etwas faul… Ich überprüfe jedes Gerät einzeln per Blockly:

          viewtopic.php?f=8&t=18566#p219932

          1 Reply Last reply Reply Quote 0
          • R
            ramses last edited by

            @J Riemann

            @xbow42

            Das ist tatsächlich eine nützliche Idee. Nur mit Blockly kann ich nichts anfangen. Hatte mich entschieden Javascript zu erlernen (so gut es geht). Mal schauen wie es sich damit bewerkstelligen lässt.

            Der Timestamp-Wert scheint aber relevanter als der "letzte Änderung"-Wert.

            Beispiel: Der Gas-Melder wird per Netzteil betrieben und steht somit immer auf 100%. Daher hat sich der "letzte Änderung"-Wert seit der Anschaffung nicht geändert. Der Timestamp hat zumindest einen Zugriff verzeichnet.

            Gleiche Spiel beim Rauchmelder. Lag ein paar Tage in der Ecke, gestern mal wieder angeschlossen für 2-3 Stunden.

            Da die eingelegte Batterie immer noch 100% hat, hat sich der "letzte Änderung"-Wert nicht geändert. Der Zeitstempel hingegen schon. (Siehe Bild).
            4505_1.jpg

            1 Reply Last reply Reply Quote 0
            • J
              J Riemann last edited by

              @ramses:

              Der Gas-Melder wird per Netzteil betrieben und steht somit immer auf 100%. `
              Welches Meldeverhalten der Gas-Sensor hat kann ich nicht sagen da ich keinen besitze.

              Ansonsten ist "bei Aktualisierung" die richtige Wahl… Die Sensoren melden ja auch unveränderte Batteriewerte...

              1 Reply Last reply Reply Quote 0
              • R
                ramses last edited by

                @J Riemann:

                @ramses:

                Der Gas-Melder wird per Netzteil betrieben und steht somit immer auf 100%. `
                Welches Meldeverhalten der Gas-Sensor hat kann ich nicht sagen da ich keinen besitze.

                Ansonsten ist "bei Aktualisierung" die richtige Wahl… Die Sensoren melden ja auch unveränderte Batteriewerte... `

                Also auch wenn ich meine Sensoren angucke, kann ich deine Aussage leider nicht bestätigen.

                Anbei ein Bild eines Sensors für Türen/Fenster.

                Ein Batteriestand wurde das letzte mal gestern gegen 17 Uhr geändert. Während der Zeitstempel einen Wert von heute morgen hat.

                Für zeitnahe Abfragen scheint mir der Timestamp besser geeignet.

                Jetzt nur noch rausfinden wie man in Javascript damit rechnet 🙂
                4505_2.jpg

                1 Reply Last reply Reply Quote 0
                • X
                  xbow42 last edited by

                  Hab gerade kein iobroker zu Hand, aber probier mal so an den timestamp zu kommen:

                  var myTimestamp = getState("pfad.zu.meinem.Objekt_Datenpunkt").ts;
                  

                  Den Zahlenwert kannst du ganz normal mit Grundrechenarten oder Date-funktionen verarbeiten.

                  1 Reply Last reply Reply Quote 0
                  • R
                    ramses last edited by

                    @xbow42:

                    Hab gerade kein iobroker zu Hand, aber probier mal so an den timestamp zu kommen:

                    var myTimestamp = getState("pfad.zu.meinem.Objekt_Datenpunkt").ts;
                    

                    Den Zahlenwert kannst du ganz normal mit Grundrechenarten oder Date-funktionen verarbeiten. `

                    @xbow42

                    Danke für deine Rückmeldung. Habe ich schon gefunden und das Script ist auch schon soweit fertig. Jetzt werde ich erst mal den Rauch- und Gas-Melder im Auge behalten, wie oft die den Timestamp erneuern, um keine Fehlalarme zu bekommen.

                    Da ich kein Programmierer bin, ist das Script 100 Zeilen groß geworden. Man hätte sich vermutlich die ein oder andere variable oder umständliche Rechnung ersparen können -…aber dafür kann das Script auch was.

                    Zb. nach festgelegten Intervallen Alexa eine Ansage machen lassen, eine Email versenden oder eine Telegram-Nachricht wenn das Gerät nicht erreichbar ist.

                    1 Reply Last reply Reply Quote 0
                    • R
                      ramses last edited by

                      Ok geht alles.

                      Für den Gasmelder sollte man den Zeitstempel (nicht letzte Änderung) von voltage oder percent nehmen. Dieser wird alle 15min vom Gasmelder aktualisiert.

                      Rauchmelder verhält sich fast genauso, nur unzuverlässiger. Mal nach 15 Minuten mal nach 40, mal nach 45… Keine Updates in "letzte Änderung" sondern nur in den Timestamps von voltage und percent.

                      Rate dringend ab, bei Zigbee Geräte den "letzte Änderung" input zu nehmen. Dieser wird wirklich nur aktualisiert, wenn sich was ändernt und ist somit kein Indikator.

                      Da scheinbar doch ein Zugriff erfolgt, auch wenn sich nichts geändert hat, ist die Timestamp hier zu bevorzugen.
                      4505_3.jpg

                      1 Reply Last reply Reply Quote 0
                      • X
                        xbow42 last edited by

                        schön, dass es jetzt funktioniert. Wenn du magst stelle dein script doch hier zur Verwendung rein. Auch wenn es noch nicht perfekt optimiert ist. Die Experten hier können mal drüber gucken und vielleicht noch hilfreiche Tipps geben. Ich bin mit js auch noch nicht so fit und lerne gerne dazu.

                        1 Reply Last reply Reply Quote 0
                        • R
                          ramses last edited by

                          @xbow42:

                          schön, dass es jetzt funktioniert. Wenn du magst stelle dein script doch hier zur Verwendung rein. Auch wenn es noch nicht perfekt optimiert ist. Die Experten hier können mal drüber gucken und vielleicht noch hilfreiche Tipps geben. Ich bin mit js auch noch nicht so fit und lerne gerne dazu. `

                          Uh ich weiss nicht. Ist mir schon ein wenig peinlich. Ist bestimmt so schlecht,das jeder der schon mal programmiert hat, die Hände über den Kopf zusammenschlägt 😄

                          Aber bitte, anbei meine erste programmierte Schande .

                          // überwachung von mihome smoke
                          
                          var SENSOR1 = 'mihome.0.devices.smoke_158d00024e8ed9.voltage'; // Überwachendes Gerät . Voltage oder Percent State nehmen !
                          var BEZEICHNUNG1 = 'Rauchmelder'; // Gerätebezeichnung
                          var WARNALEXA =  600  ; // So oft werden Warnmeldungen via Alexa wiederholt (in Minuten) (zwischen 14 und 20 Uhr) (minimum 61)
                          var WARNEMAIL =  600  ; // So oft werden Warnmeldungen via Email wiederholt (in Minuten) (minimum 61)
                          var WARNTELEGRAM = 200  ;// So oft werden Warnmeldungen via Telegram wiederholt (in Minuten) (minimum 61)
                          
                          createState("mihome.smoke_158d00024e8ed9.active",0, { //noch ungenutzt
                            read: true, 
                            write: true, 
                            name: BEZEICHNUNG1 + " last active in minutes",
                            role: "indicator.connected"
                          });
                          
                          createState("mihome.smoke_158d00024e8ed9.telegram",0, {
                            read: true, 
                            write: true, 
                            name: BEZEICHNUNG1 + " last telegram warning",
                            role: "state"
                          });
                          
                          createState("mihome.smoke_158d00024e8ed9.alexa",0, {
                            read: true, 
                            write: true, 
                            name: BEZEICHNUNG1 + " last alexa announcement warning",
                            role: "state"
                          });
                          
                          createState("mihome.smoke_158d00024e8ed9.email",0, {
                            read: true, 
                            write: true, 
                            name: BEZEICHNUNG1 + " last email announcement warning",
                            role: "state"
                          });
                          
                          schedule ('*/30 * * * *', function(){ //so oft wird das script ausgeführt
                          
                          var DATUM2 = new Date().getTime();// Datum  in Millisekunden
                          var WERT1 = getState(SENSOR1).ts; // Sensor Timestamp einlesen in Millisekunden
                          var RECHNEN=((DATUM2-WERT1)); // Datum - Sensorzeit = Last Seen-Zeit
                          var ENDRECHNUNG=Math.round(RECHNEN/3600000*60);
                          var LASTALEXA=getState('javascript.0.mihome.smoke_158d00024e8ed9.alexa').val;
                          var LASTEMAIL=getState('javascript.0.mihome.smoke_158d00024e8ed9.email').val;
                          var LASTTELEGRAM=getState('javascript.0.mihome.smoke_158d00024e8ed9.telegram').val;
                          
                          var ZEITALEXA=Math.round((DATUM2-LASTALEXA)/3600000*60);
                          var ZEITEMAIL=Math.round((DATUM2-LASTEMAIL)/3600000*60);
                          var ZEITTELEGRAM=Math.round((DATUM2-LASTTELEGRAM)/3600000*60);
                          
                          setState('mihome.smoke_158d00024e8ed9.active',ENDRECHNUNG , true); // last seen state in objekte schreiben. Bisher ungenutzt. Für millisekunden variable RECHNEN nehmen.
                          
                                      if (ENDRECHNUNG>60) {
                          
                          if (ZEITALEXA>WARNALEXA && compareTime("14:00", "20:00", "between")) {
                          // Warnung per Alexa Sprachausgabe
                          setState('mihome.smoke_158d00024e8ed9.alexa',new Date().getTime());
                          setState('alexa2.0.Echo-Devices.<your-alexa-id-here>.Commands.speak', 'Das Gerät, ' + BEZEICHNUNG1 + ', hat sich seit ' + ENDRECHNUNG + ' Minuten nicht mehr gemeldet!');
                          }
                          else {
                          
                          console.log('Warnung: Gerät ' + BEZEICHNUNG1 + ' ist nicht erreichbar. Nächste Alexa Warnung erfolgt in ' + (WARNALEXA-ZEITALEXA) + ' Minuten.')
                          }
                          
                          if (ZEITEMAIL>WARNEMAIL){
                          // Warnung per Email
                          setState('mihome.smoke_158d00024e8ed9.email',new Date().getTime());
                          sendTo("email", {
                              from:    "<absender-emailadresse", to:/"<empfänger-emailadresse="">",
                              subject: "IOBroker Benachrichtigung!",
                              text:    'Das Gerät ' + BEZEICHNUNG1 + ' hat sich seit ' + ENDRECHNUNG + ' Minuten nicht mehr gemeldet!'
                          })
                          console.log(BEZEICHNUNG1 + ': Es wurde eine Warnemail für folgendes Gerät versendet: ' + BEZEICHNUNG1)
                          } 
                          else {
                          console.log('Warnung: Gerät ' + BEZEICHNUNG1 + ' ist nicht erreichbar. Nächste Email Warnung erfolgt in ' + (WARNEMAIL-ZEITEMAIL) + ' Minuten.')
                          }
                          
                          // Warnung per Telegram
                          if (ZEITTELEGRAM>WARNTELEGRAM){
                          setState('mihome.smoke_158d00024e8ed9.telegram',new Date().getTime());
                          sendTo('telegram', 'Das Gerät ' + BEZEICHNUNG1 + ' hat sich seit ' + ENDRECHNUNG + ' Minuten nicht mehr gemeldet!')
                          console.log('Es wurde eine WarnTelegram für folgendes Gerät versendet: ' + BEZEICHNUNG1)
                          }
                          else {
                          console.log('Warnung: Gerät ' + BEZEICHNUNG1 + ' ist nicht erreichbar. Nächste Telegram Warnung erfolgt in ' + (WARNTELEGRAM-ZEITTELEGRAM) + ' Minuten.')
                          }
                          
                                      }
                          
                                      else{
                          
                                          console.log('Das Gerät ' + BEZEICHNUNG1 + ' hat noch nicht den 60 Minuten Zeitrahmen überschritten! Letztes mal gesehen vor ' + ENDRECHNUNG + ' Minuten.')    
                                          }
                          })</absender-emailadresse",></your-alexa-id-here> 
                          

                          Gibt es nicht viel zu sagen. Wird alle 30 Minuten ausgeführt und wird aktiv wenn der Rauchmelder sich mehr als 60 minuten nicht gemeldet hat (Log augabe).. wenn nach den 60 Minuten der eingestellte Schwellwert für Warnungsversand (Alexa,email, telegram) bei einer Prüfung überschritten wird, wird eine Warnung Versand. Die Warnung über Alexa Sprachausgabe erfolgt nur zwischen 14 und 20 Uhr. Dieses war für meinen eigenen Bedarf. Kann aber im Alexabereich unter compareTime geändert (oder entfernt) werden.

                          Die IDs der jeweiligen states müssen für das Gerät an einigen stellen noch manuell angepasst werden, da ich es noch nicht variabel gemacht habe. Dieses betrifft vorallem die getState und setState zeilen.

                          Da es nur für ein Gerät war, war es in meinen Augen in diesem Moment nicht notwendig modular zu arbeiten. Werde ich aber definitiv noch anpassen.

                          Hoffe trotz der schlechten Anfängerprogrammierung kann jemand damit was anfangen 🙂

                          Hier mein 2. Script um Batteriestatus aller Sensoren zu überwachen die einen battery-state in iobroker schreiben:

                          Hätte man vermutlich auch bedeutend einfacher gestalten könne, aber es funktioniert.

                          Wenn Status weniger als 20% sende via Telegram (kann aus dem ersten Code anders gestaltet werden, zb via Email) eine Benachrichtungen:

                          var HEMMSCHWELLE = 20 // Meldung ab diesem Batteriestand in Prozent
                          
                          var SENSOR1 = 'mihome.0.devices.cube_158d00029a8fd5.percent' //Cube1
                          var SENSOR1NAME ='Steuer Cube 1'
                          var SENSOR2 = 'mihome.0.devices.magnet_158d00024de71d.percent' //Wohnzimmer links
                          var SENSOR2NAME ='Wohnzimmer links'
                          var SENSOR3 = 'mihome.0.devices.magnet_158d00024e42b9.percent' //Briefkasten
                          var SENSOR3NAME ='Briefkasten'
                          var SENSOR4 = 'mihome.0.devices.magnet_158d00024e50f7.percent' //Schlafzimmer rechts
                          var SENSOR4NAME ='Schlafzimmer rechts'
                          var SENSOR5 = 'mihome.0.devices.magnet_158d00024e621b.percent' //Bad links
                          var SENSOR5NAME ='Bad links'
                          var SENSOR6 = 'mihome.0.devices.magnet_158d00025193bf.percent' //Schlafzimmer links
                          var SENSOR6NAME ='Schlafzimmer links'
                          var SENSOR7 = 'mihome.0.devices.magnet_158d0002529a90.percent' //Kinderzimmer
                          var SENSOR7NAME ='Kinderzimmer'
                          var SENSOR8 = 'mihome.0.devices.magnet_158d0002529bc7.percent' //Kueche Balkontuere
                          var SENSOR8NAME ='Kueche Balkontuere'
                          var SENSOR9 = 'mihome.0.devices.magnet_158d000252befb.percent' //Kueche Fenster
                          var SENSOR9NAME ='Kueche Fenster'
                          var SENSOR10 = 'mihome.0.devices.magnet_158d0002536e79.percent' //Wohnzimmer rechts
                          var SENSOR10NAME ='Wohnzimmer rechts'
                          var SENSOR11 = 'mihome.0.devices.magnet_158d000271fe91.percent' //Badezimmer rechts
                          var SENSOR11NAME ='Badezimmer rechts'
                          var SENSOR12 = 'mihome.0.devices.magnet_158d0002735cbe.percent' // Haustuere
                          var SENSOR12NAME ='Haustüre'
                          var SENSOR13 = 'mihome.0.devices.sensor_motion_aq2_158d0002e940d5.percent'//Motion Leonas Zimmer
                          var SENSOR13NAME ='Bewegungssensor Leonas Zimmer'
                          var SENSOR14 = 'mihome.0.devices.smoke_158d00024e8ed9.percent' //Rauchmelder
                          var SENSOR14NAME ='Rauchmelder'
                          var SENSOR15 = 'mihome.0.devices.vibration_158d0002b5f8fc.percent'//Vibration1
                          var SENSOR15NAME ='Vibration 1'
                          var SENSOR16 = 'mihome.0.devices.weather_v1_158d00027898ac.percent' //Humidity Bad
                          var SENSOR16NAME ='Temperatursensor Bad'
                          var SENSOR17 = 'mihome.0.devices.weather_v1_158d0002b534e1.percent' //Humidity Testsensor
                          var SENSOR17NAME ='Temperatursensor Test'
                          var SENSOR18 = 'netatmo.0.Micha.Aussen.BatteryStatus'
                          var SENSOR18NAME ='Netatmo aussen'
                          var SENSOR19 = 'netatmo.0.Micha.Kinderzimmer.BatteryStatus'
                          var SENSOR19NAME ='Netatmo Kinderzimmer'
                          var SENSOR20 = 'netatmo.0.Micha.Schlafzimmer.BatteryStatus'
                          var SENSOR20NAME ='Netatmo Schlafzimmer'
                          var SENSOR21 = 'netatmo.0.Micha.Niederschlagsmesser.BatteryStatus'
                          var SENSOR21NAME ='Netatmo Niederschlagsmesser'
                          
                          var SENSOR1value=Math.round(getState(SENSOR1).val)
                          var SENSOR2value=Math.round(getState(SENSOR2).val)
                          var SENSOR3value=Math.round(getState(SENSOR3).val)
                          var SENSOR4value=Math.round(getState(SENSOR4).val)
                          var SENSOR5value=Math.round(getState(SENSOR5).val)
                          var SENSOR6value=Math.round(getState(SENSOR6).val)
                          var SENSOR7value=Math.round(getState(SENSOR7).val)
                          var SENSOR8value=Math.round(getState(SENSOR8).val)
                          var SENSOR9value=Math.round(getState(SENSOR9).val)
                          var SENSOR10value=Math.round(getState(SENSOR10).val)
                          var SENSOR11value=Math.round(getState(SENSOR11).val)
                          var SENSOR12value=Math.round(getState(SENSOR12).val)
                          var SENSOR13value=Math.round(getState(SENSOR13).val)
                          var SENSOR14value=Math.round(getState(SENSOR14).val)
                          var SENSOR15value=Math.round(getState(SENSOR15).val)
                          var SENSOR16value=Math.round(getState(SENSOR16).val)
                          var SENSOR17value=Math.round(getState(SENSOR17).val)
                          var SENSOR18value=Math.round(getState(SENSOR18).val)
                          var SENSOR19value=Math.round(getState(SENSOR19).val)
                          var SENSOR20value=Math.round(getState(SENSOR20).val)
                          var SENSOR21value=Math.round(getState(SENSOR21).val)
                          
                          schedule ('0 */1 * * *', function(){
                          console.log('Batterieüberwachung ausgeführt!')    
                          if(SENSOR1value
                          
                          1 Reply Last reply Reply Quote 0
                          • X
                            xbow42 last edited by

                            Wieso Schande, es funktioniert für dich das ist die Hauptsache.

                            Damit du es leichter hast deine eigenen Scripte zu warten, als Tip

                            *codeblöcke entsprechend der {Klammern} einrücken

                            *KONSTANTEN groß

                            *variablen klein

                            Debugausgaben und Kommentare hast du ja schon drin alles gut.

                            2.script Batteriecheck mit den fix eingetragenen ObjektIDs ist es schwer zu pflegen, wenn man Geräte hinzufügt/austauscht.

                            Hier mal mein angepasstes script, was ich auch hier aus dem Forum habe. Hab mir angewöht die Quelle immer mit als Kommentar abzulegen. Somit sollte klar sein dass ich mich nicht mit fremden Federn schmücken will. Hoffe mal die Links funktionieren auch noch denn im Februar der Umzug auf die neue Plattform gemacht wurde.

                            ! /**
                            ! Quelle: viewtopic.php?f=21&t=15203&start=20
                            ! Beschreibung: Script zum erfassen von Geräten mit niedrigem Batteriestatus
                            ! Vorbereitung: unter den iobroker.Objekten muss bei den "Batteriestatus-Prozenten" ein sinnvoller Name eingetragen werden,
                            ! um die Geräte zu identifizieren
                            ! todo:
                            ! - Benachrichtigung (in welcher Art auch immer) noch einbauen
                            ! - wenn MiHome-Geräte auf dem DeConz-Stick angelernt sind "KONSTANTEN - Deklaration" anpassen
                            ! **/
                            ! //===================================================================================================================================
                            ! //Datenpunkte erstellen; werden unterhalb von "javascript.0." angelegt.
                            ! createState('monitoring.Batteriestatus.Schwellwert', 15, {type: 'number'}); // ab war die Battereistatus aus krittisch angesehen wird
                            ! createState('monitoring.Batteriestatus.Geraete_Total', 0, {type: 'number'}); // Anzahl der BAtteriegräte
                            ! createState('monitoring.Batteriestatus.Geraete_LowBat', 0, {type: 'number'}); // Anzahl der tatsächlichen LOWBAT
                            ! createState('monitoring.Batteriestatus.Geraete_Namen', " ", {type: 'string'}); // Anzeige der LOWBAT-Geräte, Text s. Vorbereitung
                            ! //===================================================================================================================================
                            ! //KONSTANTEN - Deklaration
                            ! const OID_HOMATIC_BAT = $('hm-rpc.:0.LOWBAT'); //Objekt_IDs für Homatic-Geräte
                            ! const OID_MIHOME_BAT = $('mihome.
                            .percent'); //Objekt_IDs für MiHome-Geräte
                            ! //todo: const OID_DECONZ_MIHOME_BAT = $('deconz.*.percent????????'); //Objekt_IDs für MiHome-Geräte an DeConz
                            ! const LOGGEN = true; // = false, wenn kein Logging gewünscht
                            ! //===================================================================================================================================
                            ! //(globale) Variablen - Deklaration
                            ! var arrLowBat;
                            ! //===================================================================================================================================
                            ! //Funktionen
                            ! function fkt_lowbat(id) {
                            ! var name = getObject(id).common.name;
                            ! if(name.indexOf(':0.LOWBAT') != -1) name = name.substring(0, name.indexOf(':0.LOWBAT'));
                            ! arrLowBat.push(name); // Zu Array hinzufügen
                            ! if(LOGGEN) log("Gerät: " + name);
                            ! }
                            ! function fkt_countLowbat() {
                            ! // Setzt die Zähler vor dem Durchlauf aller Elemente .LOWBAT auf 0
                            ! var intGeraete_Total = 0;
                            ! arrLowBat = [];
                            ! /
                            //!!! hier kann ich nicht prüfen ob man auch den Schwellwert abfragen kann da ich keine Homatic-Geräte habe
                            ! OID_HOMATIC_BAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT
                            ! if(getState(id).val) fkt_lowbat(id);
                            ! ++intGeraete_Total; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                            ! });
                            ! */
                            ! OID_MIHOME_BAT.each(function (id, i) { // Schleife für jedes gefundenen Element .percent
                            ! if(getState(id).val < getState("monitoring.Batteriestatus.Schwellwert").val) fkt_lowbat(id);
                            ! ++intGeraete_Total; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                            ! });
                            ! // Schleifen sind durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
                            ! if(LOGGEN) {
                            ! log("Batterie-Geräte (Anzahl): " + intGeraete_Total + " # davon LOWBAT erkannt: " + arrLowBat.length);
                            ! log("Batterie-Geräte (Namen): " + arrLowBat.join(', '));
                            ! }
                            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                            ! setState("monitoring.Batteriestatus.Geraete_Total", intGeraete_Total); // Schreibt die Anzahl der vorhandene Geräte
                            ! setState("monitoring.Batteriestatus.Geraete_LowBat",arrLowBat.length); // Schreibt die Anzahl der LOWBAT-Meldungen
                            ! setState("monitoring.Batteriestatus.Geraete_Namen", arrLowBat.join(',
                            ')); // Schreibt die Namen der Geräte mit LOWBAT Meldung
                            ! }
                            ! //===================================================================================================================================
                            ! //Funktionsaufrufe (main)
                            ! fkt_countLowbat(); //Ausführung bei Skriptstart
                            ! schedule("
                            /60 * * * *", fkt_countLowbat); //Ausführung alle 60 Minuten
                            telegramm/mail-nachricht kannst ja jetzt selbst einbauen.

                            1 Reply Last reply Reply Quote 0
                            • R
                              ramses last edited by

                              @xbow42

                              Funktioniert scheinbar noch nicht wie ich es mir gewünscht habe. Zum ersten mal wurde der 60 Minuten Zeitrahmen überschritten und ich hab direkt überalle Alarm gekriegt 😞

                              Im Telegram sogar 3 mal.. hab ich bestimmt irgendwo ne Klammer falsch gesetzt.

                              1 Reply Last reply Reply Quote 0
                              • R
                                ramses last edited by

                                16:13:00.022 info javascript.0 script.js.common.Ueberwachung_Akkustand_sensoren1: Batterieüberwachung ausgeführt!

                                16:13:00.023 info javascript.0 script.js.common.Ueberwachung_Akkustand_sensoren1: Batterieüberwachung ausgeführt!

                                16:13:00.024 info javascript.0 script.js.common.Ueberwachung_Akkustand_sensoren1: Batterieüberwachung ausgeführt!

                                16:13:00.024 info javascript.0 script.js.common.Ueberwachung_Akkustand_sensoren1: Batterieüberwachung ausgeführt!

                                16:13:00.024 info javascript.0 script.js.common.Ueberwachung_Akkustand_sensoren1: Batterieüberwachung ausgeführt!

                                mich interessiert eher warum das batterie-script scheinbar 5 mal bei jeder runde ausgeführt wird. sehe dafür nix im code

                                so verhält sich leider jedes script..auch direkt nach dem start:

                                javascript.0 2019-01-27 16:17:44.201 info Stop script script.js.common.Cube_Motion

                                javascript.0 2019-01-27 16:17:44.201 info Stop script script.js.common.Cube_Motion

                                javascript.0 2019-01-27 16:17:44.201 info Stop script script.js.common.Cube_Motion

                                javascript.0 2019-01-27 16:17:44.201 info Stop script script.js.common.Cube_Motion

                                javascript.0 2019-01-27 16:17:44.201 info Stop script script.js.common.Cube_Motion

                                seufz

                                mal alles neustarten

                                PS: Scheinbar hat das Script den kompletten Adapter aus dem Tritt gebracht. Nach nem reboot war alles normal. Jetzt provozieren wir den Fehler noch mal.

                                1 Reply Last reply Reply Quote 0
                                • X
                                  xbow42 last edited by

                                  rechnest du überhaupt mit den richtigen Zahlen

                                  var DATUM2 = new Date().getTime();// Datum in Millisekunden //gibt ein Objekt zurück

                                  zu

                                  var tsJetzt = (new Date().getMilliseconds());

                                  benenne die Variablen sinnvoll, dann sind manche Kommentare überflüssig

                                  Wenn ich eine Funktion nicht weiß, klicke ich mit erst mal ein Bsp. in Blockly zusammen und sehe mir den code an. so kam ich auch auf das .getMilliseconds() 😄

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    ramses last edited by

                                    @xbow42:

                                    rechnest du überhaupt mit den richtigen Zahlen

                                    var DATUM2 = new Date().getTime();// Datum in Millisekunden //gibt ein Objekt zurück

                                    zu

                                    var tsJetzt = (new Date().getMilliseconds());

                                    benenne die Variablen sinnvoll

                                    Wenn ich eine Funktion nicht weiß, klicke ich mit erst mal ein Bsp. in Blockly zusammen und sehe mir den code an. so kam ich auch auf das .getMilliseconds() 😄 `
                                    ja, die rechnung stimmt 🙂 Alles gut. Date().getTime() wirft immer passend aus.

                                    hab jetzt dem rauchmelder mal die batterie entnommen..bin mir sicher in 30minuten lässt sich das reproduzieren 😄

                                    PS: so nach neustart klappt script auch normal. nix 5 mal mehr:

                                    javascript.0 2019-01-27 17:30:00.072 info script.js.common.Verfuegbarkeit.Ueberwachung_Rauchmelder: Warnung: Gerät Rauchmelder ist nicht erreichbar. Nächste Telegram Warnung erfolgt in 110 Minuten.

                                    javascript.0 2019-01-27 17:30:00.072 info script.js.common.Verfuegbarkeit.Ueberwachung_Rauchmelder: Warnung: Gerät Rauchmelder ist nicht erreichbar. Nächste Email Warnung erfolgt in 510 Minuten.

                                    javascript.0 2019-01-27 17:30:00.071 info script.js.common.Verfuegbarkeit.Ueberwachung_Rauchmelder: Warnung: Gerät Rauchmelder ist nicht erreichbar. Nächste Alexa Warnung erfolgt in 541 Minuten.

                                    nur mit den zeitwerten für alarm muss ich scheinbar noch arbeiten

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      Keulex last edited by

                                      Hallo,

                                      ich bin recht neu hier. Ich habe mich bisher hauptsächlich mit dem Thema Zigbee-Stick und Anbindung der Komponenten auseinandergesetzt, war mit der Stabilität aber nicht zufrieden. Deswegen habe ich mir testweise mal ein Gateway geholt und habe gemerkt, das die Sensoren merklich zuverlässiger in iobroker laufen.

                                      Nun zu meinem Anliegen:

                                      Ich habe gesehen, dass das Gateway auch Ikea-Tradfri-Lampen unterstützt, davon hatte ich noch welche. Ich konnte sie auch über die App ans Gateway anlernen. Leider tauchen diese nicht als Objekte im iobroker auf. Müsste der Adapter dahingehend erweitert werden?

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

                                        Genau. Hier ist die https://github.com/ioBroker/ioBroker.mihome#supported-devices.

                                        Kannst ja das Loglevel mal auf Debug stellen und dann per App die Lampen an/aus schalten und schauen ob im ioB Log dazu Einträge auftauchen.

                                        Falls nicht, kann der Adapter auch nicht erweitert werden, weil das Gateway keine Informationen sendet.

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          Superdad last edited by Superdad

                                          Hallo,

                                          über die Aqara-App ist ein Update für das Aqara-Gateway verfügbar.
                                          Damit lässt sich jetzt der Key auslesen.
                                          Nur leider habe ich es nach dem Update nicht mehr geschafft das Gateway in der Mihome-App verfügbar zu machen.
                                          Vielleicht hat ja Jemand mehr Ahnung oder Glück.

                                          P.S. In der Aqara-App Key aulesen, dann auf Mihome Connection drücken.
                                          Dann habe ich die Mihome-App deinstalliert und anschließend wieder installiert.
                                          Beim starten der App wird das Gateway dann hinzugefügt.
                                          Erscheint aber noch nicht in IoBroker. Muss mal neu starten.

                                          P.P.S Aqara Gateway erscheint nicht in IoBrober.mihome.

                                          Moe 1 Reply Last reply Reply Quote 0
                                          • Moe
                                            Moe @Superdad last edited by

                                            @Superdad wo kriege ich den Key in der Aqara App ausgelesen ??

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            814
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            mihome
                                            111
                                            559
                                            140014
                                            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