Pin to Go with Roborock S7 Max Ultra in Home Assistant – Anyone Tried?

Hi everyone,

I’m wondering if anyone has successfully implemented “Pin to Go” for the Roborock S7 Max Ultra in Home Assistant. If so, I’d love to hear how you integrated it.

For context, I’m working on my bachelor’s thesis and developing a Python program to control my Roborock. I’ve read that Home Assistant integrations increasingly rely on python-roborock rather than python-miio, so I’ve based my script on python-roborock.

The library provides the app_goto_target command, which I’ve tried to use, but I keep getting the error: “The method called is not recognized by the device.”

Other commands like app_start (start cleaning), app_stop (stop cleaning), and app_charge (return to dock) work perfectly, so the integration itself is fine. “Pin to Go” works as expected in the Roborock app, so it should be possible. My assumption is that if someone has this feature working in Home Assistant, it should also be feasible in a standalone Python script.

Any tips or insights would be greatly appreciated!

Update:
I’ve made some progress and wanted to share what I’ve found so far.
For the S7 Max Ultra, the python-roborock library provides three different channels to send commands: _rpc_channel, _mqtt_rpc_channel, and _map_rpc_channel.

The first two work perfectly for commands like app_start, app_stop, and app_charge. Because of that, I initially ignored the third one, the map channel.

However, I recently discovered that this might actually be the correct channel for “Pin & Go.” It seems that on the S7 Max Ultra, “Pin & Go” may work differently compared to other Roborock models and might rely on map-based communication instead.

The problem:
Whenever I try to send a goto target command via the map channel, the request always times out. I can even send app_start over this channel and the robot actually starts cleaning, but my program never receives a response, it just times out and loses the connection entirely. The robot keeps cleaning until I manually stop it via the app.

My suspicion is that “Pin & Go” suffers from the same issue: the command never returns anything at all.

ChatGPT suggested that map-related commands and data might only work over a local connection, while my current setup is using cloud only. That could explain why the map channel behaves differently.
I haven’t tested this yet, because I’m still unsure how to properly establish a local connection, and especially how to keep both connections active in parallel (cloud for regular commands and local for map commands).

If anyone has experience with getting local communication working alongside cloud communication for the S7 Max Ultra, I’d really appreciate any guidance!

I can’t even pretend to know how the Roborock code works under the hood, but the integration source code implies that all it needs is the X & Y positions of your map.

If you’re doing that already & still stuck, it might be worthwhile to reach out directly to the integration devs and asking nicely if they can help.