DeebotUniverse / client.py

Deebot client library in python
https://deebot.readthedocs.io
GNU General Public License v3.0
28 stars 45 forks source link

Seems T50 Pro use zstd instead of 7z as the compression algorithm of map message #595

Open mzr1996 opened 2 weeks ago

mzr1996 commented 2 weeks ago

Checks

The problem

日志记录器: deebot_client.message
来源: /usr/local/lib/python3.12/site-packages/deebot_client/message.py:196
首次出现: 2024年11月13日 15:28:30 (8 次总计出现)
上次记录: 2024年11月13日 15:28:30

    ...
    Could not parse getMapSubSet: {..., 'compress': 1, 'value': 'KLUv/SB//QEAMgQKDKClbQC+WNsvI/5vYPMSO6jz8h7OwN2BYlTHRR2DYgSeurlRRyp2UAgALXwANbAWWqAuACQBKiDgFiUJ'}

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/deebot_client/message.py", line 190, in __handle_body_data
    response = cls._handle_body_data(event_bus, data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/deebot_client/message.py", line 233, in _handle_body_data
    return cls._handle_body_data_dict(event_bus, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/deebot_client/commands/json/map.py", line 278, in _handle_body_data_dict
    coordinates = decompress_7z_base64_data(data["value"]).decode()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/deebot_client/util/__init__.py", line 41, in decompress_7z_base64_data
    return dec.decompress(final_array)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
_lzma.LZMAError: Input format not supported by decoder

I checked the data['value'] and find it should be zstd format instead of 7z format, which means we need to use zstd instead of lzma package to decompress it.

On which deebot device (vacuum) you have the issue?

Deebot T50 Pro

Which version of the deebot-client are you using?

8.4.0

Country

china

Continent

unkown

Anything in the logs that might be useful for us?

No response

Additional information

No response

edenhaus commented 3 days ago

Can you open a PR to add a option for it? Can we detect automatically which algorithm is used? If not please also extend the capabilities for it, so we can set zstd for the T50