homebridge-roborock-matter 3.36.0 → 3.37.0
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 +31 -0
- package/README.md +2 -2
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -1
- package/docs/mqtt-session-diagnostics.md +78 -0
- package/homebridge-ui/public/index.js +7 -0
- package/package.json +1 -1
- package/roborockLib/lib/messageQueueHandler.js +22 -1
- package/roborockLib/lib/mqttSessionDiagnostics.js +178 -0
- package/roborockLib/lib/roborock_mqtt_connector.js +54 -2
- package/roborockLib/roborockAPI.js +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.37.0
|
|
4
|
+
|
|
5
|
+
**When a cloud request times out, the diagnostics report can now say whether the MQTT session was actually carrying anything at the time.**
|
|
6
|
+
|
|
7
|
+
All of this release is [@pponce](https://github.com/mathiashornbek/homebridge-roborock-matter/pull/29)'s work, in [#29](https://github.com/mathiashornbek/homebridge-roborock-matter/pull/29), the first of a four-part series. It is deliberately passive: nothing here reconnects, gates a request, changes transport selection, or touches the unanswered-method breaker. It only writes down what was observed.
|
|
8
|
+
|
|
9
|
+
### Why
|
|
10
|
+
|
|
11
|
+
A cloud timeout has always been ambiguous. `MQTT connection state: true` says the link believes it is up, which is exactly what it says when the link is up and delivering nothing — the failure #24, #27 and #28 all run into. Until now there was no way to tell those apart after the fact.
|
|
12
|
+
|
|
13
|
+
The snapshot now separates things that used to be one word:
|
|
14
|
+
|
|
15
|
+
- **`connected` and `subscriptionAcknowledged` are different claims.** A session can be connected with no usable subscription behind it.
|
|
16
|
+
- **Inbound is measured in 4 stages** — the raw MQTT callback, attribution to a known robot, successful decoding, and correlation to a pending request. A link that delivers frames nobody can attribute looks very different from one that delivers nothing, and both used to read as silence.
|
|
17
|
+
- **`rawSilenceDuringRequest`** records whether _any_ raw MQTT callback arrived between sending an eligible read and its timeout. This is a claim about the session, not about one robot, so unlike the two-robot correlation rule it works on a single-robot account — which is what #22 and #24 both are.
|
|
18
|
+
|
|
19
|
+
The report carries ages and counts only: no robot IDs, no topics, no credentials, no payloads.
|
|
20
|
+
|
|
21
|
+
### Found in review
|
|
22
|
+
|
|
23
|
+
Two things were wrong when this was first proposed, and both were the same shape as faults in 3.30.0 and 3.31.0 — a value that is published but never reaches the disk the reader reads from:
|
|
24
|
+
|
|
25
|
+
- **The snapshot never persisted.** `MqttSessionDiagnostics` was published through `setStateAsync` but was in neither `PERSISTED_STATE_IDS` nor `DEBOUNCED_PERSIST_IDS`, while the settings page reads it from `storagePath`. The new block would have rendered in tests and never in production. The suite was green because the UI test wrote the file itself. Both sets now contain it, and the shutdown flush was moved to _after_ transport teardown so the final disconnected snapshot reaches disk.
|
|
26
|
+
- **A subscription could never be acknowledged after a reconnect.** mqtt.js resubscribes on its own, before our handler runs, so our `subscribe` callback comes back with no error and an empty grant list. Read as a result, that meant every reconnected session reported "subscription not acknowledged" forever. Acknowledgement is now taken from real SUBACK packets on the client's `packetreceive` event, and an empty grant list is treated as the no-op it is. A SUBACK whose grants are refusals still counts as unacknowledged.
|
|
27
|
+
|
|
28
|
+
The second one was only visible because the test was rewritten to drive the real mqtt.js client against a loopback broker instead of a mock. The mock had been asserting the behaviour it was built to expect.
|
|
29
|
+
|
|
30
|
+
### Tests
|
|
31
|
+
|
|
32
|
+
2,187 tests, 36 more than 3.36.0, including a regression that drops the socket mid-session, withholds the second SUBACK, and verifies the session becomes acknowledged only when that packet actually arrives.
|
|
33
|
+
|
|
3
34
|
## 3.36.0
|
|
4
35
|
|
|
5
36
|
**The LAN connection now asks the robot which protocol it speaks, the way python-roborock always has, and a cloud session that has gone quiet is restarted.**
|
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. 2187 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
|
|
|
@@ -264,7 +264,7 @@ The complete path — robot → plugin → Homebridge → matter.js store — wa
|
|
|
264
264
|
|
|
265
265
|
## Contributing
|
|
266
266
|
|
|
267
|
-
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with
|
|
267
|
+
Model reports, diagnostics exports, and pull requests are very welcome. The codebase ships with 2187 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.
|
|
268
268
|
|
|
269
269
|
## Support the project
|
|
270
270
|
|
package/dist/ui/index.js
CHANGED
|
@@ -213,6 +213,8 @@ class RoborockUiServer {
|
|
|
213
213
|
const userDataState = this.readJsonFile(path_1.default.join(storagePath, "roborock.UserData"));
|
|
214
214
|
const transportDiagnosticsState = this.readJsonFile(path_1.default.join(storagePath, "roborock.TransportDiagnostics"));
|
|
215
215
|
const roborockDiagnosticsState = this.readJsonFile(path_1.default.join(storagePath, "roborock.RoborockDiagnostics"));
|
|
216
|
+
const mqttSessionState = this.readJsonFile(path_1.default.join(storagePath, "roborock.MqttSessionDiagnostics"));
|
|
217
|
+
const mqttSession = this.parseStatePayload(mqttSessionState === null || mqttSessionState === void 0 ? void 0 : mqttSessionState.val);
|
|
216
218
|
const homeData = this.parseStatePayload(homeDataState === null || homeDataState === void 0 ? void 0 : homeDataState.val);
|
|
217
219
|
const transportDiagnostics = this.parseStatePayload(transportDiagnosticsState === null || transportDiagnosticsState === void 0 ? void 0 : transportDiagnosticsState.val) || {};
|
|
218
220
|
const roborockDiagnostics = this.parseStatePayload(roborockDiagnosticsState === null || roborockDiagnosticsState === void 0 ? void 0 : roborockDiagnosticsState.val) || {};
|
|
@@ -283,6 +285,7 @@ class RoborockUiServer {
|
|
|
283
285
|
storagePath,
|
|
284
286
|
hasEncryptedToken: Boolean(userDataState === null || userDataState === void 0 ? void 0 : userDataState.val),
|
|
285
287
|
hasHomeData: Boolean(homeData),
|
|
288
|
+
mqttSession: mqttSession || null,
|
|
286
289
|
deviceCount: diagnostics.length,
|
|
287
290
|
devices: diagnostics,
|
|
288
291
|
};
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# MQTT session observations
|
|
2
|
+
|
|
3
|
+
The settings page's **Copy diagnostics** report includes an `mqttSession`
|
|
4
|
+
snapshot. Cloud timeout messages append a short summary only for correlated
|
|
5
|
+
silence or an unacknowledged subscription; the full snapshot stays in diagnostics.
|
|
6
|
+
This instrumentation does not change transport selection, subscription handling,
|
|
7
|
+
request readiness, retries, the unanswered-method breaker, or reconnection.
|
|
8
|
+
|
|
9
|
+
- `generation` increments on each MQTT connect event, including automatic
|
|
10
|
+
reconnects. It restarts with the plugin process; it is not a broker session ID.
|
|
11
|
+
- `connected` and `subscriptionAcknowledged` are separate observations. The latter
|
|
12
|
+
observes successful SUBACK packets through the current client's `packetreceive`
|
|
13
|
+
event, including mqtt.js automatic resubscriptions after reconnect. Nonempty
|
|
14
|
+
connect-handler callback grants also record the result for their captured
|
|
15
|
+
generation. mqtt.js can call back with no error and an empty granted list for
|
|
16
|
+
a topic it already knows; this is a no-op, not an acknowledgement or refusal.
|
|
17
|
+
Failed subscriptions and refused SUBACK grants remain unacknowledged. Late
|
|
18
|
+
callbacks from older connections and the legacy reconnect-handler callback
|
|
19
|
+
cannot acknowledge or revoke the new generation. The existing subscribe calls
|
|
20
|
+
remain unchanged; this does not gate sends. The timeout summary only says
|
|
21
|
+
"subscription not acknowledged" when the session is still connected.
|
|
22
|
+
- Inbound ages distinguish the raw MQTT callback, attribution to a known robot,
|
|
23
|
+
successful Roborock decoding, and correlation to a pending request. A correlated
|
|
24
|
+
reply can be a refusal or a secure-map acknowledgement, not necessarily a
|
|
25
|
+
completed successful operation. Unmatched messages do not update reply age.
|
|
26
|
+
- `lastLocalReplyAgeMs` records successful local request completions separately.
|
|
27
|
+
It is account-wide supporting context, not proof that every robot answers LAN.
|
|
28
|
+
- `null` means that stage has not been observed in this connection generation.
|
|
29
|
+
|
|
30
|
+
`correlatedSilenceObserved` requires unanswered `get_*` cloud requests from at
|
|
31
|
+
least two distinct robots in the preceding 60 seconds, on the current connected,
|
|
32
|
+
subscription-acknowledged generation. Each request must have seen no raw MQTT
|
|
33
|
+
callback since it was sent. Any raw callback (even one that cannot be attributed
|
|
34
|
+
or decoded), disconnect, or new generation clears this evidence. Repeated
|
|
35
|
+
failures from one robot, writes, and idle time alone do not qualify. The in-memory
|
|
36
|
+
set is bounded to 128 robots. This is deliberately a conservative observation,
|
|
37
|
+
not a diagnosis of the client, broker, network, or robot-cloud path. B01 methods
|
|
38
|
+
translated to `prop.get` and separate map-upload requests do not contribute to
|
|
39
|
+
this first observation rule; their inbound replies are still measured.
|
|
40
|
+
|
|
41
|
+
`rawSilenceDuringRequest` describes the latest eligible `get_*` cloud read
|
|
42
|
+
that timed out on the current connected, acknowledged generation: `true` means
|
|
43
|
+
no raw MQTT callback arrived between send and timeout, `false` means at least
|
|
44
|
+
one did, and `null` means no eligible timeout has been observed. It is useful
|
|
45
|
+
on single-robot accounts without relaxing the two-robot correlation rule.
|
|
46
|
+
`lastReadTimeoutAgeMs` dates that observation at `capturedAt`; later traffic
|
|
47
|
+
does not rewrite the historical result. Disconnect and connect reset both
|
|
48
|
+
fields. Writes, B01 translated reads, and old-generation timeouts cannot
|
|
49
|
+
supply this observation. An idle or non-answering robot can produce raw silence
|
|
50
|
+
on a healthy session: this is evidence to inspect, not a session-fault verdict
|
|
51
|
+
or a reason to change breaker/recovery policy in this PR.
|
|
52
|
+
|
|
53
|
+
The snapshot contains ages and counts, not robot IDs, MQTT topics, credentials,
|
|
54
|
+
or payloads. Activity-triggered publication is limited to once per 30 seconds;
|
|
55
|
+
connection transitions, subscription results, and cloud timeouts publish
|
|
56
|
+
immediately into memory. The production API debounces disk writes to at most
|
|
57
|
+
once per 60 seconds and flushes pending values on shutdown. The UI reads this
|
|
58
|
+
disk snapshot, so a new observation may take up to a minute to appear. Ages are measured with a monotonic clock **at `capturedAt`**, not
|
|
59
|
+
at report-copy time. A quiet or stopped plugin can therefore have an older
|
|
60
|
+
snapshot. A successful local-only workload can legitimately have no MQTT replies.
|
|
61
|
+
The existing timeout log suppression still applies; this adds no polling timer
|
|
62
|
+
or network probes.
|
|
63
|
+
|
|
64
|
+
Tests drive production connect/SUBACK/message callbacks, actual request timeouts,
|
|
65
|
+
the real API persistence/debounce and shutdown flush, the settings diagnostics
|
|
66
|
+
route, and the copied report. No diagnostics snapshot file is seeded by the test. Run:
|
|
67
|
+
|
|
68
|
+
```sh
|
|
69
|
+
npm test -- --runInBand __tests__/mqtt-session-observations.test.js
|
|
70
|
+
npm test -- --runInBand __tests__/mqtt-session-real-reconnect.test.js
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The reconnect regression uses the real mqtt.js client and production connector
|
|
74
|
+
against a loopback TCP broker implemented with mqtt.js's MQTT packet codec. It
|
|
75
|
+
drops the socket, withholds the second SUBACK, and verifies generation 2 becomes
|
|
76
|
+
acknowledged only after that packet arrives. It also checks the broker receives
|
|
77
|
+
exactly one SUBSCRIBE per connection. No Roborock account or external broker is
|
|
78
|
+
used. Upstream v3.36.0's recovery policy remains unchanged by this instrumentation.
|
|
@@ -1469,6 +1469,13 @@ async function buildDiagnosticsReport(result) {
|
|
|
1469
1469
|
"",
|
|
1470
1470
|
];
|
|
1471
1471
|
|
|
1472
|
+
if (result.mqttSession) {
|
|
1473
|
+
lines.push(
|
|
1474
|
+
`mqttSession (ages at capturedAt): ${formatDiagnosticPayload(result.mqttSession)}`
|
|
1475
|
+
);
|
|
1476
|
+
lines.push("");
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1472
1479
|
(result.devices || []).forEach((device, index) => {
|
|
1473
1480
|
lines.push(`device ${index + 1}: ${device.name || "Unknown device"}`);
|
|
1474
1481
|
lines.push(` duid: ${maskIdentifier(device.duid)}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-roborock-matter",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.37.0",
|
|
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": {
|
|
@@ -181,6 +181,7 @@ function describeCloudSilence(adapter, duid, receiptsAtSend) {
|
|
|
181
181
|
|
|
182
182
|
/**
|
|
183
183
|
* @typedef {Object} MqttConnector
|
|
184
|
+
* @property {import("./mqttSessionDiagnostics").MqttSessionDiagnostics} [sessionDiagnostics]
|
|
184
185
|
* @property {() => boolean} isConnected
|
|
185
186
|
* @property {(duid: string, message: Buffer) => void} sendMessage
|
|
186
187
|
*/
|
|
@@ -582,6 +583,11 @@ class messageQueueHandler {
|
|
|
582
583
|
typeof this.adapter.getCloudMessageReceiptCount === "function"
|
|
583
584
|
? this.adapter.getCloudMessageReceiptCount(duid)
|
|
584
585
|
: null;
|
|
586
|
+
const sessionDiagnostics =
|
|
587
|
+
this.adapter.rr_mqtt_connector.sessionDiagnostics;
|
|
588
|
+
const sessionRequest = useCloudConnection
|
|
589
|
+
? sessionDiagnostics?.captureRequest()
|
|
590
|
+
: undefined;
|
|
585
591
|
const timeout = this.adapter.setTimeout(() => {
|
|
586
592
|
this.adapter.pendingRequests.delete(messageID);
|
|
587
593
|
this.adapter.localConnector.clearChunkBuffer(duid);
|
|
@@ -594,8 +600,19 @@ class messageQueueHandler {
|
|
|
594
600
|
const transportWasUp = Boolean(
|
|
595
601
|
this.adapter.rr_mqtt_connector?.isConnected?.()
|
|
596
602
|
);
|
|
603
|
+
const sessionHealth = sessionDiagnostics?.noteTimeout(
|
|
604
|
+
duid,
|
|
605
|
+
method,
|
|
606
|
+
sessionRequest
|
|
607
|
+
);
|
|
608
|
+
const sessionSummary = sessionHealth?.correlatedSilenceObserved
|
|
609
|
+
? ` MQTT session: correlated silence across ${sessionHealth.silentReadRobotCount} robots (generation ${sessionHealth.generation}).`
|
|
610
|
+
: sessionHealth?.connected &&
|
|
611
|
+
!sessionHealth.subscriptionAcknowledged
|
|
612
|
+
? ` MQTT session: subscription not acknowledged (generation ${sessionHealth.generation}).`
|
|
613
|
+
: "";
|
|
597
614
|
const error = unansweredRequestError(
|
|
598
|
-
`Cloud request with id ${messageID} with method ${method} timed out after ${timeoutSeconds} seconds. MQTT connection state: ${transportWasUp}${describeCloudSilence(this.adapter, duid, receiptsAtSend)}`,
|
|
615
|
+
`Cloud request with id ${messageID} with method ${method} timed out after ${timeoutSeconds} seconds. MQTT connection state: ${transportWasUp}${describeCloudSilence(this.adapter, duid, receiptsAtSend)}${sessionSummary}`,
|
|
599
616
|
transportWasUp
|
|
600
617
|
);
|
|
601
618
|
this.adapter.noteRequestUnanswered?.(duid, method, error);
|
|
@@ -659,6 +676,10 @@ class messageQueueHandler {
|
|
|
659
676
|
// and the register never counted a single one — including all
|
|
660
677
|
// seven methods in #22/#24 that it was built for.
|
|
661
678
|
resolve: (value) => {
|
|
679
|
+
if (!useCloudConnection) {
|
|
680
|
+
sessionDiagnostics?.noteActivity("local");
|
|
681
|
+
sessionDiagnostics?.emit();
|
|
682
|
+
}
|
|
662
683
|
this.adapter.noteRequestAnswered?.(duid, method);
|
|
663
684
|
if (useCloudConnection) {
|
|
664
685
|
this.adapter.noteCloudReply?.();
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Observations only. Nothing in this class reconnects, gates requests, or
|
|
4
|
+
// changes the unanswered-method breaker. Silence while idle is normal.
|
|
5
|
+
const SILENCE_WINDOW_MS = 60_000;
|
|
6
|
+
const SNAPSHOT_INTERVAL_MS = 30_000;
|
|
7
|
+
const MAX_ROBOTS = 128;
|
|
8
|
+
|
|
9
|
+
/** @typedef {"raw" | "attributed" | "decoded" | "correlated" | "local"} ActivityStage */
|
|
10
|
+
class MqttSessionDiagnostics {
|
|
11
|
+
/** @param {(snapshot: ReturnType<MqttSessionDiagnostics["snapshot"]>) => void} publish */
|
|
12
|
+
constructor(publish = () => {}) {
|
|
13
|
+
this.publish = publish;
|
|
14
|
+
this.generation = 0;
|
|
15
|
+
this.connected = false;
|
|
16
|
+
this.subscriptionAcknowledged = false;
|
|
17
|
+
this.rawSequence = 0;
|
|
18
|
+
/** @type {number | null} */
|
|
19
|
+
this.connectedAt = null;
|
|
20
|
+
/** @type {Record<ActivityStage, number | null>} */
|
|
21
|
+
this.activity = {
|
|
22
|
+
raw: null,
|
|
23
|
+
attributed: null,
|
|
24
|
+
decoded: null,
|
|
25
|
+
correlated: null,
|
|
26
|
+
local: null,
|
|
27
|
+
};
|
|
28
|
+
/** @type {Map<string, number>} */
|
|
29
|
+
this.silentReads = new Map();
|
|
30
|
+
/** @type {number | null} */
|
|
31
|
+
this.lastPublishedAt = null;
|
|
32
|
+
/** @type {boolean | null} */
|
|
33
|
+
this.rawSilenceDuringRequest = null;
|
|
34
|
+
/** @type {number | null} */
|
|
35
|
+
this.lastReadTimeoutAt = null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
onConnect() {
|
|
39
|
+
this.generation += 1;
|
|
40
|
+
this.connected = true;
|
|
41
|
+
this.subscriptionAcknowledged = false;
|
|
42
|
+
this.connectedAt = performance.now();
|
|
43
|
+
this.activity = {
|
|
44
|
+
raw: null,
|
|
45
|
+
attributed: null,
|
|
46
|
+
decoded: null,
|
|
47
|
+
correlated: null,
|
|
48
|
+
local: null,
|
|
49
|
+
};
|
|
50
|
+
this.silentReads.clear();
|
|
51
|
+
this.rawSilenceDuringRequest = null;
|
|
52
|
+
this.lastReadTimeoutAt = null;
|
|
53
|
+
this.emit(true);
|
|
54
|
+
return this.generation;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
onDisconnect() {
|
|
58
|
+
this.connected = false;
|
|
59
|
+
this.subscriptionAcknowledged = false;
|
|
60
|
+
this.silentReads.clear();
|
|
61
|
+
this.rawSilenceDuringRequest = null;
|
|
62
|
+
this.lastReadTimeoutAt = null;
|
|
63
|
+
this.emit(true);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** @param {number} generation @param {unknown} error @param {unknown} granted */
|
|
67
|
+
onSubscribe(generation, error, granted) {
|
|
68
|
+
if (generation !== this.generation || !this.connected) return;
|
|
69
|
+
// mqtt.js may already own the resubscribe. Its successful no-op callback
|
|
70
|
+
// carries no grants: it is neither a SUBACK nor a refusal.
|
|
71
|
+
if (!error && Array.isArray(granted) && granted.length === 0) return;
|
|
72
|
+
this.subscriptionAcknowledged =
|
|
73
|
+
!error &&
|
|
74
|
+
Array.isArray(granted) &&
|
|
75
|
+
granted.length > 0 &&
|
|
76
|
+
granted.every((entry) => [0, 1, 2].includes(entry.qos));
|
|
77
|
+
this.emit(true);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** @param {ActivityStage} stage */
|
|
81
|
+
noteActivity(stage) {
|
|
82
|
+
this.activity[stage] = performance.now();
|
|
83
|
+
if (stage === "raw") {
|
|
84
|
+
this.rawSequence += 1;
|
|
85
|
+
this.silentReads.clear();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
captureRequest() {
|
|
90
|
+
return { generation: this.generation, rawSequence: this.rawSequence };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @param {string} duid
|
|
95
|
+
* @param {string} method
|
|
96
|
+
* @param {{generation: number, rawSequence: number} | undefined} request
|
|
97
|
+
*/
|
|
98
|
+
noteTimeout(duid, method, request) {
|
|
99
|
+
this.prune();
|
|
100
|
+
// Only active, unanswered reads on an acknowledged, connected session
|
|
101
|
+
// can contribute. A write may have succeeded even without its reply.
|
|
102
|
+
if (
|
|
103
|
+
this.connected &&
|
|
104
|
+
this.subscriptionAcknowledged &&
|
|
105
|
+
request &&
|
|
106
|
+
request.generation === this.generation &&
|
|
107
|
+
/^get_/.test(method)
|
|
108
|
+
) {
|
|
109
|
+
this.rawSilenceDuringRequest = request.rawSequence === this.rawSequence;
|
|
110
|
+
this.lastReadTimeoutAt = performance.now();
|
|
111
|
+
if (this.rawSilenceDuringRequest) {
|
|
112
|
+
if (
|
|
113
|
+
!this.silentReads.has(duid) &&
|
|
114
|
+
this.silentReads.size >= MAX_ROBOTS
|
|
115
|
+
) {
|
|
116
|
+
const oldest = this.silentReads.keys().next().value;
|
|
117
|
+
if (oldest !== undefined) this.silentReads.delete(oldest);
|
|
118
|
+
}
|
|
119
|
+
this.silentReads.set(duid, performance.now());
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
this.emit(true);
|
|
123
|
+
return this.snapshot();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
prune() {
|
|
127
|
+
const cutoff = performance.now() - SILENCE_WINDOW_MS;
|
|
128
|
+
for (const [duid, at] of this.silentReads) {
|
|
129
|
+
if (at < cutoff) this.silentReads.delete(duid);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
snapshot() {
|
|
134
|
+
this.prune();
|
|
135
|
+
const now = performance.now();
|
|
136
|
+
/** @param {number | null} at */
|
|
137
|
+
const age = (at) =>
|
|
138
|
+
at === null ? null : Math.max(0, Math.round(now - at));
|
|
139
|
+
return {
|
|
140
|
+
capturedAt: new Date().toISOString(),
|
|
141
|
+
generation: this.generation,
|
|
142
|
+
connected: this.connected,
|
|
143
|
+
subscriptionAcknowledged: this.subscriptionAcknowledged,
|
|
144
|
+
connectedAgeMs: age(this.connectedAt),
|
|
145
|
+
lastRawInboundAgeMs: age(this.activity.raw),
|
|
146
|
+
lastAttributedInboundAgeMs: age(this.activity.attributed),
|
|
147
|
+
lastDecodedInboundAgeMs: age(this.activity.decoded),
|
|
148
|
+
lastCorrelatedReplyAgeMs: age(this.activity.correlated),
|
|
149
|
+
lastLocalReplyAgeMs: age(this.activity.local),
|
|
150
|
+
// Historical observation for the latest eligible read timeout, not
|
|
151
|
+
// a verdict on the current session or on a silent single robot.
|
|
152
|
+
rawSilenceDuringRequest: this.rawSilenceDuringRequest,
|
|
153
|
+
lastReadTimeoutAgeMs: age(this.lastReadTimeoutAt),
|
|
154
|
+
silentReadRobotCount: this.silentReads.size,
|
|
155
|
+
correlatedSilenceObserved: this.silentReads.size >= 2,
|
|
156
|
+
observationWindowMs: SILENCE_WINDOW_MS,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
emit(force = false) {
|
|
161
|
+
const now = performance.now();
|
|
162
|
+
if (
|
|
163
|
+
!force &&
|
|
164
|
+
this.lastPublishedAt !== null &&
|
|
165
|
+
now - this.lastPublishedAt < SNAPSHOT_INTERVAL_MS
|
|
166
|
+
)
|
|
167
|
+
return;
|
|
168
|
+
this.lastPublishedAt = now;
|
|
169
|
+
// Telemetry failure must not interfere with message handling.
|
|
170
|
+
try {
|
|
171
|
+
this.publish(this.snapshot());
|
|
172
|
+
} catch {
|
|
173
|
+
/* observation only */
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
module.exports = { MqttSessionDiagnostics };
|
|
@@ -12,6 +12,8 @@ const {
|
|
|
12
12
|
createRefusalError,
|
|
13
13
|
} = require("./describeReplyRefusal");
|
|
14
14
|
|
|
15
|
+
const { MqttSessionDiagnostics } = require("./mqttSessionDiagnostics");
|
|
16
|
+
|
|
15
17
|
const PHOTO_MAGIC = "ROBOROCK";
|
|
16
18
|
const PHOTO_HEADER_MIN_LENGTH = 9;
|
|
17
19
|
const PROTOCOL_301_HEADER_LENGTH = 24;
|
|
@@ -196,6 +198,14 @@ class roborock_mqtt_connector {
|
|
|
196
198
|
constructor(adapter) {
|
|
197
199
|
this.adapter = adapter;
|
|
198
200
|
|
|
201
|
+
this.sessionDiagnostics = new MqttSessionDiagnostics((snapshot) => {
|
|
202
|
+
Promise.resolve(
|
|
203
|
+
this.adapter.setStateAsync?.("MqttSessionDiagnostics", {
|
|
204
|
+
val: JSON.stringify(snapshot),
|
|
205
|
+
ack: true,
|
|
206
|
+
})
|
|
207
|
+
).catch(() => {});
|
|
208
|
+
});
|
|
199
209
|
this.connected = false;
|
|
200
210
|
this.initialConnectTimeout = null;
|
|
201
211
|
|
|
@@ -245,9 +255,24 @@ class roborock_mqtt_connector {
|
|
|
245
255
|
this.initialConnectTimeout.unref();
|
|
246
256
|
}
|
|
247
257
|
|
|
258
|
+
const subscribedClient = client;
|
|
259
|
+
// mqtt.js resubscribes before our connect handler. A subscribe callback
|
|
260
|
+
// can therefore contain no grants even though a real SUBACK follows.
|
|
261
|
+
// Observe that packet without changing mqtt.js subscription behaviour.
|
|
262
|
+
subscribedClient.on("packetreceive", (packet) => {
|
|
263
|
+
if (client !== subscribedClient || packet.cmd !== "suback") return;
|
|
264
|
+
this.sessionDiagnostics.onSubscribe(
|
|
265
|
+
this.sessionDiagnostics.generation,
|
|
266
|
+
null,
|
|
267
|
+
packet.granted.map((qos) => ({ qos }))
|
|
268
|
+
);
|
|
269
|
+
});
|
|
270
|
+
|
|
248
271
|
await client.on("connect", (result) => {
|
|
249
272
|
if (typeof result != "undefined") {
|
|
273
|
+
const generation = this.sessionDiagnostics.onConnect();
|
|
250
274
|
client.subscribe(`rr/m/o/${rriot.u}/${mqttUser}/#`, (err, granted) => {
|
|
275
|
+
this.sessionDiagnostics.onSubscribe(generation, err, granted);
|
|
251
276
|
if (err) {
|
|
252
277
|
this.logConnectionIssue(
|
|
253
278
|
`Failed to subscribe to the Roborock MQTT server: ${err} (granted: ${JSON.stringify(granted)}).`
|
|
@@ -277,6 +302,7 @@ class roborock_mqtt_connector {
|
|
|
277
302
|
// spam twice per reconnect attempt during network outages).
|
|
278
303
|
await client.on("error", (error) => {
|
|
279
304
|
this.connected = false;
|
|
305
|
+
this.sessionDiagnostics.onDisconnect();
|
|
280
306
|
this.logConnectionIssue(
|
|
281
307
|
`Roborock MQTT connection error: ${error?.message || error}. The client keeps reconnecting automatically.`
|
|
282
308
|
);
|
|
@@ -287,9 +313,12 @@ class roborock_mqtt_connector {
|
|
|
287
313
|
this.adapter.log.info(`MQTT connection closed; reconnecting.`);
|
|
288
314
|
}
|
|
289
315
|
this.connected = false;
|
|
316
|
+
this.sessionDiagnostics.onDisconnect();
|
|
290
317
|
});
|
|
291
318
|
|
|
292
319
|
await client.on("reconnect", () => {
|
|
320
|
+
// Preserve the legacy subscription. Its callback is not evidence for
|
|
321
|
+
// a new generation; actual SUBACK packets are observed above.
|
|
293
322
|
client.subscribe(`rr/m/o/${rriot.u}/${mqttUser}/#`, (err, granted) => {
|
|
294
323
|
if (err) {
|
|
295
324
|
this.logConnectionIssue(
|
|
@@ -303,6 +332,7 @@ class roborock_mqtt_connector {
|
|
|
303
332
|
|
|
304
333
|
await client.on("offline", () => {
|
|
305
334
|
this.connected = false;
|
|
335
|
+
this.sessionDiagnostics.onDisconnect();
|
|
306
336
|
this.logConnectionIssue(
|
|
307
337
|
`Roborock MQTT connection is offline. The client keeps reconnecting automatically.`
|
|
308
338
|
);
|
|
@@ -394,6 +424,7 @@ class roborock_mqtt_connector {
|
|
|
394
424
|
|
|
395
425
|
client.on("message", (topic, message) => {
|
|
396
426
|
try {
|
|
427
|
+
this.sessionDiagnostics.noteActivity("raw");
|
|
397
428
|
const duid = this.resolveDuidFromTopic(topic);
|
|
398
429
|
if (!duid) {
|
|
399
430
|
// Counted, not just logged: this is the one inbound path that drops
|
|
@@ -410,11 +441,14 @@ class roborock_mqtt_connector {
|
|
|
410
441
|
return;
|
|
411
442
|
}
|
|
412
443
|
|
|
444
|
+
this.sessionDiagnostics.noteActivity("attributed");
|
|
413
445
|
const data = this.adapter.message._decodeMsg(message, duid);
|
|
414
446
|
if (!data) {
|
|
415
447
|
return;
|
|
416
448
|
}
|
|
417
449
|
|
|
450
|
+
this.sessionDiagnostics.noteActivity("decoded");
|
|
451
|
+
|
|
418
452
|
// Counted here and nowhere else: past the topic match AND past
|
|
419
453
|
// decryption, so the count means the link delivered something real
|
|
420
454
|
// from this robot. A cloud timeout reads it to tell "nothing came
|
|
@@ -443,7 +477,11 @@ class roborock_mqtt_connector {
|
|
|
443
477
|
dps = parsedPayload.dps;
|
|
444
478
|
}
|
|
445
479
|
|
|
446
|
-
if (
|
|
480
|
+
if (
|
|
481
|
+
resolveB01PendingResponse(this.adapter, duid, dps, () =>
|
|
482
|
+
this.sessionDiagnostics.noteActivity("correlated")
|
|
483
|
+
)
|
|
484
|
+
) {
|
|
447
485
|
return;
|
|
448
486
|
}
|
|
449
487
|
|
|
@@ -494,6 +532,7 @@ class roborock_mqtt_connector {
|
|
|
494
532
|
// Those requests then sat until the 10 s timeout and failed in Apple
|
|
495
533
|
// Home even though the robot had already carried them out.
|
|
496
534
|
const pending = this.adapter.pendingRequests.get(dps.id);
|
|
535
|
+
if (pending) this.sessionDiagnostics.noteActivity("correlated");
|
|
497
536
|
if (shouldResolveOn102(pending, dps.result)) {
|
|
498
537
|
this.adapter.clearTimeout(pending.timeout);
|
|
499
538
|
this.adapter.pendingRequests.delete(dps.id);
|
|
@@ -538,6 +577,7 @@ class roborock_mqtt_connector {
|
|
|
538
577
|
if (pendingMap) {
|
|
539
578
|
this.adapter.clearTimeout(pendingMap.timeout);
|
|
540
579
|
this.adapter.pendingB01MapRequests.delete(duid);
|
|
580
|
+
this.sessionDiagnostics.noteActivity("correlated");
|
|
541
581
|
pendingMap.resolve(data.payload);
|
|
542
582
|
return;
|
|
543
583
|
}
|
|
@@ -581,6 +621,7 @@ class roborock_mqtt_connector {
|
|
|
581
621
|
photoBuffer.chunks = [];
|
|
582
622
|
photoBuffer.chunkId = 0;
|
|
583
623
|
|
|
624
|
+
this.sessionDiagnostics.noteActivity("correlated");
|
|
584
625
|
resolve(finalPhotoGzip);
|
|
585
626
|
}
|
|
586
627
|
} else {
|
|
@@ -599,6 +640,7 @@ class roborock_mqtt_connector {
|
|
|
599
640
|
this.adapter.log.debug(
|
|
600
641
|
`Cloud message with protocol 301 and photo id ${photoData.id} received.`
|
|
601
642
|
);
|
|
643
|
+
this.sessionDiagnostics.noteActivity("correlated");
|
|
602
644
|
resolve(data.payload.slice(56));
|
|
603
645
|
}
|
|
604
646
|
} else {
|
|
@@ -688,6 +730,7 @@ class roborock_mqtt_connector {
|
|
|
688
730
|
this.adapter.log.debug(
|
|
689
731
|
`Cloud message with protocol 301 and id ${data2.id} received.`
|
|
690
732
|
);
|
|
733
|
+
this.sessionDiagnostics.noteActivity("correlated");
|
|
691
734
|
resolve(decrypted);
|
|
692
735
|
}
|
|
693
736
|
}
|
|
@@ -756,6 +799,8 @@ class roborock_mqtt_connector {
|
|
|
756
799
|
this.adapter.log.error(
|
|
757
800
|
`client.on message failed for topic '${topic}': ${error.stack || error}`
|
|
758
801
|
);
|
|
802
|
+
} finally {
|
|
803
|
+
this.sessionDiagnostics.emit();
|
|
759
804
|
}
|
|
760
805
|
});
|
|
761
806
|
}
|
|
@@ -801,6 +846,7 @@ class roborock_mqtt_connector {
|
|
|
801
846
|
);
|
|
802
847
|
}
|
|
803
848
|
this.connected = false;
|
|
849
|
+
this.sessionDiagnostics.onDisconnect();
|
|
804
850
|
}
|
|
805
851
|
|
|
806
852
|
/**
|
|
@@ -891,7 +937,12 @@ class roborock_mqtt_connector {
|
|
|
891
937
|
* Robot-initiated B01 pushes (no matching request) trigger a status refresh
|
|
892
938
|
* instead of guessing at undocumented event payload formats.
|
|
893
939
|
*/
|
|
894
|
-
function resolveB01PendingResponse(
|
|
940
|
+
function resolveB01PendingResponse(
|
|
941
|
+
adapter,
|
|
942
|
+
duid,
|
|
943
|
+
dps,
|
|
944
|
+
onCorrelatedReply = () => {}
|
|
945
|
+
) {
|
|
895
946
|
if (!dps || dps.msgId === undefined || dps.id !== undefined) {
|
|
896
947
|
return false;
|
|
897
948
|
}
|
|
@@ -900,6 +951,7 @@ function resolveB01PendingResponse(adapter, duid, dps) {
|
|
|
900
951
|
const pendingB01 = adapter.pendingRequests.get(b01Key);
|
|
901
952
|
|
|
902
953
|
if (pendingB01) {
|
|
954
|
+
onCorrelatedReply();
|
|
903
955
|
adapter.clearTimeout(pendingB01.timeout);
|
|
904
956
|
adapter.pendingRequests.delete(b01Key);
|
|
905
957
|
if (dps.code !== undefined && dps.code !== 0) {
|
|
@@ -398,6 +398,7 @@ const INITIAL_STATUS_WAIT_CAP_MS = 4000;
|
|
|
398
398
|
const DEBOUNCED_PERSIST_IDS = new Set([
|
|
399
399
|
"TransportDiagnostics",
|
|
400
400
|
"RoborockDiagnostics",
|
|
401
|
+
"MqttSessionDiagnostics",
|
|
401
402
|
]);
|
|
402
403
|
const PERSIST_FLUSH_DEBOUNCE_MS = 60000;
|
|
403
404
|
|
|
@@ -409,6 +410,7 @@ const PERSISTED_STATE_IDS = new Set([
|
|
|
409
410
|
"B01Rooms",
|
|
410
411
|
"TransportDiagnostics",
|
|
411
412
|
"RoborockDiagnostics",
|
|
413
|
+
"MqttSessionDiagnostics",
|
|
412
414
|
]);
|
|
413
415
|
|
|
414
416
|
const dockingStationStates = [
|
|
@@ -2237,13 +2239,15 @@ class Roborock {
|
|
|
2237
2239
|
// Latched before anything is torn down, so a retry callback that fires
|
|
2238
2240
|
// mid-shutdown reads it as already set.
|
|
2239
2241
|
this.stopped = true;
|
|
2240
|
-
this.flushPendingPersistedStates();
|
|
2241
2242
|
await this.clearTimersAndIntervals();
|
|
2242
2243
|
// Timers were the only thing shutdown used to stop. Both transports
|
|
2243
2244
|
// stayed open, so frames kept arriving into disposed accessories and
|
|
2244
2245
|
// the process could only ever be killed rather than exit.
|
|
2245
2246
|
this.rr_mqtt_connector?.disconnect?.();
|
|
2246
2247
|
this.localConnector?.destroyAllClients?.();
|
|
2248
|
+
// Teardown publishes the final disconnected diagnostics. Flush after it
|
|
2249
|
+
// so that snapshot reaches disk and its debounce timer is cleared too.
|
|
2250
|
+
this.flushPendingPersistedStates();
|
|
2247
2251
|
// Nothing is coming back for these, and leaving them means every
|
|
2248
2252
|
// caller still awaiting one hangs until Homebridge is killed.
|
|
2249
2253
|
for (const [messageID, pending] of this.pendingRequests) {
|