Roborock binding for robot vacuum cleaners [5.0.0.0;5.1.0.0)

Tha last version at the marketplace ist from 15.08. I thought you did change something after?

I haven’t updated the changelog, but the latest binary is:

$ ls -l /NAS/Web/tmp/org.openhab.binding.roborock-5.1.0-SNAPSHOT.jar
-rwxrwxrwx 1 psmedley root 96703 Aug 23 19:01 /NAS/Web/tmp/org.openhab.binding.roborock-5.1.0-SNAPSHOT.jar

I’m wondering if your vacuum uses a different protocol? I really need the see the output of the call to Calling url: https://api-us.roborock.com/v3/user/homes/123456 to comment further

btw to confirm binding version, see lines like:

2025-08-24 07:05:23.924 \[DEBUG\] \[rock.internal.RoborockHandlerFactory\] - bundle org.openhab.binding.roborock:5.1.0.202508230708 (248)

The .202508230708 part represents the build time in yyyymmddhhmm format - I think in UTC time.

Hey @Paul_Smedley ,

thanks.. As far as I rember there was a snaphot build server, where i could download the latest jar?
Because I don’t want to move my setup to snapshot.

Here is the output, after sending the request. (I changed ID, SerialNumber,Key)

{
    "api": null,
    "result": {
        "id": 9100000,
        "name": "My Home",
        "lon": null,
        "lat": null,
        "geoName": null,
        "products": [
            {
                "id": "Zf********",
                "name": "Roborock Qrevo S",
                "model": "roborock.vacuum.a104",
                "iconUrl": null,
                "attribute": null,
                "capability": 0,
                "category": "robot.vacuum.cleaner",
                "schema": [
                    {
                        "id": 101,
                        "name": "rpc_request",
                        "code": "rpc_request",
                        "mode": "rw",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 102,
                        "name": "rpc_response",
                        "code": "rpc_response",
                        "mode": "rw",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 120,
                        "name": "错误代码",
                        "code": "error_code",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 121,
                        "name": "设备状态",
                        "code": "state",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 122,
                        "name": "设备电量",
                        "code": "battery",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 123,
                        "name": "清扫模式",
                        "code": "fan_power",
                        "mode": "rw",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 124,
                        "name": "拖地模式",
                        "code": "water_box_mode",
                        "mode": "rw",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 125,
                        "name": "主刷寿命",
                        "code": "main_brush_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 126,
                        "name": "边刷寿命",
                        "code": "side_brush_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 127,
                        "name": "滤网寿命",
                        "code": "filter_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 128,
                        "name": "额外状态",
                        "code": "additional_props",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 130,
                        "name": "完成事件",
                        "code": "task_complete",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 131,
                        "name": "电量不足任务取消",
                        "code": "task_cancel_low_power",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 132,
                        "name": "运动中任务取消",
                        "code": "task_cancel_in_motion",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 133,
                        "name": "充电状态",
                        "code": "charge_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 134,
                        "name": "烘干状态",
                        "code": "drying_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 135,
                        "name": "离线原因细分",
                        "code": "offline_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    }
                ]
            },
            {
                "id": "ld*************",
                "name": "Roborock Qrevo",
                "model": "roborock.vacuum.a75",
                "iconUrl": null,
                "attribute": null,
                "capability": 0,
                "category": "robot.vacuum.cleaner",
                "schema": [
                    {
                        "id": 101,
                        "name": "rpc_request",
                        "code": "rpc_request",
                        "mode": "rw",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 102,
                        "name": "rpc_response",
                        "code": "rpc_response",
                        "mode": "rw",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 120,
                        "name": "错误代码",
                        "code": "error_code",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 121,
                        "name": "设备状态",
                        "code": "state",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 122,
                        "name": "设备电量",
                        "code": "battery",
                        "mode": "ro",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 123,
                        "name": "清扫模式",
                        "code": "fan_power",
                        "mode": "rw",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 124,
                        "name": "拖地模式",
                        "code": "water_box_mode",
                        "mode": "rw",
                        "type": "ENUM",
                        "property": "{\"range\": [\"\"]}"
                    },
                    {
                        "id": 125,
                        "name": "主刷寿命",
                        "code": "main_brush_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 126,
                        "name": "边刷寿命",
                        "code": "side_brush_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 127,
                        "name": "滤网寿命",
                        "code": "filter_life",
                        "mode": "rw",
                        "type": "VALUE",
                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"
                    },
                    {
                        "id": 128,
                        "name": "额外状态",
                        "code": "additional_props",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 130,
                        "name": "完成事件",
                        "code": "task_complete",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 131,
                        "name": "电量不足任务取消",
                        "code": "task_cancel_low_power",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 132,
                        "name": "运动中任务取消",
                        "code": "task_cancel_in_motion",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 133,
                        "name": "充电状态",
                        "code": "charge_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 134,
                        "name": "烘干状态",
                        "code": "drying_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    },
                    {
                        "id": 135,
                        "name": "离线原因细分",
                        "code": "offline_status",
                        "mode": "ro",
                        "type": "RAW",
                        "property": null
                    }
                ]
            }
        ],
        "devices": [
        ],
        "receivedDevices": [
            {
                "duid": "2k0000000000",
                "name": "Q Revo oben",
                "attribute": null,
                "activeTime": 1756027646,
                "createTime": 0,
                "localKey": "Zq-----------",
                "runtimeEnv": null,
                "timeZoneId": "Europe/Berlin",
                "iconUrl": "",
                "productId": "Zfkqqrwtertrtrt",
                "lon": null,
                "lat": null,
                "share": true,
                "shareTime": 1755798289,
                "online": true,
                "fv": "02.07.14",
                "pv": "1.0",
                "roomId": null,
                "tuyaUuid": null,
                "tuyaMigrated": false,
                "extra": "{}",
                "setting": null,
                "sn": "R77M00000",
                "cid": null,
                "featureSet": "2247397454282751",
                "newFeatureSet": "42BA8C587EDAFFFE",
                "deviceStatus": {
                    "121": 8,
                    "122": 100,
                    "123": 102,
                    "124": 203,
                    "125": 56,
                    "126": 1,
                    "127": 82,
                    "128": 4,
                    "133": 1,
                    "120": 0,
                    "134": 0
                },
                "silentOtaSwitch": false,
                "shareType": "UNLIMITED_TIME",
                "shareExpiredTime": null,
                "f": false
            },
            {
                "duid": "14N457457474574745",
                "name": "Qrevo unten",
                "attribute": null,
                "activeTime": 1756031037,
                "createTime": 0,
                "localKey": "xmArsIk75678456845",
                "runtimeEnv": null,
                "timeZoneId": "Europe/Berlin",
                "iconUrl": "",
                "productId": "ldHlB6hwVPMvdm6AdkxJv",
                "lon": null,
                "lat": null,
                "share": true,
                "shareTime": 1755798290,
                "online": false,
                "fv": "02.20.60",
                "pv": "1.0",
                "roomId": null,
                "tuyaUuid": null,
                "tuyaMigrated": false,
                "extra": "{}",
                "setting": null,
                "sn": "R62MES000000",
                "cid": null,
                "featureSet": "2238601361260543",
                "newFeatureSet": "100A80505EDEFFFE",
                "deviceStatus": {
                    "121": 2,
                    "122": 76,
                    "123": 102,
                    "124": 201,
                    "125": 75,
                    "126": 92,
                    "127": 90,
                    "128": 0,
                    "133": 1,
                    "134": 0,
                    "120": 0
                },
                "silentOtaSwitch": false,
                "shareType": "UNLIMITED_TIME",
                "shareExpiredTime": null,
                "f": false
            }
        ],
        "rooms": [
        ]
    },
    "status": "ok",
    "success": true
}


Thanks

OK both use protocol 1.0 so should work (ie have “pv”: “1.0”). I’ll take a closer look at the json in the morning to see if there is any logical reason parsing it might be failing. I may end up building a ‘special’ version for you with some extra logging.

There are snapshot builds for OH itself, but the Marketplace builds should work with any OH 5.0 releases. I’m currently running 5.0.1. The latest jar is always at https://smedley.id.au/tmp/org.openhab.binding.roborock-5.1.0-SNAPSHOT.jar

Can you confirm the build string from your log? ie the string that looks like:

bundle org.openhab.binding.roborock:5.1.0.202508230708

The fact that decryption fails, and device detection fails, makes me think it’s unable to parse that json, so also unable to use the correct localKey.

ok @_David I understand the problem. I ‘guessing’ you are sharing your vacuums with another account?

For me, the devices are listed under:

"devices": \[\],

For your account, they’re listed under:

"receivedDevices": \[\],

I should be able to fix this pretty easily, I’ll just add devices under either/both blocks.

Edit: https://smedley.id.au/tmp/org.openhab.binding.roborock-5.1.0-SNAPSHOT.jar might fix this. The code right now is a copy/paste with devices changed to receivedDevices - so I need to refactor it before committing, but I’m semi-confident it should work.

I’ve tried sharing vacuums here but it always tells me the account doesn’t exist even though it does!

Hey @Paul_Smedley ,

that looks great! Awesome, I found both of may Cleaners (the other one was already added.. :slight_smile: ) :

I will test that in the evening..

Good Job.. :slight_smile:

Good news! I’ll refactor the code today and commit the changes :slight_smile:

If is been able to share my vacuums with another account I would have fixed this weeks ago :slight_smile:

Code now committed, and build updated. Still working here for my ‘owned’ devices :slight_smile:

Also updated the changelog in Post 1.

Thanks for providing and actively working on that Binding!

Since today I got the following error in the bridge thing:

COMMUNICATION_ERROR
MQTT disconnected (source SERVER): CONNECT failed as CONNACK contained an Error Code: NOT_AUTHORIZED.

Since I did not change anything regarding MQTT and the Binding was working for weeks, I don’t know, what happened.

In an earlier restart of Openhab I also noticed the hivemq dependency not met warning in logs.

Using Milestone Release 5.0.1 with Marketplace Binding from 26th Aug.

Edit:

Sorry, I did not come along with the search function.

Removing and recreating the Bridge did the trick!

1 Like

Glad you workedit out. You probably could have just removed the cached json from the old bridge. Did you internet drop out or anything?

I’m probably going to switch the paho mqtt, I keep experienced the issue of the flow of messages ceasing with hivemq. Just running some more tests locally to confirm paho is indeed more reliable.

First let me say thanks for your work on this binding @Paul_Smedley!!!

I installed the binding today running the latest 5.1 snapshot (build 4807).

Once I put in the right password for my account, the binding discovered my Q5 Max+ vacuum. So far so good.

I did see an exception, which I think happened while I still had the bad password in my config. Sadly, it was before I had the binding in debug mode. Sorry.

Here’s the exception. Perhaps it will have some clues and help you decide how you want to handle. Sorry for lack of debug logging.

2025-08-27 15:55:53.258 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.NullPointerException: Cannot read field "rrHomeId" because "home.data" is null
	at org.openhab.binding.roborock.internal.RoborockAccountHandler.refreshHomeData(RoborockAccountHandler.java:141) ~[?:?]
	at org.openhab.core.cache.ExpiringCache.refreshValue(ExpiringCache.java:103) ~[?:?]
	at org.openhab.core.cache.ExpiringCache.getValue(ExpiringCache.java:73) ~[?:?]
	at org.openhab.binding.roborock.internal.RoborockAccountHandler.getHomeData(RoborockAccountHandler.java:134) ~[?:?]
	at org.openhab.binding.roborock.internal.discovery.RoborockVacuumDiscoveryService.getHomeData(RoborockVacuumDiscoveryService.java:87) ~[?:?]
	at org.openhab.binding.roborock.internal.discovery.RoborockVacuumDiscoveryService.discover(RoborockVacuumDiscoveryService.java:107) ~[?:?]
	at org.openhab.binding.roborock.internal.discovery.RoborockVacuumDiscoveryService.startScan(RoborockVacuumDiscoveryService.java:121) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) [?:?]

Hey @Paul_Smedley ,

since yesterday my Account handler is offline:

Yestderday we had sim internet issues. I saw thta thie bind having touble, at teh evening, so I disable the handler, and activated it in the morning. Unfortenally I’m still not able to get the account online again.

2025-08-28 10:16:37.598 [DEBUG] [overy.RoborockVacuumDiscoveryService] - Starting device discovery
2025-08-28 10:16:37.598 [DEBUG] [roborock.internal.RoborockWebTargets] - Calling url: https://euiot.roborock.com/api/v1/getHomeDetail
2025-08-28 10:16:37.598 [TRACE] [roborock.internal.RoborockWebTargets] - GET request for https://euiot.roborock.com/api/v1/getHomeDetail
2025-08-28 10:16:37.615 [TRACE] [roborock.internal.RoborockWebTargets] - JSON response: '{"code":200,"msg":"success","data":{"id":SOMEID,"name":"My Home","tuyaHomeId":0,"rrHomeId":XXXXXXX,"deviceListOrder":null}}'
2025-08-28 10:16:37.620 [DEBUG] [roborock.internal.RoborockWebTargets] - Calling url: https://api-eu.roborock.com/v3/user/homes/XXXXXXXX
2025-08-28 10:16:37.620 [TRACE] [roborock.internal.RoborockWebTargets] - GET request for https://api-eu.roborock.com/v3/user/homes/XXXXXXX
2025-08-28 10:16:37.668 [TRACE] [roborock.internal.RoborockWebTargets] - JSON response: '{"api":null,"result":{"id":XXXXXXX,"name":"My Home","lon":null,"lat":null,"geoName":null,"products":[{"id":"ZfkRY1ldXXXXXXXXXX","name":"Roborock Qrevo S","model":"roborock.vacuum.a104","iconUrl":null,"attribute":null,"capability":0,"category":"robot.vacuum.cleaner","schema":[{"id":101,"name":"rpc_request","code":"rpc_request","mode":"rw","type":"RAW","property":null},{"id":102,"name":"rpc_response","code":"rpc_response","mode":"rw","type":"RAW","property":null},{"id":120,"name":"错误代码","code":"error_code","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":121,"name":"设备状态","code":"state","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":122,"name":"设备电量","code":"battery","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":123,"name":"清扫模式","code":"fan_power","mode":"rw","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":124,"name":"拖地模式","code":"water_box_mode","mode":"rw","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":125,"name":"主刷寿命","code":"main_brush_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":126,"name":"边刷寿命","code":"side_brush_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":127,"name":"滤网寿命","code":"filter_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":128,"name":"额外状态","code":"additional_props","mode":"ro","type":"RAW","property":null},{"id":130,"name":"完成事件","code":"task_complete","mode":"ro","type":"RAW","property":null},{"id":131,"name":"电量不足任务取消","code":"task_cancel_low_power","mode":"ro","type":"RAW","property":null},{"id":132,"name":"运动中任务取消","code":"task_cancel_in_motion","mode":"ro","type":"RAW","property":null},{"id":133,"name":"充电状态","code":"charge_status","mode":"ro","type":"RAW","property":null},{"id":134,"name":"烘干状态","code":"drying_status","mode":"ro","type":"RAW","property":null},{"id":135,"name":"离线原因细分","code":"offline_status","mode":"ro","type":"RAW","property":null}]},{"id":"ldHlB6****************","name":"Roborock Qrevo","model":"roborock.vacuum.a75","iconUrl":null,"attribute":null,"capability":0,"category":"robot.vacuum.cleaner","schema":[{"id":101,"name":"rpc_request","code":"rpc_request","mode":"rw","type":"RAW","property":null},{"id":102,"name":"rpc_response","code":"rpc_response","mode":"rw","type":"RAW","property":null},{"id":120,"name":"错误代码","code":"error_code","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":121,"name":"设备状态","code":"state","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":122,"name":"设备电量","code":"battery","mode":"ro","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":123,"name":"清扫模式","code":"fan_power","mode":"rw","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":124,"name":"拖地模式","code":"water_box_mode","mode":"rw","type":"ENUM","property":"{\"range\": [\"\"]}"},{"id":125,"name":"主刷寿命","code":"main_brush_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":126,"name":"边刷寿命","code":"side_brush_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":127,"name":"滤网寿命","code":"filter_life","mode":"rw","type":"VALUE","property":"{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"null\", \"scale\": 1}"},{"id":128,"name":"额外状态","code":"additional_props","mode":"ro","type":"RAW","property":null},{"id":130,"name":"完成事件","code":"task_complete","mode":"ro","type":"RAW","property":null},{"id":131,"name":"电量不足任务取消","code":"task_cancel_low_power","mode":"ro","type":"RAW","property":null},{"id":132,"name":"运动中任务取消","code":"task_cancel_in_motion","mode":"ro","type":"RAW","property":null},{"id":133,"name":"充电状态","code":"charge_status","mode":"ro","type":"RAW","property":null},{"id":134,"name":"烘干状态","code":"drying_status","mode":"ro","type":"RAW","property":null},{"id":135,"name":"离线原因细分","code":"offline_status","mode":"ro","type":"RAW","property":null}]}],"devices":[],"receivedDevices":[{"duid":"2kQJEghi0fESC***","name":"Q Revo oben","attribute":null,"activeTime":1756027646,"createTime":0,"localKey":"ZqFdNTs5cccC1X5M","runtimeEnv":null,"timeZoneId":"Europe/Berlin","iconUrl":"","productId":"ZfkRY****","lon":null,"lat":null,"share":true,"shareTime":1755798289,"online":true,"fv":"02.07.14","pv":"1.0","roomId":null,"tuyaUuid":null,"tuyaMigrated":false,"extra":"{}","setting":null,"sn":"R77MED********","cid":null,"featureSet":"2247397454282751","newFeatureSet":"42BA8C587EDAFFFE","deviceStatus":{"121":5,"122":26,"123":102,"124":202,"125":53,"126":0,"127":76,"128":1,"133":1,"120":0,"134":0},"silentOtaSwitch":false,"shareType":"UNLIMITED_TIME","shareExpiredTime":null,"f":false},{"duid":"14NTtjLuxDD******","name":"Qrevo unten","attribute":null,"activeTime":1756031037,"createTime":0,"localKey":"xmArsIklOkJskcit","runtimeEnv":null,"timeZoneId":"Europe/Berlin","iconUrl":"","productId":"ldHlB6hwVP****"lon":null,"lat":null,"share":true,"shareTime":1755798290,"online":true,"fv":"02.20.60","pv":"1.0","roomId":null,"tuyaUuid":null,"tuyaMigrated":false,"extra":"{}","setting":null,"sn":"R62MES3*******","cid":null,"featureSet":"2238601361260543","newFeatureSet":"100A80505EDEFFFE","deviceStatus":{"121":8,"122":39,"123":102,"124":201,"125":75,"126":89,"127":89,"128":0,"133":1,"134":1,"120":52},"silentOtaSwitch":false,"shareType":"UNLIMITED_TIME","shareExpiredTime":null,"f":false}],"rooms":[]},"status":"ok","success":true}'
2025-08-28 10:16:40.406 [DEBUG] [rock.internal.RoborockAccountHandler] - ad1357cefa: MQTT disconnected (source SERVER): CONNECT failed as CONNACK contained an Error Code: BANNED.
2025-08-28 10:16:42.935 [DEBUG] [rock.internal.RoborockAccountHandler] - ad1357cefa: MQTT disconnected (source SERVER): CONNECT failed as CONNACK contained an Error Code: BANNED.
2025-08-28 10:16:49.089 [DEBUG] [rock.internal.RoborockAccountHandler] - ad1357cefa: MQTT disconnected (source SERVER): CONNECT failed as CONNACK contained an Error Code: BANNED.
2025-08-28 10:17:45.007 [DEBUG] [rock.internal.RoborockAccountHandler] - ad1357cefa: MQTT disconnected (source SERVER): CONNECT failed as CONNACK contained an Error Code: BANNED.

Any Ideas on how to get that online again?

I’ll need to see a log with trace to understand why it couldn’t parse rrHomeId from the returned json.

I saw this a couple of months back. I had to deactivate the binding for ~ 24 hours before it would let me connect again. You’ll probably also need to remove the cached login details or create a new account thing. I’ll have another look at the disconnection code and maybe just make it put the Account offline when it gets disconnected by the server.

Sorry for the hassles :frowning:

New build uploaded that uses paho mqtt instead of hivemq. For whatever reason, the connection seems more stable/reliable with paho.

Thanks, for that.

I just installed ist an get:

Failed to connect to MQTT

So I just removed the binding and also cleared the cache and removed JSON DB (credentials) . –> I used different Credentials, as I shared my cleanears with different accounts :slight_smile:

After that I tried to install the binding via marketplace, unfortenally I can’t download it anymore !? It is also not showing up as installed?

Am I missing something?

Thanks

The binding shows in Marketplace for me? The only thing I can think of is that there was an internet outage overnight?

Hi,
I’m trying to run different commands via the “executeCommand” channel. The channel works fine — for example, if I run the command app_charge, the robot returns to the dock. Perfect! :slight_smile:

However, when I try to run
app_segment_clean[{"segments": [1], "repeat": 2}]
— I’ve also tried different variations, e.g. app_segment_clean[1] — nothing happens.

What could be the reason? If I clean the segment via the “vacuum room” channel, it works (segment 1 does exist).

How can I debug this? I don’t have any logs, or at least I don’t see any.

Finally got it running today. Thx

Several restarts and clean cache made the cleaner show up in the INBOX.

It still was not possible to install the thing by choosing the binding.

Looks like a bug, the parameters aren’t being sent to the robot. I’ll investigate when I have time.

Thinking about it, as I recall, I didn’t consider that a command would have Params, so I think I’m just sending the command. This should be pretty easy to fix. Will try and look when I’m home this afternoon.

Should be fixed in latest build.

Example syntax is:

openhab:send Roborock_Qrevo_S_Execute_RPC_cloud_Command "app_segment_clean,[{"segments": [16,17\], "repeat": 2}]"

Anything before the first comma goes to the command, anything after that gets sent as params