python-roborock 2.2.2__py3-none-any.whl → 2.3.0__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.1
2
2
  Name: python-roborock
3
- Version: 2.2.2
3
+ Version: 2.3.0
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
@@ -2,7 +2,7 @@ roborock/__init__.py,sha256=AqfxNGj4wILqL7dooJyQQd6w7o2EW02fMAF51wT9VK8,165
2
2
  roborock/api.py,sha256=jI5jbBZf47HHEI8j_JM_00DqrhrgbmlA6FivPCgFajc,4123
3
3
  roborock/cli.py,sha256=l4dOt9HZ4TZOZNp_btsNCZEDUihM94Dz173KPtUYdm4,6826
4
4
  roborock/cloud_api.py,sha256=8p_iRfXRstBW5KfdxFtya41VJjeRXbdwfpASXIqASqM,7144
5
- roborock/code_mappings.py,sha256=O2TDyMXZdpR7-cCPBWAD2ltGT7oFmn_yzwcXNgguzCQ,14415
5
+ roborock/code_mappings.py,sha256=F498ZH0FszmM-Un-vfFsQMs0odzR0Vk_JvCJVbT2ljI,14507
6
6
  roborock/command_cache.py,sha256=E8e7EYzYFZEmw_cIfhPYZXNpBuSJbIAT9KXnE-e5NPg,7912
7
7
  roborock/const.py,sha256=p2d52jaX7ZSNFSoLgq2nZVKP0qxnoONSm7y2eaQFqbM,2386
8
8
  roborock/containers.py,sha256=s9IXGYNlX9WwmkSUZZzkOPMlgy1Z5juHaB9S8heXXoY,27991
@@ -15,15 +15,15 @@ roborock/roborock_message.py,sha256=2-boInkxHLD4dZxRFslfoqyIy5XalTlJsSdxNQbvUBg,
15
15
  roborock/roborock_typing.py,sha256=3guzjcgwbwmz-COZyCBY6UAtLh7Br56GCFYL2L08ot0,23536
16
16
  roborock/util.py,sha256=kXIWW5EWs7w_7u26jPjBmeZUM_WR9bD8A2-qWL5baTQ,3465
17
17
  roborock/version_1_apis/__init__.py,sha256=BDAkBZPOtpyYUPUa6VaZd7Aaza1hbvM2fIzsjIGD9Vc,183
18
- roborock/version_1_apis/roborock_client_v1.py,sha256=-tQ0I90adCYM-XPuemW9MBaiEWkYhL-xRDPLRE7BADc,21262
18
+ roborock/version_1_apis/roborock_client_v1.py,sha256=OaKQjHy_ZYdSh360D7MUgzjvw2yD0xqpEIYxyYCGovM,21307
19
19
  roborock/version_1_apis/roborock_local_client_v1.py,sha256=tPou8JnUEIKbUZcmUA7RRLycCSEjg0JFaZNdNLU6nmE,3477
20
20
  roborock/version_1_apis/roborock_mqtt_client_v1.py,sha256=5MhgmosZu-ujj3fuKr6QAN-H5LtF_OIwM-t-Zsd0J_w,3358
21
21
  roborock/version_a01_apis/__init__.py,sha256=i_WTIX0LUCG93YX3RraNaQYNYBMY-xJI7ncWMdUFQVs,111
22
22
  roborock/version_a01_apis/roborock_client_a01.py,sha256=ISXMQ7pFoohoHG2mmukdZx6J7S2sgYvvInpJGqtKGL8,7424
23
23
  roborock/version_a01_apis/roborock_mqtt_client_a01.py,sha256=fiy2LdCVYwAXo70QN5vwOM8abEHTGACmaLzaEiB8rmk,3043
24
- roborock/web_api.py,sha256=p3hNVVJ7QYFjcYc1wTrJs4EtE83tDThbQHSJFWanWN4,13040
25
- python_roborock-2.2.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
26
- python_roborock-2.2.2.dist-info/METADATA,sha256=t6MTuxzD56JShT4tJTSikpeMp_edUkhGmKvMix2p6ck,2598
27
- python_roborock-2.2.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
28
- python_roborock-2.2.2.dist-info/entry_points.txt,sha256=3V_nm8VDR5Wg8m9QlRy9R4olW2lC--6JrDjZJpQpDNI,46
29
- python_roborock-2.2.2.dist-info/RECORD,,
24
+ roborock/web_api.py,sha256=E438Ma7K7SEhPvr9d5EEpfzkJLOjSbDsAmHQw9iGsWU,13729
25
+ python_roborock-2.3.0.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
26
+ python_roborock-2.3.0.dist-info/METADATA,sha256=3kH4R8bE3QHKSUfPm018sesghKs6i_pSwFDWvcjUKZE,2598
27
+ python_roborock-2.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
28
+ python_roborock-2.3.0.dist-info/entry_points.txt,sha256=3V_nm8VDR5Wg8m9QlRy9R4olW2lC--6JrDjZJpQpDNI,46
29
+ python_roborock-2.3.0.dist-info/RECORD,,
roborock/code_mappings.py CHANGED
@@ -248,7 +248,10 @@ class RoborockFanSpeedP10(RoborockFanPowerCode):
248
248
 
249
249
  class RoborockFanSpeedS8MaxVUltra(RoborockFanPowerCode):
250
250
  off = 105
251
+ quiet = 101
251
252
  balanced = 102
253
+ turbo = 103
254
+ max = 104
252
255
  custom = 106
253
256
  max_plus = 108
254
257
  smart_mode = 110
@@ -324,6 +327,8 @@ class RoborockMopIntensityS8MaxVUltra(RoborockMopIntensityCode):
324
327
  low = 201
325
328
  medium = 202
326
329
  high = 203
330
+ custom = 204
331
+ max = 208
327
332
  smart_mode = 209
328
333
  custom_water_flow = 207
329
334
 
@@ -394,6 +399,7 @@ class RoborockDockWashTowelModeCode(RoborockEnum):
394
399
  light = 0
395
400
  balanced = 1
396
401
  deep = 2
402
+ smart = 10
397
403
 
398
404
 
399
405
  class RoborockCategory(Enum):
@@ -65,6 +65,7 @@ WASH_N_FILL_DOCK = [
65
65
  RoborockDockTypeCode.empty_wash_fill_dock,
66
66
  RoborockDockTypeCode.s8_dock,
67
67
  RoborockDockTypeCode.p10_dock,
68
+ RoborockDockTypeCode.s8_maxv_ultra_dock,
68
69
  ]
69
70
  RT = TypeVar("RT", bound=RoborockBase)
70
71
  EVICT_TIME = 60
roborock/web_api.py CHANGED
@@ -3,11 +3,13 @@ from __future__ import annotations
3
3
  import base64
4
4
  import hashlib
5
5
  import hmac
6
+ import logging
6
7
  import math
7
8
  import secrets
8
9
  import time
9
10
 
10
11
  import aiohttp
12
+ from aiohttp import ContentTypeError
11
13
 
12
14
  from roborock.containers import HomeData, HomeDataRoom, ProductResponse, RRiot, UserData
13
15
  from roborock.exceptions import (
@@ -23,6 +25,8 @@ from roborock.exceptions import (
23
25
  RoborockUrlException,
24
26
  )
25
27
 
28
+ _LOGGER = logging.getLogger(__name__)
29
+
26
30
 
27
31
  class RoborockApiClient:
28
32
  def __init__(self, username: str, base_url=None) -> None:
@@ -294,11 +298,23 @@ class PreparedRequest:
294
298
  _url = "/".join(s.strip("/") for s in [self.base_url, url])
295
299
  _headers = {**self.base_headers, **(headers or {})}
296
300
  async with aiohttp.ClientSession() as session:
297
- async with session.request(
298
- method,
299
- _url,
300
- params=params,
301
- data=data,
302
- headers=_headers,
303
- ) as resp:
304
- return await resp.json()
301
+ try:
302
+ async with session.request(
303
+ method,
304
+ _url,
305
+ params=params,
306
+ data=data,
307
+ headers=_headers,
308
+ ) as resp:
309
+ return await resp.json()
310
+ except ContentTypeError as err:
311
+ """If we get an error, lets log everything for debugging."""
312
+ try:
313
+ resp_json = await resp.json(content_type=None)
314
+ _LOGGER.info("Resp: %s", resp_json)
315
+ except ContentTypeError as err_2:
316
+ _LOGGER.info(err_2)
317
+ resp_raw = await resp.read()
318
+ _LOGGER.info("Resp raw: %s", resp_raw)
319
+ # Still raise the err so that it's clear it failed.
320
+ raise err