homebridge-roborock-matter 3.4.17 → 3.4.18
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 +10 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/roborockLib/roborockAPI.js +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.4.18
|
|
4
|
+
|
|
5
|
+
**A robot that drops off the Roborock cloud filled the log with stack traces about the plugin correctly deciding not to send.** When the transport a request would need is not there — the robot is marked offline, MQTT is down, or the local socket is not connected — the request queue declines to put it on the wire. That is a deliberate, calm decision, and it writes its own debug line where it happens. But the rejection then arrived at the error handler unclassified, so it was logged as a plugin error, with a full stack trace, once per poll, for as long as the condition lasted.
|
|
6
|
+
|
|
7
|
+
The shape it takes in a real log: a robot goes offline at 3:28 AM, and a single poll cycle produces six stack-traced errors in the same second, followed by one a minute after that. Nothing is wrong with the plugin in any of them.
|
|
8
|
+
|
|
9
|
+
These three refusals now go through the same throttle the request timeouts have always used: one warning, then a suppressed-count summary when the window reopens. Each reason keeps its own bucket, so a robot being offline does not silence the reporting of a separate MQTT outage. Errors that are genuinely the plugin's fault — including its failure to build a request at all — are untouched and still log with their stack.
|
|
10
|
+
|
|
11
|
+
`__tests__/refused-sends-are-not-plugin-errors.test.js` enumerates the rule over the source rather than over the three messages that were reported: every message the request queue can reject with must be one the classifier recognises, so a refusal path added later fails the test until it is classified. Verified red against 3.4.17: 10 of 15 failed.
|
|
12
|
+
|
|
3
13
|
## 3.4.17
|
|
4
14
|
|
|
5
15
|
**Installing this package asked npm to build it, and that build could only ever fail or warn.** `dist/` is in the published tarball and `main` points into it, so nothing a user installs needs compiling — but package.json still carried `"prepare": "npm run build"`, a hook npm runs at install time. The two things it could do to a user, both measured:
|
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. 566 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
|
|
|
@@ -143,7 +143,7 @@ The complete path — robot → plugin → Homebridge → matter.js store — wa
|
|
|
143
143
|
|
|
144
144
|
## Contributing
|
|
145
145
|
|
|
146
|
-
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with
|
|
146
|
+
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with 566 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.
|
|
147
147
|
|
|
148
148
|
## Support the project
|
|
149
149
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-roborock-matter",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.18",
|
|
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": {
|
|
@@ -3827,6 +3827,27 @@ class Roborock {
|
|
|
3827
3827
|
return "timeout";
|
|
3828
3828
|
}
|
|
3829
3829
|
|
|
3830
|
+
// `messageQueueHandler.sendRequest` declines to put a request on the wire
|
|
3831
|
+
// when the transport it would need is not there. It writes its own calm
|
|
3832
|
+
// debug line at the refusal site, so the rejection describes a transport
|
|
3833
|
+
// condition, not a plugin failure — logging it as an error with a stack
|
|
3834
|
+
// trace once per poll buried real problems whenever a robot dropped off
|
|
3835
|
+
// the Roborock cloud. Each reason keeps its own kind so that one outage
|
|
3836
|
+
// does not silence the reporting of another.
|
|
3837
|
+
if (/Not sending method .+ request\./.test(text)) {
|
|
3838
|
+
if (text.includes("is offline")) {
|
|
3839
|
+
return "device offline";
|
|
3840
|
+
}
|
|
3841
|
+
if (text.includes("Cloud connection not available")) {
|
|
3842
|
+
return "cloud unavailable";
|
|
3843
|
+
}
|
|
3844
|
+
if (text.includes("Local connection not available")) {
|
|
3845
|
+
return "local connection unavailable";
|
|
3846
|
+
}
|
|
3847
|
+
|
|
3848
|
+
return "transport unavailable";
|
|
3849
|
+
}
|
|
3850
|
+
|
|
3830
3851
|
if (text.includes("retry")) {
|
|
3831
3852
|
return "retry";
|
|
3832
3853
|
}
|