Local Roborock Server [App]

Hi all! I’m one of the maintainers of the Roborock integration. For a long time one of the biggest asks from users was that they wanted to be able to use their vacuums completely offline. In the Roborock integration, we connect to the vacuum using local protocol, but there are two limitations that block you from being able to block the vacuum from hitting the internet.

  1. Roborock forces all map related messages to go to the cloud. This is the only cloud-required feature.
  2. If the roborock vacuum cannot access Roborock’s cloud, it will not allow ANY messaging. The vacuum will constantly restart its internet trying to reconnect to Roborock’s cloud.

Cloud problems have been the number one source of issues for Roborock in HA. They change their login flow, they more aggressively kick clients off of mqtt topics, etc. Every time that happens, things break, I have no warning and I play catch up and some users end up getting stuck with a temporarily broken product.

It’s taken a long time and a lot of reverse engineering, but I made a solution that I am pretty happy with and that has been working well for me and a number of other users.

I released this in beta about 6 months ago and have ironed out a lot of the previous issues and added a Home Assistant Add-on. You set up a server and you go through the onboarding process with your vacuum 2-3 times, in doing so, we are able to reverse engineer a public key and inject a new URL for the vacuum to use. You can then connect Home Assistant to the server, your official Roborock app (involves patching a file for the apk on Android and just using mitm for iPhone), or a custom LocalRock App created by another user.

Compatibility note: Most Roborock vacuums (including newer ‘v2’ protocol models) are supported. The Q Series (not to be confused with the QRevo series) is not currently supported, though I’m actively working on it. Theoretically some other than the Q7 might be supported and I have not tried, but my gut feeling is that they are also not uspported.

If you’d like to get started with the project, you can check out the docs or the Github Readme. My docs are not the best and I am open to anyone who wants to make them a bit better! Installation changes slightly based on your domain, certificate provider, network, and where you are hosting the server. Many users have had luck having AI get them through problems, but I hope I can get the docs good enough at one point that it is easier to follow and that is not needed.

If you’re interested in learning more about how it works, you can also check out the technical writeup

Interesting… no cloud… so my Roborock vacuum would talk to this local server ONLY…?

Do I still need internet for initial setup? Do I still need a Rocorock account?
Or maybe with this we would be able to integrate a new vacuum robot (fresh off the box & completely offline) to HA…?

I just added support for greenfield vacs! So you can onboard vacs that have never been on the cloud! I have not tested it extensively but it works to the extent I’ve tested!

I was reading your documentation last night, I’m planning to get a Roborock, Most likely a Curv 2 Flow, so I’ll do some testing when I get it. Really appreciate the effort and I’ll make sure to use the affiliate links when I do.

I plan to start the test with a free DNS providers just for testing purposes, unless there’s any risk it could harm the project.

Thanks again!

Hey @lindarte! Ty very much!

No harm in trying! Definitely worthwhile to try some free providers especially on new vacuums. The older vacuums are very hesitant to trust certificates, but the newer ones seem to be okay with certificates from a lot more providers. Please let me know what you find out!

Looks good. But installation documentation seems incomplete. After installing the app on HA, I need to fill in some configuration. However, what I need to enter seems undocumented apart from the name of the variable (which rings very limited bells for me.).

So looking forward to using this.. but please help me configuring it!

  • https_port: of which for what?
  • mqtt_tls_port: same, how do I get?
  • admin_password: for what?
  • protocol_login_email: no idea
  • protocol_login_password: no idea
  • tls_base_domain: no idea
  • tls_email: no idea
  • acme_eab_kid: no idea

Etc

Seems to me not all are always required? But they do have a *. And according to the docs they are not all required either..