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,156 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { Behavior } from 'matterbridge/matter';
|
|
4
|
+
import { ClusterModel, FieldElement } from 'matterbridge/matter';
|
|
5
|
+
import { RvcOperationalState } from 'matterbridge/matter/clusters';
|
|
6
|
+
import { RvcCleanModeBehavior, RvcOperationalStateBehavior, RvcRunModeBehavior } from 'matterbridge/matter/behaviors';
|
|
7
|
+
import { ChangeToModeError, RvcOperationalStateError } from './error-360.js';
|
|
8
|
+
import { assertIsDefined, assertIsInstanceOf, logError } from './utils.js';
|
|
9
|
+
// Robot Vacuum Cleaner Run Mode cluster modes
|
|
10
|
+
export var RvcRunMode360;
|
|
11
|
+
(function (RvcRunMode360) {
|
|
12
|
+
RvcRunMode360[RvcRunMode360["Idle"] = 0] = "Idle";
|
|
13
|
+
RvcRunMode360[RvcRunMode360["Cleaning"] = 1] = "Cleaning";
|
|
14
|
+
RvcRunMode360[RvcRunMode360["Mapping"] = 2] = "Mapping";
|
|
15
|
+
})(RvcRunMode360 || (RvcRunMode360 = {}));
|
|
16
|
+
// Robot Vacuum Cleaner Clean Mode cluster modes
|
|
17
|
+
export var RvcCleanMode360;
|
|
18
|
+
(function (RvcCleanMode360) {
|
|
19
|
+
RvcCleanMode360[RvcCleanMode360["Quiet"] = 0] = "Quiet";
|
|
20
|
+
RvcCleanMode360[RvcCleanMode360["Quick"] = 1] = "Quick";
|
|
21
|
+
RvcCleanMode360[RvcCleanMode360["High"] = 2] = "High";
|
|
22
|
+
RvcCleanMode360[RvcCleanMode360["MaxBoost"] = 3] = "MaxBoost";
|
|
23
|
+
RvcCleanMode360[RvcCleanMode360["Auto"] = 4] = "Auto"; // Vis Nav: Auto
|
|
24
|
+
})(RvcCleanMode360 || (RvcCleanMode360 = {}));
|
|
25
|
+
// OperationalStatus manufacturer error
|
|
26
|
+
export const VENDOR_ERROR_360 = 0x80;
|
|
27
|
+
// Command handling behaviour for the endpoint
|
|
28
|
+
export class BehaviorDevice360 {
|
|
29
|
+
log;
|
|
30
|
+
// Registered command handlers
|
|
31
|
+
commands = {};
|
|
32
|
+
// Construct new command handling behaviour
|
|
33
|
+
constructor(log) {
|
|
34
|
+
this.log = log;
|
|
35
|
+
}
|
|
36
|
+
// Set a command handler
|
|
37
|
+
setCommandHandler(command, handler) {
|
|
38
|
+
if (this.commands[command])
|
|
39
|
+
throw new Error(`Handler already registered for command ${command}`);
|
|
40
|
+
this.commands[command] = handler;
|
|
41
|
+
}
|
|
42
|
+
// Execute a command handler
|
|
43
|
+
async executeCommand(command, ...args) {
|
|
44
|
+
const handler = this.commands[command];
|
|
45
|
+
if (!handler)
|
|
46
|
+
throw new Error(`${command} not implemented`);
|
|
47
|
+
await handler(...args);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class Behavior360 extends Behavior {
|
|
51
|
+
static id = 'dyson-rvc';
|
|
52
|
+
}
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
54
|
+
(function (Behavior360) {
|
|
55
|
+
class State {
|
|
56
|
+
device;
|
|
57
|
+
}
|
|
58
|
+
Behavior360.State = State;
|
|
59
|
+
})(Behavior360 || (Behavior360 = {}));
|
|
60
|
+
// Implement command handlers for the RVC Run Mode cluster
|
|
61
|
+
export class RvcRunModeServer360 extends RvcRunModeBehavior {
|
|
62
|
+
// ChangeToMode command handler
|
|
63
|
+
async changeToMode({ newMode }) {
|
|
64
|
+
const { device } = this.agent.get(Behavior360).state;
|
|
65
|
+
const { log } = device;
|
|
66
|
+
try {
|
|
67
|
+
// Check whether it is a valid request
|
|
68
|
+
log.debug(`RVC Run Mode command: ChangeToMode ${newMode}...`);
|
|
69
|
+
const supported = this.state.supportedModes.some(({ mode }) => mode === newMode);
|
|
70
|
+
if (!supported)
|
|
71
|
+
throw new ChangeToModeError.UnsupportedMode;
|
|
72
|
+
// Attempt to change the mode
|
|
73
|
+
await device.executeCommand('ChangeRunMode', newMode);
|
|
74
|
+
// Success
|
|
75
|
+
log.debug(`RVC Run Mode command: ChangeToMode ${newMode} - OK`);
|
|
76
|
+
return ChangeToModeError.toResponse();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
logError(log, 'RVC Run Mode ChangeToMode', err);
|
|
80
|
+
return ChangeToModeError.toResponse(err);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Implement command handlers for the RVC Clean Mode cluster
|
|
85
|
+
export class RvcCleanModeServer360 extends RvcCleanModeBehavior {
|
|
86
|
+
// ChangeToMode command handler
|
|
87
|
+
async changeToMode({ newMode }) {
|
|
88
|
+
const { device } = this.agent.get(Behavior360).state;
|
|
89
|
+
const { log } = device;
|
|
90
|
+
try {
|
|
91
|
+
// Check whether it is a valid request
|
|
92
|
+
log.debug(`RVC Clean Mode command: ChangeToMode ${newMode}...`);
|
|
93
|
+
const supported = this.state.supportedModes.some(({ mode }) => mode === newMode);
|
|
94
|
+
if (!supported)
|
|
95
|
+
throw new ChangeToModeError.UnsupportedMode;
|
|
96
|
+
// Attempt to change the mode
|
|
97
|
+
await device.executeCommand('ChangeCleanMode', newMode);
|
|
98
|
+
// Success
|
|
99
|
+
log.debug(`RVC Clean Mode command: ChangeToMode ${newMode} - OK`);
|
|
100
|
+
return ChangeToModeError.toResponse();
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
logError(log, 'RVC Clean Mode ChangeToMode', err);
|
|
104
|
+
return ChangeToModeError.toResponse(err);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Implement command handlers for the RVC Operational State cluster
|
|
109
|
+
export class RvcOperationalStateServer360 extends RvcOperationalStateBehavior {
|
|
110
|
+
static {
|
|
111
|
+
const schema = RvcOperationalStateServer360.schema;
|
|
112
|
+
assertIsInstanceOf(schema, ClusterModel);
|
|
113
|
+
const extendEnum = (name, values) => {
|
|
114
|
+
const element = schema.datatypes.find(e => e.name === name);
|
|
115
|
+
assertIsDefined(element);
|
|
116
|
+
element.children = [...element.children, ...values];
|
|
117
|
+
};
|
|
118
|
+
// Add a manufacturer-specific ErrorState value
|
|
119
|
+
extendEnum('ErrorStateEnum', [
|
|
120
|
+
FieldElement({
|
|
121
|
+
name: 'OtherError',
|
|
122
|
+
id: VENDOR_ERROR_360,
|
|
123
|
+
conformance: 'O',
|
|
124
|
+
description: 'The device has an error that is not covered by the Matter-defined error states'
|
|
125
|
+
})
|
|
126
|
+
]);
|
|
127
|
+
}
|
|
128
|
+
// Common command handler
|
|
129
|
+
async command(command, defaultErrorId) {
|
|
130
|
+
const { device } = this.agent.get(Behavior360).state;
|
|
131
|
+
const { log } = device;
|
|
132
|
+
try {
|
|
133
|
+
log.debug(`RVC Operational State command: ${command}...`);
|
|
134
|
+
await device.executeCommand(command);
|
|
135
|
+
log.debug(`RVC Operational State command: ${command} - OK`);
|
|
136
|
+
return RvcOperationalStateError.toResponse();
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
logError(log, `RVC Operational State ${command}`, err);
|
|
140
|
+
return RvcOperationalStateError.toResponse(err, defaultErrorId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Pause command handler
|
|
144
|
+
pause() {
|
|
145
|
+
return this.command('Pause', RvcOperationalState.ErrorState.CommandInvalidInState);
|
|
146
|
+
}
|
|
147
|
+
// Resume command handler
|
|
148
|
+
resume() {
|
|
149
|
+
return this.command('Resume', RvcOperationalState.ErrorState.UnableToStartOrResume);
|
|
150
|
+
}
|
|
151
|
+
// GoHome command handler
|
|
152
|
+
goHome() {
|
|
153
|
+
return this.command('GoHome', RvcOperationalState.ErrorState.CommandInvalidInState);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=endpoint-360-behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-360-behavior.js","sourceRoot":"","sources":["../src/endpoint-360-behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RvcCleanMode360 } from './endpoint-360-behavior.js';
|
|
2
|
+
import { Endpoint } from 'matterbridge/matter';
|
|
3
|
+
export interface BatteryPowerSourceOptions {
|
|
4
|
+
batteryPartNumber: string;
|
|
5
|
+
}
|
|
6
|
+
export type RvcCleanModeLabels = [RvcCleanMode360, string][];
|
|
7
|
+
export interface RvcCleanModeOptions {
|
|
8
|
+
labels: RvcCleanModeLabels;
|
|
9
|
+
}
|
|
10
|
+
export declare function createBatteryPowerSourceClusterServer({ behaviors }: Endpoint, { batteryPartNumber }: BatteryPowerSourceOptions): void;
|
|
11
|
+
export declare function createRvcRunModeClusterServer({ behaviors }: Endpoint): void;
|
|
12
|
+
export declare function createRvcCleanModeClusterServer({ behaviors }: Endpoint, { labels }: RvcCleanModeOptions): void;
|
|
13
|
+
export declare function createRvcOperationalStateClusterServer({ behaviors }: Endpoint): void;
|
|
14
|
+
//# sourceMappingURL=endpoint-360-rvc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-360-rvc.d.ts","sourceRoot":"","sources":["../src/endpoint-360-rvc.ts"],"names":[],"mappings":"AAUA,OAAO,EACH,eAAe,EAKlB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,MAAM,WAAW,yBAAyB;IACtC,iBAAiB,EAAO,MAAM,CAAC;CAClC;AACD,MAAM,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;AAC7D,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAkB,kBAAkB,CAAC;CAC9C;AAGD,wBAAgB,qCAAqC,CACjD,EAAE,SAAS,EAAE,EAAW,QAAQ,EAChC,EAAE,iBAAiB,EAAE,EAAG,yBAAyB,GAClD,IAAI,CAuCN;AAGD,wBAAgB,6BAA6B,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,GAAG,IAAI,CAuB3E;AAGD,wBAAgB,+BAA+B,CAC3C,EAAE,SAAS,EAAE,EAAG,QAAQ,EACxB,EAAE,MAAM,EAAE,EAAM,mBAAmB,GACpC,IAAI,CAgDN;AAGD,wBAAgB,sCAAsC,CAClD,EAAE,SAAS,EAAE,EAAE,QAAQ,GACxB,IAAI,CA6BN"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { PowerSource, RvcCleanMode, RvcRunMode, RvcOperationalState } from 'matterbridge/matter/clusters';
|
|
4
|
+
import { PowerSourceServer } from 'matterbridge/matter/behaviors';
|
|
5
|
+
import { RvcCleanMode360, RvcCleanModeServer360, RvcOperationalStateServer360, RvcRunMode360, RvcRunModeServer360 } from './endpoint-360-behavior.js';
|
|
6
|
+
import { RvcOperationalStateError } from './error-360.js';
|
|
7
|
+
// Create the Power Source cluster for the rechargeable battery
|
|
8
|
+
export function createBatteryPowerSourceClusterServer({ behaviors }, { batteryPartNumber }) {
|
|
9
|
+
behaviors.require(PowerSourceServer.withFeatures(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable, PowerSource.Feature.Replaceable).enable({
|
|
10
|
+
events: {
|
|
11
|
+
batFaultChange: true,
|
|
12
|
+
batChargeFaultChange: true
|
|
13
|
+
}
|
|
14
|
+
}), {
|
|
15
|
+
// Constant attributes
|
|
16
|
+
batApprovedChemistry: PowerSource.BatApprovedChemistry.LithiumIon,
|
|
17
|
+
batCapacity: 6600, // mAh
|
|
18
|
+
batFunctionalWhileCharging: false,
|
|
19
|
+
batPresent: true,
|
|
20
|
+
batQuantity: 1,
|
|
21
|
+
batReplaceability: PowerSource.BatReplaceability.UserReplaceable,
|
|
22
|
+
batReplacementDescription: `Dyson ${batteryPartNumber} (14.8V Li-ion)`,
|
|
23
|
+
description: 'Primary Battery',
|
|
24
|
+
endpointList: [],
|
|
25
|
+
order: 0,
|
|
26
|
+
// Variable attributes (with dummy defaults)
|
|
27
|
+
activeBatChargeFaults: [],
|
|
28
|
+
activeBatFaults: [],
|
|
29
|
+
batChargeLevel: PowerSource.BatChargeLevel.Ok,
|
|
30
|
+
batChargeState: PowerSource.BatChargeState.Unknown,
|
|
31
|
+
batPercentRemaining: null,
|
|
32
|
+
batReplacementNeeded: true,
|
|
33
|
+
status: PowerSource.PowerSourceStatus.Unspecified,
|
|
34
|
+
// Unsupported attributes
|
|
35
|
+
batAnsiDesignation: undefined,
|
|
36
|
+
batChargingCurrent: undefined,
|
|
37
|
+
batCommonDesignation: undefined,
|
|
38
|
+
batIecDesignation: undefined,
|
|
39
|
+
batTimeRemaining: undefined,
|
|
40
|
+
batTimeToFullCharge: undefined,
|
|
41
|
+
batVoltage: null
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Create the RVC Run Mode cluster
|
|
45
|
+
export function createRvcRunModeClusterServer({ behaviors }) {
|
|
46
|
+
behaviors.require(RvcRunModeServer360.enable({
|
|
47
|
+
commands: {
|
|
48
|
+
changeToMode: true
|
|
49
|
+
}
|
|
50
|
+
}), {
|
|
51
|
+
// Constant attributes
|
|
52
|
+
supportedModes: [{
|
|
53
|
+
label: 'Idle',
|
|
54
|
+
mode: RvcRunMode360.Idle,
|
|
55
|
+
modeTags: [{ value: RvcRunMode.ModeTag.Idle }]
|
|
56
|
+
}, {
|
|
57
|
+
label: 'Cleaning',
|
|
58
|
+
mode: RvcRunMode360.Cleaning,
|
|
59
|
+
modeTags: [{ value: RvcRunMode.ModeTag.Cleaning }]
|
|
60
|
+
}, {
|
|
61
|
+
label: 'Mapping',
|
|
62
|
+
mode: RvcRunMode360.Mapping,
|
|
63
|
+
modeTags: [{ value: RvcRunMode.ModeTag.Mapping }]
|
|
64
|
+
}],
|
|
65
|
+
// Variable attributes (with dummy defaults)
|
|
66
|
+
currentMode: RvcRunMode360.Idle
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// Create the RVC Clean Mode cluster
|
|
70
|
+
export function createRvcCleanModeClusterServer({ behaviors }, { labels }) {
|
|
71
|
+
// Mode tags to use for each mode
|
|
72
|
+
const CLEAN_MODE_TAGS = {
|
|
73
|
+
[RvcCleanMode360.Quiet]: [
|
|
74
|
+
{ value: RvcCleanMode.ModeTag.Vacuum },
|
|
75
|
+
{ value: RvcCleanMode.ModeTag.LowEnergy },
|
|
76
|
+
{ value: RvcCleanMode.ModeTag.LowNoise },
|
|
77
|
+
{ value: RvcCleanMode.ModeTag.Min },
|
|
78
|
+
{ value: RvcCleanMode.ModeTag.Night },
|
|
79
|
+
{ value: RvcCleanMode.ModeTag.Quiet }
|
|
80
|
+
],
|
|
81
|
+
[RvcCleanMode360.Quick]: [
|
|
82
|
+
{ value: RvcCleanMode.ModeTag.Vacuum },
|
|
83
|
+
{ value: RvcCleanMode.ModeTag.Day },
|
|
84
|
+
{ value: RvcCleanMode.ModeTag.Quick }
|
|
85
|
+
],
|
|
86
|
+
[RvcCleanMode360.High]: [
|
|
87
|
+
{ value: RvcCleanMode.ModeTag.Vacuum },
|
|
88
|
+
{ value: RvcCleanMode.ModeTag.Day }
|
|
89
|
+
],
|
|
90
|
+
[RvcCleanMode360.MaxBoost]: [
|
|
91
|
+
{ value: RvcCleanMode.ModeTag.Vacuum },
|
|
92
|
+
{ value: RvcCleanMode.ModeTag.Day },
|
|
93
|
+
{ value: RvcCleanMode.ModeTag.DeepClean },
|
|
94
|
+
{ value: RvcCleanMode.ModeTag.Max }
|
|
95
|
+
],
|
|
96
|
+
[RvcCleanMode360.Auto]: [
|
|
97
|
+
{ value: RvcCleanMode.ModeTag.Vacuum },
|
|
98
|
+
{ value: RvcCleanMode.ModeTag.Auto },
|
|
99
|
+
{ value: RvcCleanMode.ModeTag.Day }
|
|
100
|
+
]
|
|
101
|
+
};
|
|
102
|
+
// Create the cluster
|
|
103
|
+
behaviors.require(RvcCleanModeServer360.enable({
|
|
104
|
+
commands: {
|
|
105
|
+
changeToMode: true
|
|
106
|
+
}
|
|
107
|
+
}), {
|
|
108
|
+
// Constant attributes
|
|
109
|
+
supportedModes: labels.map(([mode, label]) => ({
|
|
110
|
+
label,
|
|
111
|
+
mode,
|
|
112
|
+
modeTags: CLEAN_MODE_TAGS[mode]
|
|
113
|
+
})),
|
|
114
|
+
// Variable attributes (with dummy defaults)
|
|
115
|
+
currentMode: RvcCleanMode360.Quiet
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Create the RVC Operational State cluster
|
|
119
|
+
export function createRvcOperationalStateClusterServer({ behaviors }) {
|
|
120
|
+
behaviors.require(RvcOperationalStateServer360.enable({
|
|
121
|
+
events: {
|
|
122
|
+
operationalError: true,
|
|
123
|
+
operationCompletion: true
|
|
124
|
+
}, commands: {
|
|
125
|
+
pause: true,
|
|
126
|
+
resume: true,
|
|
127
|
+
goHome: true
|
|
128
|
+
}
|
|
129
|
+
}), {
|
|
130
|
+
// Constant attributes
|
|
131
|
+
operationalStateList: [
|
|
132
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Stopped },
|
|
133
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Running },
|
|
134
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Paused },
|
|
135
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Error },
|
|
136
|
+
{ operationalStateId: RvcOperationalState.OperationalState.SeekingCharger },
|
|
137
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Charging },
|
|
138
|
+
{ operationalStateId: RvcOperationalState.OperationalState.Docked }
|
|
139
|
+
],
|
|
140
|
+
// Variable attributes (with dummy defaults)
|
|
141
|
+
operationalState: RvcOperationalState.OperationalState.Stopped,
|
|
142
|
+
operationalError: RvcOperationalStateError.toStruct(),
|
|
143
|
+
// Unsupported attributes
|
|
144
|
+
phaseList: null,
|
|
145
|
+
currentPhase: null,
|
|
146
|
+
countdownTime: null
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=endpoint-360-rvc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-360-rvc.js","sourceRoot":"","sources":["../src/endpoint-360-rvc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { PowerSource, RvcOperationalState } from 'matterbridge/matter/clusters';
|
|
2
|
+
import { AnsiLogger } from 'matterbridge/logger';
|
|
3
|
+
import { Config } from './config-types.js';
|
|
4
|
+
import { BatteryPowerSourceOptions, RvcCleanModeOptions } from './endpoint-360-rvc.js';
|
|
5
|
+
import { EndpointBase, EndpointOptionsBase } from './endpoint-base.js';
|
|
6
|
+
import { BehaviorDevice360, EndpointCommands360, RvcCleanMode360, RvcRunMode360 } from './endpoint-360-behavior.js';
|
|
7
|
+
export interface EndpointOptions360 extends EndpointOptionsBase {
|
|
8
|
+
powerSource: BatteryPowerSourceOptions;
|
|
9
|
+
rvcCleanMode: RvcCleanModeOptions;
|
|
10
|
+
}
|
|
11
|
+
export interface UpdatePowerSource360 {
|
|
12
|
+
activeBatChargeFaults: PowerSource.BatChargeFault[];
|
|
13
|
+
activeBatFaults: PowerSource.BatFault[];
|
|
14
|
+
batChargeLevel: PowerSource.BatChargeLevel;
|
|
15
|
+
batChargeState: PowerSource.BatChargeState;
|
|
16
|
+
batPercentRemaining: number;
|
|
17
|
+
status: PowerSource.PowerSourceStatus;
|
|
18
|
+
}
|
|
19
|
+
export interface UpdateRvcOperationalState360 {
|
|
20
|
+
isActive: boolean;
|
|
21
|
+
operationalError: RvcOperationalState.ErrorStateStruct;
|
|
22
|
+
operationalState: RvcOperationalState.OperationalState;
|
|
23
|
+
}
|
|
24
|
+
export declare class Endpoint360 extends EndpointBase {
|
|
25
|
+
readonly options: EndpointOptions360;
|
|
26
|
+
readonly behaviorDevice360: BehaviorDevice360;
|
|
27
|
+
startActive: number;
|
|
28
|
+
constructor(log: AnsiLogger, config: Config, options: EndpointOptions360);
|
|
29
|
+
setCommandHandler360<Command extends keyof EndpointCommands360>(command: Command, handler: EndpointCommands360[Command]): this;
|
|
30
|
+
updatePowerSource(attributes: UpdatePowerSource360): Promise<void>;
|
|
31
|
+
updateRvcRunMode(runMode: RvcRunMode360): Promise<void>;
|
|
32
|
+
updateRvcCleanMode(cleanMode: RvcCleanMode360): Promise<void>;
|
|
33
|
+
updateRvcOperationalState(attributes: UpdateRvcOperationalState360): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=endpoint-360.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-360.d.ts","sourceRoot":"","sources":["../src/endpoint-360.ts"],"names":[],"mappings":"AAUA,OAAO,EAEH,WAAW,EAGX,mBAAmB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAKH,yBAAyB,EACzB,mBAAmB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,YAAY,EACZ,mBAAmB,EAEtB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAEH,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,aAAa,EAChB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC3D,WAAW,EAAK,yBAAyB,CAAC;IAC1C,YAAY,EAAI,mBAAmB,CAAC;CACvC;AAGD,MAAM,WAAW,oBAAoB;IACjC,qBAAqB,EAAG,WAAW,CAAC,cAAc,EAAE,CAAC;IACrD,eAAe,EAAS,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC/C,cAAc,EAAU,WAAW,CAAC,cAAc,CAAC;IACnD,cAAc,EAAU,WAAW,CAAC,cAAc,CAAC;IACnD,mBAAmB,EAAK,MAAM,CAAC;IAC/B,MAAM,EAAkB,WAAW,CAAC,iBAAiB,CAAC;CACzD;AAGD,MAAM,WAAW,4BAA4B;IACzC,QAAQ,EAAgB,OAAO,CAAC;IAChC,gBAAgB,EAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAC7D,gBAAgB,EAAQ,mBAAmB,CAAC,gBAAgB,CAAC;CAChE;AAGD,qBAAa,WAAY,SAAQ,YAAY;IAYrC,QAAQ,CAAC,OAAO,EAAI,kBAAkB;IAT1C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAG9C,WAAW,SAAK;gBAIZ,GAAG,EAAiB,UAAU,EAC9B,MAAM,EAAc,MAAM,EACjB,OAAO,EAAI,kBAAkB;IAkB1C,oBAAoB,CAAC,OAAO,SAAS,MAAM,mBAAmB,EAC1D,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACtC,IAAI;IAOD,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDlE,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7D,yBAAyB,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CA2C3F"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
4
|
+
var useValue = arguments.length > 2;
|
|
5
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
6
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
7
|
+
}
|
|
8
|
+
return useValue ? value : void 0;
|
|
9
|
+
};
|
|
10
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
11
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
12
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
13
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
14
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
15
|
+
var _, done = false;
|
|
16
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
17
|
+
var context = {};
|
|
18
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
19
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
20
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
21
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
22
|
+
if (kind === "accessor") {
|
|
23
|
+
if (result === void 0) continue;
|
|
24
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
25
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
26
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
27
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
28
|
+
}
|
|
29
|
+
else if (_ = accept(result)) {
|
|
30
|
+
if (kind === "field") initializers.unshift(_);
|
|
31
|
+
else descriptor[key] = _;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
35
|
+
done = true;
|
|
36
|
+
};
|
|
37
|
+
import { bridgedNode, powerSource, roboticVacuumCleaner } from 'matterbridge';
|
|
38
|
+
import { PowerSource, RvcCleanMode, RvcRunMode, RvcOperationalState } from 'matterbridge/matter/clusters';
|
|
39
|
+
import { createBatteryPowerSourceClusterServer, createRvcCleanModeClusterServer, createRvcOperationalStateClusterServer, createRvcRunModeClusterServer } from './endpoint-360-rvc.js';
|
|
40
|
+
import { EndpointBase, formatEnumLog } from './endpoint-base.js';
|
|
41
|
+
import { ifValueChanged } from './decorator-changed.js';
|
|
42
|
+
import { formatList, formatSeconds, MS, plural } from './utils.js';
|
|
43
|
+
import { AN, AV, RI } from './logger-options.js';
|
|
44
|
+
import { Behavior360, BehaviorDevice360, RvcCleanMode360, RvcRunMode360 } from './endpoint-360-behavior.js';
|
|
45
|
+
// A Matterbridge endpoint with robot vacuum cleaner clusters
|
|
46
|
+
let Endpoint360 = (() => {
|
|
47
|
+
let _classSuper = EndpointBase;
|
|
48
|
+
let _instanceExtraInitializers = [];
|
|
49
|
+
let _updatePowerSource_decorators;
|
|
50
|
+
let _updateRvcRunMode_decorators;
|
|
51
|
+
let _updateRvcCleanMode_decorators;
|
|
52
|
+
let _updateRvcOperationalState_decorators;
|
|
53
|
+
return class Endpoint360 extends _classSuper {
|
|
54
|
+
static {
|
|
55
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
56
|
+
_updatePowerSource_decorators = [ifValueChanged];
|
|
57
|
+
_updateRvcRunMode_decorators = [ifValueChanged];
|
|
58
|
+
_updateRvcCleanMode_decorators = [ifValueChanged];
|
|
59
|
+
_updateRvcOperationalState_decorators = [ifValueChanged];
|
|
60
|
+
__esDecorate(this, null, _updatePowerSource_decorators, { kind: "method", name: "updatePowerSource", static: false, private: false, access: { has: obj => "updatePowerSource" in obj, get: obj => obj.updatePowerSource }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
61
|
+
__esDecorate(this, null, _updateRvcRunMode_decorators, { kind: "method", name: "updateRvcRunMode", static: false, private: false, access: { has: obj => "updateRvcRunMode" in obj, get: obj => obj.updateRvcRunMode }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
62
|
+
__esDecorate(this, null, _updateRvcCleanMode_decorators, { kind: "method", name: "updateRvcCleanMode", static: false, private: false, access: { has: obj => "updateRvcCleanMode" in obj, get: obj => obj.updateRvcCleanMode }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
63
|
+
__esDecorate(this, null, _updateRvcOperationalState_decorators, { kind: "method", name: "updateRvcOperationalState", static: false, private: false, access: { has: obj => "updateRvcOperationalState" in obj, get: obj => obj.updateRvcOperationalState }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
64
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
|
+
}
|
|
66
|
+
options = __runInitializers(this, _instanceExtraInitializers);
|
|
67
|
+
// Command handlers
|
|
68
|
+
behaviorDevice360;
|
|
69
|
+
// Start time of the most recent activity
|
|
70
|
+
startActive = 0;
|
|
71
|
+
// Construct a new endpoint
|
|
72
|
+
constructor(log, config, options) {
|
|
73
|
+
const definition = [roboticVacuumCleaner, bridgedNode, powerSource];
|
|
74
|
+
super(log, config, options, definition);
|
|
75
|
+
this.options = options;
|
|
76
|
+
// Create the device-specific clusters
|
|
77
|
+
createBatteryPowerSourceClusterServer(this, options.powerSource);
|
|
78
|
+
createRvcRunModeClusterServer(this);
|
|
79
|
+
createRvcCleanModeClusterServer(this, options.rvcCleanMode);
|
|
80
|
+
createRvcOperationalStateClusterServer(this);
|
|
81
|
+
// Add a command handler behavior
|
|
82
|
+
this.behaviorDevice360 = new BehaviorDevice360(this.log);
|
|
83
|
+
this.behaviors.require(Behavior360, { device: this.behaviorDevice360 });
|
|
84
|
+
}
|
|
85
|
+
// Set a command handler
|
|
86
|
+
setCommandHandler360(command, handler) {
|
|
87
|
+
this.behaviorDevice360.setCommandHandler(command, handler);
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
// Update the Power Source cluster attributes when required
|
|
91
|
+
async updatePowerSource(attributes) {
|
|
92
|
+
const { status, batPercentRemaining, batChargeLevel, batChargeState, activeBatChargeFaults, activeBatFaults } = attributes;
|
|
93
|
+
const clusterId = PowerSource.Cluster.id;
|
|
94
|
+
const logBattery = [
|
|
95
|
+
`${AV}${batPercentRemaining / 2}${RI}%`,
|
|
96
|
+
formatEnumLog(PowerSource.BatChargeLevel, batChargeLevel),
|
|
97
|
+
formatEnumLog(PowerSource.PowerSourceStatus, status),
|
|
98
|
+
formatEnumLog(PowerSource.BatChargeState, batChargeState)
|
|
99
|
+
];
|
|
100
|
+
if (activeBatFaults.length) {
|
|
101
|
+
const faults = activeBatFaults.map(v => formatEnumLog(PowerSource.BatFault, v));
|
|
102
|
+
logBattery.push(`${AN}${plural(faults.length, 'battery fault', false)}${RI} [${formatList(faults)}${RI}]`);
|
|
103
|
+
}
|
|
104
|
+
if (activeBatChargeFaults.length) {
|
|
105
|
+
const faults = activeBatChargeFaults.map(v => formatEnumLog(PowerSource.BatChargeFault, v));
|
|
106
|
+
logBattery.push(`${AN}${plural(faults.length, 'charge fault', false)}${RI} [${formatList(faults)}${RI}]`);
|
|
107
|
+
}
|
|
108
|
+
this.log.info(`${AN}Battery status${RI}: ${formatList(logBattery)}`);
|
|
109
|
+
await this.updateAttribute(clusterId, 'status', status, this.log);
|
|
110
|
+
await this.updateAttribute(clusterId, 'batPercentRemaining', batPercentRemaining, this.log);
|
|
111
|
+
await this.updateAttribute(clusterId, 'batChargeLevel', batChargeLevel, this.log);
|
|
112
|
+
await this.updateAttribute(clusterId, 'batChargeState', batChargeState, this.log);
|
|
113
|
+
await this.updateAttribute(clusterId, 'activeBatChargeFaults', activeBatChargeFaults, this.log);
|
|
114
|
+
await this.updateAttribute(clusterId, 'activeBatFaults', activeBatFaults, this.log);
|
|
115
|
+
// Trigger BatFaultChange event if activeBatFaults has changed
|
|
116
|
+
const prevActiveBatFaults = (this.changed.prevValues.get('activeBatFaults') ?? []);
|
|
117
|
+
if (this.changed.isChanged('activeBatFaults', activeBatFaults)) {
|
|
118
|
+
const payload = {
|
|
119
|
+
current: activeBatFaults,
|
|
120
|
+
previous: prevActiveBatFaults
|
|
121
|
+
};
|
|
122
|
+
this.log.info(`${AN}Battery Fault Change event${RI}`);
|
|
123
|
+
await this.triggerEvent(clusterId, 'batFaultChange', payload, this.log);
|
|
124
|
+
}
|
|
125
|
+
// Trigger BatChargeFaultChange event if activeBatChargeFaults has changed
|
|
126
|
+
const prevActiveBatChargeFaults = (this.changed.prevValues.get('activeBatChargeFaults') ?? []);
|
|
127
|
+
if (this.changed.isChanged('activeBatChargeFaults', activeBatChargeFaults)) {
|
|
128
|
+
const payload = {
|
|
129
|
+
current: activeBatChargeFaults,
|
|
130
|
+
previous: prevActiveBatChargeFaults
|
|
131
|
+
};
|
|
132
|
+
this.log.info(`${AN}Battery Charge Fault Change event${RI}`);
|
|
133
|
+
await this.triggerEvent(clusterId, 'batChargeFaultChange', payload, this.log);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Update the RVC Run Mode cluster attributes when required
|
|
137
|
+
async updateRvcRunMode(runMode) {
|
|
138
|
+
const clusterId = RvcRunMode.Cluster.id;
|
|
139
|
+
this.log.info(`${AN}RVC Run Mode${RI}: ${formatEnumLog(RvcRunMode360, runMode)}`);
|
|
140
|
+
await this.updateAttribute(clusterId, 'currentMode', runMode, this.log);
|
|
141
|
+
}
|
|
142
|
+
// Update the RVC Clean Mode cluster attributes when required
|
|
143
|
+
async updateRvcCleanMode(cleanMode) {
|
|
144
|
+
const clusterId = RvcCleanMode.Cluster.id;
|
|
145
|
+
this.log.info(`${AN}RVC Clean Mode${RI}: ${formatEnumLog(RvcCleanMode360, cleanMode)}`);
|
|
146
|
+
await this.updateAttribute(clusterId, 'currentMode', cleanMode, this.log);
|
|
147
|
+
}
|
|
148
|
+
// Update the RVC Operational State cluster attributes when required
|
|
149
|
+
async updateRvcOperationalState(attributes) {
|
|
150
|
+
const { operationalState, operationalError, isActive } = attributes;
|
|
151
|
+
const clusterId = RvcOperationalState.Cluster.id;
|
|
152
|
+
this.log.info(`${AN}RVC Operational State${RI}: ${formatEnumLog(RvcOperationalState.OperationalState, operationalState)}`);
|
|
153
|
+
await this.updateAttribute(clusterId, 'operationalState', operationalState, this.log);
|
|
154
|
+
await this.updateAttribute(clusterId, 'operationalError', operationalError, this.log);
|
|
155
|
+
// Trigger OperationCompletion event when changing from active to idle
|
|
156
|
+
const { errorStateId, errorStateLabel, errorStateDetails } = operationalError;
|
|
157
|
+
const isError = errorStateId !== RvcOperationalState.ErrorState.NoError;
|
|
158
|
+
if (this.changed.isChanged('isActive', isActive)) {
|
|
159
|
+
if (isActive) {
|
|
160
|
+
this.log.info(`(${AN}RVC Operation Started${RI})`);
|
|
161
|
+
this.startActive = Date.now();
|
|
162
|
+
}
|
|
163
|
+
else if (this.startActive) {
|
|
164
|
+
const totalOperationalTime = Math.round((Date.now() - this.startActive) / MS);
|
|
165
|
+
this.log.info(`${AN}RVC Operation Completion event${RI} in ${AV}${formatSeconds(totalOperationalTime)}${RI}`);
|
|
166
|
+
const payload = {
|
|
167
|
+
completionErrorCode: errorStateId,
|
|
168
|
+
totalOperationalTime
|
|
169
|
+
};
|
|
170
|
+
await this.triggerEvent(clusterId, 'operationCompletion', payload, this.log);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Trigger OperationalError event if there is a new error
|
|
174
|
+
if (this.changed.isChanged('operationalError', operationalError)) {
|
|
175
|
+
if (isError) {
|
|
176
|
+
const errorName = RvcOperationalState.ErrorState[errorStateId];
|
|
177
|
+
let logMessage = `${AN}RVC Operational Error event${RI}:`
|
|
178
|
+
+ ` ${errorName ? `${AV}${errorName}${RI} (${AV}${errorStateId}${RI})` : `${AV}${errorStateId}${RI}`}`;
|
|
179
|
+
if (errorStateLabel)
|
|
180
|
+
logMessage += ` [${AV}${errorStateLabel}${RI}]`;
|
|
181
|
+
if (errorStateDetails)
|
|
182
|
+
logMessage += `: ${AV}${errorStateDetails}${RI}`;
|
|
183
|
+
this.log.info(logMessage);
|
|
184
|
+
const payload = {
|
|
185
|
+
errorState: operationalError
|
|
186
|
+
};
|
|
187
|
+
await this.triggerEvent(clusterId, 'operationalError', payload, this.log);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.log.info(`${AN}RVC Operational Error${RI}: ${AV}Error cleared${RI}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
})();
|
|
196
|
+
export { Endpoint360 };
|
|
197
|
+
//# sourceMappingURL=endpoint-360.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-360.js","sourceRoot":"","sources":["../src/endpoint-360.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Endpoint } from 'matterbridge/matter';
|
|
2
|
+
interface FanRock {
|
|
3
|
+
rockLeftRight?: boolean;
|
|
4
|
+
rockUpDown?: boolean;
|
|
5
|
+
rockRound?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface FanWind {
|
|
8
|
+
sleepWind?: boolean;
|
|
9
|
+
naturalWind?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface FanControlOptions {
|
|
12
|
+
rockSupport?: FanRock;
|
|
13
|
+
windSupport?: FanWind;
|
|
14
|
+
directionSupport: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface FilterMonitoringOptions {
|
|
17
|
+
filterPartNumbers?: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function createOnOffClusterServer({ behaviors }: Endpoint): void;
|
|
20
|
+
export declare function createFanControlClusterServer({ behaviors }: Endpoint, options: FanControlOptions): void;
|
|
21
|
+
export declare function createHepaFilterMonitoringClusterServer({ behaviors }: Endpoint, options: FilterMonitoringOptions): void;
|
|
22
|
+
export declare function createActivatedCarbonFilterMonitoringClusterServer({ behaviors }: Endpoint, options: FilterMonitoringOptions): void;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=endpoint-air-purifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-air-purifier.d.ts","sourceRoot":"","sources":["../src/endpoint-air-purifier.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM/C,UAAU,OAAO;IACb,aAAa,CAAC,EAAU,OAAO,CAAC;IAChC,UAAU,CAAC,EAAa,OAAO,CAAC;IAChC,SAAS,CAAC,EAAc,OAAO,CAAC;CACnC;AACD,UAAU,OAAO;IACb,SAAS,CAAC,EAAc,OAAO,CAAC;IAChC,WAAW,CAAC,EAAY,OAAO,CAAC;CACnC;AACD,MAAM,WAAW,iBAAiB;IAC9B,WAAW,CAAC,EAAY,OAAO,CAAC;IAChC,WAAW,CAAC,EAAY,OAAO,CAAC;IAChC,gBAAgB,EAAQ,OAAO,CAAC;CACnC;AACD,MAAM,WAAW,uBAAuB;IACpC,iBAAiB,CAAC,EAAM,MAAM,EAAE,CAAC;CACpC;AASD,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,GAAG,IAAI,CAKtE;AAGD,wBAAgB,6BAA6B,CACzC,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GACpD,IAAI,CA4BN;AAGD,wBAAgB,uCAAuC,CACnD,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAC1D,IAAI,CAaN;AAGD,wBAAgB,kDAAkD,CAC9D,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAC1D,IAAI,CAaN"}
|