Ecovacs Vacuum Cleaners Binding

Just got a new T10 Plus and seems like its not working with the binding.

2022-09-15 13:25:31.767 [INFO ] [acs.internal.api.impl.EcovacsApiImpl] - Found unsupported device DEEBOT T10 PLUS (class rss8xk, company eco-ng), ignoring.

Any chance to add this model?
Thanks a lot !

Those values are passed verbatim as they are sent from the device. They are not interpreted (e.g. converted to float) at any point, I keep them as string.

1 Like

Sure. I added them to the code, but can’t build a new kar file at the moment due to the jfrog outage … will update the kar once that is resolved.

Edit: update done.

After a few days the thing becomes “OFFLINE COMMUNICATION_ERROR”:

12:14:43.899 [TRACE] [internal.handler.EcovacsVacuumHandler] - <redacted>: Connection: Running one-shot
12:14:43.911 [TRACE] [vacs.internal.api.impl.EcovacsApiImpl] - <redacted>: Sending IOT command GetVersion with payload <ctl name="FW" td="GetVersion"/>
12:14:43.945 [TRACE] [vacs.internal.api.impl.EcovacsApiImpl] - <redacted>: Got response payload null
12:14:43.949 [DEBUG] [internal.handler.EcovacsVacuumHandler] - <redacted>: Failed communicating to device, reconnecting
org.openhab.binding.ecovacs.internal.api.EcovacsApiException: Sending IOT command GetVersion failed: null
        at org.openhab.binding.ecovacs.internal.api.impl.EcovacsApiImpl.sendIotCommand( ~[bundleFile:?]
        at org.openhab.binding.ecovacs.internal.api.impl.EcovacsIotMqDevice.sendCommand( ~[bundleFile:?]
        at org.openhab.binding.ecovacs.internal.api.impl.EcovacsIotMqDevice.connect( ~[bundleFile:?]
        at org.openhab.binding.ecovacs.internal.handler.EcovacsVacuumHandler.lambda$14( ~[bundleFile:?]
        at org.openhab.binding.ecovacs.internal.handler.EcovacsVacuumHandler.doWithDevice( ~[bundleFile:?]
        at org.openhab.binding.ecovacs.internal.handler.EcovacsVacuumHandler.connectToDevice( ~[bundleFile:?]
        at [bundleFile:?]
        at java.util.concurrent.Executors$ [?:?]
        at [?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker( [?:?]
        at java.util.concurrent.ThreadPoolExecutor$ [?:?]
        at [?:?]
12:14:43.957 [TRACE] [internal.handler.EcovacsVacuumHandler] - <redacted>: Connection: Scheduling to run in 5 seconds

When I use the “pause” button to disable the thing and enable it shortly after, it becomes “Online” again.

Hi all,
Is it possible throught binding, enable/disable the “True Detect 3D” ?


Not as of now. I can have a look into it.

I would be great, because I have to clean some of my room disabling “True Detect 3D”, otherwise Deebot do not go into that room, due a small step and a long hair carpet. Disabiling “True Detect 3D” Deebot clean that room, but cause some issue in the kitchen and my cave, where there always is omething on the floor.


I’m on openHAB 3.0.0 and bought a Deebot ozmo t8 from Ecovacs.
Is there a binding somewhere I can use?

Thanks in advanced

is there some example on how use actions#command in rule? And how to get room number?


You can try with the kar file linked above (no guarantees though), but why not update to 3.3.0?

What exactly do you need help with? The possible commands are listed in the readme.

You should use the letters as shown in the app there.

That upgrade to 3.3 was the solution. Thank you

Hi, in my app there is not Rooms Letter on the map, I have name of the room. Can you publish a screenshoot explaining where in Ecovacs App can I get the letters?

I saw command in readme but I mean some Example of usage as all binding available. Some code of item and rule, showing how to use Bindings


For me, it’s in the map view:

Well, I linked the ‘command’ channel to an item via UI (no code needed/available there), and then am sending commands to that as per usual. Example rule (executed whenever I press the respective button on a button panel):

var currentState = itemRegistry.getItem("VacuumRobotGroundFloorState").getState().toString();
if (currentState == "charging" || currentState == "idle") {
  events.sendCommand("VacuumRobotGroundFloorCommand", "clean");
} else if (currentState == "cleaning") {
  events.sendCommand("VacuumRobotGroundFloorCommand", "pause");
} else if (currentState == "pause") {
  events.sendCommand("VacuumRobotGroundFloorCommand", "resume");

here is my MAP
I have no letter, what should I use? Do you renamed your rooms with letter?


You should be able to tap on the room/name and remove the room label … at least I have an option 'Standard (A, B, C, …)‘. Alternatively, just try one after another, starting at A.

1 Like


I’m using your binding since a month and it is doing great.

I’m using a Deebot T9+ and in the app i have a setting for cleaning 1 time or 2 times.
It then cleans every room once or twice.

Any possibility to add a channel for that?

if I know exactly how, i could provide API endpoints data for that. Unfortunately I’m not a Java programmer. Therefore i would not think of a Github PR ^^

I’ll have a look into it. As a workaround for now you can use the spotArea command, listing all rooms explicitly: spotArea:A;B;C;D;E:x2.