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 @@
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"}
@@ -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"}
@@ -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"}
@@ -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"}