Roomba i7+ (Rest980) with Selective Room Cleaning - Integrate your iRobot Roomba with Home Assistant

roomba_rest980

This is my latest project and first ever integration for HA, and it builds on jeremywillans’s YAML configuration while expanding upon it, allowing for selective room cleaning, favorites, and showing a map model (with even more stuff coming soon, as it’s still a work in progress!)
It uses rest980, so it’s easy to deploy that + the integration and start using.

Screenshots


My robot is actually dead as of posting (why battery is 0%, my dock has issues making contact) but here’s the integration working! I’ll replace the images when I fully charge it. Besides that, the state is what was last before it died.

Maps / Rooms

Maps are not given locally anymore (firmware 2+), which is why this integration allows you to login with your iRobot Home credentials to actually give you the convenient options of switch-based room selection. You can however still send a manual JSON command if you want to stay local/know how to for any reason.

You are also not locked to being cloud + local, you can stay fully local if you just want the attributes! I even left the raw attributes exposed in case I missed a sensor.

Real-Time Position

I’m trying to reverse engineer the Roomba to figure out if getting pose data back is ever possible without major modification. I’ll post an update if I ever find anything!

Please let me know what you’d like to see added or if you encounter any issues, I’ll check this thread and the GitHub.

7 Likes

Thank you for your efforts on making this!!

It was always a goal to migrate this to be a proper integration, but time just hasn’t been on my side.

:beers:

2 Likes

I’m still using the core integration. But with the problem (not sure if 100% related, but always the case), that I cannot really use the irobot app. If I use the core integration option “continuously” the integration gets their data, but most of the app action stay without any action from the i7. If I switch of “continuously”, I can always use the app and every action is stating, but the integration gets poor or sometimes no updates.

Is this the case with Rest980 way as well?

And/or any problems if I give it a try in parallel?

I’m not too sure how the core integration works, however this integration allows you to use the iRobot app in parallel because of the way rest980 works. Opening the iRobot app will force HA/rest980 off, but given a few seconds it will reconnect, so it’s as close to parallel as possible.

@ia74 This is great. Thanks! I have this up and running with a docker for each of my Roombas. I see that your are working on the 2-passes option. Is there a way with this integration to send the locate beep command or control the low-high suction on models that support it, like the s9?

Thank you! Glad to hear that it is working well for you.
As of current, unfortunately no locator beep. For some reason (which may be iRobot making that a cloud locked feature !), rest980 only exposes that from the cloud as opposed to locally. Once I get cloud MQTT stable, we will have many more functions including the beep.
As for low-high suction, I will look into that however I don’t have a vacuum that supports that [I only have the i7].

1 Like

Hello,

I would like to ask for advice. I am a bit lost.
I managed to connect 2 iRobots to the Roomba (Rest980) integration.
What should I do next?

Do you mean to use the selective room cleaning feature? For that, you toggle the switches given to you in the order you want the rooms cleaned then use the start button on the HA Vacuum entity.

If you do not see them, you have to add the robot with the cloud enabled switch. There is currently no way to simply do that with local room configuration [as of current!]. However, if you want do it purely locally you must send the action “rest980_clean” with this payload format (two data fields, one named payload for the actual data being sent to the vacuum, base_url is where the rest980 server is.)

# The numbers in the regions field should correspond to actual room IDs
payload: { "ordered": 1, "pmap_id": "<PMAP ID HERE>", "regions": [1,2,3] }
base_url: "http://your_rest980_server"

If this isn’t what you mean, please let me know so I can try to answer your question better

The description says it’s a vacuum card. That vacuum card requires a camera entity. There is no camera entity.
There are no room switches.

Uploading: Képernyőkép_7-10-2025_9458.jpeg…

This was so much easier than before. Thank you!

Is there a way to add favorites?

Of course, you’re welcome!

Favorites is a planned feature, if you add the robot from the cloud you should see them on the UI as buttons but its more of a skeleton for the functionality to be implemented later; it will now as a placeholder and when pressed clean the entire house (which in hindsight may not be great idea).

Locally, you can make an automation to switch the switches in the order you want, then execute the clean command from the vacuum entity.

This happens if you set it up locally; many features we unfortunately cannot get from the local rest980 instance alone. This is due to iRobot not exposing them in the user-side MQTT server.

However, if this is from your cloud login, please share the image again and potentially the logs from HA/my integration as I cannot see it.

I see that Brrava is somewhat supported. How can I add that?

Autodiscovery worked fine for my vacuum but I’d like to add both if possible.

You’ll have to set up a second instance of rest980 and point it at the Braava jet, getting the credentials the same way, and adding a second instance of the integration. If you encounter any errors or things look wrong please report back as I don’t have one of these mops!