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