python-roborock 7.12.0__py3-none-any.whl → 7.12.1__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-roborock
3
- Version: 7.12.0
3
+ Version: 7.12.1
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/
@@ -28,7 +28,7 @@ roborock/data/mower/__init__.py,sha256=RXFcOE0-rchWViq3F-cLXB9Jnx4nKrn98TUR917sz
28
28
  roborock/data/mower/mower_code_mappings.py,sha256=T3NJEjgkYv3svIt7-gqFgrnNmVeBOkqit8_D52vSIao,1741
29
29
  roborock/data/mower/mower_containers.py,sha256=PYNVhbGCafkchenBlBmG_fUnIC-9WfxF8gNB0C4_9Yo,4106
30
30
  roborock/data/v1/__init__.py,sha256=Lx_D6baZrCMxp57D0NcdiA8rssJ5NnInZwUwrT79XOI,91
31
- roborock/data/v1/v1_clean_modes.py,sha256=ZUhMqrM9MwnXFl3btZj9_LEAOmhNIl80krW-AiuWouk,13866
31
+ roborock/data/v1/v1_clean_modes.py,sha256=RNi3_a1ZzDuaKpbEzFp-V1ugeJfIkjE4QdBI3YvI2G8,14886
32
32
  roborock/data/v1/v1_code_mappings.py,sha256=hToQbd38mM3Dw8ONLyuDa2scqmNs0gNgOyqVgm-Gg7Y,12948
33
33
  roborock/data/v1/v1_containers.py,sha256=6erBnuQicFsdAsUaWIEAghzOxUU-xGuwqJBhcy_snZ4,17939
34
34
  roborock/data/zeo/__init__.py,sha256=VxG5qG4M24DGOq2YAaxownWp6bEfj9DEOgOMHmTpcqY,63
@@ -92,7 +92,7 @@ roborock/devices/traits/v1/obstacle_photos.py,sha256=Aul1sOxJ6AxLWqI5AbeHHSzxfUP
92
92
  roborock/devices/traits/v1/rooms.py,sha256=SEAs3sHZxDmiiSWc9Korm838zu8ub_04CsmJVlT4F48,6237
93
93
  roborock/devices/traits/v1/routines.py,sha256=BfktlpnyDjD2DB3zBDS5BnmjZPE38aHa-wjMontPnik,931
94
94
  roborock/devices/traits/v1/smart_wash_params.py,sha256=6K3XrF5SRS39BWaMjjtGJgKX3lZ24jPsb6Nia4a9GVM,634
95
- roborock/devices/traits/v1/status.py,sha256=ZCNrRPfE_a6nga-WSJ8sry2M3XrqHigpNw_eRRU8hFo,5889
95
+ roborock/devices/traits/v1/status.py,sha256=xmnu6pXXMYagihSBSJVSSR6pUSdgRaa1eAM2N1huIfU,6056
96
96
  roborock/devices/traits/v1/valley_electricity_timer.py,sha256=vE9bLJe8TdFGVh_9mDRkEoC3_DTBkDcdlSMSiYq0YTw,1863
97
97
  roborock/devices/traits/v1/volume.py,sha256=etRIYE0ynZZLEo2ez7Dm7_JbijmElrdjpn59hyLWqsQ,814
98
98
  roborock/devices/traits/v1/wash_towel_mode.py,sha256=bSXtaJ0ObDlXsJYuCHWCN3J0GyHEibPsDvOqBCxQW3Q,2039
@@ -127,8 +127,8 @@ roborock/testing/channel.py,sha256=vjulT5MHBe8lAq6XITUqcxJVcCILWx7ZEcw5imTx0Tk,7
127
127
  roborock/testing/cloud.py,sha256=L2L0KlZDYaMuoV19KUQUoq5EAUDeNQ1lJ8Ew5YaOgjo,11946
128
128
  roborock/testing/simulator.py,sha256=g8ZUWVSjgAzuRRxWOCeOq-7deodyEItwUpqEw9RzCmQ,4347
129
129
  roborock/testing/v1_simulator.py,sha256=_LX_vsBMcB2Uu2QDt8QnQymgtVtbnwD5Xa7tmhiPAnY,14439
130
- python_roborock-7.12.0.dist-info/METADATA,sha256=8Yd08vm2KHBi4yxHxLwBETkDu5n27n6Q1F359HTcLq4,5279
131
- python_roborock-7.12.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
132
- python_roborock-7.12.0.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
133
- python_roborock-7.12.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
134
- python_roborock-7.12.0.dist-info/RECORD,,
130
+ python_roborock-7.12.1.dist-info/METADATA,sha256=WGq9ThJtBV5sycmoZTVCX-FEjeGWM__zE5xCvY4DjFA,5279
131
+ python_roborock-7.12.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
132
+ python_roborock-7.12.1.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
133
+ python_roborock-7.12.1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
134
+ python_roborock-7.12.1.dist-info/RECORD,,
@@ -57,9 +57,10 @@ class WaterModes(RoborockModeEnum):
57
57
  SMART_MODE = ("smart_mode", 209)
58
58
  PURE_WATER_FLOW_START = ("slight", 221)
59
59
  PURE_WATER_FLOW_SMALL = ("low", 225)
60
+ PURE_WATER_FLOW_GENTLE = ("gentle", 230)
60
61
  PURE_WATER_FLOW_MIDDLE = ("medium", 235)
61
- PURE_WATER_FLOW_LARGE = ("moderate", 245)
62
- PURE_WATER_SUPER_BEGIN = ("high", 248)
62
+ PURE_WATER_FLOW_LARGE = ("moderate", 240)
63
+ PURE_WATER_SUPER_BEGIN = ("high", 245)
63
64
  PURE_WATER_FLOW_END = ("extreme", 250)
64
65
 
65
66
 
@@ -91,12 +92,25 @@ WATER_SLIDE_MODE_MAPPING: dict[int, WaterModes] = {
91
92
  200: WaterModes.OFF,
92
93
  221: WaterModes.PURE_WATER_FLOW_START,
93
94
  225: WaterModes.PURE_WATER_FLOW_SMALL,
95
+ 230: WaterModes.PURE_WATER_FLOW_GENTLE,
94
96
  235: WaterModes.PURE_WATER_FLOW_MIDDLE,
95
- 245: WaterModes.PURE_WATER_FLOW_LARGE,
96
- 248: WaterModes.PURE_WATER_SUPER_BEGIN,
97
+ 240: WaterModes.PURE_WATER_FLOW_LARGE,
98
+ 245: WaterModes.PURE_WATER_SUPER_BEGIN,
97
99
  250: WaterModes.PURE_WATER_FLOW_END,
98
100
  }
99
101
 
102
+ # Water slide devices report the raw slider position (1-30) as 220 + position.
103
+ # The app groups positions into named ranges, keyed here by their last position.
104
+ _WATER_SLIDE_RANGES: tuple[tuple[int, WaterModes], ...] = (
105
+ (3, WaterModes.PURE_WATER_FLOW_START),
106
+ (7, WaterModes.PURE_WATER_FLOW_SMALL),
107
+ (12, WaterModes.PURE_WATER_FLOW_GENTLE),
108
+ (17, WaterModes.PURE_WATER_FLOW_MIDDLE),
109
+ (22, WaterModes.PURE_WATER_FLOW_LARGE),
110
+ (27, WaterModes.PURE_WATER_SUPER_BEGIN),
111
+ (30, WaterModes.PURE_WATER_FLOW_END),
112
+ )
113
+
100
114
  ModeEnumT = TypeVar("ModeEnumT", bound=RoborockModeEnum)
101
115
 
102
116
 
@@ -183,6 +197,19 @@ def get_water_modes(features: DeviceFeatures) -> list[WaterModes]:
183
197
  return supported_modes
184
198
 
185
199
 
200
+ def get_water_slide_mode_name(code: int) -> str | None:
201
+ """Get the app's range name for a water slide code, or None if out of range."""
202
+ if code == 200:
203
+ return WaterModes.OFF.value
204
+ position = code - 220
205
+ if position < 1:
206
+ return None
207
+ for last_position, mode in _WATER_SLIDE_RANGES:
208
+ if position <= last_position:
209
+ return mode.value
210
+ return None
211
+
212
+
186
213
  def get_water_mode_mapping(features: DeviceFeatures) -> dict[int, str]:
187
214
  """Get water mode mapping by supported feature set.
188
215
 
@@ -15,6 +15,7 @@ from roborock import (
15
15
  get_current_cleaning_mode,
16
16
  get_water_mode_mapping,
17
17
  get_water_modes,
18
+ get_water_slide_mode_name,
18
19
  resolve_cleaning_mode,
19
20
  )
20
21
  from roborock.devices.traits.common import DpsDataConverter, TraitUpdateListener
@@ -103,6 +104,8 @@ class StatusTrait(StatusV2, common.V1TraitMixin, TraitUpdateListener):
103
104
  def water_mode_name(self) -> str | None:
104
105
  if self.water_box_mode is None:
105
106
  return None
107
+ if self._device_features_trait.is_water_slide_mode_supported:
108
+ return get_water_slide_mode_name(self.water_box_mode)
106
109
  return self.water_mode_mapping.get(self.water_box_mode)
107
110
 
108
111
  @property