iRobot 9xx on openHAB

Hi There,

being a proud owner of a iRobot Roomba 980 vacuum cleaner, i really like to control it using openHAB. But unfortunately the was no interface …

But now i found it offers an unofficial library and REST interface to access the Roomba. The use cases shown on git are working and it draws a nice map of the Roomba activity. Next step are the integration in openHAB.

I anyone has done something similar, please show your results



I only know this it says for 800 series and some below. Might want to check if its compatible with the 900 series

Slightly OT sorry, but how do you find the 980 in terms of how well it actually cleans your floors? What sort of floors do you have? I have been looking at getting one of these or maybe a Dyson 360 but they are very expensive so I want to be sure they actually do a reasonable job at cleaning!

No Problem, my floors are mainly wood with somme very light rugs. Before cleaning we collect the rugs because the roomba is moving the. heavier rug should be no problem. From our point od view it does a reasonable job and it is pure luxury - Close the door an let it do the job.


Roowifi is not compatible with the 900 series as far as i know

@Dibbler42, thanks for the link to the iRobot Rumba 9xx SDK, it looks very amazing.

I am also very interested in this development, it would complement a great smart home. Unfortunately I am not a developer…

Anyone who has the capacity would like to develop it?

@Dibbler42 just an advise, change the tags to OpenHAB2 - Bindings. That location is more accurate for this post.

there is no need for much development, because you could use the REST Infterface ist you setup it up. I have done it with the docker image and it works like a charm.


You are right, we can use REST, but I was thinking about a OH2 binding that can discover the Roomba and add things…

Hi @Dibbler42, I am trying to make it work using the REST interface but seems I am doing something wrong.

Can you please share here your configuration from the OpenHab side?

Now i am starting to implement a iRoomba control

First i like to get the current status off action: charge, run, … for this i create an item:

String iRoombaStatus "Igor im Modus [%s]" <scene_robo_vac_cleaner> (gGeraete) {http="<[http://myRESTIp:3000/api/local/info/mission:30000:JSONPATH($.ok.phase)]"}

I displayed simly the string in the site map and it worked fine for me.


Great find @Dibbler42 … I spent an hour or so this morning trying to get dorita980 to work but have failed. Poking around on the git wiki a bit, it looks like there was a breaking firmware update about a month ago, so I stopped trying… although I’m holding my breath that this is still possible

Not only is status / control updates going to be awesome … but this unofficial api gives me access to the real time map… AWESOME. If only i could prioritize zones now :slight_smile:

Question – is your dorita api connecting to your roomba and do you have connectivity all the way back up to OH working?


i used the docker image and this is working very well with my iRoomba. If you open the dorita with /map you will get a map during cleaning and this works.

Unfortunately i had no time at the moment to connect to OH, but with the http binding it should be no problem. (Had one try to read the status and that worked)


I did get everything up and running … I’ve left it running off and on for the past few weeks and it does add great functionality (roomba to openhab), but it also seems to be the indirect culprit of eating over 100MB of memory and my pi3 can’t seem to release it fast enough before becoming unstable. I’ll poke around at it more as I have time… but thought I’d update this thread for anyone curious and let them know I got it working.

here were my items I configured:

Number roombaBattery 		"Roomba Battery [%d %%]" 				{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.batPct)]" }
Number roombaBatteryTime	"Roomba Battery Time [%.0f min]"		{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.expireM)]" }
Number roombaRechargeTime	"Roomba Recharge Time [%.0f min]"		{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.rechrgM)]" }
String roombaCycle 			"Roomba Cycle [%s]" 					{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.cycle)]" }
String roombaPhase 			"Roomba Phase [%s]" 					{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.phase)]" }
Number roombaCoverage		"Roomba Mission Coverage [%.0f sq ft]" 	{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.sqft)]" }
Number roombaTime 			"Roomba Mission Time [%.0f min]"	 	{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.mssnM)]" }
Contact roombaBinFull 		"Roomba BinFull [%s]" 					{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.missionFlags.binFull)]" }
String roombaMsg 			"Roomba Message [%s]" 					{ http="<[http://openhab:3008/api/local/info/mission:60000:JSONPATH($.ok.notReadyMsg)]" }

Switch roombaMission		"Roomba Start" 							{ http=">[ON:GET:http://openhab:3008/api/local/action/start] >[OFF:GET:http://openhab:3008/api/local/action/stop]" }
Switch roombaPause			"Roomba Pause" 							{ http=">[ON:GET:http://openhab:3008/api/local/action/pause] >[OFF:GET:http://openhab:3008/api/local/action/resume]" }
Switch roombaDock 			"Roomba Dock"							{ http=">[CHANGED:GET:http://openhab:3008/api/local/action/dock]" }

and here’s a map I built using rest980 … this functionality only works if you’re actively polling for coordinates during a mission. I could improve on this by persisting the x,y’s and mapping after the fact… but it doesn’t actually serve any purpose (yet)


Thats geart, i definitly will use your items (Less work to type). Unfortunately iRobbot is in the process to upgrade the firmware to which uses no longer http for communication. it uses now mqtt. The guys from dorita980 are working on that an the local api is working, but cloud api is still in progress.


Wow seems that the guys have fixed everything. Will try that today

Any update on this ? would be nice to have binding :slight_smile:

1 Like

Currently no binding, but the dorita solution works well with docker and http binding.


1 Like

Thnx for the feedback


Does anyone know the state of this Roomba OpenHAB binding?

Been years since this github repo had update and hope its not totally abandoned… In any case I have the basics working with the Dorita REST API:

Thanks ALL!

1 Like

Here is my corrected items definition which uses the latest and greatest Dorita / REST API version/responses:

Number roombaBattery 		"Roomba Battery [%d %%]" 				<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.batPct)]" }
Number roombaBatteryTime	"Roomba Battery Time [%.0f min]"		<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.expireM)]" }
Number roombaRechargeTime	"Roomba Recharge Time [%.0f min]"		<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.rechrgM)]" }
Number roombaError			"Roomba Error [%d]"						<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.error)]" }
String roombaInitiator 		"Roomba Initiator [%s]" 				<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.initiator)]" }
String roombaCycle 			"Roomba Cycle [%s]" 					<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.cycle)]" }
String roombaPhase 			"Roomba Phase [%s]" 					<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.phase)]" }
Number roombaCoverage		"Roomba Mission Coverage [%.0f sq ft]" 	<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.sqft)]" }
Number roombaTime 			"Roomba Mission Time [%.0f min]"	 	<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.cleanMissionStatus.mssnM)]" }
Contact roombaBinPresent 	"Roomba Bin Present [%s]" 				<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.bin.preset)]" }
Contact roombaBinFull 		"Roomba Bin Full [%s]" 					<roomba>  { http="<[http://API_IP:API_PORT/api/local/info/mission:60000:JSONPATH($.bin.full)]" }

Switch roombaMission		"Roomba Start" 							<roomba>  { http=">[ON:GET:http://API_IP:API_PORT/api/local/action/start] >[OFF:GET:http://API_IP:API_PORT/api/local/action/stop]" }
Switch roombaPause			"Roomba Pause" 							<roomba>  { http=">[ON:GET:http://API_IP:API_PORT/api/local/action/pause] >[OFF:GET:http://API_IP:API_PORT/api/local/action/resume]" }
Switch roombaDock 			"Roomba Dock"							<roomba>  { http=">[CHANGED:GET:http://API_IP:API_PORT/api/local/action/dock]" }