python-roborock 2.11.3__tar.gz → 2.12.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 (28) hide show
  1. {python_roborock-2.11.3 → python_roborock-2.12.1}/PKG-INFO +1 -1
  2. {python_roborock-2.11.3 → python_roborock-2.12.1}/pyproject.toml +1 -1
  3. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/cli.py +26 -1
  4. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/code_mappings.py +1 -0
  5. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/exceptions.py +4 -0
  6. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_1_apis/roborock_client_v1.py +1 -0
  7. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/web_api.py +3 -0
  8. {python_roborock-2.11.3 → python_roborock-2.12.1}/LICENSE +0 -0
  9. {python_roborock-2.11.3 → python_roborock-2.12.1}/README.md +0 -0
  10. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/__init__.py +0 -0
  11. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/api.py +0 -0
  12. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/cloud_api.py +0 -0
  13. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/command_cache.py +0 -0
  14. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/const.py +0 -0
  15. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/containers.py +0 -0
  16. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/local_api.py +0 -0
  17. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/protocol.py +0 -0
  18. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/py.typed +0 -0
  19. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/roborock_future.py +0 -0
  20. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/roborock_message.py +0 -0
  21. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/roborock_typing.py +0 -0
  22. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/util.py +0 -0
  23. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_1_apis/__init__.py +0 -0
  24. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_1_apis/roborock_local_client_v1.py +0 -0
  25. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_1_apis/roborock_mqtt_client_v1.py +0 -0
  26. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_a01_apis/__init__.py +0 -0
  27. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_a01_apis/roborock_client_a01.py +0 -0
  28. {python_roborock-2.11.3 → python_roborock-2.12.1}/roborock/version_a01_apis/roborock_mqtt_client_a01.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-roborock
3
- Version: 2.11.3
3
+ Version: 2.12.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.11.3"
3
+ version = "2.12.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"
@@ -11,9 +11,10 @@ from pyshark.capture.live_capture import LiveCapture, UnknownInterfaceException
11
11
  from pyshark.packet.packet import Packet # type: ignore
12
12
 
13
13
  from roborock import RoborockException
14
- from roborock.containers import DeviceData, LoginData
14
+ from roborock.containers import DeviceData, HomeDataProduct, LoginData
15
15
  from roborock.protocol import MessageParser
16
16
  from roborock.util import run_sync
17
+ from roborock.version_1_apis.roborock_local_client_v1 import RoborockLocalClientV1
17
18
  from roborock.version_1_apis.roborock_mqtt_client_v1 import RoborockMqttClientV1
18
19
  from roborock.web_api import RoborockApiClient
19
20
 
@@ -145,6 +146,29 @@ async def execute_scene(ctx, scene_id):
145
146
  await client.execute_scene(login_data.user_data, scene_id)
146
147
 
147
148
 
149
+ @click.command()
150
+ @click.option("--device_id", required=True)
151
+ @click.pass_context
152
+ @run_sync()
153
+ async def status(ctx, device_id):
154
+ context: RoborockContext = ctx.obj
155
+ login_data = context.login_data()
156
+ if not login_data.home_data:
157
+ await _discover(ctx)
158
+ login_data = context.login_data()
159
+ home_data = login_data.home_data
160
+ devices = home_data.devices + home_data.received_devices
161
+ device = next(device for device in devices if device.duid == device_id)
162
+ product_info: dict[str, HomeDataProduct] = {product.id: product for product in home_data.products}
163
+ device_data = DeviceData(device, product_info[device.product_id].model)
164
+ mqtt_client = RoborockMqttClientV1(login_data.user_data, device_data)
165
+ networking = await mqtt_client.get_networking()
166
+ local_device_data = DeviceData(device, product_info[device.product_id].model, networking.ip)
167
+ local_client = RoborockLocalClientV1(local_device_data)
168
+ status = await local_client.get_status()
169
+ click.echo(json.dumps(status.as_dict(), indent=4))
170
+
171
+
148
172
  @click.command()
149
173
  @click.option("--device_id", required=True)
150
174
  @click.option("--cmd", required=True)
@@ -226,6 +250,7 @@ cli.add_command(discover)
226
250
  cli.add_command(list_devices)
227
251
  cli.add_command(list_scenes)
228
252
  cli.add_command(execute_scene)
253
+ cli.add_command(status)
229
254
  cli.add_command(command)
230
255
  cli.add_command(parser)
231
256
 
@@ -461,6 +461,7 @@ class RoborockDockTypeCode(RoborockEnum):
461
461
  s8_maxv_ultra_dock = 10
462
462
  qrevo_master_dock = 14
463
463
  qrevo_s_dock = 15
464
+ saros_r10_dock = 16
464
465
  qrevo_curv_dock = 17
465
466
 
466
467
 
@@ -68,3 +68,7 @@ class RoborockTooFrequentCodeRequests(RoborockException):
68
68
 
69
69
  class RoborockMissingParameters(RoborockException):
70
70
  """Class for Roborock missing parameters exceptions."""
71
+
72
+
73
+ class RoborockTooManyRequest(RoborockException):
74
+ """Class for Roborock too many request exceptions."""
@@ -72,6 +72,7 @@ WASH_N_FILL_DOCK = [
72
72
  RoborockDockTypeCode.p10_pro_dock,
73
73
  RoborockDockTypeCode.s8_maxv_ultra_dock,
74
74
  RoborockDockTypeCode.qrevo_s_dock,
75
+ RoborockDockTypeCode.saros_r10_dock,
75
76
  RoborockDockTypeCode.qrevo_curv_dock,
76
77
  ]
77
78
  RT = TypeVar("RT", bound=RoborockBase)
@@ -22,6 +22,7 @@ from roborock.exceptions import (
22
22
  RoborockMissingParameters,
23
23
  RoborockNoUserAgreement,
24
24
  RoborockTooFrequentCodeRequests,
25
+ RoborockTooManyRequest,
25
26
  RoborockUrlException,
26
27
  )
27
28
 
@@ -54,6 +55,8 @@ class RoborockApiClient:
54
55
  raise RoborockMissingParameters(
55
56
  "You are missing parameters for this request, are you sure you " "entered your username?"
56
57
  )
58
+ elif response_code == 9002:
59
+ raise RoborockTooManyRequest("Please temporarily disable making requests and try again later.")
57
60
  raise RoborockUrlException(f"error code: {response_code} msg: {response.get('error')}")
58
61
  response_data = response.get("data")
59
62
  if response_data is None: