O
oscar_
- Dabei seit
- 28.11.2019
- Beiträge
- 7
- Likes
- 2
Dann will ich doch mal als "Neuling" erstmal meinen Beitrag für die Community leisten 
Da ich mir momentan ein kleinens SmartHome aufbaue hab ich natürlich gleich geschaut ob man
den Roborock S5Max auch mit einbinden kann und was damit möglich ist.
Als erstes benötigt man den Token um mit dem Sauger kommunizieren zu können. Dazu wird eine manipulierte MiHome App benutzt.
Alles weitere kann man hier bei www.loxwiki.eu oder im Spoiler nachlesen. Wichtig ist das man auf jeden Fall eine vorhandene MiHome/Xiaomi Home App deinstalliert
Unter iOS ist der Token in der App mittlerweile verschlüsselt. Das kann man daran erkennen, dass der Token 96 Zeichen lang ist. Ein unverschlüsselter Token ist lediglich 32 Zeichen lang. Viele alte Anleitungen im Netz berücksichtigen diese Verschlüsselung noch nicht! Im Plugin müsst ihr unbedingt einen unverschlüsselten (d. h. 32 Zeichen langen) Token verwenden! Daher empfehle ich Euch nach dieser Anleitung hier vorzugehen.
Zunächst müsst ihr die iOS-App für Euren MiRobot installieren. Die App heisst "Mi Home" und findet sich im AppStore. Eine Anleitung zur Einrichtung der App findet sich hier: Ausprobiert: Xiaomi Mi Roboter-Staubsauger mit App-Bedienung
Jetzt müsst Ihr ein unverschlüsseltes Backup Eures iOS-Gerätes mit iTunes anlegen. Mit dem Backup werden auch die Daten der Mi Home App mitgesichert, aus denen wir den Token dann extrahieren müssen. Nachdem ihr das Backup erzeugt habt, installiert ihr die kostenlose Software iBackup Viewer: iPhone Backup Viewer is a free iPhone backup extractor for Mac and Windows
Startet nun iBackup Viewer und wählt euer iOS Device im Startbildschirm aus. Jetzt geht ihr auf das iCon für "Raw Files" (das Symbol zeigt einen Verzeichnisbaum). Im linken Fenster scrollt ihr Euch runter bis zum Eintrag "AppDomain-com.xiaomi.mihome" und wählt diesen aus. Im rechten Fenster sucht ihr jetzt den Einträge "Documents/17xxxxxxxx_mihome.sqlite" (xxxxxxxx variiert). Ihr könnt dazu per Klick auf das "Name" Feld nach diesem Feld sortieren oder ihr verwendet die Suche oben rechts. Wenn ihr den Eintrag gefunden habt markieren und oben rechts auf "Exportieren" klicken.
Die exportierte Datei schiebt ihr jetzt per Windows Explorer auf Euren LoxBerry (z. B. ins Verzeichnis /opt/loxberry/webfrontend/html/tmp) oder ihr benutzt dazu WinSCP.
Jetzt müsst Ihr Euch per Putty auf dem LoxBerry einloggen. Auf der Kommandozeile müsst ihr nun folgenden Befehl eingeben:
COMMAND miio-extract-tokens /opt/loxberry/webfrontend/html/tmp/17xxxxxxxx_mihome.sqlite
Die Ausgabe sieht wie folgt aus:
[email protected]:~ $ miio-extract-tokens /opt/loxberry/webfrontend/html/tmp/1765602737_mihome.sqlite
INFO:miio.extract_tokens:Reading database from /opt/loxberry/webfrontend/html/tmp/1765602737_mihome.sqlite
INFO:miio.extract_tokens:Reading tokens from Apple DB
Saugi WoZi
Model: rockrobo.vacuum.v1
IP address: 192.168.3.40
Token: 354e6b4f447893562c5675497a354938
MAC: 34:CE:00:EB:71:64
Den Token jetzt per Copy&Paste im Plugin eintragen (unter Putty markiert ihr einfach den Token und er wird automatisch in der Zwischenablage gespeichert).
Wenn man den Token hat gehts in openHAB weiter. Hier muss man nun über das PaperUI das Xiaomi Mi IO Binding unter Add-ons -> Bindings suchen und installieren.
Nun werden in der Inbox ein oder zwei neue Xiaomi Mi Devices angezeigt. Diese aber nicht adden! Sondern wir brauchen nur die angezeigte ID für später da das Binding noch nicht für den S5Max angepasst wurde wird dieser sonst als ein miio:unsupported Gerät angelegt und wir wollen ja eins als miio:vacuum. Das heißt nun wir müssen uns den Staubsauber selber in einer *.things Datei wie folgt anlegen:
Host = die IP Adresse eures Saugers
Token=Der mit der geänderten MiHome App ausgelesene Token
DeviceId= ID aus der Inbox[/QUOTE]
Nun geht es weiter mit dem anlegen der *.items Datei
Infos
-Es werden nur Standart Icons benutzt.
-Ein Schalter zum starten und stoppen des Staubsaugers per Sprachsteuerung über Alexa mit dem Namen Max ist intigriert (Switch rr_s5max_alexa)
-Item Bezeichung sind auf Englisch und per Sitemap bzw *.map auf Deutsch "übersetzt"[/QUOTE]
Um den Status es Roborock zu übersetzten benutze ich eine *.map
[/QUOTE]Und dann kommt natürlich der Code für die Sitemap damit man auch was davon sieht 
[/QUOTE]Nun noch zwei Rules damit alles mit Alexa klappt
[/QUOTE]
Sooooooooo....
Nun solltet ihr eine Sitemap haben mit einiges an Infos über den Roborock S5Max.
Ihr könnt ihn starten,stoppen und eine Fleckenreinigung durchführen.
Und ihr könnt könnt das ganze über Alexa steuern.
Vllt freut sich ja jemand über die kleine Anleitung
Da ich mir momentan ein kleinens SmartHome aufbaue hab ich natürlich gleich geschaut ob man
den Roborock S5Max auch mit einbinden kann und was damit möglich ist.
Als erstes benötigt man den Token um mit dem Sauger kommunizieren zu können. Dazu wird eine manipulierte MiHome App benutzt.
Alles weitere kann man hier bei www.loxwiki.eu oder im Spoiler nachlesen. Wichtig ist das man auf jeden Fall eine vorhandene MiHome/Xiaomi Home App deinstalliert
Auslesen des Token für iOS Geräte
HinweisUnter iOS ist der Token in der App mittlerweile verschlüsselt. Das kann man daran erkennen, dass der Token 96 Zeichen lang ist. Ein unverschlüsselter Token ist lediglich 32 Zeichen lang. Viele alte Anleitungen im Netz berücksichtigen diese Verschlüsselung noch nicht! Im Plugin müsst ihr unbedingt einen unverschlüsselten (d. h. 32 Zeichen langen) Token verwenden! Daher empfehle ich Euch nach dieser Anleitung hier vorzugehen.
Zunächst müsst ihr die iOS-App für Euren MiRobot installieren. Die App heisst "Mi Home" und findet sich im AppStore. Eine Anleitung zur Einrichtung der App findet sich hier: Ausprobiert: Xiaomi Mi Roboter-Staubsauger mit App-Bedienung
Jetzt müsst Ihr ein unverschlüsseltes Backup Eures iOS-Gerätes mit iTunes anlegen. Mit dem Backup werden auch die Daten der Mi Home App mitgesichert, aus denen wir den Token dann extrahieren müssen. Nachdem ihr das Backup erzeugt habt, installiert ihr die kostenlose Software iBackup Viewer: iPhone Backup Viewer is a free iPhone backup extractor for Mac and Windows
Startet nun iBackup Viewer und wählt euer iOS Device im Startbildschirm aus. Jetzt geht ihr auf das iCon für "Raw Files" (das Symbol zeigt einen Verzeichnisbaum). Im linken Fenster scrollt ihr Euch runter bis zum Eintrag "AppDomain-com.xiaomi.mihome" und wählt diesen aus. Im rechten Fenster sucht ihr jetzt den Einträge "Documents/17xxxxxxxx_mihome.sqlite" (xxxxxxxx variiert). Ihr könnt dazu per Klick auf das "Name" Feld nach diesem Feld sortieren oder ihr verwendet die Suche oben rechts. Wenn ihr den Eintrag gefunden habt markieren und oben rechts auf "Exportieren" klicken.
Die exportierte Datei schiebt ihr jetzt per Windows Explorer auf Euren LoxBerry (z. B. ins Verzeichnis /opt/loxberry/webfrontend/html/tmp) oder ihr benutzt dazu WinSCP.
Jetzt müsst Ihr Euch per Putty auf dem LoxBerry einloggen. Auf der Kommandozeile müsst ihr nun folgenden Befehl eingeben:
COMMAND miio-extract-tokens /opt/loxberry/webfrontend/html/tmp/17xxxxxxxx_mihome.sqlite
Die Ausgabe sieht wie folgt aus:
[email protected]:~ $ miio-extract-tokens /opt/loxberry/webfrontend/html/tmp/1765602737_mihome.sqlite
INFO:miio.extract_tokens:Reading database from /opt/loxberry/webfrontend/html/tmp/1765602737_mihome.sqlite
INFO:miio.extract_tokens:Reading tokens from Apple DB
Saugi WoZi
Model: rockrobo.vacuum.v1
IP address: 192.168.3.40
Token: 354e6b4f447893562c5675497a354938
MAC: 34:CE:00:EB:71:64
Den Token jetzt per Copy&Paste im Plugin eintragen (unter Putty markiert ihr einfach den Token und er wird automatisch in der Zwischenablage gespeichert).
Auslesen des Token für Android Geräte
Seit der Verschlüsselung der Mi Settings (und gerade dann wenn auch euer Android-Handy verschlüsselt ist) funktioniert bei mir nur folgende Methode (alle Anleitungen vor Frühsommer 2018 sind unbrauchbar!):- alte Mi Home Version deinstallieren
- Mi Account Login-Passwort auf der Mi Homepageseite temporär ändern (zur eigenen Sicherheit)
- im Internet nach geänderter MiHome_5.6.10_vevs.apk Datei suchen (Stand: 26.10.2019; beim Download kein Benutzername; die 6 Ziffern dahinter sind das Passwort) und herunterladen
- installieren der apk Datei (Installation von Dateien aus unbekannten Quellen muss zugelassen sein am Handy)
- Login in der gerade installierten App (Server muss unbedingt der ausgewählt werden, den ihr auch zuvor hattet, sonst werden die Geräte nicht automatisch wieder erscheinen; hattet ihr also zuvor den Server "Mainland China" dann auch jetzt diesen auswählen)
- warten bis der Staubsaugerroboter angezeigt wird, auf diesen klicken um diesen einmalig zu initialisieren
- dann zurück auf die Xiaomi App Hauptseite zurückgehen und unten rechts auf Profil klicken
- dann im Profil auf ´Teilen´ (geteilte Geräte) klicken
- dann auf ´Share this device´
- in der Zeile unterhalb des Staubsaugerrobotersymbols sieht man dann den Token des Staubsaugers (lange auf Nummer klicken, dann wird sie in den Zwischenspeicher kopiert und ihr könnt sie per E-Mail an euch versenden o.ä.)
- geänderte MiHome App wieder deinstallieren
- Mi Account Login-Passwort auf der Mi Homepageseite wieder zurückändern
- offizielle MiHome App wieder installieren
Wenn man den Token hat gehts in openHAB weiter. Hier muss man nun über das PaperUI das Xiaomi Mi IO Binding unter Add-ons -> Bindings suchen und installieren.
Nun werden in der Inbox ein oder zwei neue Xiaomi Mi Devices angezeigt. Diese aber nicht adden! Sondern wir brauchen nur die angezeigte ID für später da das Binding noch nicht für den S5Max angepasst wurde wird dieser sonst als ein miio:unsupported Gerät angelegt und wir wollen ja eins als miio:vacuum. Das heißt nun wir müssen uns den Staubsauber selber in einer *.things Datei wie folgt anlegen:
Code:
//Roborock S5 Max
Thing miio:vacuum:mine "Roborock S5 Max" [ host="192.168.XXX.XXX", token="4b6171453XXXXXXXXXXXXX3854784c73", deviceId="0FXXXX7A" ]
Token=Der mit der geänderten MiHome App ausgelesene Token
DeviceId= ID aus der Inbox[/QUOTE]
Nun geht es weiter mit dem anlegen der *.items Datei
Code:
Group rr_s5max_gVac "Xiaomi Robot Vacuum" <fan>
Group rr_s5max_gVacStat "Status Details" <status> (rr_s5max_gVac)
Group rr_s5max_gVacCons "Consumables Usage" <line-increase> (rr_s5max_gVac)
Group rr_s5max_gVacDND "Do Not Disturb Settings" <moon> (rr_s5max_gVac)
Group rr_s5max_gVacHist "Cleaning History" <calendar> (rr_s5max_gVac)
Group rr_s5max_gVacNetwork "Network Details" <network> (rr_s5max_gVac)
Switch rr_s5max_alexa "Max" (rr_s5max_gVac) ["Switchable"]
String rr_s5max_actionControl "Vacuum Control" (rr_s5max_gVac) {channel="miio:vacuum:mine:actions#control" }
Number rr_s5max_actionFan "Vacuum Fan" (rr_s5max_gVac) {channel="miio:vacuum:mine:actions#fan" }
String rr_s5max_actionCommand "Vacuum Command" {channel="miio:vacuum:mine:actions#commands" }
Number rr_s5max_statusBat "Battery Level [%1.0f%%]" <battery> (rr_s5max_gVac,rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#battery" }
Number rr_s5max_statusArea "Cleaned Area [%1.0fm²]" <zoom> (rr_s5max_gVac,rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#clean_area" }
Number rr_s5max_statusTime "Cleaning Time [%1.0f']" <time> (rr_s5max_gVac,rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#clean_time" }
String rr_s5max_statusError "Error [%s]" <error> (rr_s5max_gVac,rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#error_code" }
Number rr_s5max_statusFanPow "Fan Power [%1.0f %%]" <flow> (rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#fan_power" }
Number rr_s5max_statusClean "In Cleaning Status [%1.0f]" <switch> (rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#in_cleaning" }
Switch rr_s5max_statusDND "DND Activated" (rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#dnd_enabled" }
String rr_s5max_statusStatus "Status [%s]" <status> (rr_s5max_gVacStat) {channel="miio:vacuum:mine:status#state"}
Number rr_s5max_consumableMainT "Main Brush [%1.0f]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#main_brush_time"}
Number rr_s5max_consumableMainP "Main Brush [%1.0f%%]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#main_brush_percent"}
Number rr_s5max_consumableSideT "Side Brush [%1.0f]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#side_brush_time"}
Number rr_s5max_consumableSideP "Side Brush [%1.0f%%]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#side_brush_percent"}
Number rr_s5max_consumableFilterT "Filter Time[%1.0f]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#filter_time" }
Number rr_s5max_consumableFilterP "Filter Time[%1.0f%%]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#filter_percent" }
Number rr_s5max_consumableSensorT "Sensor [%1.0f]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#sensor_dirt_time"}
Number rr_s5max_consumableSensorP "Sensor [%1.0f%%]" <line-increase> (rr_s5max_gVacCons) {channel="miio:vacuum:mine:consumables#sensor_dirt_percent"}
Switch rr_s5max_dndFunction "DND Function" <moon> (rr_s5max_gVacDND) {channel="miio:vacuum:mine:dnd#dnd_function"}
String rr_s5max_dndStart "DND Start Time [%s]" <time> (rr_s5max_gVacDND) {channel="miio:vacuum:mine:dnd#dnd_start"}
String rr_s5max_dndEnd "DND End Time [%s]" <time-on> (rr_s5max_gVacDND) {channel="miio:vacuum:mine:dnd#dnd_end"}
Number rr_s5max_historyArea "Total Cleaned Area [%1.0fm²]" <zoom> (rr_s5max_gVacHist) {channel="miio:vacuum:mine:history#total_clean_area"}
Number rr_s5max_historyTime "Total Clean Time [%1.0f']" <time> (rr_s5max_gVacHist) {channel="miio:vacuum:mine:history#total_clean_time"}
Number rr_s5max_historyCount "Total # Cleanings [%1.0f]" <office> (rr_s5max_gVacHist) {channel="miio:vacuum:mine:history#total_clean_count"}
String rr_s5max_miNetSSID "Network SSID [%s]" <network> (rr_s5max_gVac,rr_s5max_gVacNetwork) {channel="miio:vacuum:mine:network#ssid" }
String rr_s5max_miNetBSSID "Network BSSID [%s]" <network> (rr_s5max_gVac,rr_s5max_gVacNetwork) {channel="miio:vacuum:mine:network#bssid" }
Number rr_s5max_miNetRSSI "Network RSSI [%1.0f]" <network> (rr_s5max_gVac,rr_s5max_gVacNetwork) {channel="miio:vacuum:mine:network#rssi" }
Number rr_s5max_miNetLife "Uptime [%1.0f]" <time> (rr_s5max_gVac,rr_s5max_gVacNetwork) {channel="miio:vacuum:mine:network#life" }
-Es werden nur Standart Icons benutzt.
-Ein Schalter zum starten und stoppen des Staubsaugers per Sprachsteuerung über Alexa mit dem Namen Max ist intigriert (Switch rr_s5max_alexa)
-Item Bezeichung sind auf Englisch und per Sitemap bzw *.map auf Deutsch "übersetzt"[/QUOTE]
Um den Status es Roborock zu übersetzten benutze ich eine *.map
Code:
//Status Mode
Manual Mode=Manuelle Steuerung
Spot Cleaning=Fleckenreinigung
Idel=Untätig
Returning Dock=Rückfahrt zur Station
Charging=Aufladen
Cleaning=Reinigen
Unknown=Status unbekannt
Paused=Pause
Sleeping=Schlummern
vacuum=Reinigen
pause=Pause
spot=Spot
dock=Laden
Code:
sitemap robo label="My Home - Test environment"
{
Frame label="Roborock S5 Max"
{
Switch item=rr_s5max_actionControl label="Modus [MAP(roborock_s5max.map):%s]" mappings=[vacuum="Reinigen", pause="Pause",spot="Spot", dock="Laden"]
//Switch item=actionFan mappings=[38="Silent", 60="Normal", 77="Power",90="Full", -1="Custom"] // Aint working for S5Max
Default item=rr_s5max_statusBat label="Batterie Status [%1.0f%%]"
Default item=rr_s5max_statusArea label="Aktuelle Reinigungsfläche [%1.0f m²]"
Default item=rr_s5max_statusTime label="Aktuelle Reinigungsdauer [%1.0f Minuten]"
Text label="Status Details" icon="status"
{
Default item=rr_s5max_statusBat label="Batterie Status [%1.0f%%]"
Default item=rr_s5max_statusStatus label="Status [MAP(roborock_s5max.map):%s]"
Default item=rr_s5max_statusArea label="Aktuelle Reinigungsfläche [%1.0f m²]"
Default item=rr_s5max_statusTime label="Aktuelle Reinigungsdauer [%1.0f Minuten]"
Default item=rr_s5max_statusError label="Fehler [%s]"
//Default item=statusFanPow label="Saugleistung [%1.0f %%]" // Aint working for S5Max
Default item=rr_s5max_statusClean label="In Cleaning Status [%1.0f]"
Default item=rr_s5max_statusDND label="DND aktiviert"
}
Text label="Wartung und Status" icon="line-increase"
{
Default item=rr_s5max_consumableMainP label="Hauptbürste [%1.0f%%]"
Default item=rr_s5max_consumableMainT label="Hauptbürste austauschen nach [%1.0f/300 Std.]"
Default item=rr_s5max_consumableSideP label="Seitenbürste [%1.0f%%]"
Default item=rr_s5max_consumableSideT label="Seitenbürste austauschen nach [%1.0f/200 Std.]"
Default item=rr_s5max_consumableFilterP label="Filter [%1.0f%%]"
Default item=rr_s5max_consumableFilterT label="Filter austauschen nach [%1.0f/150 Std.]"
Default item=rr_s5max_consumableSensorP label="Sensoren [%1.0f%%]"
Default item=rr_s5max_consumableSensorT label="Sensoren reinigen nach [%1.0f/30 Std.]"
}
Text label="Do Not Disturb Modus" icon="moon"
{
Default item=rr_s5max_dndFunction label="Do Not Disturb"
Default item=rr_s5max_dndStart label="DND Beginn [%s]"
Default item=rr_s5max_dndEnd label="DND Ende [%s]"
}
Text label="Reinigunsverlauf" icon="calendar"
{
Default item=rr_s5max_historyArea label="Gereinigte Fläche gesamt [%1.0f m²]"
Default item=rr_s5max_historyTime label="Reinigungszeit gesamt [%1.0f]"
Default item=rr_s5max_historyCount label="Anzahl kompletter Reinigungen [%1.0fx]"
}
Text label="Netzerk Details" icon="network"
{
Default item=rr_s5max_miNetSSID label="Netzwerk SSID [%s]"
Default item=rr_s5max_miNetBSSID label="Netzwerk MAC Adresse [%s]"
Default item=rr_s5max_miNetRSSI label="Netzwerk RSSI [%1.0f]"
Default item=rr_s5max_miNetLife label="Online seit [%1.0f]"
}
}
}
Code:
//Alexa Rule to start Robo
rule "vacuum on"
when
Item rr_s5max_alexa received command ON
then
rr_s5max_actionControl.sendCommand("vacuum")
end
//Alexa Rule to stop Robo, say twice to return to dock
rule "vacuum off"
when
Item rr_s5max_alexa received command OFF
then
rr_s5max_actionControl.sendCommand("dock")
end
Sooooooooo....
Nun solltet ihr eine Sitemap haben mit einiges an Infos über den Roborock S5Max.
Ihr könnt ihn starten,stoppen und eine Fleckenreinigung durchführen.
Und ihr könnt könnt das ganze über Alexa steuern.
Vllt freut sich ja jemand über die kleine Anleitung
