The thing that finally pushed me to root a vacuum was reading its privacy policy. My old robot mapped every room in my house, tagged the furniture, took low-angle photos for “obstacle avoidance,” and shipped all of it to a server on another continent so I could press a start button in an app. I was paying a company to build a floor plan of my home and store it somewhere I would never see. The vacuum worked fine. That was somehow worse.
So I took the whole cloud out of it. This is the build log for turning a mass-market robot vacuum into a fully local device with Valetudo, the open-source firmware that replaces the vendor cloud with an on-robot web interface and local Home Assistant control. When it is done, the robot has no account, phones home to nothing, keeps its map on its own hardware, and still cleans on a schedule with your internet unplugged.
This is a tinkerer’s build. It voids your warranty and it can brick the robot if you rush it. I will be honest about that up front, and I will give you two boxed alternatives at the end for people who want most of the benefit without a soldering iron anywhere near a $500 machine.
Step 0: Check Your Exact Model Before You Buy Anything
This is the decision that makes or breaks the whole project, and getting it wrong is how you end up with an expensive vacuum you cannot root. Valetudo does not run on “robot vacuums” in general. It runs on a specific list of models, and often only on specific hardware revisions of those models, because rooting depends on a physical access point the manufacturer left on the board and a boot-time exploit that a firmware update can quietly kill.
The supported families as of 2026 break down like this:
- Dreame, MOVA, and Xiaomi-Dreame models are the sweet spot. They root over a 3.3V UART on service pads on the mainboard, no soldering required if you use pogo pins or a careful jumper, and the process is well documented. The Dreame L10s Ultra is the model most people land on because it is a genuinely good mopping vacuum and it is well supported.
- Legacy Roborock S5 and the original Xiaomi V1 use older software-only exploits over WiFi, no disassembly, but the hardware is dated.
- Roborock S6 through Q7 Max require full teardown to reach test points, and some 2024-and-later revisions have locked NAND that blocks root entirely.
Before you spend a dollar, pull up the official supported-robots matrix, find your exact model number, and read the revision notes. If your candidate says “revision X and later cannot be rooted,” believe it. A robot you cannot root is just a cloud vacuum you overpaid for. Settle this first.
What You Need
The hardware list for a Dreame-class root is short and cheap:
- A USB TTL serial adapter that can do 3.3V logic (a CP2102 or FT232 board). Do not use a 5V-only adapter; you can damage the robot.
- A few female Dupont jumper wires to reach the service pads.
- A laptop. The Dreame root instructions specifically ask for a machine running Debian for the tooling, and a live USB stick is fine, so you do not have to reformat anything.
- A Home Assistant instance already running, with the Mosquitto MQTT broker add-on installed.
That is the whole bill of materials. The rest is patience.
The Root, In Plain Terms
I am not going to reproduce the model-specific pinouts here, because they change per revision and the official Dreame install guide is the only source you should trust for exact pads. But the shape of the process is worth understanding before you commit, so you know what you are getting into.
You open the robot’s top shell to expose the mainboard. You connect your 3.3V serial adapter to the UART pads (ground, TX, RX). You interrupt the boot process over serial to get a root shell, then use the Valetudo tooling to build and flash a firmware image that has the stock cloud stack stripped out and the Valetudo web server baked in. On reboot, the robot comes up running Valetudo instead of the vendor firmware, serving a clean web UI on its own IP address on your LAN.
The two places people brick robots are rushing the flash step and using the wrong voltage on the serial line. Go slow, double-check the adapter is in 3.3V mode with a multimeter before you touch a pad, and read each step twice. A root that takes you an unhurried Saturday afternoon is a root that works.
Once it boots, open the robot’s IP in a browser. You get a full local interface: live map, room editing, zone cleanup, fan speed, cleaning history, all served from the robot itself. At this point you can, and should, block the robot’s internet access at your router or on an IoT VLAN. It does not need it anymore, and blocking WAN is the proof that the cloud is truly gone.
Wiring It Into Home Assistant
This is where the local vacuum stops being a novelty and becomes part of the house. Valetudo speaks MQTT, and Home Assistant speaks MQTT, so the two connect with no custom integration and no cloud bridge.
In Valetudo’s settings, enable the MQTT connection and point it at your Mosquitto broker with Home Assistant autodiscovery turned on. Within a few seconds the robot appears in Home Assistant as a native vacuum entity with start, pause, return-to-dock, locate, and fan-speed controls, plus sensors for battery, cleaning state, and error status.
For the live map, add the excellent community Xiaomi vacuum map card through HACS. It renders Valetudo’s map, lets you tap a room to clean it, and draws go-to and zone-cleanup boxes right on your dashboard. It looks and works better than the vendor app it replaced, and it never leaves your network.
Now the automations. Everything below lives in your own automations.yaml and keeps working with the internet unplugged:
automation:
- alias: "Vacuum kitchen after dinner cleanup"
trigger:
- platform: state
entity_id: input_boolean.dinner_done
to: "on"
action:
- service: vacuum.send_command
target:
entity_id: vacuum.robovac
data:
command: segment_clean
params:
segment_ids: [16]
- alias: "Pause vacuum when someone is on a call"
trigger:
- platform: state
entity_id: input_boolean.on_a_call
to: "on"
action:
- service: vacuum.pause
target:
entity_id: vacuum.robovac
The first one runs a single room on demand when a helper flips on. The second pauses the robot the moment I get on a call and, with a companion automation, resumes it when the call ends. None of this is possible cleanly through a cloud app, and all of it is trivially local once the robot is a real Home Assistant entity. Presence-based cleaning, “vacuum the entryway when the last person leaves,” quiet hours that never send a robot into a nursery, it all just becomes Home Assistant logic.
The Honest Trade-Offs
Rooting is not free. Here is what you actually give up.
You void the warranty, full stop. A rooted robot is a robot you are on the hook for. You also lose the vendor’s obstacle-avoidance AI and any cloud-only party tricks, though in practice Valetudo’s own navigation on Dreame hardware is very good and I have not missed the “AI pet detection” marketing feature once. And the root itself is a real afternoon of careful work with a small but nonzero brick risk. If any of that makes you nervous, do not do it on a robot you cannot afford to replace.
What you get in return is total: no account, no telemetry, no photos of your floor leaving the building, a faster and more capable local dashboard than the app ever was, and a vacuum that will still be fully functional in ten years when the manufacturer has long since shut down the servers that used to run it. For me that trade is not close.
Boxed Alternatives: When You Will Not Root
Not everyone wants to open a $500 appliance with a serial adapter, and that is completely reasonable. There are two honest middle-ground paths.
The tinker-later path: buy a supported robot and run it stock for now. If you get the Dreame L10s Ultra, you can run it on the stock app today and root it whenever you feel like it, because it is on the supported list. It is a strong mopping vacuum either way, so this is the low-regret buy: good cloud vacuum now, local vacuum later, same hardware.
The no-root local-ish path: a Matter robot. The SwitchBot S10 exposes basic start, stop, and dock over Matter, so those core commands run locally through Home Assistant with no account for the button-pressing. Be clear-eyed about the limit: the mapping and room routing still lean on the vendor cloud, so this is local control of the vacuum, not a fully cloud-free vacuum the way a Valetudo flash is. As a middle ground for people who will never crack the case open, it is the honest pick, and I would rather tell you exactly where the line is than pretend Matter equals fully local. It does not.
The Bottom Line
A robot vacuum is the single most invasive sensor most people voluntarily put in their home. It drives into every room, builds a map, and by default hands all of it to a company whose only promise is a privacy policy that can change tomorrow. Valetudo is the fix, and on a Dreame-class robot it is an afternoon of careful work that leaves you with a better dashboard, zero telemetry, and a machine that answers only to your own hardware.
If you are the kind of person who reads a build log to the end, root a supported robot and never look back. If you are not, buy a robot from the supported list anyway so the door stays open, or take the Matter middle ground with your eyes open about what it does and does not do. Just do not keep paying a stranger to map your house. You can own that map instead, and it is not even hard.