matterbridge 3.4.3-dev-20251209-e6cb85f → 3.4.3

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 (324) hide show
  1. package/README.md +2 -3
  2. package/dist/broadcastServer.d.ts +144 -0
  3. package/dist/broadcastServer.d.ts.map +1 -0
  4. package/dist/broadcastServer.js +119 -0
  5. package/dist/broadcastServer.js.map +1 -0
  6. package/dist/broadcastServerTypes.d.ts +841 -0
  7. package/dist/broadcastServerTypes.d.ts.map +1 -0
  8. package/dist/broadcastServerTypes.js +24 -0
  9. package/dist/broadcastServerTypes.js.map +1 -0
  10. package/dist/cli.d.ts +30 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +97 -1
  13. package/dist/cli.js.map +1 -0
  14. package/dist/cliEmitter.d.ts +50 -0
  15. package/dist/cliEmitter.d.ts.map +1 -0
  16. package/dist/cliEmitter.js +37 -0
  17. package/dist/cliEmitter.js.map +1 -0
  18. package/dist/cliHistory.d.ts +48 -0
  19. package/dist/cliHistory.d.ts.map +1 -0
  20. package/dist/cliHistory.js +38 -0
  21. package/dist/cliHistory.js.map +1 -0
  22. package/dist/clusters/export.d.ts +2 -0
  23. package/dist/clusters/export.d.ts.map +1 -0
  24. package/dist/clusters/export.js +2 -0
  25. package/dist/clusters/export.js.map +1 -0
  26. package/dist/deviceManager.d.ts +135 -0
  27. package/dist/deviceManager.d.ts.map +1 -0
  28. package/dist/deviceManager.js +113 -1
  29. package/dist/deviceManager.js.map +1 -0
  30. package/dist/devices/airConditioner.d.ts +98 -0
  31. package/dist/devices/airConditioner.d.ts.map +1 -0
  32. package/dist/devices/airConditioner.js +57 -0
  33. package/dist/devices/airConditioner.js.map +1 -0
  34. package/dist/devices/batteryStorage.d.ts +48 -0
  35. package/dist/devices/batteryStorage.d.ts.map +1 -0
  36. package/dist/devices/batteryStorage.js +48 -1
  37. package/dist/devices/batteryStorage.js.map +1 -0
  38. package/dist/devices/cooktop.d.ts +61 -0
  39. package/dist/devices/cooktop.d.ts.map +1 -0
  40. package/dist/devices/cooktop.js +56 -0
  41. package/dist/devices/cooktop.js.map +1 -0
  42. package/dist/devices/dishwasher.d.ts +71 -0
  43. package/dist/devices/dishwasher.d.ts.map +1 -0
  44. package/dist/devices/dishwasher.js +57 -0
  45. package/dist/devices/dishwasher.js.map +1 -0
  46. package/dist/devices/evse.d.ts +76 -0
  47. package/dist/devices/evse.d.ts.map +1 -0
  48. package/dist/devices/evse.js +74 -10
  49. package/dist/devices/evse.js.map +1 -0
  50. package/dist/devices/export.d.ts +17 -0
  51. package/dist/devices/export.d.ts.map +1 -0
  52. package/dist/devices/export.js +5 -0
  53. package/dist/devices/export.js.map +1 -0
  54. package/dist/devices/extractorHood.d.ts +46 -0
  55. package/dist/devices/extractorHood.d.ts.map +1 -0
  56. package/dist/devices/extractorHood.js +43 -0
  57. package/dist/devices/extractorHood.js.map +1 -0
  58. package/dist/devices/heatPump.d.ts +47 -0
  59. package/dist/devices/heatPump.d.ts.map +1 -0
  60. package/dist/devices/heatPump.js +50 -2
  61. package/dist/devices/heatPump.js.map +1 -0
  62. package/dist/devices/laundryDryer.d.ts +67 -0
  63. package/dist/devices/laundryDryer.d.ts.map +1 -0
  64. package/dist/devices/laundryDryer.js +62 -3
  65. package/dist/devices/laundryDryer.js.map +1 -0
  66. package/dist/devices/laundryWasher.d.ts +81 -0
  67. package/dist/devices/laundryWasher.d.ts.map +1 -0
  68. package/dist/devices/laundryWasher.js +70 -4
  69. package/dist/devices/laundryWasher.js.map +1 -0
  70. package/dist/devices/microwaveOven.d.ts +168 -0
  71. package/dist/devices/microwaveOven.d.ts.map +1 -0
  72. package/dist/devices/microwaveOven.js +88 -5
  73. package/dist/devices/microwaveOven.js.map +1 -0
  74. package/dist/devices/oven.d.ts +105 -0
  75. package/dist/devices/oven.d.ts.map +1 -0
  76. package/dist/devices/oven.js +85 -0
  77. package/dist/devices/oven.js.map +1 -0
  78. package/dist/devices/refrigerator.d.ts +118 -0
  79. package/dist/devices/refrigerator.d.ts.map +1 -0
  80. package/dist/devices/refrigerator.js +102 -0
  81. package/dist/devices/refrigerator.js.map +1 -0
  82. package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
  83. package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
  84. package/dist/devices/roboticVacuumCleaner.js +100 -9
  85. package/dist/devices/roboticVacuumCleaner.js.map +1 -0
  86. package/dist/devices/solarPower.d.ts +40 -0
  87. package/dist/devices/solarPower.d.ts.map +1 -0
  88. package/dist/devices/solarPower.js +38 -0
  89. package/dist/devices/solarPower.js.map +1 -0
  90. package/dist/devices/speaker.d.ts +87 -0
  91. package/dist/devices/speaker.d.ts.map +1 -0
  92. package/dist/devices/speaker.js +84 -0
  93. package/dist/devices/speaker.js.map +1 -0
  94. package/dist/devices/temperatureControl.d.ts +166 -0
  95. package/dist/devices/temperatureControl.d.ts.map +1 -0
  96. package/dist/devices/temperatureControl.js +24 -3
  97. package/dist/devices/temperatureControl.js.map +1 -0
  98. package/dist/devices/waterHeater.d.ts +111 -0
  99. package/dist/devices/waterHeater.d.ts.map +1 -0
  100. package/dist/devices/waterHeater.js +82 -2
  101. package/dist/devices/waterHeater.js.map +1 -0
  102. package/dist/dgram/coap.d.ts +205 -0
  103. package/dist/dgram/coap.d.ts.map +1 -0
  104. package/dist/dgram/coap.js +126 -13
  105. package/dist/dgram/coap.js.map +1 -0
  106. package/dist/dgram/dgram.d.ts +141 -0
  107. package/dist/dgram/dgram.d.ts.map +1 -0
  108. package/dist/dgram/dgram.js +114 -2
  109. package/dist/dgram/dgram.js.map +1 -0
  110. package/dist/dgram/mb_coap.d.ts +24 -0
  111. package/dist/dgram/mb_coap.d.ts.map +1 -0
  112. package/dist/dgram/mb_coap.js +41 -3
  113. package/dist/dgram/mb_coap.js.map +1 -0
  114. package/dist/dgram/mb_mdns.d.ts +24 -0
  115. package/dist/dgram/mb_mdns.d.ts.map +1 -0
  116. package/dist/dgram/mb_mdns.js +80 -15
  117. package/dist/dgram/mb_mdns.js.map +1 -0
  118. package/dist/dgram/mdns.d.ts +290 -0
  119. package/dist/dgram/mdns.d.ts.map +1 -0
  120. package/dist/dgram/mdns.js +299 -137
  121. package/dist/dgram/mdns.js.map +1 -0
  122. package/dist/dgram/multicast.d.ts +67 -0
  123. package/dist/dgram/multicast.d.ts.map +1 -0
  124. package/dist/dgram/multicast.js +62 -1
  125. package/dist/dgram/multicast.js.map +1 -0
  126. package/dist/dgram/unicast.d.ts +56 -0
  127. package/dist/dgram/unicast.d.ts.map +1 -0
  128. package/dist/dgram/unicast.js +54 -0
  129. package/dist/dgram/unicast.js.map +1 -0
  130. package/dist/frontend.d.ts +238 -0
  131. package/dist/frontend.d.ts.map +1 -0
  132. package/dist/frontend.js +455 -35
  133. package/dist/frontend.js.map +1 -0
  134. package/dist/frontendTypes.d.ts +529 -0
  135. package/dist/frontendTypes.d.ts.map +1 -0
  136. package/dist/frontendTypes.js +45 -0
  137. package/dist/frontendTypes.js.map +1 -0
  138. package/dist/helpers.d.ts +48 -0
  139. package/dist/helpers.d.ts.map +1 -0
  140. package/dist/helpers.js +53 -0
  141. package/dist/helpers.js.map +1 -0
  142. package/dist/index.d.ts +34 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +25 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/jestutils/export.d.ts +2 -0
  147. package/dist/jestutils/export.d.ts.map +1 -0
  148. package/dist/jestutils/export.js +1 -0
  149. package/dist/jestutils/export.js.map +1 -0
  150. package/dist/jestutils/jestHelpers.d.ts +345 -0
  151. package/dist/jestutils/jestHelpers.d.ts.map +1 -0
  152. package/dist/jestutils/jestHelpers.js +371 -14
  153. package/dist/jestutils/jestHelpers.js.map +1 -0
  154. package/dist/logger/export.d.ts +2 -0
  155. package/dist/logger/export.d.ts.map +1 -0
  156. package/dist/logger/export.js +1 -0
  157. package/dist/logger/export.js.map +1 -0
  158. package/dist/matter/behaviors.d.ts +2 -0
  159. package/dist/matter/behaviors.d.ts.map +1 -0
  160. package/dist/matter/behaviors.js +2 -0
  161. package/dist/matter/behaviors.js.map +1 -0
  162. package/dist/matter/clusters.d.ts +2 -0
  163. package/dist/matter/clusters.d.ts.map +1 -0
  164. package/dist/matter/clusters.js +2 -0
  165. package/dist/matter/clusters.js.map +1 -0
  166. package/dist/matter/devices.d.ts +2 -0
  167. package/dist/matter/devices.d.ts.map +1 -0
  168. package/dist/matter/devices.js +2 -0
  169. package/dist/matter/devices.js.map +1 -0
  170. package/dist/matter/endpoints.d.ts +2 -0
  171. package/dist/matter/endpoints.d.ts.map +1 -0
  172. package/dist/matter/endpoints.js +2 -0
  173. package/dist/matter/endpoints.js.map +1 -0
  174. package/dist/matter/export.d.ts +5 -0
  175. package/dist/matter/export.d.ts.map +1 -0
  176. package/dist/matter/export.js +3 -0
  177. package/dist/matter/export.js.map +1 -0
  178. package/dist/matter/types.d.ts +3 -0
  179. package/dist/matter/types.d.ts.map +1 -0
  180. package/dist/matter/types.js +3 -0
  181. package/dist/matter/types.js.map +1 -0
  182. package/dist/matterNode.d.ts +342 -0
  183. package/dist/matterNode.d.ts.map +1 -0
  184. package/dist/matterNode.js +369 -8
  185. package/dist/matterNode.js.map +1 -0
  186. package/dist/matterbridge.d.ts +492 -0
  187. package/dist/matterbridge.d.ts.map +1 -0
  188. package/dist/matterbridge.js +811 -46
  189. package/dist/matterbridge.js.map +1 -0
  190. package/dist/matterbridgeAccessoryPlatform.d.ts +41 -0
  191. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  192. package/dist/matterbridgeAccessoryPlatform.js +38 -0
  193. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  194. package/dist/matterbridgeBehaviors.d.ts +2404 -0
  195. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  196. package/dist/matterbridgeBehaviors.js +68 -5
  197. package/dist/matterbridgeBehaviors.js.map +1 -0
  198. package/dist/matterbridgeDeviceTypes.d.ts +698 -0
  199. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  200. package/dist/matterbridgeDeviceTypes.js +635 -14
  201. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  202. package/dist/matterbridgeDynamicPlatform.d.ts +41 -0
  203. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  204. package/dist/matterbridgeDynamicPlatform.js +38 -0
  205. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  206. package/dist/matterbridgeEndpoint.d.ts +1507 -0
  207. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  208. package/dist/matterbridgeEndpoint.js +1444 -53
  209. package/dist/matterbridgeEndpoint.js.map +1 -0
  210. package/dist/matterbridgeEndpointHelpers.d.ts +787 -0
  211. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  212. package/dist/matterbridgeEndpointHelpers.js +483 -20
  213. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  214. package/dist/matterbridgeEndpointTypes.d.ts +166 -0
  215. package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
  216. package/dist/matterbridgeEndpointTypes.js +25 -0
  217. package/dist/matterbridgeEndpointTypes.js.map +1 -0
  218. package/dist/matterbridgePlatform.d.ts +539 -0
  219. package/dist/matterbridgePlatform.d.ts.map +1 -0
  220. package/dist/matterbridgePlatform.js +451 -1
  221. package/dist/matterbridgePlatform.js.map +1 -0
  222. package/dist/matterbridgeTypes.d.ts +251 -0
  223. package/dist/matterbridgeTypes.d.ts.map +1 -0
  224. package/dist/matterbridgeTypes.js +26 -0
  225. package/dist/matterbridgeTypes.js.map +1 -0
  226. package/dist/pluginManager.d.ts +372 -0
  227. package/dist/pluginManager.d.ts.map +1 -0
  228. package/dist/pluginManager.js +341 -5
  229. package/dist/pluginManager.js.map +1 -0
  230. package/dist/shelly.d.ts +181 -0
  231. package/dist/shelly.d.ts.map +1 -0
  232. package/dist/shelly.js +178 -7
  233. package/dist/shelly.js.map +1 -0
  234. package/dist/storage/export.d.ts +2 -0
  235. package/dist/storage/export.d.ts.map +1 -0
  236. package/dist/storage/export.js +1 -0
  237. package/dist/storage/export.js.map +1 -0
  238. package/dist/update.d.ts +84 -0
  239. package/dist/update.d.ts.map +1 -0
  240. package/dist/update.js +93 -1
  241. package/dist/update.js.map +1 -0
  242. package/dist/utils/colorUtils.d.ts +101 -0
  243. package/dist/utils/colorUtils.d.ts.map +1 -0
  244. package/dist/utils/colorUtils.js +97 -2
  245. package/dist/utils/colorUtils.js.map +1 -0
  246. package/dist/utils/commandLine.d.ts +66 -0
  247. package/dist/utils/commandLine.d.ts.map +1 -0
  248. package/dist/utils/commandLine.js +60 -0
  249. package/dist/utils/commandLine.js.map +1 -0
  250. package/dist/utils/copyDirectory.d.ts +35 -0
  251. package/dist/utils/copyDirectory.d.ts.map +1 -0
  252. package/dist/utils/copyDirectory.js +37 -0
  253. package/dist/utils/copyDirectory.js.map +1 -0
  254. package/dist/utils/createDirectory.d.ts +34 -0
  255. package/dist/utils/createDirectory.d.ts.map +1 -0
  256. package/dist/utils/createDirectory.js +33 -0
  257. package/dist/utils/createDirectory.js.map +1 -0
  258. package/dist/utils/createZip.d.ts +39 -0
  259. package/dist/utils/createZip.d.ts.map +1 -0
  260. package/dist/utils/createZip.js +47 -2
  261. package/dist/utils/createZip.js.map +1 -0
  262. package/dist/utils/deepCopy.d.ts +32 -0
  263. package/dist/utils/deepCopy.d.ts.map +1 -0
  264. package/dist/utils/deepCopy.js +39 -0
  265. package/dist/utils/deepCopy.js.map +1 -0
  266. package/dist/utils/deepEqual.d.ts +54 -0
  267. package/dist/utils/deepEqual.d.ts.map +1 -0
  268. package/dist/utils/deepEqual.js +72 -1
  269. package/dist/utils/deepEqual.js.map +1 -0
  270. package/dist/utils/error.d.ts +45 -0
  271. package/dist/utils/error.d.ts.map +1 -0
  272. package/dist/utils/error.js +42 -0
  273. package/dist/utils/error.js.map +1 -0
  274. package/dist/utils/export.d.ts +13 -0
  275. package/dist/utils/export.d.ts.map +1 -0
  276. package/dist/utils/export.js +1 -0
  277. package/dist/utils/export.js.map +1 -0
  278. package/dist/utils/format.d.ts +53 -0
  279. package/dist/utils/format.d.ts.map +1 -0
  280. package/dist/utils/format.js +49 -0
  281. package/dist/utils/format.js.map +1 -0
  282. package/dist/utils/hex.d.ts +89 -0
  283. package/dist/utils/hex.d.ts.map +1 -0
  284. package/dist/utils/hex.js +124 -0
  285. package/dist/utils/hex.js.map +1 -0
  286. package/dist/utils/inspector.d.ts +87 -0
  287. package/dist/utils/inspector.d.ts.map +1 -0
  288. package/dist/utils/inspector.js +69 -1
  289. package/dist/utils/inspector.js.map +1 -0
  290. package/dist/utils/isvalid.d.ts +103 -0
  291. package/dist/utils/isvalid.d.ts.map +1 -0
  292. package/dist/utils/isvalid.js +101 -0
  293. package/dist/utils/isvalid.js.map +1 -0
  294. package/dist/utils/network.d.ts +111 -0
  295. package/dist/utils/network.d.ts.map +1 -0
  296. package/dist/utils/network.js +96 -5
  297. package/dist/utils/network.js.map +1 -0
  298. package/dist/utils/spawn.d.ts +33 -0
  299. package/dist/utils/spawn.d.ts.map +1 -0
  300. package/dist/utils/spawn.js +71 -1
  301. package/dist/utils/spawn.js.map +1 -0
  302. package/dist/utils/tracker.d.ts +108 -0
  303. package/dist/utils/tracker.d.ts.map +1 -0
  304. package/dist/utils/tracker.js +64 -1
  305. package/dist/utils/tracker.js.map +1 -0
  306. package/dist/utils/wait.d.ts +54 -0
  307. package/dist/utils/wait.d.ts.map +1 -0
  308. package/dist/utils/wait.js +60 -8
  309. package/dist/utils/wait.js.map +1 -0
  310. package/dist/workerGlobalPrefix.d.ts +25 -0
  311. package/dist/workerGlobalPrefix.d.ts.map +1 -0
  312. package/dist/workerGlobalPrefix.js +37 -5
  313. package/dist/workerGlobalPrefix.js.map +1 -0
  314. package/dist/workerTypes.d.ts +52 -0
  315. package/dist/workerTypes.d.ts.map +1 -0
  316. package/dist/workerTypes.js +24 -0
  317. package/dist/workerTypes.js.map +1 -0
  318. package/dist/workers.d.ts +69 -0
  319. package/dist/workers.d.ts.map +1 -0
  320. package/dist/workers.js +68 -4
  321. package/dist/workers.js.map +1 -0
  322. package/npm-shrinkwrap.json +2 -2
  323. package/package.json +2 -1
  324. package/scripts/data_model.mjs +2058 -0
@@ -1,6 +1,32 @@
1
+ /**
2
+ * This file contains the matter device type definitions for MatterbridgeEndpoint.
3
+ *
4
+ * @file matterbridgeDeviceTypes.ts
5
+ * @author Luca Liguori
6
+ * @created 2024-11-08
7
+ * @version 1.0.0
8
+ * @license Apache-2.0
9
+ *
10
+ * Copyright 2024, 2025, 2026 Luca Liguori.
11
+ *
12
+ * Licensed under the Apache License, Version 2.0 (the "License");
13
+ * you may not use this file except in compliance with the License.
14
+ * You may obtain a copy of the License at
15
+ *
16
+ * http://www.apache.org/licenses/LICENSE-2.0
17
+ *
18
+ * Unless required by applicable law or agreed to in writing, software
19
+ * distributed under the License is distributed on an "AS IS" BASIS,
20
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
+ * See the License for the specific language governing permissions and
22
+ * limitations under the License.
23
+ */
24
+ // eslint-disable-next-line no-console
1
25
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
2
26
  console.log('\u001B[32mMatterbridgeDeviceTypes loaded.\u001B[40;0m');
27
+ // @matter
3
28
  import { DeviceTypeId } from '@matter/types/datatype';
29
+ // @matter clusters
4
30
  import { AccountLogin } from '@matter/types/clusters/account-login';
5
31
  import { Actions } from '@matter/types/clusters/actions';
6
32
  import { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
@@ -88,15 +114,49 @@ import { WindowCovering } from '@matter/types/clusters/window-covering';
88
114
  import { ScenesManagement } from '@matter/types/clusters/scenes-management';
89
115
  export var DeviceClasses;
90
116
  (function (DeviceClasses) {
117
+ /** 1.1.5. Device Type Class Conditions */
118
+ /** Node device type. */
91
119
  DeviceClasses["Node"] = "Node";
120
+ /**
121
+ * Application device type.
122
+ * Application devices types are typically the most datatype endpoints on a node and in the network.
123
+ */
92
124
  DeviceClasses["App"] = "App";
125
+ /**
126
+ * Utility device type.
127
+ * A Utility device type supports configuration and settings.
128
+ */
93
129
  DeviceClasses["Utility"] = "Utility";
130
+ /**
131
+ * Simple device type.
132
+ * A Simple device type supports local control that is persistent, independent, and unsupervised.
133
+ */
94
134
  DeviceClasses["Simple"] = "Simple";
135
+ /**
136
+ * Dynamic device type.
137
+ * A Dynamic device type supports intelligent and supervisory services, such as commissioning,
138
+ * monitoring, trend analysis, scheduling and central management. A dynamic device type is an
139
+ * application device type.
140
+ */
95
141
  DeviceClasses["Dynamic"] = "Dynamic";
142
+ /** The device type is composed of 2 or more device types. */
96
143
  DeviceClasses["Composed"] = "Composed";
144
+ /** 1.1.6. Endpoint Type Class Conditions */
145
+ /** There exists a client application cluster on the endpoint. */
97
146
  DeviceClasses["Client"] = "Client";
147
+ /** There exists a server application cluster on the endpoint. */
98
148
  DeviceClasses["Server"] = "Server";
149
+ /**
150
+ * The endpoint and at least one of its sibling endpoints have an overlap in application device type(s),
151
+ * as defined in the "Disambiguation" section in the System Model specification. This condition triggers
152
+ * requirements for providing additional information about the endpoints in order to disambiguate
153
+ * between the endpoints (see "Disambiguation" section in the System Model specification).
154
+ */
99
155
  DeviceClasses["Duplicate"] = "Duplicate";
156
+ /**
157
+ * The endpoint represents a Bridged Device, for which information about the state of
158
+ * its power source is available to the Bridge
159
+ */
100
160
  DeviceClasses["BridgedPowerSourceInfo"] = "BridgedPowerSourceInfo";
101
161
  })(DeviceClasses || (DeviceClasses = {}));
102
162
  export const DeviceTypeDefinition = ({ name, code, deviceClass, revision, requiredServerClusters = [], optionalServerClusters = [], requiredClientClusters = [], optionalClientClusters = [], }) => ({
@@ -109,13 +169,14 @@ export const DeviceTypeDefinition = ({ name, code, deviceClass, revision, requir
109
169
  requiredClientClusters,
110
170
  optionalClientClusters,
111
171
  });
172
+ // Chapter 2. Utility device types
112
173
  export const rootNode = DeviceTypeDefinition({
113
174
  name: 'MA-rootNode',
114
175
  code: 0x0016,
115
176
  deviceClass: DeviceClasses.Node,
116
177
  revision: 3,
117
- requiredServerClusters: [],
118
- optionalServerClusters: [],
178
+ requiredServerClusters: [], // Intentionally left empty to avoid imports
179
+ optionalServerClusters: [], // Intentionally left empty to avoid imports
119
180
  });
120
181
  export const powerSource = DeviceTypeDefinition({
121
182
  name: 'MA-powerSource',
@@ -145,14 +206,46 @@ export const OTAProvider = DeviceTypeDefinition({
145
206
  requiredClientClusters: [OtaSoftwareUpdateRequestor.Cluster.id],
146
207
  optionalClientClusters: [],
147
208
  });
209
+ /**
210
+ 2.5.3. Conditions
211
+ Please see the Base Device Type definition for conformance tags.
212
+ This device type SHALL only be used for Nodes which have a device type of Bridge.
213
+
214
+ 2.5.5. Cluster Requirements
215
+ Each endpoint supporting this device type SHALL include these clusters based on the conformance
216
+ defined below.
217
+ - 0x0039 Bridged Device Basic Information Server
218
+
219
+ 2.5.6. Endpoint Composition
220
+ • A Bridged Node endpoint SHALL support one of the following composition patterns:
221
+ ◦ Separate Endpoints: All application device types are supported on separate endpoints, and
222
+ not on the Bridged Node endpoint. The Bridged Node endpoint’s Descriptor cluster PartsList
223
+ attribute SHALL indicate a list of all endpoints representing the functionality of the bridged
224
+ device, including the endpoints supporting the application device types, i.e. the full-family
225
+ pattern defined in the System Model specification.
226
+ ◦ One Endpoint: Both the Bridged Node and one or more application device types are supported
227
+ on the same endpoint (following application device type rules). Endpoint composition
228
+ SHALL conform to the application device type(s) definition.
229
+ */
148
230
  export const bridgedNode = DeviceTypeDefinition({
149
231
  name: 'MA-bridgedNode',
150
232
  code: 0x0013,
151
233
  deviceClass: DeviceClasses.Utility,
152
234
  revision: 3,
153
- requiredServerClusters: [BridgedDeviceBasicInformation.Cluster.id],
235
+ requiredServerClusters: [BridgedDeviceBasicInformation.Cluster.id], // omitted PowerSourceConfiguration cause is deprecated
154
236
  optionalServerClusters: [PowerSource.Cluster.id, EcosystemInformation.Cluster.id, AdministratorCommissioning.Cluster.id],
155
237
  });
238
+ /**
239
+ * An Electrical Sensor device measures the electrical power and/or energy being imported and/or
240
+ * exported.
241
+ * It is a utility device type that provides information about the electrical power and/or energy
242
+ * consumption and generation.
243
+ *
244
+ * 2.6.3. Device Type Requirements
245
+ * Electrical measurements made by either the Electrical Power Measurement cluster, the Electrical
246
+ * Energy Measurement cluster, or both SHALL apply to the endpoints indicated by the Power Topology
247
+ * cluster.
248
+ */
156
249
  export const electricalSensor = DeviceTypeDefinition({
157
250
  name: 'MA-electricalSensor',
158
251
  code: 0x0510,
@@ -161,6 +254,10 @@ export const electricalSensor = DeviceTypeDefinition({
161
254
  requiredServerClusters: [PowerTopology.Cluster.id],
162
255
  optionalServerClusters: [ElectricalPowerMeasurement.Cluster.id, ElectricalEnergyMeasurement.Cluster.id],
163
256
  });
257
+ /**
258
+ * A Device Energy Management device provides reporting and optionally adjustment of the electrical
259
+ * power planned on being consumed or produced by the device.
260
+ */
164
261
  export const deviceEnergyManagement = DeviceTypeDefinition({
165
262
  name: 'MA-deviceEnergyManagement',
166
263
  code: 0x050d,
@@ -169,70 +266,188 @@ export const deviceEnergyManagement = DeviceTypeDefinition({
169
266
  requiredServerClusters: [DeviceEnergyManagement.Cluster.id],
170
267
  optionalServerClusters: [DeviceEnergyManagementMode.Cluster.id],
171
268
  });
269
+ /** Chapter 3. Application Device Types */
270
+ /** Chapter 4. Lighting device types */
271
+ /**
272
+ * Element Requirements:
273
+ * - Identify Command TriggerEffect
274
+ * - Scenes Management Command CopyScene
275
+ * - On/Off Feature Lighting
276
+ * - Level Control Feature OnOff
277
+ * - Level Control Feature Lighting
278
+ * - Level Control Attribute CurrentLevel 1 to 254
279
+ * - Level Control Attribute MinLevel 1
280
+ * - Level Control Attribute MaxLevel 254
281
+ */
172
282
  export const onOffLight = DeviceTypeDefinition({
173
283
  name: 'MA-onofflight',
174
284
  code: 0x0100,
175
285
  deviceClass: DeviceClasses.Simple,
176
286
  revision: 3,
177
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
287
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
178
288
  optionalServerClusters: [LevelControl.Cluster.id],
179
289
  });
290
+ /**
291
+ * Element Requirements:
292
+ * - Identify Command TriggerEffect
293
+ * - Scenes Management Command CopyScene
294
+ * - On/Off Feature Lighting
295
+ * - Level Control Feature OnOff
296
+ * - Level Control Feature Lighting
297
+ * - Level Control Attribute CurrentLevel 1 to 254
298
+ * - Level Control Attribute MinLevel 1
299
+ * - Level Control Attribute MaxLevel 254
300
+ */
180
301
  export const dimmableLight = DeviceTypeDefinition({
181
302
  name: 'MA-dimmablelight',
182
303
  code: 0x0101,
183
304
  deviceClass: DeviceClasses.Simple,
184
305
  revision: 3,
185
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
306
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
186
307
  optionalServerClusters: [],
187
308
  });
309
+ /**
310
+ * Element Requirements:
311
+ * - Identify Command TriggerEffect
312
+ * - Scenes Management Command CopyScene
313
+ * - On/Off Feature Lighting
314
+ * - Level Control Feature OnOff
315
+ * - Level Control Feature Lighting
316
+ * - Level Control Attribute CurrentLevel 1 to 254
317
+ * - Level Control Attribute MinLevel 1
318
+ * - Level Control Attribute MaxLevel 254
319
+ * - Color Control Feature ColorTemperature
320
+ * - Color Control Attribute RemainingTime
321
+ */
188
322
  export const colorTemperatureLight = DeviceTypeDefinition({
189
323
  name: 'MA-colortemperaturelight',
190
324
  code: 0x010c,
191
325
  deviceClass: DeviceClasses.Simple,
192
326
  revision: 4,
193
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
327
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
194
328
  optionalServerClusters: [],
195
329
  });
330
+ /**
331
+ * Element Requirements:
332
+ * - Identify Command TriggerEffect
333
+ * - Scenes Management Command CopyScene
334
+ * - On/Off Feature Lighting
335
+ * - Level Control Feature OnOff
336
+ * - Level Control Feature Lighting
337
+ * - Level Control Attribute CurrentLevel 1 to 254
338
+ * - Level Control Attribute MinLevel 1
339
+ * - Level Control Attribute MaxLevel 254
340
+ * - Color Control Feature XY
341
+ * - Color Control Feature ColorTemperature
342
+ * - Color Control Attribute RemainingTime
343
+ */
196
344
  export const extendedColorLight = DeviceTypeDefinition({
197
345
  name: 'MA-extendedcolorlight',
198
346
  code: 0x010d,
199
347
  deviceClass: DeviceClasses.Simple,
200
348
  revision: 4,
201
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
349
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
202
350
  optionalServerClusters: [],
203
351
  });
352
+ // Chapter 5. Smart plugs/Outlets and other Actuators device types
353
+ /**
354
+ * Element Requirements:
355
+ * - Identify Command TriggerEffect
356
+ * - Scenes Management Command CopyScene
357
+ * - On/Off Feature Lighting
358
+ * - Level Control Feature OnOff
359
+ * - Level Control Feature Lighting
360
+ * - Level Control Attribute CurrentLevel 1 to 254
361
+ * - Level Control Attribute MinLevel 1
362
+ * - Level Control Attribute MaxLevel 254
363
+ */
204
364
  export const onOffOutlet = DeviceTypeDefinition({
205
365
  name: 'MA-onoffpluginunit',
206
366
  code: 0x010a,
207
367
  deviceClass: DeviceClasses.Simple,
208
368
  revision: 3,
209
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
369
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
210
370
  optionalServerClusters: [LevelControl.Cluster.id],
211
371
  });
372
+ /**
373
+ * Element Requirements:
374
+ * - Identify Command TriggerEffect
375
+ * - Scenes Management Command CopyScene
376
+ * - On/Off Feature Lighting
377
+ * - Level Control Feature OnOff
378
+ * - Level Control Feature Lighting
379
+ * - Level Control Attribute CurrentLevel 1 to 254
380
+ * - Level Control Attribute MinLevel 1
381
+ * - Level Control Attribute MaxLevel 254
382
+ */
212
383
  export const dimmableOutlet = DeviceTypeDefinition({
213
384
  name: 'MA-dimmablepluginunit',
214
385
  code: 0x010b,
215
386
  deviceClass: DeviceClasses.Simple,
216
387
  revision: 4,
217
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
388
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
218
389
  optionalServerClusters: [],
219
390
  });
391
+ /**
392
+ * A Mounted On/Off Control is a fixed device that provides power to another device that is plugged
393
+ * into it, and is capable of switching that provided power on or off.
394
+ * It is a simple device type that does not require any client clusters.
395
+ * Element Requirements:
396
+ * - Identify Command TriggerEffect
397
+ * - Scenes Management Command CopyScene
398
+ * - On/Off Feature Lighting
399
+ * - Level Control Feature OnOff
400
+ * - Level Control Feature Lighting
401
+ * - Level Control Attribute CurrentLevel 1 to 254
402
+ * - Level Control Attribute MinLevel 1
403
+ * - Level Control Attribute MaxLevel 254
404
+ */
220
405
  export const onOffMountedSwitch = DeviceTypeDefinition({
221
406
  name: 'MA-onoffmountedswitch',
222
407
  code: 0x010f,
223
408
  deviceClass: DeviceClasses.Simple,
224
409
  revision: 1,
225
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
410
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
226
411
  optionalServerClusters: [LevelControl.Cluster.id],
227
412
  });
413
+ /**
414
+ * A Mounted Dimmable Load Control is a fixed device that provides power to another device that is
415
+ * plugged into it, and is capable of being switched on or off and have its level adjusted. The Mounted
416
+ * Dimmable Load Control is typically used to control a conventional non-communicating light
417
+ * through its mains connection using phase cutting.
418
+ * It is a simple device type that does not require any client clusters.
419
+ * Element Requirements:
420
+ * - Identify Command TriggerEffect
421
+ * - Scenes Management Command CopyScene
422
+ * - On/Off Feature Lighting
423
+ * - Level Control Feature OnOff
424
+ * - Level Control Feature Lighting
425
+ * - Level Control Attribute CurrentLevel 1 to 254
426
+ * - Level Control Attribute MinLevel 1
427
+ * - Level Control Attribute MaxLevel 254
428
+ */
228
429
  export const dimmableMountedSwitch = DeviceTypeDefinition({
229
430
  name: 'MA-dimmablemountedswitch',
230
431
  code: 0x0110,
231
432
  deviceClass: DeviceClasses.Simple,
232
433
  revision: 1,
233
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
434
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
234
435
  optionalServerClusters: [],
235
436
  });
437
+ /**
438
+ * Remark:
439
+ * On/Off Cluster:
440
+ * - Off If the pump is powered on, store the current level then immediately power it off.
441
+ * - On If the pump is powered off, power it on and move immediately to the level stored by a previous Off command. If no such level has been stored,
442
+ * move immediately to the maximum level allowed for the pump.
443
+ * - Toggle If the pump is powered on, proceed as for the Off command. If the device is powered off, proceed as for the On command.
444
+ *
445
+ * LevelControl cluster:
446
+ * Level Setpoint Meaning
447
+ * 0 N/A Pump is stopped,
448
+ * 1–200 Level / 2 (0.5–100.0%) Pump setpoint in percent
449
+ * 201–255 100.0% Pump setpoint is 100.0%
450
+ */
236
451
  export const pumpDevice = DeviceTypeDefinition({
237
452
  name: 'MA-pump',
238
453
  code: 0x303,
@@ -249,6 +464,8 @@ export const waterValve = DeviceTypeDefinition({
249
464
  requiredServerClusters: [Identify.Cluster.id, ValveConfigurationAndControl.Cluster.id],
250
465
  optionalServerClusters: [FlowMeasurement.Cluster.id],
251
466
  });
467
+ // Chapter 6. Switches and Controls device types
468
+ // Custom device types with server cluster instead of client clusters (not working in Alexa)
252
469
  export const onOffSwitch = DeviceTypeDefinition({
253
470
  name: 'MA-onoffswitch',
254
471
  code: 0x0103,
@@ -257,6 +474,7 @@ export const onOffSwitch = DeviceTypeDefinition({
257
474
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id],
258
475
  optionalServerClusters: [Groups.Cluster.id, ScenesManagement.Cluster.id],
259
476
  });
477
+ // Custom device types with server cluster instead of client clusters (not working in Alexa)
260
478
  export const dimmableSwitch = DeviceTypeDefinition({
261
479
  name: 'MA-dimmableswitch',
262
480
  code: 0x0104,
@@ -265,6 +483,7 @@ export const dimmableSwitch = DeviceTypeDefinition({
265
483
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
266
484
  optionalServerClusters: [Groups.Cluster.id, ScenesManagement.Cluster.id],
267
485
  });
486
+ // Custom device types with server cluster instead of client clusters (not working in Alexa)
268
487
  export const colorTemperatureSwitch = DeviceTypeDefinition({
269
488
  name: 'MA-colortemperatureswitch',
270
489
  code: 0x0105,
@@ -281,6 +500,11 @@ export const genericSwitch = DeviceTypeDefinition({
281
500
  requiredServerClusters: [Identify.Cluster.id, Switch.Cluster.id],
282
501
  optionalServerClusters: [],
283
502
  });
503
+ // Chapter 7. Sensor device types
504
+ /**
505
+ * Closed or contact: state true
506
+ * Open or no contact: state false
507
+ */
284
508
  export const contactSensor = DeviceTypeDefinition({
285
509
  name: 'MA-contactsensor',
286
510
  code: 0x0015,
@@ -332,6 +556,7 @@ export const humiditySensor = DeviceTypeDefinition({
332
556
  revision: 2,
333
557
  requiredServerClusters: [Identify.Cluster.id, RelativeHumidityMeasurement.Cluster.id],
334
558
  });
559
+ // Remark: A Smoke CO Alarm device type SHALL support an instance of a Power Source device type on some endpoint.
335
560
  export const smokeCoAlarm = DeviceTypeDefinition({
336
561
  name: 'MA-smokeCoAlarm',
337
562
  code: 0x0076,
@@ -385,6 +610,15 @@ export const rainSensor = DeviceTypeDefinition({
385
610
  requiredServerClusters: [Identify.Cluster.id, BooleanState.Cluster.id],
386
611
  optionalServerClusters: [BooleanStateConfiguration.Cluster.id],
387
612
  });
613
+ // Chapter 8. Closures device types
614
+ /**
615
+ * A Door Lock is a device used to secure a door. It is possible to actuate a door lock either by means of a manual or a remote method.
616
+ * Element Requirements:
617
+ *
618
+ * - AccessControl Attribute Extension
619
+ * - DoorLock Feature User
620
+ * - DoorLock Attribute AlarmMask
621
+ */
388
622
  export const doorLockDevice = DeviceTypeDefinition({
389
623
  name: 'MA-doorLock',
390
624
  code: 0xa,
@@ -401,6 +635,15 @@ export const coverDevice = DeviceTypeDefinition({
401
635
  requiredServerClusters: [Identify.Cluster.id, WindowCovering.Cluster.id],
402
636
  optionalServerClusters: [Groups.Cluster.id],
403
637
  });
638
+ // Chapter 9. HVAC device types
639
+ /**
640
+ * A Thermostat device is capable of having either built-in or separate sensors for temperature,
641
+ * humidity or occupancy. It allows the desired temperature to be set either remotely or locally. The
642
+ * thermostat is capable of sending heating and/or cooling requirement notifications to a heating/cooling
643
+ * unit (for example, an indoor air handler) or is capable of including a mechanism to control a
644
+ * heating or cooling unit directly.
645
+ *
646
+ */
404
647
  export const thermostatDevice = DeviceTypeDefinition({
405
648
  name: 'MA-thermostat',
406
649
  code: 0x301,
@@ -409,6 +652,25 @@ export const thermostatDevice = DeviceTypeDefinition({
409
652
  requiredServerClusters: [Identify.Cluster.id, Thermostat.Cluster.id],
410
653
  optionalServerClusters: [Groups.Cluster.id, ThermostatUserInterfaceConfiguration.Cluster.id, EnergyPreference.Cluster.id],
411
654
  });
655
+ /**
656
+ * A Fan device is typically standalone or mounted on a ceiling or wall and is used to circulate air in a room.
657
+ * Remark: it may have a thermostat device type.
658
+ * Additional device types MAY also be included in device compositions.
659
+ * Element Requirements:
660
+ * The FanControl cluster must have the FanModeSequence attribute.
661
+ *
662
+ * The On/Off cluster is independent from the Fan Control Cluster’s FanMode attribute, which also
663
+ * includes an Off setting.
664
+ * If the FanMode attribute of the Fan Control cluster is set to a value other than Off when the OnOff
665
+ * attribute of the On/Off cluster transitions from TRUE to FALSE, it may be desirable to restore the
666
+ * FanMode, SpeedSetting and PercentSetting attribute values of the Fan Control cluster when the OnOff
667
+ * attribute of the On/Off cluster later transitions from FALSE to TRUE. If the FanMode is set to Off when
668
+ * the device is turned off, this information is lost, as the SpeedSetting and PercentSetting will be set to
669
+ * zero. Using the On/Off cluster alongside the Fan Control cluster allows the FanMode, SpeedSetting and
670
+ * PercentSetting to remain unchanged when the device is turned off. In this case, the On/Off cluster
671
+ * would be set to Off, and the SpeedCurrent and PercentCurrent set to zero, without changing FanMode,
672
+ * SpeedSetting and PercentSetting.
673
+ */
412
674
  export const fanDevice = DeviceTypeDefinition({
413
675
  name: 'MA-fan',
414
676
  code: 0x2b,
@@ -417,6 +679,35 @@ export const fanDevice = DeviceTypeDefinition({
417
679
  requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, FanControl.Cluster.id],
418
680
  optionalServerClusters: [OnOff.Cluster.id],
419
681
  });
682
+ /**
683
+ * An Air Purifier is a standalone device that is designed to clean the air in a room.
684
+ * It is a device that has a fan to control the air speed while it is operating. Optionally, it can report on
685
+ * the condition of its filters.
686
+ *
687
+ * Remark:
688
+ * An Air Purifier MAY expose elements of its functionality through one or more additional device
689
+ * types on different endpoints. All devices used in compositions SHALL adhere to the disambiguation
690
+ * requirements of the System Model. Other device types, not explicitly listed in the table, MAY also be
691
+ * included in device compositions but are not considered part of the core functionality of the device.
692
+ * 0x0301 Thermostat O
693
+ * 0x0302 Temperature Sensor O
694
+ * 0x0307 Humidity Sensor O
695
+ * 0x002C Air Quality Sensor O
696
+ *
697
+ * Cluster Restrictions:
698
+ * The On/Off cluster is independent from the Fan Control Cluster’s FanMode attribute, which also
699
+ * includes an Off setting.
700
+ * If the FanMode attribute of the Fan Control cluster is set to a value other than Off when the OnOff
701
+ * attribute of the On/Off cluster transitions from TRUE to FALSE, it may be desirable to restore the
702
+ * FanMode, SpeedSetting and PercentSetting attribute values of the Fan Control cluster when the OnOff
703
+ * attribute of the On/Off cluster later transitions from FALSE to TRUE. If the FanMode is set to Off when
704
+ * the device is turned off, this information is lost, as the SpeedSetting and PercentSetting will be set to
705
+ * zero. Using the On/Off cluster alongside the Fan Control cluster allows the FanMode, SpeedSetting and
706
+ * PercentSetting to remain unchanged when the device is turned off. In this case, the On/Off cluster
707
+ * would be set to Off, and the SpeedCurrent and PercentCurrent set to zero, without changing FanMode,
708
+ * SpeedSetting and PercentSetting.
709
+ *
710
+ */
420
711
  export const airPurifier = DeviceTypeDefinition({
421
712
  name: 'MA-airPurifier',
422
713
  code: 0x2d,
@@ -425,6 +716,26 @@ export const airPurifier = DeviceTypeDefinition({
425
716
  requiredServerClusters: [Identify.Cluster.id, FanControl.Cluster.id],
426
717
  optionalServerClusters: [Groups.Cluster.id, OnOff.Cluster.id, HepaFilterMonitoring.Cluster.id, ActivatedCarbonFilterMonitoring.Cluster.id],
427
718
  });
719
+ // Chapter 10. Media Device Types
720
+ /**
721
+ * 10.2. A Basic Video Player has playback controls (play, pause, etc.) and keypad remote controls (up, down, number input),
722
+ * but is not able to launch arbitrary content applications. It is a commissionable node.
723
+ *
724
+ * Required server clusters (minimum features per spec):
725
+ * - Media Playback (media playback controls)
726
+ * - Keypad Input (remote key events)
727
+ * - On/Off (basic power control)
728
+ *
729
+ * Optional server clusters (additional capabilities commonly implemented):
730
+ * - Audio Output (speaker selection / volume endpoints)
731
+ * - Channel (linear channel navigation)
732
+ * - Target Navigator (high level app / target navigation)
733
+ * - Media Input (input source selection)
734
+ * - Low Power (power saving / wake logic)
735
+ * - Wake On LAN (remote wake capabilities)
736
+ * - Messages (device messaging / notifications)
737
+ * - Content Control (parental or content access control)
738
+ */
428
739
  export const basicVideoPlayer = DeviceTypeDefinition({
429
740
  name: 'MA-basicVideoPlayer',
430
741
  code: 0x0028,
@@ -433,6 +744,29 @@ export const basicVideoPlayer = DeviceTypeDefinition({
433
744
  requiredServerClusters: [OnOff.Cluster.id, MediaPlayback.Cluster.id, KeypadInput.Cluster.id],
434
745
  optionalServerClusters: [WakeOnLan.Cluster.id, Channel.Cluster.id, TargetNavigator.Cluster.id, MediaInput.Cluster.id, LowPower.Cluster.id, AudioOutput.Cluster.id, ContentControl.Cluster.id, Messages.Cluster.id],
435
746
  });
747
+ /**
748
+ * 10.3. A Casting Video Player supports Basic Video Player features and content launching features.
749
+ * It is a Commissioner and can launch Content Apps (Content Launcher cluster) and optionally expose
750
+ * an Application Launcher cluster when acting as a Content App Platform.
751
+ *
752
+ * Required server clusters (minimum features per spec):
753
+ * - Media Playback (playback controls)
754
+ * - Keypad Input (remote key events)
755
+ * - Content Launcher (content launching capability)
756
+ * - On/Off (basic power control)
757
+ *
758
+ * Optional server clusters (additional capabilities):
759
+ * - Application Launcher (hosting content apps)
760
+ * - Account Login (account / session association)
761
+ * - Audio Output (output / volume endpoints)
762
+ * - Channel (linear channel navigation)
763
+ * - Target Navigator (high level target navigation)
764
+ * - Media Input (input source selection)
765
+ * - Low Power (power saving / wake logic)
766
+ * - Wake On LAN (remote wake capabilities)
767
+ * - Messages (device messaging / notifications)
768
+ * - Content Control (parental or content access control)
769
+ */
436
770
  export const castingVideoPlayer = DeviceTypeDefinition({
437
771
  name: 'MA-castingVideoPlayer',
438
772
  code: 0x0023,
@@ -452,6 +786,12 @@ export const castingVideoPlayer = DeviceTypeDefinition({
452
786
  Messages.Cluster.id,
453
787
  ],
454
788
  });
789
+ /**
790
+ * 10.4. A Speaker device type controls the speaker.
791
+ * unmute/mute, the On/Off cluster SHALL be used. A value of TRUE for the OnOff attribute
792
+ * SHALL represent the volume on (not muted) state, while a value of FALSE SHALL represent the volume
793
+ * off (muted) state. For volume level control, the Level cluster SHALL be used.
794
+ */
455
795
  export const speakerDevice = DeviceTypeDefinition({
456
796
  name: 'MA-speaker',
457
797
  code: 0x0022,
@@ -460,6 +800,7 @@ export const speakerDevice = DeviceTypeDefinition({
460
800
  requiredServerClusters: [OnOff.Cluster.id, LevelControl.Cluster.id],
461
801
  optionalServerClusters: [],
462
802
  });
803
+ // Chapter 11. Generic Device Types
463
804
  export const modeSelect = DeviceTypeDefinition({
464
805
  name: 'MA-modeselect',
465
806
  code: 0x27,
@@ -467,6 +808,37 @@ export const modeSelect = DeviceTypeDefinition({
467
808
  revision: 1,
468
809
  requiredServerClusters: [ModeSelect.Cluster.id],
469
810
  });
811
+ /**
812
+ * This device type aggregates endpoints as a collection. Clusters on the endpoint indicating this
813
+ * device type provide functionality for the collection of descendant endpoints present in the PartsList
814
+ * of the endpoint’s descriptor, for example the Actions cluster.
815
+ *
816
+ * Endpoint Composition:
817
+ * An Aggregator endpoint’s Descriptor cluster PartsList attribute SHALL list the collection of all endpoints
818
+ * aggregated by the Aggregator device type, i.e. the full-family pattern defined in the System Model specification.
819
+ *
820
+ * Disambiguation:
821
+ * If the Duplicate condition applies to child endpoints of an Aggregator endpoint that represent multiple
822
+ * independent bridged devices, the endpoints SHOULD make available metadata to allow a
823
+ * client to disambiguate distinct bridged devices with an overlap in application device types.
824
+ *
825
+ * Typically this is done using the NodeLabel attribute of the Bridged Device Basic Information cluster
826
+ * - thus reusing the naming information which the bridge already has to allow disambiguation to the
827
+ * user when using a direct user interface to the bridge.
828
+ *
829
+ * Actions cluster (9.14 Matter specification):
830
+ * If a Bridge has (such) information on topology or logical grouping, it SHOULD expose such information
831
+ * in the EndpointLists attribute of an Actions cluster (the ActionLists of which MAY be empty if
832
+ * no actions are exposed). 9.12 Matter specification
833
+ *
834
+ * 9.12.5. New features for Bridged Devices
835
+ * Bridged Devices can have their software updated independently of the Bridge, through Bridge Manufacturer-
836
+ * specific means. These updates MAY result in one or more changes to their capabilities,
837
+ * such as supported clusters and/or attributes, for an endpoint. Like every Matter Node, every endpoint
838
+ * on the Bridge’s Node contains a Descriptor cluster that contains attributes for the device types
839
+ * (DeviceTypeList), endpoints (PartsList) and supported clusters (ServerList and ClientList). Nodes
840
+ * that wish to be notified of such changes SHOULD monitor changes of these attributes.
841
+ */
470
842
  export const aggregator = DeviceTypeDefinition({
471
843
  name: 'MA-aggregator',
472
844
  code: 0x000e,
@@ -476,6 +848,29 @@ export const aggregator = DeviceTypeDefinition({
476
848
  optionalServerClusters: [Actions.Cluster.id, Identify.Cluster.id, CommissionerControl.Cluster.id],
477
849
  });
478
850
  export const bridge = aggregator;
851
+ // Chapter 12. Robotic Device Types
852
+ /**
853
+ * A Robotic Vacuum Cleaner is a device that is capable of cleaning floors and other surfaces
854
+ * in a home or office environment. It is typically a mobile device that can navigate around
855
+ * obstacles and can be controlled remotely.
856
+ *
857
+ * Cluster Usage:
858
+ * The RVC Operational State cluster’s OperationalState attribute SHALL be updated according to the
859
+ * state of the device, and therefore it SHOULD be used for monitoring purposes.
860
+ *
861
+ * To attempt starting a cleaning operation, the RVC Run Mode cluster can be sent a ChangeToMode
862
+ * command with the NewMode field set to a mode that has the Cleaning mode tag associated with it.
863
+ *
864
+ * To attempt stopping a cleaning operation, the RVC Run Mode cluster can be sent a ChangeToMode
865
+ * command with the NewMode field set to a mode that has the Idle mode tag associated with it.
866
+ *
867
+ * To attempt pausing a cleaning operation, the RVC Operational State cluster can be sent a Pause command.
868
+ *
869
+ * To attempt resuming a cleaning operation, the RVC Operational State cluster can be sent a Resume
870
+ * command.
871
+ *
872
+ *
873
+ */
479
874
  export const roboticVacuumCleaner = DeviceTypeDefinition({
480
875
  name: 'MA-roboticvacuumcleaner',
481
876
  code: 0x74,
@@ -484,6 +879,11 @@ export const roboticVacuumCleaner = DeviceTypeDefinition({
484
879
  requiredServerClusters: [Identify.Cluster.id, RvcRunMode.Cluster.id, RvcOperationalState.Cluster.id],
485
880
  optionalServerClusters: [RvcCleanMode.Cluster.id, ServiceArea.Cluster.id],
486
881
  });
882
+ // Chapter 13. Appliances device types
883
+ /**
884
+ * Cluster Restrictions:
885
+ * On/Off Cluster: the DF (Dead Front) feature is required
886
+ */
487
887
  export const laundryWasher = DeviceTypeDefinition({
488
888
  name: 'MA-laundrywasher',
489
889
  code: 0x73,
@@ -492,6 +892,13 @@ export const laundryWasher = DeviceTypeDefinition({
492
892
  requiredServerClusters: [OperationalState.Cluster.id],
493
893
  optionalServerClusters: [Identify.Cluster.id, LaundryWasherMode.Cluster.id, OnOff.Cluster.id, LaundryWasherControls.Cluster.id, TemperatureControl.Cluster.id],
494
894
  });
895
+ /**
896
+ * A refrigerator represents a device that contains one or more cabinets that are capable of chilling or freezing food.
897
+ * A Refrigerator SHALL be composed of at least one endpoint with the Temperature Controlled Cabinet device type.
898
+ *
899
+ * Device Type Requirements:
900
+ * 0x0071 Temperature Controlled Cabinet
901
+ */
495
902
  export const refrigerator = DeviceTypeDefinition({
496
903
  name: 'MA-refrigerator',
497
904
  code: 0x70,
@@ -500,6 +907,23 @@ export const refrigerator = DeviceTypeDefinition({
500
907
  requiredServerClusters: [],
501
908
  optionalServerClusters: [Identify.Cluster.id, RefrigeratorAndTemperatureControlledCabinetMode.Cluster.id, RefrigeratorAlarm.Cluster.id],
502
909
  });
910
+ /**
911
+ * A Room Air Conditioner is a device with the primary function of controlling the air temperature in a single room.
912
+ *
913
+ * A Room Air Conditioner MAY have zero or more of each device type listed in this table subject to
914
+ * the conformance column of the table. All devices used in compositions SHALL adhere to the disambiguation
915
+ * requirements of the System Model. Additional device types not listed in this table MAY also be included in device compositions.
916
+ * 0x0302 Temperature Sensor O
917
+ * 0x0307 Humidity Sensor O
918
+ *
919
+ * Remark:
920
+ * The DF (Dead Front) feature is required for the On/Off cluster in this device type:
921
+ * - Thermostat LocalTemperature null
922
+ * - Temperature Measurement MeasuredValue null
923
+ * - Relative Humidity Measurement MeasuredValue null
924
+ * - Fan Control SpeedSetting null
925
+ * - Fan Control PercentSetting null
926
+ */
503
927
  export const airConditioner = DeviceTypeDefinition({
504
928
  name: 'MA-airConditioner',
505
929
  code: 0x72,
@@ -508,6 +932,15 @@ export const airConditioner = DeviceTypeDefinition({
508
932
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, Thermostat.Cluster.id],
509
933
  optionalServerClusters: [Groups.Cluster.id, ScenesManagement.Cluster.id, FanControl.Cluster.id, ThermostatUserInterfaceConfiguration.Cluster.id, TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id],
510
934
  });
935
+ /**
936
+ * A Temperature Controlled Cabinet only exists composed as part of another device type. It represents
937
+ * a single cabinet that is capable of having its temperature controlled. Such a cabinet may be
938
+ * chilling or freezing food, for example as part of a refrigerator, freezer, wine chiller, or other similar
939
+ * device. Equally, such a cabinet may be warming or heating food, for example as part of an oven,
940
+ * range, or similar device.
941
+ * Conditions:
942
+ * Cooler The device has cooling functionality.
943
+ */
511
944
  export const temperatureControlledCabinetCooler = DeviceTypeDefinition({
512
945
  name: 'MA-temperaturecontrolledcabinetcooler',
513
946
  code: 0x71,
@@ -516,6 +949,15 @@ export const temperatureControlledCabinetCooler = DeviceTypeDefinition({
516
949
  requiredServerClusters: [TemperatureControl.Cluster.id, RefrigeratorAndTemperatureControlledCabinetMode.Cluster.id],
517
950
  optionalServerClusters: [TemperatureMeasurement.Cluster.id],
518
951
  });
952
+ /**
953
+ * A Temperature Controlled Cabinet only exists composed as part of another device type. It represents
954
+ * a single cabinet that is capable of having its temperature controlled. Such a cabinet may be
955
+ * chilling or freezing food, for example as part of a refrigerator, freezer, wine chiller, or other similar
956
+ * device. Equally, such a cabinet may be warming or heating food, for example as part of an oven,
957
+ * range, or similar device.
958
+ * Conditions:
959
+ * Heater The device has heating functionality.
960
+ */
519
961
  export const temperatureControlledCabinetHeater = DeviceTypeDefinition({
520
962
  name: 'MA-temperaturecontrolledcabinetheater',
521
963
  code: 0x71,
@@ -524,6 +966,10 @@ export const temperatureControlledCabinetHeater = DeviceTypeDefinition({
524
966
  requiredServerClusters: [TemperatureControl.Cluster.id, OvenMode.Cluster.id, OvenCavityOperationalState.Cluster.id],
525
967
  optionalServerClusters: [TemperatureMeasurement.Cluster.id],
526
968
  });
969
+ /**
970
+ * Cluster Restrictions:
971
+ * On/Off Cluster: the DF (Dead Front) feature is required
972
+ */
527
973
  export const dishwasher = DeviceTypeDefinition({
528
974
  name: 'MA-dishwasher',
529
975
  code: 0x75,
@@ -532,6 +978,10 @@ export const dishwasher = DeviceTypeDefinition({
532
978
  requiredServerClusters: [OperationalState.Cluster.id],
533
979
  optionalServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, TemperatureControl.Cluster.id, DishwasherMode.Cluster.id, DishwasherAlarm.Cluster.id],
534
980
  });
981
+ /**
982
+ * Cluster Restrictions:
983
+ * On/Off Cluster: the DF (Dead Front) feature is required
984
+ */
535
985
  export const laundryDryer = DeviceTypeDefinition({
536
986
  name: 'MA-laundrydryer',
537
987
  code: 0x7c,
@@ -540,6 +990,13 @@ export const laundryDryer = DeviceTypeDefinition({
540
990
  requiredServerClusters: [OperationalState.Cluster.id],
541
991
  optionalServerClusters: [Identify.Cluster.id, LaundryWasherMode.Cluster.id, OnOff.Cluster.id, LaundryDryerControls.Cluster.id, TemperatureControl.Cluster.id],
542
992
  });
993
+ /**
994
+ * A Cook Surface device type represents a heating object on a cooktop or other similar device. It
995
+ * SHALL only be used when composed as part of another device type (cooktop).
996
+ *
997
+ * Cluster Restrictions:
998
+ * The OffOnly feature is required for the On/Off cluster in this device type due to safety requirements.
999
+ */
543
1000
  export const cookSurface = DeviceTypeDefinition({
544
1001
  name: 'MA-cooksurface',
545
1002
  code: 0x77,
@@ -548,6 +1005,18 @@ export const cookSurface = DeviceTypeDefinition({
548
1005
  requiredServerClusters: [],
549
1006
  optionalServerClusters: [TemperatureControl.Cluster.id, TemperatureMeasurement.Cluster.id, OnOff.Cluster.id],
550
1007
  });
1008
+ /**
1009
+ * A cooktop is a cooking surface that heats food either by transferring currents from an electromagnetic
1010
+ * field located below the glass surface directly to the magnetic induction cookware placed
1011
+ * above or through traditional gas or electric burners.
1012
+ *
1013
+ * Device Type Requirements:
1014
+ * A Cooktop SHALL be composed of zero or more endpoints with the Cook Surface device type as defined by the conformance below.
1015
+ * 0x0077 Cook Surface min 1 O
1016
+ *
1017
+ * Cluster Restrictions:
1018
+ * The OffOnly feature is required for the On/Off cluster in this device type due to safety requirements.
1019
+ */
551
1020
  export const cooktop = DeviceTypeDefinition({
552
1021
  name: 'MA-cooktop',
553
1022
  code: 0x78,
@@ -556,6 +1025,15 @@ export const cooktop = DeviceTypeDefinition({
556
1025
  requiredServerClusters: [OnOff.Cluster.id],
557
1026
  optionalServerClusters: [Identify.Cluster.id],
558
1027
  });
1028
+ /**
1029
+ * An oven represents a device that contains one or more cabinets, and optionally a single cooktop, that are all capable of heating food.
1030
+ * An oven is always defined via endpoint composition.
1031
+ * Conditions:
1032
+ * An Oven SHALL have the Heater condition applied to at least one endpoint containing the Temperature Control Cluster.
1033
+ * Device Type Requirements:
1034
+ * - 0x0071 Temperature Controlled Cabinet min 1
1035
+ * - 0x0078 Cooktop
1036
+ */
559
1037
  export const oven = DeviceTypeDefinition({
560
1038
  name: 'MA-oven',
561
1039
  code: 0x7b,
@@ -564,6 +1042,18 @@ export const oven = DeviceTypeDefinition({
564
1042
  requiredServerClusters: [],
565
1043
  optionalServerClusters: [Identify.Cluster.id],
566
1044
  });
1045
+ /**
1046
+ * An Extractor Hood is a device that is generally installed above a cooking surface in residential kitchens.
1047
+ * Additional device types not listed in this table MAY also be included in device compositions.
1048
+ * Device Type Requirements:
1049
+ * 0x0100+ On/Off Light+ O
1050
+ *
1051
+ *
1052
+ * Element Requirements:
1053
+ * - 0x0202 Fan Control Feature Rocking X
1054
+ * - 0x0202 Fan Control Feature Wind X
1055
+ * - 0x0202 Fan Control Feature AirflowDirection X
1056
+ */
567
1057
  export const extractorHood = DeviceTypeDefinition({
568
1058
  name: 'MA-extractorhood',
569
1059
  code: 0x7a,
@@ -572,6 +1062,12 @@ export const extractorHood = DeviceTypeDefinition({
572
1062
  requiredServerClusters: [FanControl.Cluster.id],
573
1063
  optionalServerClusters: [Identify.Cluster.id, HepaFilterMonitoring.Cluster.id, ActivatedCarbonFilterMonitoring.Cluster.id],
574
1064
  });
1065
+ /**
1066
+ * A Microwave Oven is a device with the primary function of heating foods and beverages using a magnetron.
1067
+ * A Microwave Oven is a device which at a minimum is capable of being started and stopped and of setting a power level.
1068
+ * A Microwave Oven MAY also support additional capabilities via endpoint composition.
1069
+ *
1070
+ */
575
1071
  export const microwaveOven = DeviceTypeDefinition({
576
1072
  name: 'MA-microwaveoven',
577
1073
  code: 0x79,
@@ -580,6 +1076,26 @@ export const microwaveOven = DeviceTypeDefinition({
580
1076
  requiredServerClusters: [OperationalState.Cluster.id, MicrowaveOvenMode.Cluster.id, MicrowaveOvenControl.Cluster.id],
581
1077
  optionalServerClusters: [Identify.Cluster.id, FanControl.Cluster.id],
582
1078
  });
1079
+ // Chapter 14. Energy Device Types
1080
+ /**
1081
+ * An EVSE (Electric Vehicle Supply Equipment) is a device that allows an EV (Electric Vehicle) to be
1082
+ * connected to the mains electricity supply to allow it to be charged (or discharged in case of Vehicle
1083
+ * to Grid / Vehicle to Home applications).
1084
+ *
1085
+ * 14.1.5. Device Type Requirements
1086
+ * An EVSE SHALL be composed of at least one endpoint with device types as defined by the conformance
1087
+ * below. There MAY be more endpoints with other device types existing in the EVSE.
1088
+ * - ID Name Constraint Conformance
1089
+ * - 0x0011 Power Source min 1 M
1090
+ * - 0x0510 Electrical Sensor min 1 M
1091
+ * - 0x050D Device Energy Management min 1 M
1092
+ *
1093
+ * The Electrical Sensor device SHALL include both the Electrical Energy Measurement and Electrical
1094
+ * Power Measurement clusters, measuring the total energy and power of the EVSE.
1095
+ *
1096
+ * The Device Energy Management cluster included in the Device Energy Management device SHALL
1097
+ * support the Power Forecast Reporting (PFR) feature.
1098
+ */
583
1099
  export const evse = DeviceTypeDefinition({
584
1100
  name: 'MA-evse',
585
1101
  code: 0x050c,
@@ -588,6 +1104,39 @@ export const evse = DeviceTypeDefinition({
588
1104
  requiredServerClusters: [EnergyEvse.Cluster.id, EnergyEvseMode.Cluster.id],
589
1105
  optionalServerClusters: [Identify.Cluster.id, TemperatureMeasurement.Cluster.id],
590
1106
  });
1107
+ /**
1108
+ * A water heater is a device that is generally installed in properties to heat water for showers, baths etc.
1109
+ * A Water Heater is always defined via endpoint composition.
1110
+ *
1111
+ * 14.2.5. Device Type Requirements
1112
+ * A Water Heater SHALL be composed of at least one endpoint with device types as defined by the
1113
+ * conformance below. There MAY be more endpoints with other device types existing in the Water Heater.
1114
+ * - ID Name Constraint Conformance
1115
+ * - 0x0011 Power Source O
1116
+ * - 0x0302 Temperature Sensor O
1117
+ * - 0x0510 Electrical Sensor desc
1118
+ * - 0x050D Device Energy Management O
1119
+ *
1120
+ * 14.2.7. Element Requirements
1121
+ * 0x0201 Thermostat Feature Heating M
1122
+ *
1123
+ * The Energy Management feature of the Water Heater cluster SHALL be supported if the Device
1124
+ * Energy Management device type is included.
1125
+ * If Off is a supported SystemMode in the Thermostat cluster, setting the SystemMode of the Thermostat
1126
+ * cluster to Off SHALL set the CurrentMode attribute of the Water Heater Mode cluster to a mode
1127
+ * having the Off mode tag value and vice versa.
1128
+ * At least one entry in the SupportedModes attribute of the Water Heater Mode cluster SHALL
1129
+ * include the Timed mode tag in the ModeTags field list.
1130
+ *
1131
+ * WaterHeaterMode Cluster
1132
+ * 9.6.6.1. SupportedModes Attribute
1133
+ * At least one entry in the SupportedModes attribute SHALL include the Manual mode tag in the
1134
+ * ModeTags field list.
1135
+ * At least one entry in the SupportedModes attribute SHALL include the Off mode tag in the ModeTags
1136
+ * field list.
1137
+ * An entry in the SupportedModes attribute that includes one of an Off, Manual, or Timed tag SHALL
1138
+ * NOT also include an additional instance of any one of these tag types.
1139
+ */
591
1140
  export const waterHeater = DeviceTypeDefinition({
592
1141
  name: 'MA-waterheater',
593
1142
  code: 0x050f,
@@ -596,27 +1145,99 @@ export const waterHeater = DeviceTypeDefinition({
596
1145
  requiredServerClusters: [Thermostat.Cluster.id, WaterHeaterManagement.Cluster.id, WaterHeaterMode.Cluster.id],
597
1146
  optionalServerClusters: [Identify.Cluster.id],
598
1147
  });
1148
+ /**
1149
+ * A Solar Power device is a device that allows a solar panel array, which can optionally be comprised
1150
+ * of a set parallel strings of solar panels, and its associated controller and, if appropriate, inverter, to
1151
+ * be monitored and controlled by an Energy Management System.
1152
+ *
1153
+ * 14.3.5. Device Type Requirements
1154
+ * A Solar Power device SHALL be composed of at least one endpoint with device types as defined by
1155
+ * the conformance below. There MAY be more endpoints with additional instances of these device
1156
+ * types or additional device types existing in the Solar Power device.
1157
+ *
1158
+ * - ID Name Constraint Conformance
1159
+ * - 0x0011 Power Source min 1 M
1160
+ * - 0x0510 Electrical Sensor min 1 M
1161
+ * - 0x050D Device Energy Management O
1162
+ * - 0x0302 Temperature Sensor O
1163
+ *
1164
+ * 14.3.5.1. Cluster Requirements on Composing Device Types
1165
+ *
1166
+ * - 0x0011 Power Source 0x002F Power Source Feature Wired M
1167
+ * - 0x0011 Power Source 0x001D Descriptor Feature TagList M
1168
+ * - 0x0510 Electrical Sensor 0x0090 Electrical Power Measurement M
1169
+ * - 0x0510 Electrical Sensor 0x0090 Electrical Power Measurement Attribute Voltage M
1170
+ * - 0x0510 Electrical Sensor 0x0090 Electrical Power Measurement Attribute ActiveCurrent M
1171
+ * - 0x0510 Electrical Sensor 0x0091 Electrical Energy Measurement M
1172
+ * - 0x0510 Electrical Sensor 0x0091 Electrical Energy Measurement Feature ExportedEnergy M
1173
+ * - 0x050D Device Energy Management 0x0098 Device Energy Management Feature PowerAdjustment M
1174
+ * - 0x0302 Temperature Sensor 0x001D Descriptor Feature TagList M
1175
+ */
599
1176
  export const solarPower = DeviceTypeDefinition({
600
1177
  name: 'MA-solarpower',
601
1178
  code: 0x0017,
602
1179
  deviceClass: DeviceClasses.Simple,
603
1180
  revision: 1,
604
- requiredServerClusters: [],
1181
+ requiredServerClusters: [], // See 14.3.5.1. Cluster Requirements on Composing Device Types
605
1182
  optionalServerClusters: [Identify.Cluster.id],
606
1183
  });
1184
+ /**
1185
+ * A Battery Storage device is a device that allows a DC battery, which can optionally be comprised of
1186
+ * a set parallel strings of battery packs and associated controller, and an AC inverter, to be monitored
1187
+ * and controlled by an Energy Management System in order to manage the peaks and troughs of supply
1188
+ * and demand, and/or to optimize cost of the energy consumed in premises. It is not intended to
1189
+ * be used for a UPS directly supplying a set of appliances, nor for portable battery storage devices.
1190
+ *
1191
+ * 14.4.5. Device Type Requirements
1192
+ * A Battery Storage device SHALL be composed of at least one endpoint with device types as defined by
1193
+ * the conformance below. There MAY be more endpoints with additional instances of these device
1194
+ * types or additional device types existing in the Battery Storage device.
1195
+ * - ID Name Constraint Conformance
1196
+ * - 0x0011 Power Source min 1 M
1197
+ * - 0x0510 Electrical Sensor min 1 M
1198
+ * - 0x050D Device Energy Management M
1199
+ * - 0x0302 Temperature Sensor O
1200
+ * - 0x0017 Solar Power O
1201
+ *
1202
+ * See 14.4.5.1. Cluster Requirements on Composing Device Types
1203
+ */
607
1204
  export const batteryStorage = DeviceTypeDefinition({
608
1205
  name: 'MA-batterystorage',
609
1206
  code: 0x0018,
610
1207
  deviceClass: DeviceClasses.Simple,
611
1208
  revision: 1,
612
- requiredServerClusters: [],
1209
+ requiredServerClusters: [], // See 14.4.5.1. Cluster Requirements on Composing Device Types
613
1210
  optionalServerClusters: [Identify.Cluster.id],
614
1211
  });
1212
+ /**
1213
+ * A Heat Pump device is a device that uses electrical energy to heat either spaces or water tanks using
1214
+ * ground, water or air as the heat source. These typically can heat the air or can pump water via central
1215
+ * heating radiators or underfloor heating systems. It is typical to also heat hot water and store
1216
+ * the heat in a hot water tank.
1217
+ *
1218
+ * 14.5.1. Heat Pump Architecture
1219
+ * A Heat Pump device is always defined via endpoint composition.
1220
+ *
1221
+ * 14.5.5. Device Type Requirements
1222
+ * A Heat Pump device SHALL be composed of at least one endpoint with device types as defined by
1223
+ * the conformance below. There MAY be more endpoints with additional instances of these device
1224
+ * types or additional device types existing in the Heat Pump device.
1225
+ * - ID Name Constraint Conformance
1226
+ * - 0x0011 Power Source M
1227
+ * - 0x0510 Electrical Sensor min 1 M
1228
+ * - 0x050D Device Energy Management M
1229
+ * - 0x0301 Thermostat O
1230
+ * - 0x050f Water Heater O
1231
+ * - 0x0302 Temperature Sensor O
1232
+ *
1233
+ * See 14.5.5.1. Cluster Requirements on Composing Device Types
1234
+ */
615
1235
  export const heatPump = DeviceTypeDefinition({
616
1236
  name: 'MA-heatpump',
617
1237
  code: 0x0309,
618
1238
  deviceClass: DeviceClasses.Simple,
619
1239
  revision: 1,
620
- requiredServerClusters: [],
1240
+ requiredServerClusters: [], // See 14.5.5.1. Cluster Requirements on Composing Device Types
621
1241
  optionalServerClusters: [Identify.Cluster.id, Thermostat.Cluster.id],
622
1242
  });
1243
+ //# sourceMappingURL=matterbridgeDeviceTypes.js.map