matterbridge 3.0.2-dev-20250514-0b26f0a → 3.0.2

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 (158) 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 +334 -15
  20. package/dist/frontend.js.map +1 -0
  21. package/dist/helpers.d.ts +46 -0
  22. package/dist/helpers.d.ts.map +1 -0
  23. package/dist/helpers.js +49 -0
  24. package/dist/helpers.js.map +1 -0
  25. package/dist/index.d.ts +36 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +28 -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 +435 -0
  58. package/dist/matterbridge.d.ts.map +1 -0
  59. package/dist/matterbridge.js +746 -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 +1188 -0
  66. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  67. package/dist/matterbridgeBehaviors.js +53 -4
  68. package/dist/matterbridgeBehaviors.js.map +1 -0
  69. package/dist/matterbridgeDeviceTypes.d.ts +494 -0
  70. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  71. package/dist/matterbridgeDeviceTypes.js +431 -12
  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 +965 -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 +147 -9
  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 +187 -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 +43 -0
  98. package/dist/roboticVacuumCleaner.d.ts.map +1 -0
  99. package/dist/roboticVacuumCleaner.js +39 -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 +51 -0
  154. package/dist/utils/wait.d.ts.map +1 -0
  155. package/dist/utils/wait.js +53 -5
  156. package/dist/utils/wait.js.map +1 -0
  157. package/npm-shrinkwrap.json +2 -2
  158. 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';
@@ -66,15 +90,42 @@ import { ServiceArea } from '@matter/main/clusters/service-area';
66
90
  import { TemperatureControl } from '@matter/main/clusters/temperature-control';
67
91
  export var DeviceClasses;
68
92
  (function (DeviceClasses) {
93
+ /** Node device type. */
69
94
  DeviceClasses["Node"] = "Node";
95
+ /**
96
+ * Application device type.
97
+ * Application devices types are typically the most datatype endpoints on a node and in the network.
98
+ */
70
99
  DeviceClasses["App"] = "App";
100
+ /**
101
+ * Utility device type.
102
+ * A Utility device type supports configuration and settings.
103
+ */
71
104
  DeviceClasses["Utility"] = "Utility";
105
+ /**
106
+ * Simple device type.
107
+ * A Simple device type supports local control that is persistent, independent, and unsupervised.
108
+ */
72
109
  DeviceClasses["Simple"] = "Simple";
110
+ /**
111
+ * Dynamic device type.
112
+ * A Dynamic device type supports intelligent and supervisory services, such as commissioning,
113
+ * monitoring, trend analysis, scheduling and central management. A dynamic device type is an
114
+ * application device type.
115
+ */
73
116
  DeviceClasses["Dynamic"] = "Dynamic";
117
+ /** There exists a client application cluster on the endpoint. */
74
118
  DeviceClasses["Client"] = "Client";
119
+ /** There exists a server application cluster on the endpoint. */
75
120
  DeviceClasses["Server"] = "Server";
121
+ /** The device type is composed of 2 or more device types. */
76
122
  DeviceClasses["Composed"] = "Composed";
123
+ /** The endpoint and at least one of its sibling endpoints have an overlap in application device type(s). */
77
124
  DeviceClasses["Duplicate"] = "Duplicate";
125
+ /**
126
+ * The endpoint represents a Bridged Device, for which information about the state of
127
+ * its power source is available to the Bridge
128
+ */
78
129
  DeviceClasses["BridgedPowerSourceInfo"] = "BridgedPowerSourceInfo";
79
130
  })(DeviceClasses || (DeviceClasses = {}));
80
131
  export const DeviceTypeDefinition = ({ name, code, deviceClass, revision, requiredServerClusters = [], optionalServerClusters = [], requiredClientClusters = [], optionalClientClusters = [], }) => ({
@@ -87,6 +138,7 @@ export const DeviceTypeDefinition = ({ name, code, deviceClass, revision, requir
87
138
  requiredClientClusters,
88
139
  optionalClientClusters,
89
140
  });
141
+ // Utility device types
90
142
  export const powerSource = DeviceTypeDefinition({
91
143
  name: 'MA-powerSource',
92
144
  code: 0x0011,
@@ -95,6 +147,22 @@ export const powerSource = DeviceTypeDefinition({
95
147
  requiredServerClusters: [PowerSource.Cluster.id],
96
148
  optionalServerClusters: [],
97
149
  });
150
+ /**
151
+ 2.5.3. Conditions
152
+ Please see the Base Device Type definition for conformance tags.
153
+ This device type SHALL only be used for Nodes which have a device type of Bridge.
154
+
155
+ 2.5.6. Endpoint Composition
156
+ • A Bridged Node endpoint SHALL support one of the following composition patterns:
157
+ ◦ Separate Endpoints: All application device types are supported on separate endpoints, and
158
+ not on the Bridged Node endpoint. The Bridged Node endpoint’s Descriptor cluster PartsList
159
+ attribute SHALL indicate a list of all endpoints representing the functionality of the bridged
160
+ device, including the endpoints supporting the application device types, i.e. the full-family
161
+ pattern defined in the System Model specification.
162
+ ◦ One Endpoint: Both the Bridged Node and one or more application device types are sup
163
+ ported on the same endpoint (following application device type rules). Endpoint composi
164
+ tion SHALL conform to the application device type(s) definition
165
+ */
98
166
  export const bridgedNode = DeviceTypeDefinition({
99
167
  name: 'MA-bridgedNode',
100
168
  code: 0x0013,
@@ -119,77 +187,194 @@ export const deviceEnergyManagement = DeviceTypeDefinition({
119
187
  requiredServerClusters: [DeviceEnergyManagement.Cluster.id, DeviceEnergyManagementMode.Cluster.id],
120
188
  optionalServerClusters: [],
121
189
  });
190
+ // Lightning device types
191
+ /**
192
+ * Element Requirements:
193
+ * - Identify Command TriggerEffect
194
+ * - Scenes Management Command CopyScene
195
+ * - On/Off Feature Lighting
196
+ * - Level Control Feature OnOff
197
+ * - Level Control Feature Lighting
198
+ * - Level Control Attribute CurrentLevel 1 to 254
199
+ * - Level Control Attribute MinLevel 1
200
+ * - Level Control Attribute MaxLevel 254
201
+ */
122
202
  export const onOffLight = DeviceTypeDefinition({
123
203
  name: 'MA-onofflight',
124
204
  code: 0x0100,
125
205
  deviceClass: DeviceClasses.Simple,
126
206
  revision: 3,
127
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
207
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
128
208
  optionalServerClusters: [LevelControl.Cluster.id],
129
209
  });
210
+ /**
211
+ * Element Requirements:
212
+ * - Identify Command TriggerEffect
213
+ * - Scenes Management Command CopyScene
214
+ * - On/Off Feature Lighting
215
+ * - Level Control Feature OnOff
216
+ * - Level Control Feature Lighting
217
+ * - Level Control Attribute CurrentLevel 1 to 254
218
+ * - Level Control Attribute MinLevel 1
219
+ * - Level Control Attribute MaxLevel 254
220
+ */
130
221
  export const dimmableLight = DeviceTypeDefinition({
131
222
  name: 'MA-dimmablelight',
132
223
  code: 0x0101,
133
224
  deviceClass: DeviceClasses.Simple,
134
225
  revision: 3,
135
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
226
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
136
227
  optionalServerClusters: [],
137
228
  });
229
+ /**
230
+ * Element Requirements:
231
+ * - Identify Command TriggerEffect
232
+ * - Scenes Management Command CopyScene
233
+ * - On/Off Feature Lighting
234
+ * - Level Control Feature OnOff
235
+ * - Level Control Feature Lighting
236
+ * - Level Control Attribute CurrentLevel 1 to 254
237
+ * - Level Control Attribute MinLevel 1
238
+ * - Level Control Attribute MaxLevel 254
239
+ * - Color Control Feature ColorTemperature
240
+ * - Color Control Attribute RemainingTime
241
+ */
138
242
  export const colorTemperatureLight = DeviceTypeDefinition({
139
243
  name: 'MA-colortemperaturelight',
140
244
  code: 0x010c,
141
245
  deviceClass: DeviceClasses.Simple,
142
246
  revision: 4,
143
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
247
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
144
248
  optionalServerClusters: [],
145
249
  });
250
+ /**
251
+ * Element Requirements:
252
+ * - Identify Command TriggerEffect
253
+ * - Scenes Management Command CopyScene
254
+ * - On/Off Feature Lighting
255
+ * - Level Control Feature OnOff
256
+ * - Level Control Feature Lighting
257
+ * - Level Control Attribute CurrentLevel 1 to 254
258
+ * - Level Control Attribute MinLevel 1
259
+ * - Level Control Attribute MaxLevel 254
260
+ * - Color Control Feature XY
261
+ * - Color Control Feature ColorTemperature
262
+ * - Color Control Attribute RemainingTime
263
+ */
146
264
  export const extendedColorLight = DeviceTypeDefinition({
147
265
  name: 'MA-extendedcolorlight',
148
266
  code: 0x010d,
149
267
  deviceClass: DeviceClasses.Simple,
150
268
  revision: 4,
151
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
269
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
152
270
  optionalServerClusters: [],
153
271
  });
272
+ // Smart plugs/Outlets and other Actuators device types
273
+ /**
274
+ * Element Requirements:
275
+ * - Identify Command TriggerEffect
276
+ * - Scenes Management Command CopyScene
277
+ * - On/Off Feature Lighting
278
+ * - Level Control Feature OnOff
279
+ * - Level Control Feature Lighting
280
+ * - Level Control Attribute CurrentLevel 1 to 254
281
+ * - Level Control Attribute MinLevel 1
282
+ * - Level Control Attribute MaxLevel 254
283
+ */
154
284
  export const onOffOutlet = DeviceTypeDefinition({
155
285
  name: 'MA-onoffpluginunit',
156
286
  code: 0x010a,
157
287
  deviceClass: DeviceClasses.Simple,
158
288
  revision: 3,
159
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
289
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
160
290
  optionalServerClusters: [LevelControl.Cluster.id],
161
291
  });
292
+ /**
293
+ * Element Requirements:
294
+ * - Identify Command TriggerEffect
295
+ * - Scenes Management Command CopyScene
296
+ * - On/Off Feature Lighting
297
+ * - Level Control Feature OnOff
298
+ * - Level Control Feature Lighting
299
+ * - Level Control Attribute CurrentLevel 1 to 254
300
+ * - Level Control Attribute MinLevel 1
301
+ * - Level Control Attribute MaxLevel 254
302
+ */
162
303
  export const dimmableOutlet = DeviceTypeDefinition({
163
304
  name: 'MA-dimmablepluginunit',
164
305
  code: 0x010b,
165
306
  deviceClass: DeviceClasses.Simple,
166
307
  revision: 4,
167
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
308
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
168
309
  optionalServerClusters: [],
169
310
  });
311
+ /**
312
+ * A Mounted On/Off Control is a fixed device that provides power to another device that is plugged
313
+ * into it, and is capable of switching that provided power on or off.
314
+ * It is a simple device type that does not require any client clusters.
315
+ * Element Requirements:
316
+ * - Identify Command TriggerEffect
317
+ * - Scenes Management Command CopyScene
318
+ * - On/Off Feature Lighting
319
+ * - Level Control Feature OnOff
320
+ * - Level Control Feature Lighting
321
+ * - Level Control Attribute CurrentLevel 1 to 254
322
+ * - Level Control Attribute MinLevel 1
323
+ * - Level Control Attribute MaxLevel 254
324
+ */
170
325
  export const onOffMountedSwitch = DeviceTypeDefinition({
171
326
  name: 'MA-onoffmountedswitch',
172
327
  code: 0x010f,
173
328
  deviceClass: DeviceClasses.Simple,
174
329
  revision: 1,
175
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id],
330
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id],
176
331
  optionalServerClusters: [LevelControl.Cluster.id],
177
332
  });
333
+ /**
334
+ * A Mounted Dimmable Load Control is a fixed device that provides power to another device that is
335
+ * plugged into it, and is capable of being switched on or off and have its level adjusted. The Mounted
336
+ * Dimmable Load Control is typically used to control a conventional non-communicating light
337
+ * through its mains connection using phase cutting.
338
+ * It is a simple device type that does not require any client clusters.
339
+ * Element Requirements:
340
+ * - Identify Command TriggerEffect
341
+ * - Scenes Management Command CopyScene
342
+ * - On/Off Feature Lighting
343
+ * - Level Control Feature OnOff
344
+ * - Level Control Feature Lighting
345
+ * - Level Control Attribute CurrentLevel 1 to 254
346
+ * - Level Control Attribute MinLevel 1
347
+ * - Level Control Attribute MaxLevel 254
348
+ */
178
349
  export const dimmableMountedSwitch = DeviceTypeDefinition({
179
350
  name: 'MA-dimmablemountedswitch',
180
351
  code: 0x0110,
181
352
  deviceClass: DeviceClasses.Simple,
182
353
  revision: 1,
183
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
354
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
184
355
  optionalServerClusters: [],
185
356
  });
357
+ /**
358
+ * Remark:
359
+ * On/Off Cluster:
360
+ * - Off If the pump is powered on, store the current level then immediately power it off.
361
+ * - 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,
362
+ * move immediately to the maximum level allowed for the pump.
363
+ * - 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.
364
+ *
365
+ * LevelControl cluster:
366
+ * Level Setpoint Meaning
367
+ * 0 N/A Pump is stopped,
368
+ * 1–200 Level / 2 (0.5–100.0%) Pump setpoint in percent
369
+ * 201–255 100.0% Pump setpoint is 100.0%
370
+ */
186
371
  export const pumpDevice = DeviceTypeDefinition({
187
372
  name: 'MA-pump',
188
373
  code: 0x303,
189
374
  deviceClass: DeviceClasses.Simple,
190
375
  revision: 3,
191
376
  requiredServerClusters: [OnOff.Cluster.id, PumpConfigurationAndControl.Cluster.id, Identify.Cluster.id],
192
- optionalServerClusters: [LevelControl.Cluster.id, Groups.Cluster.id, TemperatureMeasurement.Cluster.id, PressureMeasurement.Cluster.id, FlowMeasurement.Cluster.id],
377
+ optionalServerClusters: [LevelControl.Cluster.id, Groups.Cluster.id, /* ScenesManagement.Cluster.id, */ TemperatureMeasurement.Cluster.id, PressureMeasurement.Cluster.id, FlowMeasurement.Cluster.id],
193
378
  });
194
379
  export const waterValve = DeviceTypeDefinition({
195
380
  name: 'MA-waterValve',
@@ -199,29 +384,33 @@ export const waterValve = DeviceTypeDefinition({
199
384
  requiredServerClusters: [Identify.Cluster.id, ValveConfigurationAndControl.Cluster.id],
200
385
  optionalServerClusters: [FlowMeasurement.Cluster.id],
201
386
  });
387
+ // Switches and Controls device types
388
+ // Custom device types without client clusters (not working in Alexa)
202
389
  export const onOffSwitch = DeviceTypeDefinition({
203
390
  name: 'MA-onoffswitch',
204
391
  code: 0x0103,
205
392
  deviceClass: DeviceClasses.Simple,
206
393
  revision: 3,
207
394
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id],
208
- optionalServerClusters: [Groups.Cluster.id],
395
+ optionalServerClusters: [Groups.Cluster.id /* , ScenesManagement.Cluster.id*/],
209
396
  });
397
+ // Custom device types without client clusters (not working in Alexa)
210
398
  export const dimmableSwitch = DeviceTypeDefinition({
211
399
  name: 'MA-dimmableswitch',
212
400
  code: 0x0104,
213
401
  deviceClass: DeviceClasses.Simple,
214
402
  revision: 3,
215
403
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
216
- optionalServerClusters: [Groups.Cluster.id],
404
+ optionalServerClusters: [Groups.Cluster.id /* , ScenesManagement.Cluster.id*/],
217
405
  });
406
+ // Custom device types without client clusters (not working in Alexa)
218
407
  export const colorTemperatureSwitch = DeviceTypeDefinition({
219
408
  name: 'MA-colortemperatureswitch',
220
409
  code: 0x0105,
221
410
  deviceClass: DeviceClasses.Simple,
222
411
  revision: 3,
223
412
  requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
224
- optionalServerClusters: [Groups.Cluster.id],
413
+ optionalServerClusters: [Groups.Cluster.id /* , ScenesManagement.Cluster.id*/],
225
414
  });
226
415
  export const genericSwitch = DeviceTypeDefinition({
227
416
  name: 'MA-genericswitch',
@@ -231,6 +420,11 @@ export const genericSwitch = DeviceTypeDefinition({
231
420
  requiredServerClusters: [Identify.Cluster.id, Switch.Cluster.id],
232
421
  optionalServerClusters: [],
233
422
  });
423
+ // Sensor device types
424
+ /**
425
+ * Closed or contact: state true
426
+ * Open or no contact: state false
427
+ */
234
428
  export const contactSensor = DeviceTypeDefinition({
235
429
  name: 'MA-contactsensor',
236
430
  code: 0x0015,
@@ -282,6 +476,7 @@ export const humiditySensor = DeviceTypeDefinition({
282
476
  revision: 2,
283
477
  requiredServerClusters: [Identify.Cluster.id, RelativeHumidityMeasurement.Cluster.id],
284
478
  });
479
+ // Remark: A Smoke CO Alarm device type SHALL support an instance of a Power Source device type on some endpoint.
285
480
  export const smokeCoAlarm = DeviceTypeDefinition({
286
481
  name: 'MA-smokeCoAlarm',
287
482
  code: 0x0076,
@@ -335,6 +530,15 @@ export const rainSensor = DeviceTypeDefinition({
335
530
  requiredServerClusters: [Identify.Cluster.id, BooleanState.Cluster.id],
336
531
  optionalServerClusters: [BooleanStateConfiguration.Cluster.id],
337
532
  });
533
+ // Closures device types
534
+ /**
535
+ * 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.
536
+ * Element Requirements:
537
+ *
538
+ * - AccessControl Attribute Extension
539
+ * - DoorLock Feature User
540
+ * - DoorLock Attribute AlarmMask
541
+ */
338
542
  export const doorLockDevice = DeviceTypeDefinition({
339
543
  name: 'MA-doorLock',
340
544
  code: 0xa,
@@ -351,6 +555,15 @@ export const coverDevice = DeviceTypeDefinition({
351
555
  requiredServerClusters: [Identify.Cluster.id, WindowCovering.Cluster.id],
352
556
  optionalServerClusters: [Groups.Cluster.id],
353
557
  });
558
+ // HVAC device types
559
+ /**
560
+ * A Thermostat device is capable of having either built-in or separate sensors for temperature,
561
+ * humidity or occupancy. It allows the desired temperature to be set either remotely or locally. The
562
+ * thermostat is capable of sending heating and/or cooling requirement notifications to a heating/cooling
563
+ * unit (for example, an indoor air handler) or is capable of including a mechanism to control a
564
+ * heating or cooling unit directly.
565
+ *
566
+ */
354
567
  export const thermostatDevice = DeviceTypeDefinition({
355
568
  name: 'MA-thermostat',
356
569
  code: 0x301,
@@ -359,6 +572,25 @@ export const thermostatDevice = DeviceTypeDefinition({
359
572
  requiredServerClusters: [Identify.Cluster.id, Thermostat.Cluster.id],
360
573
  optionalServerClusters: [Groups.Cluster.id, ThermostatUserInterfaceConfiguration.Cluster.id, EnergyPreference.Cluster.id],
361
574
  });
575
+ /**
576
+ * A Fan device is typically standalone or mounted on a ceiling or wall and is used to circulate air in a room.
577
+ * Remark: it may have a thermostat device type.
578
+ * Additional device types MAY also be included in device compositions.
579
+ * Element Requirements:
580
+ * The FanControl cluster must have the FanModeSequence attribute.
581
+ *
582
+ * The On/Off cluster is independent from the Fan Control Cluster’s FanMode attribute, which also
583
+ * includes an Off setting.
584
+ * If the FanMode attribute of the Fan Control cluster is set to a value other than Off when the OnOff
585
+ * attribute of the On/Off cluster transitions from TRUE to FALSE, it may be desirable to restore the
586
+ * FanMode, SpeedSetting and PercentSetting attribute values of the Fan Control cluster when the OnOff
587
+ * attribute of the On/Off cluster later transitions from FALSE to TRUE. If the FanMode is set to Off when
588
+ * the device is turned off, this information is lost, as the SpeedSetting and PercentSetting will be set to
589
+ * zero. Using the On/Off cluster alongside the Fan Control cluster allows the FanMode, SpeedSetting and
590
+ * PercentSetting to remain unchanged when the device is turned off. In this case, the On/Off cluster
591
+ * would be set to Off, and the SpeedCurrent and PercentCurrent set to zero, without changing FanMode,
592
+ * SpeedSetting and PercentSetting.
593
+ */
362
594
  export const fanDevice = DeviceTypeDefinition({
363
595
  name: 'MA-fan',
364
596
  code: 0x2b,
@@ -367,6 +599,35 @@ export const fanDevice = DeviceTypeDefinition({
367
599
  requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, FanControl.Cluster.id],
368
600
  optionalServerClusters: [OnOff.Cluster.id],
369
601
  });
602
+ /**
603
+ * An Air Purifier is a standalone device that is designed to clean the air in a room.
604
+ * It is a device that has a fan to control the air speed while it is operating. Optionally, it can report on
605
+ * the condition of its filters.
606
+ *
607
+ * Remark:
608
+ * An Air Purifier MAY expose elements of its functionality through one or more additional device
609
+ * types on different endpoints. All devices used in compositions SHALL adhere to the disambiguation
610
+ * requirements of the System Model. Other device types, not explicitly listed in the table, MAY also be
611
+ * included in device compositions but are not considered part of the core functionality of the device.
612
+ * 0x0301 Thermostat O
613
+ * 0x0302 Temperature Sensor O
614
+ * 0x0307 Humidity Sensor O
615
+ * 0x002C Air Quality Sensor O
616
+ *
617
+ * Cluster Restrictions:
618
+ * The On/Off cluster is independent from the Fan Control Cluster’s FanMode attribute, which also
619
+ * includes an Off setting.
620
+ * If the FanMode attribute of the Fan Control cluster is set to a value other than Off when the OnOff
621
+ * attribute of the On/Off cluster transitions from TRUE to FALSE, it may be desirable to restore the
622
+ * FanMode, SpeedSetting and PercentSetting attribute values of the Fan Control cluster when the OnOff
623
+ * attribute of the On/Off cluster later transitions from FALSE to TRUE. If the FanMode is set to Off when
624
+ * the device is turned off, this information is lost, as the SpeedSetting and PercentSetting will be set to
625
+ * zero. Using the On/Off cluster alongside the Fan Control cluster allows the FanMode, SpeedSetting and
626
+ * PercentSetting to remain unchanged when the device is turned off. In this case, the On/Off cluster
627
+ * would be set to Off, and the SpeedCurrent and PercentCurrent set to zero, without changing FanMode,
628
+ * SpeedSetting and PercentSetting.
629
+ *
630
+ */
370
631
  export const airPurifier = DeviceTypeDefinition({
371
632
  name: 'MA-airPurifier',
372
633
  code: 0x2d,
@@ -375,6 +636,7 @@ export const airPurifier = DeviceTypeDefinition({
375
636
  requiredServerClusters: [Identify.Cluster.id, FanControl.Cluster.id],
376
637
  optionalServerClusters: [Groups.Cluster.id, OnOff.Cluster.id, HepaFilterMonitoring.Cluster.id, ActivatedCarbonFilterMonitoring.Cluster.id],
377
638
  });
639
+ // Generic device types
378
640
  export const modeSelect = DeviceTypeDefinition({
379
641
  name: 'MA-modeselect',
380
642
  code: 0x27,
@@ -382,6 +644,37 @@ export const modeSelect = DeviceTypeDefinition({
382
644
  revision: 1,
383
645
  requiredServerClusters: [ModeSelect.Cluster.id],
384
646
  });
647
+ /**
648
+ * This device type aggregates endpoints as a collection. Clusters on the endpoint indicating this
649
+ * device type provide functionality for the collection of descendant endpoints present in the PartsList
650
+ * of the endpoint’s descriptor, for example the Actions cluster.
651
+ *
652
+ * Endpoint Composition:
653
+ * An Aggregator endpoint’s Descriptor cluster PartsList attribute SHALL list the collection of all endpoints
654
+ * aggregated by the Aggregator device type, i.e. the full-family pattern defined in the System Model specification.
655
+ *
656
+ * Disambiguation:
657
+ * If the Duplicate condition applies to child endpoints of an Aggregator endpoint that represent multiple
658
+ * independent bridged devices, the endpoints SHOULD make available metadata to allow a
659
+ * client to disambiguate distinct bridged devices with an overlap in application device types.
660
+ *
661
+ * Typically this is done using the NodeLabel attribute of the Bridged Device Basic Information cluster
662
+ * - thus reusing the naming information which the bridge already has to allow disambiguation to the
663
+ * user when using a direct user interface to the bridge.
664
+ *
665
+ * Actions cluster (9.14 Matter specification):
666
+ * If a Bridge has (such) information on topology or logical grouping, it SHOULD expose such information
667
+ * in the EndpointLists attribute of an Actions cluster (the ActionLists of which MAY be empty if
668
+ * no actions are exposed). 9.12 Matter specification
669
+ *
670
+ * 9.12.5. New features for Bridged Devices
671
+ * Bridged Devices can have their software updated independently of the Bridge, through Bridge Manufacturer-
672
+ * specific means. These updates MAY result in one or more changes to their capabilities,
673
+ * such as supported clusters and/or attributes, for an endpoint. Like every Matter Node, every endpoint
674
+ * on the Bridge’s Node contains a Descriptor cluster that contains attributes for the device types
675
+ * (DeviceTypeList), endpoints (PartsList) and supported clusters (ServerList and ClientList). Nodes
676
+ * that wish to be notified of such changes SHOULD monitor changes of these attributes.
677
+ */
385
678
  export const aggregator = DeviceTypeDefinition({
386
679
  name: 'MA-aggregator',
387
680
  code: 0x000e,
@@ -391,6 +684,29 @@ export const aggregator = DeviceTypeDefinition({
391
684
  optionalServerClusters: [Actions.Cluster.id, Identify.Cluster.id, CommissionerControl.Cluster.id],
392
685
  });
393
686
  export const bridge = aggregator;
687
+ // Robotic device types
688
+ /**
689
+ * A Robotic Vacuum Cleaner is a device that is capable of cleaning floors and other surfaces
690
+ * in a home or office environment. It is typically a mobile device that can navigate around
691
+ * obstacles and can be controlled remotely.
692
+ *
693
+ * Cluster Usage:
694
+ * The RVC Operational State cluster’s OperationalState attribute SHALL be updated according to the
695
+ * state of the device, and therefore it SHOULD be used for monitoring purposes.
696
+ *
697
+ * To attempt starting a cleaning operation, the RVC Run Mode cluster can be sent a ChangeToMode
698
+ * command with the NewMode field set to a mode that has the Cleaning mode tag associated with it.
699
+ *
700
+ * To attempt stopping a cleaning operation, the RVC Run Mode cluster can be sent a ChangeToMode
701
+ * command with the NewMode field set to a mode that has the Idle mode tag associated with it.
702
+ *
703
+ * To attempt pausing a cleaning operation, the RVC Operational State cluster can be sent a Pause command.
704
+ *
705
+ * To attempt resuming a cleaning operation, the RVC Operational State cluster can be sent a Resume
706
+ * command.
707
+ *
708
+ *
709
+ */
394
710
  export const roboticVacuumCleaner = DeviceTypeDefinition({
395
711
  name: 'MA-roboticvacuumcleaner',
396
712
  code: 0x74,
@@ -399,6 +715,11 @@ export const roboticVacuumCleaner = DeviceTypeDefinition({
399
715
  requiredServerClusters: [Identify.Cluster.id, RvcRunMode.Cluster.id, RvcOperationalState.Cluster.id],
400
716
  optionalServerClusters: [RvcCleanMode.Cluster.id, ServiceArea.Cluster.id],
401
717
  });
718
+ // Appliances device types
719
+ /**
720
+ * Cluster Restrictions:
721
+ * On/Off Cluster: the DF (Dead Front) feature is required
722
+ */
402
723
  export const laundryWasher = DeviceTypeDefinition({
403
724
  name: 'MA-laundrywasher',
404
725
  code: 0x73,
@@ -407,6 +728,13 @@ export const laundryWasher = DeviceTypeDefinition({
407
728
  requiredServerClusters: [OperationalState.Cluster.id],
408
729
  optionalServerClusters: [Identify.Cluster.id, LaundryWasherMode.Cluster.id, OnOff.Cluster.id, LaundryWasherControls.Cluster.id, TemperatureControl.Cluster.id],
409
730
  });
731
+ /**
732
+ * A refrigerator represents a device that contains one or more cabinets that are capable of chilling or freezing food.
733
+ * A Refrigerator SHALL be composed of at least one endpoint with the Temperature Controlled Cabinet device type.
734
+ *
735
+ * Device Type Requirements:
736
+ * 0x0071 Temperature Controlled Cabinet
737
+ */
410
738
  export const refrigerator = DeviceTypeDefinition({
411
739
  name: 'MA-refrigerator',
412
740
  code: 0x70,
@@ -415,6 +743,23 @@ export const refrigerator = DeviceTypeDefinition({
415
743
  requiredServerClusters: [Identify.Cluster.id, RefrigeratorAndTemperatureControlledCabinetMode.Cluster.id, RefrigeratorAlarm.Cluster.id],
416
744
  optionalServerClusters: [],
417
745
  });
746
+ /**
747
+ * A Room Air Conditioner is a device with the primary function of controlling the air temperature in a single room.
748
+ *
749
+ * A Room Air Conditioner MAY have zero or more of each device type listed in this table subject to
750
+ * the conformance column of the table. All devices used in compositions SHALL adhere to the disambiguation
751
+ * requirements of the System Model. Additional device types not listed in this table MAY also be included in device compositions.
752
+ * 0x0302 Temperature Sensor O
753
+ * 0x0307 Humidity Sensor O
754
+ *
755
+ * Remark:
756
+ * The DF (Dead Front) feature is required for the On/Off cluster in this device type:
757
+ * - Thermostat LocalTemperature null
758
+ * - Temperature Measurement MeasuredValue null
759
+ * - Relative Humidity Measurement MeasuredValue null
760
+ * - Fan Control SpeedSetting null
761
+ * - Fan Control PercentSetting null
762
+ */
418
763
  export const airConditioner = DeviceTypeDefinition({
419
764
  name: 'MA-airConditioner',
420
765
  code: 0x72,
@@ -423,12 +768,22 @@ export const airConditioner = DeviceTypeDefinition({
423
768
  requiredServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, Thermostat.Cluster.id],
424
769
  optionalServerClusters: [
425
770
  Groups.Cluster.id,
771
+ /* ScenesManagement.Cluster.id,*/
426
772
  FanControl.Cluster.id,
427
773
  ThermostatUserInterfaceConfiguration.Cluster.id,
428
774
  TemperatureMeasurement.Cluster.id,
429
775
  RelativeHumidityMeasurement.Cluster.id,
430
776
  ],
431
777
  });
778
+ /**
779
+ * A Temperature Controlled Cabinet only exists composed as part of another device type. It represents
780
+ * a single cabinet that is capable of having its temperature controlled. Such a cabinet may be
781
+ * chilling or freezing food, for example as part of a refrigerator, freezer, wine chiller, or other similar
782
+ * device. Equally, such a cabinet may be warming or heating food, for example as part of an oven,
783
+ * range, or similar device.
784
+ * Conditions:
785
+ * Cooler The device has cooling functionality.
786
+ */
432
787
  export const temperatureControlledCabinetCooler = DeviceTypeDefinition({
433
788
  name: 'MA-temperaturecontrolledcabinetcooler',
434
789
  code: 0x71,
@@ -437,6 +792,15 @@ export const temperatureControlledCabinetCooler = DeviceTypeDefinition({
437
792
  requiredServerClusters: [TemperatureControl.Cluster.id, RefrigeratorAndTemperatureControlledCabinetMode.Cluster.id],
438
793
  optionalServerClusters: [TemperatureMeasurement.Cluster.id],
439
794
  });
795
+ /**
796
+ * A Temperature Controlled Cabinet only exists composed as part of another device type. It represents
797
+ * a single cabinet that is capable of having its temperature controlled. Such a cabinet may be
798
+ * chilling or freezing food, for example as part of a refrigerator, freezer, wine chiller, or other similar
799
+ * device. Equally, such a cabinet may be warming or heating food, for example as part of an oven,
800
+ * range, or similar device.
801
+ * Conditions:
802
+ * Heater The device has heating functionality.
803
+ */
440
804
  export const temperatureControlledCabinetHeater = DeviceTypeDefinition({
441
805
  name: 'MA-temperaturecontrolledcabinetheater',
442
806
  code: 0x71,
@@ -445,6 +809,10 @@ export const temperatureControlledCabinetHeater = DeviceTypeDefinition({
445
809
  requiredServerClusters: [TemperatureControl.Cluster.id, OvenMode.Cluster.id, OvenCavityOperationalState.Cluster.id],
446
810
  optionalServerClusters: [TemperatureMeasurement.Cluster.id],
447
811
  });
812
+ /**
813
+ * Cluster Restrictions:
814
+ * On/Off Cluster: the DF (Dead Front) feature is required
815
+ */
448
816
  export const dishwasher = DeviceTypeDefinition({
449
817
  name: 'MA-dishwasher',
450
818
  code: 0x75,
@@ -453,6 +821,10 @@ export const dishwasher = DeviceTypeDefinition({
453
821
  requiredServerClusters: [OperationalState.Cluster.id],
454
822
  optionalServerClusters: [Identify.Cluster.id, OnOff.Cluster.id, TemperatureControl.Cluster.id, DishwasherMode.Cluster.id, DishwasherAlarm.Cluster.id],
455
823
  });
824
+ /**
825
+ * Cluster Restrictions:
826
+ * On/Off Cluster: the DF (Dead Front) feature is required
827
+ */
456
828
  export const laundryDryer = DeviceTypeDefinition({
457
829
  name: 'MA-laundrydryer',
458
830
  code: 0x7c,
@@ -461,6 +833,13 @@ export const laundryDryer = DeviceTypeDefinition({
461
833
  requiredServerClusters: [OperationalState.Cluster.id],
462
834
  optionalServerClusters: [Identify.Cluster.id, LaundryWasherMode.Cluster.id, OnOff.Cluster.id, LaundryDryerControls.Cluster.id, TemperatureControl.Cluster.id],
463
835
  });
836
+ /**
837
+ * A Cook Surface device type represents a heating object on a cooktop or other similar device. It
838
+ * SHALL only be used when composed as part of another device type (cooktop).
839
+ *
840
+ * Cluster Restrictions:
841
+ * The OffOnly feature is required for the On/Off cluster in this device type due to safety requirements.
842
+ */
464
843
  export const cookSurface = DeviceTypeDefinition({
465
844
  name: 'MA-cooksurface',
466
845
  code: 0x77,
@@ -469,6 +848,18 @@ export const cookSurface = DeviceTypeDefinition({
469
848
  requiredServerClusters: [TemperatureControl.Cluster.id, TemperatureMeasurement.Cluster.id],
470
849
  optionalServerClusters: [OnOff.Cluster.id],
471
850
  });
851
+ /**
852
+ * A cooktop is a cooking surface that heats food either by transferring currents from an electromagnetic
853
+ * field located below the glass surface directly to the magnetic induction cookware placed
854
+ * above or through traditional gas or electric burners.
855
+ *
856
+ * Device Type Requirements:
857
+ * A Cooktop SHALL be composed of zero or more endpoints with the Cook Surface device type as defined by the conformance below.
858
+ * 0x0077 Cook Surface min 1 O
859
+ *
860
+ * Cluster Restrictions:
861
+ * The OffOnly feature is required for the On/Off cluster in this device type due to safety requirements.
862
+ */
472
863
  export const cooktop = DeviceTypeDefinition({
473
864
  name: 'MA-cooktop',
474
865
  code: 0x78,
@@ -477,6 +868,15 @@ export const cooktop = DeviceTypeDefinition({
477
868
  requiredServerClusters: [OnOff.Cluster.id],
478
869
  optionalServerClusters: [Identify.Cluster.id],
479
870
  });
871
+ /**
872
+ * An oven represents a device that contains one or more cabinets, and optionally a single cooktop, that are all capable of heating food.
873
+ * An oven is always defined via endpoint composition.
874
+ * Conditions:
875
+ * An Oven SHALL have the Heater condition applied to at least one endpoint containing the Temperature Control Cluster.
876
+ * Device Type Requirements:
877
+ * 0x0071 Temperature Controlled Cabinet min 1
878
+ * 0x0078 Cooktop
879
+ */
480
880
  export const oven = DeviceTypeDefinition({
481
881
  name: 'MA-oven',
482
882
  code: 0x7b,
@@ -485,6 +885,18 @@ export const oven = DeviceTypeDefinition({
485
885
  requiredServerClusters: [Identify.Cluster.id],
486
886
  optionalServerClusters: [],
487
887
  });
888
+ /**
889
+ * An Extractor Hood is a device that is generally installed above a cooking surface in residential kitchens.
890
+ * Additional device types not listed in this table MAY also be included in device compositions.
891
+ * Device Type Requirements:
892
+ * 0x0100+ On/Off Light+ O
893
+ *
894
+ *
895
+ * Element Requirements:
896
+ * 0x0202 Fan Control Feature Rocking X
897
+ * 0x0202 Fan Control Feature Wind X
898
+ * 0x0202 Fan Control Feature AirflowDirection X
899
+ */
488
900
  export const extractorHood = DeviceTypeDefinition({
489
901
  name: 'MA-extractorhood',
490
902
  code: 0x7a,
@@ -493,6 +905,12 @@ export const extractorHood = DeviceTypeDefinition({
493
905
  requiredServerClusters: [FanControl.Cluster.id],
494
906
  optionalServerClusters: [Identify.Cluster.id, HepaFilterMonitoring.Cluster.id, ActivatedCarbonFilterMonitoring.Cluster.id],
495
907
  });
908
+ /**
909
+ * A Microwave Oven is a device with the primary function of heating foods and beverages using a magnetron.
910
+ * A Microwave Oven is a device which at a minimum is capable of being started and stopped and of setting a power level.
911
+ * A Microwave Oven MAY also support additional capabilities via endpoint composition.
912
+ *
913
+ */
496
914
  export const microwaveOven = DeviceTypeDefinition({
497
915
  name: 'MA-microwaveoven',
498
916
  code: 0x79,
@@ -501,3 +919,4 @@ export const microwaveOven = DeviceTypeDefinition({
501
919
  requiredServerClusters: [OperationalState.Cluster.id, MicrowaveOvenMode.Cluster.id, MicrowaveOvenControl.Cluster.id],
502
920
  optionalServerClusters: [Identify.Cluster.id, FanControl.Cluster.id],
503
921
  });
922
+ //# sourceMappingURL=matterbridgeDeviceTypes.js.map