homebridge-roborock-matter 3.4.5 → 3.4.7
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 +19 -0
- package/dist/ui/index.js +19 -74
- package/dist/ui/index.js.map +1 -1
- package/homebridge-ui/public/index.js +48 -5
- package/package.json +1 -1
- package/roborockLib/lib/b01Q7Adapter.js +10 -0
- package/roborockLib/lib/connectionState.js +208 -0
- package/roborockLib/lib/localConnector.js +5 -6
- package/roborockLib/roborockAPI.js +160 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.4.7
|
|
4
|
+
|
|
5
|
+
**The diagnostic report told Q7 owners their robot had tried to reach the LAN and failed. It never tried.** Following [#7](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/7), jawnlydon unpaired his robot from Apple Home, uninstalled the plugin, reinstalled it and paired fresh — and his report still read `markedRemote: true`, `remoteReason: marked-remote-after-connect-failure`, `connectionStatus: Cloud fallback`, "usually because LAN TCP was not connected at that moment". His `roborock.vacuum.sc05` speaks the B01 protocol, which has no LAN request surface at all: the plugin marks these robots cloud-only at startup precisely so it never opens a local socket to them. Every line above described a network fault that could not occur, and he spent an evening chasing it.
|
|
6
|
+
|
|
7
|
+
- **A robot marked remote now records why it was marked.** Membership of the remote set could tell the report _that_ a robot was on cloud transport but not _why_, and the report assumed the most common cause — a failed local TCP connect — for every member. The two causes have nothing in common: one is a protocol with no local side, the other is a genuine LAN failure worth investigating. Both reasons now travel with the mark, from the one place that sets it.
|
|
8
|
+
- **A future marking that forgets its reason degrades to "the vacuum is marked remote".** Uninformative, and deliberately so. Guessing the usual cause is what turned a design decision into a phantom network fault in the first place.
|
|
9
|
+
- **The device card no longer calls the only transport a fallback.** A B01/Q7 robot now reads `Cloud control (this model)` with a hint saying its protocol has no LAN control surface and that a blank local IP, discovery state and TCP state are expected. The LAN connection test stops telling its owner to wait for a discovery that is never coming, and the robot is no longer flagged as a likely cloud fallback. A robot on a LAN-capable model that really is falling back is still reported exactly as before.
|
|
10
|
+
- **The wording moved into plain JavaScript** (`roborockLib/lib/connectionState.js`), because the test job runs before any build and could therefore only grep the TypeScript UI server for these strings. They are not decoration — they are what an owner acts on when a robot will not respond — so they are now exercised directly.
|
|
11
|
+
- **The rule is enumerated over the source tree**, not over the two call sites that exist today: no code path may mark a robot remote without stating its reason. A hand-written list of call sites is the same mistake as a hand-written list of files or log lines.
|
|
12
|
+
|
|
13
|
+
## 3.4.6
|
|
14
|
+
|
|
15
|
+
**Trying cloud-only mode once marked a robot "Cloud only" forever.** jawnlydon reported in [#7](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/7) that a "Cloud Only" instance of his robot "seems to have stuck around through several re-pairs" — surviving a bridge restart, repeated Apple Home re-pairings, and a complete uninstall and reinstall of the plugin. It was not a leftover accessory. It was one stale field.
|
|
16
|
+
|
|
17
|
+
- **The markers cloud-only mode writes are now retracted when it is switched off.** Enabling the mode stamps a robot's transport diagnostics to say local transport is disabled, and those diagnostics are persisted. `tcpConnectionState` is only ever rewritten when a LAN connection is actually attempted — and none is attempted for a robot no local IP was discovered for — so for such a robot the marker stayed on disk permanently, outliving the setting that wrote it. Startup now reconciles the markers in both directions, clearing only the fields that still hold the marker value so a live LAN connection is never stomped.
|
|
18
|
+
- **The report stopped contradicting itself.** Reading that stale marker back, the device card said `connectionStatus: Cloud only` with the hint "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled" — two lines under the same report's `cloudOnlyMode: disabled`. The report was pointing at a setting that was off, and it cost its reader an evening.
|
|
19
|
+
- **Setting and clearing derive from one table**, so a marker added later is retracted later. A hand-written list of fields to put back is the same mistake as a hand-written list of files or log lines, one level down — the lesson 3.4.3 and 3.4.5 each learned in their own layer.
|
|
20
|
+
- **`cloudOnlyMode` in the diagnostic report now quotes the saved config, not the checkbox.** The `matterFeatures` line was fixed for exactly this reason and the fix stopped at that line, leaving the line directly above it still reading its form control — so a report could state a setting the running plugin did not have. A test now enumerates the rule over the source: nothing the report builder reaches may read the settings form, except the helpers whose whole job is to warn that the form and the saved config disagree. Unsaved edits to cloud-only mode now raise that warning too.
|
|
21
|
+
|
|
3
22
|
## 3.4.5
|
|
4
23
|
|
|
5
24
|
**The one log line that exists to diagnose Apple Home display problems was hiding the transitions.** `Matter publish for <robot>: battery=…, operationalState=…, runMode=…, cleanMode=…` was added so an Apple Home display issue could be settled from a single log excerpt — and it was only ever emitted when the **battery** value changed. skmzwanke reported in [#8](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/8) that his Apple Home tile sat on "Traveling to Room"/"Preparing" for an entire cleaning run, and sent a log covering that whole run: every operational-state transition in it was invisible, because the line only appeared on the four polls where the battery happened to tick down. The log contained the answer and could not show it.
|
package/dist/ui/index.js
CHANGED
|
@@ -11,6 +11,10 @@ const net_1 = __importDefault(require("net"));
|
|
|
11
11
|
const qrcode_1 = __importDefault(require("qrcode"));
|
|
12
12
|
const crypto_2 = require("../crypto");
|
|
13
13
|
const roborockAuth = require("../../roborockLib/lib/roborockAuth");
|
|
14
|
+
// What the report says about a robot's transport lives in plain JavaScript, so
|
|
15
|
+
// the test suite — which runs before any build — can exercise the wording
|
|
16
|
+
// directly instead of grepping this file for it.
|
|
17
|
+
const { describeConnectionState, describeLocalProbeSkip, isCloudFallbackLikely, isCloudOnlyProtocol, } = require("../../roborockLib/lib/connectionState");
|
|
14
18
|
const ACTIVE_LOCAL_TRANSPORT_MAX_AGE_MS = 5 * 60 * 1000;
|
|
15
19
|
const LOCAL_CONTROL_PORT = 58867;
|
|
16
20
|
class RoborockUiServer {
|
|
@@ -477,8 +481,7 @@ class RoborockUiServer {
|
|
|
477
481
|
async testLocalConnection(device, cloudOnlyMode) {
|
|
478
482
|
const localIp = device.localIp;
|
|
479
483
|
const port = LOCAL_CONTROL_PORT;
|
|
480
|
-
const cloudFallbackLikely = device
|
|
481
|
-
device.connectionStatus === "Cloud fallback";
|
|
484
|
+
const cloudFallbackLikely = isCloudFallbackLikely(device);
|
|
482
485
|
const baseResult = {
|
|
483
486
|
name: device.name || device.duid || "Unknown device",
|
|
484
487
|
duid: device.duid || "",
|
|
@@ -494,23 +497,20 @@ class RoborockUiServer {
|
|
|
494
497
|
connectionSource: "tcp-probe",
|
|
495
498
|
latencyMs: null,
|
|
496
499
|
};
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
500
|
+
const probeSkip = describeLocalProbeSkip({
|
|
501
|
+
cloudOnlyProtocol: isCloudOnlyProtocol(device),
|
|
502
|
+
cloudOnlyMode,
|
|
503
|
+
hasLocalKey: Boolean(device.hasLocalKey),
|
|
504
|
+
online: device.online,
|
|
505
|
+
localIp,
|
|
502
506
|
});
|
|
503
|
-
if (
|
|
504
|
-
return
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
return skip("Roborock currently reports this vacuum offline. Wake the vacuum or place it on the dock, then test again.");
|
|
511
|
-
}
|
|
512
|
-
if (!localIp) {
|
|
513
|
-
return skip("No local IP address is cached yet. Let the plugin complete startup or press Refresh after the vacuum wakes up.");
|
|
507
|
+
if (probeSkip) {
|
|
508
|
+
return {
|
|
509
|
+
...baseResult,
|
|
510
|
+
status: "skipped",
|
|
511
|
+
health: probeSkip.health,
|
|
512
|
+
message: probeSkip.message,
|
|
513
|
+
};
|
|
514
514
|
}
|
|
515
515
|
const activeLocalConnection = this.describeActiveLocalConnection(device);
|
|
516
516
|
if (activeLocalConnection) {
|
|
@@ -668,62 +668,7 @@ class RoborockUiServer {
|
|
|
668
668
|
return null;
|
|
669
669
|
}
|
|
670
670
|
describeConnectionState(device, transport, hasLocalCredentials) {
|
|
671
|
-
|
|
672
|
-
const lastTransportReason = transport.lastTransportReason || transport.remoteReason || null;
|
|
673
|
-
const hasLocalIp = Boolean(transport.localIp);
|
|
674
|
-
if (lastTransportReason === "cloud-only-mode" ||
|
|
675
|
-
transport.localDiscoveryState === "disabled" ||
|
|
676
|
-
tcpState === "disabled") {
|
|
677
|
-
return {
|
|
678
|
-
status: "Cloud only",
|
|
679
|
-
health: "good",
|
|
680
|
-
hint: "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled for this plugin.",
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
if (tcpState === "connected") {
|
|
684
|
-
return {
|
|
685
|
-
status: "Local connected",
|
|
686
|
-
health: "good",
|
|
687
|
-
hint: "The plugin has an active LAN TCP connection to this vacuum.",
|
|
688
|
-
};
|
|
689
|
-
}
|
|
690
|
-
if (device.online === false || lastTransportReason === "device-offline") {
|
|
691
|
-
return {
|
|
692
|
-
status: "Device offline",
|
|
693
|
-
health: "warn",
|
|
694
|
-
hint: hasLocalCredentials
|
|
695
|
-
? "Roborock currently reports this vacuum offline. Local credentials are available, but the plugin cannot use them until the vacuum wakes up and rejoins Wi-Fi."
|
|
696
|
-
: "Roborock currently reports this vacuum offline, and no local credentials were found for LAN control.",
|
|
697
|
-
};
|
|
698
|
-
}
|
|
699
|
-
if (transport.lastTransport === "cloud") {
|
|
700
|
-
return {
|
|
701
|
-
status: "Cloud fallback",
|
|
702
|
-
health: "warn",
|
|
703
|
-
hint: hasLocalCredentials
|
|
704
|
-
? "The plugin has local credentials but the last command used Roborock cloud transport, usually because LAN TCP was not connected at that moment."
|
|
705
|
-
: "The last command used Roborock cloud transport because local LAN credentials are not available.",
|
|
706
|
-
};
|
|
707
|
-
}
|
|
708
|
-
if (hasLocalCredentials && hasLocalIp) {
|
|
709
|
-
return {
|
|
710
|
-
status: "Ready for local connection",
|
|
711
|
-
health: "warn",
|
|
712
|
-
hint: "The plugin has local credentials and a discovered IP address, but no active LAN TCP connection is currently cached.",
|
|
713
|
-
};
|
|
714
|
-
}
|
|
715
|
-
if (hasLocalCredentials) {
|
|
716
|
-
return {
|
|
717
|
-
status: "Local credentials available",
|
|
718
|
-
health: "warn",
|
|
719
|
-
hint: "The plugin has the credential needed for LAN control, but it has not discovered or connected to the vacuum locally yet.",
|
|
720
|
-
};
|
|
721
|
-
}
|
|
722
|
-
return {
|
|
723
|
-
status: "Cloud-only fallback likely",
|
|
724
|
-
health: "warn",
|
|
725
|
-
hint: "No local LAN credential was found for this vacuum, so the plugin will likely rely on Roborock cloud transport.",
|
|
726
|
-
};
|
|
671
|
+
return describeConnectionState(device, transport, hasLocalCredentials);
|
|
727
672
|
}
|
|
728
673
|
getPackageVersion() {
|
|
729
674
|
try {
|
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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"}
|
|
@@ -252,21 +252,64 @@ function getCloudOnlyMode() {
|
|
|
252
252
|
*
|
|
253
253
|
* @returns {Promise<string>}
|
|
254
254
|
*/
|
|
255
|
-
|
|
256
|
-
|
|
255
|
+
/**
|
|
256
|
+
* The plugin config as SAVED, or null when it cannot be read.
|
|
257
|
+
*
|
|
258
|
+
* Every settings-derived line in the diagnostic report goes through here. The
|
|
259
|
+
* form is only ever consulted afterwards, to warn that it disagrees.
|
|
260
|
+
*
|
|
261
|
+
* @returns {Promise<Record<string, any> | null>}
|
|
262
|
+
*/
|
|
263
|
+
async function readSavedPluginConfig() {
|
|
257
264
|
try {
|
|
258
265
|
const configs =
|
|
259
266
|
window.homebridge &&
|
|
260
267
|
typeof window.homebridge.getPluginConfig === "function"
|
|
261
268
|
? await window.homebridge.getPluginConfig()
|
|
262
269
|
: null;
|
|
263
|
-
|
|
264
|
-
? configs.find((entry) => entry.platform === "RoborockVacuumPlatform")
|
|
270
|
+
return configs
|
|
271
|
+
? configs.find((entry) => entry.platform === "RoborockVacuumPlatform") ||
|
|
272
|
+
null
|
|
265
273
|
: null;
|
|
266
274
|
} catch {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Cloud-only mode as the RUNNING plugin has it.
|
|
281
|
+
*
|
|
282
|
+
* This read the checkbox until 3.4.6, which is the same trap the matterFeatures
|
|
283
|
+
* line was fixed for one line below — fixing the line in front of me instead of
|
|
284
|
+
* the rule. A user who had tried cloud-only mode and switched it off again got
|
|
285
|
+
* a report whose settings line said `disabled` while the device below it said
|
|
286
|
+
* "Cloud only", and spent an evening hunting a ghost setting.
|
|
287
|
+
*
|
|
288
|
+
* @returns {Promise<string>}
|
|
289
|
+
*/
|
|
290
|
+
async function describeSavedCloudOnlyMode() {
|
|
291
|
+
const config = await readSavedPluginConfig();
|
|
292
|
+
if (!config) {
|
|
267
293
|
return "unavailable";
|
|
268
294
|
}
|
|
269
295
|
|
|
296
|
+
const label = config.cloudOnlyMode === true ? "enabled" : "disabled";
|
|
297
|
+
return hasUnsavedCloudOnlyEdit(config)
|
|
298
|
+
? `${label} (WARNING: the settings form has unsaved changes; this is the value the plugin is running)`
|
|
299
|
+
: label;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/** True when the cloud-only checkbox differs from what is saved in the config. */
|
|
303
|
+
function hasUnsavedCloudOnlyEdit(config) {
|
|
304
|
+
return (
|
|
305
|
+
Boolean(elements.cloudOnlyMode && elements.cloudOnlyMode.checked) !==
|
|
306
|
+
(config.cloudOnlyMode === true)
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
async function describeEnabledMatterFeatures() {
|
|
311
|
+
const config = await readSavedPluginConfig();
|
|
312
|
+
|
|
270
313
|
if (!config) {
|
|
271
314
|
return "unavailable";
|
|
272
315
|
}
|
|
@@ -1114,7 +1157,7 @@ async function buildDiagnosticsReport(result) {
|
|
|
1114
1157
|
`nodeVersion: ${result.nodeVersion || "unknown"}`,
|
|
1115
1158
|
`token: ${hasToken ? "present" : "missing"}`,
|
|
1116
1159
|
`homeData: ${result.hasHomeData ? "present" : "missing"}`,
|
|
1117
|
-
`cloudOnlyMode: ${
|
|
1160
|
+
`cloudOnlyMode: ${await describeSavedCloudOnlyMode()}`,
|
|
1118
1161
|
// Which Apple Home features are switched on decides what the plugin is
|
|
1119
1162
|
// even allowed to publish, so a report that omits them cannot answer
|
|
1120
1163
|
// "why doesn't Apple Home show X?" — the first question every one of
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-roborock-matter",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.7",
|
|
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": {
|
|
@@ -34,6 +34,15 @@ const B01_PROTOCOL_VERSION = "B01";
|
|
|
34
34
|
const B01_REQUEST_DPS = 10000;
|
|
35
35
|
const B01_RESPONSE_DPS = 10001;
|
|
36
36
|
|
|
37
|
+
// Why a B01 robot is routed over the Roborock cloud. The dialect has no LAN
|
|
38
|
+
// request surface at all, so these robots are marked remote at startup and the
|
|
39
|
+
// plugin never opens a local TCP socket to them. That is a property of the
|
|
40
|
+
// protocol, not a fault, and the diagnostic report has to say so: labelling it
|
|
41
|
+
// as a failed LAN connection sends users hunting a network problem that cannot
|
|
42
|
+
// exist. Both the transport layer and the UI server read this one constant so
|
|
43
|
+
// the two sides cannot drift apart.
|
|
44
|
+
const B01_CLOUD_ONLY_REMOTE_REASON = "b01-protocol-cloud-only";
|
|
45
|
+
|
|
37
46
|
// Q7 properties queried for a status snapshot (RoborockB01Props).
|
|
38
47
|
// Note: no "water" property. Q7-series robots use a manually filled water
|
|
39
48
|
// tank on the robot with no electronic water level/control, so water state
|
|
@@ -818,6 +827,7 @@ module.exports = {
|
|
|
818
827
|
B01_STATUS_PROPS,
|
|
819
828
|
B01_STATUS_TO_V1_STATE,
|
|
820
829
|
isB01Protocol,
|
|
830
|
+
B01_CLOUD_ONLY_REMOTE_REASON,
|
|
821
831
|
createB01MessageId,
|
|
822
832
|
translateOutgoing,
|
|
823
833
|
neutralResponse,
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// How the diagnostic report describes a robot's transport, as pure functions.
|
|
4
|
+
//
|
|
5
|
+
// This lived inside the TypeScript UI server, where `npm test` cannot reach it:
|
|
6
|
+
// the test job runs before any build, so the only thing a test could assert
|
|
7
|
+
// about these strings was that they appeared somewhere in the source text. The
|
|
8
|
+
// wording here is not decoration — it is what a user acts on when their robot
|
|
9
|
+
// will not respond, and getting it wrong costs them an evening. A Q7 owner
|
|
10
|
+
// unpaired his robot, uninstalled the plugin, reinstalled it and paired again
|
|
11
|
+
// because this report told him a local connection had been attempted and had
|
|
12
|
+
// failed (#7). His robot's protocol has no local connection to attempt.
|
|
13
|
+
//
|
|
14
|
+
// So the decisions live in plain JavaScript, next to the transport layer whose
|
|
15
|
+
// vocabulary they share, and the tests exercise them directly.
|
|
16
|
+
|
|
17
|
+
const { B01_CLOUD_ONLY_REMOTE_REASON } = require("./b01Q7Adapter");
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Whether this robot's protocol has no LAN control surface at all.
|
|
21
|
+
*
|
|
22
|
+
* Read from the reason the transport layer recorded, not from a model list
|
|
23
|
+
* copied down here: one list that can fall out of step with the transport is
|
|
24
|
+
* exactly how the report came to contradict the plugin's own behaviour.
|
|
25
|
+
*
|
|
26
|
+
* @param {Record<string, any>} transport
|
|
27
|
+
* @returns {boolean}
|
|
28
|
+
*/
|
|
29
|
+
function isCloudOnlyProtocol(transport) {
|
|
30
|
+
return (transport || {}).remoteReason === B01_CLOUD_ONLY_REMOTE_REASON;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The connection status, health and explanation shown on a device card.
|
|
35
|
+
*
|
|
36
|
+
* @param {Record<string, any>} device
|
|
37
|
+
* @param {Record<string, any>} transport
|
|
38
|
+
* @param {boolean} hasLocalCredentials
|
|
39
|
+
* @returns {{status: string, health: "good" | "warn", hint: string}}
|
|
40
|
+
*/
|
|
41
|
+
function describeConnectionState(device, transport, hasLocalCredentials) {
|
|
42
|
+
const safeDevice = device || {};
|
|
43
|
+
const safeTransport = transport || {};
|
|
44
|
+
const tcpState = safeTransport.tcpConnectionState;
|
|
45
|
+
const lastTransportReason =
|
|
46
|
+
safeTransport.lastTransportReason || safeTransport.remoteReason || null;
|
|
47
|
+
const hasLocalIp = Boolean(safeTransport.localIp);
|
|
48
|
+
|
|
49
|
+
if (
|
|
50
|
+
lastTransportReason === "cloud-only-mode" ||
|
|
51
|
+
safeTransport.localDiscoveryState === "disabled" ||
|
|
52
|
+
tcpState === "disabled"
|
|
53
|
+
) {
|
|
54
|
+
return {
|
|
55
|
+
status: "Cloud only",
|
|
56
|
+
health: "good",
|
|
57
|
+
hint: "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled for this plugin.",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (tcpState === "connected") {
|
|
62
|
+
return {
|
|
63
|
+
status: "Local connected",
|
|
64
|
+
health: "good",
|
|
65
|
+
hint: "The plugin has an active LAN TCP connection to this vacuum.",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (safeDevice.online === false || lastTransportReason === "device-offline") {
|
|
70
|
+
return {
|
|
71
|
+
status: "Device offline",
|
|
72
|
+
health: "warn",
|
|
73
|
+
hint: hasLocalCredentials
|
|
74
|
+
? "Roborock currently reports this vacuum offline. Local credentials are available, but the plugin cannot use them until the vacuum wakes up and rejoins Wi-Fi."
|
|
75
|
+
: "Roborock currently reports this vacuum offline, and no local credentials were found for LAN control.",
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Ahead of the cloud-fallback branch on purpose: for a B01/Q7 robot the cloud
|
|
80
|
+
// is not what the plugin fell back to, it is the only transport the protocol
|
|
81
|
+
// has. Calling it a fallback — and blaming "LAN TCP was not connected at that
|
|
82
|
+
// moment" — describes a network fault that cannot occur.
|
|
83
|
+
if (isCloudOnlyProtocol(safeTransport)) {
|
|
84
|
+
return {
|
|
85
|
+
status: "Cloud control (this model)",
|
|
86
|
+
health: "good",
|
|
87
|
+
hint: "This model speaks only Roborock's cloud protocol, which has no LAN control surface, so the plugin never opens a local connection to it. A blank local IP, discovery state and TCP state are expected here and are not a fault.",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (safeTransport.lastTransport === "cloud") {
|
|
92
|
+
return {
|
|
93
|
+
status: "Cloud fallback",
|
|
94
|
+
health: "warn",
|
|
95
|
+
hint: hasLocalCredentials
|
|
96
|
+
? "The plugin has local credentials but the last command used Roborock cloud transport, usually because LAN TCP was not connected at that moment."
|
|
97
|
+
: "The last command used Roborock cloud transport because local LAN credentials are not available.",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (hasLocalCredentials && hasLocalIp) {
|
|
102
|
+
return {
|
|
103
|
+
status: "Ready for local connection",
|
|
104
|
+
health: "warn",
|
|
105
|
+
hint: "The plugin has local credentials and a discovered IP address, but no active LAN TCP connection is currently cached.",
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (hasLocalCredentials) {
|
|
110
|
+
return {
|
|
111
|
+
status: "Local credentials available",
|
|
112
|
+
health: "warn",
|
|
113
|
+
hint: "The plugin has the credential needed for LAN control, but it has not discovered or connected to the vacuum locally yet.",
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
status: "Cloud-only fallback likely",
|
|
119
|
+
health: "warn",
|
|
120
|
+
hint: "No local LAN credential was found for this vacuum, so the plugin will likely rely on Roborock cloud transport.",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Why the LAN probe is not being run, or null when it should run.
|
|
126
|
+
*
|
|
127
|
+
* @param {{cloudOnlyProtocol?: boolean, cloudOnlyMode?: boolean,
|
|
128
|
+
* hasLocalKey?: boolean, online?: boolean, localIp?: string | null}} state
|
|
129
|
+
* @returns {{message: string, health: "good" | "warn"} | null}
|
|
130
|
+
*/
|
|
131
|
+
function describeLocalProbeSkip(state) {
|
|
132
|
+
const safeState = state || {};
|
|
133
|
+
|
|
134
|
+
// First, because there is nothing to probe and nothing wrong. Falling
|
|
135
|
+
// through to the "no local IP is cached yet" branch would tell the user to
|
|
136
|
+
// wait for a discovery that is never going to happen for this model.
|
|
137
|
+
if (safeState.cloudOnlyProtocol) {
|
|
138
|
+
return {
|
|
139
|
+
message:
|
|
140
|
+
"This model speaks only Roborock's cloud protocol, so there is no LAN endpoint to test. Nothing is wrong and no local connection is expected.",
|
|
141
|
+
health: "good",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (safeState.cloudOnlyMode) {
|
|
146
|
+
return {
|
|
147
|
+
message:
|
|
148
|
+
"Use Roborock cloud only is enabled, so local LAN probing is skipped until cloud-only mode is disabled and Homebridge is restarted.",
|
|
149
|
+
health: "warn",
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!safeState.hasLocalKey) {
|
|
154
|
+
return {
|
|
155
|
+
message:
|
|
156
|
+
"No local credential is cached for this vacuum, so a LAN control test cannot run yet.",
|
|
157
|
+
health: "warn",
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (safeState.online === false) {
|
|
162
|
+
return {
|
|
163
|
+
message:
|
|
164
|
+
"Roborock currently reports this vacuum offline. Wake the vacuum or place it on the dock, then test again.",
|
|
165
|
+
health: "warn",
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!safeState.localIp) {
|
|
170
|
+
return {
|
|
171
|
+
message:
|
|
172
|
+
"No local IP address is cached yet. Let the plugin complete startup or press Refresh after the vacuum wakes up.",
|
|
173
|
+
health: "warn",
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Whether to flag this robot as probably falling back to the cloud.
|
|
182
|
+
*
|
|
183
|
+
* A robot whose protocol has no LAN surface is not "likely" to fall back — it
|
|
184
|
+
* was never anywhere else. Flagging it reads as a warning about a network
|
|
185
|
+
* problem the user does not have and cannot fix.
|
|
186
|
+
*
|
|
187
|
+
* @param {Record<string, any>} device
|
|
188
|
+
* @returns {boolean}
|
|
189
|
+
*/
|
|
190
|
+
function isCloudFallbackLikely(device) {
|
|
191
|
+
const safeDevice = device || {};
|
|
192
|
+
|
|
193
|
+
if (safeDevice.remoteReason === B01_CLOUD_ONLY_REMOTE_REASON) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return (
|
|
198
|
+
safeDevice.lastTransport === "cloud" ||
|
|
199
|
+
safeDevice.connectionStatus === "Cloud fallback"
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
module.exports = {
|
|
204
|
+
describeConnectionState,
|
|
205
|
+
describeLocalProbeSkip,
|
|
206
|
+
isCloudFallbackLikely,
|
|
207
|
+
isCloudOnlyProtocol,
|
|
208
|
+
};
|
|
@@ -227,7 +227,7 @@ class localConnector {
|
|
|
227
227
|
// The robot answered, so the back-off starts over for the next outage.
|
|
228
228
|
this.reconnectAttempts.delete(duid);
|
|
229
229
|
|
|
230
|
-
if (this.adapter.
|
|
230
|
+
if (this.adapter.clearRemoteDevice(duid)) {
|
|
231
231
|
this.adapter.log.debug(
|
|
232
232
|
`Local TCP connected for ${duid}; clearing remote fallback marker.`
|
|
233
233
|
);
|
|
@@ -316,11 +316,10 @@ class localConnector {
|
|
|
316
316
|
this.adapter.log.debug(
|
|
317
317
|
`error on tcp client for ${duid}. Marking this device as remote device. Connecting via MQTT instead ${error.message}`
|
|
318
318
|
);
|
|
319
|
-
this.adapter.
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
});
|
|
319
|
+
await this.adapter.markDeviceRemote(
|
|
320
|
+
duid,
|
|
321
|
+
"marked-remote-after-connect-failure"
|
|
322
|
+
);
|
|
324
323
|
// this.adapter.catchError(`Failed to create tcp client: ${error.stack}`, `function createClient`, duid);
|
|
325
324
|
}
|
|
326
325
|
});
|
|
@@ -38,6 +38,35 @@ const B01_LIVE_ROOM_FETCH_V1_STATES = new Set([5, 11, 16, 17, 18]);
|
|
|
38
38
|
// cached live room is cleared so a later run starts fresh.
|
|
39
39
|
const B01_LIVE_ROOM_CLEAR_V1_STATES = new Set([3, 8]);
|
|
40
40
|
|
|
41
|
+
// The transport-diagnostics fields cloud-only mode owns, and the marker value
|
|
42
|
+
// it writes into each.
|
|
43
|
+
//
|
|
44
|
+
// These diagnostics are persisted, so the markers outlive the setting unless
|
|
45
|
+
// something puts them back. `tcpConnectionState` is the one that stuck: it is
|
|
46
|
+
// only rewritten when a LAN connection is actually attempted, and none is
|
|
47
|
+
// attempted for a robot no local IP was ever discovered for. A user who tried
|
|
48
|
+
// cloud-only mode once and switched it off again kept "Cloud only" on the
|
|
49
|
+
// device card through restarts, re-pairs and a full plugin reinstall, and the
|
|
50
|
+
// diagnostic report told them cloud-only mode was enabled two lines under its
|
|
51
|
+
// own `cloudOnlyMode: disabled`.
|
|
52
|
+
//
|
|
53
|
+
// Setting and clearing both derive from this table on purpose. A hand-written
|
|
54
|
+
// list of fields to clear is the same mistake as a hand-written list of files
|
|
55
|
+
// or log lines one level up: it is correct until someone adds a fourth marker.
|
|
56
|
+
const CLOUD_ONLY_TRANSPORT_MARKERS = Object.freeze({
|
|
57
|
+
lastTransportReason: "cloud-only-mode",
|
|
58
|
+
localDiscoveryState: "disabled",
|
|
59
|
+
tcpConnectionState: "disabled",
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// The reason recorded for a robot that was marked remote without one being
|
|
63
|
+
// given. Deliberately vague: "the vacuum is marked remote" tells the reader
|
|
64
|
+
// nothing they did not already know, which is the correct failure mode for a
|
|
65
|
+
// missing reason. The alternative — assuming the most common cause — is how
|
|
66
|
+
// the report came to state that a LAN connection had been attempted and failed
|
|
67
|
+
// for robots the plugin never attempts a LAN connection to.
|
|
68
|
+
const UNEXPLAINED_REMOTE_REASON = "remote-device";
|
|
69
|
+
|
|
41
70
|
// Minimum gap between live-room map fetch attempts while cleaning. The map
|
|
42
71
|
// payload is an order of magnitude heavier than get_status, so it rides a
|
|
43
72
|
// slower cadence than the active status polls — but 20s meant a robot could
|
|
@@ -191,6 +220,10 @@ class Roborock {
|
|
|
191
220
|
|
|
192
221
|
this.localDevices = {};
|
|
193
222
|
this.remoteDevices = new Set();
|
|
223
|
+
// Why each of those robots is remote. Membership alone cannot answer that:
|
|
224
|
+
// see markDeviceRemote.
|
|
225
|
+
/** @type {Map<string, string>} */
|
|
226
|
+
this.remoteDeviceReasons = new Map();
|
|
194
227
|
|
|
195
228
|
this.name = "roborock";
|
|
196
229
|
this.deviceNotify = null;
|
|
@@ -896,6 +929,49 @@ class Roborock {
|
|
|
896
929
|
});
|
|
897
930
|
}
|
|
898
931
|
|
|
932
|
+
/**
|
|
933
|
+
* Reconcile one robot's cloud-only transport markers with the mode as it is
|
|
934
|
+
* configured right now.
|
|
935
|
+
*
|
|
936
|
+
* Enabling stamps every marker in CLOUD_ONLY_TRANSPORT_MARKERS. Disabling
|
|
937
|
+
* clears exactly those fields that still hold the marker value, so a LAN
|
|
938
|
+
* connection that came up in the meantime is never stomped, and a robot that
|
|
939
|
+
* has no diagnostics yet is not given any.
|
|
940
|
+
*
|
|
941
|
+
* @param {string} duid
|
|
942
|
+
* @param {boolean} cloudOnly
|
|
943
|
+
*/
|
|
944
|
+
async syncCloudOnlyTransportMarkers(duid, cloudOnly) {
|
|
945
|
+
if (!duid) {
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
if (cloudOnly) {
|
|
950
|
+
await this.updateTransportDiagnostics(duid, {
|
|
951
|
+
...CLOUD_ONLY_TRANSPORT_MARKERS,
|
|
952
|
+
});
|
|
953
|
+
return;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
const entry = this.getTransportDiagnostics()[duid];
|
|
957
|
+
if (!entry || typeof entry != "object") {
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
const cleared = {};
|
|
962
|
+
for (const [field, marker] of Object.entries(
|
|
963
|
+
CLOUD_ONLY_TRANSPORT_MARKERS
|
|
964
|
+
)) {
|
|
965
|
+
if (entry[field] === marker) {
|
|
966
|
+
cleared[field] = null;
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
if (Object.keys(cleared).length) {
|
|
971
|
+
await this.updateTransportDiagnostics(duid, cleared);
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
|
|
899
975
|
getTransportDiagnostics() {
|
|
900
976
|
const diagnostics = this.getStateAsync("TransportDiagnostics");
|
|
901
977
|
if (diagnostics && typeof diagnostics.val == "string") {
|
|
@@ -1202,6 +1278,8 @@ class Roborock {
|
|
|
1202
1278
|
"secure-command",
|
|
1203
1279
|
"photo-command",
|
|
1204
1280
|
"preferred-cloud-command",
|
|
1281
|
+
// Not a fallback from local: this dialect has no local to fall back from.
|
|
1282
|
+
b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON,
|
|
1205
1283
|
].includes(String(reason));
|
|
1206
1284
|
}
|
|
1207
1285
|
|
|
@@ -1237,6 +1315,8 @@ class Roborock {
|
|
|
1237
1315
|
"udp-broadcast-discovery": "UDP broadcast discovery found the vacuum",
|
|
1238
1316
|
"marked-remote-after-connect-failure":
|
|
1239
1317
|
"local TCP connection failed and the vacuum was marked remote",
|
|
1318
|
+
[b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON]:
|
|
1319
|
+
"this model speaks only Roborock's cloud protocol, which has no LAN control surface",
|
|
1240
1320
|
};
|
|
1241
1321
|
|
|
1242
1322
|
if (!reason) {
|
|
@@ -1518,29 +1598,30 @@ class Roborock {
|
|
|
1518
1598
|
ignoredSet
|
|
1519
1599
|
);
|
|
1520
1600
|
|
|
1521
|
-
|
|
1601
|
+
const cloudOnly = this.isCloudOnlyModeEnabled();
|
|
1602
|
+
if (cloudOnly) {
|
|
1522
1603
|
this.log.info(
|
|
1523
1604
|
"Roborock cloud-only mode is enabled; local LAN discovery and TCP connections will be skipped."
|
|
1524
1605
|
);
|
|
1606
|
+
}
|
|
1525
1607
|
|
|
1526
|
-
|
|
1608
|
+
for (const device of managedDevicesForDiagnostics) {
|
|
1609
|
+
if (cloudOnly) {
|
|
1527
1610
|
await this.updateTransportDiagnostics(device.duid, {
|
|
1528
1611
|
lastTransport: "cloud",
|
|
1529
|
-
lastTransportReason: "cloud-only-mode",
|
|
1530
1612
|
localIp: null,
|
|
1531
|
-
|
|
1532
|
-
|
|
1613
|
+
});
|
|
1614
|
+
} else if (!device.localKey) {
|
|
1615
|
+
await this.updateTransportDiagnostics(device.duid, {
|
|
1616
|
+
lastTransport: "cloud",
|
|
1617
|
+
lastTransportReason: "missing-local-key",
|
|
1533
1618
|
});
|
|
1534
1619
|
}
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
lastTransportReason: "missing-local-key",
|
|
1541
|
-
});
|
|
1542
|
-
}
|
|
1543
|
-
}
|
|
1620
|
+
|
|
1621
|
+
// Runs in BOTH directions: switching the mode off has to retract
|
|
1622
|
+
// the markers it wrote, or they stay on disk for good and the
|
|
1623
|
+
// device keeps reporting itself as cloud-only.
|
|
1624
|
+
await this.syncCloudOnlyTransportMarkers(device.duid, cloudOnly);
|
|
1544
1625
|
}
|
|
1545
1626
|
|
|
1546
1627
|
// this.adapter.log.debug(`initUser test: ${JSON.stringify(Array.from(this.adapter.localKeys.entries()))}`);
|
|
@@ -1940,9 +2021,14 @@ class Roborock {
|
|
|
1940
2021
|
this.log.debug(`Creating device: ${name} with duid: ${duid}`);
|
|
1941
2022
|
|
|
1942
2023
|
// B01/Q7 robots are cloud/MQTT-only: mark them remote up front so the
|
|
1943
|
-
// transport layer never attempts local TCP connections to them.
|
|
2024
|
+
// transport layer never attempts local TCP connections to them. The
|
|
2025
|
+
// reason travels with the mark so the report says "this protocol has no
|
|
2026
|
+
// LAN surface" rather than inventing a LAN connection that failed.
|
|
1944
2027
|
if (b01Q7Adapter.isB01Protocol(device.pv)) {
|
|
1945
|
-
this.
|
|
2028
|
+
await this.markDeviceRemote(
|
|
2029
|
+
duid,
|
|
2030
|
+
b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON
|
|
2031
|
+
);
|
|
1946
2032
|
}
|
|
1947
2033
|
|
|
1948
2034
|
const robotModel = this.getProductAttribute(duid, "model");
|
|
@@ -2572,6 +2658,58 @@ class Roborock {
|
|
|
2572
2658
|
}
|
|
2573
2659
|
}
|
|
2574
2660
|
|
|
2661
|
+
/**
|
|
2662
|
+
* Marks a vacuum as reachable only over the Roborock cloud, recording WHY.
|
|
2663
|
+
*
|
|
2664
|
+
* Membership of `remoteDevices` cannot answer "why" on its own, and the two
|
|
2665
|
+
* reasons are not remotely alike. A B01/Q7 robot is marked at startup
|
|
2666
|
+
* because its dialect has no LAN request surface, so no local connection is
|
|
2667
|
+
* ever attempted; another robot is marked only after a local TCP connect
|
|
2668
|
+
* genuinely failed. The report used to state the second reason for both,
|
|
2669
|
+
* which sent a Q7 owner through an unpair, a plugin uninstall, a reinstall
|
|
2670
|
+
* and a fresh pairing chasing a LAN fault that could not exist (#7).
|
|
2671
|
+
*
|
|
2672
|
+
* Every caller therefore supplies its own reason. A caller that forgets one
|
|
2673
|
+
* degrades to the vague `remote-device`, which is merely uninformative —
|
|
2674
|
+
* never to a specific claim that is false.
|
|
2675
|
+
*
|
|
2676
|
+
* @param {string} duid
|
|
2677
|
+
* @param {string} reason
|
|
2678
|
+
*/
|
|
2679
|
+
async markDeviceRemote(duid, reason) {
|
|
2680
|
+
if (!duid) {
|
|
2681
|
+
return;
|
|
2682
|
+
}
|
|
2683
|
+
|
|
2684
|
+
const remoteReason = reason || UNEXPLAINED_REMOTE_REASON;
|
|
2685
|
+
this.remoteDevices.add(duid);
|
|
2686
|
+
this.remoteDeviceReasons.set(duid, remoteReason);
|
|
2687
|
+
|
|
2688
|
+
await this.updateTransportDiagnostics(duid, {
|
|
2689
|
+
isRemote: true,
|
|
2690
|
+
remoteReason,
|
|
2691
|
+
});
|
|
2692
|
+
}
|
|
2693
|
+
|
|
2694
|
+
/**
|
|
2695
|
+
* Drops the remote marker and the reason that went with it.
|
|
2696
|
+
*
|
|
2697
|
+
* @param {string} duid
|
|
2698
|
+
* @returns {boolean} whether the vacuum had been marked remote
|
|
2699
|
+
*/
|
|
2700
|
+
clearRemoteDevice(duid) {
|
|
2701
|
+
this.remoteDeviceReasons.delete(duid);
|
|
2702
|
+
return this.remoteDevices.delete(duid);
|
|
2703
|
+
}
|
|
2704
|
+
|
|
2705
|
+
/**
|
|
2706
|
+
* @param {string} duid
|
|
2707
|
+
* @returns {string} the recorded reason, or the vague default
|
|
2708
|
+
*/
|
|
2709
|
+
getRemoteDeviceReason(duid) {
|
|
2710
|
+
return this.remoteDeviceReasons.get(duid) || UNEXPLAINED_REMOTE_REASON;
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2575
2713
|
async isRemoteDevice(duid) {
|
|
2576
2714
|
const homedataJSON = this.getStoredHomeData();
|
|
2577
2715
|
|
|
@@ -2586,7 +2724,7 @@ class Roborock {
|
|
|
2586
2724
|
isRemote: true,
|
|
2587
2725
|
remoteReason: receivedDevice
|
|
2588
2726
|
? "received-device"
|
|
2589
|
-
:
|
|
2727
|
+
: this.getRemoteDeviceReason(duid),
|
|
2590
2728
|
});
|
|
2591
2729
|
return true;
|
|
2592
2730
|
}
|
|
@@ -4505,6 +4643,10 @@ class Roborock {
|
|
|
4505
4643
|
}
|
|
4506
4644
|
}
|
|
4507
4645
|
|
|
4508
|
-
module.exports = {
|
|
4646
|
+
module.exports = {
|
|
4647
|
+
Roborock,
|
|
4648
|
+
CLOUD_ONLY_TRANSPORT_MARKERS,
|
|
4649
|
+
UNEXPLAINED_REMOTE_REASON,
|
|
4650
|
+
};
|
|
4509
4651
|
|
|
4510
4652
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|