python-roborock 2.40.0__tar.gz → 2.40.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {python_roborock-2.40.0 → python_roborock-2.40.1}/PKG-INFO +1 -1
  2. {python_roborock-2.40.0 → python_roborock-2.40.1}/pyproject.toml +1 -1
  3. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/protocols/v1_protocol.py +4 -5
  4. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_1_apis/roborock_client_v1.py +9 -8
  5. {python_roborock-2.40.0 → python_roborock-2.40.1}/LICENSE +0 -0
  6. {python_roborock-2.40.0 → python_roborock-2.40.1}/README.md +0 -0
  7. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/__init__.py +0 -0
  8. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/api.py +0 -0
  9. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/b01_containers.py +0 -0
  10. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/broadcast_protocol.py +0 -0
  11. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/callbacks.py +0 -0
  12. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/clean_modes.py +0 -0
  13. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/cli.py +0 -0
  14. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/cloud_api.py +0 -0
  15. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/code_mappings.py +0 -0
  16. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/command_cache.py +0 -0
  17. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/const.py +0 -0
  18. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/containers.py +0 -0
  19. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/device_features.py +0 -0
  20. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/README.md +0 -0
  21. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/__init__.py +0 -0
  22. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/a01_channel.py +0 -0
  23. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/b01_channel.py +0 -0
  24. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/cache.py +0 -0
  25. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/channel.py +0 -0
  26. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/device.py +0 -0
  27. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/device_manager.py +0 -0
  28. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/local_channel.py +0 -0
  29. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/mqtt_channel.py +0 -0
  30. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/b01/__init__.py +0 -0
  31. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/b01/props.py +0 -0
  32. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/dyad.py +0 -0
  33. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/status.py +0 -0
  34. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/trait.py +0 -0
  35. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/traits/zeo.py +0 -0
  36. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/v1_channel.py +0 -0
  37. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/devices/v1_rpc_channel.py +0 -0
  38. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/exceptions.py +0 -0
  39. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/mqtt/__init__.py +0 -0
  40. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/mqtt/roborock_session.py +0 -0
  41. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/mqtt/session.py +0 -0
  42. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/protocol.py +0 -0
  43. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/protocols/a01_protocol.py +0 -0
  44. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/protocols/b01_protocol.py +0 -0
  45. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/py.typed +0 -0
  46. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/roborock_future.py +0 -0
  47. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/roborock_message.py +0 -0
  48. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/roborock_typing.py +0 -0
  49. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/util.py +0 -0
  50. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_1_apis/__init__.py +0 -0
  51. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_1_apis/roborock_local_client_v1.py +0 -0
  52. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_1_apis/roborock_mqtt_client_v1.py +0 -0
  53. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_a01_apis/__init__.py +0 -0
  54. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_a01_apis/roborock_client_a01.py +0 -0
  55. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/version_a01_apis/roborock_mqtt_client_a01.py +0 -0
  56. {python_roborock-2.40.0 → python_roborock-2.40.1}/roborock/web_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-roborock
3
- Version: 2.40.0
3
+ Version: 2.40.1
4
4
  Summary: A package to control Roborock vacuums.
5
5
  Home-page: https://github.com/humbertogontijo/python-roborock
6
6
  License: GPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-roborock"
3
- version = "2.40.0"
3
+ version = "2.40.1"
4
4
  description = "A package to control Roborock vacuums."
5
5
  authors = ["humbertogontijo <humbertogontijo@users.noreply.github.com>"]
6
6
  license = "GPL-3.0-only"
@@ -157,19 +157,18 @@ class MapResponse:
157
157
  """The map data, decrypted and decompressed."""
158
158
 
159
159
 
160
- def create_map_response_decoder(security_data: SecurityData) -> Callable[[RoborockMessage], MapResponse]:
160
+ def create_map_response_decoder(security_data: SecurityData) -> Callable[[RoborockMessage], MapResponse | None]:
161
161
  """Create a decoder for V1 map response messages."""
162
162
 
163
- def _decode_map_response(message: RoborockMessage) -> MapResponse:
163
+ def _decode_map_response(message: RoborockMessage) -> MapResponse | None:
164
164
  """Decode a V1 map response message."""
165
165
  if not message.payload or len(message.payload) < 24:
166
166
  raise RoborockException("Invalid V1 map response format: missing payload")
167
167
  header, body = message.payload[:24], message.payload[24:]
168
168
  [endpoint, _, request_id, _] = struct.unpack("<8s8sH6s", header)
169
169
  if not endpoint.decode().startswith(security_data.endpoint):
170
- raise RoborockException(
171
- f"Invalid V1 map response endpoint: {endpoint!r}, expected {security_data.endpoint!r}"
172
- )
170
+ _LOGGER.debug("Received map response requested not made by this device, ignoring.")
171
+ return None
173
172
  try:
174
173
  decrypted = Utils.decrypt_cbc(body, security_data.nonce)
175
174
  except ValueError as err:
@@ -150,7 +150,7 @@ class RoborockClientV1(RoborockClient, ABC):
150
150
  """Roborock client base class for version 1 devices."""
151
151
 
152
152
  _listeners: dict[str, ListenerModel] = {}
153
- _map_response_decoder: Callable[[RoborockMessage], MapResponse] | None = None
153
+ _map_response_decoder: Callable[[RoborockMessage], MapResponse | None] | None = None
154
154
 
155
155
  def __init__(self, device_info: DeviceData, security_data: SecurityData | None) -> None:
156
156
  """Initializes the Roborock client."""
@@ -439,13 +439,14 @@ class RoborockClientV1(RoborockClient, ABC):
439
439
  elif data.payload and protocol == RoborockMessageProtocol.MAP_RESPONSE:
440
440
  if self._map_response_decoder is not None:
441
441
  map_response = self._map_response_decoder(data)
442
- queue = self._waiting_queue.get(map_response.request_id)
443
- if queue:
444
- queue.set_result(map_response.data)
445
- else:
446
- self._logger.debug(
447
- "Received unsolicited map response for request_id %s", map_response.request_id
448
- )
442
+ if map_response is not None:
443
+ queue = self._waiting_queue.get(map_response.request_id)
444
+ if queue:
445
+ queue.set_result(map_response.data)
446
+ else:
447
+ self._logger.debug(
448
+ "Received unsolicited map response for request_id %s", map_response.request_id
449
+ )
449
450
  else:
450
451
  queue = self._waiting_queue.get(data.seq)
451
452
  if queue: