Skip to content

Commit f9c8e6d

Browse files
committed
Merge remote-tracking branch 'origin/wash_towels' into wash_towels
2 parents b9f8ca5 + f46729d commit f9c8e6d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1700
-162
lines changed

CHANGELOG.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,184 @@
22

33
<!-- version list -->
44

5+
## v4.19.0 (2026-03-08)
6+
7+
### Bug Fixes
8+
9+
- Make room name always room num and not unknown
10+
([#780](https://github.com/Python-roborock/python-roborock/pull/780),
11+
[`2bd569c`](https://github.com/Python-roborock/python-roborock/commit/2bd569caffe7e85bc08637fd9b8ed70eeade5aa8))
12+
13+
### Chores
14+
15+
- Address comments ([#780](https://github.com/Python-roborock/python-roborock/pull/780),
16+
[`2bd569c`](https://github.com/Python-roborock/python-roborock/commit/2bd569caffe7e85bc08637fd9b8ed70eeade5aa8))
17+
18+
### Features
19+
20+
- Use get_rooms to limit issues with missing room names
21+
([#780](https://github.com/Python-roborock/python-roborock/pull/780),
22+
[`2bd569c`](https://github.com/Python-roborock/python-roborock/commit/2bd569caffe7e85bc08637fd9b8ed70eeade5aa8))
23+
24+
25+
## v4.18.1 (2026-03-07)
26+
27+
### Bug Fixes
28+
29+
- Don't reconnect on no active subscribers
30+
([#779](https://github.com/Python-roborock/python-roborock/pull/779),
31+
[`9760519`](https://github.com/Python-roborock/python-roborock/commit/9760519e822d06fac74e4a14bc11003e5fd2ca21))
32+
33+
34+
## v4.18.0 (2026-03-06)
35+
36+
### Bug Fixes
37+
38+
- Correct mop intensity code for slider
39+
([#777](https://github.com/Python-roborock/python-roborock/pull/777),
40+
[`f83f36a`](https://github.com/Python-roborock/python-roborock/commit/f83f36a8e96bee3eab7e0ee21cd296653546310a))
41+
42+
### Features
43+
44+
- Add the ability to not verify TLS for MQTT connections
45+
([#776](https://github.com/Python-roborock/python-roborock/pull/776),
46+
[`fc7cf75`](https://github.com/Python-roborock/python-roborock/commit/fc7cf75e088cf74f6f6f648afb927fdb03bc9e23))
47+
48+
49+
## v4.17.2 (2026-03-01)
50+
51+
### Bug Fixes
52+
53+
- Bump pyrate ([#775](https://github.com/Python-roborock/python-roborock/pull/775),
54+
[`57083ab`](https://github.com/Python-roborock/python-roborock/commit/57083ab27606af82b5457c82d35e63dd6f5e5754))
55+
56+
57+
## v4.17.1 (2026-02-22)
58+
59+
### Bug Fixes
60+
61+
- Remove carpet clean mode ([#772](https://github.com/Python-roborock/python-roborock/pull/772),
62+
[`931b68e`](https://github.com/Python-roborock/python-roborock/commit/931b68ea4fcb1d61a310d534cba662a704b6dca3))
63+
64+
65+
## v4.17.0 (2026-02-22)
66+
67+
### Chores
68+
69+
- Add dss to status ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
70+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
71+
72+
- Add hash ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
73+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
74+
75+
- Add more info about the dynamic attributes
76+
([#611](https://github.com/Python-roborock/python-roborock/pull/611),
77+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
78+
79+
- Add some docs and a basic test
80+
([#611](https://github.com/Python-roborock/python-roborock/pull/611),
81+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
82+
83+
- Add testing ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
84+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
85+
86+
- Add warning about hash for RoborockModeEnum
87+
([#611](https://github.com/Python-roborock/python-roborock/pull/611),
88+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
89+
90+
- Address comments ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
91+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
92+
93+
- Change str ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
94+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
95+
96+
- Do dynamic status ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
97+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
98+
99+
- Update e2e ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
100+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
101+
102+
### Features
103+
104+
- Add more data and region ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
105+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
106+
107+
- Make status dynamic ([#611](https://github.com/Python-roborock/python-roborock/pull/611),
108+
[`3e4a0be`](https://github.com/Python-roborock/python-roborock/commit/3e4a0be03cdcc761f91c1cdd20cd5ee3b1f8ceee))
109+
110+
111+
## v4.16.0 (2026-02-22)
112+
113+
### Chores
114+
115+
- Fix test pydoc lint error ([#771](https://github.com/Python-roborock/python-roborock/pull/771),
116+
[`e72d5ca`](https://github.com/Python-roborock/python-roborock/commit/e72d5ca7b7997760498108761d5b9a8c7907addc))
117+
118+
- Update tests/devices/traits/b01/q10/test_status.py
119+
([#771](https://github.com/Python-roborock/python-roborock/pull/771),
120+
[`e72d5ca`](https://github.com/Python-roborock/python-roborock/commit/e72d5ca7b7997760498108761d5b9a8c7907addc))
121+
122+
### Features
123+
124+
- Update the status listener API
125+
([#771](https://github.com/Python-roborock/python-roborock/pull/771),
126+
[`e72d5ca`](https://github.com/Python-roborock/python-roborock/commit/e72d5ca7b7997760498108761d5b9a8c7907addc))
127+
128+
129+
## v4.15.0 (2026-02-21)
130+
131+
### Bug Fixes
132+
133+
- **q10**: Correct typo in docstring for StatusTrait
134+
([#770](https://github.com/Python-roborock/python-roborock/pull/770),
135+
[`c0a313b`](https://github.com/Python-roborock/python-roborock/commit/c0a313b385da722a81ffe4aeade3bf104bd254a8))
136+
137+
### Features
138+
139+
- **q10**: Add status update listener API
140+
([#770](https://github.com/Python-roborock/python-roborock/pull/770),
141+
[`c0a313b`](https://github.com/Python-roborock/python-roborock/commit/c0a313b385da722a81ffe4aeade3bf104bd254a8))
142+
143+
- **q10**: Add status update listener callback API
144+
([#770](https://github.com/Python-roborock/python-roborock/pull/770),
145+
[`c0a313b`](https://github.com/Python-roborock/python-roborock/commit/c0a313b385da722a81ffe4aeade3bf104bd254a8))
146+
147+
148+
## v4.14.0 (2026-02-15)
149+
150+
### Chores
151+
152+
- Address review feedback ([#769](https://github.com/Python-roborock/python-roborock/pull/769),
153+
[`38d336b`](https://github.com/Python-roborock/python-roborock/commit/38d336b3735dc04e60ba47f0c0041705567e72f6))
154+
155+
- Fix lint errors found by co-pilot reviews
156+
([#769](https://github.com/Python-roborock/python-roborock/pull/769),
157+
[`38d336b`](https://github.com/Python-roborock/python-roborock/commit/38d336b3735dc04e60ba47f0c0041705567e72f6))
158+
159+
- Fix typos in files that were renamed
160+
([#769](https://github.com/Python-roborock/python-roborock/pull/769),
161+
[`38d336b`](https://github.com/Python-roborock/python-roborock/commit/38d336b3735dc04e60ba47f0c0041705567e72f6))
162+
163+
- Fix typos updated in previous PRs
164+
([#769](https://github.com/Python-roborock/python-roborock/pull/769),
165+
[`38d336b`](https://github.com/Python-roborock/python-roborock/commit/38d336b3735dc04e60ba47f0c0041705567e72f6))
166+
167+
### Features
168+
169+
- Add initial Q10 support for Status Trait
170+
([#769](https://github.com/Python-roborock/python-roborock/pull/769),
171+
[`38d336b`](https://github.com/Python-roborock/python-roborock/commit/38d336b3735dc04e60ba47f0c0041705567e72f6))
172+
173+
174+
## v4.13.0 (2026-02-14)
175+
176+
### Features
177+
178+
- **q10**: Add Roborock Q10 S5+ support with CLI commands
179+
([#766](https://github.com/Python-roborock/python-roborock/pull/766),
180+
[`86aeba1`](https://github.com/Python-roborock/python-roborock/commit/86aeba1e3e0a9d51f98ba93c4423a0ee58e3fb55))
181+
182+
5183
## v4.12.0 (2026-02-02)
6184

7185
### Bug Fixes

docs/DEVICES.md

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ Cloud and Network.
1515
* **Washers (A01)**: Use `device.a01_properties` for Dyad/Zeo devices.
1616
* Use `await device.a01_properties.query_values([...])` to get state.
1717
* Use `await device.a01_properties.set_value(protocol, value)` to control.
18+
* **Vacuums (B01 Q10)**: Use `device.b01_q10_properties` for Q10 series devices.
19+
* Use `device.b01_q10_properties.vacuum` to access vacuum commands (start, pause, stop, dock, empty dustbin, set clean mode, set fan level).
20+
* Use `device.b01_q10_properties.command.send()` for raw DP commands.
21+
* **Vacuums (B01 Q7)**: Use `device.b01_q7_properties` for Q7 series devices.
1822

1923
## Background: Understanding Device Protocols
2024

@@ -26,7 +30,7 @@ Cloud and Network.
2630
|----------|----------------|------|-----------|--------------|-------|
2731
| **V1** (`pv=1.0`) | Most vacuum robots (S7, S8, Q5, Q7, etc.) ||| `V1Channel` with `RpcChannel` | Prefers local, falls back to MQTT |
2832
| **A01** (`pv=A01`) | Dyad, Zeo washers ||| `MqttChannel` + helpers | MQTT only, DPS protocol |
29-
| **B01** (`pv=B01`) | Some newer models ||| `MqttChannel` + helpers | MQTT only, DPS protocol |
33+
| **B01** (`pv=B01`) | Q7, Q10 series ||| `MqttChannel` + helpers | MQTT only, DPS protocol |
3034

3135
**Key Point:** The `DeviceManager` automatically detects the protocol version and creates the appropriate channel type. You don't need to handle this manually.
3236

@@ -47,7 +51,7 @@ graph TB
4751
subgraph "Device Types by Protocol"
4852
V1Dev[V1 Devices<br/>pv=1.0<br/>Most vacuums]
4953
A01Dev[A01 Devices<br/>pv=A01<br/>Dyad, Zeo]
50-
B01Dev[B01 Devices<br/>pv=B01<br/>Some models]
54+
B01Dev[B01 Devices<br/>pv=B01<br/>Q7, Q10 series]
5155
end
5256
5357
subgraph "Traits Layer"
@@ -148,7 +152,7 @@ graph TB
148152
|----------|-------------|---------------|--------------|----------|
149153
| **V1** (`pv=1.0`) | `V1Channel` with `RpcChannel` | ✅ Yes | Multi-strategy (Local → MQTT) | Most vacuum robots |
150154
| **A01** (`pv=A01`) | `MqttChannel` + helpers | ❌ No | Direct MQTT | Dyad, Zeo washers |
151-
| **B01** (`pv=B01`) | `MqttChannel` + helpers | ❌ No | Direct MQTT | Some newer models |
155+
| **B01** (`pv=B01`) | `MqttChannel` + helpers | ❌ No | Direct MQTT | Q7, Q10 series |
152156

153157
## Account Setup Internals
154158

@@ -249,7 +253,7 @@ sequenceDiagram
249253
RPC-->>App: Status
250254
```
251255

252-
#### A01/B01 Devices (Dyad, Zeo) - MQTT Only
256+
#### A01/B01 Devices (Dyad, Zeo, Q7, Q10) - MQTT Only
253257

254258
```mermaid
255259
sequenceDiagram
@@ -302,7 +306,7 @@ sequenceDiagram
302306
| **Local Support** | ✅ Yes, preferred | ❌ No |
303307
| **Fallback** | Local → MQTT | N/A |
304308
| **Connection** | Requires network info fetch | Direct MQTT |
305-
| **Examples** | Most vacuum robots | Dyad washers, Zeo models |
309+
| **Examples** | Most vacuum robots | Dyad washers, Zeo, Q7, Q10 |
306310

307311
### MQTT Connection (All Devices)
308312

@@ -510,7 +514,7 @@ Different device models use different protocol versions:
510514
|----------|---------|----------|
511515
| V1 | Most vacuum robots | JSON RPC with AES encryption |
512516
| A01 | Dyad, Zeo | DPS-based protocol |
513-
| B01 | Some newer models | DPS-based protocol |
517+
| B01 | Q7, Q10 series | DPS-based protocol |
514518
| L01 | Local protocol variant | Binary protocol negotiation |
515519

516520
The protocol layer handles encoding/decoding transparently based on the device's `pv` field.
@@ -577,11 +581,14 @@ roborock/
577581
│ | ├── b01_q10_channel.py # B01 Q10 protocol helpers
578582
│ | └── ...
579583
│ └── traits/ # High-level device-specific command traits
580-
│ └── v1/ # V1 device traits
581-
│ ├── __init__.py # Trait initialization
582-
│ ├── clean.py # Cleaning commands
583-
│ ├── map.py # Map management
584-
│ └── ...
584+
│ ├── v1/ # V1 device traits
585+
│ │ ├── __init__.py # Trait initialization
586+
│ │ ├── clean.py # Cleaning commands
587+
│ │ ├── map.py # Map management
588+
│ │ └── ...
589+
│ └── b01/ # B01 device traits
590+
│ ├── q10/ # Q10 series (vacuum, command)
591+
│ └── q7/ # Q7 series
585592
├── mqtt/ # MQTT session management
586593
│ ├── session.py # Base session interface
587594
│ └── roborock_session.py # MQTT session with idle timeout

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "python-roborock"
3-
version = "4.12.0"
3+
version = "4.19.0"
44
description = "A package to control Roborock vacuums."
55
authors = [{ name = "humbertogontijo", email = "humbertogontijo@users.noreply.github.com" }, {name="Lash-L"}, {name="allenporter"}]
66
requires-python = ">=3.11, <4"
@@ -26,7 +26,7 @@ dependencies = [
2626
"paho-mqtt>=1.6.1,<3.0.0",
2727
"construct>=2.10.57,<3",
2828
"vacuum-map-parser-roborock",
29-
"pyrate-limiter>=3.7.0,<4",
29+
"pyrate-limiter>=4.0.0,<5",
3030
"aiomqtt>=2.5.0,<3",
3131
"click-shell~=2.1",
3232
]

0 commit comments

Comments
 (0)