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 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. 1419 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.
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 1419 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.
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.1",
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
- const autoEmptyDockTypes = new Set([1, 3, 5, 6, 7, 8, 9]);
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) ||