python-roborock 5.13.0__py3-none-any.whl → 5.14.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.4
2
2
  Name: python-roborock
3
- Version: 5.13.0
3
+ Version: 5.14.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/
@@ -11,12 +11,12 @@ roborock/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  roborock/roborock_message.py,sha256=BPDT_uzCeD4L_4LottCMeft1kYmYPoG9ktcqqj0SYhQ,6466
12
12
  roborock/roborock_typing.py,sha256=Rwx0c0oZCMY-4O8VMLnFSO_OUNb_D59cyG_ktZTZoZI,17134
13
13
  roborock/util.py,sha256=mjw329ujLjoWPPAr9mG0VZstaVL06dmVvNnYACB-Pxk,1650
14
- roborock/web_api.py,sha256=sPdvwGnevCkgEiQwyCSmA3JrGIyZ3t7enIGK9dyJJ8U,34348
14
+ roborock/web_api.py,sha256=g1LT04LIth4LhTrkQi8csXHZZ3UmhctQdHqkcwjWhyM,34504
15
15
  roborock/data/__init__.py,sha256=DikqaVM7VPVddkBNkHSss5zb1_iKB7GYmc2GiHoMAkA,257
16
16
  roborock/data/code_mappings.py,sha256=CzD9q-VuPy70pDZdjZ6kgK4vcGdzNGV3Eo5z9QGOYp0,8399
17
17
  roborock/data/containers.py,sha256=-b6H2snGQTzsJSsctgil6sx8rLtCDihTTzdkxcFRdlE,16489
18
18
  roborock/data/b01_q10/__init__.py,sha256=E4lwJcz4AI1z92FcYOJ-cY3fcfHSoXqvYVgfA-TgaRk,71
19
- roborock/data/b01_q10/b01_q10_code_mappings.py,sha256=Ja_ZAVJL7z-bmiAlnwDgkPNdTUB5Qt0kZA-1HQgqKz4,8161
19
+ roborock/data/b01_q10/b01_q10_code_mappings.py,sha256=1DH85rOz9MDqcyLvLjTHSZe-k4we16_I3Wc2LkzJv4g,8288
20
20
  roborock/data/b01_q10/b01_q10_containers.py,sha256=wFHeZPGj6NvljKL99j1209ldwiVNAdqKh52UvMFU640,3514
21
21
  roborock/data/b01_q7/__init__.py,sha256=D-Cd8eB0njf1PQPM6Exl_9A0AhpzIjrL0hapGOCEkkA,69
22
22
  roborock/data/b01_q7/b01_q7_code_mappings.py,sha256=EHSCZSv_Os049NcenKo4tkPjDOB4vpmQ2p2Psr9FRCc,10698
@@ -47,8 +47,9 @@ roborock/devices/traits/common.py,sha256=KUlXvx2UcFVeNXEhPiCAdy2APu7zrJmM_jME_bM
47
47
  roborock/devices/traits/traits_mixin.py,sha256=7t15l_Ty1cN-3-fKNtRH1XR6-mfadPnTBCQRZP4rAtc,2092
48
48
  roborock/devices/traits/a01/__init__.py,sha256=i-us9zLPWPfSQ5XWq8t0MiYLYe5NkcLvk3aEQTYT7E0,8104
49
49
  roborock/devices/traits/b01/__init__.py,sha256=pGN6wEocE6Fr2BTasG8Z_75crD6OdTwpju59Vw7eTDk,202
50
- roborock/devices/traits/b01/q10/__init__.py,sha256=chMyP30e7o0WT-PU06t-JN3NrHGeZ1sKfCq6OA5x_EI,2641
50
+ roborock/devices/traits/b01/q10/__init__.py,sha256=Nhb_jwxMRPUup9T6pCqt2kBFiYPrLBIsv7dpHJnF8qY,2799
51
51
  roborock/devices/traits/b01/q10/command.py,sha256=mcWNRSq72bfa79_EjKRgMEIDTV3vWFh2ofBe4aF7EOE,1306
52
+ roborock/devices/traits/b01/q10/remote.py,sha256=ZvURdYP023vsJF6Mx9rA004bi6tOPAjrL4o7dC1baFQ,1257
52
53
  roborock/devices/traits/b01/q10/status.py,sha256=dIuUpRVjOVXvFr-EA_7lV9KCF7XXjE4vQOFsd-Bbh8w,1133
53
54
  roborock/devices/traits/b01/q10/vacuum.py,sha256=7PUPWaLqj3jsNLw87oyf1oz2UXckF4Z5Fh6ZYqeY7Ww,2280
54
55
  roborock/devices/traits/b01/q7/__init__.py,sha256=jxvN9KVrqQPgwNjIbseGME2v8DX-ryFH-rd_k0ulnps,6719
@@ -96,8 +97,8 @@ roborock/protocols/a01_protocol.py,sha256=JCIhUuVNamcENu0gtZR2x8rBz6dpAZLcbA-NQg
96
97
  roborock/protocols/b01_q10_protocol.py,sha256=SimfXpQotkEkb58ThZq7xa7fCxPxF-hrpAJcRKI-yZE,3407
97
98
  roborock/protocols/b01_q7_protocol.py,sha256=o8repRrxhxknzspsg1K27ds643rs87ilWXbj8RJtOCs,4619
98
99
  roborock/protocols/v1_protocol.py,sha256=uA-EMXd1AUBAXjkjAm0VxZlPLre0v2X9Kei5UqyPzaY,11141
99
- python_roborock-5.13.0.dist-info/METADATA,sha256=bYwkKEfZUz-u_qYMtzd_zGRsXncAlC9U_ncnKLdKzbg,4963
100
- python_roborock-5.13.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
101
- python_roborock-5.13.0.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
102
- python_roborock-5.13.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
103
- python_roborock-5.13.0.dist-info/RECORD,,
100
+ python_roborock-5.14.1.dist-info/METADATA,sha256=49viaRvdbijogTJG3PwecIXMf-sRHEX-NScxOdJeYEw,4963
101
+ python_roborock-5.14.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
102
+ python_roborock-5.14.1.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
103
+ python_roborock-5.14.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
104
+ python_roborock-5.14.1.dist-info/RECORD,,
@@ -1,3 +1,5 @@
1
+ from enum import IntEnum
2
+
1
3
  from ..code_mappings import RoborockModeEnum
2
4
 
3
5
 
@@ -217,3 +219,11 @@ class YXDeviceDustCollectionFrequency(RoborockModeEnum):
217
219
  INTERVAL_30 = "interval_30", 30
218
220
  INTERVAL_45 = "interval_45", 45
219
221
  INTERVAL_60 = "interval_60", 60
222
+
223
+
224
+ class RemoteCommand(IntEnum):
225
+ FORWARD = 0
226
+ LEFT = 2
227
+ RIGHT = 3
228
+ STOP = 4
229
+ EXIT = 5
@@ -2,7 +2,6 @@
2
2
 
3
3
  import asyncio
4
4
  import logging
5
- from typing import Any
6
5
 
7
6
  from roborock.data.b01_q10.b01_q10_code_mappings import B01_Q10_DP
8
7
  from roborock.devices.rpc.b01_q10_channel import stream_decoded_responses
@@ -10,6 +9,7 @@ from roborock.devices.traits import Trait
10
9
  from roborock.devices.transport.mqtt_channel import MqttChannel
11
10
 
12
11
  from .command import CommandTrait
12
+ from .remote import RemoteTrait
13
13
  from .status import StatusTrait
14
14
  from .vacuum import VacuumTrait
15
15
 
@@ -32,11 +32,15 @@ class Q10PropertiesApi(Trait):
32
32
  vacuum: VacuumTrait
33
33
  """Trait for sending vacuum related commands to Q10 devices."""
34
34
 
35
+ remote: RemoteTrait
36
+ """Trait for sending remote control related commands to Q10 devices."""
37
+
35
38
  def __init__(self, channel: MqttChannel) -> None:
36
39
  """Initialize the B01Props API."""
37
40
  self._channel = channel
38
41
  self.command = CommandTrait(channel)
39
42
  self.vacuum = VacuumTrait(self.command)
43
+ self.remote = RemoteTrait(self.command)
40
44
  self.status = StatusTrait()
41
45
  self._subscribe_task: asyncio.Task[None] | None = None
42
46
 
@@ -0,0 +1,43 @@
1
+ """Traits for Q10 B01 devices."""
2
+
3
+ from roborock.data.b01_q10.b01_q10_code_mappings import (
4
+ B01_Q10_DP,
5
+ RemoteCommand,
6
+ )
7
+
8
+ from .command import CommandTrait
9
+
10
+
11
+ class RemoteTrait:
12
+ """Trait for sending vacuum commands.
13
+
14
+ This is a wrapper around the CommandTrait for sending remote related
15
+ commands to Q10 devices.
16
+ """
17
+
18
+ def __init__(self, command: CommandTrait) -> None:
19
+ """Initialize the RemoteTrait."""
20
+ self._command = command
21
+
22
+ async def _send_remote(self, action: RemoteCommand) -> None:
23
+ await self._command.send(B01_Q10_DP.COMMON, params={B01_Q10_DP.REMOTE: action.value})
24
+
25
+ async def forward(self) -> None:
26
+ """Move forward."""
27
+ await self._send_remote(RemoteCommand.FORWARD)
28
+
29
+ async def left(self) -> None:
30
+ """Turn left."""
31
+ await self._send_remote(RemoteCommand.LEFT)
32
+
33
+ async def right(self) -> None:
34
+ """Turn right."""
35
+ await self._send_remote(RemoteCommand.RIGHT)
36
+
37
+ async def stop(self) -> None:
38
+ """Stop last moving command or start remote control."""
39
+ await self._send_remote(RemoteCommand.STOP)
40
+
41
+ async def exit_remote(self) -> None:
42
+ """Exit remote control."""
43
+ await self._send_remote(RemoteCommand.EXIT)
roborock/web_api.py CHANGED
@@ -692,6 +692,8 @@ class PreparedRequest:
692
692
  _LOGGER.info("Resp raw: %s", resp_raw)
693
693
  # Still raise the err so that it's clear it failed.
694
694
  raise err
695
+ except (aiohttp.ClientError, TimeoutError, OSError) as err:
696
+ raise RoborockException(f"Network error contacting {_url}: {err}") from err
695
697
  finally:
696
698
  if close_session:
697
699
  await session.close()