iRobot 9xx on openHAB

Thanks Alexander seeing this clause; unfortunately commenting it out did NOT fix it. The password being returned is NULL/Blank. I called and tried chatting with them also and they will NOT give the password to you either.

Any other ideas in getting the password from the unit? I did get everything else except the password.

Best, Jay

Hi @jwiseman,

sadly no. One thing i know, that Roomba accepts only one connection a time. May be you try to connect twice.

Kind regards,

Alexander

I finally figured it out the issue I was having; the instructions in the dorita980 script says to press and hold the clean button for 2 seconds; this isn’t valid for model 899 running firmware v3.x.x.

How to get the blink wifi on the 800 series units is to press the buttons above and below the Clean buttons which are Home and Spot.

Press and hold Home and SPOT Clean simultaneously for 2 seconds. Roomba will generate a tone and flash a green Wi-Fi icon

Hope this helps someone else . . .

Best, Jay

1 Like

Hi Alexander,

Now that I got the password for my 899 iRobot; I need to get MQTT setup correctly.

I’m new to MQTT and was wondering if could you share your mqtt.cfg and mqtt-eventbus.cfg with me?

I have no clue how I should configure these two?

Best, Jay

Hi @jwiseman,

there are no mqtt.cfg and mqtt-eventbus.cfg files in my installation: I’m using MQTT2 binding.
Attention: Thing - description i post above is case-sensitive and " are mandatory.

Kind regards,

Alexander

@falkena You were right. All informations are there. Thanks.

I wanted to thank @David_Graeff for helping me get the MQTT binding working on a OH 2.3 version using a Synology NAS.

Here’s what the end solutions was for me:

I didn’t have to configure anything in Paper UI (everything is done in THING config). You should have the following items in Paper UI.

You should see:

Configuration – Bindings – MQTT Thing Binding
Configuration – Services – MQTT system broker connection
Configuration – Things – Roomba (online)

Here’s what you should have in Karaf:

bundle:list -s | grep mqtt

191 â Active   â  80 â 2.5.0.201903012159     â org.openhab.binding.mqtt
197 â Active   â  80 â 2.5.0.201903012159     â org.openhab.binding.mqtt.generic
252 â Active   â  80 â 1.2.1.201809150405     â org.eclipse.paho.client.mqttv3
254 â Active   â  80 â 0.11.0.oh250M1         â org.eclipse.smarthome.io.transport.mqtt

I had to get newer bindings and artifacts for org.eclipse.smarthome.io.transport.mqtt & org.eclipse.paho.client.mqttv3 from this location.

Jfrog has all snapshot artifacts: https://openhab.jfrog.io/openhab/webapp/#/home

https://openhab.jfrog.io/openhab/webapp/#/builds/PR-openHAB2-Addons/12850/1551798975407/published%20/org.openhab.binding:org.openhab.binding.mqtt.generic:2.5.0-SNAPSHOT

Evidence it’s connected now:

2019-03-07 17:29:30.375 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.0.143' with clientid 3164420C50229600 and file store '/volume1/@appstore/openHAB/userdata/mqtt/192.168.0.143'

I did notice that my Roomba lights are on now all the time vs. it being asleep which I’m assuming is because it’s being polled by OH and MQTT often.

I have yet tried to issue commands to it.

Best, Jay

Hi Alexander,

Am I suppose to configure anything in PaperUI for MQTT in order to get publishMQTT command to work?

2019-03-08 09:53:12.357 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Roomba MainFloor_Roomba_Switch changed to OFF': 'publishMQTT' is not a member of 'null'; line 2215, column 3, length 62
2019-03-08 09:53:13.371 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Roomba MainFloor_Roomba_Home_Switch changed to ON': 'publishMQTT' is not a member of 'null'; line 2195, column 3, length 62

Best, Jay

Hi @jwiseman,

no. I’m not using PaperUI. Textual configuration only. Installed bundles on my system are:


It seems, that

val RoombaActions = getActions("mqtt", "mqtt:broker:roomba")

call returns nothing. Please, check the second parameter in a call: It should be name of the bridge.
On my system:

Kind regards,

Alexander.

Hi Alexander,

Posting your Things in Karaf was the clue to why mine is NOT working. My MQTT Topic Thing is NOT being created on the Thing definition area so I decided to create it manually after doing a deep dive how MQTT works using this video of @ David_Graeff.

Unfortunately, the MQTT Thing topic will NOT initialize for what ever reason so I’m going to have to get David_Graeff involved to see what is wrong.

bundle:list -s | grep mqtt

189 â Active   â  80 â 1.2.1.201809150405     â org.eclipse.paho.client.mqttv3
190 â Active   â  80 â 0.11.0.oh250M1         â org.eclipse.smarthome.io.mqttembeddedbroker
193 â Active   â  80 â 2.5.0.201903012159     â org.openhab.binding.mqtt
200 â Active   â  80 â 2.5.0.201903012159     â org.openhab.binding.mqtt.generic
204 â Active   â  80 â 0.11.0.oh250M1         â org.eclipse.smarthome.io.transport.mqtt

Karaf Things:

mqtt:systemBroker:embedded-mqtt-broker (Type=Bridge, Status=ONLINE, Label=MQTT Broker, Bridge=null)
mqtt:topic:roomba:state (Type=Thing, Status=UNINITIALIZED, Label=Roomba Status, Bridge=mqtt:broker:roomba)

OH Startup Errors:

2019-03-10 08:56:55.221 [ERROR] [org.openhab.binding.mqtt.generic    ] - FrameworkEvent ERROR - org.openhab.binding.mqtt.generic
org.osgi.framework.ServiceException: Exception in org.apache.felix.scr.impl.manager.SingleComponentManager.getService()
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:222) [?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) [?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) [?:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) [?:?]
	at com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.addingService(ResourceTracker.java:39) [15:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) [?:?]
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870) [?:?]
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) [?:?]
	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) [?:?]
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318) [?:?]
	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261) [?:?]
	at com.eclipsesource.jaxrs.publisher.internal.Activator.openAllServiceTracker(Activator.java:91) [15:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at com.eclipsesource.jaxrs.publisher.internal.Activator.start(Activator.java:55) [15:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779) [?:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1) [?:?]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772) [?:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729) [?:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933) [?:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309) [?:?]
	at org.eclipse.osgi.container.Module.doStart(Module.java:581) [?:?]
	at org.eclipse.osgi.container.Module.start(Module.java:449) [?:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634) [?:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1614) [?:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585) [?:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528) [?:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [?:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [?:?]
Caused by: java.lang.NoClassDefFoundError: org/eclipse/smarthome/core/thing/type/ChannelGroupTypeProvider
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:276) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:655) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:578) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:538) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:525) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:446) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:564) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:976) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1003) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:859) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) ~[?:?]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) ~[?:?]
	... 30 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.smarthome.core.thing.type.ChannelGroupTypeProvider cannot be found by org.openhab.binding.mqtt.generic_2.5.0.201903012159
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:433) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:276) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:655) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:578) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:538) ~[?:?]
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:525) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:446) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395) ~[?:?]
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387) ~[?:?]
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:564) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.initDependencyManagers(AbstractComponentManager.java:976) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1003) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:859) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) ~[?:?]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) ~[?:?]
	... 30 more

Best, Jay

Hi @jwiseman,
There is no broker available. Please take a look here for textual thing configuration.

Kind regards,
Alexander

There is - just forgot to copy/paste it into the above post.

mqtt:broker:roomba (Type=Bridge, Status=ONLINE, Label=Roomba, Bridge=null)

Here’s Paper UI showing all the things and the Uninitialized Thing Topic which is causing the issues.

Capture

Items within the Uninitialized Thing Topic:

Best, Jay

This “ClassNotFoundException” sounds very fishy to me.

Which version of openHAB are you on? SNAPSHOT versions? If so, could you update to the very latest version first? If not SNAPSHOT, could you check that you are at least on 2.5.0M1?

You are correct; my OH version 2.3 is too old for this core function.

Per @David_Graeff

ChannelGroupTypeProvider was introduced with OH 2.4, so you are out of look here. OH 2.3 is too old to host the new MQTT binding’

I’ve posted this to see how to manually upgrade OH on a Synology NAS.

Best, Jay

Hi,

so what is the OH / MQTT binding minimum version requirement to get it working?

I’m running OH 2.4 docker image. MQTT bindings I installed through Paper UI. Things, rules and transformations I’ve created by hand per Alexanders examples. mqtt:broker:roomba is up and running but mqtt:topic:roomba:state gives me a communication error. No further info in the log.

I’m owning a 691, was able to extract the password using koalazak’s tool.

Do I have to upgrade to latest OH 2.5.0-snapshot docker image?

Thanks, Thomas

Hi @ollo,

i’m running openHAB 2.5.0.M1 on my production system.

Kind regards,

Alexander

I finally upgraded my Synology to v2.5m1 and the Roomba code from @falkena works now! Very happy . . .

Best, Jay

Hi,

I did the upgrade too and now the communication error is gone - great!
All items are online and RoombaWifistatJSON gets updated every 5sec.
Yet no update on RoombaShadowJSON, even after letting it run for a few hours.
Any idea what to check or how to debug?

Thanks!

Hi Alexander,

Would you be able to post more of your rules for specific actions/triggers that occur with the Roomba? I’m using your example of the DOCK and it works great! I’ve also created a START & STOP rule but that is the farthest I gotten.

Would like to implement more :wink:

Best, Jay

Should iRobot / Roomba be listed in https://www.openhab.org/addons/ somewhere?