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