Hi Paul, All my channels are read or written. Even the routine mapping and the floor mapping. Thiis is the only channel which remains empty (NULL). I f I look in the trace logs, this is the one closest to what you describe:
org.openhab.binding.roborock.internal.RoborockVacuumHandler
Received MQTT message: {“t”:1768141230,“dps”:{“102”:“{“id”:20475,“result”:[[16,“8694029”,13],[17,“8694028”,6],[18,“8693296”,12],[19,“9693435”,12]]}”}}
You are right. When I change the name of the vacuum thing to the DUID, it is working. At least I get values for most of the channels. That’s however not the way I prefer to name my things. Did someone already create an issue on github for that?
Unfortunately, it does not allow setting the twofa via file. In the UI it is then displayed as blank and sends another verification mail. I always try my files from a fresh installation. Anything I am missing?
It’t working via files, that’s what I did to. First create the Bridge with only the e-mail. When you get the mail add the “twofa” and it should become online (maybe you have to stop and start the thing via the UI for that). After that add the vacuum thing.
The token file is stored in /var/lib/openhab/json-db (or something like that). Moving this file across as well as the things file should work provided the thing-id is kept the same.
Not a stupid question - the Q7 and Q10 series use different protocols to other vacuums. Support for this is planned (time permitting) once the Homie and/or python-roborock implementations are complete.
I‘m trying to build a Dashboard for cleaning different rooms of my house in different cleaning modes. I‘m thinking about some switches in my Main UI to configure what the robot has to clean, and finally send commands via „executeCommand“ to the robot.
As I figured out in this thread, there is a command called „app_segment_clean“ which tells the robot which rooms should be cleaned. I‘m looking for commands for changing the active map and for selecting the cleaning mode like „vac&mop“ or only „vac“.
Is there a documentation about the available commands or a tutorial? Or has maybe anyone figured out which commands I have to send e. g. for the following scenario:
And, BTW, I also saw this exception in the log shortly after binding startup.
2026-02-22 13:13:07.884 [DEBUG] [enhab.binding.roborock.internal.util.ProtocolUtils] - Exception decrypting payload for protocol 102: Failed to decrypt data using AES/ECB/PKCS5Padding.
org.openhab.binding.roborock.internal.RoborockException: Failed to decrypt data using AES/ECB/PKCS5Padding.
at org.openhab.binding.roborock.internal.util.ProtocolUtils.decrypt(ProtocolUtils.java:69) ~[?:?]
at org.openhab.binding.roborock.internal.util.ProtocolUtils.handleDataProtocol(ProtocolUtils.java:219) ~[?:?]
at org.openhab.binding.roborock.internal.util.ProtocolUtils.handleMessage(ProtocolUtils.java:258) ~[?:?]
at org.openhab.binding.roborock.internal.RoborockVacuumHandler.handleMessage(RoborockVacuumHandler.java:435) ~[?:?]
at org.openhab.binding.roborock.internal.RoborockAccountHandler.messageArrived(RoborockAccountHandler.java:405) ~[?:?]
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:519) ~[?:?]
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:417) ~[?:?]
at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:214) ~[?:?]
at java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
at com.sun.crypto.provider.CipherCore.unpad(CipherCore.java:861) ~[?:?]
at com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:941) ~[?:?]
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:734) ~[?:?]
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446) ~[?:?]
at javax.crypto.Cipher.doFinal(Cipher.java:2244) ~[?:?]
at org.openhab.binding.roborock.internal.util.ProtocolUtils.decrypt(ProtocolUtils.java:66) ~[?:?]
... 8 more
I was sort of meddling with Roborock binding recently and I was wondering @Paul_Smedley if you had any luck with local protocol? I kind of got something working already and I was wondering if I should try continue working on it (its good enough in current state for me) to polish to OH standard or if I should keep it as it is, till you got time to solve it properly. I mainly wanted to see, if I could perhaps increase refresh rate of map without rate limits and it seems, it is sort of possible in local mode - mainly due to having to call only one MQTT endpoint instead of 8.
I haven’t really investigate local protocol yet - I know what to do, but Java is kinda hard for me, so working out how to abstract the local vs mqtt commands hasn’t hit my priority list as yet.