Case study
Roborock Local Server: a self-hosted stand-in for Roborock’s vacuum cloud
Runs a local HTTPS and MQTT stack in place of Roborock’s cloud, so supported vacuums keep live maps and controls on an isolated network without rooting or hardware changes. The maintainer’s technical write-up recounts earlier app and traffic analysis and a later investigation in which Claude Code and Codex worked against an emulated firmware environment. Compatibility is reported per model by the project and its users.
Requirements & limits
- Reviewed version 1.2.1 (commit c3b3284) targets most Roborock vacuums on the v2 protocol; README excludes the entry-level Q series, and the tested-models page lists confirmed models, unresolved failures and certificate-chain notes. Documented limitations include firmware updates and schedules; camera streaming is verified on two models, and China-market devices reject commands outside China.
- Setup needs a domain the user controls with local DNS rewriting, a valid TLS certificate, a LAN host for Docker Compose or the Home Assistant add-on, and a second Wi-Fi computer for one-time onboarding. The official Roborock app works only after an interception login step and, on Android, a patched APK; Home Assistant and the open-source LocalRock app are alternatives.
- Python 3.11–3.13 with FastAPI, aiohttp, cryptography and python-roborock 4.20.0; a container image is published, and CI runs the pytest suite before building it. Tests cover onboarding, protocol authentication, MQTT proxying, certificates and scenes; this review ran neither the tests nor a vacuum.
- The write-up says long-running Claude Code (Opus 4.6) and Codex sessions, given the maintainer’s own rooted S7, its firmware, python-roborock and the decompiled app, helped find the remaining onboarding step after earlier manual attempts stalled. It credits Dennis Giese’s firmware research, Valetudo and other community work; no REA use is stated.
- MIT license with an as-is disclaimer; the project is not affiliated with Roborock. It is a compatible server, not recovered Roborock server code, and vendor firmware or app changes may break it.
About this entry
- Type
- Case study
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Targets
- Protocol
Sources reviewed
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- docs/technical_writeup.md GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- README.md GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- docs/known_limitations.md GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- docs/tested_vacuums.md GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- docs/roborock_app.md GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- pyproject.toml GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- .github/workflows/docker-release.yml GitHub · Python-roborock/local_roborock_server · Revision c3b3284
- LICENSE GitHub · Python-roborock/local_roborock_server · Revision c3b3284
More in Protocols
- pypush: a Python client for Apple’s push protocol · Case study
- PixMob IR reverse engineering: controlling event wristbands at home · Case study
- OpenDrop: an open reimplementation of Apple AirDrop · Case study
- Wireshark · Tool
- Netzob · Tool
- Scapy · Tool