python-roborock 7.4.0__tar.gz → 7.4.2__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.4.0 → python_roborock-7.4.2}/PKG-INFO +1 -1
  2. {python_roborock-7.4.0 → python_roborock-7.4.2}/pyproject.toml +1 -1
  3. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/a01/device_feature.py +18 -0
  4. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/map_parser.py +1 -57
  5. {python_roborock-7.4.0 → python_roborock-7.4.2}/.gitignore +0 -0
  6. {python_roborock-7.4.0 → python_roborock-7.4.2}/LICENSE +0 -0
  7. {python_roborock-7.4.0 → python_roborock-7.4.2}/README.md +0 -0
  8. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/__init__.py +0 -0
  9. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/broadcast_protocol.py +0 -0
  10. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/callbacks.py +0 -0
  11. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/cli.py +0 -0
  12. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/const.py +0 -0
  13. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/__init__.py +0 -0
  14. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q10/__init__.py +0 -0
  15. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
  16. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
  17. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q7/__init__.py +0 -0
  18. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
  19. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/b01_q7/b01_q7_containers.py +0 -0
  20. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/code_mappings.py +0 -0
  21. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/containers.py +0 -0
  22. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/dyad/__init__.py +0 -0
  23. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/dyad/dyad_code_mappings.py +0 -0
  24. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/dyad/dyad_containers.py +0 -0
  25. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/mower/__init__.py +0 -0
  26. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/mower/mower_code_mappings.py +0 -0
  27. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/mower/mower_containers.py +0 -0
  28. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/v1/__init__.py +0 -0
  29. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/v1/v1_clean_modes.py +0 -0
  30. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/v1/v1_code_mappings.py +0 -0
  31. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/v1/v1_containers.py +0 -0
  32. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/zeo/__init__.py +0 -0
  33. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/zeo/zeo_code_mappings.py +0 -0
  34. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/data/zeo/zeo_containers.py +0 -0
  35. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/device_features.py +0 -0
  36. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/README.md +0 -0
  37. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/__init__.py +0 -0
  38. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/cache.py +0 -0
  39. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/device.py +0 -0
  40. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/device_manager.py +0 -0
  41. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/file_cache.py +0 -0
  42. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/rpc/__init__.py +0 -0
  43. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/rpc/a01_channel.py +0 -0
  44. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/rpc/b01_q10_channel.py +0 -0
  45. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/rpc/b01_q7_channel.py +0 -0
  46. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/rpc/v1_channel.py +0 -0
  47. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/__init__.py +0 -0
  48. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/a01/__init__.py +0 -0
  49. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/__init__.py +0 -0
  50. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/__init__.py +0 -0
  51. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/button_light.py +0 -0
  52. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/child_lock.py +0 -0
  53. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/clean_history.py +0 -0
  54. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/command.py +0 -0
  55. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/common.py +0 -0
  56. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/consumable.py +0 -0
  57. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/do_not_disturb.py +0 -0
  58. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/dust_collection.py +0 -0
  59. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/map.py +0 -0
  60. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/maps.py +0 -0
  61. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/network_info.py +0 -0
  62. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/remote.py +0 -0
  63. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/status.py +0 -0
  64. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
  65. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q10/volume.py +0 -0
  66. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q7/__init__.py +0 -0
  67. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
  68. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q7/map.py +0 -0
  69. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/b01/q7/map_content.py +0 -0
  70. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/common.py +0 -0
  71. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/traits_mixin.py +0 -0
  72. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/__init__.py +0 -0
  73. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/child_lock.py +0 -0
  74. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/clean_summary.py +0 -0
  75. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/command.py +0 -0
  76. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/common.py +0 -0
  77. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/consumeable.py +0 -0
  78. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/device_features.py +0 -0
  79. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
  80. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
  81. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/flow_led_status.py +0 -0
  82. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/home.py +0 -0
  83. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/led_status.py +0 -0
  84. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/map_content.py +0 -0
  85. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/maps.py +0 -0
  86. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/network_info.py +0 -0
  87. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/obstacle_photos.py +0 -0
  88. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/rooms.py +0 -0
  89. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/routines.py +0 -0
  90. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
  91. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/status.py +0 -0
  92. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
  93. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/volume.py +0 -0
  94. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
  95. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/transport/__init__.py +0 -0
  96. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/transport/channel.py +0 -0
  97. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/transport/local_channel.py +0 -0
  98. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/devices/transport/mqtt_channel.py +0 -0
  99. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/diagnostics.py +0 -0
  100. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/exceptions.py +0 -0
  101. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/__init__.py +0 -0
  102. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/b01_grid_layers.py +0 -0
  103. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/b01_map_parser.py +0 -0
  104. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/b01_q10_map_parser.py +0 -0
  105. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/b01_q10_overlays.py +0 -0
  106. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/b01_q10_render.py +0 -0
  107. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/proto/__init__.py +0 -0
  108. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/proto/b01_scmap.proto +0 -0
  109. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/proto/b01_scmap_pb2.py +0 -0
  110. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/map/room_colors.py +0 -0
  111. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/mqtt/__init__.py +0 -0
  112. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/mqtt/health_manager.py +0 -0
  113. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/mqtt/roborock_session.py +0 -0
  114. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/mqtt/session.py +0 -0
  115. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocol.py +0 -0
  116. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocols/__init__.py +0 -0
  117. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocols/a01_protocol.py +0 -0
  118. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocols/b01_q10_protocol.py +0 -0
  119. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocols/b01_q7_protocol.py +0 -0
  120. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/protocols/v1_protocol.py +0 -0
  121. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/py.typed +0 -0
  122. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/roborock_message.py +0 -0
  123. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/roborock_typing.py +0 -0
  124. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/__init__.py +0 -0
  125. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/a01_simulator.py +0 -0
  126. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/b01_q10_simulator.py +0 -0
  127. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/channel.py +0 -0
  128. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/cloud.py +0 -0
  129. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/simulator.py +0 -0
  130. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/testing/v1_simulator.py +0 -0
  131. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/util.py +0 -0
  132. {python_roborock-7.4.0 → python_roborock-7.4.2}/roborock/web_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-roborock
3
- Version: 7.4.0
3
+ Version: 7.4.2
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.4.0"
3
+ version = "7.4.2"
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"
@@ -143,6 +143,13 @@ _UNSUPPORTED_FEATURE_BITS: frozenset[str] = frozenset(
143
143
  }
144
144
  )
145
145
 
146
+ # Devices known to lack DEFAULT_SETTING (DP 225).
147
+ _UNSUPPORTED_DEFAULT_SETTING: frozenset[str] = frozenset(
148
+ {
149
+ "roborock.wm.a63", # H1
150
+ }
151
+ )
152
+
146
153
  # Series that support UV light (DP 228).
147
154
  _UV_LIGHT_SERIES: frozenset[str] = (
148
155
  _H1_LITE_SERIES # a90, a91, a237
@@ -242,6 +249,13 @@ def supports_feature_bits(model: str | None) -> bool:
242
249
  return model not in _UNSUPPORTED_FEATURE_BITS
243
250
 
244
251
 
252
+ def supports_default_setting(model: str | None) -> bool:
253
+ """H1 (a63) does not support DP 225 even though it has a softener compartment."""
254
+ if model is None:
255
+ return True # conservative: assume yes
256
+ return model not in _UNSUPPORTED_DEFAULT_SETTING
257
+
258
+
245
259
  def supports_remote_control(model: str | None) -> bool:
246
260
  """Remote control (DP 232) is supported on all overseas models."""
247
261
  if model is None:
@@ -309,6 +323,10 @@ def build_force_load_dp_list(model: str | None) -> list[RoborockZeoProtocol]:
309
323
  if not supports_feature_bits(model):
310
324
  base = [dp for dp in base if dp != RoborockZeoProtocol.FEATURE_BITS]
311
325
 
326
+ # ── Strip unsupported DEFAULT_SETTING ──
327
+ if not supports_default_setting(model):
328
+ base = [dp for dp in base if dp != RoborockZeoProtocol.DEFAULT_SETTING]
329
+
312
330
  return base
313
331
 
314
332
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  import io
4
4
  import logging
5
- import threading
6
5
  from dataclasses import dataclass, field
7
6
 
8
7
  from vacuum_map_parser_base.config.color import Color, ColorsPalette, SupportedColor
@@ -11,13 +10,10 @@ from vacuum_map_parser_base.config.image_config import ImageConfig
11
10
  from vacuum_map_parser_base.config.size import Size, Sizes
12
11
  from vacuum_map_parser_base.image_generator import ImageGenerator
13
12
  from vacuum_map_parser_base.map_data import MapData
14
- from vacuum_map_parser_roborock.image_parser import RoborockImageParser
15
13
  from vacuum_map_parser_roborock.map_data_parser import RoborockMapDataParser
16
14
 
17
15
  from roborock.exceptions import RoborockException
18
16
 
19
- from .room_colors import adjacency_aware_room_colors
20
-
21
17
  _LOGGER = logging.getLogger(__name__)
22
18
 
23
19
  DEFAULT_DRAWABLES = {
@@ -103,68 +99,16 @@ class MapParser:
103
99
  return ParsedMapData(image_content=img_byte_arr.getvalue(), map_data=parsed_map)
104
100
 
105
101
 
106
- class _AdjacencyAwareRoborockImageParser(RoborockImageParser):
107
- """Apply the shared adjacency color policy to V1 room cells."""
108
-
109
- def __init__(
110
- self,
111
- palette: ColorsPalette,
112
- image_config: ImageConfig,
113
- *,
114
- recolor_rooms: bool = True,
115
- ) -> None:
116
- super().__init__(palette, image_config)
117
- self._room_palette = palette
118
- self._base_room_colors = palette.cached_room_colors.copy()
119
- self._recolor_rooms = recolor_rooms
120
- self._palette_lock = threading.Lock()
121
-
122
- def parse(
123
- self,
124
- raw_data: bytes,
125
- width: int,
126
- height: int,
127
- carpet_map: set[int] | None,
128
- removed_map: set[int] | None = None,
129
- ):
130
- """Assign non-conflicting room colors before the V1 image pass."""
131
- with self._palette_lock:
132
- # cached_room_colors is a read-only property, so reset its dict in place.
133
- cached_room_colors = self._room_palette.cached_room_colors
134
- cached_room_colors.clear()
135
- cached_room_colors.update(self._base_room_colors)
136
-
137
- if self._recolor_rooms:
138
-
139
- def room_id(value: int) -> int | None:
140
- if value in (self.MAP_OUTSIDE, self.MAP_WALL, self.MAP_INSIDE, self.MAP_SCAN):
141
- return None
142
- return self._get_room_number(value) if value & 0x07 == 0x07 else None
143
-
144
- room_colors = adjacency_aware_room_colors(raw_data, width, self._room_palette, room_id)
145
- for number, color in room_colors.items():
146
- # ColorsPalette caches both forms for get_room_color(str | int).
147
- cached_room_colors[number] = color
148
- cached_room_colors[str(number)] = color
149
- return super().parse(raw_data, width, height, carpet_map, removed_map)
150
-
151
-
152
102
  def _create_map_data_parser(config: MapParserConfig) -> RoborockMapDataParser:
153
103
  """Create a RoborockMapDataParser based on the config entry."""
154
104
  palette, sizes, image_config = _create_rendering_components(config)
155
- parser = RoborockMapDataParser(
105
+ return RoborockMapDataParser(
156
106
  palette,
157
107
  sizes,
158
108
  config.drawables,
159
109
  image_config,
160
110
  [],
161
111
  )
162
- parser._image_parser = _AdjacencyAwareRoborockImageParser(
163
- palette,
164
- image_config,
165
- recolor_rooms=config.show_rooms,
166
- )
167
- return parser
168
112
 
169
113
 
170
114
  def _create_image_generator(
File without changes