X9 Pro Omni fails to retrieve map data
Checks
- [x] I have searched the existing issues and no issue is describing my issue
- [x] I have checked the FAQ
- [x] I have checked the documentation
- [x] I have installed the latest version
The problem
The implementation of X9 Pro Omni in #1102 doesn't contain the map feature because there are error logs when implementing it using the provided tools.
On which deebot device (vacuum) you have the issue?
Deebot X9 Pro Omni
Which version of the deebot-client are you using?
a4c0220f4de6ebb689d1ad799f529ad85df9ee62
Country
fr
Continent
eu
Anything in the logs that might be useful for us?
2025-08-16 13:36:43.244 ERROR (MainThread) [deebot_client.message] Handler for message getMapSubSet: {'code': 20003, 'msg': 'rcp not support'} returned no response. This is a bug should not happen. Please report it.
2025-08-16 13:36:43.244 WARNING (MainThread) [deebot_client.message] Could not parse getMapSubSet: {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.42.2', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1755351403010', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}}
2025-08-16 13:36:43.244 WARNING (MainThread) [deebot_client.message] Could not parse getMapSubSet: {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.42.2', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1755351403010', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}}
2025-08-16 13:36:43.244 WARNING (MainThread) [deebot_client.command] Could not parse getMapSubSet: {'ret': 'ok', 'resp': {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.42.2', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1755351403010', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}}, 'id': 'lwyB', 'payloadType': 'j'}
Additional information
No response
Can you check if https://github.com/DeebotUniverse/client.py/pull/1083 would fix your issue. If yes, please provide test data as without test I don't will merge anything expect capabilities files
This produced still the same error logs, but a valid map as well:
map=CapabilityMap(
cached_info=CapabilityEvent(
CachedMapInfoEvent, [GetCachedMapInfo(version=2)]
),
changed=CapabilityEvent(MapChangedEvent, []),
major=CapabilityEvent(MajorMapEvent, [GetMajorMap()]),
minor=CapabilityExecute(GetMinorMap),
multi_state=CapabilitySetEnable(
MultimapStateEvent, [GetMultimapState()], SetMultimapState
),
map_info=CapabilityExecute(GetMapInfoV2),
position=CapabilityEvent(PositionsEvent, [GetPos()]),
relocation=CapabilityExecute(SetRelocationState),
rooms=CapabilityEvent(RoomsEvent, [GetCachedMapInfo(version=2)]),
trace=CapabilityEvent(MapTraceEvent, [GetMapTrace()]),
),
How can I provide test data?
Enable debug logs so all events are logged.
Afterwards, you need to manually create a test file similar to https://github.com/DeebotUniverse/client.py/blob/dev/tests/data/map/test_1.py
Create a file at the same location with test_2.py
@edenhaus I don't know whether I'll have time to work on this in the near future. Would you be able to cut a release so the package can be updated in HA and the device at least recognized with basic features?
I’m interested in partial support as well. Maps are less interesting than basic functionality to me.
@acronce, please only comment with relevant information to an issue, especially when I cut a release containing basic support last week...
I have an X8 Pro Omni.
I applied https://github.com/DeebotUniverse/client.py/pull/1083 but the the map is not visible and I have:
2025-09-15 14:58:47.611 ERROR (MainThread) [deebot_client.message] Handler for message getMapSubSet: {'code': 20003, 'msg': 'rcp not support'} returned no response. This is a bug should not happen. Please report it. 2025-09-15 14:58:47.611 WARNING (MainThread) [deebot_client.message] Could not parse getMapSubSet: {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.121.0', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1757941126996', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}} 2025-09-15 14:58:47.612 WARNING (MainThread) [deebot_client.message] Could not parse getMapSubSet: {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.121.0', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1757941126996', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}} 2025-09-15 14:58:47.612 WARNING (MainThread) [deebot_client.command] Could not parse getMapSubSet: {'ret': 'ok', 'resp': {'body': {'code': 20003, 'msg': 'rcp not support'}, 'header': {'fwVer': '1.121.0', 'hwVer': '0.1.1', 'pri': 1, 'ts': '1757941126996', 'tzm': 480, 'ver': '0.0.1', 'wkVer': '0.1.54'}}, 'id': 'kpag', 'payloadType': 'j'}
@Sanji78 Blindly applying 1083 will, of course, not work, as you have a different bot than the one in the PR. For testing, you need to adjust your capabilities file and still the PR is work in progress so maybe It will not work for your model
@edenhaus is there any way I can collaborate to this? I can produce logs from my running X8 PRO OMNI and I can also help in patching code if needed. I think that T8Omni X8Omni and X9Omni have the same apis, same capabilities (e.g. discrete water levels and map handling) etc... I already built 4 custom components for other integrations and I'm willing to help here.
The biggest problem is that no public API spec is available; therefore, only users with the model can add/improve the support. The repo on high level is structured like:
- A package/folder for commands, separated by protocol (XML or json)
- A package/folder for message, separated by protocol (XML or json)
- The difference between commands and messages is that the bot sends messages without requesting it. Instead, commands are initiated by the client (HA or APP) to get or set/execute something on the bot
- The hardware package/folder is used to set the capabilities for all supported model. If a model is has the same capabilities as another one, a symbolic link should be created between the two so modification will be reflected on both.
So if you want to test 1083 with your bot, you need to see what needs to be changed on the capabilities to enable support for the different map (This is only a temporary solution as I don't like having to maintain two map implementations. Therefore, after tests are added, I will migrate it to Rust)
I hope this helps, but I cannot help you much further at the moment, as I broke my leg, and that is currently my biggest challenge.
@edenhaus thanks for your reply and I'm sorry to hear about your leg. I hope you can get better soon. P.S. I see you're Italian too... If you speak Italian, maybe we could collaborate faster (e.g. whatsapp/telegram) and maybe we can extend this wonderful project also to X8 OMNI PRO. I am a good programmer, but I would need guidance to enter into this project, as I'm new to it. P.P.S. I can also intercept easily MQTT traffic for my Deebot :)
Yes, I'm Italian, but I live in South Tyrol (Südtirol/Alto Adige). Therefore, my mother tongue is German. Writing in English is easier for me than in Italian, as I don't speak/use Italian frequently. Nevertheless, I can offer to write me on Discord (my username is edenhaus) as I don't want to give out my private number here.
Perfect when you can intercept the traffic, as that is required to add new commands and improve support. For example, for 1083, I still need test data, and my bot does not support the new map.
@edenhaus thanks a lot for this opportunity!!! I sent you a friend request invite on Discord.
@Sanji78 does the map now work for you in Home Assistant 2025.11? I have the latest Home Assistant Version with latest deebot library but I still cannot see the map in Home Assistant:
ok I did some debugging and found some logs that indicate that there is some issue when handling the onMapInfo_V2 body:
DEBUG:deebot_client.device:Try to handle message onMapInfo_V2: b'{"body":{"data":{"batid":"chknef","index":"1","info":"KLUv/WD3TIVrAJqneBERoCVpMav6NmRzZW...","infoSize":19959,"mid":"1211678598","msgid":"","outlineComplete":0,"outlineVer":"2","serial":"1","type":"0","using":0}},"header":{"fwVer":"1.54.0","hwVer":"0.1.1","pri":1,"ts":"1762811169065","tzm":480,"ver":"0.0.1","wkVer":"0.1.54"}}'
DEBUG:deebot_client.message:Could not handle onMapInfo_V2 message: {'batid': 'chknef', 'index': '1', 'info': 'KLUv/WD3TIVrAJqneBERoCVpMav6NmRzZW...', 'infoSize': 19959, 'mid': '1211678598', 'msgid': '', 'outlineComplete': 0, 'outlineVer': '2', 'serial': '1', 'type': '0', 'using': 0}
I checked the code and found the following if clause in deebot_client/messages/json/map/__init__.py which caused the issue:
if outline_version != "1":
# Unsupported version
return HandlingResult.analyse()
Seems like my vacuum cleaner is using outline_version = 2 as it can be seen in the logs above. If I comment out this if all is working fine in home assistant:
So in my opinion we can change the if clause to if outline_version != "1" and outline_version != "2" because as it seems all is working fine with outline version 2 :) Any opinions about that?