Xiaomi Roborock Saugroboter mit Raspberry Pi hacken/rooten (ohne cloud upload)

Cloud Free Xiaomi Roborock Saugroboter mit Valetudo und Dummycloud

Ziel dieser Anleitung ist es, den Xiaomi/Roborock Saugroboter ohne Internet/Cloud zu betreiben.
Es sollen keine persönlichen Daten hochgeladen werden können.

Unterstützte Geräte: alle Roborock mit LDS (S5, S50, S55), Xiaomi Mi

Ein Saug- und Wischroboter ist eine sehr große Hilfe bei einer großen Wohnung.
Da die Preise in diesem Jahr stark gesunken sind, habe ich angefangen verschiedenen Modelle zu vergleichen.
Die Funktion, dass der Saugroboter die Räume mit einem Laser abscannen kann und eine Karte der Wohnung erstellt, war mir wichtig.
So kann der Saugroboter selbständig durch die Wohnung navigieren und die Räume schneller saugen, als ein Saugroboter der nach dem Zufallsprinzip vorgeht.

Leider “benötigen” die Saugroboter mit Raumerkennung eine aktive Internetverbindung, um zu funktionieren.
Damit habe ich ein großes Problem, da alle persönlichen Daten in die Cloud des Herstellers hochgeladen werden.
Man hat keine Wahl ob bzw. welche Daten man freigibt. Mir ist es ein Rätsel warum das mit der deutschen Datenschutzverordnung möglich ist.

Nach einer Recherche, habe ich das Dustcloud Projekt gefunden, mit der es möglich ist, Xiaomi/Roborock Saugroboter zu rooten.
Mit dem Root-Zugang hat man uneingeschränkten Zugriff auf das System des Saugroboters und kann beliebige Software darauf installieren.
Damit du den Saugroboter im eigenen Netzwerk steuern kannst, wird die Web-App Valetudo auf dem Saugroboter installiert.

Benötigt wird:

Die Anleitung muss auf einem Linux (Debian) System ausgeführt werden (Windows/Mac OSX nicht möglich). Deshalb benötigst du den Raspberry Pi.
Alternativ kannst du auch eine Virtuelle Machine mit Debian verwenden. Bei einigen Schritten kann es zu Problemen kommen, da die Programme mit der Netzwerkverbindung der Virtual Machine nicht zurecht kommen.

Ich übernehme keine Haftung für Schäden. Beachte auch das die Garantie des Gerätes verfällt.
Es ist möglich die original Firmware wieder auf das Gerät zu spielen.

Inhalt

Update
19.05.2019: Deutsche Sprachdatei hinzugefügt (Schritt 12)
15.09.2019: Python Befehle an Python 3 angepasst Firmware Flashen Teil. Danke an Benjamin und den anderen Hilfreichen Kommentatoren.

Dustcloud/Dummycloud, Valetudo und Firmware herunterladen

  1. Installiere Raspbian auf deinem Raspberry Pi. Eine einfache Anleitung findest du hier.
    Schritt 1 in dieser Anleitung ist ausreichend. WLAN kannst du im Raspbian Desktop einstellen.
  2. Aktualisiere die Paketlisten um die neuesten Software Versionen installieren zu können.
    Danach werden ein paar Programme installiert, die zum “rooten” benötigt werden. (&& verbindet zwei Befehle)

    sudo apt-get update && sudo apt-get install -y ccrypt git wget unzip dos2unix
  3. Erstell einen Ordern mit dem Name rockrobo im Heimverzeichnis (/home/pi) und navigiere in den neu erstellten Ordner.
    mkdir ~/rockrobo && cd ~/rockrobo
  4. Klone/kopiere das Dustcloud Repository in den aktuellen Ordner (rockrobo) mit Git.
    git clone https://github.com/dgiese/dustcloud.git
  5. Erstelle im rockrobo Ordner einen neuen Ordner valetudo und navigiere hinein.
    mkdir valetudo && cd valetudo
  6. Jetzt musst du die aktuelle Valetudo Datei in den valetudo Ordner herunterladen.
    Geh dazu auf die Valetudo Release Seite. Dort sind alle Versionen aufgelistet. Bei mir ist es die Version 0.3.1.
    Scroll etwas nach unten bis zur “Assets” Auflistung. Kopiere dort den Link zur “valetudo” Datei.

    Ersetze dann den Link nach dem wget Befehl.

    wget https://github.com/Hypfer/Valetudo/releases/download/0.3.1/valetudo

    Nachdem du den Befehl ausgeführt hast, sollte sich eine Datei “valetudo” im aktuellen Ordner Befinden. Das kannst du mit dem Befehl ls prüfen.

  7. Erstell im valetudo Ordner einen neuen Ordner, mit dem Namen deployment und navigiere hinein.
    mkdir deployment && cd deployment
  8. Lade die valetudo.conf Datei herunter.
    wget https://github.com/Hypfer/Valetudo/raw/master/deployment/valetudo.conf
  9. Erstell im deployment Ordner einen neuen Ordner, mit dem Namen etc und navigiere hinein.
    mkdir etc && cd etc

    Lade die hosts und die rc.local Datei herunter.

    wget https://github.com/Hypfer/Valetudo/raw/master/deployment/etc/hosts
    wget https://github.com/Hypfer/Valetudo/raw/master/deployment/etc/rc.local
    
    In der hosts Datei sind alle bekannten Xiaomi/mi.com/RoboRock Server vermerkt. Dies verhindert das deine Daten in die Cloud hochgeladen werden.

    In der rc.local Datei wird festgelegt, dass der Datenaustausch mit der Xiaomi/mi.com/RoboRock Cloud auf die interne Dummycloud umgeleitet wird. So wird dem RoboRock System vorgegaukelt das es nach “Hause telefoniert”.

  10. Navigiere zurück in die oberste Ebene des rockrobo Ordners
    cd ~/rockrobo

    und erstelle dort einen neuen Ordner mit dem Namen rrlogd-patcher. Navigiere hinein.

    mkdir rrlogd-patcher && pushd rrlogd-patcher

    Lade die patcher.py Datei herunter.

    wget https://raw.githubusercontent.com/JohnRev/rrlogd-patcher/master/patcher.py
    Das Python script rrlogd-patcher sorgt dafür das die Cleaning Logs nicht verschlüsselt werden. Das ist nötig um sie später in der Valetudo App anzeigen zu lassen.
  11. Navigiere wieder zurück in die oberste Ebene des rockrobo Ordners
    cd ~/rockrobo

    und erstelle einen neuen Ordner mit dem Namen firmware und navigiere hinein.

    mkdir firmware && cd  firmware

    Schau auf der Dustcloud Seite nach, welche die aktuellste getestete Firmware vom Roborock ist.

    Achte darauf das du die richtige Generation wählst (Roborock S5 ist z.B. Gen2).



    Ersetze den letzten Teil der URL (v11_001810.fullos.pkg) mit dem Dateinamen deiner Firmwareversion.

    wget https://cdn.awsbj0.fds.api.mi-img.com/rubys/updpkg/v11_001810.fullos.pkg

    Wenn du die Firmware nicht herunterladen konntest, probier einen anderen Server. Nicht alle Versionen sind auf allen Servern verfügbar.
  12. Du benötigst noch eine Sprachdatei. Diese findest du hier.
    Lade mit folgendem Befehl die deutsche Sprachdatei herunter (in den Firmware Ordner).
    wget https://dustbuilder.xvm.mit.edu/pkg/voice/de.pkg
  13. Dein rockrobo Ordner sollte jetzt folgende Struktur haben.
    
    rockrobo/
    ├── dustcloud
    │   ├── cloudprotocol.pdf
    │   ├── devices
    │   ├── docker
    │   ├── dummycloud
    │   ├── dustcloud
    │   ├── LICENSE
    │   ├── Pipfile
    │   ├── Pipfile.lock
    │   ├── presentations
    │   └── README.md
    ├── firmware
    │   ├── v11_001810.fullos.pkg
    │   └── de.pkg
    ├── rrlogd-patcher
    │   └── patcher.py
    └── valetudo
        ├── deployment
        │   └── etc
        │       ├── hosts
        │       └── rc.local
        └── valetudo
    

SSH Key erstellen

Der SSH Key wird benötigt, um dich später mit deinem gerooteten Roborock per SSH zu verbinden.

  1. Prüfe ob schon ein SSH Key existiert.
    Wenn die Meldung angezeigt wird, dass die Datei oder Verzeichnis nicht gefunden wurde, gibt es noch keinen SSH Key.

    cat ~/.ssh/id_rsa.pub
  2. Erstelle einen neuen SSH Key mit folgendem Befehl.

    ssh-keygen

    Speicherort (~/.ssh/id_rsa) mit Enter bestätigen.
    Das Passwort kannst du leer lassen und mit zwei mal Enter Bestätigen.

Firmware “patchen” und Image erstellen

Bevor du die Firmware auf den Roborock kopierst, muss sie “gepatched” werden.
Sonst hast du später keinen Root-Zugang zum Roborock und der Saugroboter kann nicht ohne Xiaomi Cloud betrieben werden.

  1. Navigiere wieder in den rockrobo Ordner

    cd ~/rockrobo

    und erstelle einen neuen Ordner image und navigiere hinein.

    mkdir image && cd image
  2. Führe jetzt den Befehl aus, der die Firmware patch/rootet.
    Für eine bessere Übersicht habe ich den Befehl in mehrere Zeilen aufgeteilt. Durch Backslash \ am Ende jeder Zeile kannst du den Befehl so in dein Terminal einfügen und er wird als eine Zeile interpretiert.

    Wichtig ist noch, dass du den Dateiname der zuvor gespeicherten Firmware anpasst (bei mir v11_001810.fullos.pkg).

    
    sudo ../dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh \
         --firmware=../firmware/v11_001810.fullos.pkg \
         --soundfile=../firmware/de.pkg \
         --public-key=$HOME/.ssh/id_rsa.pub \
         --valetudo-path=../valetudo \
         --disable-firmware-updates \
         --ntpserver=fritz.box \
         --rrlogd-patcher=../rrlogd-patcher/patcher.py \
         --replace-adbd
    

    Hier der selbe Befehlt in einer langen Zeile, falls du Probleme hast.

    
    sudo ../dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh --firmware=../firmware/v11_001810.fullos.pkg --soundfile=../firmware/de.pkg --public-key=$HOME/.ssh/id_rsa.pub  --valetudo-path=../valetudo --disable-firmware-updates --ntpserver=fritz.box --rrlogd-patcher=../rrlogd-patcher/patcher.py --replace-adbd
    
    Falls du keine Fritzbox hast, entferne die Zeile mit dem Parameter –ntpserver, oder ersetze fritz.box mit der IP des NTP Server.

    • –firmware: gibt an wo die original Firmware gespeichert ist
    • –soundfile: gibt an wo die Sprachdatei gespeichert ist, die später vom Saugroboter verwendet werden soll (hier englisch)
    • –public-key: gibt an wo der Public SSH Key gespeichert ist
    • –valetudo-path: gibt an wo das Valetudo Programm gespeichert ist
    • –disable-firmware-updates: schaltet automatische Firmware Updates aus (wichtig da sonst der root Zugang verloren gehen kann)
    • –ntpserver: IP des NTP Servers (Zeitserver)
    • –rrlogd-patcher: gibt an wo das rrlogd-patcher script gespeichert ist
    • –replace-adbd: falls etwas schief geht, kannst du noch per USB auf den Saugroboter zugreifen

Firmware auf den Roborock Saugroboter flashen

Jetzt muss das patchte Firmware Image auf den Roborock Saugroboter kopiert (flashen) werden.

  1. Installiere die benötigten Programme.
    sudo apt-get install -y python3 python3-pip python3-venv python3-dev
     libffi-dev libssl-dev
  2. Optional: Erstell eine virtuelle Umgebung für die Python Pakete.
    Eine genaue Erklärung findest du in den Kommentaren.

    python3 -m venv .venv
    
  3. Installiere wheel, damit weitere Pakete automatisch installiert werden können.
    pip3 install wheel
  4. Installiere python-miio
    pip3 install python-miio
  5. Setze jetzt das WLAN des Roborock zurück, indem du die Zwei Tasten rechts und links neben dem Power Knopf gleichzeitig gedrückt hälst.
    Du kannst auch die Reset Taste unter der Klappe gedrückt halten.
  6. Verbind jetzt den Raspberry Pi mit dem WLAN des RoboRock. roborock-vacuum-s5-….
  7. Wenn der Raspberry Pi mit dem WLAN des Roborock verbunden ist, kannst du die Firmware übertragen (flashen).
    Wichtig ist das du den Dateinamen der Firmware anpasst. Lass dir den Namen mit ls anzeigen.

    ls output
    python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_001810.fullos.pkg

    Diesen Befehl im images Ordner ausführen. ~/roborock/images

    Die Firmware wird übertragen. Danach wird sie auf dem RoboRock installiert.

    Das dauert ca. 5-10min. Den Saugroboter währenddessen nicht ausschalten!

    Wenn der Roborock die Start-Melodie abspielt, weisst du das die Installation beendet ist.

Valetudo Webapp öffnen/ WLAN Einstellen, Roborock Steuern

Auf dem Xiaomi Saugroboter läuft jetzt die Firmware mit Root-Zugang, die Valetudo Web-App und Dummycloud.
Wenn dein Computer noch mit dem Roborock WLAN verbunden ist, kannst du im Browser die URL http://192.168.8.1 aufrufen.
Valetudo WEB App Benutzeroberfläche

  • Saugroboter mit deinem WLAN verbinden.
    In der Valetudo Web-App unter Settings -> WIFI -> WIFI Settings kannst du deinen WLAN Namen und Passwort eingeben.

    Nach dem Bestätigen des Button “Save new Wifi configuration”, startet der Saugroboter neu und verbindet sich mit deinem WLAN Netzwerk (das Roborock eigene WIFI verschwindet).
    Verbinde dein Computer mit dem zuvor eingestelltem WIFI und rufe die URL http://rockrobo/ auf.

  • Valetudo App startet nicht/ ist nicht erreichbar.
    Falls die Valetudo Web-App sich nicht im Browser öffnet, kann es sein das sie manuell gestartet werden muss.
    Verbinde dich dazu per SSH mit deinem Roborock Saugroboter.
    Dein Computer muss mit dem WIFI des Roborock verbunden sein.
    Führe folgenden Befehl im Terminal aus, um dich per SSH zu verbinden.
    Es sollte der selbe Computer/Raspberry Pi sein, auf dem du vorher den SSH Key erstellt hast, oder du kopierst den Public SSH Key auf einen anderen Rechner.

    ssh root@rockrobo

    Starte jetzt valetudo service.

    service valetudo start

Gib deine Stimme ab!

108 Likes
Upvote Downvote

Total votes: 101

Upvotes: 101

Upvotes percentage: 100.000000%

Downvotes: 0

Downvotes percentage: 0.000000%

Geschrieben von Ben

#Blogger #Designer #RaspeberryFan #Self-Employed #Developer #Javascript
TwitterGithubThingiverse

113 Kommentare

Kommentar verfassen
  1. Alter Artikel, neue Frage: funktioniert das inzwischen auch auf irgendeine Weise mit dem S7+? Eine Google-Suche hat mir nicht weiter geholfen…

    Gruß Reinhold

  2. Ich habe meinen Roborock letztes jahr schoneinmal erfolgreich geflasht, aber nun bekomme ich beim erstellen des Images immer folgenden Fehler:

    Decrypt soundfile ..
    Unpack soundfile ..
    tar (child): de1.pkg: Funktion open fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    Cleaning up
    ../dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh: 26: ../dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh: FW_DIR: parameter not set

    Ich habe die alte Sprachdatei genommen und auch neue. ICh weiß nicht mehr weiter. Hoffetnlich kann mir jemand helfen.

    • Ich habe das selbe Problem. Habe 3 drei verschiedene Linux Systeme ausprobiert. Raspberry und über Windows Laptop. Immer die selbe Fehlermeldung. Ich habe auch verschiedene Sprachpakete (englisch und deutsch) ausprobiert.

      Gibt es mittlerweile schon eine Lösung? Ich kann im Netz nix finden.

      Gruß Reddyx

  3. Hallo Zusammen.
    Danke für die Anleitung. Genial erklärt und funktioniert wunderbar.
    Leider habe ich beim letzten mal keine Sicherung gemacht und nun ist der Link zur Sprachdatei tot. Kennt jemand eine alternative Downloadquelle?
    Freundliche Grüsse und danke für eure Hilfe

  4. Hallo zusammen, nachdem mein Roboter nicht mehr per WLAN erreichbar war, habe ich neu geflasht. Erst auf Werkseinstellungen und dann Valetudo RE drauf (0.9.5). Die nette Dame aus dem Gerät sagte mir auch, dass alles geklappt hat.
    Wenn ich nun auf 192.168.8.1 zugreifen möchte, wird die Verbindung abgelehnt. SSH-Zugriff habe ich, “service valetudo start” kann ich aber nicht ausführen, da “Unknown job: valetudo”.
    Reboot ist auch keine Hilfe.
    Was hat da nicht geklappt?

    Gruß

    • Ach ja, Nachtrag: Ich hatte zuerst Valetudo geflasht, da gefiel mir dann aber nicht, dass einige Features fehlen. Habe dann Valetudo RE versucht drüberzubügeln. Und jetzt darf ich nicht mehr drauf zugreifen…

      • Okay, habs. Anstatt service valetudo start habe ich valetudo start per SSH eingegeben. Klappt 🙂

  5. So, nach vielen weiterern Versuchen und Raspberry Neuintallation kam ich zu folgendem Ergebnis:
    Nach einer Neuinstallation des Raspberry ging der Befehl mirobo nicht mehr, der brachte eine Fehlermeldung. Er war für mich sehr hilfreich, da ich damit zum ersten mal eine Reaktion und Antwort aus dem Sauger, nämlich das Token bekommen habe:
    mirobo – -debug-discover – -ip 192.168.8.1 /* Liest den Token aus, der ändert sich nach jedem Restart des Saugers */

    Funktioniert hat es dann folgendermaßen:

    Rasperry PI neues Image installiert
    Wie oben beschreiben Software installiert, aber abweichend zu Flashen Punkt 4. “Installiere python-miio den Befehl “pip3 install python-miio==0.4.8” verwenden
    Wie beschrieben den Sauger per Wifi mit dem PI verbinden und mit “ping 192.168.8.1” schauen, ob er auch verbunden ist.
    Flashen und 🙂

    • Bei mir läuft der Flashvorgang nun (während ich hier schreibe), nachdem ich python-miio deinstalliert und in Version 0.4.8 neu installiert habe. (Vorher war 0.5.x drauf) Vielen Dank für diesen Hinweis!

      Ich habe außerdem freshas Hinweis zu Herzen genommen und den PI direkt neben den Staubsauger gelegt. Vorher waren es immer so 60cm Abstand. Auch Dir vielen Dank für den Hinweis.

      Ich bin mir nicht 100% sicher, was jetzt geholfen hat. Beim nächsten Mal probiere ich es nochmal mit mehr Abstand und/oder der höheren Version.

      ein paar Minuten später

      Oh er ist fertig uns spricht Deutsch mit mir 🙂

  6. Ich bin auch immer wieder beim Flashen hängengeblieben, hab aber dann eine Lösung gefunden. Anleitung aus der c’t 2019 Heft 12 S.174 “Cloudfrei saugen”
    1. ping war möglich: 192.168.8.1
    2. Ermitteln des Tokens:
    mirobo –debug-discover –ip 192.168.8.1 2>robo.sh
    In der Datei ist jetzt in e vorletzten Zeile das Token. Lösche das b’ am afang und dann das ‘ am Ende.
    3. Flashen
    mirobo –ip 192.168.8.1 –token update-firmware ~/rockrobo/firmware/.pkg

    Übrigens hab ich die Version der Firmware über die Xiaomi Home App rausgefunden. Ein Verbindungsversuch zeigte mir, dass die Firmware auf die Verision xxxx upgedated werden soll und die hab ich genommen.

    Viel Glück und ein Dank von mir an den Verfasser des Artikels!

    • Wenn ich deinen Befehl

      mirobo –debug -discover –ip 192.168.1.21 2>robo.sh

      verwende erhalte ich nur eine Fehlermeldung:

      Usage: mirobo [OPTIONS] COMMAND [ARGS]…
      Try “mirobo –help” for help.

      Error: No such command “–debug”.

      • Etwas spät, aber: mirobo – -debug discover – -handshake true
        Die “- – ” werden hier als — dargestellt 🙁

        Viele Grüße
        Hans

    • Servus Hans,

      das klappt bei mir leider nicht und endet in einen Fehler das er die Schalter -debug -discover nicht kennt

      Bin langsam echt am verzweifeln -.-

  7. Hallo, schonmal vielen Dank für die Anleitung.
    Ich hab nun schon mehrer Anläufe hinter mir und hänge immer wieder an der gleichen Stelle: beim flashen.

    Das ist der Output von

    python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -t […] -f output/v11_001810.fullos.pkg

    Flasher for Xiaomi Vacuum
    Address is not set. Trying to discover.
    Connecting to device 192.168.8.1…
    Got error when receiving: timed out

    error while checking device: No response from the device

    Hab dann noch mal ein Factory Reset wurde durchgeführt und Token (neu) ausgelesen.
    Die Firmware Version nach dem Factory-Reset ist unverändert geblieben (3.3.9_001866), nur der Token hat sich geändert.
    Das Ergebnis ist leider auch das gleiche – Got error when receiving: timed out.

    Hat jemand einen Rat? Eine Idee?

    • Mit einem Laptop oder PC?

      Laptop per LAN im eigenen Netz.
      Roborock per WLAN nach WLAN reset mit Laptop verbunden.

      Vor dem flash Vorgang Lankabel ausstecken.
      Dann klappt es.

      • Mit einem Raspberry Pi 4, auf dem Raspian ist. Und auf dem selben mit Openhabian (im ersten Versuch). Der Raspi war beim Flashversuch nicht mit dem LAN verbunden, nur mit dem WLAN des Robo. Ich hab’s im Prinzip so gemacht, wie du gesagt hast – nur mit nem Raspi…
        Ich könnte jetzt noch nach einem anderen Gerät suchen, mit dem ich es statt Raspi versuche…

    • Falls das Problem noch besteht, stell den Roby mal ganz nah an den Wlan Router ran, so nahe wie möglich. Die kleinen Helfer reagieren sehr sensibel auf schlechten Wlan empfang, vorallem beim flashen.

  8. Bei mir leider das gleiche Problem:

    python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_003468.fullos.pkg
    Flasher for Xiaomi Vacuum
    Address is not set. Trying to discover.
    Connecting to device 192.168.8.1…
    Sending handshake to get token
    Traceback (most recent call last):
    File “/home/pi/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py”, line 210, in
    main()
    File “/home/pi/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py”, line 151, in main
    m = vacuum.do_discover()
    AttributeError: ‘Vacuum’ object has no attribute ‘do_discover’

    • Sorry, der User fresha und Ansa ist die gleiche Person. Habe es nicht verstanden warum mein Kommentar nicht gezeigt wurde, daher mehrere Versuche mit unterschiedlichen Namen.
      Eine Lösung zu dem Problem mit dem flashen konnte ich selbst finden, siehe Antwort zu Denis.

  9. AttributeError: ‚Vaccum‘ object has no attribute ‚do_discover‘

    Habe auch das gleiche Problem.
    Mein Robo war bereits gerootet, aber hat sich anscheinend selbst mit einer Firmware geupdatet, der sprach auf einmal chinesisch und war nicht mehr mit der bekannten IP erreichbar.
    Jetzt wollte ich den neu rooten, aber komme nicht weiter beim flashen.

    • Bei mir das Gleiche bei meinem Gen 1- schon das zweite Mal in größeren Abständen: Plötzlich redet er chinesisch und hat sich wieder auf den alten Stand resetet.
      Muss mal schauen, ob ich ihn wieder flaschen kann, aber ich vermute, dass da noch was drin hängt, was ihn ständig zurücksetzt.

      Grüße

      • Der Fehler ist bekannt, es gibt aber noch keine Lösung:
        https://github.com/Hypfer/Valetudo/issues/206
        Nennt sich Random Reset Issue, die Firmware des Roborock “entdeckt” einen vermeintlichen Fehler und führt selbständig einen Factory Reset durch. Es gibt verschiedene Ansätze das Problem zu beheben, eine dauerhafte Lösung hat bisher noch niemand gefunden. Es gelingt nur, die Zeitabstände zwischen den Resets zu vergrößern.

        Viele Grüße

  10. Hi,

    vielen Dank für die Anleitung.
    Leider habe ich ein Problem beim übertragen der Firmware / Flashen.
    Ich bekomme immer folgende meldung:
    AttributeError: ‘Vaccum’ object has no attribute ‘do_discover’
    Ich habe es mit einem Raspberry Pi direkt und einer Virtuellen Maschine versucht,
    das ergebnis ist immer das Gleiche.

    Ich habe einen V1, leider weis ich nicht ob Gen1 oder Gen2.
    Verwendet habe ich die Firmware v11_003468.fullos.pkg.

    Kennst du / Ihr das problem bzw. habt eine Idee woran es liegen könnte.

    Vielen Dank im Voraus.
    Grüße.

    • Welche Firmware ist aktuell bereits schon installiert? Bei den neueren Version (Gen1 > 4xxx, Gen2 > 2xxx) wurde das lokale Firmwareaufspielen unterbunden. Hier hilft ein Factory Reset des Robotors, dabei wird er auf eine alte Firmware zurückgesetzt, mit der das flashen wieder funktioniert!

    • Dieses Problem hatte ich auch vor kurzem beim flashen.

      Mein Robo war bereits gerootet und lief bis jetzt problemlos, bis der auf einmal chinesisch quasselte und ich per IP nicht mehr auf Webanwendung von Valetude kam.
      Also versucht neu zu flashen und immer wieder Abbruch mit dieser Fehlermeldung.

      [AttributeError: ‚Vaccum‘ object has no attribute ‚do_discover‘]

      Diese ganze Prozedur, per Anleitung die Installation auf dem Raspberry durchführen, habe ich 3 mal gemacht und immer wieder brach das flashen mit der Meldung ab.

      Wie ich heraus bekam, hat der Raspberry ein Problem mit dem auslesen des Tokens vom Robo.
      Also habe ich den Token vom Robo ausgelesen und den Flash mit den Token als Zusatz gestartet und es klappte.

      Beispiel:
      python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -t [der ausgelesene Token] -f output/v11_001810.fullos.pkg

      Vorteil ist auch dabei, man muss den Raspberry nicht mehr per Wlan mit den Robo verbinden. Man lässt den Robo mit dem Router verbunden und kann den Raspberry auch weiterhin per Putty bedienen, es wird kein zusätzlicher Monitor benötigt für den RPI.

  11. Also ich muss mich nochmal korrigieren, ich habe einen Xiaomi Mi Vaccumcleaner v1. Geht der überhaupt? Hab ich da ein falsches Paket?

    • socket.timeout: timed out
      spricht dafür, dass die Verbindung über die VM nicht funktioniert.

      ja, geht mit dem mi vacuum v1!

      • Also doch mit dem Pi machen. Da muss ich nur das Versionsproblem vom Python hinkriegen. Evtl. sollte ich den mal platt machen und ne grafische Oberfläche drauf machen, damit auch die WLAN Verbindung zum Sauger zustande kommt.

  12. Hallo,
    auch von mir vielen Dank für die tolle Anleitung.

    Obwohl ich die Firmware mit dieser Option –disable-firmware-updates
    gemacht habe, ist der Roboter alle ca. 1-2 Monate plötzlich wieder auf
    Englisch eingestellt und hat die falsche FW.

    Wie kann man das dauerhaft verhindern?

    Besten Dank im Voraus
    Viele Grüße
    Thomas

    • Aktuell gar nicht, ist ein Bug, für den es noch keine Lösung gibt und der mit vielen gerooteten und mit Valetudo modifizierten Robotern passiert: Das System vermutet einen Fehler im Dateisystem und führt dann ein Firmwarerollback/FactoryReset durch (es gibt eine versteckte alte originale XiaomiRobot-Software die dabei zurückgespielt wird, die gleiche, auf die auch bei einem FactoryReset zugegriffen wird). Der Grund hierfür ist bisher noch nicht gefunden… gibt auf Github auch einen Issue dazu, wer genaueres wissen möchte: https://github.com/Hypfer/Valetudo/issues/206

  13. Ich nochmal,
    mit dem pi habe ich es leider noch nicht hinbekommen, habe da aber auch keien Desktop Version vom System her drauf.
    Geht es denn überhaupt mit dem Roborock 1. Generation?
    Über eine VM mit Debian komme ich bis zum letzten Schritt, dem Upload auf den Sauger, Verbindung stelle ich über IP und Token zum Sauger her, das sollte ja mit den zusätzlichen Befehlen -a “IP” -t “Token” auch klappen, aber dann kommt ein Fehler.
    Liegt es an der Verbindung, oder was könnte es noch sein, ich verzweifle langsam.
    Bitte helft mir :-/

    • ohne Fehlermeldung schwer zu beurteilen woran es liegt, bei einer VM fällt der Verdacht natürlich immer zuerst auf den “durchgebrückten” Ethernetcontroller, eine dediziertes Linux System (muss ja nicht unbedingt auf dem Pi laufen, die Desktopversion ist auch nicht notwendig) ist da immer der bessere Weg.
      Und ja: geht auch mit dem Gen1 (Xiaomi Mi Robot Vacuum)!

      • Ich versuche dann mal die Meldung aus der VM zu kopieren.
        Beim Pi hängt es daran dass die Python3 Version zu alt ist und diese bekomm ich nicht geupdatet 🙁

      • Das ist die Fehlermeldung die kommt:

        Ota started!
        Got error when receiving: timed out
        Traceback (most recent call last):
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 272, in send
        data, addr = s.recvfrom(1024)
        socket.timeout: timed out

        During handling of the above exception, another exception occurred:

        Traceback (most recent call last):
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 272, in send
        data, addr = s.recvfrom(1024)
        socket.timeout: timed out

        During handling of the above exception, another exception occurred:

        Traceback (most recent call last):
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 272, in send
        data, addr = s.recvfrom(1024)
        socket.timeout: timed out

        During handling of the above exception, another exception occurred:

        Traceback (most recent call last):
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 272, in send
        data, addr = s.recvfrom(1024)
        socket.timeout: timed out

        The above exception was the direct cause of the following exception:

        Traceback (most recent call last):
        File “/root/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py”, line 210, in
        main()
        File “/root/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py”, line 198, in main
        ota_progress = vacuum.send(‘miIO.get_ota_progress’)[0]
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 310, in send
        return self.send(command, parameters, retry_count – 1)
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 310, in send
        return self.send(command, parameters, retry_count – 1)
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 310, in send
        return self.send(command, parameters, retry_count – 1)
        File “/usr/local/lib/python3.7/dist-packages/miio/device.py”, line 313, in send
        raise DeviceException(“No response from the device”) from ex
        miio.exceptions.DeviceException: No response from the device

        Weiß jemand wo das Problem ist?

    • Wifi auf dem Roboter zurück setzen (die beiden Knöpfe gleichzeitig für ~10sec gedrückt halten), danach auf dem Pi das Wlan des roborock suchen und verbinden (Pi braucht natürlich einen Wlan Empfänger oder integriertes Wlan bei den neueren Pi-Modellen)

  14. Hi zusammen,

    habe den S1 von einem Kumpel aus China bekommen. Leider habe ich nirgends Infos gefunden, ob dieser auch mit Valetudo funktioniert, hat das schonmal jemand versucht.

  15. Hallo,
    Erstmal vielen Dank für die Mühe dieses Tutorial verfügbar zu machen.
    Ich habe nun das zweite mal meinen s50 versucht eine Custom Firmware zu verpassen. Das erste mal mit der FM 1780, danach mit der 1818. Beides mal kann ich direkt nach dem flashen auf dem RobWLAN die Valetudo Oberfläche starten und die SSID mit PW setzen. Danach habe ich keinen Kontakt. SSH kann ich nicht loggen um den Dienst zu starten.Ich habe auch den Roboter dazwischen reseted damit er die inital Firmware zieht. Dennoch kein Kontakt nach dem zuordnen des Wlan. Kennt dies jemand und kann mir helfen ?

    GrußTimmy

    • Du verwendest nach dem Setzen von SSID + Passwort auch die neue IP des Roboters, welche er von deinem Router erhält? Ist er im Router als angemeldetes WLAN Gerät sichtbar? Nach dem Flashen bist du ja noch über den AP des Roboters verbunden (192.168.8.x) und wenn da alles geht, ist beim Flashen schon mal nichts schief gelaufen.

      Ansonsten kann es Probleme mit Sonderzeichen im SSID Name geben (“” oder “/”) oder falls du ein sehr langes Passwort vergeben hast.

      Aber wichtig wäre erstmal die Frage, ob der Roboter sich nach deinen Eingaben überhaupt in deinem WLAN anmeldet.

      • Hallo,

        Der Roboter meldet sich in meinem Gäste Wlan an, allerdings ist mir aufgefallen, dass er nach einer Zeit sich wieder abmeldet. Er hat definitiv eine IP vom Router erhalten, aber aus irgendeinem Grund ist er nach einer Zeit offline.

      • Und du bist mit deinem Rechner auch im Gäste WLAN? Die Geräte im Gäste WLAN dürfen auch untereinander kommunizieren? Versuch es doch einfach einmal mit deinem normalen WLAN, um diese Stolperfallen schon zu vermeiden…

      • Hallo,

        Ich habe jetzt einen anderen Router verwendet, auf ihm kann ich die Valetudo Oberfläche starten. Per SSH kann ich auch den Dienst neu starten. Anscheinend lag es an dem Gäste wLan.

  16. Hallo,
    ich habe dieses in naher Zukunft auch vor, wenn mein Kumpel mein Rasbery Pi eingerichtet hat 🙂
    Vorab noch eine Farge: Kann man dann die Robbi auch noch über Alexa ansteuern? Wenn ja, was muß ich beachten.
    PS: ich habe nicht sooo viel Ahnung 😉

    Dankend
    Minimichy

    • Hi RaKa,
      ja, ich nutze diesen Fork und bin sehr zufrieden, gerade das separate Auswählen, welche Zone zu reinigen sind, ist sehr praktisch. Hier gibt’s die WebGui dann auch in Deutsch. Der Entwickler reagiert auch sehr schnell auf Bug-Reports. Praktisch sind auch die Statusmeldungen per Telegram, oder sogar das Starten des Reinigungsvorgangs aus der Ferne über Telegram.

      Installation auf einem bereits gerooteten und mit Valetudo ausgestatteten Robot ist recht simpel.

      Entweder man durchläuft oben die Anleitung und ersetzt die vier Dateien “valetudo” (Schritt 6), “valetudo.conf” (Schritt 8), “hosts” (Schritt 9) und “rc.local” (Schritt 9) aus dem Valetudo RE Repo und baut sich damit die Firmware zum anschließenden flashen zusammen. An die “valetudo” kommt man am einfachsten, wenn man vom aktuellsten Release (https://github.com/rand256/valetudo/releases) die valetudo.tar.gz lädt und anschließend entpackt

      tar zxf valetudo.tar.gz

      Oder ohne komplettes Neu-Flashen:
      Valetudo auf dem Robot stoppen:

      root@rockrobo:~# service valetudo stop

      Dann zwei der vier Dateien in die entsprechenden Ordner (per scp, WinSCP, o.ä) auf den Roboter kopieren/die bestehenden überschreiben. Die hosts und die rc.local Datei sind identisch zum (bestehenden) Valetudo und müssen daher nicht separat kopiert werden:
      valetudo -> /usr/local/bin
      valetudo.conf -> /etc/init

      Danach ein reboot und der Roboter läuft mit Valetudo RE.
      root@rockrobo:~# reboot

      Viel Spass.

      • Hi,

        Ich nehme an der Fork läuft nur auf einem der neueren Robotern und nicht auf der Gen1 oder?

      • Sicher läuft das auf einem Gen1, ist ja das klassische Valetudo nur weiterentwickelt. Bei mir läuft das auf Gen1 mit v11_003468.fullos.pkg Firmware.

        Netter Trick am Rand:
        Der Gen1 “verliert” ja eigentlich nach jedem Saugvorgang die Karte und man kann ihn so nicht in bestimmte vorher konfigurierte Zonen/Räume schicken. Nutzt man aber (nach einmalig initial komplett erstellter Karte) nur noch die Zonenreinigung, kann man ihn bequem auch immer wieder in bestimmte Zimmer schicken. Für die Komplettreinigung baut man sich eine “komplette Wohnung Zone” 😉

        Man darf nur mit “Start” keinen kompletten Reinigungsvorgang starten, weil dann die Karte neu aufgebaut wird und sich die Koordinaten ändern. Ich steuere meinen Gen1 aktuell nur noch über die Zonenreinigung!

      • @Ben:
        Irgend etwas ist wohl bei der Formatierung meiner Antwort schief gelaufen – kannst du das korrigieren? Danke 😉

      • danke für die Antwort!

        Ja das mit dem nur Zonenreinigen ist mir bekannt 🙂
        Ich habe mir aber eine Funktion in FHEM gebaut, mit der ich eine “Masterkarte” immer wieder reinladen kann, wenn zb mal eine Tür zu war oder Ähnliches.
        Wie du verwende ich auch nur die Zonenreinigung.

  17. Hi

    Ich habe alles so gemacht, wie beschrieben, jedoch redet mein Gen1 immer wieder Chinesisch, habe es mit de.pkg und english.pkg versucht. Verwende firmware v11_003468.fullos

    irgendwelche Ideen ?

  18. Hi, falls noch jemand über eine “falsch eingestellte” Zeit auf dem Mi stolpert (und somit die Timer und auch die DND Zeit nicht richtig funktionieren):
    Ich hatte nun hier einen Gen1 aus Singapur bei dem ich zwar über die Valetudo Settings die Zeitzone auf Europe/Berlin gestellt, das aber vom Robot nicht übernommen wurde.
    Es gibt zwei Lösungsmöglichkeiten:

    1.
    Für den imagebuilder.sh gibt es einen weiteren Parameter (im 2. Schritt bei Firmware “patchen” und Image erstellen):
    -t, –timezone Timezone to be used in vacuum

    Damit kann man also direkt bei der Erstellung der Firmware schon die richtige Zeitzone mit übergeben
    –timezone=Europe/Berlin
    (nicht von mir getestet!).

    2.
    Alternativ kann man über die ssh Verbindung auf dem Robot
    dpkg-reconfigure tzdata
    ausführen, dadurch wird das Standard-Ubuntu Zeitzoneneinstellungsmenü geöffnet und man kann so die korrekte Zeitzone setzen. Die reine Anpassung von /mnt/default/roborock.conf hat bei mir nämlich nicht gereicht (in der Dateien stehen die Werte/Parameter welche man in Valetudo unter Settings/Info sieht und die der Robot wohl auch beim booten einliest).

    Prüfen kann man die aktuelle Zeit mittels
    root@rockrobo:~# date
    Tue Jan 7 18:01:17 CET 2020

  19. Hallo
    Grundsätzlich mal danke super Programm.
    Funktioniert bis auf folgendes Problem.
    Habe einen S50 und habe die Firmware „3.3.9_001856“ geflasht.
    In den letzten 3. Monaten ist mir der S50 zweimal abstürzt.
    1. Er spricht auf einmal wieder Englisch.
    2. Das Webinterface ist nicht mehr erreichbar.

    Das einzige was hilft ist Firmware Neu flashen.
    Kennt jemand das Problem.
    Gruß
    Wolfgang

  20. Also wer Probleme hat das die Dateiübertragung abbricht sollte einen anderen Wlan dongle/stick ausprobieren. Mit nem DLink war es erfolglos mit dem Edimax ging es ohne probleme, die Verbindung ist scheinbar sehr empfindlich

  21. Hallo!

    die Anleitung ist total cool und es funktioniert – DANKE!

    Grundsätzlich habe ich noch ein paar Fragen:
    1) ist es möglich dass der Port von Valetudo geändert werden kann?
    2) Ich kann mich per ssh einlogen über die Konsole, jedoch nicht mit Remmina – warum?
    3) Kann man Valetudo auf deutsch umstellen?

    Danke!

    Liebe Grüße
    Gerald

    • Hallo Gerald,

      zu deinen Fragen:
      1. Welchen Port willst du wie und für was umstellen?
      2. Remmina ist ein Tool zur Anzeige einer grafischen Oberfläche (VNC, etc.). Auf dem Robot läuft aber nur eine reine Konsole, es gibt keine grafische Oberfläche, daher ist auch nur ssh möglich.
      3. Nein, es gibt nur die englische GUI von diesem Entwickler
      Grüße

  22. Habe mir den S55 gerade gekauft…

    Weder mein Windows 10 Notebook noch mein Raspberrypi können sich mit dem Roborock Wifi AP verbinden. Mein Smartphone jedoch stellt die Verbindung problemlos her. Hat die Firma eventuell einen MAC Filter eingebaut?. (Habe den Roboter extra direkt neben den Raspberry bzw. Notebook gestellt, so dass die Funkstrecke klein genug sein sollte).

    • ich habe momentan das selbe Problem bei einer Neuinstallation. Vor drei Tagen habe ich es irgendwie geschafft, weiß aber nicht wie…

      Wäre auch für Hilfe dankbar.

    • hallo,

      gestern hatte ich das selbe Problem mit ne V1.
      Heute morgen habe ich beides neu gestartet und es hat einfach funktioniert.
      Habe die WLAN-SSSID in wpa_supplicant.conf eingetragen mit key_mgmt=NONE.
      Danach einfach beides neustarten.
      Vielleicht hilfts dir weiter.

  23. Super Anleitung habe es bei meinem Gen 1 mit Valetudo 0.3.1 und der Firmware 3.3.9 003452 erfolgreich geschafft.
    Nun meine Frage. Wie kann ich nun auf Valetudo 0.4 und eine aktuelle Firmware upgraden … muss ich das Szenario nochmal durchspielen ?

    Danke nochmal ! Super !

  24. Schöne Anleitung.
    Bei Image bauen bekomme ich die Ausgabe:


    Trying to patch rrlogd
    /home/pi/rockrobo/image/fw.AFsncR /home/pi/rockrobo/image
    Patch has failed
    /home/pi/rockrobo/image
    install: der Aufruf von stat für '/home/pi/rockrobo/image/fw.AFsncR/rrlogd_patch' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
    Successfully patched rrlogd

    Ist das Patch has failed OK?

    Bei installieren von python-miio kommt:

    python-miio requires Python '>=3.6' but the running Python is 3.5.3

    Die 3.5.3 ist aber bei Raspian die aktuelle Version.

    Mit welche Python Version hast du gearbeitet?

  25. Hallo,

    und besten Dank für die Super Anleitung. ichhabe alles auch einem Linux MINT nachgekocht. Das Optional habe ich aus gelassen. bin auch beim
    “pip3 install python-miio”
    hängen geblieben. Die Fehlermeldung war allerdings:

    Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-veexgkmv/cryptography/

    das selbe dann nochmal mit der optionalen (virtuellen) variante, brachte den selben Fehler.

    was tun?
    Und dann vielleicht noch. Ich habe den S50 und habe daher die Firmware 3.3.9_001856 runtergeladen. Ist doch richtig oder. Und wo ich schon soviel frage. Ist doch richtig das der Roborock bei einem Hardware reset dann wieder im Originalzustand ist oder?

    Vielen dank schon mal

  26. Hallo Ben, *
    vielen Dank für dieses Tutorial sowie die Kommentare!!

    Ich betreibe meine PI’s Headless im LAN, habe jetzt aber Tastatur/Maus und Fernseher als Notlösung an einen RASP 4 angeschlossen. ein ping auf 192.168.8.1 zeigte mir eine existierende Verbindung.
    +++++++
    Zunächst erhielt ich beim Flashen die Meldung:


    flasher.py -f output/v11_003452.pkg
    Flasher for Xiaomi Vacuum
    Address is not set. Trying to discover.
    No devices discovered.
    unquote.

    Es suggerierte mir, dass die IP Adresse nicht bekannt ist.
    Ich habe dann den Flashbefehl um ein “-a 192.168.8.1” ergänzt – und habe folgende Quittung erhalten:


    flasher.py -f output/v11_003452.pkg -a 192.168.8.1
    Flasher for Xiaomi Vacuum
    Connecting to device 192.168.8.1...
    Sending handshake to get token
    Starting local http server...
    Serving http server at 192.168.111.44:39819
    Sending ota command with parameters: {"mode": "normal", "install": "1", "app_url": "http://192.168.111.44:39819/v11_003452.pkg", "file_md5": "edea143d334907c3facaf9b2f6a81f83", "proc": "dnld install"}
    Ota started!
    Firmware downloaded successfully.
    Exiting.

    Alles schien gut aber der befreiende Klingelton nach erfolgter Initialisierung will sich nicht einstellen.

    Ich bin ratlos -hat jemand vielleicht eine Idee?
    Danke

    • Hallo Peter,

      das selbe Problem trat bei mir auch auf. Ich hatte mich per LAN mit dem Raspberry verbunden und über SSH bedient, der Raspberry war per WLAN mit dem Roborock verbunden. Nachdem ich die LAN-Verbindung getrennt habe (Stecker im Raspberry gezogen) und mich mit meinem Computer über das WLAN des Roborock mit dem Raspberry verbunden habe, funktionierten auch beide von dir angesprochenen Befehle ohne Probleme. Die Eingabe der IP-Adresse des Roborock beim Flashprozess war also nicht mehr erforderlich.

      • Hallo Marc,
        vielen Dank für den Kommentar. Umständehalber kann ich das erst in 1-2 Wochen verifizieren.
        Ich war zum Zeitpunkt der Quittungsmeldung mit dem Netzwerk (LAN) verbunden.
        Gestartet hatte ich es allerdings direkt über die angeschlossene Tastatur. Möglicherweise reicht ja schon eine bereits vorhandene LAN-Verbindung zu dieser Irritation. Ich melde mich. Danke nochmals.
        Peter

      • Hallo Marc, Ben,
        tatsächlich, das war es. Alleine schon der Anschluss an das LAN reichte aus, um das Installieren zu verhindern.
        Ich wollte natürlich mit copy/paste arbeiten und hatte daher die Anleitung im Browser offen.
        Nochmals vielen Dank für den erfolgreichen Kommentar und
        ebenfalls nochmals Dank für diese gute Anleitung.
        Grüße von der Waterkant
        Peter

      • danke – das hat auch bei mir das Flashen gestartet. LAN ausstecken, sich per WLAN verbinden und zack es ging.

        Danke!

  27. Noch eine Wichtige Info!
    Nachdem von 192.168.8.1 auf euren WLAN gewechselt seid, kann es sein das die Valetudo Oberfläche Fehler anzeigt bzw. die Werte nicht lädt.

    Folgender Workaround hat mir geholfen
    Logt euch in euren RassspberryPI ein mi folgenden Befehl verbindet ihr euchg auf euren Roborock ssh root@192.168.8.1 sobald ihr drauf seid folgenden Befehl ausführen

    service valetudo restart

    danach lief Valetudo (0.4) problemlos unter neuer IP

    @Ben kannst du evtl meine Beiträge zusammenfassen?

    • Habe das selbe Problem und wollte deinen Lösungsvorschlag verwenden. Beim einloggen per SSH verlangt er jedoch ein Passwort, dass ich ja nicht habe. Sollte er sich nicht mit dem SSH-Key authentifizieren?

  28. Viele Probleme lassen sich vermeiden (siehe mein vorheriges Beitrag) wenn ihr ein stärkeres oder originales Raspberry PI Netzteil benutzt, beim Debuggen (wieso Firmwareupload öfters abbricht) habe ist festgestellt Unregelmäßigkeiten im Firmwareupload (Abbruch mal bei 60% mal 30% mal nicht erreichbar etc.) und enorme Ping Schwankungen, dieser Sachverhalt brachte mich auf die Idee, das es an der Unterversorgung des W-Lans Moduls liegen kann und so war es! Nachdem ich ein Originales Netzteil (2A) benutzt habe lief die hier ebschrieben Setup Routine ohne Probleme!

    @Frosti

    gib mal den Folgenden Befehl als ganzes ein (weil ich den selben Fehler hier mit dem Copy Button hatte, so hatte ich dadurch einen Umbruch)

    sudo apt-get install -y python3 python3-pip python3-venv python3-dev libffi-dev libssl-dev

    • Hi Viktor!
      Danke für deinen Tipp, leider liegt es nicht daran, die Pakete sind alle installiert, s.u.

      Ich versuche die Anleitung übrigens auf einem PC mit Linux Mint (18.3 64bit was Ubuntu 16.04 entspricht) umzusetzen.
      Auch habe ich schon versucht dieses netifaces separat zu installieren.

      Paketlisten werden gelesen… Fertig
      Abhängigkeitsbaum wird aufgebaut.
      Statusinformationen werden eingelesen…. Fertig
      libffi-dev ist schon die neueste Version (3.2.1-4).
      python3 ist schon die neueste Version (3.5.1-3).
      python3-dev ist schon die neueste Version (3.5.1-3).
      python3-venv ist schon die neueste Version (3.5.1-3).
      libssl-dev ist schon die neueste Version (1.0.2g-1ubuntu4.15).
      python3-pip ist schon die neueste Version (8.1.1-2ubuntu0.4).
      0 aktualisiert, 0 neu installiert, 0 zu entfernen und 72 nicht aktualisiert.

      • Hi Forsti, konnte bei mir auch alles unter Mint durchführen, daran kann es nicht liegen. Hast du es mal mit dem (optionalen) zweiten Schritt versucht, der virtuellen Python-Umgebung? Dabei werden die Abhängigkeiten ja in der venv-Umgebung separat installiert, vielleicht kannst du so dein Problem “umgehen”?

      • Hi Lars!

        Ja, das habe ich auch schon probiert, half aber leider nichts.

        Wie dem auch sei, ich habs aufgegeben, aber das Rooting jetzt über einen alten Rpi 1 B mit Raspbian probiert und das klappte völlig problemlos.
        Ferner konnte ich den rockrobo Ordner direkt auf den Raspberry kopieren, d.h. ich musste nicht alles doppelt machen sondern nur noch flashen.

        Habe jetzt “Mr.Robot” gerootet, Valetudo drauf und das geniale Programm von Thomas Löwe (Roborock Control Center) tut auch!
        Bin somit zufrieden 🙂

        Danke @Ben für das ausführliche Tutorial 🙂

  29. Bei mir funktioniert es leider nicht.
    Der Fehler tritt auch bei einigen anderen auf wenn ich die Kommentare so durchlese.

    Ich habe ein Problem bei dem Befehl:

    pip3 install python-miio

    Es wird nicht installiert, erster Fehler ist:


    Building wheels for collected packages: netifaces
    Building wheel for netifaces (setup.py) ... error
    ERROR: Command errored out with exit status 1:

    Kann jmd. helfen ?

  30. Hallo Ben, vielen Dank für dein Anleitung, der Weg war beschwerlich und ich will hier einigen mit paar Hinweisen helfen.

    Bei Problemen mit:


    Flasher for Xiaomi Vacuum
    rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 210, in
    main()
    File "/home/pi/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 188, in main
    r = vacuum.send('miIO.ota', ota_params)
    File "/home/pi/.local/lib/python3.7/site-packages/miio/device.py", line 278, in send
    self.__id = m.data.value["id"]
    TypeError: 'NoneType' object is not subscriptable

    Problem liegt daran, dass Ihr die 3.3.5 Firmware auf eurem Roboter habt (hier Spreche ich von der Gen1) Ihr müsst euren Roboter Hard-Reseten

    Roboter vom Dock entfernen
    Haus-Taste drücken und gedrückt halten
    Resetknopf unterhalb der Wartungsklappe mit Kugelschreiber, Büroklammer etc. kurzzeitig drücken, anschließend los lassen
    Haus-Taste gedrückt halten, bis Sprachhinweis zum Zurücksetzen in den Werkszustand erfolgt (Merkt ihr an anderer Soundausgabe)
    Haus-Taste los lassen
    Roboter nicht bedienen und auf Erfolgsmeldung durch Sprachhinweis warten

    Im Falle von


    Taceback (most recent call last):
    File "/home/pi/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 210, in
    main()
    File "/home/pi/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 198, in main
    ota_progress = vacuum.send('miIO.get_ota_progress')[0]
    File "/home/pi/.local/lib/python3.7/site-packages/miio/device.py", line 310, in send
    return self.send(command, parameters, retry_count - 1)
    File "/home/pi/.local/lib/python3.7/site-packages/miio/device.py", line 310, in send
    return self.send(command, parameters, retry_count - 1)
    File "/home/pi/.local/lib/python3.7/site-packages/miio/device.py", line 310, in send
    return self.send(command, parameters, retry_count - 1)
    File "/home/pi/.local/lib/python3.7/site-packages/miio/device.py", line 313, in send
    raise DeviceException("No response from the device") from ex
    miio.exceptions.DeviceException: No response from the device

    WiFi von Roborock reseten (resetknopf) bis neustart drücken euren Raspberry ebenfalls reseten!.

    Flashvorgang wurde mit der offenen Klappe von Roborock durchgeführt!!!

    Falls Ihr Rasbian Lite (Version ohne Desktop benutzt) könnt ihr über LAN flashen
    unter sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
    Trägt ihr die WLAN SSID von euren Roborock

    Mit

    python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -a 192.168.8.1 -f output/v11_003468.fullos.pkg

    (hier die richtige OS Version angeben) könnt Ihr direkt die IP Adresse des Roborock ansprechen

  31. Hallo,
    deine Anleitung ist echt toll.

    Ich hab alle Schritte durchgeführt und das gepatchte Image
    erstellt.
    Aber wenn ich versuche, es zu flashen, kommt es nach einiger Zeit zu folgender Fehlermeldung:


    tsgebert@ubuntusrv:~/rockrobo/image$ ~/flashit
    Flasher for Xiaomi Vacuum
    Address is not set. Trying to discover.
    Connecting to device 192.168.8.1...
    Sending handshake to get token
    Starting local http server...
    Serving http server at 192.168.8.9:46805
    Sending ota command with parameters: {"mode": "normal", "install": "1", "app_url": "http://192.168.8.9:46805/v11_003468.fullos.pkg", "file_md5": "3fceb0af59b5cfe6eed9945a4262d1c7", "proc": "dnld install"}
    Ota started!
    192.168.8.1 - - [20/Oct/2019 18:42:56] "GET /v11_003468.fullos.pkg HTTP/1.1" 200 -
    Unable to discover a device at address 192.168.8.1-----------| 5.0%
    Traceback (most recent call last):
    File "/home/tsgebert/.local/lib/python3.6/site-packages/miio/device.py", line 259, in send
    data, addr = s.recvfrom(1024)
    socket.timeout: timed out

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/home/tsgebert/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 210, in
    main()
    File "/home/tsgebert/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py", line 198, in main
    ota_progress = vacuum.send('miIO.get_ota_progress')[0]
    File "/home/tsgebert/.local/lib/python3.6/site-packages/miio/device.py", line 290, in send
    return self.send(command, parameters, retry_count - 1)
    File "/home/tsgebert/.local/lib/python3.6/site-packages/miio/device.py", line 224, in send
    self.do_discover()
    File "/home/tsgebert/.local/lib/python3.6/site-packages/miio/device.py", line 162, in do_discover
    raise DeviceException("Unable to discover the device %s" % self.ip)
    miio.exceptions.DeviceException: Unable to discover the device 192.168.8.1

    Irgendeine Idee, was da schief geht?
    Gruß
    Thomas

    • Hallo,
      war wohl ein Problem mit den Energieeinstellungen des Laptops.
      Am Strom hat jetzt alles geklappt. Tolle Anleitung!
      Hat super geklappt!!!

  32. Hallo Ben,

    habe alles nach deiner Anleitung ausgefürt und kann mich auch über das W-Lan des Roboters mit dem Robot verbinden.

    Wenn ich dort dann in die W-Lan Einstellungen gehen und versuche den Roboter mit meiner Fritz Box zu verbinden. Scahltet dieser kurz sein eigenes W-Lan ab und schaltet es nach ca. 1min wieder an und verbindet sich nicht mit der Fritz Box.

    Was könnte mein Porblem sein?

    • Ist das WLAN ein 2.4Ghz oder 5Ghz Funknetzwerk? Ich glaube der Roborock kann nur 2.4Ghz.
      Einen MAC Filter oder ähnliches hast du in der Fritzbox nicht aktiv oder?
      Habe selbst auch eine Fritzbox und es hat gut funktioniert.

  33. Hallo
    Vielen Dank für diese tolle Anleitung.
    Es hat super funktioniert.
    Was ich jetzt noch suche wo und wie kann ich die Einstellungen für meinen MQTT Server tätigen?
    Gruss
    Wolfgang

  34. Hallo Ben, tolle Anleitung, schön beschrieben, man kann alles sehr gut nachvollziehen.
    Ich bin auch am Ende gestolpert, beim Firmware flashen:
    Im zweiten Step erstellst du ja mit
    python3 -m venv .venv
    eine “virtuelle Python Umgebung” im Ordner “.venv”. Damit du in dieser jedoch arbeiten kannst, musst du sie erst mit folgendem Befehl aktivieren:
    source .venv/bin/activate
    Dieser Schritt fehlt in deiner Anleitung. Danach ändert sich auch der Shell-Prompt, es wird ein (.venv) vorangestellt! So erkennst du, dass du ab sofort in der virtuellen Umgebung arbeitest. Die nachfolgenden Schritte (3. und 4.) in dieser virtuellen Umgebung ausgeführt, sorgen dafür, dass die python-miio Pakete auch nur in der virtuellen Umgebung existieren. Und nicht global in deiner gesamten Python Installation.

    Deine Anleitung bzgl. des flasher.py Pfades hast du ja bereits angepasst, Schritt 7 wird also (ebenfalls in der virtuellen Umgebung) identisch ausgeführt und so weiß Python auch, welches Skript auszuführen ist.

    Am Ende wird die virtuelle Umgebung mit deactivate verlassen und alle installierten miio-Pakete verbleiben im .venv Ordner, können bei Bedarf wieder wie oben beschrieben als virtuelle Umgebung gestartet und genutzt werden.

    • Hi Lars,
      vielen Dank für die ausführliche Erklärung.
      Was denkst du ist es nicht einfacher die virtuelle Umgebung wegzulassen, um die Anleitung einfacher zu machen?

      • Hi Ben,
        im Prinzip kann man den Schritt mit der virtuellen Umgebung weglassen. Du hast dein Tutorial ja auch auf eine Clean-Raspbian Installation bezogen. Wenn man den Raspberry nur für das Durchführen des Rooten/Firmwareflashens nutzt, sind einem die sonstigen Systemabhängigkeiten ja eigentlich auch egal. Wenn man jetzt ein bestehendes Linux-System nutzt, kann jeder selbst entscheiden, ob er die Abhängigkeiten global, oder in einer virtuellen Umgebung installieren/durchführen möchte. Ich wollte nur kurz zum Verständnis erläutern, was es mit Schritt 2 des Firmware-Flashen-Teils auf sich hat, welcher dann übersprungen werden kann (die Anleitungen im Wiki von Valetudo/dustcloud enthalten ja ebenfalls beide den Weg über die virtuelle Umgebung).

      • Ich hab den Schritt als Optional gekennzeichnet und auf dein Kommentar verlinkt.
        Vielen Dank noch einmal. Hast du nicht Lust mal eine eigene Anleitung über etwas ähnliches zu schreiben?
        Es gibt auch etwas kleines dafür 🙂

  35. Danke für die Anleitung! Sehe ich es richtig, dass der Raspberry Pi nur einmal zur Einrichtung notwendig ist? Danach sollte der Rest im lokalen WLAN auch von jedem anderen Gerät aus möglich sein, oder?

    • Hallo,
      ja der Raspberry ist nur zum Rooten des Roborock. Du kannst auch einen PC/Laptop mit Linux Betriebssystem dafür verwenden.
      Wenn dann Valetudo auf dem Roborock Saugroboter läuft, kannst du im Lan/Wifi mit jedem anderen Gerät (iPad/iPhone/Table) darauf zugreifen.

  36. ich bekomme nach dem Verbinden mit dem WLAN und den Versuch zu flashen folgenden Fehler:
    python: can't open file 'flasher.py': [Errno 2] No such file or directory

    • Du befindest dich wahrscheinlich im falschen Ordner.
      Gib mal den Befehl pwd ein und poste die Ausgabe hier.
      Der Befehl gibt den aktuellen Ordner aus.
      Poste mal noch den Befehl bei dem der Fehler auftritt.

      • in welchem Ordner muss ich mich den befinden?


        pi@raspberrypi:~/rockrobo/image $ ls
        output ssh_host_ecdsa_key ssh_host_ed25519_key.pub
        ssh_host_dsa_key ssh_host_ecdsa_key.pub ssh_host_rsa_key
        ssh_host_dsa_key.pub ssh_host_ed25519_key ssh_host_rsa_key.pub
        pi@raspberrypi:~/rockrobo/image $ cd ~/rockrobo/image/output
        pi@raspberrypi:~/rockrobo/image/output $ ls
        v11_001720.fullos.md5 v11_001720.fullos.pkg
        pi@raspberrypi:~/rockrobo/image/output $ python flasher.py -f output/v11_001720.fullos.pkg
        python: can't open file 'flasher.py': [Errno 2] No such file or directory
        pi@raspberrypi:~/rockrobo/image/output $ cd ~/rockrobo/image/
        pi@raspberrypi:~/rockrobo/image $ python flasher.py -f output/v11_001720.fullos.pkg
        python: can't open file 'flasher.py': [Errno 2] No such file or directory
        pi@raspberrypi:~/rockrobo/image $

      • Hallo,
        du müßtest im ~/rockrobo Ordner sein.
        Wenn er die flasher.py nicht findet, dann hat was in den Schritten 1-4 nicht funktioniert.
        python-miio muss installiert sein in der Python Umgebung.

      • Hallo,
        ich hab das gleiche Problem.
        Klappt es jetzt bei dir?
        Ich hatte die Anmerkung von Reinhard berücksichtigt und pip3 bei der Installation von python-miio geschrieben, weil mir folgende Fehlermeldung angezeigt wurde:
        python-miio requires Python ‘>=3.5’ but the running Python is 2.7.16

        Nach erfolgreicher Installation bekomme ich jetzt beim flashen die gleiche Meldung wie Ben.

        Jemand einen Tipp was ich falsch gemacht haben könnte?

        Danke im Voraus 🙂

    • (Tolles Tutorial, danke!)

      Zu deinem Problem, wenn es dich/noch jemanden interessiert bin ich auf Ubuntu18 zu folgender Lösung gekommen:
      python3 ~/rockrobo/dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_001810.fullos.pkg

      ausgeführt in ~/roborock/images

      Dadurch wird python3 verwendet statt python2 (was auf Ubuntu auch vorinstalliert ist). Wichtig ist davor auch nicht “pip install wheel bzw. python-miio” sondern “pip3 install wheel bzw. python-miio” zu verwenden.

      Flasher.py ist bei mir auch nicht im Hauptordner und ich wüsste nicht wie es durch das Tutorial da hin käme, aber der Pfad oben stimmt zumindest aktuell.

    • Hi,
      bei mir gabs die Datei flasher.py auch nicht, habs nach der offiziellen Anleitung dann mit
      mirobo –ip 192.168.8.1 –token XXXXXXXXXXXXXXXX update-firmware image/output/v11_001748.fullos.pkg
      übertragen, damit gings 😉

  37. Hm, warum nicht einfach auf dem Router dem Staubsauger verbieten, auf Internet zuzugreifen?
    Bei mir (EdgeRouter und Roomba) sieht das so aus:


    rule 40 {
    action reject
    description "Roomba bleibt zu Hause!"
    log disable
    source {
    mac-address d0:c5:d3:bd:c4:f1
    }
    }

    Und Ruhe ist.

  38. Hallo.
    Ich schon wieder 🙂
    Ein Nchtrag: Das Kommando “pip install python-miio”
    wird mit dem Fehler quittieert dass mindestens die Python Version 3.x erforderlich ist.
    Mit “pip3 install python-miio” hat es dann geklappt.

  39. Hallo.
    Noch eine Frage zu Punkt 6. (Firmware flashen)
    “Verbind jetzt den Raspberry Pi mit dem WLAN des RoboRock.”
    Wie macht man das?
    Vielen Dank!

  40. Das läuft zumindest ohne Fehler durch.
    Aber:
    1. Fehlt dann nicht die Sprachausgabe?
    2. Ich hätte es gerne auf deutsch gestellt, gibts fertige Packages?
    3. Woher hast du dein englisch.pkg file?

    Vielen Dank!

  41. Hallo.
    Ich bekomme folgende Fehlermeldungen:


    Decrypt soundfile ..
    cp: cannot stat '/home/pi/rockrobo/firmware/english.pkg': No such file or directory
    ccrypt: /home/pi/rockrobo/image/fw.bRrjY1/sounds/english.pkg: No such file or directory
    Unpack soundfile ..
    /home/pi/rockrobo/image/fw.bRrjY1/sounds /home/pi/rockrobo/image
    tar (child): english.pkg: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2

    Scheinbar fehlt da ein soundfile (.pkg)

    Ich meine genau deiner Anleitung gefolgt zu sein.
    Hast du eine Idee, eine Antwort parat wo ich die Soundfiles (ev. deutsch) herbekomme?
    Vielen Dank!

    • Hallo,
      probier mal bei Firmware „patchen“ und Image erstellen Schritt 2 den Parameter --soundfile=../firmware/english.pkg wegzulassen.

      Also (Firmware Namen noch anpassen)


      sudo ../dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh
      --firmware=../firmware/v11_001810.fullos.pkg
      --public-key=$HOME/.ssh/id_rsa.pub
      --valetudo-path=../valetudo
      --disable-firmware-updates
      --ntpserver=fritz.box
      --rrlogd-patcher=../rrlogd-patcher/patcher.py
      --replace-adbd

One Ping

  1. Pingback:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.