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 @@
|
|
|
1
|
+
{"version":3,"file":"periodic.d.ts","sourceRoot":"","sources":["../src/periodic.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,oBAAY,cAAc;IAAG,SAAS,IAAA;IAAE,MAAM,IAAA;IAAE,IAAI,IAAA;CAAE;AAGtD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAQ,MAAM,CAAC;IACnB,QAAQ,EAAI,MAAM,CAAC;IACnB,QAAQ,EAAI,MAAM,CAAC;IACnB,IAAI,EAAQ,MAAM,YAAY,CAAC;IAC/B,QAAQ,EAAI,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAChD;AAGD,qBAAa,QAAQ;IAoBb,QAAQ,CAAC,GAAG,EAAQ,UAAU;IAC9B,QAAQ,CAAC,MAAM,EAAK,cAAc;IAlBtC,MAAM,iBAA0B;IAGhC,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,aAAa,CAAC,CAAkB;IAGxC,OAAO,CAAC,OAAO,CAAQ;IAGvB,OAAO,CAAC,gBAAgB,CAAK;IAG7B,OAAO,CAAC,kBAAkB,CAAgB;gBAI7B,GAAG,EAAQ,UAAU,EACrB,MAAM,EAAK,cAAc;IAOhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,EAAE,IAAI,IAAI;IAaV,OAAO,CAAC,SAAS;YAQH,WAAW;YAuBX,eAAe;CAkBhC"}
|
package/dist/periodic.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { setTimeout } from 'node:timers/promises';
|
|
4
|
+
import { logError } from './utils.js';
|
|
5
|
+
// Status of the operation
|
|
6
|
+
export var PeriodicStatus;
|
|
7
|
+
(function (PeriodicStatus) {
|
|
8
|
+
PeriodicStatus[PeriodicStatus["Stopped"] = 0] = "Stopped";
|
|
9
|
+
PeriodicStatus[PeriodicStatus["Down"] = 1] = "Down";
|
|
10
|
+
PeriodicStatus[PeriodicStatus["Up"] = 2] = "Up";
|
|
11
|
+
})(PeriodicStatus || (PeriodicStatus = {}));
|
|
12
|
+
;
|
|
13
|
+
// Perform an operation periodically with watchdog timeout
|
|
14
|
+
export class Periodic {
|
|
15
|
+
log;
|
|
16
|
+
config;
|
|
17
|
+
// Is the watchdog being reset before its timeout
|
|
18
|
+
status = PeriodicStatus.Stopped;
|
|
19
|
+
// Abort signal used to cancel timers
|
|
20
|
+
abortInterval;
|
|
21
|
+
abortWatchdog;
|
|
22
|
+
// Is this periodic operation enabled
|
|
23
|
+
enabled = true;
|
|
24
|
+
// Timing of the next operation
|
|
25
|
+
lastActivityTime = 0;
|
|
26
|
+
// The periodic operation loop
|
|
27
|
+
runPeriodicPromise;
|
|
28
|
+
// Start a new periodic operation
|
|
29
|
+
constructor(log, config) {
|
|
30
|
+
this.log = log;
|
|
31
|
+
this.config = config;
|
|
32
|
+
void this.restartWatchdog();
|
|
33
|
+
this.runPeriodicPromise = this.runPeriodic();
|
|
34
|
+
}
|
|
35
|
+
// Stop the periodic operation, waiting for any in-progress operation
|
|
36
|
+
async stop() {
|
|
37
|
+
// Terminate the periodic operation and wait for it to complete
|
|
38
|
+
this.enabled = false;
|
|
39
|
+
this.abortInterval?.abort();
|
|
40
|
+
await this.runPeriodicPromise;
|
|
41
|
+
// Stop the watchdog and set the status to 'Stopped'
|
|
42
|
+
this.abortWatchdog?.abort();
|
|
43
|
+
this.setStatus(PeriodicStatus.Stopped);
|
|
44
|
+
}
|
|
45
|
+
// Reset the watchdog and reschedule the next operation
|
|
46
|
+
up() {
|
|
47
|
+
// Restart the watchdog timer
|
|
48
|
+
void this.restartWatchdog();
|
|
49
|
+
// Reschedule the next operation
|
|
50
|
+
this.lastActivityTime = Date.now();
|
|
51
|
+
this.abortInterval?.abort();
|
|
52
|
+
// Ensure that the status is 'Up'
|
|
53
|
+
this.setStatus(PeriodicStatus.Up);
|
|
54
|
+
}
|
|
55
|
+
// Set the status
|
|
56
|
+
setStatus(status) {
|
|
57
|
+
if (this.status !== status) {
|
|
58
|
+
this.status = status;
|
|
59
|
+
this.config.onStatus(this.status);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Perform the operation periodically until stopped
|
|
63
|
+
async runPeriodic() {
|
|
64
|
+
while (this.enabled) {
|
|
65
|
+
try {
|
|
66
|
+
// Wait until it is time for the next operation
|
|
67
|
+
this.abortInterval = new AbortController();
|
|
68
|
+
const { signal } = this.abortInterval;
|
|
69
|
+
const timeUntilNextOp = this.lastActivityTime + this.config.interval - Date.now();
|
|
70
|
+
await setTimeout(timeUntilNextOp, undefined, { signal });
|
|
71
|
+
// Attempt the operation
|
|
72
|
+
await this.config.onOp();
|
|
73
|
+
// Update the time of the last activity (but leave the watchdog)
|
|
74
|
+
this.lastActivityTime = Date.now();
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
if (!(err instanceof Error && err.name === 'AbortError')) {
|
|
78
|
+
logError(this.log, this.config.name, err);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// (Re)start the watchdog timer
|
|
84
|
+
async restartWatchdog() {
|
|
85
|
+
try {
|
|
86
|
+
// Abort any existing watchdog
|
|
87
|
+
this.abortWatchdog?.abort();
|
|
88
|
+
// Start a new watchdog
|
|
89
|
+
this.abortWatchdog = new AbortController();
|
|
90
|
+
const { signal } = this.abortWatchdog;
|
|
91
|
+
await setTimeout(this.config.watchdog, undefined, { signal });
|
|
92
|
+
// The timeout has occurred, so change the status to 'Down'
|
|
93
|
+
this.setStatus(PeriodicStatus.Down);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (!(err instanceof Error && err.name === 'AbortError')) {
|
|
97
|
+
logError(this.log, this.config.name, err);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=periodic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"periodic.js","sourceRoot":"","sources":["../src/periodic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Matterbridge, MatterbridgeDynamicPlatform, PlatformConfig } from 'matterbridge';
|
|
2
|
+
import { AnsiLogger, LogLevel } from 'matterbridge/logger';
|
|
3
|
+
import NodePersist from 'node-persist';
|
|
4
|
+
import { Config } from './config-types.js';
|
|
5
|
+
import { DysonDevice } from './dyson-device-base.js';
|
|
6
|
+
export declare class PlatformDyson extends MatterbridgeDynamicPlatform {
|
|
7
|
+
config: Config & PlatformConfig;
|
|
8
|
+
persist: NodePersist.LocalStorage;
|
|
9
|
+
devices: DysonDevice[];
|
|
10
|
+
constructor(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig);
|
|
11
|
+
onConfigChanged(config: PlatformConfig): Promise<void>;
|
|
12
|
+
onChangeLoggerLevel(logLevel: LogLevel): Promise<void>;
|
|
13
|
+
onStart(reason?: string): Promise<void>;
|
|
14
|
+
onConfigure(): Promise<void>;
|
|
15
|
+
onShutdown(reason?: string): Promise<void>;
|
|
16
|
+
get devicesDescription(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,YAAY,EACZ,2BAA2B,EAC3B,cAAc,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAS,QAAQ,EAAO,MAAM,qBAAqB,CAAC;AACvE,OAAO,WAAW,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAKrD,qBAAa,aAAc,SAAQ,2BAA2B;IAGlD,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;IAGxC,OAAO,EAAS,WAAW,CAAC,YAAY,CAAC;IAGzC,OAAO,EAAS,WAAW,EAAE,CAAM;gBAGvB,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAgBhE,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDvC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzD,IAAI,kBAAkB,IAAI,MAAM,CAE/B;CACJ"}
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { MatterbridgeDynamicPlatform } from 'matterbridge';
|
|
4
|
+
import { GREEN, RED } from 'matterbridge/logger';
|
|
5
|
+
import NodePersist from 'node-persist';
|
|
6
|
+
import Path from 'path';
|
|
7
|
+
import { checkDependencyVersions } from './check-versions.js';
|
|
8
|
+
import { checkConfiguration } from './check-configuration.js';
|
|
9
|
+
import { FilterLogger } from './logger-filter.js';
|
|
10
|
+
import { RI } from './logger-options.js';
|
|
11
|
+
import { PLUGIN_NAME } from './settings.js';
|
|
12
|
+
import { getDeviceConfigMqtt } from './dyson-mqtt-config.js';
|
|
13
|
+
import { createDysonDevice } from './dyson-device.js';
|
|
14
|
+
import { formatList, logError, plural } from './utils.js';
|
|
15
|
+
import { PrefixLogger } from './logger-prefix.js';
|
|
16
|
+
// A Dyson devices platform
|
|
17
|
+
export class PlatformDyson extends MatterbridgeDynamicPlatform {
|
|
18
|
+
// Persistent storage
|
|
19
|
+
persist;
|
|
20
|
+
// Active devices
|
|
21
|
+
devices = [];
|
|
22
|
+
// Constructor
|
|
23
|
+
constructor(matterbridge, log, config) {
|
|
24
|
+
const filterLog = new FilterLogger(log);
|
|
25
|
+
filterLog.info(`Initialising platform ${PLUGIN_NAME}`);
|
|
26
|
+
super(matterbridge, filterLog, config);
|
|
27
|
+
// Check the dependencies and configuration
|
|
28
|
+
checkDependencyVersions(this);
|
|
29
|
+
checkConfiguration(this.log, config);
|
|
30
|
+
filterLog.configure(config.debugFeatures);
|
|
31
|
+
// Create storage for this plugin (initialised in onStart)
|
|
32
|
+
const persistDir = Path.join(this.matterbridge.matterbridgePluginDirectory, PLUGIN_NAME, 'persist');
|
|
33
|
+
this.persist = NodePersist.create({ dir: persistDir });
|
|
34
|
+
}
|
|
35
|
+
// Check the configuration after it has been updated
|
|
36
|
+
async onConfigChanged(config) {
|
|
37
|
+
this.log.info(`Changed ${PLUGIN_NAME} configuration`);
|
|
38
|
+
checkConfiguration(this.log, config);
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
// Set the logger level
|
|
42
|
+
async onChangeLoggerLevel(logLevel) {
|
|
43
|
+
this.log.info(`Change ${PLUGIN_NAME} log level: ${logLevel} (was ${this.log.logLevel})`);
|
|
44
|
+
this.log.logLevel = logLevel;
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
}
|
|
47
|
+
// Create the devices and clusters when Matterbridge loads the plugin
|
|
48
|
+
async onStart(reason) {
|
|
49
|
+
this.log.info(`Starting ${PLUGIN_NAME}: ${reason ?? 'none'}`);
|
|
50
|
+
// Wait for the platform to start
|
|
51
|
+
await this.ready;
|
|
52
|
+
await this.clearSelect();
|
|
53
|
+
// Initialise persistent storage
|
|
54
|
+
await this.persist.init();
|
|
55
|
+
// Create and register Matter devices for each Dyson device
|
|
56
|
+
await Promise.all(this.config.devices.map(async (deviceConfigAny) => {
|
|
57
|
+
try {
|
|
58
|
+
// Check whether the device should be created
|
|
59
|
+
const deviceConfig = getDeviceConfigMqtt(deviceConfigAny);
|
|
60
|
+
const { username: serialNumber, name: deviceName } = deviceConfig;
|
|
61
|
+
const deviceLog = new PrefixLogger(this.log, deviceName);
|
|
62
|
+
const device = await createDysonDevice(deviceLog, this.config, deviceConfig);
|
|
63
|
+
// Validate the device as a whole
|
|
64
|
+
this.setSelectDevice(serialNumber, deviceName, undefined, 'hub');
|
|
65
|
+
const validatedDevice = this.validateDevice(serialNumber);
|
|
66
|
+
// Validate the device's main functions
|
|
67
|
+
const entities = device.getEntities();
|
|
68
|
+
const entityResults = [];
|
|
69
|
+
const validatedEntities = entities.filter(({ name, description }) => {
|
|
70
|
+
this.setSelectDeviceEntity(serialNumber, name, description, 'component');
|
|
71
|
+
const result = this.validateEntity(serialNumber, name);
|
|
72
|
+
entityResults.push(result ? `${GREEN}${name} ✔${RI}` : `${RED}${name} ✘${RI}`);
|
|
73
|
+
return result;
|
|
74
|
+
}).map(({ name }) => name);
|
|
75
|
+
// Create and register the device's endpoints
|
|
76
|
+
const endpoints = validatedDevice ? device.getEndpoints(validatedEntities) : [];
|
|
77
|
+
if (!endpoints.length) {
|
|
78
|
+
const lists = !validatedDevice ? ['blackList', 'whiteList']
|
|
79
|
+
: ['entityBlackList', 'entityWhiteList', 'deviceEntityBlackList'];
|
|
80
|
+
const filtered = lists.filter(list => this.config[list].length);
|
|
81
|
+
deviceLog.info(`Device disabled via ${formatList(filtered)}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
let description = `Registering ${plural(endpoints.length, 'device')}`;
|
|
85
|
+
if (entities.length)
|
|
86
|
+
description += ` with: ${formatList(entityResults)}`;
|
|
87
|
+
deviceLog.info(description);
|
|
88
|
+
this.devices.push(device);
|
|
89
|
+
await Promise.all(endpoints.map(e => this.registerDevice(e)));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
logError(this.log, 'Creating device', err);
|
|
94
|
+
}
|
|
95
|
+
}));
|
|
96
|
+
this.log.info(`Registered ${this.devicesDescription}`);
|
|
97
|
+
}
|
|
98
|
+
// Configure and initialise the devices when the platform is commissioned
|
|
99
|
+
async onConfigure() {
|
|
100
|
+
this.log.info(`Configuring ${PLUGIN_NAME}`);
|
|
101
|
+
await super.onConfigure();
|
|
102
|
+
// Configure and start polling the devices
|
|
103
|
+
await Promise.all(this.devices.map(async (device) => {
|
|
104
|
+
try {
|
|
105
|
+
await device.start();
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
logError(device.log, 'Starting device', err);
|
|
109
|
+
}
|
|
110
|
+
}));
|
|
111
|
+
this.log.info(`Configured ${this.devicesDescription}`);
|
|
112
|
+
}
|
|
113
|
+
// Cleanup resources when Matterbridge is shutting down
|
|
114
|
+
async onShutdown(reason) {
|
|
115
|
+
this.log.info(`Shutting down ${PLUGIN_NAME}: ${reason ?? 'none'}`);
|
|
116
|
+
await super.onShutdown(reason);
|
|
117
|
+
// Stop polling the devices
|
|
118
|
+
await Promise.all(this.devices.map(async (device) => {
|
|
119
|
+
try {
|
|
120
|
+
await device.stop();
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
logError(device.log, 'Stopping device', err);
|
|
124
|
+
}
|
|
125
|
+
}));
|
|
126
|
+
this.log.info(`Stopped ${this.devicesDescription}`);
|
|
127
|
+
// Remove the devices from Matterbridge during development
|
|
128
|
+
if (this.config.unregisterOnShutdown) {
|
|
129
|
+
await this.unregisterAllDevices();
|
|
130
|
+
this.log.info(`Unregistered ${this.devicesDescription}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Description of the registered device(s)
|
|
134
|
+
get devicesDescription() {
|
|
135
|
+
return plural(this.devices.length, 'Dyson device');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Config } from './config-types.js';
|
|
2
|
+
export declare const ENGINES: Record<string, string>;
|
|
3
|
+
export declare const PLUGIN_NAME: string;
|
|
4
|
+
export declare const PLATFORM_NAME: string;
|
|
5
|
+
export declare const PLUGIN_VERSION: string;
|
|
6
|
+
export declare const PLUGIN_URL: string;
|
|
7
|
+
export declare const DEFAULT_CONFIG: Partial<Config>;
|
|
8
|
+
export declare const VENDOR_NAME = "Dyson";
|
|
9
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAc3C,eAAO,MAAM,OAAO,wBAAyB,CAAC;AAC9C,eAAO,MAAM,WAAW,QAAkB,CAAC;AAC3C,eAAO,MAAM,aAAa,QAAuB,CAAC;AAClD,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAAuB,CAAC;AAG/C,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAU1C,CAAC;AAGF,eAAO,MAAM,WAAW,UAAU,CAAC"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
const PACKAGE_JSON = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
7
|
+
const PACKAGE = JSON.parse(readFileSync(PACKAGE_JSON, 'utf-8'));
|
|
8
|
+
// Platform identifiers
|
|
9
|
+
export const ENGINES = PACKAGE.engines;
|
|
10
|
+
export const PLUGIN_NAME = PACKAGE.name;
|
|
11
|
+
export const PLATFORM_NAME = PACKAGE.displayName;
|
|
12
|
+
export const PLUGIN_VERSION = PACKAGE.version;
|
|
13
|
+
export const PLUGIN_URL = PACKAGE.homepage;
|
|
14
|
+
// Default configuration options
|
|
15
|
+
export const DEFAULT_CONFIG = {
|
|
16
|
+
whiteList: [],
|
|
17
|
+
blackList: [],
|
|
18
|
+
entityWhiteList: [],
|
|
19
|
+
entityBlackList: ['Composed Air Purifier', 'Humidity Sensor', 'Temperature Sensor'],
|
|
20
|
+
deviceEntityBlackList: {},
|
|
21
|
+
wildcardTopic: true,
|
|
22
|
+
debug: false,
|
|
23
|
+
debugFeatures: [],
|
|
24
|
+
unregisterOnShutdown: false
|
|
25
|
+
};
|
|
26
|
+
// Vendor name
|
|
27
|
+
export const VENDOR_NAME = 'Dyson';
|
|
28
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAWrC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACzF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAgB,CAAC;AAE/E,uBAAuB;AACvB,MAAM,CAAC,MAAM,OAAO,GAAU,OAAO,CAAC,OAAO,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAM,OAAO,CAAC,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAI,OAAO,CAAC,WAAW,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAO,OAAO,CAAC,QAAQ,CAAC;AAE/C,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC3C,SAAS,EAAe,EAAE;IAC1B,SAAS,EAAe,EAAE;IAC1B,eAAe,EAAS,EAAE;IAC1B,eAAe,EAAS,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;IAC1F,qBAAqB,EAAG,EAAE;IAC1B,aAAa,EAAW,IAAI;IAC5B,KAAK,EAAmB,KAAK;IAC7B,aAAa,EAAW,EAAE;IAC1B,oBAAoB,EAAI,KAAK;CAChC,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module was automatically generated by `ts-interface-builder`
|
|
3
|
+
*/
|
|
4
|
+
import * as t from "ts-interface-checker";
|
|
5
|
+
export declare const DeviceConfigBase: t.TIface;
|
|
6
|
+
export declare const DeviceConfigWiFi: t.TIface;
|
|
7
|
+
export declare const DeviceConfigMqtt: t.TIface;
|
|
8
|
+
export declare const DeviceConfigIoT: t.TIface;
|
|
9
|
+
export declare const DeviceConfig: t.TUnion;
|
|
10
|
+
export declare const DeviceConfigAny: t.TUnion;
|
|
11
|
+
export declare const EntityName: t.TUnion;
|
|
12
|
+
export declare const DebugFeatures: t.TUnion;
|
|
13
|
+
export declare const Config: t.TIface;
|
|
14
|
+
declare const exportedTypeSuite: t.ITypeSuite;
|
|
15
|
+
export default exportedTypeSuite;
|
|
16
|
+
//# sourceMappingURL=config-types-ti.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types-ti.d.ts","sourceRoot":"","sources":["../../src/ti/config-types-ti.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAG1C,eAAO,MAAM,gBAAgB,UAE3B,CAAC;AAEH,eAAO,MAAM,gBAAgB,UAK3B,CAAC;AAEH,eAAO,MAAM,gBAAgB,UAM3B,CAAC;AAEH,eAAO,MAAM,eAAe,UAS1B,CAAC;AAEH,eAAO,MAAM,YAAY,UAAiD,CAAC;AAE3E,eAAO,MAAM,eAAe,UAA8C,CAAC;AAE3E,eAAO,MAAM,UAAU,UAA0K,CAAC;AAElM,eAAO,MAAM,aAAa,UAAsJ,CAAC;AAEjL,eAAO,MAAM,MAAM,UAgBjB,CAAC;AAEH,QAAA,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAU1B,CAAC;AACF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module was automatically generated by `ts-interface-builder`
|
|
3
|
+
*/
|
|
4
|
+
import * as t from "ts-interface-checker";
|
|
5
|
+
// tslint:disable:object-literal-key-quotes
|
|
6
|
+
export const DeviceConfigBase = t.iface([], {
|
|
7
|
+
"name": "string",
|
|
8
|
+
});
|
|
9
|
+
export const DeviceConfigWiFi = t.iface(["DeviceConfigBase"], {
|
|
10
|
+
"host": "string",
|
|
11
|
+
"port": "number",
|
|
12
|
+
"wifi_ssid": "string",
|
|
13
|
+
"wifi_password": "string",
|
|
14
|
+
});
|
|
15
|
+
export const DeviceConfigMqtt = t.iface(["DeviceConfigBase"], {
|
|
16
|
+
"host": "string",
|
|
17
|
+
"port": "number",
|
|
18
|
+
"username": "string",
|
|
19
|
+
"password": "string",
|
|
20
|
+
"root_topic": "string",
|
|
21
|
+
});
|
|
22
|
+
export const DeviceConfigIoT = t.iface(["DeviceConfigBase"], {
|
|
23
|
+
"endpoint": "string",
|
|
24
|
+
"client_id": "string",
|
|
25
|
+
"custom_authorizer_name": "string",
|
|
26
|
+
"token_key": "string",
|
|
27
|
+
"token_signature": "string",
|
|
28
|
+
"token_value": "string",
|
|
29
|
+
"username": "string",
|
|
30
|
+
"root_topic": "string",
|
|
31
|
+
});
|
|
32
|
+
export const DeviceConfig = t.union("DeviceConfigMqtt", "DeviceConfigIoT");
|
|
33
|
+
export const DeviceConfigAny = t.union("DeviceConfig", "DeviceConfigWiFi");
|
|
34
|
+
export const EntityName = t.union(t.lit('Air Purifier'), t.lit('Air Quality Sensor'), t.lit('Composed Air Purifier'), t.lit('Humidity Sensor'), t.lit('Temperature Sensor'), t.lit('Thermostat'));
|
|
35
|
+
export const DebugFeatures = t.union(t.lit('Log Endpoint Debug'), t.lit('Log MQTT Client'), t.lit('Log MQTT Payloads'), t.lit('Log Serial Numbers'), t.lit('Log Debug as Info'));
|
|
36
|
+
export const Config = t.iface([], {
|
|
37
|
+
"name": "string",
|
|
38
|
+
"type": "string",
|
|
39
|
+
"version": "string",
|
|
40
|
+
"whiteList": t.array("string"),
|
|
41
|
+
"blackList": t.array("string"),
|
|
42
|
+
"entityWhiteList": t.array("EntityName"),
|
|
43
|
+
"entityBlackList": t.array("EntityName"),
|
|
44
|
+
"deviceEntityBlackList": t.iface([], {
|
|
45
|
+
[t.indexKey]: t.array("EntityName"),
|
|
46
|
+
}),
|
|
47
|
+
"devices": t.array("DeviceConfigAny"),
|
|
48
|
+
"wildcardTopic": "boolean",
|
|
49
|
+
"debug": "boolean",
|
|
50
|
+
"debugFeatures": t.array("DebugFeatures"),
|
|
51
|
+
"unregisterOnShutdown": "boolean",
|
|
52
|
+
});
|
|
53
|
+
const exportedTypeSuite = {
|
|
54
|
+
DeviceConfigBase,
|
|
55
|
+
DeviceConfigWiFi,
|
|
56
|
+
DeviceConfigMqtt,
|
|
57
|
+
DeviceConfigIoT,
|
|
58
|
+
DeviceConfig,
|
|
59
|
+
DeviceConfigAny,
|
|
60
|
+
EntityName,
|
|
61
|
+
DebugFeatures,
|
|
62
|
+
Config,
|
|
63
|
+
};
|
|
64
|
+
export default exportedTypeSuite;
|
|
65
|
+
//# sourceMappingURL=config-types-ti.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types-ti.js","sourceRoot":"","sources":["../../src/ti/config-types-ti.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CheckerT, ICheckerSuite, ITypeSuite, TType } from 'ts-interface-checker';
|
|
2
|
+
import { DeviceConfigBase, DeviceConfigWiFi, DeviceConfigMqtt, DeviceConfigIoT, DeviceConfig, DeviceConfigAny, EntityName, DebugFeatures, Config } from '../config-types.js';
|
|
3
|
+
export interface TypeMap {
|
|
4
|
+
DeviceConfigBase: DeviceConfigBase;
|
|
5
|
+
DeviceConfigWiFi: DeviceConfigWiFi;
|
|
6
|
+
DeviceConfigMqtt: DeviceConfigMqtt;
|
|
7
|
+
DeviceConfigIoT: DeviceConfigIoT;
|
|
8
|
+
DeviceConfig: DeviceConfig;
|
|
9
|
+
DeviceConfigAny: DeviceConfigAny;
|
|
10
|
+
EntityName: EntityName;
|
|
11
|
+
DebugFeatures: DebugFeatures;
|
|
12
|
+
Config: Config;
|
|
13
|
+
}
|
|
14
|
+
export declare const typeSuite: ITypeSuite & {
|
|
15
|
+
DeviceConfigBase: TType;
|
|
16
|
+
DeviceConfigWiFi: TType;
|
|
17
|
+
DeviceConfigMqtt: TType;
|
|
18
|
+
DeviceConfigIoT: TType;
|
|
19
|
+
DeviceConfig: TType;
|
|
20
|
+
DeviceConfigAny: TType;
|
|
21
|
+
EntityName: TType;
|
|
22
|
+
DebugFeatures: TType;
|
|
23
|
+
Config: TType;
|
|
24
|
+
};
|
|
25
|
+
export declare const checkers: ICheckerSuite & {
|
|
26
|
+
DeviceConfigBase: CheckerT<DeviceConfigBase>;
|
|
27
|
+
DeviceConfigWiFi: CheckerT<DeviceConfigWiFi>;
|
|
28
|
+
DeviceConfigMqtt: CheckerT<DeviceConfigMqtt>;
|
|
29
|
+
DeviceConfigIoT: CheckerT<DeviceConfigIoT>;
|
|
30
|
+
DeviceConfig: CheckerT<DeviceConfig>;
|
|
31
|
+
DeviceConfigAny: CheckerT<DeviceConfigAny>;
|
|
32
|
+
EntityName: CheckerT<EntityName>;
|
|
33
|
+
DebugFeatures: CheckerT<DebugFeatures>;
|
|
34
|
+
Config: CheckerT<Config>;
|
|
35
|
+
};
|
|
36
|
+
export default checkers;
|
|
37
|
+
//# sourceMappingURL=config-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../../src/ti/config-types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAkB,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAK7K,MAAM,WAAW,OAAO;IACpB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,SAAS,EAAwB,UAAU,GAAG;IACvD,gBAAgB,EAAE,KAAK,CAAC;IACxB,gBAAgB,EAAE,KAAK,CAAC;IACxB,gBAAgB,EAAE,KAAK,CAAC;IACxB,eAAe,EAAE,KAAK,CAAC;IACvB,YAAY,EAAE,KAAK,CAAC;IACpB,eAAe,EAAE,KAAK,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC;IAClB,aAAa,EAAE,KAAK,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;CACjB,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAgC,aAAa,GAAG;IACjE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7C,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7C,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3C,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3C,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// This module was automatically generated by node ts-interface-post.ts
|
|
2
|
+
// 2025-05-16T17:16:14.894Z
|
|
3
|
+
import { createCheckers } from 'ts-interface-checker';
|
|
4
|
+
import exportedTypeSuite from './config-types-ti.js';
|
|
5
|
+
// Type definitions
|
|
6
|
+
export const typeSuite = exportedTypeSuite;
|
|
7
|
+
// Checkers
|
|
8
|
+
export const checkers = createCheckers(typeSuite);
|
|
9
|
+
// Export the checkers by default
|
|
10
|
+
export default checkers;
|
|
11
|
+
//# sourceMappingURL=config-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/ti/config-types.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,2BAA2B;AAE3B,OAAO,EAAY,cAAc,EAAoC,MAAM,sBAAsB,CAAC;AAElG,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAgBrD,mBAAmB;AACnB,MAAM,CAAC,MAAM,SAAS,GAAG,iBAUxB,CAAC;AAEF,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAU/C,CAAC;AAEF,iCAAiC;AACjC,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module was automatically generated by `ts-interface-builder`
|
|
3
|
+
*/
|
|
4
|
+
import * as t from "ts-interface-checker";
|
|
5
|
+
export declare const Dyson360MsgDeviceCredentials: t.TIface;
|
|
6
|
+
export declare const Dyson360MsgConnectionStatus: t.TIface;
|
|
7
|
+
export declare const Dyson360MsgGoodbye: t.TIface;
|
|
8
|
+
export declare const Dyson360MsgCurrentState: t.TIface;
|
|
9
|
+
export declare const Dyson360MsgStateChange: t.TIface;
|
|
10
|
+
export declare const Dyson360MsgMapData: t.TIface;
|
|
11
|
+
export declare const Dyson360MsgMapGlobal: t.TIface;
|
|
12
|
+
export declare const Dyson360MsgMapGrid: t.TIface;
|
|
13
|
+
export declare const Dyson360MsgTelemetryData: t.TIface;
|
|
14
|
+
export declare const Dyson360MsgRequestCurrentState: t.TIface;
|
|
15
|
+
export declare const Dyson360MsgStateSet: t.TIface;
|
|
16
|
+
export declare const Dyson360MsgStart: t.TIface;
|
|
17
|
+
export declare const Dyson360MsgPause: t.TIface;
|
|
18
|
+
export declare const Dyson360MsgResume: t.TIface;
|
|
19
|
+
export declare const Dyson360MsgAbort: t.TIface;
|
|
20
|
+
declare const exportedTypeSuite: t.ITypeSuite;
|
|
21
|
+
export default exportedTypeSuite;
|
|
22
|
+
//# sourceMappingURL=dyson-360-msg-types-ti.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-360-msg-types-ti.d.ts","sourceRoot":"","sources":["../../src/ti/dyson-360-msg-types-ti.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAG1C,eAAO,MAAM,4BAA4B,UAIvC,CAAC;AAEH,eAAO,MAAM,2BAA2B,UAOtC,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAG7B,CAAC;AAEH,eAAO,MAAM,uBAAuB,UAalC,CAAC;AAEH,eAAO,MAAM,sBAAsB,UAejC,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAS7B,CAAC;AAEH,eAAO,MAAM,oBAAoB,UAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAQ7B,CAAC;AAEH,eAAO,MAAM,wBAAwB,UAOnC,CAAC;AAEH,eAAO,MAAM,8BAA8B,UAEzC,CAAC;AAEH,eAAO,MAAM,mBAAmB,UAM9B,CAAC;AAEH,eAAO,MAAM,gBAAgB,UAK3B,CAAC;AAEH,eAAO,MAAM,gBAAgB,UAG3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,UAG5B,CAAC;AAEH,eAAO,MAAM,gBAAgB,UAG3B,CAAC;AAEH,QAAA,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAgB1B,CAAC;AACF,eAAe,iBAAiB,CAAC"}
|