Cloudless Roborock

Viele von euch mit einem der vielen mit dem Internet verbundenen Geräten kennen es bestimmt: Es gibt eine App zur Konfiguration und Fernsteuerung. Über solche lassen sich beispielsweise Alexa Skills installieren oder auch der Reinigungsfortschritt der eigenen Waschmaschine prüfen. Sehr praktisch ... oder?

Kommt man aus einem eher technischen Umfeld, besteht (zumindest oft bei mir) die Frage: Wie machen die das denn?

Aus den endlos vielen Möglichkeiten hat sich in letzter Zeit eine zentralisierte Lösung bei vielen Herstellern etabliert. Das heißt konkret ein Smart-Home Gerät übermittelt seine gesammelten Daten an einen oder mehrere Server im Internet und dort werden diese erst mal abgelegt. Frägt man nun per App den Status seines Geräts ab, empfängt man eigentlich nur den zwischengespeicherten Datenstand auf dem Server. Auch durch die App ausgelöste Aktionen werden zuerst an den Server übertragen, welcher dann den Befehl an das Gerät weiterleitet. Diese Art der Kommunikation erleichtert den Entwicklungsaufwand und auch die Installation des Geräts beim Endkunden enorm, allerdings werden so auch permanent Daten auf ein entferntes System übertragen und dort eventuell gespeichert.

Jetzt wird es "Cloudless"

Ich bin allerdings sehr bemüht meine Daten auch in meinen eigenen vier Wänden zu behalten. Das führte dazu das mein neuer Haushaltshelfer "Dusty" auch erst mal kein Internet sehen durfte. Zumindest so lange bis einige "Daten-Knebel" an Ort und Stelle sind.

Der Roborock S55 in der Ladestation
Der Roborock S55 in der Ladestation

Um "Dusty" kurz vorzustellen: Es handelt sich um einen Xiaomi "Roborock S55" der seit Februar 2018 auf dem Markt ist. Es ist ein runder Saugroboter, welcher seine Umgebung mittels eines Laser-Entfernungsmessers und weiteren Sensoren erkennt und seine Route den aktuellen Gegebenheiten anpasst.

Root-Zugriff

Hintergrund-Infos

Für die Veränderung der Software auf dem Roboter benötigen man als ersten Schritt den Zugriff auf das Betriebssystem. Um "Dusty" für das Vorhaben zu "öffnen" hab ich das Ergebnis des Hacks von Dennis Giese and Daniel Wegemer auf dem 34. Chaos Computer Congress (34c3) benutzt. Die beiden verwenden eine etwas unkonventionelle Methode um Root-Zugriff auf den Roboter zu bekommen. Sie benutzen ein Stück-Alufolie um zwei Pins des verbauten Prozessors kurzzuschließen und diesen in einen Notfall-Modus zu bringen. In diesem Modus ist es möglich eine eigene Software in den Arbeitsspeicher zu laden und somit Zugriff auf das Roboter-Betriebssystem zu erhalten. Was im in diesem Fall ein minimal angepasstes Ubuntu Linux System ist. Beim analysieren des Update-Prozesses haben sie das Passwort der Verschlüsselung ermittelt ('rockrobo') und somit kann auch über weitere Geräte ohne Alu-Folie die volle Kontrolle übernommen werden. Alle ihre Ergebnisse und Daten, auch von weiteren Hacks von Xiaomi Geräte findet man in der Dustcloud.

Start the "Hack"

Um "Dusty" jetzt zu rooten, habe ich die Punkte aus dem Wiki des Dustcloud-Projekts befolgt welche ich kurz mit euch durchgehe.

Für die Erzeugung der eigenen Firmware muss man zwingend ein Linux zu benutzen, da manche der benutzten Tools nur dafür verfügbar sind. Für so etwas fahre ich bei mir eine virtuelle Maschine mit einem Debiansystem hoch. Das Generieren des neuen Firmware Image ging damit relativ unkompliziert und ohne Probleme vonstatten.

Die frische Firmware überträgt man nach gleicher Anleitung anschließend auf den Staubsaugroboter. Wichtig dabei ist die Verbindung zum Roboter, wenn also noch nicht getan, müsst ihr euch mit dem Roborock-* WLAN verbinden.

Sollte das jemand auch aus einer Virtualbox raus machen, gebt Acht dass ihr euer WLAN-Interface über eine Netzwerkbrücke verbindet.

Bei mir ist an dieser Stelle alles gut gegangen und ich konnte mich mit SSH auf den Roboter verbinden. (Mit dem Benutzernamen root!)

Weboberfläche

Mein Ziel ware es den Roborock komplett von den Xiaomi Servern zu trennen. Um trotzdem dessen Remote-Funktionalität zu erhalten habe ich mich für die Installation von Valetudo entschieden. Valetudo ist eine auf dem Roboter laufende Webanwendung die den Funktionsumfang der Original-App nachbildet und aktiv von einer großen Community weiterentwickelt wird. Die Installation läuft hier relativ einfach ab und am Ende wird die Weboberfläche unter htto://ip.de.s.robo gestartet.

Eine Erklärung der Installation sowie eine Schritt-für-Schritt Anleitung findet sich im Wiki des Valetudo-Projekts. Dabei wird in die originale Firmware die Valetudo Installation eingebettet und Blockaden in Richtung der Xiaomi Server erstellt. Auch für diese Schritte ist ein Linux-System oder eine virtuelle Machine hilfreich.

Das Hauptmenü von Valetudo
Das Hauptmenü von Valetudo

Weitere Blockaden können wie im Wiki von Dustcloud beschrieben errichtet werden. Es können zusätzlich noch die Regeln

iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -j DROP

in die /etc/rc.local eingetragen um jeglichen Traffik zu blockieren werden. Diese Änderung könnten allerdings bei einem Neustart verloren gehen.

Internetzugang

Zu guter Letzt wird jetzt der Roboter mit Hilfe der Valetudo-Oberfläche unter Einstellungen in das heimische WLAN eingebunden. Somit kann jedes Gerät auf die Weboberfläche des Roboters zugreifen und steuern.

Ich habe zusätzlich für mich noch einen VPN-Tunnel eingerichtet. Somit kann ich auch relativ sicher über den Tunnel aus der Ferne immer mal wieder nachschauen, was "Dusty" so treibt, ohne meinen Router direkt zum Internet hin öffnen zu müssen.

Ich hoffe euch hat dieser kleine Ausflug in eine eher technischere Welt gut gefallen. Wenn ja dann lasst gerne einen Kommentar da, wenn nicht dann erst recht! Mann will sich ja verbessern.