python-roborock 7.2.2__tar.gz → 7.2.3__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 (132) hide show
  1. {python_roborock-7.2.2 → python_roborock-7.2.3}/PKG-INFO +1 -1
  2. {python_roborock-7.2.2 → python_roborock-7.2.3}/pyproject.toml +1 -1
  3. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/cli.py +6 -21
  4. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/map.py +11 -18
  5. {python_roborock-7.2.2 → python_roborock-7.2.3}/.gitignore +0 -0
  6. {python_roborock-7.2.2 → python_roborock-7.2.3}/LICENSE +0 -0
  7. {python_roborock-7.2.2 → python_roborock-7.2.3}/README.md +0 -0
  8. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/__init__.py +0 -0
  9. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/broadcast_protocol.py +0 -0
  10. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/callbacks.py +0 -0
  11. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/const.py +0 -0
  12. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/__init__.py +0 -0
  13. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q10/__init__.py +0 -0
  14. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
  15. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
  16. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q7/__init__.py +0 -0
  17. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
  18. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/b01_q7/b01_q7_containers.py +0 -0
  19. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/code_mappings.py +0 -0
  20. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/containers.py +0 -0
  21. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/dyad/__init__.py +0 -0
  22. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/dyad/dyad_code_mappings.py +0 -0
  23. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/dyad/dyad_containers.py +0 -0
  24. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/mower/__init__.py +0 -0
  25. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/mower/mower_code_mappings.py +0 -0
  26. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/mower/mower_containers.py +0 -0
  27. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/v1/__init__.py +0 -0
  28. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/v1/v1_clean_modes.py +0 -0
  29. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/v1/v1_code_mappings.py +0 -0
  30. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/v1/v1_containers.py +0 -0
  31. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/zeo/__init__.py +0 -0
  32. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/zeo/zeo_code_mappings.py +0 -0
  33. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/data/zeo/zeo_containers.py +0 -0
  34. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/device_features.py +0 -0
  35. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/README.md +0 -0
  36. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/__init__.py +0 -0
  37. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/cache.py +0 -0
  38. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/device.py +0 -0
  39. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/device_manager.py +0 -0
  40. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/file_cache.py +0 -0
  41. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/rpc/__init__.py +0 -0
  42. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/rpc/a01_channel.py +0 -0
  43. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/rpc/b01_q10_channel.py +0 -0
  44. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/rpc/b01_q7_channel.py +0 -0
  45. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/rpc/v1_channel.py +0 -0
  46. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/__init__.py +0 -0
  47. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/a01/__init__.py +0 -0
  48. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/a01/device_feature.py +0 -0
  49. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/__init__.py +0 -0
  50. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/__init__.py +0 -0
  51. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/button_light.py +0 -0
  52. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/child_lock.py +0 -0
  53. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/clean_history.py +0 -0
  54. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/command.py +0 -0
  55. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/common.py +0 -0
  56. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/consumable.py +0 -0
  57. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/do_not_disturb.py +0 -0
  58. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/dust_collection.py +0 -0
  59. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/maps.py +0 -0
  60. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/network_info.py +0 -0
  61. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/remote.py +0 -0
  62. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/status.py +0 -0
  63. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
  64. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q10/volume.py +0 -0
  65. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q7/__init__.py +0 -0
  66. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
  67. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q7/map.py +0 -0
  68. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/b01/q7/map_content.py +0 -0
  69. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/common.py +0 -0
  70. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/traits_mixin.py +0 -0
  71. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/__init__.py +0 -0
  72. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/child_lock.py +0 -0
  73. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/clean_summary.py +0 -0
  74. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/command.py +0 -0
  75. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/common.py +0 -0
  76. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/consumeable.py +0 -0
  77. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/device_features.py +0 -0
  78. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
  79. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
  80. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/flow_led_status.py +0 -0
  81. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/home.py +0 -0
  82. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/led_status.py +0 -0
  83. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/map_content.py +0 -0
  84. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/maps.py +0 -0
  85. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/network_info.py +0 -0
  86. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/obstacle_photos.py +0 -0
  87. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/rooms.py +0 -0
  88. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/routines.py +0 -0
  89. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
  90. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/status.py +0 -0
  91. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
  92. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/volume.py +0 -0
  93. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
  94. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/transport/__init__.py +0 -0
  95. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/transport/channel.py +0 -0
  96. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/transport/local_channel.py +0 -0
  97. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/devices/transport/mqtt_channel.py +0 -0
  98. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/diagnostics.py +0 -0
  99. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/exceptions.py +0 -0
  100. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/__init__.py +0 -0
  101. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/b01_grid_layers.py +0 -0
  102. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/b01_map_parser.py +0 -0
  103. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/b01_q10_map_parser.py +0 -0
  104. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/b01_q10_overlays.py +0 -0
  105. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/b01_q10_render.py +0 -0
  106. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/map_parser.py +0 -0
  107. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/proto/__init__.py +0 -0
  108. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/proto/b01_scmap.proto +0 -0
  109. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/proto/b01_scmap_pb2.py +0 -0
  110. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/map/room_colors.py +0 -0
  111. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/mqtt/__init__.py +0 -0
  112. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/mqtt/health_manager.py +0 -0
  113. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/mqtt/roborock_session.py +0 -0
  114. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/mqtt/session.py +0 -0
  115. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocol.py +0 -0
  116. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocols/__init__.py +0 -0
  117. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocols/a01_protocol.py +0 -0
  118. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocols/b01_q10_protocol.py +0 -0
  119. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocols/b01_q7_protocol.py +0 -0
  120. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/protocols/v1_protocol.py +0 -0
  121. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/py.typed +0 -0
  122. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/roborock_message.py +0 -0
  123. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/roborock_typing.py +0 -0
  124. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/__init__.py +0 -0
  125. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/a01_simulator.py +0 -0
  126. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/b01_q10_simulator.py +0 -0
  127. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/channel.py +0 -0
  128. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/cloud.py +0 -0
  129. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/simulator.py +0 -0
  130. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/testing/v1_simulator.py +0 -0
  131. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/util.py +0 -0
  132. {python_roborock-7.2.2 → python_roborock-7.2.3}/roborock/web_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-roborock
3
- Version: 7.2.2
3
+ Version: 7.2.3
4
4
  Summary: A package to control Roborock vacuums.
5
5
  Project-URL: Repository, https://github.com/python-roborock/python-roborock
6
6
  Project-URL: Documentation, https://python-roborock.readthedocs.io/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-roborock"
3
- version = "7.2.2"
3
+ version = "7.2.3"
4
4
  description = "A package to control Roborock vacuums."
5
5
  authors = [{ name = "humbertogontijo", email = "humbertogontijo@users.noreply.github.com" }, {name="Lash-L"}, {name="allenporter"}]
6
6
  requires-python = ">=3.11, <4"
@@ -594,9 +594,9 @@ async def maps(ctx, device_id: str):
594
594
  await _display_v1_trait(context, device_id, lambda v1: v1.maps)
595
595
 
596
596
 
597
- # The Q10 publishes its map asynchronously after a dpMultiMap list/get request.
598
- # Firmware throttles pushes to ~once per 60-70s, so rapid re-requests may not be
599
- # answered immediately. This bounds how long a one-shot CLI command waits.
597
+ # The Q10 publishes its current map asynchronously after a REQUEST_DPS. Firmware
598
+ # throttles pushes to ~once per 60-70s, so rapid re-requests may not be answered
599
+ # immediately. This bounds how long a one-shot CLI command waits.
600
600
  _Q10_MAP_PUSH_TIMEOUT = 30.0
601
601
 
602
602
 
@@ -609,10 +609,9 @@ async def _await_q10_map_push(
609
609
  ) -> bool:
610
610
  """Request Q10 map content and wait for usable map-trait state.
611
611
 
612
- A Q10 needs a saved-map ID before it can request content. The map list and
613
- content have independent refresh schedules, so the list is requested only
614
- when no ID is stored. The content then arrives as a later ``MAP_RESPONSE``
615
- and is published through the standard trait update interface.
612
+ The read-only ``REQUEST_DPS`` request returns immediately; current map
613
+ content arrives as a later ``MAP_RESPONSE`` and is published through the
614
+ standard trait update interface.
616
615
  """
617
616
  loop = asyncio.get_running_loop()
618
617
  updated: asyncio.Future[None] = loop.create_future()
@@ -624,20 +623,6 @@ async def _await_q10_map_push(
624
623
  unsub = properties.map.add_update_listener(on_update)
625
624
  try:
626
625
  async with asyncio.timeout(timeout):
627
- if properties.maps.current_map_id is None:
628
- map_list_updated: asyncio.Future[None] = loop.create_future()
629
-
630
- def on_map_list_update() -> None:
631
- if properties.maps.current_map_id is not None and not map_list_updated.done():
632
- map_list_updated.set_result(None)
633
-
634
- unsub_maps = properties.maps.add_update_listener(on_map_list_update)
635
- try:
636
- await properties.maps.refresh()
637
- if properties.maps.current_map_id is None:
638
- await map_list_updated
639
- finally:
640
- unsub_maps()
641
626
  await properties.map.refresh()
642
627
  await updated
643
628
  return True
@@ -7,10 +7,10 @@ Map-related state arrives on three independent streams:
7
7
  * restricted zones, virtual walls and dock state arrive as ordinary DPS values.
8
8
 
9
9
  ``MapDpsTrait`` owns the low-level map-specific DPS read model.
10
- ``MapContentTrait`` uses a stored ID from ``MapsTrait`` only when it requests
11
- content. It combines the latest map and trace packets with the map DPS state
12
- through the pure functions in :mod:`roborock.map.b01_q10_render`. Map-list
13
- updates do not refresh content.
10
+ ``MapContentTrait`` requests a current-map push through ``REQUEST_DPS`` and
11
+ combines the latest map and trace packets with the map DPS state through the
12
+ pure functions in :mod:`roborock.map.b01_q10_render`. Saved-map list/detail
13
+ operations remain on ``MapsTrait``.
14
14
  """
15
15
 
16
16
  import logging
@@ -107,20 +107,13 @@ class MapContentTrait(TraitUpdateListener):
107
107
  self._map_dps.add_update_listener(self._map_dps_updated)
108
108
 
109
109
  async def refresh(self) -> None:
110
- """Request content for the first map in the latest saved-map list."""
111
- if (map_id := self._maps.current_map_id) is None:
112
- raise RoborockException("Cannot request Q10 map content before the map list is available")
113
- # Map lists and map content can change at different times. Reuse the
114
- # stored ID so a content refresh does not also refresh the list.
115
- await self._command.send(
116
- B01_Q10_DP.COMMON,
117
- {
118
- str(B01_Q10_DP.MULTI_MAP.code): {
119
- "op": "get",
120
- "id": map_id,
121
- }
122
- },
123
- )
110
+ """Request a safe asynchronous current-map/status push.
111
+
112
+ Some ss07 firmware treats ``dpMultiMap op:get`` as an active
113
+ cleaning/relocation command. ``REQUEST_DPS`` is the device's read-only
114
+ current-map request and does not depend on a saved-map ID.
115
+ """
116
+ await self._command.send(B01_Q10_DP.REQUEST_DPS, params={})
124
117
 
125
118
  @property
126
119
  def image_content(self) -> bytes | None:
File without changes