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,101 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { AirQuality, ConcentrationMeasurement } from 'matterbridge/matter/clusters';
|
|
4
|
+
import { assertIsDefined, formatList } from './utils.js';
|
|
5
|
+
// Thresholds to map different pollutants to Air Quality levels:
|
|
6
|
+
// co2r CO2 Common indoor air quality guidelines
|
|
7
|
+
// hcho Formaldehyde WHO guidelines and typical concern levels
|
|
8
|
+
// pm25 PM2.5 US EPA 24-hour AQI breakpoints *
|
|
9
|
+
// pm10 PM10 US EPA 24-hour AQI breakpoints *
|
|
10
|
+
// vact VOC Arbitrary mapping of unknown index values
|
|
11
|
+
// noxl NOx Arbitrary mapping of unknown index values
|
|
12
|
+
// pact Dust Arbitrary mapping of unknown index values
|
|
13
|
+
// * = https://aqs.epa.gov/aqsweb/documents/codetables/aqi_breakpoints.html
|
|
14
|
+
const AQI_COLUMNS = ['co2r', 'hcho', 'pm25', 'pm10', 'vact', 'noxl', 'pact'
|
|
15
|
+
];
|
|
16
|
+
const AQI_THRESHOLDS = [
|
|
17
|
+
// ppm µg/m³ µg/m³ µg/m³ 0~99 0~99 0~9
|
|
18
|
+
[AirQuality.AirQualityEnum.Good, [800, 10, 9.0, 54, 10, 10, 0]],
|
|
19
|
+
[AirQuality.AirQualityEnum.Fair, [1000, 30, 35.4, 154, 25, 25, 1]],
|
|
20
|
+
[AirQuality.AirQualityEnum.Moderate, [1500, 60, 55.4, 254, 50, 50, 3]],
|
|
21
|
+
[AirQuality.AirQualityEnum.Poor, [2500, 100, 125.4, 354, 75, 75, 5]],
|
|
22
|
+
[AirQuality.AirQualityEnum.VeryPoor, [5000, 200, 225.4, 424, 90, 90, 7]]
|
|
23
|
+
// (AirQuality.AirQualityEnum.ExtremelyPoor for anything higher)
|
|
24
|
+
];
|
|
25
|
+
// Mapping from Air Quality to Concentration Measurement levels
|
|
26
|
+
const LEVEL_MAP = {
|
|
27
|
+
[AirQuality.AirQualityEnum.Unknown]: ConcentrationMeasurement.LevelValue.Unknown,
|
|
28
|
+
[AirQuality.AirQualityEnum.Good]: ConcentrationMeasurement.LevelValue.Low,
|
|
29
|
+
[AirQuality.AirQualityEnum.Fair]: ConcentrationMeasurement.LevelValue.Low,
|
|
30
|
+
[AirQuality.AirQualityEnum.Moderate]: ConcentrationMeasurement.LevelValue.Medium,
|
|
31
|
+
[AirQuality.AirQualityEnum.Poor]: ConcentrationMeasurement.LevelValue.High,
|
|
32
|
+
[AirQuality.AirQualityEnum.VeryPoor]: ConcentrationMeasurement.LevelValue.High,
|
|
33
|
+
[AirQuality.AirQualityEnum.ExtremelyPoor]: ConcentrationMeasurement.LevelValue.Critical
|
|
34
|
+
};
|
|
35
|
+
// Map numeric sensor values to Air Quality Sensor enum values
|
|
36
|
+
function mapToAirQualitySensorEnum(sensors) {
|
|
37
|
+
const aqiValues = new Map();
|
|
38
|
+
AQI_COLUMNS.forEach((key, index) => {
|
|
39
|
+
const value = sensors[key];
|
|
40
|
+
if (value === undefined)
|
|
41
|
+
return;
|
|
42
|
+
if (typeof value === 'number') {
|
|
43
|
+
const aqiRow = AQI_THRESHOLDS.find(([, thresholds]) => value <= (thresholds[index] ?? Infinity));
|
|
44
|
+
const aqi = aqiRow ? aqiRow[0] : AirQuality.AirQualityEnum.ExtremelyPoor;
|
|
45
|
+
aqiValues.set(key, aqi);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
aqiValues.set(key, AirQuality.AirQualityEnum.Unknown);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return aqiValues;
|
|
52
|
+
}
|
|
53
|
+
// Determine the overall air quality as the worst of the available data
|
|
54
|
+
function worstAirQuality(log, aqiValues) {
|
|
55
|
+
const values = [];
|
|
56
|
+
let aqi = AirQuality.AirQualityEnum.Unknown;
|
|
57
|
+
aqiValues.forEach((aqiValue, key) => {
|
|
58
|
+
if (aqiValue > aqi)
|
|
59
|
+
aqi = aqiValue;
|
|
60
|
+
values.push(`${key}:${AirQuality.AirQualityEnum[aqiValue]}`);
|
|
61
|
+
});
|
|
62
|
+
log.debug(`Air quality is ${AirQuality.AirQualityEnum[aqi]} (${formatList(values)})`);
|
|
63
|
+
return aqi;
|
|
64
|
+
}
|
|
65
|
+
// Map Air Quality Sensor values to Concentration Measurement levels
|
|
66
|
+
function mapToAirQualityLevelEnum(aqiValues) {
|
|
67
|
+
const levelValues = new Map();
|
|
68
|
+
aqiValues.forEach((aqi, key) => {
|
|
69
|
+
levelValues.set(key, LEVEL_MAP[aqi]);
|
|
70
|
+
});
|
|
71
|
+
return levelValues;
|
|
72
|
+
}
|
|
73
|
+
export function numeric(value, factor = 1) {
|
|
74
|
+
if (value === undefined)
|
|
75
|
+
return undefined;
|
|
76
|
+
if (typeof value === 'string')
|
|
77
|
+
return null;
|
|
78
|
+
return Math.round(value * factor);
|
|
79
|
+
}
|
|
80
|
+
// Map the Dyson sensor data to Matter attribute values
|
|
81
|
+
export function mapDysonAirSensorStatus(log, status) {
|
|
82
|
+
const { tact, hact, co2r, hcho, pm25, pm10 } = status;
|
|
83
|
+
assertIsDefined(tact);
|
|
84
|
+
assertIsDefined(hact);
|
|
85
|
+
// Map the available measurements to Air Quality
|
|
86
|
+
const aqiValues = mapToAirQualitySensorEnum(status);
|
|
87
|
+
const levelValues = mapToAirQualityLevelEnum(aqiValues);
|
|
88
|
+
// Return the mapped sensor readings
|
|
89
|
+
return {
|
|
90
|
+
airQuality: worstAirQuality(log, aqiValues),
|
|
91
|
+
temperature: numeric(tact, 100), // centi-°C
|
|
92
|
+
humidity: numeric(hact, 100), // centi-%
|
|
93
|
+
voc: levelValues.get('vact'),
|
|
94
|
+
co2: numeric(co2r), // ppm
|
|
95
|
+
nox: levelValues.get('noxl'),
|
|
96
|
+
hcho: numeric(hcho), // µg/m³
|
|
97
|
+
pm25: numeric(pm25), // µg/m³
|
|
98
|
+
pm10: numeric(pm10) // µg/m³
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=dyson-device-air-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-air-quality.js","sourceRoot":"","sources":["../src/dyson-device-air-quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { DysonDeviceAirBase } from './dyson-device-air-base.js';
|
|
2
|
+
export declare class DysonDeviceAirCoolLink extends DysonDeviceAirBase {
|
|
3
|
+
static readonly model: {
|
|
4
|
+
type: string;
|
|
5
|
+
number: string;
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
static readonly filters: {
|
|
9
|
+
hepa: string[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class DysonDeviceAirCoolLinkDesk extends DysonDeviceAirCoolLink {
|
|
13
|
+
static readonly model: {
|
|
14
|
+
type: string;
|
|
15
|
+
number: string;
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
static readonly filters: {
|
|
19
|
+
hepa: string[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
declare const DysonDeviceAirHotCoolLink_base: (abstract new (...args: any[]) => {
|
|
23
|
+
installHandlers(endpoints: import("./endpoint-air.js").EndpointsAir): Promise<void>;
|
|
24
|
+
setTargetTemperature(celsius: number): Promise<void>;
|
|
25
|
+
setHeating(heat: boolean): Promise<void>;
|
|
26
|
+
getEntities(): {
|
|
27
|
+
name: import("./config-types.js").EntityName;
|
|
28
|
+
description: string;
|
|
29
|
+
}[];
|
|
30
|
+
updateClusterAttributes(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): Promise<void>;
|
|
31
|
+
mqttListener: () => void;
|
|
32
|
+
endpoints?: import("./endpoint-air.js").EndpointsAir;
|
|
33
|
+
hasBreeze: boolean;
|
|
34
|
+
hasCarbonFilter: boolean;
|
|
35
|
+
hasDirection: boolean;
|
|
36
|
+
hasLeftRight: boolean;
|
|
37
|
+
hasUpDown: boolean;
|
|
38
|
+
useFanModeOff: boolean;
|
|
39
|
+
makeEndpoints(validatedNames: import("./config-types.js").EntityName[]): import("./endpoint-air.js").EndpointsAir;
|
|
40
|
+
readonly sensorSupport: import("./endpoint-air.js").EndpointOptionsAirSensors;
|
|
41
|
+
getEndpoints(validatedNames: import("./config-types.js").EntityName[]): import("matterbridge").MatterbridgeEndpoint[];
|
|
42
|
+
start(): Promise<void>;
|
|
43
|
+
stop(): Promise<void>;
|
|
44
|
+
setPower(powerOn: boolean): Promise<void>;
|
|
45
|
+
setFanAuto(): Promise<void>;
|
|
46
|
+
setDirection(forward: boolean): Promise<void>;
|
|
47
|
+
setFanSpeed(speed: number): Promise<void>;
|
|
48
|
+
setNightMode(night: boolean): Promise<void>;
|
|
49
|
+
setOscillateLeftRight(oscillate: boolean): Promise<void>;
|
|
50
|
+
setOscillateUpDown(oscillate: boolean): Promise<void>;
|
|
51
|
+
setOscillateBreeze(breeze: boolean): Promise<void>;
|
|
52
|
+
setState(productState: import("./dyson-mqtt-air.js").DysonMqttProductState): Promise<void>;
|
|
53
|
+
mapDysonFanControlStatus(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): import("./endpoint-air.js").UpdateAirFan;
|
|
54
|
+
mapDysonFilterStatus(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): import("./endpoint-air.js").UpdateAirFilterMonitoring;
|
|
55
|
+
changed: import("./decorator-changed.js").Changed;
|
|
56
|
+
readonly log: import("matterbridge/logger").AnsiLogger;
|
|
57
|
+
readonly config: import("./config-types.js").Config;
|
|
58
|
+
readonly device: import("./config-types.js").DeviceConfig;
|
|
59
|
+
readonly mqtt: import("./dyson-mqtt-air.js").DysonMqttAir;
|
|
60
|
+
readonly uniqueId: string;
|
|
61
|
+
readonly classStatic: typeof import("./dyson-device-base.js").DysonDevice;
|
|
62
|
+
readonly modelName: string;
|
|
63
|
+
readonly modelNumber: string;
|
|
64
|
+
readonly deviceName: string;
|
|
65
|
+
readonly serialNumber: string;
|
|
66
|
+
}) & typeof DysonDeviceAirCoolLink;
|
|
67
|
+
export declare class DysonDeviceAirHotCoolLink extends DysonDeviceAirHotCoolLink_base {
|
|
68
|
+
static readonly model: {
|
|
69
|
+
type: string;
|
|
70
|
+
number: string;
|
|
71
|
+
name: string;
|
|
72
|
+
};
|
|
73
|
+
static readonly filters: {
|
|
74
|
+
hepa: string[];
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export declare class DysonDeviceAirHotCoolLinkA extends DysonDeviceAirHotCoolLink {
|
|
78
|
+
static readonly model: {
|
|
79
|
+
type: string;
|
|
80
|
+
number: string;
|
|
81
|
+
name: string;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export declare abstract class DysonDeviceAirCoolBase extends DysonDeviceAirBase {
|
|
85
|
+
static readonly filters: {
|
|
86
|
+
hepa: string[];
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export declare class DysonDeviceAirCool extends DysonDeviceAirCoolBase {
|
|
90
|
+
static readonly model: {
|
|
91
|
+
type: string;
|
|
92
|
+
number: string;
|
|
93
|
+
name: string;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export declare class DysonDeviceAirCoolE extends DysonDeviceAirCool {
|
|
97
|
+
static readonly model: {
|
|
98
|
+
type: string;
|
|
99
|
+
number: string;
|
|
100
|
+
name: string;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export declare class DysonDeviceAirCoolK extends DysonDeviceAirCool {
|
|
104
|
+
static readonly model: {
|
|
105
|
+
type: string;
|
|
106
|
+
number: string;
|
|
107
|
+
name: string;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export declare class DysonDeviceAirCoolDesk extends DysonDeviceAirCool {
|
|
111
|
+
static readonly model: {
|
|
112
|
+
type: string;
|
|
113
|
+
number: string;
|
|
114
|
+
name: string;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export declare class DysonDeviceAirHumidifyCool extends DysonDeviceAirCoolBase {
|
|
118
|
+
static readonly model: {
|
|
119
|
+
type: string;
|
|
120
|
+
number: string;
|
|
121
|
+
name: string;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export declare class DysonDeviceAirHumidifyCoolE extends DysonDeviceAirHumidifyCool {
|
|
125
|
+
static readonly model: {
|
|
126
|
+
type: string;
|
|
127
|
+
number: string;
|
|
128
|
+
name: string;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export declare class DysonDeviceAirHumidifyCoolK extends DysonDeviceAirHumidifyCool {
|
|
132
|
+
static readonly model: {
|
|
133
|
+
type: string;
|
|
134
|
+
number: string;
|
|
135
|
+
name: string;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
declare const DysonDeviceAirHotCool_base: (abstract new (...args: any[]) => {
|
|
139
|
+
installHandlers(endpoints: import("./endpoint-air.js").EndpointsAir): Promise<void>;
|
|
140
|
+
setTargetTemperature(celsius: number): Promise<void>;
|
|
141
|
+
setHeating(heat: boolean): Promise<void>;
|
|
142
|
+
getEntities(): {
|
|
143
|
+
name: import("./config-types.js").EntityName;
|
|
144
|
+
description: string;
|
|
145
|
+
}[];
|
|
146
|
+
updateClusterAttributes(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): Promise<void>;
|
|
147
|
+
mqttListener: () => void;
|
|
148
|
+
endpoints?: import("./endpoint-air.js").EndpointsAir;
|
|
149
|
+
hasBreeze: boolean;
|
|
150
|
+
hasCarbonFilter: boolean;
|
|
151
|
+
hasDirection: boolean;
|
|
152
|
+
hasLeftRight: boolean;
|
|
153
|
+
hasUpDown: boolean;
|
|
154
|
+
useFanModeOff: boolean;
|
|
155
|
+
makeEndpoints(validatedNames: import("./config-types.js").EntityName[]): import("./endpoint-air.js").EndpointsAir;
|
|
156
|
+
readonly sensorSupport: import("./endpoint-air.js").EndpointOptionsAirSensors;
|
|
157
|
+
getEndpoints(validatedNames: import("./config-types.js").EntityName[]): import("matterbridge").MatterbridgeEndpoint[];
|
|
158
|
+
start(): Promise<void>;
|
|
159
|
+
stop(): Promise<void>;
|
|
160
|
+
setPower(powerOn: boolean): Promise<void>;
|
|
161
|
+
setFanAuto(): Promise<void>;
|
|
162
|
+
setDirection(forward: boolean): Promise<void>;
|
|
163
|
+
setFanSpeed(speed: number): Promise<void>;
|
|
164
|
+
setNightMode(night: boolean): Promise<void>;
|
|
165
|
+
setOscillateLeftRight(oscillate: boolean): Promise<void>;
|
|
166
|
+
setOscillateUpDown(oscillate: boolean): Promise<void>;
|
|
167
|
+
setOscillateBreeze(breeze: boolean): Promise<void>;
|
|
168
|
+
setState(productState: import("./dyson-mqtt-air.js").DysonMqttProductState): Promise<void>;
|
|
169
|
+
mapDysonFanControlStatus(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): import("./endpoint-air.js").UpdateAirFan;
|
|
170
|
+
mapDysonFilterStatus(status: import("./dyson-mqtt.js").DysonMqttStatus<import("./dyson-mqtt-air.js").DysonMqttStatusAir>): import("./endpoint-air.js").UpdateAirFilterMonitoring;
|
|
171
|
+
changed: import("./decorator-changed.js").Changed;
|
|
172
|
+
readonly log: import("matterbridge/logger").AnsiLogger;
|
|
173
|
+
readonly config: import("./config-types.js").Config;
|
|
174
|
+
readonly device: import("./config-types.js").DeviceConfig;
|
|
175
|
+
readonly mqtt: import("./dyson-mqtt-air.js").DysonMqttAir;
|
|
176
|
+
readonly uniqueId: string;
|
|
177
|
+
readonly classStatic: typeof import("./dyson-device-base.js").DysonDevice;
|
|
178
|
+
readonly modelName: string;
|
|
179
|
+
readonly modelNumber: string;
|
|
180
|
+
readonly deviceName: string;
|
|
181
|
+
readonly serialNumber: string;
|
|
182
|
+
}) & typeof DysonDeviceAirCool;
|
|
183
|
+
export declare class DysonDeviceAirHotCool extends DysonDeviceAirHotCool_base {
|
|
184
|
+
static readonly model: {
|
|
185
|
+
type: string;
|
|
186
|
+
number: string;
|
|
187
|
+
name: string;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export declare class DysonDeviceAirHotCoolE extends DysonDeviceAirHotCool {
|
|
191
|
+
static readonly model: {
|
|
192
|
+
type: string;
|
|
193
|
+
number: string;
|
|
194
|
+
name: string;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export declare class DysonDeviceAirHotCoolK extends DysonDeviceAirHotCool {
|
|
198
|
+
static readonly model: {
|
|
199
|
+
type: string;
|
|
200
|
+
number: string;
|
|
201
|
+
name: string;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
export declare class DysonDeviceAirBigQuiet extends DysonDeviceAirBase {
|
|
205
|
+
static readonly model: {
|
|
206
|
+
type: string;
|
|
207
|
+
number: string;
|
|
208
|
+
name: string;
|
|
209
|
+
};
|
|
210
|
+
static readonly filters: {
|
|
211
|
+
hepa: string[];
|
|
212
|
+
carbon: string[];
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
export {};
|
|
216
|
+
//# sourceMappingURL=dyson-device-air.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-air.d.ts","sourceRoot":"","sources":["../src/dyson-device-air.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA2D;IAChF,MAAM,CAAC,QAAQ,CAAC,OAAO;;MAA2B;CACrD;AAGD,qBAAa,0BAA2B,SAAQ,sBAAsB;IAClE,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAgE;IACrF,MAAM,CAAC,QAAQ,CAAC,OAAO;;MAA2B;CACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKD,qBAAa,yBAA0B,SAAQ,8BAA+C;IAC1F,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA+D;IACpF,MAAM,CAAC,QAAQ,CAAC,OAAO;;MAA2B;CACrD;AAGD,qBAAa,0BAA2B,SAAQ,yBAAyB;IACrE,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAgE;CACxF;AAMD,8BAAsB,sBAAuB,SAAQ,kBAAkB;IACnE,MAAM,CAAC,QAAQ,CAAC,OAAO;;MAA2B;CACrD;AAKD,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA2D;CACnF;AAGD,qBAAa,mBAAoB,SAAQ,kBAAkB;IACvD,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAyE;CACjG;AACD,qBAAa,mBAAoB,SAAQ,kBAAkB;IACvD,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAyE;CACjG;AACD,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA2D;CACnF;AAKD,qBAAa,0BAA2B,SAAQ,sBAAsB;IAClE,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA+D;CACvF;AAGD,qBAAa,2BAA4B,SAAQ,0BAA0B;IACvE,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAgE;CACxF;AACD,qBAAa,2BAA4B,SAAQ,0BAA0B;IACvE,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA6E;CACrG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKD,qBAAa,qBAAsB,SAAQ,0BAA2C;IAClF,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA+D;CACvF;AAGD,qBAAa,sBAAuB,SAAQ,qBAAqB;IAC7D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA+D;CACvF;AACD,qBAAa,sBAAuB,SAAQ,qBAAqB;IAC7D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAA4E;CACpG;AAMD,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;MAAqF;IAC1G,MAAM,CAAC,QAAQ,CAAC,OAAO;;;MAAkD;CAC5E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { DysonDeviceAirBase } from './dyson-device-air-base.js';
|
|
4
|
+
import { DysonDeviceAirWithHeat as DysonDeviceAirHeatMixin } from './dyson-device-air-heat.js';
|
|
5
|
+
// =============================================================================
|
|
6
|
+
// Dyson Pure (Hot)+Cool Link family...
|
|
7
|
+
// Dyson Pure Cool Link
|
|
8
|
+
export class DysonDeviceAirCoolLink extends DysonDeviceAirBase {
|
|
9
|
+
static model = { type: '475', number: 'TP02', name: 'Pure Cool Link' };
|
|
10
|
+
static filters = { hepa: ['972426-01'] };
|
|
11
|
+
}
|
|
12
|
+
// Dyson Pure Cool Link alias without significant functional differences
|
|
13
|
+
export class DysonDeviceAirCoolLinkDesk extends DysonDeviceAirCoolLink {
|
|
14
|
+
static model = { type: '469', number: 'DP01', name: 'Pure Cool Link Desk' };
|
|
15
|
+
static filters = { hepa: ['972425-01'] };
|
|
16
|
+
}
|
|
17
|
+
// -----------------------------------------------------------------------------
|
|
18
|
+
// Dyson Pure Hot+Cool Link
|
|
19
|
+
export class DysonDeviceAirHotCoolLink extends DysonDeviceAirHeatMixin(DysonDeviceAirCoolLink) {
|
|
20
|
+
static model = { type: '455', number: 'HP02', name: 'Pure Hot+Cool Link' };
|
|
21
|
+
static filters = { hepa: ['972425-01'] };
|
|
22
|
+
}
|
|
23
|
+
// Dyson Pure Hot+Cool Link alias without significant functional differences
|
|
24
|
+
export class DysonDeviceAirHotCoolLinkA extends DysonDeviceAirHotCoolLink {
|
|
25
|
+
static model = { type: '455A', number: 'HP02', name: 'Pure Hot+Cool Link' };
|
|
26
|
+
}
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Dyson Pure Cool family...
|
|
29
|
+
// Common base class for Dyson Pure (Humidify|Hot+)Cool family devices
|
|
30
|
+
export class DysonDeviceAirCoolBase extends DysonDeviceAirBase {
|
|
31
|
+
static filters = { hepa: ['965432-01'] };
|
|
32
|
+
}
|
|
33
|
+
// -----------------------------------------------------------------------------
|
|
34
|
+
// Dyson Pure Cool
|
|
35
|
+
export class DysonDeviceAirCool extends DysonDeviceAirCoolBase {
|
|
36
|
+
static model = { type: '438', number: 'TP04/TP06', name: 'Pure Cool' };
|
|
37
|
+
}
|
|
38
|
+
// Dyson Pure Cool aliases without significant functional differences
|
|
39
|
+
export class DysonDeviceAirCoolE extends DysonDeviceAirCool {
|
|
40
|
+
static model = { type: '438E', number: 'TP07/TP09', name: 'Pure Cool Formaldehyde' };
|
|
41
|
+
}
|
|
42
|
+
export class DysonDeviceAirCoolK extends DysonDeviceAirCool {
|
|
43
|
+
static model = { type: '438K', number: 'TP07/TP09', name: 'Pure Cool Formaldehyde' };
|
|
44
|
+
}
|
|
45
|
+
export class DysonDeviceAirCoolDesk extends DysonDeviceAirCool {
|
|
46
|
+
static model = { type: '520', number: 'DP04', name: 'Pure Cool Desk' };
|
|
47
|
+
}
|
|
48
|
+
// -----------------------------------------------------------------------------
|
|
49
|
+
// Dyson Pure Humidify+Cool
|
|
50
|
+
export class DysonDeviceAirHumidifyCool extends DysonDeviceAirCoolBase {
|
|
51
|
+
static model = { type: '358', number: 'PH01', name: 'Pure Humidify+Cool' };
|
|
52
|
+
}
|
|
53
|
+
// Dyson Pure Humidify+Cool aliases without significant functional differences
|
|
54
|
+
export class DysonDeviceAirHumidifyCoolE extends DysonDeviceAirHumidifyCool {
|
|
55
|
+
static model = { type: '358E', number: 'PH03', name: 'Pure Humidify+Cool' };
|
|
56
|
+
}
|
|
57
|
+
export class DysonDeviceAirHumidifyCoolK extends DysonDeviceAirHumidifyCool {
|
|
58
|
+
static model = { type: '358K', number: 'PH04', name: 'Pure Humidify+Cool Formaldehyde' };
|
|
59
|
+
}
|
|
60
|
+
// -----------------------------------------------------------------------------
|
|
61
|
+
// Dyson Pure Hot+Cool
|
|
62
|
+
export class DysonDeviceAirHotCool extends DysonDeviceAirHeatMixin(DysonDeviceAirCool) {
|
|
63
|
+
static model = { type: '527', number: 'HP04/HP06', name: 'Pure Hot+Cool' };
|
|
64
|
+
}
|
|
65
|
+
// Dyson Pure Hot+Cool aliases without significant functional differences
|
|
66
|
+
export class DysonDeviceAirHotCoolE extends DysonDeviceAirHotCool {
|
|
67
|
+
static model = { type: '527E', number: 'HP07', name: 'Purifier Hot+Cool' };
|
|
68
|
+
}
|
|
69
|
+
export class DysonDeviceAirHotCoolK extends DysonDeviceAirHotCool {
|
|
70
|
+
static model = { type: '527K', number: 'HP09', name: 'Purifier Hot+Cool Formaldehyde' };
|
|
71
|
+
}
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Dyson Big+Quiet family...
|
|
74
|
+
// All Dyson Big+Quiet devices share the same type code
|
|
75
|
+
export class DysonDeviceAirBigQuiet extends DysonDeviceAirBase {
|
|
76
|
+
static model = { type: '664', number: 'BP02/BP03/BP04/BP06', name: 'Purifier Big+Quiet Series' };
|
|
77
|
+
static filters = { hepa: ['972132-01'], carbon: ['972133-03'] };
|
|
78
|
+
}
|
|
79
|
+
// =============================================================================
|
|
80
|
+
//# sourceMappingURL=dyson-device-air.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-air.js","sourceRoot":"","sources":["../src/dyson-device-air.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AnsiLogger } from 'matterbridge/logger';
|
|
2
|
+
import { Config, DeviceConfig, EntityName } from './config-types.js';
|
|
3
|
+
import { DysonMqttLike } from './dyson-mqtt.js';
|
|
4
|
+
import { MatterbridgeEndpoint } from 'matterbridge';
|
|
5
|
+
import { Constructor } from './utils.js';
|
|
6
|
+
import { Changed } from './decorator-changed.js';
|
|
7
|
+
export interface DysonDeviceModel {
|
|
8
|
+
type: string;
|
|
9
|
+
number: string;
|
|
10
|
+
name: string;
|
|
11
|
+
}
|
|
12
|
+
export type DysonDeviceConstructorParams<MQTT extends DysonMqttLike = DysonMqttLike> = [
|
|
13
|
+
log: AnsiLogger,
|
|
14
|
+
config: Config,
|
|
15
|
+
device: DeviceConfig,
|
|
16
|
+
mqtt: MQTT
|
|
17
|
+
];
|
|
18
|
+
export interface DysonDeviceConstructor<MQTT extends DysonMqttLike = DysonMqttLike, Device extends DysonDevice<MQTT> = DysonDevice<MQTT>> {
|
|
19
|
+
new (...args: DysonDeviceConstructorParams<MQTT>): Device;
|
|
20
|
+
readonly mqttConstructor: Constructor<MQTT>;
|
|
21
|
+
}
|
|
22
|
+
export declare abstract class DysonDevice<MQTT extends DysonMqttLike = DysonMqttLike> {
|
|
23
|
+
readonly log: AnsiLogger;
|
|
24
|
+
readonly config: Config;
|
|
25
|
+
readonly device: DeviceConfig;
|
|
26
|
+
readonly mqtt: MQTT;
|
|
27
|
+
static readonly model: DysonDeviceModel;
|
|
28
|
+
static readonly filters: {
|
|
29
|
+
hepa: string[];
|
|
30
|
+
carbon?: string[];
|
|
31
|
+
};
|
|
32
|
+
static readonly mqttConstructor: Constructor<DysonMqttLike>;
|
|
33
|
+
changed: Changed;
|
|
34
|
+
constructor(log: AnsiLogger, config: Config, device: DeviceConfig, mqtt: MQTT);
|
|
35
|
+
abstract getEntities(): {
|
|
36
|
+
name: EntityName;
|
|
37
|
+
description: string;
|
|
38
|
+
}[];
|
|
39
|
+
abstract getEndpoints(validatedNames: EntityName[]): MatterbridgeEndpoint[];
|
|
40
|
+
abstract start(): Promise<void>;
|
|
41
|
+
stop(): Promise<void>;
|
|
42
|
+
get uniqueId(): string;
|
|
43
|
+
get classStatic(): typeof DysonDevice;
|
|
44
|
+
get modelName(): string;
|
|
45
|
+
get modelNumber(): string;
|
|
46
|
+
get deviceName(): string;
|
|
47
|
+
get serialNumber(): string;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=dyson-device-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-base.d.ts","sourceRoot":"","sources":["../src/dyson-device-base.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAIjD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAI,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;CAClB;AAGD,MAAM,MAAM,4BAA4B,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa,IAAI;IACnF,GAAG,EAAK,UAAU;IAClB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,YAAY;IACpB,IAAI,EAAI,IAAI;CACf,CAAC;AAGF,MAAM,WAAW,sBAAsB,CACnC,IAAI,SAAY,aAAa,GAAS,aAAa,EACnD,MAAM,SAAU,WAAW,CAAC,IAAI,CAAC,GAAK,WAAW,CAAC,IAAI,CAAC;IAEvD,KAAK,GAAG,IAAI,EAAE,4BAA4B,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC1D,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;CAC/C;AAGD,8BAAsB,WAAW,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa;IAcpE,QAAQ,CAAC,GAAG,EAAQ,UAAU;IAC9B,QAAQ,CAAC,MAAM,EAAK,MAAM;IAC1B,QAAQ,CAAC,MAAM,EAAK,YAAY;IAChC,QAAQ,CAAC,IAAI,EAAO,IAAI;IAd5B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAG/D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAG5D,OAAO,EAAS,OAAO,CAAC;gBAIX,GAAG,EAAQ,UAAU,EACrB,MAAM,EAAK,MAAM,EACjB,MAAM,EAAK,YAAY,EACvB,IAAI,EAAO,IAAI;IAO5B,QAAQ,CAAC,WAAW,IAAI;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;IAGnE,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,oBAAoB,EAAE;IAG3E,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAGzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,QAAQ,IAAI,MAAM,CAIrB;IAGD,IAAI,WAAW,IAAI,OAAO,WAAW,CAAmD;IACxF,IAAI,SAAS,IAAO,MAAM,CAAwC;IAClE,IAAI,WAAW,IAAK,MAAM,CAA0C;IAGpE,IAAI,UAAU,IAAM,MAAM,CAA6B;IACvD,IAAI,YAAY,IAAI,MAAM,CAAiC;CAC9D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { Changed } from './decorator-changed.js';
|
|
4
|
+
import { createHash } from 'crypto';
|
|
5
|
+
// A Dyson robot vacuum or air treatment device
|
|
6
|
+
export class DysonDevice {
|
|
7
|
+
log;
|
|
8
|
+
config;
|
|
9
|
+
device;
|
|
10
|
+
mqtt;
|
|
11
|
+
// Details of the device model
|
|
12
|
+
static model;
|
|
13
|
+
static filters;
|
|
14
|
+
// MQTT client constructor
|
|
15
|
+
static mqttConstructor;
|
|
16
|
+
// Decorator support
|
|
17
|
+
changed;
|
|
18
|
+
// Construct a new Dyson device instance
|
|
19
|
+
constructor(log, config, device, mqtt) {
|
|
20
|
+
this.log = log;
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.device = device;
|
|
23
|
+
this.mqtt = mqtt;
|
|
24
|
+
// Prepare the decorator support
|
|
25
|
+
this.changed = new Changed(log);
|
|
26
|
+
}
|
|
27
|
+
// Stop the device when Matterbridge is shutting down
|
|
28
|
+
async stop() {
|
|
29
|
+
await this.mqtt.stop();
|
|
30
|
+
}
|
|
31
|
+
// Use the serial number to generate a 32-character opaque unique ID
|
|
32
|
+
get uniqueId() {
|
|
33
|
+
const hash = createHash('sha256').update(this.serialNumber).digest('hex');
|
|
34
|
+
const model = this.modelNumber.replace(/.*\//, '').toLowerCase();
|
|
35
|
+
return `dyson-${model}-${hash}`.substring(0, 32);
|
|
36
|
+
}
|
|
37
|
+
// Retrieve the static data for an instance
|
|
38
|
+
get classStatic() { return this.constructor; }
|
|
39
|
+
get modelName() { return this.classStatic.model.name; }
|
|
40
|
+
get modelNumber() { return this.classStatic.model.number; }
|
|
41
|
+
// Retrieve common per-device data
|
|
42
|
+
get deviceName() { return this.device.name; }
|
|
43
|
+
get serialNumber() { return this.device.username; }
|
|
44
|
+
}
|
|
45
|
+
;
|
|
46
|
+
//# sourceMappingURL=dyson-device-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device-base.js","sourceRoot":"","sources":["../src/dyson-device-base.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AAOzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AA0BpC,+CAA+C;AAC/C,MAAM,OAAgB,WAAW;IAchB;IACA;IACA;IACA;IAfb,8BAA8B;IAC9B,MAAM,CAAU,KAAK,CAAmB;IACxC,MAAM,CAAU,OAAO,CAAwC;IAE/D,0BAA0B;IAC1B,MAAM,CAAU,eAAe,CAA6B;IAE5D,oBAAoB;IACpB,OAAO,CAAiB;IAExB,wCAAwC;IACxC,YACa,GAAqB,EACrB,MAAiB,EACjB,MAAuB,EACvB,IAAe;QAHf,QAAG,GAAH,GAAG,CAAkB;QACrB,WAAM,GAAN,MAAM,CAAW;QACjB,WAAM,GAAN,MAAM,CAAiB;QACvB,SAAI,GAAJ,IAAI,CAAW;QAExB,gCAAgC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAWD,qDAAqD;IACrD,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,oEAAoE;IACpE,IAAI,QAAQ;QACR,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,OAAO,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,2CAA2C;IAC3C,IAAI,WAAW,KAAyB,OAAO,IAAI,CAAC,WAAiC,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,KAAgB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,WAAW,KAAc,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpE,kCAAkC;IAClC,IAAI,UAAU,KAAe,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,YAAY,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9D;AAAA,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DysonDevice } from './dyson-device-base.js';
|
|
2
|
+
import { Config, DeviceConfig } from './config-types.js';
|
|
3
|
+
import { AnsiLogger } from 'matterbridge/logger';
|
|
4
|
+
export declare function createDysonDevice(log: AnsiLogger, config: Config, device: DeviceConfig): Promise<DysonDevice>;
|
|
5
|
+
//# sourceMappingURL=dyson-device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device.d.ts","sourceRoot":"","sources":["../src/dyson-device.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAuBrD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA4BjD,wBAAsB,iBAAiB,CACnC,GAAG,EAAS,UAAU,EACtB,MAAM,EAAM,MAAM,EAClB,MAAM,EAAM,YAAY,GACzB,OAAO,CAAC,WAAW,CAAC,CAatB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
|
|
2
|
+
// Copyright © 2025 Alexander Thoukydides
|
|
3
|
+
import { DysonDevice360Eye, DysonDevice360Heurist, DysonDevice360VisNav } from './dyson-device-360.js';
|
|
4
|
+
import { DysonDeviceAirCool, DysonDeviceAirCoolDesk, DysonDeviceAirCoolE, DysonDeviceAirCoolK, DysonDeviceAirCoolLink, DysonDeviceAirCoolLinkDesk, DysonDeviceAirHotCool, DysonDeviceAirHotCoolE, DysonDeviceAirHotCoolK, DysonDeviceAirHotCoolLink, DysonDeviceAirHotCoolLinkA, DysonDeviceAirHumidifyCool, DysonDeviceAirHumidifyCoolE, DysonDeviceAirHumidifyCoolK, DysonDeviceAirBigQuiet } from './dyson-device-air.js';
|
|
5
|
+
import { logError } from './utils.js';
|
|
6
|
+
// List of constructors for Dyson devices
|
|
7
|
+
const DYSON_DEVICE_TYPES = [
|
|
8
|
+
// Dyson robot vacuum device types
|
|
9
|
+
DysonDevice360Eye,
|
|
10
|
+
DysonDevice360Heurist,
|
|
11
|
+
DysonDevice360VisNav,
|
|
12
|
+
// Dyson air treatment device types
|
|
13
|
+
DysonDeviceAirCool,
|
|
14
|
+
DysonDeviceAirCoolDesk,
|
|
15
|
+
DysonDeviceAirCoolE,
|
|
16
|
+
DysonDeviceAirCoolK,
|
|
17
|
+
DysonDeviceAirCoolLink,
|
|
18
|
+
DysonDeviceAirCoolLinkDesk,
|
|
19
|
+
DysonDeviceAirHotCool,
|
|
20
|
+
DysonDeviceAirHotCoolE,
|
|
21
|
+
DysonDeviceAirHotCoolK,
|
|
22
|
+
DysonDeviceAirHotCoolLink,
|
|
23
|
+
DysonDeviceAirHotCoolLinkA,
|
|
24
|
+
DysonDeviceAirHumidifyCool,
|
|
25
|
+
DysonDeviceAirHumidifyCoolE,
|
|
26
|
+
DysonDeviceAirHumidifyCoolK,
|
|
27
|
+
DysonDeviceAirBigQuiet
|
|
28
|
+
];
|
|
29
|
+
// Dyson device factory
|
|
30
|
+
export async function createDysonDevice(log, config, device) {
|
|
31
|
+
// Select the appropriate class for this device
|
|
32
|
+
const { root_topic } = device;
|
|
33
|
+
const deviceClass = DYSON_DEVICE_TYPES.find((device) => device.model.type === root_topic);
|
|
34
|
+
if (!deviceClass)
|
|
35
|
+
throw new Error(`Unknown Dyson device type: ${root_topic}`);
|
|
36
|
+
// Create the MQTT client and wait for it to finish initialising
|
|
37
|
+
const mqtt = new deviceClass.mqttConstructor(log, config, device);
|
|
38
|
+
mqtt.on('error', err => { logError(log, 'MQTT Event', err); });
|
|
39
|
+
await mqtt.waitUntilInitialised();
|
|
40
|
+
// Create the Dyson device itself
|
|
41
|
+
return new deviceClass(log, config, device, mqtt);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=dyson-device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-device.js","sourceRoot":"","sources":["../src/dyson-device.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AAGzC,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAuB,MAAM,YAAY,CAAC;AAE3D,yCAAyC;AACzC,MAAM,kBAAkB,GAAG;IACvB,kCAAkC;IAClC,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,mCAAmC;IACnC,kBAAkB;IAClB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,0BAA0B;IAC1B,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,yBAAyB;IACzB,0BAA0B;IAC1B,0BAA0B;IAC1B,2BAA2B;IAC3B,2BAA2B;IAC3B,sBAAsB;CAChB,CAAC;AAEX,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,GAAsB,EACtB,MAAkB,EAClB,MAAwB;IAExB,+CAA+C;IAC/C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC1F,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IAE9E,gEAAgE;IAChE,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAElC,iCAAiC;IACjC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAwC,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AnsiLogger } from 'matterbridge/logger';
|
|
2
|
+
import { Config, DeviceConfig } from './config-types.js';
|
|
3
|
+
import { DysonMqtt } from './dyson-mqtt.js';
|
|
4
|
+
import { TypeMap as DysonMsgMap360 } from './ti/dyson-360-msg-types.js';
|
|
5
|
+
import { Dyson360MsgCurrentState, Dyson360MsgStateChange } from './dyson-360-msg-types.js';
|
|
6
|
+
import { Dyson360PowerMode } from './dyson-360-types.js';
|
|
7
|
+
export type DysonMqttStatus360 = Omit<Dyson360MsgCurrentState, 'msg' | 'time'>;
|
|
8
|
+
export type DysonMqtt360Action = 'START' | 'PAUSE' | 'RESUME' | 'ABORT';
|
|
9
|
+
export declare class DysonMqtt360 extends DysonMqtt<DysonMsgMap360, DysonMqttStatus360> {
|
|
10
|
+
constructor(log: AnsiLogger, config: Config, device: DeviceConfig);
|
|
11
|
+
convertStateChange(msg: Dyson360MsgStateChange): Dyson360MsgCurrentState;
|
|
12
|
+
updateState(msg: Dyson360MsgCurrentState): void;
|
|
13
|
+
commandAction(msg: DysonMqtt360Action): Promise<void>;
|
|
14
|
+
commandPower(defaultVacuumPowerMode: Dyson360PowerMode): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=dyson-mqtt-360.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dyson-mqtt-360.d.ts","sourceRoot":"","sources":["../src/dyson-mqtt-360.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAmB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAEH,OAAO,IAAI,cAAc,EAC5B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGH,iBAAiB,EACpB,MAAM,sBAAsB,CAAC;AAkB9B,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAG/E,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAGxE,qBAAa,YAAa,SAAQ,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;gBAG/D,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAqBjE,kBAAkB,CAAC,GAAG,EAAE,sBAAsB,GAAG,uBAAuB;IAMxE,WAAW,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI;IAc/C,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD,YAAY,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzE"}
|