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