homebridge-roborock-matter 3.17.1 → 3.17.2
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.
- package/CHANGELOG.md +8 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/roborockLib/lib/deviceFeatures.js +15 -0
- package/roborockLib/roborockAPI.js +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.17.2
|
|
4
|
+
|
|
5
|
+
**The Qrevo CurvX's dock can now offer the Empty Bin switch.** Reported with a diagnostics export, and then settled by hand, by [@jcoz00](https://github.com/jcoz00) in [#6](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/6). His a185 reports `dock_type: 20`, and the dock table this plugin inherited stops at 9 — so the CurvX fell through to "unknown dock" and was treated as having no auto-empty capability, which kept the optional Empty Bin switch added in 3.17.0 from ever being offered for it. Dock type 20 is now a named, recognised auto-empty dock.
|
|
6
|
+
|
|
7
|
+
The switch is still opt-in and still off by default, so nothing changes for anyone who has not asked for it.
|
|
8
|
+
|
|
9
|
+
**Only the auto-empty is granted, and only because its owner confirmed it.** Upstream also names a dozen dock codes above 9 that this project has had no report for, and none of those was added — a capability granted on a table alone is what cost a Q Revo S owner a suction level its robot does not have in [#10](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/10). Wash and dry are unconfirmed on this dock and stay unclaimed. A test now pins both halves: dock type 20 is in the set because an owner said so, and the codes nobody has reported stay out until one does.
|
|
10
|
+
|
|
3
11
|
## 3.17.1
|
|
4
12
|
|
|
5
13
|
**Closing the plugin's settings page could print a Node crash dump into your Homebridge log.** Reported with the log to prove it by [@jcoz00](https://github.com/jcoz00) in [#6](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/6). The Homebridge UI runs the settings-page server as a child process and closes its IPC channel the moment the page goes away; every reply that server sends is a `process.send()`, including the `ready()` handshake it fires before serving a single request. A send that loses the race against that close is reported asynchronously as an unhandled `'error'` event, which is fatal — so a closed settings page ended in `Error: write EPIPE`, a stack trace and a `Node.js v24.19.0` banner in the log. Nothing was broken and nothing in the log said so. A dead channel now ends that child process quietly; every other error stays exactly as loud as it was.
|
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ This is the most feature-packed, most thoroughly engineered Roborock plugin for
|
|
|
37
37
|
- 📍 **See where it's cleaning — live.** Apple Home shows _"Cleaning — Kitchen"_ with the room the robot is actually inside, updating as it moves from room to room. Works even for cleans started from the robot's button or the Roborock app. No other Homebridge plugin does this.
|
|
38
38
|
- 🧭 **One robot, one tile — and as many robots as you own.** Sign in once and your whole fleet comes along: every vacuum on your account appears as its own clean, native accessory in Apple Home. No clutter of fake fans and helper switches, and rooms appear with the names you gave them in the Roborock app.
|
|
39
39
|
- ⚡ **Fast and reliable.** Commands go directly to the robot over your own network whenever possible, with the Roborock cloud as automatic backup — and built-in diagnostics in the settings if you ever want to look under the hood.
|
|
40
|
-
- 🛡️ **Verified by Homebridge.** Reviewed and endorsed by the Homebridge team.
|
|
40
|
+
- 🛡️ **Verified by Homebridge.** Reviewed and endorsed by the Homebridge team. 1438 automated tests, zero known vulnerabilities, no analytics, and a startup designed to never crash your Homebridge — even when your Wi-Fi or the Roborock cloud has a bad day.
|
|
41
41
|
|
|
42
42
|
## Features
|
|
43
43
|
|
|
@@ -252,7 +252,7 @@ The complete path — robot → plugin → Homebridge → matter.js store — wa
|
|
|
252
252
|
|
|
253
253
|
## Contributing
|
|
254
254
|
|
|
255
|
-
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with
|
|
255
|
+
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with 1438 tests (protocol fixtures verified against the [python-roborock](https://github.com/Python-roborock/python-roborock) reference), strict TypeScript checking, and CI across Node 22/24 × Homebridge 1.11/2.x — `npm test` before you push and you're set.
|
|
256
256
|
|
|
257
257
|
## Support the project
|
|
258
258
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-roborock-matter",
|
|
3
|
-
"version": "3.17.
|
|
3
|
+
"version": "3.17.2",
|
|
4
4
|
"description": "The most complete Roborock plugin for Apple Home. Supports the entire Roborock lineup — from the classic S-series to the new 2025 Q7 series that no other plugin can control. Sign in with your Roborock account and get native start/stop, room cleaning, suction levels, battery, and live 'cleaning in the kitchen' room tracking. Verified by Homebridge.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -68,6 +68,12 @@ const dockTypes = {
|
|
|
68
68
|
7: "Empty Wash Fill Dry Dock (S8 Pro Ultra)",
|
|
69
69
|
8: "Empty Wash Fill Dry Dock (Q Revo)",
|
|
70
70
|
9: "Empty Wash Fill Dry Dock (Q Revo Pro)",
|
|
71
|
+
// Upstream python-roborock calls 20 `k1s_dock`. It reached this project as a
|
|
72
|
+
// diagnostics export from an a185 (Qrevo CurvX) owner in issue #6 — the
|
|
73
|
+
// first dock code ever seen here above 9 — and he confirmed the auto-empty
|
|
74
|
+
// by hand. Named for the capability he reported, not for the ones upstream's
|
|
75
|
+
// codename might imply: nobody has confirmed wash or dry on this dock.
|
|
76
|
+
20: "Auto-Empty Dock (K1S — Qrevo CurvX)",
|
|
71
77
|
};
|
|
72
78
|
|
|
73
79
|
const firmwareFeatures = {
|
|
@@ -1393,6 +1399,15 @@ class deviceFeatures {
|
|
|
1393
1399
|
this.isWashThenChargeCmdSupported();
|
|
1394
1400
|
this.isSupportedDrying();
|
|
1395
1401
|
break;
|
|
1402
|
+
// K1S: a185 Qrevo CurvX. Auto-empty only, and deliberately so — its
|
|
1403
|
+
// owner confirmed the dock empties the robot's bin (issue #6, 23 Aug
|
|
1404
|
+
// 2026), which is the whole of what was asked and the whole of what is
|
|
1405
|
+
// granted. Wash and dry are unconfirmed on this dock, and the a104
|
|
1406
|
+
// suction level in issue #10 is what a capability granted on a table
|
|
1407
|
+
// alone costs. Add them here on an owner's word, not on a codename's.
|
|
1408
|
+
case 20:
|
|
1409
|
+
this.isDustCollectionSettingSupported();
|
|
1410
|
+
break;
|
|
1396
1411
|
default:
|
|
1397
1412
|
break;
|
|
1398
1413
|
}
|
|
@@ -2456,7 +2456,13 @@ class Roborock {
|
|
|
2456
2456
|
|
|
2457
2457
|
supportsDustCollection(duid) {
|
|
2458
2458
|
const dockType = Number(this.getVacuumDeviceStatus(duid, "dock_type"));
|
|
2459
|
-
|
|
2459
|
+
// 20 (upstream `k1s_dock`, the a185 Qrevo CurvX) is here because its owner
|
|
2460
|
+
// confirmed the auto-empty in issue #6, not because upstream names the
|
|
2461
|
+
// code. Upstream also names 10, 11, 13-19, 21-24 and 26; none of those has
|
|
2462
|
+
// an owner report, so none of them is here. Keep this set and
|
|
2463
|
+
// `processDockType()` in step — a code in one but not the other is a dock
|
|
2464
|
+
// that either offers a switch it cannot drive or hides one it can.
|
|
2465
|
+
const autoEmptyDockTypes = new Set([1, 3, 5, 6, 7, 8, 9, 20]);
|
|
2460
2466
|
|
|
2461
2467
|
return (
|
|
2462
2468
|
autoEmptyDockTypes.has(dockType) ||
|