python-roborock 4.24.0__tar.gz → 4.26.0__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.
- {python_roborock-4.24.0 → python_roborock-4.26.0}/PKG-INFO +1 -1
- {python_roborock-4.24.0 → python_roborock-4.26.0}/pyproject.toml +1 -1
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/cli.py +2 -16
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q7/b01_q7_containers.py +8 -1
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/code_mappings.py +24 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/.gitignore +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/LICENSE +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/README.md +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/broadcast_protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/callbacks.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/const.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q10/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q7/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/containers.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/dyad/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/dyad/dyad_code_mappings.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/dyad/dyad_containers.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/v1/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/v1/v1_clean_modes.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/v1/v1_code_mappings.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/v1/v1_containers.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/zeo/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/zeo/zeo_code_mappings.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/zeo/zeo_containers.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/device_features.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/README.md +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/cache.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/device.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/device_manager.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/file_cache.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/rpc/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/rpc/a01_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/rpc/b01_q10_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/rpc/b01_q7_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/rpc/v1_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/a01/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/command.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/common.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/status.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q7/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q7/map.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/traits_mixin.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/child_lock.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/clean_summary.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/command.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/common.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/consumeable.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/device_features.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/flow_led_status.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/home.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/led_status.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/map_content.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/maps.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/network_info.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/rooms.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/routines.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/status.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/volume.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/local_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/mqtt_channel.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/diagnostics.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/exceptions.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/map/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/map/map_parser.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/mqtt/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/mqtt/health_manager.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/mqtt/roborock_session.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/mqtt/session.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocols/__init__.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocols/a01_protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocols/b01_q10_protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocols/b01_q7_protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/protocols/v1_protocol.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/py.typed +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/roborock_message.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/roborock_typing.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/util.py +0 -0
- {python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/web_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-roborock
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.26.0
|
|
4
4
|
Summary: A package to control Roborock vacuums.
|
|
5
5
|
Project-URL: Repository, https://github.com/humbertogontijo/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 = "4.
|
|
3
|
+
version = "4.26.0"
|
|
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"
|
|
@@ -764,21 +764,6 @@ async def network_info(ctx, device_id: str):
|
|
|
764
764
|
await _display_v1_trait(context, device_id, lambda v1: v1.network_info)
|
|
765
765
|
|
|
766
766
|
|
|
767
|
-
def _parse_b01_q10_command(cmd: str) -> B01_Q10_DP:
|
|
768
|
-
"""Parse B01_Q10 command from either enum name or value."""
|
|
769
|
-
try:
|
|
770
|
-
return B01_Q10_DP(int(cmd))
|
|
771
|
-
except ValueError:
|
|
772
|
-
try:
|
|
773
|
-
return B01_Q10_DP.from_name(cmd)
|
|
774
|
-
except ValueError:
|
|
775
|
-
try:
|
|
776
|
-
return B01_Q10_DP.from_value(cmd)
|
|
777
|
-
except ValueError:
|
|
778
|
-
pass
|
|
779
|
-
raise RoborockException(f"Invalid command {cmd} for B01_Q10 device")
|
|
780
|
-
|
|
781
|
-
|
|
782
767
|
@click.command()
|
|
783
768
|
@click.option("--device_id", required=True)
|
|
784
769
|
@click.option("--cmd", required=True)
|
|
@@ -795,7 +780,8 @@ async def command(ctx, cmd, device_id, params):
|
|
|
795
780
|
if result:
|
|
796
781
|
click.echo(dump_json(result))
|
|
797
782
|
elif device.b01_q10_properties is not None:
|
|
798
|
-
cmd_value
|
|
783
|
+
if cmd_value := B01_Q10_DP.from_any_optional(cmd) is None:
|
|
784
|
+
raise RoborockException(f"Invalid command {cmd} for B01_Q10 device")
|
|
799
785
|
command_trait: Trait = device.b01_q10_properties.command
|
|
800
786
|
await command_trait.send(cmd_value, json.loads(params) if params is not None else None)
|
|
801
787
|
click.echo("Command sent successfully; Enable debug logging (-d) to see responses.")
|
|
@@ -114,7 +114,7 @@ class B01Props(RoborockBase):
|
|
|
114
114
|
wind: SCWindMapping | None = None
|
|
115
115
|
water: WaterLevelMapping | None = None
|
|
116
116
|
mode: CleanTypeMapping | None = None
|
|
117
|
-
quantity: int | None = None
|
|
117
|
+
quantity: int | None = None # The Q7 L5 reports its battery level as 'quantity'
|
|
118
118
|
alarm: int | None = None
|
|
119
119
|
volume: int | None = None
|
|
120
120
|
hypa: int | None = None
|
|
@@ -169,6 +169,13 @@ class B01Props(RoborockBase):
|
|
|
169
169
|
recommend: Recommend | None = None
|
|
170
170
|
add_sweep_status: int | None = None
|
|
171
171
|
|
|
172
|
+
@property
|
|
173
|
+
def battery(self) -> int | None:
|
|
174
|
+
"""
|
|
175
|
+
Returns device battery level as a percentage.
|
|
176
|
+
"""
|
|
177
|
+
return self.quantity
|
|
178
|
+
|
|
172
179
|
@property
|
|
173
180
|
def main_brush_time_left(self) -> int | None:
|
|
174
181
|
"""
|
|
@@ -100,6 +100,30 @@ class RoborockModeEnum(StrEnum):
|
|
|
100
100
|
return member
|
|
101
101
|
raise ValueError(f"{name} is not a valid name for {cls.__name__}")
|
|
102
102
|
|
|
103
|
+
@classmethod
|
|
104
|
+
def from_any_optional(cls, value: str | int) -> Self | None:
|
|
105
|
+
"""Resolve a string or int to an enum member.
|
|
106
|
+
|
|
107
|
+
Tries to look up by enum name, string value, or integer code
|
|
108
|
+
and returns None if no match is found.
|
|
109
|
+
"""
|
|
110
|
+
# Try enum name lookup (e.g. "SEEK")
|
|
111
|
+
try:
|
|
112
|
+
return cls.from_name(str(value))
|
|
113
|
+
except ValueError:
|
|
114
|
+
pass
|
|
115
|
+
# Try DP string value lookup (e.g. "dpSeek")
|
|
116
|
+
try:
|
|
117
|
+
return cls.from_value(str(value))
|
|
118
|
+
except ValueError:
|
|
119
|
+
pass
|
|
120
|
+
# Try integer code lookup (e.g. "11")
|
|
121
|
+
try:
|
|
122
|
+
return cls.from_code(int(value))
|
|
123
|
+
except (ValueError, TypeError):
|
|
124
|
+
pass
|
|
125
|
+
return None
|
|
126
|
+
|
|
103
127
|
@classmethod
|
|
104
128
|
def keys(cls) -> list[str]:
|
|
105
129
|
"""Returns a list of all member values."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q10/b01_q10_code_mappings.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q10/b01_q10_containers.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/data/b01_q7/b01_q7_code_mappings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/__init__.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q10/command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q7/__init__.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/b01/q7/clean_summary.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/clean_summary.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/device_features.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/do_not_disturb.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/dust_collection_mode.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/flow_led_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/network_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/smart_wash_params.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/traits/v1/wash_towel_mode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/local_channel.py
RENAMED
|
File without changes
|
{python_roborock-4.24.0 → python_roborock-4.26.0}/roborock/devices/transport/mqtt_channel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|