I am not a fan of “smart” devices; they try to bring some upper class luxury to the middle class using technology. For example, vacuum cleaners: those who cannot afford a cleaning lady, can probably afford a robot vacuum cleaner that does some vacuuming for you. However, these devices come with the cost of privacy as everything it does do is sent back to the vendor. Is it possible to have both the privacy and cheap comfort?
Somewhere around 2020, I dived into the world of robot vacuum cleaners, because someone in the family was interested in buying one. On internet forums, several brands and types were discussed. Back then there was one clear winner: the Roborock S5 Max. Capable of vacuuming, mopping and able to create a map of your home using LIDAR technology. After buying such a vacuum cleaner, it did everything that it promised extremely well.
Now that I have moved to a larger single floor apartment, I was also in the market for a vacuum cleaner. So why not buy a robot cleaner as well? Without much research, I bought the exact same model, which worked like expected.
The vacuum cleaner does a great job at cleaning. Unfortunately, you need to install an app and be connected to the internet at all times to control it.
All the communications with the robot goes through the Roborock servers, which might become useful if you want to control your robot when you are away. For me, this rarely happens. The rest of the time, it takes a long time to connect to the robot, which is quite frustrating.
Is there a way to get around this data gathering, unstable and privacy violating ecosystem?
Back in 2020, I was not aware about some work going on to reverse engineer and modify those vacuum cleaners. Sören Beye, an engineer from Germany, created a “cloud replacement” named Valetudo1.
What it basically does, it redirects the requests that the robot sends to vendor, to a local service on the device instead. This makes it possible to control the robot within your local network without being dependent on some web service hosted abroad out of your control.
Valetudo supports a range of vacuum cleaners, but you need to gain root access to the robot first in order to install it. Root access makes it possible to run arbitrairy software.
In the past, there have been several ways to get root access to those Roborock vacuum cleaners. However, most of them have been patched by the vendor and everything is based on the connection with the cloud right now.
One of the rooting methods that still works is by tricking the motherboard into a low-level subroutine called FEL, which is intended for device recovery. It allows the device to boot any operating system from USB and bypassing the NAND memory. Dennis Giese, a PhD-student, created a service to build images that can root devices using the FEL-method2. These images basically boot up the board, enable SSH-access and some other configuration changes.
The hardest part is getting your vacuum cleaner into this FEL-method. In order to do so, you need to get access to the motherboard and connect a pin (TPA17) with the ground while booting it. This means that you basically need to tear it apart completely, which is not without risk. This video helped me a lot, but it will take you about an afternoon to screw it apart and together again.
Installing cloud replacement
Once you have rooted the device, the installing procedure of the cloud replacement is pretty straight forwarded. Valetudo is packed as one single binary containing everything, which you need to download to the internal storage (you might need to clear some logs to free up space, as the robot logs everything). After rebooting you can control the robot by browsing to its IP-address.
It is a great feeling that the device is mine now. I can do anything with it now and even talk to the API directly. Moreover, tearing the device apart and putting it together gives me the confidence to repair it myself, if that would be necessary. The spare parts of this vacuum cleaner are widely available.
Detailed instructions on how to root those devices and install valetudo can be found here.