iRobot Roomba i7+ Configuration using Rest980

please have a read of the insrtructions on GitHub, the setup of these files is covered in step 6

setup your rooms in irobot app first, then perform step 5 in the instructions to get the room details.

you will get timeouts and blank responses from the API when multiple services try access the roomba. use at own risk

How do I perform this without 2 services accessing roomba at once?
Navigate to http://<ip or fqdn of docker host>:<rest980port>/api/local/info/state
Maybe looking at state is just read access so it’s ok?

So I got it fixed,

Adding everything double did work 50% i had that already than I changed a few things to get it working:

Make all “vacuum” > “braava” and all “rest980” > “rest980_2”.

1 Like

in this instance, your accessing rest980, and rest980 is accessing the roomba.
if you run vacuum and rest980, then these are two seperate services accessing the roomba.

good work! :beers:

I started over my home assistant setup because of synology docker not supported.
Now i have an error while installing the rest980 and roombapw supervisor add-on
I receive the following error.

Failed to install add-on
‘NoneType’ object has no attribute ‘is_file’

@JeroenDeckers - Responded in GH Issues.

Looks like this is the culprit and I have added the file as indicated.

Can you test and see if this fixes it?

Could you share a bit more on how you set this up and kept the native integration in HA? I want to keep the native integration as it is (I’m on a 960) but I would like to get maps of completed runs using this setup. I’ve almost got my mind wrapped around it, but I’m not quite there.

1 Like

Thx Syrius, this solved the issue.

1 Like

Hello there,
I’m a bit new to HA and all the nice stuff, but have the Roomba create a very nice map:

Only problem:
When my Roomba 976 is finished, and returns to his “home”, that is not visible in de map.
The green arrow is where the Roomba is located (Docked)
The postion on the map (green square) is where te maps show Roomba is.
Is there something is need to change to get that fixed ?

Hi Jeremy, I’ve been working my way through your amazing solution, and I think I’m stuck one final time, and don’t know how to get past it.

When trying to either do a “full clean”, or “Selective clean” I get the following error in the Log of Rest980:

Error: Endpoint not found.
    at /usr/src/app/app.js:63:13
    at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:317:13)
    at /usr/src/app/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
    at /usr/src/app/node_modules/express/lib/router/index.js:635:15
    at next (/usr/src/app/node_modules/express/lib/router/index.js:260:14)
    at jsonParser (/usr/src/app/node_modules/body-parser/lib/types/json.js:110:7)
    at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:317:13)
    at /usr/src/app/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/usr/src/app/node_modules/express/lib/router/index.js:174:3)
    at router (/usr/src/app/node_modules/express/lib/router/index.js:47:12)
    at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:317:13)
    at /usr/src/app/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
    at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
    at authHandler (/usr/src/app/app.js:23:48)
GET /api/local/info/state 200 102.462 ms - 4440

Any advice?

do you get this behavior everytime? could potentially be rest980 unable to reach your robot therefore not getting updated location updates. or theres a rogue location added in vacuum.log file

if you just cleaned a single room, same result?

can you run the full_clean command manually from a web browser?

http://<ip or fqdn of docker host>:<rest980port>/api/local/action/start

Everytime the same result, tried it multiple times, allways the same result.
The Roomba 976 doesn’t have selective room cleaning, so that can’t be the problem.

Looked at the vacuum.log, and when the Roomba is done cleaning, the status changes to “Finished”, after that the Roomba returns to the dock. Perhaps thats the reason is stops drawing ?

I now own a Roomba i7, and there the “docked” location works perfect.
So the issue for the 976 is not important for me anymore :wink:

One big difference between the 976 and i7 is the way lines are drawn.
Result from the 976 shows more detailed lines.
The lines from the i7 look like there is more time between log-entry’s ?
Will post screenshots later to show what i mean.

There is an automation that runs when the status is detected changing from “Clean/Train” to “Ready” which triggers this. In theory the location points should be recorded all the way back to the dock - so not really sure why this is happening :man_shrugging:

Yeah I agree there is delay between updates. The automation performs an entity update for the rest980 api every 2 seconds, but this does not always equate the a change in the position data - so its likely a rest980/dorita980 < > robot limitation. Rest980 does have a “real-time” map interface (/map), though i expect the time delays are the same here.

Checked it with the “real-time” map, and it looks like the i7 only updates its location every 4 seconds.
Other values in the map update based on the “refresh-time” set in the /map
That would explain the delays in drawing lines.
De 976 (don’t own it anymore) might send location updates more often.
btw: Thanks for this very nice add-on !

1 Like

Hi All,

Apologies as I am clearly out of my depth, I hope this hasn’t been answered already but its a pretty silly question.

I have installed the REST980 API so far as I can tell, I’ve had no issues with BLID and password. This is loaded via HACS through Home assistant running on a Raspberry Pi4. Once started the log says:

[email protected] start /usr/src/app
node ./bin/www

Essentially I have no idea what do do from here, do I need an MQTT server to control my Roomba i7+? Perhaps I just don’t understand the language in the guide but essentially I have no idea how to see the robot and then control it in Home assistant.

Looking for help, no coding experience mostly just familiar with HA interface.

Hi All,
I’m new here and I’m also stuck on this point when te log says:

[email protected] start /usr/src/app
node ./bin/www

I Hope someone can help us to integrate our Roomba :crossed_fingers:

I finally got this working to at least talk to my roomba but I don’t appear to have all the sensor elements broken out. I see a parent sensor.rest980 and I can see in the Developer Tools and all of the sub data (cleanMissonStatus, dock, etc.) but those sensors aren’t exposed to HA so that I can use them in a lovelace card. I’m using the Mosquitto MQTT add-on with the default settings (discovery prefix, etc.) and it’s running with other devices showing up in the MQTT list of devices except the roomba, is this normal?

I’m back at this: and everything worked out.
I was making following mistakes:

  1. Never connected to iRobot (map collection) I was under impression, I could get this working without interacting with iRobot servers
  2. All the steps (11 of them, 12th is extra) explained in github needs to be followed, there is no checking if it worked after every steps or such

Now next part is getting second instance of this working:
As of now I’ve:

  1. Changed all instances of rest980 to rest980_2 in yaml file.
  2. Created mop.yaml instead of vacuum.yaml under packages
  3. Created mop directory (updated yaml entries correctly) instead of vacuum directory.

I would like to know:

  1. Can I simply change every instance of vacuum to mop in mop.yaml ? (I’ve updated secrets.yaml with new entries and those are correctly updated in mop.yaml), However I’m not very sure about sensor.vacuum and such


That is correct behavior, that’s all the log says once app starts.
After that point you should be able to see state of vacuum at:
http://<ip or fqdn of docker host>:<rest980port>/api/local/info/state