Skip to content

Latest commit

 

History

History
608 lines (387 loc) · 19 KB

README.md

File metadata and controls

608 lines (387 loc) · 19 KB

Roborock Staubsauger Roboter

Version Version Code StyleCI

Modul für IP-Symcon ab Version 5.1

Dokumentation

Inhaltsverzeichnis

  1. Funktionsumfang
  2. Voraussetzungen
  3. Installation
  4. Funktionsreferenz
  5. Konfiguration
  6. Anhang

1. Funktionsumfang

Mit dem Modul ist es möglich einen Roborock Staubsauger Roboter (Xiaomi) von IP-Symcon aus zu steuern.

Funktionen:

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

2. Voraussetzungen

  • IP-Symcon 4.3
  • MI App (Xiaomi)
  • Roborock Staubsauger Roboter (Xiaomi)

3. Installation

a. Laden des Moduls

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

Store

Im Suchfeld nun

Roborock

eingeben

Store

und schließend das Modul auswählen und auf Installieren

Store

drücken.

Alternatives Installieren über Modules Instanz

Den Objektbaum Öffnen.

Objektbaum

Die Instanz 'Modules' unterhalb von Kerninstanzen im Objektbaum von IP-Symcon (>=Ver. 5.x) mit einem Doppelklick öffnen und das Plus Zeichen drücken.

Modules

Plus

ModulURL

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.

Master

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,

SelectBranch

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.

b. Erhalten der IP Adresse und des Tokens

IP Adresse in der MIHome App nachschlagen

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.

Token mit iOS beziehen

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

DB Browser for SQLite

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.

Token mit Android beziehen

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.

Windows und Android

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

Linux und Android

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";'

c. Einrichtung in IPS

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.

AddInstance

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

d. Einrichtung des Kartenuploads (NUR für gerootete Geräte!)

Momentan kann man von außen leider nicht die Kartenansicht auslesen. Für gerootete Geräte kann man nachfolgenden Workaround nutzen.

  1. per SSH auf dem Robot einwählen
  2. 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:

Map

Der rote Punkt stellt dabei die aktuelle Position des Staubsaugers dar.

Webfront Ansicht

Webfront 1

Webfront 2

4. Funktionsreferenz

Roborock Staubsauger Roboter:

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

5. Konfiguration:

Eigenschaften:

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

6. Anhang

a. Funktionen:

Roborock Staubsauger Roboter:

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.

b. GUIDs und Datenaustausch:

Roborock:

GUID: {E65614FB-B37A-219A-4876-E5676C948C33}

c. Quellen

OpenMiHome Wolfgang Frisch (GPLv3)

Dustcloud Dennis Giese & Daniel Wegemer (GPLv3)