python-roborock 5.15.0__tar.gz → 5.15.2__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-5.15.0 → python_roborock-5.15.2}/PKG-INFO +11 -3
- {python_roborock-5.15.0 → python_roborock-5.15.2}/README.md +5 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/pyproject.toml +13 -5
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/cli.py +12 -6
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/web_api.py +43 -3
- {python_roborock-5.15.0 → python_roborock-5.15.2}/.gitignore +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/LICENSE +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/broadcast_protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/callbacks.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/const.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q10/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q7/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q7/b01_q7_containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/dyad/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/dyad/dyad_code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/dyad/dyad_containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/v1/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/v1/v1_clean_modes.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/v1/v1_code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/v1/v1_containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/zeo/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/zeo/zeo_code_mappings.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/zeo/zeo_containers.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/device_features.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/README.md +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/cache.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/device.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/device_manager.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/file_cache.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/rpc/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/rpc/a01_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/rpc/b01_q10_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/rpc/b01_q7_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/rpc/v1_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/a01/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/command.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/remote.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/status.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/map.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/map_content.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/common.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/traits_mixin.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/child_lock.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/clean_summary.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/command.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/common.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/consumeable.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/device_features.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/flow_led_status.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/home.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/led_status.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/map_content.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/maps.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/network_info.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/rooms.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/routines.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/status.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/volume.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/transport/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/transport/channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/transport/local_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/transport/mqtt_channel.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/diagnostics.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/exceptions.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/b01_map_parser.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/map_parser.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/proto/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/proto/b01_scmap.proto +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/map/proto/b01_scmap_pb2.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/mqtt/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/mqtt/health_manager.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/mqtt/roborock_session.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/mqtt/session.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocols/__init__.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocols/a01_protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocols/b01_q10_protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocols/b01_q7_protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/protocols/v1_protocol.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/py.typed +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/roborock_message.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/roborock_typing.py +0 -0
- {python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-roborock
|
|
3
|
-
Version: 5.15.
|
|
3
|
+
Version: 5.15.2
|
|
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/
|
|
@@ -17,8 +17,6 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
17
17
|
Requires-Python: <4,>=3.11
|
|
18
18
|
Requires-Dist: aiohttp<4,>=3.8.2
|
|
19
19
|
Requires-Dist: aiomqtt<3,>=2.5.0
|
|
20
|
-
Requires-Dist: click-shell~=2.1
|
|
21
|
-
Requires-Dist: click>=8
|
|
22
20
|
Requires-Dist: construct<3,>=2.10.57
|
|
23
21
|
Requires-Dist: paho-mqtt<3.0.0,>=1.6.1
|
|
24
22
|
Requires-Dist: protobuf<8,>=6.31.1
|
|
@@ -26,6 +24,11 @@ Requires-Dist: pycryptodomex~=3.18; sys_platform == 'darwin'
|
|
|
26
24
|
Requires-Dist: pycryptodome~=3.18
|
|
27
25
|
Requires-Dist: pyrate-limiter<5,>=4.0.0
|
|
28
26
|
Requires-Dist: vacuum-map-parser-roborock
|
|
27
|
+
Provides-Extra: cli
|
|
28
|
+
Requires-Dist: click-shell~=2.1; extra == 'cli'
|
|
29
|
+
Requires-Dist: click>=8; extra == 'cli'
|
|
30
|
+
Requires-Dist: pyshark<0.7,>=0.6; extra == 'cli'
|
|
31
|
+
Requires-Dist: pyyaml>=6.0.3; extra == 'cli'
|
|
29
32
|
Description-Content-Type: text/markdown
|
|
30
33
|
|
|
31
34
|
# Roborock
|
|
@@ -50,6 +53,11 @@ Install this via pip (or your favourite package manager):
|
|
|
50
53
|
|
|
51
54
|
`pip install python-roborock`
|
|
52
55
|
|
|
56
|
+
To use the `roborock` command line tool, install the `cli` extra, which pulls in
|
|
57
|
+
its additional dependencies (click, pyyaml, pyshark):
|
|
58
|
+
|
|
59
|
+
`pip install python-roborock[cli]`
|
|
60
|
+
|
|
53
61
|
## Example Usage
|
|
54
62
|
|
|
55
63
|
See [examples/example.py](examples/example.py) for a more full featured example,
|
|
@@ -20,6 +20,11 @@ Install this via pip (or your favourite package manager):
|
|
|
20
20
|
|
|
21
21
|
`pip install python-roborock`
|
|
22
22
|
|
|
23
|
+
To use the `roborock` command line tool, install the `cli` extra, which pulls in
|
|
24
|
+
its additional dependencies (click, pyyaml, pyshark):
|
|
25
|
+
|
|
26
|
+
`pip install python-roborock[cli]`
|
|
27
|
+
|
|
23
28
|
## Example Usage
|
|
24
29
|
|
|
25
30
|
See [examples/example.py](examples/example.py) for a more full featured example,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-roborock"
|
|
3
|
-
version = "5.15.
|
|
3
|
+
version = "5.15.2"
|
|
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"
|
|
@@ -19,7 +19,6 @@ classifiers = [
|
|
|
19
19
|
"Topic :: Software Development :: Libraries",
|
|
20
20
|
]
|
|
21
21
|
dependencies = [
|
|
22
|
-
"click>=8",
|
|
23
22
|
"aiohttp>=3.8.2,<4",
|
|
24
23
|
"pycryptodome~=3.18",
|
|
25
24
|
"pycryptodomex~=3.18 ; sys_platform == 'darwin'",
|
|
@@ -29,7 +28,16 @@ dependencies = [
|
|
|
29
28
|
"vacuum-map-parser-roborock",
|
|
30
29
|
"pyrate-limiter>=4.0.0,<5",
|
|
31
30
|
"aiomqtt>=2.5.0,<3",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
# Dependencies required by the `roborock` command line tool (roborock.cli).
|
|
35
|
+
# Install with: pip install python-roborock[cli]
|
|
36
|
+
cli = [
|
|
37
|
+
"click>=8",
|
|
32
38
|
"click-shell~=2.1",
|
|
39
|
+
"pyyaml>=6.0.3",
|
|
40
|
+
"pyshark>=0.6,<0.7",
|
|
33
41
|
]
|
|
34
42
|
|
|
35
43
|
[project.urls]
|
|
@@ -41,20 +49,20 @@ roborock = "roborock.cli:main"
|
|
|
41
49
|
|
|
42
50
|
[dependency-groups]
|
|
43
51
|
dev = [
|
|
52
|
+
# Pull in the CLI dependencies so maintainers can run the `roborock`
|
|
53
|
+
# command and pdoc can import roborock.cli for docs generation.
|
|
54
|
+
"python-roborock[cli]",
|
|
44
55
|
"pytest-asyncio>=1.1.0",
|
|
45
56
|
"pytest",
|
|
46
57
|
"pre-commit>=3.5,<5.0",
|
|
47
58
|
"mypy",
|
|
48
59
|
"ruff==0.14.11",
|
|
49
60
|
"codespell",
|
|
50
|
-
"pyshark>=0.6,<0.7",
|
|
51
61
|
"aioresponses>=0.7.7,<0.8",
|
|
52
62
|
"freezegun>=1.5.1,<2",
|
|
53
63
|
"pytest-timeout>=2.3.1,<3",
|
|
54
64
|
"syrupy>=4.9.1,<6",
|
|
55
65
|
"pdoc>=15.0.4,<17",
|
|
56
|
-
"pyyaml>=6.0.3",
|
|
57
|
-
"pyshark>=0.6",
|
|
58
66
|
"pytest-cov>=7.0.0",
|
|
59
67
|
]
|
|
60
68
|
|
|
@@ -34,12 +34,18 @@ from dataclasses import asdict, dataclass
|
|
|
34
34
|
from pathlib import Path
|
|
35
35
|
from typing import Any, cast
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
import
|
|
39
|
-
import
|
|
40
|
-
|
|
41
|
-
from pyshark
|
|
42
|
-
from pyshark.
|
|
37
|
+
try:
|
|
38
|
+
import click
|
|
39
|
+
import click_shell
|
|
40
|
+
import yaml
|
|
41
|
+
from pyshark import FileCapture # type: ignore
|
|
42
|
+
from pyshark.capture.live_capture import LiveCapture, UnknownInterfaceException # type: ignore
|
|
43
|
+
from pyshark.packet.packet import Packet # type: ignore
|
|
44
|
+
except ImportError as err:
|
|
45
|
+
raise SystemExit(
|
|
46
|
+
f"The 'roborock' command line tool requires extra dependencies that are not installed ({err.name}).\n"
|
|
47
|
+
"Install them with:\n\n pip install python-roborock[cli]\n"
|
|
48
|
+
) from err
|
|
43
49
|
|
|
44
50
|
from roborock import RoborockCommand
|
|
45
51
|
from roborock.data import RoborockBase, UserData
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import hashlib
|
|
3
3
|
import hmac
|
|
4
|
+
import json
|
|
4
5
|
import logging
|
|
5
6
|
import math
|
|
6
7
|
import secrets
|
|
@@ -646,6 +647,31 @@ class RoborockApiClient:
|
|
|
646
647
|
else:
|
|
647
648
|
raise RoborockException(f"schedule_response result was an unexpected type: {schedules}")
|
|
648
649
|
|
|
650
|
+
async def create_job(self, user_data: UserData, device_id: str, job: dict) -> dict:
|
|
651
|
+
"""Create a /jobs entry (schedule or one-time room clean) on a B01 device.
|
|
652
|
+
|
|
653
|
+
Body-bearing writes must sign the request body in the Hawk payload slot and send those same
|
|
654
|
+
compact bytes via ``data=``; ``json=`` would re-serialize with spaces and break the MAC.
|
|
655
|
+
"""
|
|
656
|
+
rriot = user_data.rriot
|
|
657
|
+
if rriot is None:
|
|
658
|
+
raise RoborockException("rriot is none")
|
|
659
|
+
if rriot.r.a is None:
|
|
660
|
+
raise RoborockException("Missing field 'a' in rriot reference")
|
|
661
|
+
path = f"/user/devices/{device_id}/jobs"
|
|
662
|
+
job_request = PreparedRequest(
|
|
663
|
+
rriot.r.a,
|
|
664
|
+
self.session,
|
|
665
|
+
{
|
|
666
|
+
"Authorization": _get_hawk_authentication(rriot, path, body=job),
|
|
667
|
+
"Content-Type": "application/json",
|
|
668
|
+
},
|
|
669
|
+
)
|
|
670
|
+
response = await job_request.request("post", path, data=_compact_json(job).encode())
|
|
671
|
+
if not response.get("success"):
|
|
672
|
+
raise RoborockException(response)
|
|
673
|
+
return response
|
|
674
|
+
|
|
649
675
|
async def get_products(self, user_data: UserData) -> ProductResponse:
|
|
650
676
|
"""Gets all products and their schemas, good for determining status codes and model numbers."""
|
|
651
677
|
base_url = await self.base_url
|
|
@@ -738,11 +764,25 @@ def _process_extra_hawk_values(values: dict | None) -> str:
|
|
|
738
764
|
return hashlib.md5("&".join(result).encode()).hexdigest()
|
|
739
765
|
|
|
740
766
|
|
|
741
|
-
def
|
|
767
|
+
def _compact_json(body: dict) -> str:
|
|
768
|
+
"""Serialize a JSON body to the exact compact bytes that are both signed and sent."""
|
|
769
|
+
return json.dumps(body, separators=(",", ":"))
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
def _get_hawk_authentication(
|
|
773
|
+
rriot: RRiot,
|
|
774
|
+
url: str,
|
|
775
|
+
formdata: dict | None = None,
|
|
776
|
+
params: dict | None = None,
|
|
777
|
+
body: dict | None = None,
|
|
778
|
+
) -> str:
|
|
742
779
|
timestamp = math.floor(time.time())
|
|
743
780
|
nonce = secrets.token_urlsafe(6)
|
|
744
|
-
formdata_str = _process_extra_hawk_values(formdata)
|
|
745
781
|
params_str = _process_extra_hawk_values(params)
|
|
782
|
+
if body is not None:
|
|
783
|
+
payload_str = hashlib.md5(_compact_json(body).encode()).hexdigest()
|
|
784
|
+
else:
|
|
785
|
+
payload_str = _process_extra_hawk_values(formdata)
|
|
746
786
|
|
|
747
787
|
prestr = ":".join(
|
|
748
788
|
[
|
|
@@ -752,7 +792,7 @@ def _get_hawk_authentication(rriot: RRiot, url: str, formdata: dict | None = Non
|
|
|
752
792
|
str(timestamp),
|
|
753
793
|
hashlib.md5(url.encode()).hexdigest(),
|
|
754
794
|
params_str,
|
|
755
|
-
|
|
795
|
+
payload_str,
|
|
756
796
|
]
|
|
757
797
|
)
|
|
758
798
|
mac = base64.b64encode(hmac.new(rriot.h.encode(), prestr.encode(), hashlib.sha256).digest()).decode()
|
|
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-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q10/b01_q10_code_mappings.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/data/b01_q10/b01_q10_containers.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/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
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/__init__.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q10/command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/__init__.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/clean_summary.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/b01/q7/map_content.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/clean_summary.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/device_features.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/do_not_disturb.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/dust_collection_mode.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/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-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/network_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/smart_wash_params.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/traits/v1/wash_towel_mode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/roborock/devices/transport/local_channel.py
RENAMED
|
File without changes
|
{python_roborock-5.15.0 → python_roborock-5.15.2}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|