Modul für IP-Symcon ab Version 5.1
Inhaltsverzeichnis
Mit dem Modul ist es möglich einen Roborock Staubsauger Roboter (Xiaomi) von IP-Symcon aus zu steuern.
- Start / Stop / Pause der Saugfunktion
- Spotcleaning
- Zurückfahren an die Aufladestation
- Timer anzeigen und setzten
- Remote Fernsteuerung
- Einstellen der Lüfterleistung
- Einstellen der Wassermenge
- Einstellen der Lautstärke
- Lokalisieren des Saugers
- Do not Disturb Mode (DND) ein / auschalten und Zeiten einstellen
- Anzeige von:
- gereinigte Fläche
- Summe gereinigte Fläche
- Reinigungszeit
- Summe der Reinigungszeit
- Batterieleistung
- Anzahl der Reinungen
- Übersicht letzte Reinigungen
- Ansicht des Verbrauchsstatus der verbrauchbaren Gegenstände (Haupt-, Seitenbürste, Filter, Sensoren)
- Seriennummer
- Hardware Version
- Firmware Version
- SSID vom verbundenen WLAN
- lokale IP Adresse
- Modellbezeichnung
- MAC
- Zeitzone
- Karte (optional nur für gerootete Geräte verfügbar)
- IP-Symcon 4.3
- MI App (Xiaomi)
- Roborock Staubsauger Roboter (Xiaomi)
Die Webconsole von IP-Symcon mit http://{IP-Symcon IP}:3777/console/ öffnen.
Anschließend oben rechts auf das Symbol für den Modulstore klicken
Im Suchfeld nun
Roborock
eingeben
und schließend das Modul auswählen und auf Installieren
drücken.
Den Objektbaum Öffnen.
Die Instanz 'Modules' unterhalb von Kerninstanzen im Objektbaum von IP-Symcon (>=Ver. 5.x) mit einem Doppelklick öffnen und das Plus Zeichen drücken.
Im Feld die folgende URL eintragen und mit OK bestätigen:
https://github.com/Wolbolar/IPSymconRoborock
Anschließend erscheint ein Eintrag für das Modul in der Liste der Instanz Modules
Es wird im Standard der Zweig (Branch) master geladen, dieser enthält aktuelle Änderungen und Anpassungen. Nur der Zweig master wird aktuell gehalten.
Sollte eine ältere Version von IP-Symcon die kleiner ist als Version 5.1 (min 4.3) eingesetzt werden, ist auf das Zahnrad rechts in der Liste zu klicken. Es öffnet sich ein weiteres Fenster,
hier kann man auf einen anderen Zweig wechseln, für ältere Versionen kleiner als 5.1 (min 4.3) ist hier Old-Version auszuwählen.
Um mit dem Roborock kommunizieren zu können benötigt man dessen IP Adresse und den Token.
Dazu wird zunächst der Roborock in der MiHome App von Xiaomi entsprechend eingerichtet. Nachdem der Roborock eingerichtet und einem Raum zugewiesen worden ist klickt man diesen an und kommt zur weiteren Menüauswahl über das Icon
Unter General settings und dem Unterpunkt Network info findet man die IP Adresse des Roborock unter dem Feld IP address. Diese wird notiert um diese später in IP-Symcon eintragen zu können.
Um den Token auslesen zu können muss ein Backup mit iTunes erstellt werden, hierbei ist darauf zu achten, dass nicht verschlüsseln beim Erstellen des Backups ausgewählt wird.
Um das Backup dann auszulesen benötigt man Spezialprogramme. Beschrieben ist der Vorgang hier für iBackup Viewer
In iBackup Viewer das Backup öffen und Raw Files auswählen und in die Tree View wechseln.
Hier zum Eintrag Navigate to AppDomain-com.xiaomi.mihome wechseln. Hier benötigen wir ein File das
aussieht wie 123456789_mihome.sqlite (Wichtig: _mihome.sqlite ist nicht das gesuchte File) im Ordner Documents.
Das File auswählen und mit Export Selected auf Festplatte speichern.
Nun brauchen wir ein Tool um das File zu öffnen. Dazu lädt man
Die Datei, die zuvor abgespeichert worden ist, im DB Browser laden. Nun auf den Reiter Daten durchsuchen wechseln. Als Tabelle ZDEVICE auswählen und ganz nach rechts scrollen bis zum Eintrag ZTOKEN. Den Eintrag markieren und im Feld daneben den Modus auf Text stellen und den Eintrag im rechten Feld markieren und mit STRG+C kopieren. Der Eintrag hat meist eine Länge von 96 Zeichen. Den Inhalt aus der Zwischenablage wird dann in das Feld Token des Konfigurationsformulars des Moduls kopiert.
In den neuen App Versionen MiHome 5.1.1 ist der Token nicht mehr lokal gespeichert. Dieser lässt sich also nur bis zur Version 5.0.19 auslesen. Falls eine neuere Version der MIHome App vorhanden ist und der Token nicht schon bekannt sein sollte, ist die einzige Möglichkeit vorrübergehend eine ältere Version der MiHome App aufzuspielen um den Token auszulesen. Nachdem der Token ausgelesen wurde, kann dann wieder auf die aktuelle Version der MIHome App upgedated werden. Eine ältere Version der MIHome App findet man z.B. unter
Mi Home 5.0.19 (Android 4.0.3+) APK Download by Xiaomi Inc. - APKMirror
Mit der Version ist auch noch ein Auslesen des Tokens möglich.
- Zunächst ist der Roborock in der MiHome App (für Android max. 5.0.19) zu konfigurieren.
- Anschließend die MIToolkit herunterladen und auf der Festplatte entpacken
- Den Developer Mode und das USB Debugging auf dem Android Gerät aktivieren und dieses dann mit einem USB Kabel mit dem Computer verbinden
- Das MiToolkit.exe mit einem Doppelklick starten und auf Token auslesen drücken
- Auf dem Gerät mit der MIHome App muss man nun das Backup bestätigen und hier kein Passwort auswählen. Es wird nun ein Backup erstellt.
- Anschließend sollte im MIToolkit der Token angezeigt werden.
Zunächst muss libffi-dev und libssl-dev installiert werden.
Dazu wird eingegeben
$ sudo apt-get install libffi-dev libssl-dev
-
Zunächst ist der Roborock in der MiHome App (für Android max. 5.0.19) zu konfigurieren.
-
Den Developer Mode und das USB Debugging auf dem Android Gerät aktivieren und dieses dann mit einem USB Kabel mit dem Computer verbinden
-
ADB installieren
$ sudo apt-get install android-tools-adb
oder
$ sudo apt-get install adb
Unter ADB sollte das Gerät angezeigt werden. Ein Backup mit adb erstellen mit
$ sudo adb backup -noapk com.xiaomi.smarthome -f backup.ab
ADB Backup Extractor herunterladen
Die Daten aus dem Backup auslesen
$ java -jar Android\ Backup\ Utilities/Android\ Backup\ Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar
Die Daten entpacken
$ tar -xvf unpacked.tar
Anschließend den Token auslesen
$ sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name = "Mi Robot Vacuum";'
In IP-Symcon nun Instanz hinzufügen (CTRL+1) auswählen unter der Kategorie, unter der man die Instanz hinzufügen will, und Roborock auswählen.
Es öffnet sich das Konfigurationsformular. Hier ist anzugeben:
- IP Adresse des Saugers in der App oder der Router nachschauen
- Token des Saugers (siehe oben)
- Aktualisierungsintervall in Sekunden
- Webfront um Push Nachrichten zu verschicken
- Auswahl der gewünschten Funktionen bzw. Anzeigen im Webfront
Momentan kann man von außen leider nicht die Kartenansicht auslesen. Für gerootete Geräte kann man nachfolgenden Workaround nutzen.
- per SSH auf dem Robot einwählen
- In der Konsole folgenden Befehl ausführen:
curl https://raw.githubusercontent.com/Wolbolar/IPSymconRoborock/master/libs/symcon.mapupload.sh > symcon.mapupload.sh && bash symcon.mapupload.sh
Nun werden als erstes 2 Parameter abgefragt: die IP-Symcon Instanz des Roborock Moduls und die URL des durch das Modul angelegten Webhooks. Anschließend werden die benötigte Programme installiert (rund 25 MB) und der Cronjob eingerichtet, welcher regelmäßig prüft, ob eine neue Kartendatei existiert und diese anschließend per Webhook an die IP-Symcon Instanz schickt und dort als Media Bild abspeichert.
Die Kartendateien werden nur dann erstellt, wenn der Sauger auch läuft!
Parameter | Erklärung |
---|---|
ID | Instanz ID des Robots in IP-Symcon |
Webhook URL | URL zum Webhook, z.B. http://10.0.0.1:3777/hook/Roborock Der Webhook Roborock wird automatisch angelegt. |
Webfront:
Der rote Punkt stellt dabei die aktuelle Position des Staubsaugers dar.
Startet den Reinigungsvorgang
Roborock_Start($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Stoppt den Reinigungsvorgang
Roborock_Stop($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Pausiert den Reinigungsvorgang
Roborock_Pause($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Fährt zum Aufladen zur Ladestation
Roborock_Charge($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Weist den Sauger an sich mit einem Sound zur Lokalisierung zu melden
Roborock_Locate($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Startet eine Reinigung um den Standort des Saugers
Roborock_CleanSpot($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest den Status vom Roborock aus
Roborock_Get_State($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Gibt zurück:
- Batterieladung
- Reinigungsfläche
- Reinigungszeit
- DND Status
- Lüfterleistung
Seriennummer des Roborock
Roborock_Get_Serial_Number($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Zustand der Verbrauchsgegenstände aus
Roborock_Get_Consumables($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Zusammenfassung der Reinigung aus
Roborock_GetCleanSummary($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Status Do Not Disturb Mode aus
Roborock_Get_DND_Mode($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Eigenschaft | Typ | Standardwert | Funktion |
---|---|---|---|
host | string | IP Adresse des Roborock Staubsauger Roboters | |
token | integer | Token aus der MI App, Länge 32 oder 96 Zeichen |
Startet den Reinigungsvorgang
Roborock_Start($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Stoppt den Reinigungsvorgang
Roborock_Stop($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Pausiert den Reinigungsvorgang
Roborock_Pause($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Fährt zum Aufladen zur Ladestation
Roborock_Charge($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Weist den Sauger an sich mit einem Sound zur Lokalisierung zu melden
Roborock_Locate($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Startet eine Reinigung um den Standort des Saugers
Roborock_CleanSpot($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest den Status vom Roborock aus
Roborock_Get_State($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Gibt zurück:
- Batterieladung
- Reinigungsfläche
- Reinigungszeit
- DND Status
- Lüfterleistung
Seriennummer des Roborock
Roborock_Get_Serial_Number($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Zustand der Verbrauchsgegenstände aus
Roborock_Get_Consumables($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Zusammenfassung der Reinigung aus
Roborock_GetCleanSummary($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest Status Do Not Disturb Mode aus
Roborock_Get_DND_Mode($InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Stellt die Saugleistung des Staubsaugerroboters ein
Roborock_Fan_Power(integer $InstanceID, integer $power);
Parameter $InstanceID ObjektID der Roborock Instanz
Parameter $power Wert von 0 - 100 zum Einstellen der Leistung
Liest die gereinigte Fläche aus
Roborock_Get_Area_Cleaned(integer $InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest die Zeit der Saugvorgänge aus
Roborock_Get_Time_Cleaned(integer $InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Liest die Anzahl der Reinigungen aus
Roborock_Get_Cleaning_Cycles(integer $InstanceID);
Parameter $InstanceID ObjektID der Roborock Instanz
Reinigt in der Zone der angebenen Koordinaten
Roborock_ZoneClean(integer $InstanceID, integer $lower_left_corner_x, integer $lower_left_corner_y, integer $upper_right_corner_x, integer $upper_right_corner_y, integer $number);
Parameter $InstanceID ObjektID der Roborock Instanz
Parameter $lower_left_corner_x X-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $lower_left_corner_y Y-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_x X-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_y Y-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $number Anzahl der Reinigungen
Reinigt meherere Zonen mit den angebenen Koordinaten
Roborock_ZoneCleanMulti(integer $InstanceID, string $multizone);
Parameter $InstanceID ObjektID der Roborock Instanz
Parameter $multizone JSON String mit mehreren Zonen
Beispiel:
Zone 1:
Parameter $lower_left_corner_x X-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $lower_left_corner_y Y-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_x X-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_y Y-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $number Anzahl der Reinigungen
Zone 2:
Parameter $lower_left_corner_x1 X-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $lower_left_corner_y1 Y-Koordinate der linken unteren Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_x1 X-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $upper_right_corner_y1 Y-Koordinate der oberen rechten Ecke der Reinigungszone (Rechteck)
Parameter $number1 Anzahl der Reinigungen
$InstanceID = 12345;
$multizone = [
[$lower_left_corner_x, $lower_left_corner_y, $upper_right_corner_x, $upper_right_corner_y, $number],
[$lower_left_corner_x1, $lower_left_corner_y1, $upper_right_corner_x1, $upper_right_corner_y1, $number1]
];
$multizone = json_encode($multizone);
Roborock_ZoneCleanMulti($InstanceID, $multizone);
Fährt zu den angegebenen Koordinaten
Roborock_GotoTarget(integer $InstanceID, integer $x, integer $y);
Parameter $InstanceID ObjektID der Roborock Instanz
Parameter $x X-Koordinate der Zielposition
Parameter $y Y-Koordinate der Zielposition
Hinweis: die Basisstation hat die Koordinaten 2550, 2550. Eine Einheit entspricht ungefähr einem Millimeter.
GUID: {E65614FB-B37A-219A-4876-E5676C948C33}
OpenMiHome Wolfgang Frisch (GPLv3)
Dustcloud Dennis Giese & Daniel Wegemer (GPLv3)