Homebridge plugin to connect iRobot Roomba devices with Homebridge/HomeKit.
@homebridge-plugins/homebridge-roomba">@homebridge-plugins/homebridge-roomba" >
@homebridge-plugins/homebridge-roomba">@homebridge-plugins/homebridge-roomba?label=downloads" >
The homebridge-roomba plugin polls Roomba for its status when requested by HomeKit, so when you first open
the Home app you may see an old status, or no status, until Roomba has had time to respond (which may take
a few seconds).
sudo npm i -g homebridge --unsafe-perm
sudo npm i -g @homebridge-plugins/homebridge-roomba
config.json
file.192.168.X.XXX
or 10.X.X.XXX
, or similar.ssh
or by using the Homebridge Terminal located in the ⋮ menu, top-right in the Homebridge UI.cd $(npm root -g)/homebridge-roomba
npm run roomba:getpassword <IP ADDRESS>
(replacing <IP ADDRESS>
with the IP address you discovered above).blid
and password. NB: Read the instructions carefully and ensure that you’re pressing and holding the correct button on your Roomba.This plugin supports GUI-based configuration using Homebridge UI, which is the recommended
approach for configuring your Roomba.
Here is example JSON for configuring a Roomba accessory:
{
"accessory": "Roomba",
"name": "Roomba",
"model": "960",
"blid": "1234567890",
"robotpwd": "aPassword",
"ipaddress": "192.168.x.xxx",
"dockContactSensor": true,
"runningContactSensor": true,
"binContactSensor": true,
"cleanBehaviour": "rooms",
"mission": {
"ordered": 1,
"pmap_id": "ab1cd_eFGhiJklMN2PqRsT",
"regions": [
{
"region_id": "1",
"type": "rid",
"params": {
"noAutoPasses": true,
"twoPasses": true
}
}
],
"user_pmapv_id": "220101T120101"
},
"stopBehaviour": "home"
}
Key | Description | Default Value |
---|---|---|
accessory |
Loads this plugin. Must be set to Roomba |
|
name |
The name of your Roomba as it should appear in Homebridge and HomeKit | |
model |
The model of your Roomba as you’d like it to appear in HomeKit | |
serialnum |
The serial number as you’d like it to appear in HomeKit | |
blid |
The blid of your Roomba, obtained during setup |
|
robotpwd |
The password for your Roomba, obtained during setup | |
ipaddress |
The IP address of your Roomba on your network | |
dockContactSensor |
Add a contact sensor to HomeKit that’s closed when Roomba is docked | true |
runningContactSensor |
Add a contact sensor to HomeKit that’s open when Roomba is running | false |
binContactSensor |
Add a contact sensor to HomeKit that’s open when Roomba’s bin is full | false |
dockingContactSensor |
Add a contact sensor to HomeKit that’s open when Roomba is docking | false |
tankContactSensor |
Add a contact sensor to HomeKit that’s open when Braava’s water tank is empty | false |
cleanBehaviour |
Roomba can clean everywhere or go on a specific cleaning mission when started | everywhere |
mission |
Instructions passed to your Roomba for a specific cleaning mission | |
ordered |
Clean rooms in order specified | 1 |
pmap_id |
The id of your map in the iRobot app | |
regions |
One or more rooms to be cleaned during mission | |
region_id |
The region id of the room to be cleaned | |
type |
The type of region id specified | rid |
params |
Additional parameters for the room to be cleaned | |
noAutoPasses |
Specify the number of cleaning passes for the room to be cleaned | false |
twoPass |
Specify two cleaning passes for the room | false |
user_pmapv_id |
The version id of your map in the iRobot app (contains Date and Time last modified) | |
stopBehaviour |
Roomba can go home or pause when stopped | home |
This plugin can instruct the Roomba to clean everywhere or go on a specific cleaning job when started. Follow these steps to get the mission configuration values from the iRobot app.
ssh
or by using the Homebridge Terminal located in the ⋮ menu, top-right in the Homebridge UI.cd $(npm root -g)/homebridge-roomba
npm run roomba:getlastcommand <BLID> <PASSWORD> <IP ADDRESS>
(replacing <BLID> <PASSWORD> <IP ADDRESS>
with the values for your robot).Note: Modifying the map (Room Dividers, Names or Zones) in the iRobot app will result in a new user_pmapv_id
value and may result in new region_id
values that will cause an error if not updated in mission configuration.
The homebridge-roomba plugin used to support keep-alive and auto refresh modes for obtaining Roomba’s status.
Both of these modes required more resources from Homebridge and Roomba than were necessary.
Now the plugin efficiently queries Roomba’s status on demand so as not to slow down Homebridge and so
as to provide HomeKit with Roomba’s status only when it requests it.
Click on any of the items below to expand the corresponding answer.
The homebridge-roomba plugin uses TypeScript andnvm
.
nvm
is used to control the version of node used. You can skip the nvm
step if you manage your own
node versions.
Use nvm
to select the required node version:
nvm use
or, if you don’t have the required node version installed:
nvm install
Prepare the project:
npm install
Build the project:
npm run build
or
npm run watch
The fastest way to test changes is to copy the built product directly to your Homebridge, and then to restart Homebridge.
If your Homebridge is running on your local machine, you can build (as above) and then copy the config.schema.json
file and dist
folder to the homebridge-roomba
folder in your Homebridge’s node_modules
folder.
If your Homebridge is running on another machine, you can use a remote copy tool such as scp
to copy the files:
npm run build && scp -r config.schema.json package.json dist user@host.local:/usr/lib/node_modules/homebridge-roomba/
Note: the destination path above is an example of what the path to node_modules
on your Homebridge server might be.
If you see “Permission denied” errors from scp
you will need to adjust the permissions on the files in that folder
on your Homebridge machine.
The homebridge-roomba plugin uses Changesets to maintain the CHANGELOG.md and to bump the package’s version number according to semver.
If you are preparing a PR, please consider using Changesets to include a summary of your change for the CHANGELOG.md, following the example of existing changelog entries (but feel free to provide more detail).
To create a new changeset:
npm exec changeset
That will prompt you to indicate whether your change is a patch (a bug fix) or a minor or major change. If you are adding a feature it is a minor change, not a patch.
Changesets will create a new file in the .changeset
directory that you can commit as part of your PR.
.git-blame-ignore-revs
Some revisions in the git history are spurious in a git blame, such as linting the code base.
These revisions are listed in .git-blame-ignore-revs
. You can configure your local git repository
to use this file to skip these revisions in a blame:
git config blame.ignoreRevsFile .git-blame-ignore-revs
config.schema.json
Useful references for the config.schema.json
:
The maintainer will run these steps to update the plugin version and publish to npmjs.com:
npm exec changeset version
Review the additions to CHANGELOG.md
and package.json
, commit with the comment “vX.X”, and then publish:
npm exec changeset publish
STVMallen - Original plugin
ncovercash - Dock status