matterbridge-dyson-robot 0.1.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 +15 -0
- package/LICENSE +14 -0
- package/README.md +365 -0
- package/dist/async-eventemitter.d.ts +9 -0
- package/dist/async-eventemitter.d.ts.map +1 -0
- package/dist/async-eventemitter.js +35 -0
- package/dist/async-eventemitter.js.map +1 -0
- package/dist/check-configuration.d.ts +5 -0
- package/dist/check-configuration.d.ts.map +1 -0
- package/dist/check-configuration.js +35 -0
- package/dist/check-configuration.js.map +1 -0
- package/dist/check-versions.d.ts +3 -0
- package/dist/check-versions.d.ts.map +1 -0
- package/dist/check-versions.js +31 -0
- package/dist/check-versions.js.map +1 -0
- package/dist/config-types.d.ts +48 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-types.js +4 -0
- package/dist/config-types.js.map +1 -0
- package/dist/decorator-changed.d.ts +16 -0
- package/dist/decorator-changed.d.ts.map +1 -0
- package/dist/decorator-changed.js +62 -0
- package/dist/decorator-changed.js.map +1 -0
- package/dist/dyson-360-msg-types.d.ts +113 -0
- package/dist/dyson-360-msg-types.d.ts.map +1 -0
- package/dist/dyson-360-msg-types.js +4 -0
- package/dist/dyson-360-msg-types.js.map +1 -0
- package/dist/dyson-360-types.d.ts +76 -0
- package/dist/dyson-360-types.d.ts.map +1 -0
- package/dist/dyson-360-types.js +72 -0
- package/dist/dyson-360-types.js.map +1 -0
- package/dist/dyson-air-msg-types.d.ts +99 -0
- package/dist/dyson-air-msg-types.d.ts.map +1 -0
- package/dist/dyson-air-msg-types.js +4 -0
- package/dist/dyson-air-msg-types.js.map +1 -0
- package/dist/dyson-air-sensor-types.d.ts +59 -0
- package/dist/dyson-air-sensor-types.d.ts.map +1 -0
- package/dist/dyson-air-sensor-types.js +4 -0
- package/dist/dyson-air-sensor-types.js.map +1 -0
- package/dist/dyson-air-state-types.d.ts +96 -0
- package/dist/dyson-air-state-types.d.ts.map +1 -0
- package/dist/dyson-air-state-types.js +4 -0
- package/dist/dyson-air-state-types.js.map +1 -0
- package/dist/dyson-air-types.d.ts +325 -0
- package/dist/dyson-air-types.d.ts.map +1 -0
- package/dist/dyson-air-types.js +382 -0
- package/dist/dyson-air-types.js.map +1 -0
- package/dist/dyson-device-360-base.d.ts +35 -0
- package/dist/dyson-device-360-base.d.ts.map +1 -0
- package/dist/dyson-device-360-base.js +233 -0
- package/dist/dyson-device-360-base.js.map +1 -0
- package/dist/dyson-device-360-commands.d.ts +7 -0
- package/dist/dyson-device-360-commands.d.ts.map +1 -0
- package/dist/dyson-device-360-commands.js +129 -0
- package/dist/dyson-device-360-commands.js.map +1 -0
- package/dist/dyson-device-360-faults-table.d.ts +20 -0
- package/dist/dyson-device-360-faults-table.d.ts.map +1 -0
- package/dist/dyson-device-360-faults-table.js +161 -0
- package/dist/dyson-device-360-faults-table.js.map +1 -0
- package/dist/dyson-device-360-faults.d.ts +10 -0
- package/dist/dyson-device-360-faults.d.ts.map +1 -0
- package/dist/dyson-device-360-faults.js +123 -0
- package/dist/dyson-device-360-faults.js.map +1 -0
- package/dist/dyson-device-360.d.ts +38 -0
- package/dist/dyson-device-360.d.ts.map +1 -0
- package/dist/dyson-device-360.js +45 -0
- package/dist/dyson-device-360.js.map +1 -0
- package/dist/dyson-device-air-base.d.ts +41 -0
- package/dist/dyson-device-air-base.d.ts.map +1 -0
- package/dist/dyson-device-air-base.js +446 -0
- package/dist/dyson-device-air-base.js.map +1 -0
- package/dist/dyson-device-air-heat.d.ts +52 -0
- package/dist/dyson-device-air-heat.d.ts.map +1 -0
- package/dist/dyson-device-air-heat.js +71 -0
- package/dist/dyson-device-air-heat.js.map +1 -0
- package/dist/dyson-device-air-quality.d.ts +7 -0
- package/dist/dyson-device-air-quality.d.ts.map +1 -0
- package/dist/dyson-device-air-quality.js +101 -0
- package/dist/dyson-device-air-quality.js.map +1 -0
- package/dist/dyson-device-air.d.ts +216 -0
- package/dist/dyson-device-air.d.ts.map +1 -0
- package/dist/dyson-device-air.js +80 -0
- package/dist/dyson-device-air.js.map +1 -0
- package/dist/dyson-device-base.d.ts +49 -0
- package/dist/dyson-device-base.d.ts.map +1 -0
- package/dist/dyson-device-base.js +46 -0
- package/dist/dyson-device-base.js.map +1 -0
- package/dist/dyson-device.d.ts +5 -0
- package/dist/dyson-device.d.ts.map +1 -0
- package/dist/dyson-device.js +43 -0
- package/dist/dyson-device.js.map +1 -0
- package/dist/dyson-mqtt-360.d.ts +16 -0
- package/dist/dyson-mqtt-360.d.ts.map +1 -0
- package/dist/dyson-mqtt-360.js +83 -0
- package/dist/dyson-mqtt-360.js.map +1 -0
- package/dist/dyson-mqtt-air.d.ts +48 -0
- package/dist/dyson-mqtt-air.d.ts.map +1 -0
- package/dist/dyson-mqtt-air.js +216 -0
- package/dist/dyson-mqtt-air.js.map +1 -0
- package/dist/dyson-mqtt-config.d.ts +6 -0
- package/dist/dyson-mqtt-config.d.ts.map +1 -0
- package/dist/dyson-mqtt-config.js +47 -0
- package/dist/dyson-mqtt-config.js.map +1 -0
- package/dist/dyson-mqtt-connect.d.ts +22 -0
- package/dist/dyson-mqtt-connect.d.ts.map +1 -0
- package/dist/dyson-mqtt-connect.js +145 -0
- package/dist/dyson-mqtt-connect.js.map +1 -0
- package/dist/dyson-mqtt-filter.d.ts +10 -0
- package/dist/dyson-mqtt-filter.d.ts.map +1 -0
- package/dist/dyson-mqtt-filter.js +25 -0
- package/dist/dyson-mqtt-filter.js.map +1 -0
- package/dist/dyson-mqtt-parse.d.ts +16 -0
- package/dist/dyson-mqtt-parse.d.ts.map +1 -0
- package/dist/dyson-mqtt-parse.js +100 -0
- package/dist/dyson-mqtt-parse.js.map +1 -0
- package/dist/dyson-mqtt-subscribe.d.ts +28 -0
- package/dist/dyson-mqtt-subscribe.d.ts.map +1 -0
- package/dist/dyson-mqtt-subscribe.js +85 -0
- package/dist/dyson-mqtt-subscribe.js.map +1 -0
- package/dist/dyson-mqtt.d.ts +51 -0
- package/dist/dyson-mqtt.d.ts.map +1 -0
- package/dist/dyson-mqtt.js +138 -0
- package/dist/dyson-mqtt.js.map +1 -0
- package/dist/dyson-types.d.ts +18 -0
- package/dist/dyson-types.d.ts.map +1 -0
- package/dist/dyson-types.js +20 -0
- package/dist/dyson-types.js.map +1 -0
- package/dist/endpoint-360-behavior.d.ts +55 -0
- package/dist/endpoint-360-behavior.d.ts.map +1 -0
- package/dist/endpoint-360-behavior.js +156 -0
- package/dist/endpoint-360-behavior.js.map +1 -0
- package/dist/endpoint-360-rvc.d.ts +14 -0
- package/dist/endpoint-360-rvc.d.ts.map +1 -0
- package/dist/endpoint-360-rvc.js +149 -0
- package/dist/endpoint-360-rvc.js.map +1 -0
- package/dist/endpoint-360.d.ts +35 -0
- package/dist/endpoint-360.d.ts.map +1 -0
- package/dist/endpoint-360.js +197 -0
- package/dist/endpoint-360.js.map +1 -0
- package/dist/endpoint-air-purifier.d.ts +24 -0
- package/dist/endpoint-air-purifier.d.ts.map +1 -0
- package/dist/endpoint-air-purifier.js +97 -0
- package/dist/endpoint-air-purifier.js.map +1 -0
- package/dist/endpoint-air-quality.d.ts +11 -0
- package/dist/endpoint-air-quality.d.ts.map +1 -0
- package/dist/endpoint-air-quality.js +104 -0
- package/dist/endpoint-air-quality.js.map +1 -0
- package/dist/endpoint-air-thermostat.d.ts +358 -0
- package/dist/endpoint-air-thermostat.d.ts.map +1 -0
- package/dist/endpoint-air-thermostat.js +67 -0
- package/dist/endpoint-air-thermostat.js.map +1 -0
- package/dist/endpoint-air.d.ts +125 -0
- package/dist/endpoint-air.d.ts.map +1 -0
- package/dist/endpoint-air.js +459 -0
- package/dist/endpoint-air.js.map +1 -0
- package/dist/endpoint-base.d.ts +36 -0
- package/dist/endpoint-base.d.ts.map +1 -0
- package/dist/endpoint-base.js +137 -0
- package/dist/endpoint-base.js.map +1 -0
- package/dist/error-360.d.ts +35 -0
- package/dist/error-360.d.ts.map +1 -0
- package/dist/error-360.js +105 -0
- package/dist/error-360.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logger-filter.d.ts +23 -0
- package/dist/logger-filter.d.ts.map +1 -0
- package/dist/logger-filter.js +104 -0
- package/dist/logger-filter.js.map +1 -0
- package/dist/logger-options.d.ts +18 -0
- package/dist/logger-options.d.ts.map +1 -0
- package/dist/logger-options.js +41 -0
- package/dist/logger-options.js.map +1 -0
- package/dist/logger-prefix.d.ts +12 -0
- package/dist/logger-prefix.d.ts.map +1 -0
- package/dist/logger-prefix.js +37 -0
- package/dist/logger-prefix.js.map +1 -0
- package/dist/periodic.d.ts +31 -0
- package/dist/periodic.d.ts.map +1 -0
- package/dist/periodic.js +102 -0
- package/dist/periodic.js.map +1 -0
- package/dist/platform.d.ts +18 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +138 -0
- package/dist/platform.js.map +1 -0
- package/dist/settings.d.ts +9 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +28 -0
- package/dist/settings.js.map +1 -0
- package/dist/ti/config-types-ti.d.ts +16 -0
- package/dist/ti/config-types-ti.d.ts.map +1 -0
- package/dist/ti/config-types-ti.js +65 -0
- package/dist/ti/config-types-ti.js.map +1 -0
- package/dist/ti/config-types.d.ts +37 -0
- package/dist/ti/config-types.d.ts.map +1 -0
- package/dist/ti/config-types.js +11 -0
- package/dist/ti/config-types.js.map +1 -0
- package/dist/ti/dyson-360-msg-types-ti.d.ts +22 -0
- package/dist/ti/dyson-360-msg-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-360-msg-types-ti.js +134 -0
- package/dist/ti/dyson-360-msg-types-ti.js.map +1 -0
- package/dist/ti/dyson-360-msg-types.d.ts +55 -0
- package/dist/ti/dyson-360-msg-types.d.ts.map +1 -0
- package/dist/ti/dyson-360-msg-types.js +13 -0
- package/dist/ti/dyson-360-msg-types.js.map +1 -0
- package/dist/ti/dyson-360-types-ti.d.ts +17 -0
- package/dist/ti/dyson-360-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-360-types-ti.js +94 -0
- package/dist/ti/dyson-360-types-ti.js.map +1 -0
- package/dist/ti/dyson-360-types.d.ts +40 -0
- package/dist/ti/dyson-360-types.d.ts.map +1 -0
- package/dist/ti/dyson-360-types.js +11 -0
- package/dist/ti/dyson-360-types.js.map +1 -0
- package/dist/ti/dyson-air-msg-types-ti.d.ts +19 -0
- package/dist/ti/dyson-air-msg-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-air-msg-types-ti.js +115 -0
- package/dist/ti/dyson-air-msg-types-ti.js.map +1 -0
- package/dist/ti/dyson-air-msg-types.d.ts +46 -0
- package/dist/ti/dyson-air-msg-types.d.ts.map +1 -0
- package/dist/ti/dyson-air-msg-types.js +15 -0
- package/dist/ti/dyson-air-msg-types.js.map +1 -0
- package/dist/ti/dyson-air-sensor-types-ti.d.ts +9 -0
- package/dist/ti/dyson-air-sensor-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-air-sensor-types-ti.js +68 -0
- package/dist/ti/dyson-air-sensor-types-ti.js.map +1 -0
- package/dist/ti/dyson-air-sensor-types.d.ts +16 -0
- package/dist/ti/dyson-air-sensor-types.d.ts.map +1 -0
- package/dist/ti/dyson-air-sensor-types.js +12 -0
- package/dist/ti/dyson-air-sensor-types.js.map +1 -0
- package/dist/ti/dyson-air-state-types-ti.d.ts +9 -0
- package/dist/ti/dyson-air-state-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-air-state-types-ti.js +105 -0
- package/dist/ti/dyson-air-state-types-ti.js.map +1 -0
- package/dist/ti/dyson-air-state-types.d.ts +16 -0
- package/dist/ti/dyson-air-state-types.d.ts.map +1 -0
- package/dist/ti/dyson-air-state-types.js +12 -0
- package/dist/ti/dyson-air-state-types.js.map +1 -0
- package/dist/ti/dyson-air-types-ti.d.ts +59 -0
- package/dist/ti/dyson-air-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-air-types-ti.js +385 -0
- package/dist/ti/dyson-air-types-ti.js.map +1 -0
- package/dist/ti/dyson-air-types.d.ts +166 -0
- package/dist/ti/dyson-air-types.d.ts.map +1 -0
- package/dist/ti/dyson-air-types.js +11 -0
- package/dist/ti/dyson-air-types.js.map +1 -0
- package/dist/ti/dyson-types-ti.d.ts +10 -0
- package/dist/ti/dyson-types-ti.d.ts.map +1 -0
- package/dist/ti/dyson-types-ti.js +29 -0
- package/dist/ti/dyson-types-ti.js.map +1 -0
- package/dist/ti/dyson-types.d.ts +19 -0
- package/dist/ti/dyson-types.d.ts.map +1 -0
- package/dist/ti/dyson-types.js +11 -0
- package/dist/ti/dyson-types.js.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +150 -0
- package/dist/utils.js.map +1 -0
- package/matterbridge-dyson-robot.schema.json +359 -0
- package/package.json +93 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PowerSource, RvcOperationalState } from 'matterbridge/matter/clusters';
|
|
2
|
+
import { Dyson360Faults, Dyson360State } from './dyson-360-types.js';
|
|
3
|
+
import { AnsiLogger } from 'matterbridge/logger';
|
|
4
|
+
export interface Dyson360MappedFaults {
|
|
5
|
+
operationalError: RvcOperationalState.ErrorStateStruct;
|
|
6
|
+
activeBatFaults: PowerSource.BatFault[];
|
|
7
|
+
activeBatChargeFaults: PowerSource.BatChargeFault[];
|
|
8
|
+
}
|
|
9
|
+
export declare function mapDyson360Faults(log: AnsiLogger, state: Dyson360State, faults?: Dyson360Faults): Dyson360MappedFaults;
|
|
10
|
+
//# sourceMappingURL=dyson-device-360-faults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-360-faults.d.ts","sourceRoot":"","sources":["../src/dyson-device-360-faults.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,WAAW,EACX,mBAAmB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,cAAc,EAEd,aAAa,EAChB,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQjD,MAAM,WAAW,oBAAoB;IACjC,gBAAgB,EAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAC7D,eAAe,EAAS,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC/C,qBAAqB,EAAG,WAAW,CAAC,cAAc,EAAE,CAAC;CACxD;AAyGD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,oBAAoB,CAoBtH"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { PowerSource } from 'matterbridge/matter/clusters';
|
|
4
|
+
import { assert } from 'console';
|
|
5
|
+
import { RvcOperationalStateError } from './error-360.js';
|
|
6
|
+
import { DYSON_360_FAULT_CATEGORIES, DYSON_360_FAULT_CODES, DYSON_360_FAULT_STATES } from './dyson-device-360-faults-table.js';
|
|
7
|
+
import { assertIsDefined } from './utils.js';
|
|
8
|
+
// Parse a fault code into a numeric tuple
|
|
9
|
+
function parseFaultCode(code) {
|
|
10
|
+
const parts = code.split('.').map(Number);
|
|
11
|
+
if (parts.length !== 3 || parts.some(isNaN))
|
|
12
|
+
throw new Error(`Invalid fault code: ${code}`);
|
|
13
|
+
return parts;
|
|
14
|
+
}
|
|
15
|
+
// Parse a fault pattern into a numeric array
|
|
16
|
+
function parseFaultPattern(codeOrPattern) {
|
|
17
|
+
const parts = codeOrPattern.split('.');
|
|
18
|
+
const wildcardIndex = parts.indexOf('#');
|
|
19
|
+
if (wildcardIndex !== -1)
|
|
20
|
+
parts.length = wildcardIndex;
|
|
21
|
+
return parts.map(Number);
|
|
22
|
+
}
|
|
23
|
+
// Parse a fault pattern or range into an array of numeric ranges
|
|
24
|
+
function parseFaultRange(patternOrRange) {
|
|
25
|
+
const low = parseFaultPattern(Array.isArray(patternOrRange) ? patternOrRange[0] : patternOrRange);
|
|
26
|
+
const high = parseFaultPattern(Array.isArray(patternOrRange) ? patternOrRange[1] : patternOrRange);
|
|
27
|
+
assert(low.length === high.length);
|
|
28
|
+
const zipped = low.map((l, i) => [l, high[i]]);
|
|
29
|
+
return zipped;
|
|
30
|
+
}
|
|
31
|
+
// Test whether a fault code is in a range, returning its specificity
|
|
32
|
+
function isFaultInRange(patternOrRange, code) {
|
|
33
|
+
const range = parseFaultRange(patternOrRange);
|
|
34
|
+
const value = parseFaultCode(code);
|
|
35
|
+
assert(range.length <= value.length);
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
37
|
+
if (range.some(([l, h], i) => value[i] < l || h < value[i]))
|
|
38
|
+
return 0;
|
|
39
|
+
return range.length;
|
|
40
|
+
}
|
|
41
|
+
// Find the most specific match for a fault code
|
|
42
|
+
function findFaultMatch(fault) {
|
|
43
|
+
let bestDetail;
|
|
44
|
+
let bestSpecificity = 0;
|
|
45
|
+
for (const [patternOrRange, detail] of DYSON_360_FAULT_CODES) {
|
|
46
|
+
const specificity = isFaultInRange(patternOrRange, fault);
|
|
47
|
+
if (bestSpecificity < specificity) {
|
|
48
|
+
bestSpecificity = specificity;
|
|
49
|
+
bestDetail = detail;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return bestDetail;
|
|
53
|
+
}
|
|
54
|
+
// Find the matches for a robot state in priority order
|
|
55
|
+
function getFaultDetails(log, state, faults) {
|
|
56
|
+
const detailList = [];
|
|
57
|
+
// Highest priority are specific matches for each active fault
|
|
58
|
+
for (const [category, fault] of Object.entries(faults ?? {})) {
|
|
59
|
+
if (fault.active) {
|
|
60
|
+
const detail = findFaultMatch(fault.description);
|
|
61
|
+
if (detail) {
|
|
62
|
+
log.debug(`Mapped ${category} fault ${fault.description} to ${JSON.stringify(detail)}`);
|
|
63
|
+
detailList.push(detail);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
log.warn(`Received unknown ${category} fault: ${fault.description}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Next are mappings from the active fault categories
|
|
71
|
+
for (const [category, fault] of Object.entries(faults ?? {})) {
|
|
72
|
+
if (fault.active) {
|
|
73
|
+
const detail = DYSON_360_FAULT_CATEGORIES[category];
|
|
74
|
+
log.debug(`Mapped ${category} fault category to ${JSON.stringify(detail)}`);
|
|
75
|
+
detailList.push(detail);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Lowest priority is any fault from the robot state
|
|
79
|
+
const stateDetail = DYSON_360_FAULT_STATES.get(state);
|
|
80
|
+
if (stateDetail) {
|
|
81
|
+
log.debug(`Mapped ${state} state to ${JSON.stringify(stateDetail)}`);
|
|
82
|
+
detailList.push(stateDetail);
|
|
83
|
+
}
|
|
84
|
+
return detailList;
|
|
85
|
+
}
|
|
86
|
+
// Map a list of fault details to the most relevant RVC Operational State error
|
|
87
|
+
function dyson360FaultDetailsToError(log, detailList) {
|
|
88
|
+
// If there is an RVC Operational State Error then use the first
|
|
89
|
+
const opError = detailList.find(detail => detail.opError !== undefined);
|
|
90
|
+
if (opError) {
|
|
91
|
+
log.debug(`Selected RVC Operational State Error: ${opError.opError}("${opError.msg}")`);
|
|
92
|
+
assertIsDefined(opError.opError);
|
|
93
|
+
const constructor = RvcOperationalStateError.create(opError.opError);
|
|
94
|
+
return new constructor(opError.msg);
|
|
95
|
+
}
|
|
96
|
+
// Otherwise create a generic Error
|
|
97
|
+
const detail = detailList[0];
|
|
98
|
+
if (detail) {
|
|
99
|
+
log.debug(`Selected manufacturer-specific Error: "${detail.msg}"`);
|
|
100
|
+
return new Error(detail.msg);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Map Dyson robot vacuum state and active faults to cluster attributes
|
|
104
|
+
export function mapDyson360Faults(log, state, faults) {
|
|
105
|
+
// Map the state and active faults to a list of matching fault details
|
|
106
|
+
const detailList = getFaultDetails(log, state, faults);
|
|
107
|
+
// Construct the most relevant RVC Operational State error
|
|
108
|
+
const err = dyson360FaultDetailsToError(log, detailList);
|
|
109
|
+
const operationalError = RvcOperationalStateError.toStruct(err);
|
|
110
|
+
// Construct a list of active battery faults
|
|
111
|
+
const batFaults = new Set(detailList.map(detail => detail.batFault).filter(detail => detail !== undefined));
|
|
112
|
+
if (batFaults.has('Unspecified') && 1 < batFaults.size)
|
|
113
|
+
batFaults.delete('Unspecified');
|
|
114
|
+
const activeBatFaults = Array.from(batFaults, name => PowerSource.BatFault[name]);
|
|
115
|
+
// Construct a list of active battery charger faults
|
|
116
|
+
const chargeFaults = new Set(detailList.map(detail => detail.chargeFault).filter(detail => detail !== undefined));
|
|
117
|
+
if (chargeFaults.has('Unspecified') && 1 < chargeFaults.size)
|
|
118
|
+
chargeFaults.delete('Unspecified');
|
|
119
|
+
const activeBatChargeFaults = Array.from(chargeFaults, name => PowerSource.BatChargeFault[name]);
|
|
120
|
+
// Return the resulting attribute values
|
|
121
|
+
return { operationalError, activeBatFaults, activeBatChargeFaults };
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=dyson-device-360-faults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-360-faults.js","sourceRoot":"","sources":["../src/dyson-device-360-faults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BasicInformation } from 'matterbridge/matter/clusters';
|
|
2
|
+
import { DysonDevice360Base, PowerModeMap } from './dyson-device-360-base.js';
|
|
3
|
+
export declare class DysonDevice360Eye extends DysonDevice360Base {
|
|
4
|
+
static readonly model: {
|
|
5
|
+
type: string;
|
|
6
|
+
number: string;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
getBatteryPartNumber: () => string;
|
|
10
|
+
getProductAppearance: () => {
|
|
11
|
+
finish: BasicInformation.ProductFinish;
|
|
12
|
+
primaryColor: BasicInformation.Color;
|
|
13
|
+
};
|
|
14
|
+
getPowerModeMaps: () => PowerModeMap[];
|
|
15
|
+
}
|
|
16
|
+
export declare class DysonDevice360Heurist extends DysonDevice360Base {
|
|
17
|
+
static readonly model: {
|
|
18
|
+
type: string;
|
|
19
|
+
number: string;
|
|
20
|
+
name: string;
|
|
21
|
+
};
|
|
22
|
+
getBatteryPartNumber: () => string;
|
|
23
|
+
getProductAppearance: () => {
|
|
24
|
+
finish: BasicInformation.ProductFinish;
|
|
25
|
+
primaryColor: BasicInformation.Color;
|
|
26
|
+
};
|
|
27
|
+
getPowerModeMaps: () => PowerModeMap[];
|
|
28
|
+
}
|
|
29
|
+
export declare class DysonDevice360VisNav extends DysonDevice360Heurist {
|
|
30
|
+
static readonly model: {
|
|
31
|
+
type: string;
|
|
32
|
+
number: string;
|
|
33
|
+
name: string;
|
|
34
|
+
};
|
|
35
|
+
getBatteryPartNumber: () => string;
|
|
36
|
+
getPowerModeMaps: () => PowerModeMap[];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=dyson-device-360.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-360.d.ts","sourceRoot":"","sources":["../src/dyson-device-360.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOhE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG9E,qBAAa,iBAAkB,SAAQ,kBAAkB;IACrD,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAqD;IAEjE,oBAAoB,eAAqB;IAEzC,oBAAoB;;;MAG1B;IAEM,gBAAgB,QAAO,YAAY,EAAE,CAG5C;CACL;AAGD,qBAAa,qBAAsB,SAAQ,kBAAkB;IACzD,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAwD;IAEpE,oBAAoB,eAAqB;IAEzC,oBAAoB;;;MAG1B;IAEM,gBAAgB,QAAO,YAAY,EAAE,CAI5C;CACL;AAGD,qBAAa,oBAAqB,SAAQ,qBAAqB;IAC3D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAwD;IAEpE,oBAAoB,eAAqB;IAEzC,gBAAgB,QAAO,YAAY,EAAE,CAK5C;CACL"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { BasicInformation } from 'matterbridge/matter/clusters';
|
|
4
|
+
import { RvcCleanMode360 } from './endpoint-360-behavior.js';
|
|
5
|
+
import { Dyson360EyePowerMode, Dyson360HeuristPowerMode, Dyson360VisNavPowerMode } from './dyson-360-types.js';
|
|
6
|
+
import { DysonDevice360Base } from './dyson-device-360-base.js';
|
|
7
|
+
// A Dyson 360 Eye device
|
|
8
|
+
export class DysonDevice360Eye extends DysonDevice360Base {
|
|
9
|
+
static model = { type: 'N223', number: 'RB01', name: '360 Eye' };
|
|
10
|
+
getBatteryPartNumber = () => '968734-02';
|
|
11
|
+
getProductAppearance = () => ({
|
|
12
|
+
finish: BasicInformation.ProductFinish.Polished,
|
|
13
|
+
primaryColor: BasicInformation.Color.Nickel // (or Fuchsia for Japan limited edition)
|
|
14
|
+
});
|
|
15
|
+
getPowerModeMaps = () => [
|
|
16
|
+
[Dyson360EyePowerMode.Quiet, RvcCleanMode360.Quiet, 'Quiet'],
|
|
17
|
+
[Dyson360EyePowerMode.Max, RvcCleanMode360.MaxBoost, 'Max']
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
// A Dyson 360 Heurist device
|
|
21
|
+
export class DysonDevice360Heurist extends DysonDevice360Base {
|
|
22
|
+
static model = { type: '276', number: 'RB02', name: '360 Heurist' };
|
|
23
|
+
getBatteryPartNumber = () => '970049-01';
|
|
24
|
+
getProductAppearance = () => ({
|
|
25
|
+
finish: BasicInformation.ProductFinish.Satin,
|
|
26
|
+
primaryColor: BasicInformation.Color.Blue
|
|
27
|
+
});
|
|
28
|
+
getPowerModeMaps = () => [
|
|
29
|
+
[Dyson360HeuristPowerMode.Quiet, RvcCleanMode360.Quiet, 'Quiet'],
|
|
30
|
+
[Dyson360HeuristPowerMode.High, RvcCleanMode360.High, 'High'],
|
|
31
|
+
[Dyson360HeuristPowerMode.Max, RvcCleanMode360.MaxBoost, 'Max']
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
// Alias without any functional differences
|
|
35
|
+
export class DysonDevice360VisNav extends DysonDevice360Heurist {
|
|
36
|
+
static model = { type: '277', number: 'RB03', name: '360 Vis Nav' };
|
|
37
|
+
getBatteryPartNumber = () => '967864-02';
|
|
38
|
+
getPowerModeMaps = () => [
|
|
39
|
+
[Dyson360VisNavPowerMode.Auto, RvcCleanMode360.Auto, 'Auto'],
|
|
40
|
+
[Dyson360VisNavPowerMode.Quick, RvcCleanMode360.Quick, 'Quick'],
|
|
41
|
+
[Dyson360VisNavPowerMode.Quiet, RvcCleanMode360.Quiet, 'Quiet'],
|
|
42
|
+
[Dyson360VisNavPowerMode.Boost, RvcCleanMode360.MaxBoost, 'Boost']
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dyson-device-360.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-360.js","sourceRoot":"","sources":["../src/dyson-device-360.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACH,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAgB,MAAM,4BAA4B,CAAC;AAE9E,yBAAyB;AACzB,MAAM,OAAO,iBAAkB,SAAQ,kBAAkB;IACrD,MAAM,CAAU,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAEjE,oBAAoB,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;IAEzC,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAU,gBAAgB,CAAC,aAAa,CAAC,QAAQ;QACvD,YAAY,EAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC;KAC1F,CAAC,CAAC;IAEM,gBAAgB,GAAG,GAAmB,EAAE,CAAC;QAC9C,CAAC,oBAAoB,CAAC,KAAK,EAAS,eAAe,CAAC,KAAK,EAAO,OAAO,CAAC;QACxE,CAAC,oBAAoB,CAAC,GAAG,EAAW,eAAe,CAAC,QAAQ,EAAI,KAAK,CAAC;KACzE,CAAC;;AAGN,6BAA6B;AAC7B,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IACzD,MAAM,CAAU,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAEpE,oBAAoB,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;IAEzC,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,EAAU,gBAAgB,CAAC,aAAa,CAAC,KAAK;QACpD,YAAY,EAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI;KAC9C,CAAC,CAAC;IAEM,gBAAgB,GAAG,GAAmB,EAAE,CAAC;QAC9C,CAAC,wBAAwB,CAAC,KAAK,EAAK,eAAe,CAAC,KAAK,EAAO,OAAO,CAAC;QACxE,CAAC,wBAAwB,CAAC,IAAI,EAAM,eAAe,CAAC,IAAI,EAAQ,MAAM,CAAC;QACvE,CAAC,wBAAwB,CAAC,GAAG,EAAO,eAAe,CAAC,QAAQ,EAAI,KAAK,CAAC;KACzE,CAAC;;AAGN,2CAA2C;AAC3C,MAAM,OAAO,oBAAqB,SAAQ,qBAAqB;IAC3D,MAAM,CAAU,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAEpE,oBAAoB,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;IAEzC,gBAAgB,GAAG,GAAmB,EAAE,CAAC;QAC9C,CAAC,uBAAuB,CAAC,IAAI,EAAO,eAAe,CAAC,IAAI,EAAQ,MAAM,CAAC;QACvE,CAAC,uBAAuB,CAAC,KAAK,EAAM,eAAe,CAAC,KAAK,EAAO,OAAO,CAAC;QACxE,CAAC,uBAAuB,CAAC,KAAK,EAAM,eAAe,CAAC,KAAK,EAAO,OAAO,CAAC;QACxE,CAAC,uBAAuB,CAAC,KAAK,EAAM,eAAe,CAAC,QAAQ,EAAI,OAAO,CAAC;KAC3E,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { DysonDevice, DysonDeviceConstructorParams } from './dyson-device-base.js';
|
|
2
|
+
import { DysonMqttAir, DysonMqttProductState, DysonMqttStatusAir } from './dyson-mqtt-air.js';
|
|
3
|
+
import { EntityName } from './config-types.js';
|
|
4
|
+
import { MatterbridgeEndpoint } from 'matterbridge';
|
|
5
|
+
import { DysonMqttStatus } from './dyson-mqtt.js';
|
|
6
|
+
import { EndpointsAir, EndpointOptionsAirSensors, UpdateAirFilterMonitoring, UpdateAirFan } from './endpoint-air.js';
|
|
7
|
+
export declare abstract class DysonDeviceAirBase extends DysonDevice<DysonMqttAir> {
|
|
8
|
+
static readonly mqttConstructor: typeof DysonMqttAir;
|
|
9
|
+
mqttListener: () => void;
|
|
10
|
+
endpoints?: EndpointsAir;
|
|
11
|
+
hasBreeze: boolean;
|
|
12
|
+
hasCarbonFilter: boolean;
|
|
13
|
+
hasDirection: boolean;
|
|
14
|
+
hasLeftRight: boolean;
|
|
15
|
+
hasUpDown: boolean;
|
|
16
|
+
useFanModeOff: boolean;
|
|
17
|
+
constructor(...args: DysonDeviceConstructorParams<DysonMqttAir>);
|
|
18
|
+
makeEndpoints(validatedNames: EntityName[]): EndpointsAir;
|
|
19
|
+
installHandlers(endpoints: EndpointsAir): Promise<void>;
|
|
20
|
+
get sensorSupport(): EndpointOptionsAirSensors;
|
|
21
|
+
getEntities(): {
|
|
22
|
+
name: EntityName;
|
|
23
|
+
description: string;
|
|
24
|
+
}[];
|
|
25
|
+
getEndpoints(validatedNames: EntityName[]): MatterbridgeEndpoint[];
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
setPower(powerOn: boolean): Promise<void>;
|
|
29
|
+
setFanAuto(): Promise<void>;
|
|
30
|
+
setDirection(forward: boolean): Promise<void>;
|
|
31
|
+
setFanSpeed(speed: number): Promise<void>;
|
|
32
|
+
setNightMode(night: boolean): Promise<void>;
|
|
33
|
+
setOscillateLeftRight(oscillate: boolean): Promise<void>;
|
|
34
|
+
setOscillateUpDown(oscillate: boolean): Promise<void>;
|
|
35
|
+
setOscillateBreeze(breeze: boolean): Promise<void>;
|
|
36
|
+
setState(productState: DysonMqttProductState): Promise<void>;
|
|
37
|
+
updateClusterAttributes(status: DysonMqttStatus<DysonMqttStatusAir>): Promise<void>;
|
|
38
|
+
mapDysonFanControlStatus(status: DysonMqttStatus<DysonMqttStatusAir>): UpdateAirFan;
|
|
39
|
+
mapDysonFilterStatus(status: DysonMqttStatus<DysonMqttStatusAir>): UpdateAirFilterMonitoring;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=dyson-device-air-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-air-base.d.ts","sourceRoot":"","sources":["../src/dyson-device-air-base.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,WAAW,EACX,4BAA4B,EAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAMpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACH,YAAY,EAEZ,yBAAyB,EACzB,yBAAyB,EAEzB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAmC3B,8BAAsB,kBAAmB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAGtE,MAAM,CAAC,QAAQ,CAAC,eAAe,sBAAgB;IAC/C,YAAY,EAAQ,MAAM,IAAI,CAAC;IAG/B,SAAS,CAAC,EAAU,YAAY,CAAC;IAGjC,SAAS,EAAW,OAAO,CAAC;IAC5B,eAAe,EAAK,OAAO,CAAC;IAC5B,YAAY,EAAQ,OAAO,CAAC;IAC5B,YAAY,EAAQ,OAAO,CAAC;IAC5B,SAAS,EAAW,OAAO,CAAC;IAG5B,aAAa,UAAS;gBAGV,GAAG,IAAI,EAAE,4BAA4B,CAAC,YAAY,CAAC;IAiB/D,aAAa,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,YAAY;IA2CnD,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B7D,IAAI,aAAa,IAAI,yBAAyB,CAU7C;IAGQ,WAAW,IAAI;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;IAoB1D,YAAY,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,oBAAoB,EAAE;IAM5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrD,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5D,uBAAuB,CACzB,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC;IAYhB,wBAAwB,CAAC,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,GAAG,YAAY;IAkFnF,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,GAAG,yBAAyB;CAuB/F"}
|