NEWS
[Adapter] - Mihome
-
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. -
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.
-
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.
-
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()
-
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
-
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?
-
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.
-
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.
-
@Superdad wo kriege ich den Key in der Aqara App ausgelesen ??
-
@Moe
Wenn du auf den Aqara_Hub gehst und dann oben rechts die drei Punkte.
Dann war es glaube ich unter Netzwerkverbindung oder so.
Musst mal schauen. -
@Superdad oder so !
Ja leider nichts zu finden vielleicht nutze ich auch eine andere Aqara App.
Ja nach dem Update versuche ich schon ganze Zeit den Hub wieder unter Mi Home zu bekommen aber das funktioniert auch nicht wie beschrieben
-
Das Gateway ist dann in der Mihome-App vorhanden und du kannst auch bei iobroker-mihome den Key eingeben, aber es passiert nichts.
Ich denke, es liegt daran, dass man die Lan-Funktion nicht aktivieren kann wie bei den anderen Gateways. -
@Moe
geh mal in der Aqara_App auf Accessories.
Da ist doch dann der Hub drin oder nicht?
Den antippen und dann rechts oben auf die drei Punkte.
Hast du für den Hub die neueste Firmware installiert? -
Auf der IOS App ist dort nichts zu finden.
Firmware des Hubs ist aktuell 1.5.7
Nach denn update aktuell das einbinden in die Mi Home App auch nicht mehr möglich. Bereits auch alles probiert.
-
@Moe
Ich habe es doch auch mit der IOS-App gemacht. -
Unter Accessories ist dann unter den drei Punkten auch eine Auswahl "mit mihome verbinden".
Dann habe ich die mihome-App auf dem iPhone einmal deinstalliert und dann wieder installiert.
Dann war der Aqara Hub wieder zur Auswahl um ihn mit der mihome-App zu verbinden. -
So, habe es jetzt noch einmal mit der Aqara-App verbunden.
Unter Accessories Aqara Hub ( vielleicht heisst es bei die anders?) - Aqara Hub auswählen.
Dann rechts oben auf die drei Punkte drücken.
Dann nach unten scrollen.
Da steht dann Serial Number - 16 stelliger Code!
Firmware ist 1.5.7!Unter den drei Punkten ist auch eine Auswahl "Support Mi Home App".
Die muss auf Yes stehen! Ansonsten drauf klicken und Abfrage bestätigen. -
Die Seriennummer hatte ich vor dem Update auch stehen. Glaube irgendwie nicht das es der Serial zum Verbinden ist.
Ok bisher ohne Erfolg hattest du vorher deinen Adapter aus der Mii App gelöscht ? Bei mir ist dieser erst offline gewesen dann war er automatisch weg nun bekomme ich ihn nicht wieder rein
-
Nach mehrmaligen starten der App kommt dann eine Meldung ob du verbinden möchtest.
Hatte ihn aber auch schon deinstalliert und wieder installiert. Geht auch.Was soll es aber sonst für ein Key sein?
-
@Superdad denke einfach nur die Seriennummer deines Gerätes wie zb die IMEI bei einem Handy oder eben die Seriennummer eines PCs, Handys etc.
Edit: Lerne mal ein Geräte an das Aqara Gateway und gehe dann in dieses Gerät dort wirst du sehen dieses Gerät hat dort seine spezifische Seriennummer dann stehen.
Somit ist das nur eine Nummer für die Zuordnung wie meine Mac Adresse oder eben eine IMEI etc