iRobot Roomba i7+ Configuration using Rest980

so after reboot, the sensors return to no entity found, if you open MQTT Explorer and then click to create a new sensor, do you see any changes in MQTT?

How does your mqtt config look inside configuration.yaml (please obfuscate any passwords!)

Yeah, thats wierd.

AFAIK it should work for an e5, however i don’t have one to confirm unfortunately :expressionless:

perhaps try a soft-reset? - seems to work for a similar issue as described here

I think I have tried this once but trying it again certainly won’t hurt. I’ll do that tomorrow. I want to avoid a full reset though because it was a pain to connect the app the first time around.

I am having issues with my custom button. It was working until “i think” i updated HA.
The custom button is not showing up anymore
I am getting the following error

Expected a value of type `{entity,name,icon} | entity-id` for `entities.9.lock` but received `{"enabled":"[[[\n if ((states['group.vacuum_rooms'].state == \"on\") && (states['sensor.vacuum'].state == \"Ready\"))\n return false;\n return true;\n]]]\n","exemptions":[]}`.

This my my lovelace

- entities:
  - input_boolean.vacuum_clean_kitchen
  - input_boolean.vacuum_clean_family
  - input_boolean.vacuum_clean_hallway
  - input_boolean.vacuum_clean_living_room
  - input_boolean.vacuum_clean_foyer
  - input_boolean.vacuum_clean_dining
  - input_boolean.vacuum_clean_breakfast
  - input_boolean.vacuum_clean_utility
  - input_boolean.vacuum_clean_garret_bedroom
  - entity: automation.vacuum_clean_rooms
    lock:
      enabled: |
        [[[
          if ((states['group.vacuum_rooms'].state == "on") && (states['sensor.vacuum'].state == "Ready"))
            return false;
          return true;
        ]]]
      exemptions: []
    name: Clean Rooms
    styles:
      card:
        - height: 50px
    tap_action:
      action: call-service
      service: automation.trigger
      service_data:
        entity_id: automation.vacuum_clean_rooms
    type: 'custom:button-card'
  head:
    label: Selective Room Cleaning
    type: section
  type: 'custom:fold-entity-row'

your configuration looks to be the same as mine, perhaps try swapping the entity row with type, so the type row is the first line (with the ’ - ’ at the begining)

im running HA 0.107.5 with button-card 3.2.3 installed

This is my configuration.yaml

mqtt:
  discovery: true
  discovery_prefix: homeassistant

Thank you Jeremy, the issue was actually due to a my groups.yaml and the breaking changes introduced in 107

1 Like

Soft-Reset didn’t really help unfortunately. :confused:

> [email protected] getpassword /usr/src/app
> node ./bin/getpassword.js

Make sure your robot is on the Home Base and powered on (green lights on). Then press and hold the HOME button on your robot until it plays a series of tones (about 2 seconds). Release the button and your robot will flash WIFI light.
This step will continue in 10 seconds...
(node:25) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
Robot Data:
{
  ver: '3',
  hostname: 'Roomba-69F3C71C22320700',
  robotname: 'Roomba',
  ip: '192.168.10.22',
  mac: '*************',
  sw: '3.4.59',
  sku: 'e510040',
  nc: 0,
  proto: 'mqtt',
  cap: { ota: 1, eco: 1, svcConf: 1 },
  blid: '********************'
}
Error getting password. Follow the instructions and try again.

That’s a different error at least! That looks like it’s not in pairing mode when it attempted to connect. Perhaps try it again?

I did. Same result. And that’s as far as I have come in the past as well. Really weird and frustrating.

Can this work with multiple Roombas? I have 2 vacuums and the Mopping Roomba.

Yes it can but you need to do some modifications. I created a new set of files but rather than called them vacuum I named them braava
So in my packages directory I have a vacuum.yaml and braava.yaml.
For the

secrets file, I just copied and pasted the vacuum_ keys and find/replaced braava

vacuum_state:  http://192.168.0.x:3000/api/local/info/state
vacuum_action: http://192.168.0.x:3000/api/local/action/
vacuum_verify_ssl: false
vacuum_map: http://192.168.0.x:3002/image.php
vacuum_log: /config/vacuum/vacuum.log
vacuum_pmap_id: xxx
vacuum_user_pmapv_id: xxx
vacuum_family:  '{"region_id": "1","region_name": "Family Room","region_type": "family_room", "type": "rid"}'
vacuum_dining:  '{"region_id": "9","region_name": "Dining Room","region_type": "dining_room", "type": "rid"}'
vacuum_kitchen: '{"region_id": "7","region_name": "Kitchen","region_type": "kitchen", "type": "rid"}'
vacuum_foyer:   '{"region_id": "12","region_name": "Foyer","region_type": "foyer", "type": "rid"}'
vacuum_hallway: '{"region_id": "15","region_name": "Hallway","region_type": "hallway", "type": "rid"}'
vacuum_living:  '{"region_id": "11","region_name": "Living Room","region_type": "living_room", "type": "rid"}'
vacuum_utility: '{"region_id": "16","region_name": "Utility","region_type": "laundry_room", "type": "rid"}'
vacuum_breakfast: '{"region_id": "17","region_name": "Breakfast Room","region_type": "breakfast_room", "type": "rid"}'
vacuum_garrett: '{"region_id": "18","region_name": "Room","region_type": "bedroom", "type": "rid"}'

braava_state:  http://192.168.0.x:3001/api/local/info/state
braava_action: http://192.168.0.x:3001/api/local/action/
braava_verify_ssl: false
braava_map: http://192.168.0.x:3002/image.php
braava_log: /config/vacuum/braava.log
braava_pmap_id: xxx
braava_user_pmapv_id: xxx
braava_kitchen:  '{"region_id": "1", "region_name": "Kitchen","region_type": "kitchen","type": "rid"}'
braava_breakfast: '{"region_id": "24", "region_name": "Breakfast Room","region_type": "breakfast_room", "type": "rid"}'
braava_family:  '{"region_id": "2", "region_name": "Family Room","region_type": "family_room", "type": "rid"}'
braava_foyer: '{"region_id": "22", "region_name": "Foyer", "region_type": "foyer", "type": "rid"}'
braava_hallway: '{"region_id": "19", "region_name": "Hallway", "region_type": "hallway", "type": "rid"}'
braava_dining: '{"region_id": "25", "region_name": "Dining Room", "region_type": "dining_room", "type": "rid"}'
braava_utility: '{"region_id": "18", "region_name": "Utility", "region_type": "laundry_room", "type": "rid"}'
braava_living: '{"region_id": "26", "region_name": "Living Room", "region_type": "living_room", "type": "rid"}'

In the braava.yaml I did a find replace (for the most part) of vacuum to braava
I then have docker kick off 2 different images


#S9
docker run -e BLID=XXX -e PASSWORD=XXX -e ROBOT_IP=10.10.x.40 -e FIRMWARE_VERSION=2 -p 3000:3000 koalazak/rest980:latest


#Braava
docker run -e BLID=xxx -e PASSWORD=xxx -e ROBOT_IP=10.10.x.41 -e FIRMWARE_VERSION=2 -e PORT=3001 -p 3001:3001 koalazak/rest980:latest

I still have not been able to get maps working unfortunately but all the other stuff works great (I am sure there are things I am missing from the above so please let me know if you have issues)

Hey @Syrius,

I entered the URL as a you guided on github to force a regeneration of the map but I’m just stuck with no image now.

Any ideas?

http://(ipaddress):3001/image.phpclear=true

The page shows the following when I try to go to it.


Notice: Trying to get property 'attributes' of non-object in /config/vacuum/image.php on line 215

Notice: Trying to get property 'batPct' of non-object in /config/vacuum/image.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /config/vacuum/image.php:215) in /config/vacuum/image.php on line 235
�PNG  IHDRL�M� pHYs���+e IDATx���{�u���O�����6IC,d�rI0*("(!a£B"���mT �+Vn˲e��5h�����rc�e��ɨ$��d2=��~���mOMuu]���߯s8$�U���=��}���U��U��]�ժ,˒a�>�6`��@'�a%�rY�e�~`U�i���F�IEND�B`�
Warning: imagedestroy(): supplied resource is not a valid Image resource in /config/vacuum/image.php on line 242

Notice: Undefined variable: roomba_stuck in /config/vacuum/image.php on line 243

Warning: imagedestroy() expects parameter 1 to be resource, null given in /config/vacuum/image.php on line 243

Warning: imagedestroy(): supplied resource is not a valid Image resource in /config/vacuum/image.php on line 244

You should be able to get the maps working, just need to define two different log files (and respective automations and command entries) and then have two seperate image php files for each map for then nginx docker image

It seems to indicate a problem getting the details from HA to “complete” the map.

Can you check and confirm you have created the long lived token and added to the variables section of the image.php? Also make sure the URL to get to the rest980 sensor is correct

Anyone who know if it’s possible to send the Roomba (i7) to a fixed coordinate when the bin is full?
My base station is locaten underneath the couch, so it a bit tight to get the dust bin from underneath the couch when it’s full.

Jeremy, thank you for all your work and help on this. I now have it running on my s9+, Braava M6 and Roomba 980 all at same time. Great work and thank you.

1 Like

@batlin can you share how you got the M6 on there?

Hi,
Great integration. I managed to get it all setup in home assistant and working like a charm.
My next step was to integrate it with my google home mini.
So I’ve got the Home Assistant cloud integration and it synchronizes the group.vacuum_rooms to google home. This provides me a switch to turn on and off. Pressing this or activating by voice does nothing. Is there another way to get this integrated with google home to activate voice commands? Tried searching, but did not come across something that helps me.

Looking forward to any support on this.

i have a better solution for you… buy the clean base! its magical :heart_eyes:

there might be a way using the raw commands, but its not published into rest980, just the underlying dorita980 unfortunately.