Intro

Ich besitze jetzt schon seit etwas längerer Zeit einen Roborock S5, den ich mal gebraucht erstanden habe. Innerhalb dieses Zeitraums gab es schon allerlei Ups und Downs: maßgeblich für die “Downs” waren aber vorranging Ladefehler, genauer: “ERROR 13”. (Lässt sich beheben!1 2) Am schlimmsten daran war aber definitiv diese dämliche Fehlermeldung, die mein HAL9000 immer wieder abgespielt hat:

Error 13, charging error: Please clean charging contacts, and try again.

DIE KONTAKTE SIND IMMER SAUBER. Mehr Hygiene können Kontakte nicht haben. wOAHHH!!

Wäre doch toll, wenn man diese nervige Stimme einfach ersetzen könnte? Zja, das geht! Und in diesem Post geht es um das “wie”. Andere Anleitungen im Netz schildern da Möglichkeiten mit Voice-Packs, die man auf seinen original-Roboter spielen kann. Ich finde das zu kompliziert. (Wie erstelle ich die Dinger denn überhaupt?) Ich zeige hier den händischen Weg, über root und ssh.

I am root

Zuallererst braucht man Zugriff auf das Dateisystem seines Roboters. Wie? Naja, man muss seinen Staubsaugroboter rooten. Denn wer hätte es gedacht: Sogar auf den automatisierten Saug-Assistenten läuft – Trommelwirbel – Linux! Zwar in abgespeckter Form; Was aber niemanden, der auf etwas Mucke und Spucke zurückgreifen kann, abhalten sollte.

Wie also roote ich meinen Roboter? Die anschaulichste Methode ist dabei das Installieren von Valetudo.3 Dabei handelt es sich um ein FOSS-Projekt, welches die Verbindung zwischen den Xiaomi / Roborock-Servern in China und dem eigenen Roboter kappt, und die damit wegfallende Cloud durch ein eigenes Interface ersetzt. (So eine Art GrapheneOS für seinen Roborock.) Der root-Zugang dabei als fast nur eine Art “Nebeneffekt” ist in diesem Fall aber eben erwünscht. Ich verweise hierbei zur Installationsanleitung auf die Docs von Valetudo.

Verbindung Herstellen

Im Dustbuilder-Interface, welches einem eine entsprechende Firmware für den Roboter ausspuckt, wird nach SSH-Keys gefragt. Hier gibt man im Idealfall seinen eigenen public-key an, den man (falls noch nicht vorhanden: $ ssh-keygen) irgendwo in ~/.ssh findet.

Damit ist es nach der Installation des Images möglich, sich als root beim Roboter einzuloggen. Natürlich erst, nachdem man die IP des Robbis im eigenen LAN identifiziert hat:

$ ssh root@ip.deines.roboters

Und e voilà, schon ist man online.

Sound-Pack frisieren

Die Audiodateien findet man auf dem S5 unter:

/opt/rockrobo/resources/sounds

Abhängig davon, welches Pack gerade installiert war sind hier eben Ordner wie de oder en zu finden. Meine Empfehlung: sich die ganzen Dateien erstmal lokal auf seinen Rechner ziehen:

$ mkdir ~/roborock-sounds
$ scp root@ip.deines.roboters:/opt/rockrobo/resources/sounds/pack/* ~/roborock-sounds/.

pack muss hier im Pfad natürlich entsprechend ersetzt werden. (Obacht Arch-User: ggf. ist scp -O nötig, da der Roboter kein sftp unterstützt.)

Jetzt kann Mann/Frau/Divers damit anfangen, die Sounds nach den zu Ersetzenden zu durchsuchen. Etwas Inspiration findet man sicherlich auf myinstants.com. Beim Ersetzen ist darauf zu achten, dass die Dateien den selben Dateinamen haben und als .wav abgespeichert sind. Mit FFMPEG konvertiert es sich ganz simpel:

$ ffmpeg -i mein-sound.mp3 error13.wav

Ist man Zufrieden mit seinen Modifikationen, kann man sich wieder auf seinem Roboter einloggen und einen neuen Ordner erstellen:

$ ssh root@ip.deines.roboters
[robo]$ mkdir /opt/rockrobo/resources/sounds/custom

In den man, nun wieder in einer Konsole seines Rechners, das modifizierte Pack hochlädt:

$ scp ~/roborock-sounds/* root@ip.deines.roboters:/opt/rockrobo/resources/sounds/custom/.

Dabei ist unbedingt darauf zu achten, dass alle Sounddateien vorhanden sind; Nicht nur die hochladen, die man verändert hat.

Sound-Pack anwenden

Zuletzt muss man dem Roboter sagen, dass das neue Soundpack auch genutzt werden soll. Dafür sind folgende Schritte notwendig:

-> Schreibschutz der Konfiguration aufheben:

[robo]$ mount -o remount, rw /mnt/default

-> Konfiguration anpassen:

[robo]$ nano /mnt/default/roborock.conf

Hier nun den Wert von language=... auf language=custom abändern, oder eben den Namen eingeben, den der neue Ordner in /opt/rockrobo/resources/sounds hat.

-> Roboter neustarten:

[robo]$ reboot

Notwendig, damit eine geänderte Konfiguration angewendet wird.

??? Profit

Ab sofort sollte der Roboter entsprechend des frisierten Packs Töne von sich geben. Natürlich lässt sich das Ganze auch wieder zurücksetzen, indem man den Wert von language= in roborock.conf auf seinen ursprünglichen Wert zurücksetzt. Wichtig ist nur, dass der ursprüngliche Ordner in /opt/rockrobo/resources/sounds noch vorhanden ist. Enjoy!

Weiterlesen


  1. Roborock S5 Mainboard: Sicherungs-Tausch | Wird oft als Fehlerursache genannt, hat bei mir das Problem aber nicht gelöst. ↩︎

  2. Roborock S5 Ladestation: Kondensator-Tausch | Hat meinem Roboter alle Zicken ausgetrieben. Dafür musste ich das Gehäuse der Ladestation aber etwas “frisieren”. 😄 ↩︎

  3. Saugroboter-Cloud-Mockup: Valetudo ↩︎