matterbridge 2.2.6 → 3.0.0-edge.1

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 (153) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README-DEV.md +24 -12
  3. package/dist/cli.js +2 -37
  4. package/dist/cluster/export.js +0 -2
  5. package/dist/defaultConfigSchema.js +0 -23
  6. package/dist/deviceManager.js +1 -94
  7. package/dist/frontend.js +23 -325
  8. package/dist/index.js +1 -28
  9. package/dist/logger/export.js +0 -1
  10. package/dist/matter/behaviors.js +0 -2
  11. package/dist/matter/clusters.js +0 -2
  12. package/dist/matter/devices.js +0 -2
  13. package/dist/matter/endpoints.js +0 -2
  14. package/dist/matter/export.js +0 -2
  15. package/dist/matter/types.js +0 -2
  16. package/dist/matterbridge.js +89 -760
  17. package/dist/matterbridgeAccessoryPlatform.js +0 -33
  18. package/dist/matterbridgeBehaviors.js +15 -41
  19. package/dist/matterbridgeDeviceTypes.js +151 -228
  20. package/dist/matterbridgeDynamicPlatform.js +0 -33
  21. package/dist/matterbridgeEndpoint.js +116 -718
  22. package/dist/matterbridgeEndpointHelpers.js +30 -136
  23. package/dist/matterbridgePlatform.js +12 -221
  24. package/dist/matterbridgeTypes.js +0 -24
  25. package/dist/pluginManager.js +98 -251
  26. package/dist/shelly.js +6 -146
  27. package/dist/storage/export.js +0 -1
  28. package/dist/update.js +0 -45
  29. package/dist/utils/colorUtils.js +2 -205
  30. package/dist/utils/copyDirectory.js +1 -37
  31. package/dist/utils/createZip.js +2 -42
  32. package/dist/utils/deepCopy.js +0 -40
  33. package/dist/utils/deepEqual.js +1 -65
  34. package/dist/utils/export.js +0 -1
  35. package/dist/utils/isvalid.js +0 -86
  36. package/dist/utils/network.js +5 -76
  37. package/dist/utils/parameter.js +0 -41
  38. package/dist/utils/wait.js +5 -48
  39. package/frontend/build/asset-manifest.json +3 -3
  40. package/frontend/build/index.html +1 -1
  41. package/frontend/build/static/js/{main.f00179ca.js → main.1fa50342.js} +3 -3
  42. package/frontend/build/static/js/{main.f00179ca.js.map → main.1fa50342.js.map} +1 -1
  43. package/npm-shrinkwrap.json +44 -44
  44. package/package.json +2 -3
  45. package/dist/cli.d.ts +0 -29
  46. package/dist/cli.d.ts.map +0 -1
  47. package/dist/cli.js.map +0 -1
  48. package/dist/cluster/export.d.ts +0 -2
  49. package/dist/cluster/export.d.ts.map +0 -1
  50. package/dist/cluster/export.js.map +0 -1
  51. package/dist/defaultConfigSchema.d.ts +0 -27
  52. package/dist/defaultConfigSchema.d.ts.map +0 -1
  53. package/dist/defaultConfigSchema.js.map +0 -1
  54. package/dist/deviceManager.d.ts +0 -114
  55. package/dist/deviceManager.d.ts.map +0 -1
  56. package/dist/deviceManager.js.map +0 -1
  57. package/dist/frontend.d.ts +0 -221
  58. package/dist/frontend.d.ts.map +0 -1
  59. package/dist/frontend.js.map +0 -1
  60. package/dist/index.d.ts +0 -35
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/index.js.map +0 -1
  63. package/dist/logger/export.d.ts +0 -2
  64. package/dist/logger/export.d.ts.map +0 -1
  65. package/dist/logger/export.js.map +0 -1
  66. package/dist/matter/behaviors.d.ts +0 -2
  67. package/dist/matter/behaviors.d.ts.map +0 -1
  68. package/dist/matter/behaviors.js.map +0 -1
  69. package/dist/matter/clusters.d.ts +0 -2
  70. package/dist/matter/clusters.d.ts.map +0 -1
  71. package/dist/matter/clusters.js.map +0 -1
  72. package/dist/matter/devices.d.ts +0 -2
  73. package/dist/matter/devices.d.ts.map +0 -1
  74. package/dist/matter/devices.js.map +0 -1
  75. package/dist/matter/endpoints.d.ts +0 -2
  76. package/dist/matter/endpoints.d.ts.map +0 -1
  77. package/dist/matter/endpoints.js.map +0 -1
  78. package/dist/matter/export.d.ts +0 -5
  79. package/dist/matter/export.d.ts.map +0 -1
  80. package/dist/matter/export.js.map +0 -1
  81. package/dist/matter/types.d.ts +0 -3
  82. package/dist/matter/types.d.ts.map +0 -1
  83. package/dist/matter/types.js.map +0 -1
  84. package/dist/matterbridge.d.ts +0 -425
  85. package/dist/matterbridge.d.ts.map +0 -1
  86. package/dist/matterbridge.js.map +0 -1
  87. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -39
  88. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  89. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  90. package/dist/matterbridgeBehaviors.d.ts +0 -1056
  91. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  92. package/dist/matterbridgeBehaviors.js.map +0 -1
  93. package/dist/matterbridgeDeviceTypes.d.ts +0 -177
  94. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  95. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  96. package/dist/matterbridgeDynamicPlatform.d.ts +0 -39
  97. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  98. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  99. package/dist/matterbridgeEndpoint.d.ts +0 -835
  100. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  101. package/dist/matterbridgeEndpoint.js.map +0 -1
  102. package/dist/matterbridgeEndpointHelpers.d.ts +0 -2275
  103. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  104. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  105. package/dist/matterbridgePlatform.d.ts +0 -285
  106. package/dist/matterbridgePlatform.d.ts.map +0 -1
  107. package/dist/matterbridgePlatform.js.map +0 -1
  108. package/dist/matterbridgeTypes.d.ts +0 -179
  109. package/dist/matterbridgeTypes.d.ts.map +0 -1
  110. package/dist/matterbridgeTypes.js.map +0 -1
  111. package/dist/pluginManager.d.ts +0 -236
  112. package/dist/pluginManager.d.ts.map +0 -1
  113. package/dist/pluginManager.js.map +0 -1
  114. package/dist/shelly.d.ts +0 -92
  115. package/dist/shelly.d.ts.map +0 -1
  116. package/dist/shelly.js.map +0 -1
  117. package/dist/storage/export.d.ts +0 -2
  118. package/dist/storage/export.d.ts.map +0 -1
  119. package/dist/storage/export.js.map +0 -1
  120. package/dist/update.d.ts +0 -32
  121. package/dist/update.d.ts.map +0 -1
  122. package/dist/update.js.map +0 -1
  123. package/dist/utils/colorUtils.d.ts +0 -61
  124. package/dist/utils/colorUtils.d.ts.map +0 -1
  125. package/dist/utils/colorUtils.js.map +0 -1
  126. package/dist/utils/copyDirectory.d.ts +0 -32
  127. package/dist/utils/copyDirectory.d.ts.map +0 -1
  128. package/dist/utils/copyDirectory.js.map +0 -1
  129. package/dist/utils/createZip.d.ts +0 -38
  130. package/dist/utils/createZip.d.ts.map +0 -1
  131. package/dist/utils/createZip.js.map +0 -1
  132. package/dist/utils/deepCopy.d.ts +0 -31
  133. package/dist/utils/deepCopy.d.ts.map +0 -1
  134. package/dist/utils/deepCopy.js.map +0 -1
  135. package/dist/utils/deepEqual.d.ts +0 -53
  136. package/dist/utils/deepEqual.d.ts.map +0 -1
  137. package/dist/utils/deepEqual.js.map +0 -1
  138. package/dist/utils/export.d.ts +0 -10
  139. package/dist/utils/export.d.ts.map +0 -1
  140. package/dist/utils/export.js.map +0 -1
  141. package/dist/utils/isvalid.d.ts +0 -87
  142. package/dist/utils/isvalid.d.ts.map +0 -1
  143. package/dist/utils/isvalid.js.map +0 -1
  144. package/dist/utils/network.d.ts +0 -69
  145. package/dist/utils/network.d.ts.map +0 -1
  146. package/dist/utils/network.js.map +0 -1
  147. package/dist/utils/parameter.d.ts +0 -44
  148. package/dist/utils/parameter.d.ts.map +0 -1
  149. package/dist/utils/parameter.js.map +0 -1
  150. package/dist/utils/wait.d.ts +0 -43
  151. package/dist/utils/wait.d.ts.map +0 -1
  152. package/dist/utils/wait.js.map +0 -1
  153. /package/frontend/build/static/js/{main.f00179ca.js.LICENSE.txt → main.1fa50342.js.LICENSE.txt} +0 -0
@@ -1,36 +1,10 @@
1
- /**
2
- * This file contains the class MatterbridgeEndpoint that extends the Endpoint class from the Matter.js library.
3
- *
4
- * @file matterbridgeEndpoint.ts
5
- * @author Luca Liguori
6
- * @date 2024-10-01
7
- * @version 2.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
- // AnsiLogger module
24
1
  import { AnsiLogger, BLUE, CYAN, YELLOW, db, debugStringify, er, hk, or, zb } from './logger/export.js';
25
- // Matterbridge
26
2
  import { bridgedNode } from './matterbridgeDeviceTypes.js';
27
3
  import { isValidNumber, isValidObject } from './utils/export.js';
28
4
  import { MatterbridgeBehavior, MatterbridgeBehaviorDevice, MatterbridgeIdentifyServer, MatterbridgeOnOffServer, MatterbridgeLevelControlServer, MatterbridgeColorControlServer, MatterbridgeWindowCoveringServer, MatterbridgeThermostatServer, MatterbridgeFanControlServer, MatterbridgeDoorLockServer, MatterbridgeModeSelectServer, MatterbridgeValveConfigurationAndControlServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeSwitchServer, } from './matterbridgeBehaviors.js';
29
5
  import { addClusterServers, addFixedLabel, addOptionalClusterServers, addRequiredClusterServers, addUserLabel, capitalizeFirstLetter, createUniqueId, getBehavior, getBehaviourTypesFromClusterClientIds, getBehaviourTypesFromClusterServerIds, getDefaultFlowMeasurementClusterServer, getDefaultIlluminanceMeasurementClusterServer, getDefaultPressureMeasurementClusterServer, getDefaultRelativeHumidityMeasurementClusterServer, getDefaultTemperatureMeasurementClusterServer, getDefaultOccupancySensingClusterServer, lowercaseFirstLetter, updateAttribute, getClusterId, getAttributeId, setAttribute, getAttribute, checkNotLatinCharacters, generateUniqueId, subscribeAttribute, } from './matterbridgeEndpointHelpers.js';
30
- // @matter
31
6
  import { Endpoint, Lifecycle, MutableEndpoint, NamedHandler, SupportedBehaviors, VendorId } from '@matter/main';
32
7
  import { ClusterType, getClusterNameById, MeasurementType } from '@matter/main/types';
33
- // @matter clusters
34
8
  import { Descriptor } from '@matter/main/clusters/descriptor';
35
9
  import { PowerSource } from '@matter/main/clusters/power-source';
36
10
  import { BridgedDeviceBasicInformation } from '@matter/main/clusters/bridged-device-basic-information';
@@ -52,7 +26,9 @@ import { ElectricalPowerMeasurement } from '@matter/main/clusters/electrical-pow
52
26
  import { ElectricalEnergyMeasurement } from '@matter/main/clusters/electrical-energy-measurement';
53
27
  import { AirQuality } from '@matter/main/clusters/air-quality';
54
28
  import { ConcentrationMeasurement } from '@matter/main/clusters/concentration-measurement';
55
- // @matter behaviors
29
+ import { RvcRunMode } from '@matter/main/clusters/rvc-run-mode';
30
+ import { RvcOperationalState } from '@matter/main/clusters/rvc-operational-state';
31
+ import { OccupancySensing } from '@matter/main/clusters/occupancy-sensing';
56
32
  import { DescriptorServer } from '@matter/main/behaviors/descriptor';
57
33
  import { PowerSourceServer } from '@matter/main/behaviors/power-source';
58
34
  import { BridgedDeviceBasicInformationServer } from '@matter/main/behaviors/bridged-device-basic-information';
@@ -81,9 +57,12 @@ import { Pm25ConcentrationMeasurementServer } from '@matter/main/behaviors/pm25-
81
57
  import { Pm10ConcentrationMeasurementServer } from '@matter/main/behaviors/pm10-concentration-measurement';
82
58
  import { RadonConcentrationMeasurementServer } from '@matter/main/behaviors/radon-concentration-measurement';
83
59
  import { TotalVolatileOrganicCompoundsConcentrationMeasurementServer } from '@matter/main/behaviors/total-volatile-organic-compounds-concentration-measurement';
60
+ import { RvcRunModeServer } from '@matter/main/behaviors/rvc-run-mode';
61
+ import { RvcOperationalStateServer } from '@matter/main/behaviors/rvc-operational-state';
62
+ import { RvcCleanModeServer } from '@matter/main/behaviors/rvc-clean-mode';
84
63
  export class MatterbridgeEndpoint extends Endpoint {
85
64
  static bridgeMode = '';
86
- static logLevel = "info" /* LogLevel.INFO */;
65
+ static logLevel = "info";
87
66
  log;
88
67
  plugin = undefined;
89
68
  configUrl = undefined;
@@ -99,25 +78,14 @@ export class MatterbridgeEndpoint extends Endpoint {
99
78
  hardwareVersion = undefined;
100
79
  hardwareVersionString = undefined;
101
80
  productUrl = 'https://www.npmjs.com/package/matterbridge';
102
- // The first device type of the endpoint
103
81
  name = undefined;
104
82
  deviceType;
105
83
  uniqueStorageKey = undefined;
106
84
  tagList = undefined;
107
- // Maps matter deviceTypes
108
85
  deviceTypes = new Map();
109
- // Command handler
110
86
  commandHandler = new NamedHandler();
111
- /**
112
- * Represents a MatterbridgeEndpoint.
113
- * @constructor
114
- * @param {DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>} definition - The DeviceTypeDefinition(s) of the endpoint.
115
- * @param {MatterbridgeEndpointOptions} [options={}] - The options for the device.
116
- * @param {boolean} [debug=false] - Debug flag.
117
- */
118
87
  constructor(definition, options = {}, debug = false) {
119
88
  let deviceTypeList = [];
120
- // Get the first DeviceTypeDefinition
121
89
  let firstDefinition;
122
90
  if (Array.isArray(definition)) {
123
91
  firstDefinition = definition[0];
@@ -130,7 +98,6 @@ export class MatterbridgeEndpoint extends Endpoint {
130
98
  firstDefinition = definition;
131
99
  deviceTypeList = [{ deviceType: firstDefinition.code, revision: firstDefinition.revision }];
132
100
  }
133
- // Convert the first DeviceTypeDefinition to an EndpointType.Options
134
101
  const deviceTypeDefinitionV8 = {
135
102
  name: firstDefinition.name.replace('-', '_'),
136
103
  deviceType: firstDefinition.code,
@@ -149,11 +116,9 @@ export class MatterbridgeEndpoint extends Endpoint {
149
116
  behaviors: options.tagList ? SupportedBehaviors(DescriptorServer.with(Descriptor.Feature.TagList)) : {},
150
117
  };
151
118
  const endpointV8 = MutableEndpoint(deviceTypeDefinitionV8);
152
- // Check if the uniqueStorageKey is valid
153
119
  if (options.uniqueStorageKey && checkNotLatinCharacters(options.uniqueStorageKey)) {
154
120
  options.uniqueStorageKey = generateUniqueId(options.uniqueStorageKey);
155
121
  }
156
- // Convert the options to an Endpoint.Options
157
122
  const optionsV8 = {
158
123
  id: options.uniqueStorageKey?.replace(/[ .]/g, ''),
159
124
  number: options.endpointId,
@@ -171,41 +136,17 @@ export class MatterbridgeEndpoint extends Endpoint {
171
136
  }
172
137
  else
173
138
  this.deviceTypes.set(firstDefinition.code, firstDefinition);
174
- // console.log('MatterbridgeEndpoint.option', options);
175
- // console.log('MatterbridgeEndpoint.endpointV8', endpointV8);
176
- // console.log('MatterbridgeEndpoint.optionsV8', optionsV8);
177
- // Create the logger
178
- this.log = new AnsiLogger({ logName: options.uniqueStorageKey ?? 'MatterbridgeEndpoint', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: debug === true ? "debug" /* LogLevel.DEBUG */ : MatterbridgeEndpoint.logLevel });
139
+ this.log = new AnsiLogger({ logName: options.uniqueStorageKey ?? 'MatterbridgeEndpoint', logTimestampFormat: 4, logLevel: debug === true ? "debug" : MatterbridgeEndpoint.logLevel });
179
140
  this.log.debug(`${YELLOW}new${db} MatterbridgeEndpoint: ${zb}${'0x' + firstDefinition.code.toString(16).padStart(4, '0')}${db}-${zb}${firstDefinition.name}${db} ` +
180
141
  `id: ${CYAN}${options.uniqueStorageKey}${db} number: ${CYAN}${options.endpointId}${db} taglist: ${CYAN}${options.tagList ? debugStringify(options.tagList) : 'undefined'}${db}`);
181
- // Add MatterbridgeBehavior with MatterbridgeBehaviorDevice
182
142
  this.behaviors.require(MatterbridgeBehavior, { deviceCommand: new MatterbridgeBehaviorDevice(this.log, this.commandHandler, undefined) });
183
143
  }
184
- /**
185
- * Loads an instance of the MatterbridgeEndpoint class.
186
- *
187
- * @param {DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>} definition - The DeviceTypeDefinition(s) of the device.
188
- * @param {MatterbridgeEndpointOptions} [options={}] - The options for the device.
189
- * @param {boolean} [debug=false] - Debug flag.
190
- * @returns {Promise<MatterbridgeEndpoint>} MatterbridgeEndpoint instance.
191
- */
192
144
  static async loadInstance(definition, options = {}, debug = false) {
193
145
  return new MatterbridgeEndpoint(definition, options, debug);
194
146
  }
195
- /**
196
- * Get all the device types of this endpoint.
197
- *
198
- * @returns {DeviceTypeDefinition[]} The device types of this endpoint.
199
- */
200
147
  getDeviceTypes() {
201
148
  return Array.from(this.deviceTypes.values());
202
149
  }
203
- /**
204
- * Checks if the provided cluster server is supported by this endpoint.
205
- *
206
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to check.
207
- * @returns {boolean} True if the cluster server is supported, false otherwise.
208
- */
209
150
  hasClusterServer(cluster) {
210
151
  const behavior = getBehavior(this, cluster);
211
152
  if (behavior)
@@ -213,13 +154,6 @@ export class MatterbridgeEndpoint extends Endpoint {
213
154
  else
214
155
  return false;
215
156
  }
216
- /**
217
- * Checks if the provided attribute server is supported for a given cluster of this endpoint.
218
- *
219
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to check.
220
- * @param {string} attribute - The attribute name to check.
221
- * @returns {boolean} True if the attribute server is supported, false otherwise.
222
- */
223
157
  hasAttributeServer(cluster, attribute) {
224
158
  const behavior = getBehavior(this, cluster);
225
159
  if (!behavior || !this.behaviors.supported[behavior.id])
@@ -228,186 +162,72 @@ export class MatterbridgeEndpoint extends Endpoint {
228
162
  const defaults = this.behaviors.defaultsFor(behavior);
229
163
  return lowercaseFirstLetter(attribute) in options || lowercaseFirstLetter(attribute) in defaults;
230
164
  }
231
- /**
232
- * Retrieves the initial options for the provided cluster server.
233
- *
234
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to get options for.
235
- * @returns {Record<string, boolean | number | bigint | string | object | null> | undefined} The options for the provided cluster server, or undefined if the cluster is not supported.
236
- */
237
165
  getClusterServerOptions(cluster) {
238
166
  const behavior = getBehavior(this, cluster);
239
167
  if (!behavior)
240
168
  return undefined;
241
169
  return this.behaviors.optionsFor(behavior);
242
170
  }
243
- /**
244
- * Retrieves the value of the provided attribute from the given cluster.
245
- *
246
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to retrieve the attribute from.
247
- * @param {string} attribute - The name of the attribute to retrieve.
248
- * @param {AnsiLogger} [log] - Optional logger for error and info messages.
249
- * @returns {any} The value of the attribute, or undefined if the attribute is not found.
250
- */
251
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
252
171
  getAttribute(cluster, attribute, log) {
253
172
  return getAttribute(this, cluster, attribute, log);
254
173
  }
255
- /**
256
- * Sets the value of an attribute on a cluster server.
257
- *
258
- * @param {Behavior.Type | ClusterType | ClusterId | string} clusterId - The ID of the cluster.
259
- * @param {string} attribute - The name of the attribute.
260
- * @param {boolean | number | bigint | string | object | null} value - The value to set for the attribute.
261
- * @param {AnsiLogger} [log] - (Optional) The logger to use for logging errors and information.
262
- * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating whether the attribute was successfully set.
263
- */
264
174
  async setAttribute(clusterId, attribute, value, log) {
265
175
  return await setAttribute(this, clusterId, attribute, value, log);
266
176
  }
267
- /**
268
- * Update the value of an attribute on a cluster server only if the value is different.
269
- *
270
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to set the attribute on.
271
- * @param {string} attribute - The name of the attribute.
272
- * @param {boolean | number | bigint | string | object | null} value - The value to set for the attribute.
273
- * @param {AnsiLogger} [log] - (Optional) The logger to use for logging the update. Errors are logged to the endpoint logger.
274
- * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating whether the attribute was successfully set.
275
- */
276
177
  async updateAttribute(cluster, attribute, value, log) {
277
178
  return await updateAttribute(this, cluster, attribute, value, log);
278
179
  }
279
- /**
280
- * Subscribes to the provided attribute on a cluster.
281
- *
282
- * @param {Behavior.Type | ClusterType | ClusterId | string} cluster - The cluster to subscribe the attribute to.
283
- * @param {string} attribute - The name of the attribute to subscribe to.
284
- * @param {(newValue: any, oldValue: any) => void} listener - A callback function that will be called when the attribute value changes.
285
- * @param {AnsiLogger} [log] - Optional logger for logging errors and information.
286
- * @returns {Promise<boolean>} - A boolean indicating whether the subscription was successful.
287
- */
288
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
180
  async subscribeAttribute(cluster, attribute, listener, log) {
290
181
  return await subscribeAttribute(this, cluster, attribute, listener, log);
291
182
  }
292
- /**
293
- * Triggers an event on the specified cluster.
294
- *
295
- * @param {ClusterId} clusterId - The ID of the cluster.
296
- * @param {string} event - The name of the event to trigger.
297
- * @param {Record<string, boolean | number | bigint | string | object | undefined | null>} payload - The payload to pass to the event.
298
- * @param {AnsiLogger} [log] - Optional logger for logging information.
299
- * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating whether the event was successfully triggered.
300
- */
301
183
  async triggerEvent(clusterId, event, payload, log) {
302
184
  const clusterName = lowercaseFirstLetter(getClusterNameById(clusterId));
303
185
  if (this.construction.status !== Lifecycle.Status.Active) {
304
186
  this.log.error(`triggerEvent ${hk}${clusterName}.${event}${er} error: Endpoint ${or}${this.maybeId}${er}:${or}${this.maybeNumber}${er} is in the ${BLUE}${this.construction.status}${er} state`);
305
187
  return false;
306
188
  }
307
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
308
189
  const events = this.events;
309
190
  if (!(clusterName in events) || !(event in events[clusterName])) {
310
191
  this.log.error(`triggerEvent ${hk}${event}${er} error: Cluster ${'0x' + clusterId.toString(16).padStart(4, '0')}:${clusterName} not found on endpoint ${or}${this.id}${er}:${or}${this.number}${er}`);
311
192
  return false;
312
193
  }
313
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
314
- // @ts-ignore
315
194
  await this.act((agent) => agent[clusterName].events[event].emit(payload, agent.context));
316
195
  log?.info(`${db}Trigger event ${hk}${capitalizeFirstLetter(clusterName)}${db}.${hk}${event}${db} with ${debugStringify(payload)}${db} on endpoint ${or}${this.id}${db}:${or}${this.number}${db} `);
317
196
  return true;
318
197
  }
319
- /**
320
- * Adds cluster servers from the provided server list.
321
- *
322
- * @param {ClusterId[]} serverList - The list of cluster IDs to add.
323
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
324
- */
325
198
  addClusterServers(serverList) {
326
199
  addClusterServers(this, serverList);
327
200
  return this;
328
201
  }
329
- /**
330
- * Adds a fixed label to the FixedLabel cluster. If the cluster server is not present, it will be added.
331
- *
332
- * @param {string} label - The label to add.
333
- * @param {string} value - The value of the label.
334
- * @returns {Promise<this>} The current MatterbridgeEndpoint instance for chaining.
335
- */
336
202
  async addFixedLabel(label, value) {
337
203
  await addFixedLabel(this, label, value);
338
204
  return this;
339
205
  }
340
- /**
341
- * Adds a user label to the UserLabel cluster. If the cluster server is not present, it will be added.
342
- *
343
- * @param {string} label - The label to add.
344
- * @param {string} value - The value of the label.
345
- * @returns {Promise<this>} The current MatterbridgeEndpoint instance for chaining.
346
- */
347
206
  async addUserLabel(label, value) {
348
207
  await addUserLabel(this, label, value);
349
208
  return this;
350
209
  }
351
- /**
352
- * Adds a command handler for the specified command.
353
- *
354
- * @param {keyof MatterbridgeEndpointCommands} command - The command to add the handler for.
355
- * @param {HandlerFunction} handler - The handler function to execute when the command is received.
356
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
357
- */
358
210
  addCommandHandler(command, handler) {
359
211
  this.commandHandler.addHandler(command, handler);
360
212
  return this;
361
213
  }
362
- /**
363
- * Execute the command handler for the specified command. Mainly used in Jest tests.
364
- *
365
- * @param {keyof MatterbridgeEndpointCommands} command - The command to execute.
366
- * @param {Record<string, boolean | number | bigint | string | object | null>} request - The optional request to pass to the handler function.
367
- * @returns {Promise<void>} A promise that resolves when the command handler has been executed
368
- */
369
214
  async executeCommandHandler(command, request) {
370
215
  await this.commandHandler.executeHandler(command, { request });
371
216
  }
372
- /**
373
- * Adds the required cluster servers (only if they are not present) for the device types of the specified endpoint.
374
- *
375
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
376
- */
377
217
  addRequiredClusterServers() {
378
218
  addRequiredClusterServers(this);
379
219
  return this;
380
220
  }
381
- /**
382
- * Adds the optional cluster servers (only if they are not present) for the device types of the specified endpoint.
383
- *
384
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
385
- */
386
221
  addOptionalClusterServers() {
387
222
  addOptionalClusterServers(this);
388
223
  return this;
389
224
  }
390
- /**
391
- * Retrieves all cluster servers.
392
- *
393
- * @returns {Behavior.Type[]} An array of all cluster servers.
394
- */
395
225
  getAllClusterServers() {
396
226
  return Object.values(this.behaviors.supported);
397
227
  }
398
- /**
399
- * Retrieves the names of all cluster servers.
400
- *
401
- * @returns {string[]} An array of all cluster server names.
402
- */
403
228
  getAllClusterServerNames() {
404
229
  return Object.keys(this.behaviors.supported);
405
230
  }
406
- /**
407
- * Iterates over each attribute of each cluster server of the device state and calls the provided callback function.
408
- *
409
- * @param {Function} callback - The callback function to call with the cluster name, cluster id, attribute name, attribute id and attribute value.
410
- */
411
231
  forEachAttribute(callback) {
412
232
  if (!this.lifecycle.isReady || this.construction.status !== Lifecycle.Status.Active)
413
233
  return;
@@ -415,34 +235,16 @@ export class MatterbridgeEndpoint extends Endpoint {
415
235
  for (const [attributeName, attributeValue] of Object.entries(clusterAttributes)) {
416
236
  const clusterId = getClusterId(this, clusterName);
417
237
  if (clusterId === undefined) {
418
- // this.log.error(`forEachAttribute error: cluster ${clusterName} not found`);
419
238
  continue;
420
239
  }
421
240
  const attributeId = getAttributeId(this, clusterName, attributeName);
422
241
  if (attributeId === undefined) {
423
- // this.log.error(`forEachAttribute error: attribute ${clusterName}.${attributeName} not found`);
424
242
  continue;
425
243
  }
426
244
  callback(clusterName, clusterId, attributeName, attributeId, attributeValue);
427
245
  }
428
246
  }
429
247
  }
430
- /**
431
- * Adds a child endpoint with the specified device types and options.
432
- * If the child endpoint is not already present, it will be created and added.
433
- * If the child endpoint is already present, the existing child endpoint will be returned.
434
- *
435
- * @param {string} endpointName - The name of the new endpoint to add.
436
- * @param {DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>} definition - The device types to add.
437
- * @param {MatterbridgeEndpointOptions} [options={}] - The options for the endpoint.
438
- * @param {boolean} [debug=false] - Whether to enable debug logging.
439
- * @returns {MatterbridgeEndpoint} - The child endpoint that was found or added.
440
- *
441
- * @example
442
- * ```typescript
443
- * const endpoint = device.addChildDeviceType('Temperature', [temperatureSensor], { tagList: [{ mfgCode: null, namespaceId: LocationTag.Indoor.namespaceId, tag: LocationTag.Indoor.tag, label: null }] }, true);
444
- * ```
445
- */
446
248
  addChildDeviceType(endpointName, definition, options = {}, debug = false) {
447
249
  this.log.debug(`addChildDeviceType: ${CYAN}${endpointName}${db}`);
448
250
  let alreadyAdded = false;
@@ -482,23 +284,6 @@ export class MatterbridgeEndpoint extends Endpoint {
482
284
  }
483
285
  return child;
484
286
  }
485
- /**
486
- * Adds a child endpoint with one or more device types with the required cluster servers and the specified cluster servers.
487
- * If the child endpoint is not already present in the childEndpoints, it will be added.
488
- * If the child endpoint is already present in the childEndpoints, the device types and cluster servers will be added to the existing child endpoint.
489
- *
490
- * @param {string} endpointName - The name of the new enpoint to add.
491
- * @param {DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>} definition - The device types to add.
492
- * @param {ClusterId[]} [serverList=[]] - The list of cluster IDs to include.
493
- * @param {MatterbridgeEndpointOptions} [options={}] - The options for the device.
494
- * @param {boolean} [debug=false] - Whether to enable debug logging.
495
- * @returns {MatterbridgeEndpoint} - The child endpoint that was found or added.
496
- *
497
- * @example
498
- * ```typescript
499
- * const endpoint = device.addChildDeviceTypeWithClusterServer('Temperature', [temperatureSensor], [], { tagList: [{ mfgCode: null, namespaceId: LocationTag.Indoor.namespaceId, tag: LocationTag.Indoor.tag, label: null }] }, true);
500
- * ```
501
- */
502
287
  addChildDeviceTypeWithClusterServer(endpointName, definition, serverList = [], options = {}, debug = false) {
503
288
  this.log.debug(`addChildDeviceTypeWithClusterServer: ${CYAN}${endpointName}${db}`);
504
289
  let alreadyAdded = false;
@@ -561,38 +346,15 @@ export class MatterbridgeEndpoint extends Endpoint {
561
346
  }
562
347
  return child;
563
348
  }
564
- /**
565
- * Retrieves a child endpoint by its name.
566
- *
567
- * @param {string} endpointName - The name of the endpoint to retrieve.
568
- * @returns {Endpoint | undefined} The child endpoint with the specified name, or undefined if not found.
569
- */
570
349
  getChildEndpointByName(endpointName) {
571
350
  return this.parts.find((part) => part.id === endpointName);
572
351
  }
573
- /**
574
- * Retrieves a child endpoint by its EndpointNumber.
575
- *
576
- * @param {EndpointNumber} endpointNumber - The EndpointNumber of the endpoint to retrieve.
577
- * @returns {MatterbridgeEndpoint | undefined} The child endpoint with the specified EndpointNumber, or undefined if not found.
578
- */
579
352
  getChildEndpoint(endpointNumber) {
580
353
  return this.parts.find((part) => part.number === endpointNumber);
581
354
  }
582
- /**
583
- * Get all the child endpoints of this endpoint.
584
- *
585
- * @returns {MatterbridgeEndpoint[]} The child endpoints.
586
- */
587
355
  getChildEndpoints() {
588
356
  return Array.from(this.parts);
589
357
  }
590
- /**
591
- * Serializes the Matterbridge device into a serialized object.
592
- *
593
- * @param pluginName - The name of the plugin.
594
- * @returns The serialized Matterbridge device object.
595
- */
596
358
  static serialize(device) {
597
359
  if (!device.serialNumber || !device.deviceName || !device.uniqueId)
598
360
  return;
@@ -615,15 +377,9 @@ export class MatterbridgeEndpoint extends Endpoint {
615
377
  serialized.clusterServersId.push(BridgedDeviceBasicInformation.Cluster.id);
616
378
  if (behaviorName === 'powerSource')
617
379
  serialized.clusterServersId.push(PowerSource.Cluster.id);
618
- // serialized.clusterServersId.push(this.behaviors.supported[behaviorName]cluster.id);
619
380
  });
620
381
  return serialized;
621
382
  }
622
- /**
623
- * Deserializes the device into a serialized object.
624
- *
625
- * @returns The deserialized MatterbridgeDevice.
626
- */
627
383
  static deserialize(serializedDevice) {
628
384
  const device = new MatterbridgeEndpoint(serializedDevice.deviceTypes, { uniqueStorageKey: serializedDevice.endpointName, endpointId: serializedDevice.endpoint }, false);
629
385
  device.plugin = serializedDevice.pluginName;
@@ -639,16 +395,9 @@ export class MatterbridgeEndpoint extends Endpoint {
639
395
  device.createDefaultBridgedDeviceBasicInformationClusterServer(serializedDevice.deviceName, serializedDevice.serialNumber, serializedDevice.vendorId ?? 0xfff1, serializedDevice.vendorName ?? 'Matterbridge', serializedDevice.productName ?? 'Matterbridge device');
640
396
  else if (clusterId === PowerSource.Cluster.id)
641
397
  device.createDefaultPowerSourceWiredClusterServer();
642
- // else addClusterServerFromList(device, [clusterId]);
643
398
  }
644
399
  return device;
645
400
  }
646
- /**
647
- * Creates a default power source wired cluster server.
648
- *
649
- * @param wiredCurrentType - The type of wired current (default: PowerSource.WiredCurrentType.Ac)
650
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
651
- */
652
401
  createDefaultPowerSourceWiredClusterServer(wiredCurrentType = PowerSource.WiredCurrentType.Ac) {
653
402
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Wired), {
654
403
  wiredCurrentType,
@@ -659,16 +408,6 @@ export class MatterbridgeEndpoint extends Endpoint {
659
408
  });
660
409
  return this;
661
410
  }
662
- /**
663
- * Creates a default power source replaceable battery cluster server.
664
- *
665
- * @param batPercentRemaining - The remaining battery percentage (default: 100).
666
- * @param batChargeLevel - The battery charge level (default: PowerSource.BatChargeLevel.Ok).
667
- * @param batVoltage - The battery voltage (default: 1500).
668
- * @param batReplacementDescription - The battery replacement description (default: 'Battery type').
669
- * @param batQuantity - The battery quantity (default: 1).
670
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
671
- */
672
411
  createDefaultPowerSourceReplaceableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500, batReplacementDescription = 'Battery type', batQuantity = 1) {
673
412
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Replaceable), {
674
413
  status: PowerSource.PowerSourceStatus.Active,
@@ -686,14 +425,6 @@ export class MatterbridgeEndpoint extends Endpoint {
686
425
  });
687
426
  return this;
688
427
  }
689
- /**
690
- * Creates a default power source rechargeable battery cluster server.
691
- *
692
- * @param batPercentRemaining - The remaining battery percentage (default: 100).
693
- * @param batChargeLevel - The battery charge level (default: PowerSource.BatChargeLevel.Ok).
694
- * @param batVoltage - The battery voltage (default: 1500).
695
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
696
- */
697
428
  createDefaultPowerSourceRechargeableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500) {
698
429
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable), {
699
430
  status: PowerSource.PowerSourceStatus.Active,
@@ -712,21 +443,6 @@ export class MatterbridgeEndpoint extends Endpoint {
712
443
  });
713
444
  return this;
714
445
  }
715
- /**
716
- * Creates a default Basic Information Cluster Server for the server node.
717
- *
718
- * @param deviceName - The name of the device.
719
- * @param serialNumber - The serial number of the device.
720
- * @param vendorId - The vendor ID of the device.
721
- * @param vendorName - The vendor name of the device.
722
- * @param productId - The product ID of the device.
723
- * @param productName - The product name of the device.
724
- * @param softwareVersion - The software version of the device. Default is 1.
725
- * @param softwareVersionString - The software version string of the device. Default is 'v.1.0.0'.
726
- * @param hardwareVersion - The hardware version of the device. Default is 1.
727
- * @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
728
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
729
- */
730
446
  createDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
731
447
  this.log.logName = deviceName;
732
448
  this.deviceName = deviceName;
@@ -750,20 +466,6 @@ export class MatterbridgeEndpoint extends Endpoint {
750
466
  }
751
467
  return this;
752
468
  }
753
- /**
754
- * Creates a default BridgedDeviceBasicInformationClusterServer for the aggregator endpoints.
755
- *
756
- * @param deviceName - The name of the device.
757
- * @param serialNumber - The serial number of the device.
758
- * @param vendorId - The vendor ID of the device.
759
- * @param vendorName - The name of the vendor.
760
- * @param productName - The name of the product.
761
- * @param softwareVersion - The software version of the device. Default is 1.
762
- * @param softwareVersionString - The software version string of the device. Default is 'v.1.0.0'.
763
- * @param hardwareVersion - The hardware version of the device. Default is 1.
764
- * @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
765
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
766
- */
767
469
  createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
768
470
  this.log.logName = deviceName;
769
471
  this.deviceName = deviceName;
@@ -780,7 +482,7 @@ export class MatterbridgeEndpoint extends Endpoint {
780
482
  this.behaviors.require(BridgedDeviceBasicInformationServer.enable({
781
483
  events: { leave: true, reachableChanged: true },
782
484
  }), {
783
- vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined, // 4874
485
+ vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined,
784
486
  vendorName: vendorName.slice(0, 32),
785
487
  productName: productName.slice(0, 32),
786
488
  productUrl: this.productUrl,
@@ -796,13 +498,6 @@ export class MatterbridgeEndpoint extends Endpoint {
796
498
  });
797
499
  return this;
798
500
  }
799
- /**
800
- * Creates a default identify cluster server with the specified identify time and type.
801
- *
802
- * @param {number} [identifyTime=0] - The time to identify the server. Defaults to 0.
803
- * @param {Identify.IdentifyType} [identifyType=Identify.IdentifyType.None] - The type of identification. Defaults to Identify.IdentifyType.None.
804
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
805
- */
806
501
  createDefaultIdentifyClusterServer(identifyTime = 0, identifyType = Identify.IdentifyType.None) {
807
502
  this.behaviors.require(MatterbridgeIdentifyServer, {
808
503
  identifyTime,
@@ -810,32 +505,14 @@ export class MatterbridgeEndpoint extends Endpoint {
810
505
  });
811
506
  return this;
812
507
  }
813
- /**
814
- * Creates a default groups cluster server.
815
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
816
- */
817
508
  createDefaultGroupsClusterServer() {
818
509
  this.behaviors.require(GroupsServer);
819
510
  return this;
820
511
  }
821
- /**
822
- * Creates a default scenes management cluster server.
823
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
824
- */
825
512
  createDefaultScenesClusterServer() {
826
513
  this.behaviors.require(ScenesManagementServer);
827
514
  return this;
828
515
  }
829
- /**
830
- * Creates a default OnOff cluster server for light devices.
831
- *
832
- * @param {boolean} [onOff=false] - The initial state of the OnOff cluster.
833
- * @param {boolean} [globalSceneControl=false] - The global scene control state.
834
- * @param {number} [onTime=0] - The on time value.
835
- * @param {number} [offWaitTime=0] - The off wait time value.
836
- * @param {OnOff.StartUpOnOff | null} [startUpOnOff=null] - The start-up OnOff state. Null means previous state.
837
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
838
- */
839
516
  createDefaultOnOffClusterServer(onOff = false, globalSceneControl = false, onTime = 0, offWaitTime = 0, startUpOnOff = null) {
840
517
  this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.Lighting), {
841
518
  onOff,
@@ -846,40 +523,18 @@ export class MatterbridgeEndpoint extends Endpoint {
846
523
  });
847
524
  return this;
848
525
  }
849
- /**
850
- * Creates an OnOff cluster server without features.
851
- *
852
- * @param {boolean} [onOff=false] - The initial state of the OnOff cluster.
853
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
854
- */
855
526
  createOnOffClusterServer(onOff = false) {
856
527
  this.behaviors.require(MatterbridgeOnOffServer.for(ClusterType(OnOff.Base)), {
857
528
  onOff,
858
529
  });
859
530
  return this;
860
531
  }
861
- /**
862
- * Creates a DeadFront OnOff cluster server.
863
- *
864
- * @param {boolean} [onOff=false] - The initial state of the OnOff cluster.
865
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
866
- */
867
532
  createDeadFrontOnOffClusterServer(onOff = false) {
868
533
  this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.DeadFrontBehavior), {
869
534
  onOff,
870
535
  });
871
536
  return this;
872
537
  }
873
- /**
874
- * Creates a default level control cluster server for light devices.
875
- *
876
- * @param {number} [currentLevel=254] - The current level (default: 254).
877
- * @param {number} [minLevel=1] - The minimum level (default: 1).
878
- * @param {number} [maxLevel=254] - The maximum level (default: 254).
879
- * @param {number | null} [onLevel=null] - The on level (default: null).
880
- * @param {number | null} [startUpCurrentLevel=null] - The startUp on level (default: null).
881
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
882
- */
883
538
  createDefaultLevelControlClusterServer(currentLevel = 254, minLevel = 1, maxLevel = 254, onLevel = null, startUpCurrentLevel = null) {
884
539
  this.behaviors.require(MatterbridgeLevelControlServer.with(LevelControl.Feature.OnOff, LevelControl.Feature.Lighting), {
885
540
  currentLevel,
@@ -895,18 +550,6 @@ export class MatterbridgeEndpoint extends Endpoint {
895
550
  });
896
551
  return this;
897
552
  }
898
- /**
899
- * Creates a default color control cluster server with Xy, HueSaturation and ColorTemperature.
900
- *
901
- * @param currentX - The current X value.
902
- * @param currentY - The current Y value.
903
- * @param currentHue - The current hue value.
904
- * @param currentSaturation - The current saturation value.
905
- * @param colorTemperatureMireds - The color temperature in mireds.
906
- * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
907
- * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
908
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
909
- */
910
553
  createDefaultColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
911
554
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
912
555
  colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
@@ -929,19 +572,6 @@ export class MatterbridgeEndpoint extends Endpoint {
929
572
  });
930
573
  return this;
931
574
  }
932
- /**
933
- * Creates a Xy color control cluster server with Xy and ColorTemperature.
934
- *
935
- * @param currentX - The current X value.
936
- * @param currentY - The current Y value.
937
- * @param colorTemperatureMireds - The color temperature in mireds.
938
- * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
939
- * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
940
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
941
- *
942
- * @remarks
943
- * From zigbee to matter = Math.max(Math.min(Math.round(x * 65536), 65279), 0)
944
- */
945
575
  createXyColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
946
576
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.ColorTemperature), {
947
577
  colorMode: ColorControl.ColorMode.CurrentXAndCurrentY,
@@ -962,16 +592,6 @@ export class MatterbridgeEndpoint extends Endpoint {
962
592
  });
963
593
  return this;
964
594
  }
965
- /**
966
- * Creates a default hue and saturation control cluster server with HueSaturation and ColorTemperature.
967
- *
968
- * @param currentHue - The current hue value.
969
- * @param currentSaturation - The current saturation value.
970
- * @param colorTemperatureMireds - The color temperature in mireds.
971
- * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
972
- * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
973
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
974
- */
975
595
  createHsColorControlClusterServer(currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
976
596
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
977
597
  colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
@@ -992,14 +612,6 @@ export class MatterbridgeEndpoint extends Endpoint {
992
612
  });
993
613
  return this;
994
614
  }
995
- /**
996
- * Creates a color temperature color control cluster server.
997
- *
998
- * @param colorTemperatureMireds - The color temperature in mireds.
999
- * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
1000
- * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
1001
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1002
- */
1003
615
  createCtColorControlClusterServer(colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
1004
616
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.ColorTemperature), {
1005
617
  colorMode: ColorControl.ColorMode.ColorTemperatureMireds,
@@ -1018,23 +630,12 @@ export class MatterbridgeEndpoint extends Endpoint {
1018
630
  });
1019
631
  return this;
1020
632
  }
1021
- /**
1022
- * Configures the color control mode for the device.
1023
- *
1024
- * @param {ColorControl.ColorMode} colorMode - The color mode to set.
1025
- */
1026
633
  async configureColorControlMode(colorMode) {
1027
634
  if (isValidNumber(colorMode, ColorControl.ColorMode.CurrentHueAndCurrentSaturation, ColorControl.ColorMode.ColorTemperatureMireds)) {
1028
635
  await this.setAttribute(ColorControl.Cluster.id, 'colorMode', colorMode, this.log);
1029
636
  await this.setAttribute(ColorControl.Cluster.id, 'enhancedColorMode', colorMode, this.log);
1030
637
  }
1031
638
  }
1032
- /**
1033
- * Creates a default window covering cluster server (Lift and PositionAwareLift).
1034
- *
1035
- * @param positionPercent100ths - The position percentage in 100ths (0-10000). Defaults to 0. Matter uses 10000 = fully closed 0 = fully opened.
1036
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1037
- */
1038
639
  createDefaultWindowCoveringClusterServer(positionPercent100ths) {
1039
640
  this.behaviors.require(MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift), {
1040
641
  type: WindowCovering.WindowCoveringType.Rollershade,
@@ -1050,15 +651,11 @@ export class MatterbridgeEndpoint extends Endpoint {
1050
651
  operationalStatus: { global: WindowCovering.MovementStatus.Stopped, lift: WindowCovering.MovementStatus.Stopped, tilt: WindowCovering.MovementStatus.Stopped },
1051
652
  endProductType: WindowCovering.EndProductType.RollerShade,
1052
653
  mode: { motorDirectionReversed: false, calibrationMode: false, maintenanceMode: false, ledFeedback: false },
1053
- targetPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
1054
- currentPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
654
+ targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
655
+ currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
1055
656
  });
1056
657
  return this;
1057
658
  }
1058
- /**
1059
- * Sets the window covering target position as the current position and stops the movement.
1060
- *
1061
- */
1062
659
  async setWindowCoveringTargetAsCurrentAndStopped() {
1063
660
  const position = this.getAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', this.log);
1064
661
  if (isValidNumber(position, 0, 10000)) {
@@ -1071,12 +668,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1071
668
  }
1072
669
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths and targetPositionLiftPercent100ths to ${position} and operationalStatus to Stopped.`);
1073
670
  }
1074
- /**
1075
- * Sets the current and target status of a window covering.
1076
- * @param {number} current - The current position of the window covering.
1077
- * @param {number} target - The target position of the window covering.
1078
- * @param {WindowCovering.MovementStatus} status - The movement status of the window covering.
1079
- */
1080
671
  async setWindowCoveringCurrentTargetStatus(current, target, status) {
1081
672
  await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', current, this.log);
1082
673
  await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', target, this.log);
@@ -1087,10 +678,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1087
678
  }, this.log);
1088
679
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${current}, targetPositionLiftPercent100ths: ${target} and operationalStatus: ${status}.`);
1089
680
  }
1090
- /**
1091
- * Sets the status of the window covering.
1092
- * @param {WindowCovering.MovementStatus} status - The movement status to set.
1093
- */
1094
681
  async setWindowCoveringStatus(status) {
1095
682
  await this.setAttribute(WindowCovering.Cluster.id, 'operationalStatus', {
1096
683
  global: status,
@@ -1099,11 +686,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1099
686
  }, this.log);
1100
687
  this.log.debug(`Set WindowCovering operationalStatus: ${status}`);
1101
688
  }
1102
- /**
1103
- * Retrieves the status of the window covering.
1104
- *
1105
- * @returns The global operational status of the window covering or undefined.
1106
- */
1107
689
  getWindowCoveringStatus() {
1108
690
  const status = this.getAttribute(WindowCovering.Cluster.id, 'operationalStatus', this.log);
1109
691
  if (isValidObject(status, 3) && 'global' in status && typeof status.global === 'number') {
@@ -1111,66 +693,36 @@ export class MatterbridgeEndpoint extends Endpoint {
1111
693
  return status.global;
1112
694
  }
1113
695
  }
1114
- /**
1115
- * Sets the target and current position of the window covering.
1116
- *
1117
- * @param position - The position to set, specified as a number.
1118
- */
1119
696
  async setWindowCoveringTargetAndCurrentPosition(position) {
1120
697
  await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', position, this.log);
1121
698
  await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', position, this.log);
1122
699
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${position} and targetPositionLiftPercent100ths: ${position}.`);
1123
700
  }
1124
- /**
1125
- * Creates a default thermostat cluster server with Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode.
1126
- *
1127
- * @param {number} [localTemperature=23] - The local temperature value in degrees Celsius. Defaults to 23°.
1128
- * @param {number} [occupiedHeatingSetpoint=21] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
1129
- * @param {number} [occupiedCoolingSetpoint=25] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
1130
- * @param {number} [minSetpointDeadBand=1] - The minimum setpoint dead band value. Defaults to 1°.
1131
- * @param {number} [minHeatSetpointLimit=0] - The minimum heat setpoint limit value. Defaults to 0°.
1132
- * @param {number} [maxHeatSetpointLimit=50] - The maximum heat setpoint limit value. Defaults to 50°.
1133
- * @param {number} [minCoolSetpointLimit=0] - The minimum cool setpoint limit value. Defaults to 0°.
1134
- * @param {number} [maxCoolSetpointLimit=50] - The maximum cool setpoint limit value. Defaults to 50°.
1135
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1136
- */
1137
701
  createDefaultThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 1, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
1138
702
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode), {
1139
703
  localTemperature: localTemperature * 100,
1140
704
  systemMode: Thermostat.SystemMode.Auto,
1141
705
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
1142
- // Thermostat.Feature.Heating
1143
706
  occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
1144
707
  minHeatSetpointLimit: minHeatSetpointLimit * 100,
1145
708
  maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
1146
709
  absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
1147
710
  absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
1148
- // Thermostat.Feature.Cooling
1149
711
  occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
1150
712
  minCoolSetpointLimit: minCoolSetpointLimit * 100,
1151
713
  maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
1152
714
  absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
1153
715
  absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
1154
- // Thermostat.Feature.AutoMode
1155
716
  minSetpointDeadBand: minSetpointDeadBand * 100,
1156
717
  thermostatRunningMode: Thermostat.ThermostatRunningMode.Off,
1157
718
  });
1158
719
  return this;
1159
720
  }
1160
- /**
1161
- * Creates a default heating thermostat cluster server with Thermostat.Feature.Heating.
1162
- * @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
1163
- * @param {number} [occupiedHeatingSetpoint] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
1164
- * @param {number} [minHeatSetpointLimit] - The minimum heat setpoint limit value. Defaults to 0°.
1165
- * @param {number} [maxHeatSetpointLimit] - The maximum heat setpoint limit value. Defaults to 50°.
1166
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1167
- */
1168
721
  createDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
1169
722
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating), {
1170
723
  localTemperature: localTemperature * 100,
1171
724
  systemMode: Thermostat.SystemMode.Heat,
1172
725
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.HeatingOnly,
1173
- // Thermostat.Feature.Heating
1174
726
  occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
1175
727
  minHeatSetpointLimit: minHeatSetpointLimit * 100,
1176
728
  maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
@@ -1179,20 +731,11 @@ export class MatterbridgeEndpoint extends Endpoint {
1179
731
  });
1180
732
  return this;
1181
733
  }
1182
- /**
1183
- * Creates a default cooling thermostat cluster server with Thermostat.Feature.Cooling.
1184
- * @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
1185
- * @param {number} [occupiedCoolingSetpoint] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
1186
- * @param {number} [minCoolSetpointLimit] - The minimum cool setpoint limit value. Defaults to 0°.
1187
- * @param {number} [maxCoolSetpointLimit] - The maximum cool setpoint limit value. Defaults to 50°.
1188
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1189
- */
1190
734
  createDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
1191
735
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Cooling), {
1192
736
  localTemperature: localTemperature * 100,
1193
737
  systemMode: Thermostat.SystemMode.Cool,
1194
738
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingOnly,
1195
- // Thermostat.Feature.Cooling
1196
739
  occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
1197
740
  minCoolSetpointLimit: minCoolSetpointLimit * 100,
1198
741
  maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
@@ -1201,12 +744,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1201
744
  });
1202
745
  return this;
1203
746
  }
1204
- /**
1205
- * Creates a default fan control cluster server.
1206
- *
1207
- * @param fanMode The fan mode to set. Defaults to `FanControl.FanMode.Off`.
1208
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1209
- */
1210
747
  createDefaultFanControlClusterServer(fanMode = FanControl.FanMode.Off) {
1211
748
  this.behaviors.require(MatterbridgeFanControlServer.with(FanControl.Feature.MultiSpeed, FanControl.Feature.Auto, FanControl.Feature.Step), {
1212
749
  fanMode,
@@ -1219,35 +756,17 @@ export class MatterbridgeEndpoint extends Endpoint {
1219
756
  });
1220
757
  return this;
1221
758
  }
1222
- /**
1223
- * Creates a default door lock cluster server.
1224
- *
1225
- * @param {DoorLock.LockState} [lockState=DoorLock.LockState.Locked] - The initial state of the lock (default: Locked).
1226
- * @param {DoorLock.LockType} [lockType=DoorLock.LockType.DeadBolt] - The type of the lock (default: DeadBolt).
1227
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1228
- */
1229
759
  createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1230
760
  this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
1231
- operatingMode: DoorLock.OperatingMode.Normal,
1232
761
  lockState,
1233
762
  lockType,
1234
763
  actuatorEnabled: false,
1235
- supportedOperatingModes: { normal: true, vacation: false, privacy: false, noRemoteLockUnlock: false, passage: false },
764
+ operatingMode: DoorLock.OperatingMode.Normal,
765
+ supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: true, passage: true, alwaysSet: 2047 },
766
+ alarmMask: { lockJammed: false, lockFactoryReset: false, lockRadioPowerCycled: false, wrongCodeEntryLimit: false, frontEscutcheonRemoved: false, doorForcedOpen: false },
1236
767
  });
1237
768
  return this;
1238
769
  }
1239
- /**
1240
- * Creates a default Mode Select cluster server.
1241
- *
1242
- * @param {string} description - The description of the mode select cluster.
1243
- * @param {ModeSelect.ModeOption[]} supportedModes - The list of supported modes.
1244
- * @param {number} [currentMode=0] - The current mode (default: 0).
1245
- * @param {number} [startUpMode=0] - The startup mode (default: 0).
1246
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1247
- *
1248
- * @remarks
1249
- * endpoint.createDefaultModeSelectClusterServer('Night mode', [{ label: 'Led ON', mode: 0, semanticTags: [] }, { label: 'Led OFF', mode: 1, semanticTags: [] }], 0, 0);
1250
- */
1251
770
  createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
1252
771
  this.behaviors.require(MatterbridgeModeSelectServer, {
1253
772
  description: description,
@@ -1258,13 +777,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1258
777
  });
1259
778
  return this;
1260
779
  }
1261
- /**
1262
- * Creates the default Valve Configuration And Control cluster server.
1263
- *
1264
- * @param {ValveConfigurationAndControl.ValveState} [valveState=ValveConfigurationAndControl.ValveState.Closed] - The valve state to set. Defaults to `ValveConfigurationAndControl.ValveState.Closed`.
1265
- * @param {number} [valveLevel=0] - The valve level to set. Defaults to 0.
1266
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1267
- */
1268
780
  createDefaultValveConfigurationAndControlClusterServer(valveState = ValveConfigurationAndControl.ValveState.Closed, valveLevel = 0) {
1269
781
  this.behaviors.require(MatterbridgeValveConfigurationAndControlServer.with(ValveConfigurationAndControl.Feature.Level), {
1270
782
  currentState: valveState,
@@ -1274,15 +786,12 @@ export class MatterbridgeEndpoint extends Endpoint {
1274
786
  openDuration: null,
1275
787
  defaultOpenDuration: null,
1276
788
  remainingDuration: null,
789
+ defaultOpenLevel: 100,
790
+ valveFault: { generalFault: false, blocked: false, leaking: false, notConnected: false, shortCircuit: false, currentExceeded: false },
791
+ levelStep: 1,
1277
792
  });
1278
793
  return this;
1279
794
  }
1280
- /**
1281
- * Creates the default PumpConfigurationAndControl cluster server.
1282
- *
1283
- * @param {PumpConfigurationAndControl.OperationMode} [pumpMode=PumpConfigurationAndControl.OperationMode.Normal] - The pump mode to set. Defaults to `PumpConfigurationAndControl.OperationMode.Normal`.
1284
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1285
- */
1286
795
  createDefaultPumpConfigurationAndControlClusterServer(pumpMode = PumpConfigurationAndControl.OperationMode.Normal) {
1287
796
  this.behaviors.require(PumpConfigurationAndControlServer.with(PumpConfigurationAndControl.Feature.ConstantSpeed), {
1288
797
  minConstSpeed: null,
@@ -1297,16 +806,9 @@ export class MatterbridgeEndpoint extends Endpoint {
1297
806
  });
1298
807
  return this;
1299
808
  }
1300
- /**
1301
- * Creates the default SmokeCOAlarm Cluster Server.
1302
- *
1303
- * @param {SmokeCoAlarm.AlarmState} smokeState - The state of the smoke alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1304
- * @param {SmokeCoAlarm.AlarmState} coState - The state of the CO alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1305
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1306
- */
1307
809
  createDefaultSmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal, coState = SmokeCoAlarm.AlarmState.Normal) {
1308
810
  this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm).enable({
1309
- events: { smokeAlarm: true, interconnectSmokeAlarm: true, coAlarm: true, interconnectCoAlarm: true, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
811
+ events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
1310
812
  }), {
1311
813
  smokeState,
1312
814
  coState,
@@ -1316,18 +818,37 @@ export class MatterbridgeEndpoint extends Endpoint {
1316
818
  testInProgress: false,
1317
819
  hardwareFaultAlert: false,
1318
820
  endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
1319
- interconnectSmokeAlarm: SmokeCoAlarm.AlarmState.Normal,
1320
- interconnectCoAlarm: SmokeCoAlarm.AlarmState.Normal,
1321
821
  });
1322
822
  return this;
1323
823
  }
1324
- /**
1325
- * Creates a default momentary switch cluster server.
1326
- *
1327
- * @remarks
1328
- * This method adds a cluster server with default momentary switch features and configuration suitable for (AppleHome) Single Double Long automations.
1329
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1330
- */
824
+ createSmokeOnlySmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal) {
825
+ this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm).enable({
826
+ events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: false, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
827
+ }), {
828
+ smokeState,
829
+ expressedState: SmokeCoAlarm.ExpressedState.Normal,
830
+ batteryAlert: SmokeCoAlarm.AlarmState.Normal,
831
+ deviceMuted: SmokeCoAlarm.MuteState.NotMuted,
832
+ testInProgress: false,
833
+ hardwareFaultAlert: false,
834
+ endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
835
+ });
836
+ return this;
837
+ }
838
+ createCoOnlySmokeCOAlarmClusterServer(coState = SmokeCoAlarm.AlarmState.Normal) {
839
+ this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.CoAlarm).enable({
840
+ events: { smokeAlarm: false, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
841
+ }), {
842
+ coState,
843
+ expressedState: SmokeCoAlarm.ExpressedState.Normal,
844
+ batteryAlert: SmokeCoAlarm.AlarmState.Normal,
845
+ deviceMuted: SmokeCoAlarm.MuteState.NotMuted,
846
+ testInProgress: false,
847
+ hardwareFaultAlert: false,
848
+ endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
849
+ });
850
+ return this;
851
+ }
1331
852
  createDefaultSwitchClusterServer() {
1332
853
  this.behaviors.require(MatterbridgeSwitchServer.with(Switch.Feature.MomentarySwitch, Switch.Feature.MomentarySwitchRelease, Switch.Feature.MomentarySwitchLongPress, Switch.Feature.MomentarySwitchMultiPress).enable({
1333
854
  events: { initialPress: true, longPress: true, shortRelease: true, longRelease: true, multiPressOngoing: true, multiPressComplete: true },
@@ -1338,13 +859,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1338
859
  });
1339
860
  return this;
1340
861
  }
1341
- /**
1342
- * Creates a default latching switch cluster server.
1343
- *
1344
- * @remarks
1345
- * This method adds a cluster server with default latching switch features and configuration suitable for a latching switch with 2 positions.
1346
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1347
- */
1348
862
  createDefaultLatchingSwitchClusterServer() {
1349
863
  this.behaviors.require(SwitchServer.with(Switch.Feature.LatchingSwitch).enable({
1350
864
  events: { switchLatched: true },
@@ -1354,13 +868,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1354
868
  });
1355
869
  return this;
1356
870
  }
1357
- /**
1358
- * Triggers a switch event on the specified endpoint.
1359
- *
1360
- * @param {string} event - The type of event to trigger. Possible values are 'Single', 'Double', 'Long' for momentarySwitch and 'Press', 'Release' for latchingSwitch.
1361
- * @param {Endpoint} endpoint - The endpoint on which to trigger the event (default the device endpoint).
1362
- * @returns {boolean} - A boolean indicating whether the event was successfully triggered.
1363
- */
1364
871
  async triggerSwitchEvent(event, log) {
1365
872
  if (this.maybeNumber === undefined) {
1366
873
  this.log.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${this.maybeId}:${this.maybeNumber}`);
@@ -1420,31 +927,14 @@ export class MatterbridgeEndpoint extends Endpoint {
1420
927
  }
1421
928
  return true;
1422
929
  }
1423
- /**
1424
- * Creates a default boolean state cluster server.
1425
- *
1426
- * @param {boolean} contact - The state of the cluster. Defaults to true (true = contact).
1427
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1428
- */
1429
930
  createDefaultBooleanStateClusterServer(contact) {
1430
931
  this.behaviors.require(BooleanStateServer.enable({
1431
932
  events: { stateChange: true },
1432
933
  }), {
1433
- stateValue: contact ?? true, // true=contact false=no_contact
934
+ stateValue: contact ?? true,
1434
935
  });
1435
936
  return this;
1436
937
  }
1437
- /**
1438
- * Creates a default boolean state configuration cluster server to be used with the waterFreezeDetector, waterLeakDetector, and rainSensor device types.
1439
- *
1440
- * @remarks Supports the enableDisableAlarm command.
1441
- *
1442
- * @param {boolean} [sensorFault=false] - Optional boolean value indicating the sensor fault state. Defaults to `false` if not provided.
1443
- * @param {number} [currentSensitivityLevel=0] - The current sensitivity level. Defaults to `0` if not provided.
1444
- * @param {number} [supportedSensitivityLevels=2] - The number of supported sensitivity levels. Defaults to `2` if not provided (min 2, max 10).
1445
- * @param {number} [defaultSensitivityLevel=0] - The default sensitivity level. Defaults to `0` if not provided.
1446
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1447
- */
1448
938
  createDefaultBooleanStateConfigurationClusterServer(sensorFault = false, currentSensitivityLevel = 0, supportedSensitivityLevels = 2, defaultSensitivityLevel = 0) {
1449
939
  this.behaviors.require(MatterbridgeBooleanStateConfigurationServer.with(BooleanStateConfiguration.Feature.Visual, BooleanStateConfiguration.Feature.Audible, BooleanStateConfiguration.Feature.SensitivityLevel).enable({
1450
940
  events: { alarmsStateChanged: true, sensorFault: true },
@@ -1459,21 +949,10 @@ export class MatterbridgeEndpoint extends Endpoint {
1459
949
  });
1460
950
  return this;
1461
951
  }
1462
- /**
1463
- * Creates a default Power Topology Cluster Server with feature TreeTopology. Only needed for an electricalSensor device type.
1464
- *
1465
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1466
- */
1467
952
  createDefaultPowerTopologyClusterServer() {
1468
953
  this.behaviors.require(PowerTopologyServer.with(PowerTopology.Feature.TreeTopology));
1469
954
  return this;
1470
955
  }
1471
- /**
1472
- * Creates a default Electrical Energy Measurement Cluster Server.
1473
- *
1474
- * @param {number} energy - The total consumption value in mW/h.
1475
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1476
- */
1477
956
  createDefaultElectricalEnergyMeasurementClusterServer(energy = null) {
1478
957
  this.behaviors.require(ElectricalEnergyMeasurementServer.with(ElectricalEnergyMeasurement.Feature.ImportedEnergy, ElectricalEnergyMeasurement.Feature.ExportedEnergy, ElectricalEnergyMeasurement.Feature.CumulativeEnergy), {
1479
958
  accuracy: {
@@ -1489,15 +968,6 @@ export class MatterbridgeEndpoint extends Endpoint {
1489
968
  });
1490
969
  return this;
1491
970
  }
1492
- /**
1493
- * Creates a default Electrical Power Measurement Cluster Server.
1494
- *
1495
- * @param {number} voltage - The voltage value in millivolts.
1496
- * @param {number} current - The current value in milliamperes.
1497
- * @param {number} power - The power value in milliwatts.
1498
- * @param {number} frequency - The frequency value in millihertz.
1499
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1500
- */
1501
971
  createDefaultElectricalPowerMeasurementClusterServer(voltage = null, current = null, power = null, frequency = null) {
1502
972
  this.behaviors.require(ElectricalPowerMeasurementServer.with(ElectricalPowerMeasurement.Feature.AlternatingCurrent), {
1503
973
  powerMode: ElectricalPowerMeasurement.PowerMode.Ac,
@@ -1539,109 +1009,55 @@ export class MatterbridgeEndpoint extends Endpoint {
1539
1009
  });
1540
1010
  return this;
1541
1011
  }
1542
- /**
1543
- * Creates a default TemperatureMeasurement cluster server.
1544
- *
1545
- * @param {number} measuredValue - The measured value of the temperature x 100.
1546
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1547
- */
1548
- createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
1549
- this.behaviors.require(TemperatureMeasurementServer, getDefaultTemperatureMeasurementClusterServer(measuredValue));
1012
+ createDefaultTemperatureMeasurementClusterServer(measuredValue = null, minMeasuredValue = null, maxMeasuredValue = null) {
1013
+ this.behaviors.require(TemperatureMeasurementServer, getDefaultTemperatureMeasurementClusterServer(measuredValue, minMeasuredValue, maxMeasuredValue));
1550
1014
  return this;
1551
1015
  }
1552
- /**
1553
- * Creates a default RelativeHumidityMeasurement cluster server.
1554
- *
1555
- * @param {number} measuredValue - The measured value of the relative humidity x 100.
1556
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1557
- */
1558
- createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
1559
- this.behaviors.require(RelativeHumidityMeasurementServer, getDefaultRelativeHumidityMeasurementClusterServer(measuredValue));
1016
+ createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = null, minMeasuredValue = null, maxMeasuredValue = null) {
1017
+ this.behaviors.require(RelativeHumidityMeasurementServer, getDefaultRelativeHumidityMeasurementClusterServer(measuredValue, minMeasuredValue, maxMeasuredValue));
1560
1018
  return this;
1561
1019
  }
1562
- /**
1563
- * Creates a default PressureMeasurement cluster server.
1564
- *
1565
- * @param {number} measuredValue - The measured value for the pressure.
1566
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1567
- */
1568
- createDefaultPressureMeasurementClusterServer(measuredValue = 1000) {
1569
- this.behaviors.require(PressureMeasurementServer, getDefaultPressureMeasurementClusterServer(measuredValue));
1020
+ createDefaultPressureMeasurementClusterServer(measuredValue = null, minMeasuredValue = null, maxMeasuredValue = null) {
1021
+ this.behaviors.require(PressureMeasurementServer, getDefaultPressureMeasurementClusterServer(measuredValue, minMeasuredValue, maxMeasuredValue));
1570
1022
  return this;
1571
1023
  }
1572
- /**
1573
- * Creates a default IlluminanceMeasurement cluster server.
1574
- *
1575
- * @param {number} measuredValue - The measured value of illuminance.
1576
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1577
- *
1578
- * @remarks
1579
- * Lux to matter = Math.round(Math.max(Math.min(10000 * Math.log10(lux), 0xfffe), 0))
1580
- * Matter to Lux = Math.round(Math.max(Math.pow(10, value / 10000), 0))
1581
- */
1582
- createDefaultIlluminanceMeasurementClusterServer(measuredValue = 0) {
1583
- this.behaviors.require(IlluminanceMeasurementServer, getDefaultIlluminanceMeasurementClusterServer(measuredValue));
1024
+ createDefaultIlluminanceMeasurementClusterServer(measuredValue = null, minMeasuredValue = null, maxMeasuredValue = null) {
1025
+ this.behaviors.require(IlluminanceMeasurementServer, getDefaultIlluminanceMeasurementClusterServer(measuredValue, minMeasuredValue, maxMeasuredValue));
1584
1026
  return this;
1585
1027
  }
1586
- /**
1587
- * Creates a default FlowMeasurement cluster server.
1588
- *
1589
- * @param {number} measuredValue - The measured value of the flow in 10 x m/h.
1590
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1591
- */
1592
- createDefaultFlowMeasurementClusterServer(measuredValue = 0) {
1593
- this.behaviors.require(FlowMeasurementServer, getDefaultFlowMeasurementClusterServer(measuredValue));
1028
+ createDefaultFlowMeasurementClusterServer(measuredValue = null, minMeasuredValue = null, maxMeasuredValue = null) {
1029
+ this.behaviors.require(FlowMeasurementServer, getDefaultFlowMeasurementClusterServer(measuredValue, minMeasuredValue, maxMeasuredValue));
1594
1030
  return this;
1595
1031
  }
1596
- /**
1597
- * Creates a default OccupancySensing cluster server.
1598
- *
1599
- * @param {boolean} occupied - A boolean indicating whether the occupancy is occupied or not. Default is false.
1600
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1601
- */
1602
- createDefaultOccupancySensingClusterServer(occupied = false) {
1603
- this.behaviors.require(OccupancySensingServer, getDefaultOccupancySensingClusterServer(occupied));
1032
+ createDefaultOccupancySensingClusterServer(occupied = false, holdTime = 30, holdTimeMin = 1, holdTimeMax = 300) {
1033
+ this.behaviors.require(OccupancySensingServer.with(OccupancySensing.Feature.PassiveInfrared), getDefaultOccupancySensingClusterServer(occupied, holdTime, holdTimeMin, holdTimeMax));
1604
1034
  return this;
1605
1035
  }
1606
- /**
1607
- * Creates a default AirQuality cluster server.
1608
- *
1609
- * @param {AirQuality.AirQualityEnum} airQuality The air quality level. Defaults to `AirQuality.AirQualityType.Unknown`.
1610
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1611
- */
1612
1036
  createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
1613
1037
  this.behaviors.require(AirQualityServer.with(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), {
1614
1038
  airQuality,
1615
1039
  });
1616
1040
  return this;
1617
1041
  }
1618
- /**
1619
- * Creates a default TotalVolatileOrganicCompoundsConcentrationMeasurement cluster server.
1620
- *
1621
- * @param {number} measuredValue - The measured value of the concentration.
1622
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1623
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1624
- * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1625
- */
1626
- createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1042
+ createDefaultTvocMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air, uncertainty) {
1627
1043
  this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1628
1044
  measuredValue,
1629
1045
  minMeasuredValue: null,
1630
1046
  maxMeasuredValue: null,
1631
- uncertainty: 0,
1047
+ uncertainty,
1632
1048
  measurementUnit,
1633
1049
  measurementMedium,
1634
1050
  });
1635
1051
  return this;
1636
1052
  }
1637
- /**
1638
- * Create a default CarbonMonoxideConcentrationMeasurement cluster server.
1639
- *
1640
- * @param {number} measuredValue - The measured value of the concentration.
1641
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1642
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1643
- */
1644
- createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1053
+ createLevelTvocMeasurementClusterServer(levelValue = ConcentrationMeasurement.LevelValue.Unknown, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1054
+ this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), {
1055
+ levelValue,
1056
+ measurementMedium,
1057
+ });
1058
+ return this;
1059
+ }
1060
+ createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1645
1061
  this.behaviors.require(CarbonMonoxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1646
1062
  measuredValue,
1647
1063
  minMeasuredValue: null,
@@ -1652,14 +1068,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1652
1068
  });
1653
1069
  return this;
1654
1070
  }
1655
- /**
1656
- * Create a default CarbonDioxideConcentrationMeasurement cluster server.
1657
- *
1658
- * @param {number} measuredValue - The measured value of the concentration.
1659
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1660
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1661
- */
1662
- createDefaultCarbonDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1071
+ createDefaultCarbonDioxideConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1663
1072
  this.behaviors.require(CarbonDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1664
1073
  measuredValue,
1665
1074
  minMeasuredValue: null,
@@ -1670,14 +1079,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1670
1079
  });
1671
1080
  return this;
1672
1081
  }
1673
- /**
1674
- * Create a default FormaldehydeConcentrationMeasurement cluster server.
1675
- *
1676
- * @param {number} measuredValue - The measured value of the concentration.
1677
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1678
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1679
- */
1680
- createDefaultFormaldehydeConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1082
+ createDefaultFormaldehydeConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1681
1083
  this.behaviors.require(FormaldehydeConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1682
1084
  measuredValue,
1683
1085
  minMeasuredValue: null,
@@ -1688,14 +1090,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1688
1090
  });
1689
1091
  return this;
1690
1092
  }
1691
- /**
1692
- * Create a default Pm1ConcentrationMeasurement cluster server.
1693
- *
1694
- * @param {number} measuredValue - The measured value of the concentration.
1695
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1696
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1697
- */
1698
- createDefaultPm1ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1093
+ createDefaultPm1ConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1699
1094
  this.behaviors.require(Pm1ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1700
1095
  measuredValue,
1701
1096
  minMeasuredValue: null,
@@ -1706,14 +1101,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1706
1101
  });
1707
1102
  return this;
1708
1103
  }
1709
- /**
1710
- * Create a default Pm25ConcentrationMeasurement cluster server.
1711
- *
1712
- * @param {number} measuredValue - The measured value of the concentration.
1713
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1714
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1715
- */
1716
- createDefaultPm25ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1104
+ createDefaultPm25ConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1717
1105
  this.behaviors.require(Pm25ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1718
1106
  measuredValue,
1719
1107
  minMeasuredValue: null,
@@ -1724,14 +1112,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1724
1112
  });
1725
1113
  return this;
1726
1114
  }
1727
- /**
1728
- * Create a default Pm10ConcentrationMeasurement cluster server.
1729
- *
1730
- * @param {number} measuredValue - The measured value of the concentration.
1731
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1732
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1733
- */
1734
- createDefaultPm10ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1115
+ createDefaultPm10ConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1735
1116
  this.behaviors.require(Pm10ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1736
1117
  measuredValue,
1737
1118
  minMeasuredValue: null,
@@ -1742,14 +1123,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1742
1123
  });
1743
1124
  return this;
1744
1125
  }
1745
- /**
1746
- * Create a default OzoneConcentrationMeasurement cluster server.
1747
- *
1748
- * @param {number} measuredValue - The measured value of the concentration.
1749
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
1750
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1751
- */
1752
- createDefaultOzoneConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1126
+ createDefaultOzoneConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1753
1127
  this.behaviors.require(OzoneConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1754
1128
  measuredValue,
1755
1129
  minMeasuredValue: null,
@@ -1760,14 +1134,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1760
1134
  });
1761
1135
  return this;
1762
1136
  }
1763
- /**
1764
- * Create a default RadonConcentrationMeasurement cluster server.
1765
- *
1766
- * @param {number} measuredValue - The measured value of the concentration.
1767
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1768
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1769
- */
1770
- createDefaultRadonConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1137
+ createDefaultRadonConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1771
1138
  this.behaviors.require(RadonConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1772
1139
  measuredValue,
1773
1140
  minMeasuredValue: null,
@@ -1778,14 +1145,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1778
1145
  });
1779
1146
  return this;
1780
1147
  }
1781
- /**
1782
- * Create a default NitrogenDioxideConcentrationMeasurement cluster server.
1783
- *
1784
- * @param {number} measuredValue - The measured value of the concentration.
1785
- * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
1786
- * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1787
- */
1788
- createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1148
+ createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(measuredValue = null, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1789
1149
  this.behaviors.require(NitrogenDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1790
1150
  measuredValue,
1791
1151
  minMeasuredValue: null,
@@ -1796,5 +1156,43 @@ export class MatterbridgeEndpoint extends Endpoint {
1796
1156
  });
1797
1157
  return this;
1798
1158
  }
1159
+ createDefaultRvcRunModeClusterServer() {
1160
+ this.behaviors.require(RvcRunModeServer, {
1161
+ supportedModes: [
1162
+ { label: 'Idle', mode: 1, modeTags: [{ value: RvcRunMode.ModeTag.Idle }] },
1163
+ { label: 'Cleaning', mode: 2, modeTags: [{ value: RvcRunMode.ModeTag.Cleaning }] },
1164
+ ],
1165
+ currentMode: 1,
1166
+ });
1167
+ return this;
1168
+ }
1169
+ createDefaultRvcOperationalStateClusterServer() {
1170
+ this.behaviors.require(RvcOperationalStateServer, {
1171
+ phaseList: [],
1172
+ currentPhase: null,
1173
+ operationalStateList: [
1174
+ { operationalStateId: RvcOperationalState.OperationalState.Stopped, operationalStateLabel: 'Stopped' },
1175
+ { operationalStateId: RvcOperationalState.OperationalState.Running, operationalStateLabel: 'Running' },
1176
+ { operationalStateId: RvcOperationalState.OperationalState.Paused, operationalStateLabel: 'Paused' },
1177
+ { operationalStateId: RvcOperationalState.OperationalState.Error, operationalStateLabel: 'Error' },
1178
+ { operationalStateId: RvcOperationalState.OperationalState.SeekingCharger, operationalStateLabel: 'SeekingCharger' },
1179
+ { operationalStateId: RvcOperationalState.OperationalState.Charging, operationalStateLabel: 'Charging' },
1180
+ { operationalStateId: RvcOperationalState.OperationalState.Docked, operationalStateLabel: 'Docked' },
1181
+ ],
1182
+ operationalState: RvcOperationalState.OperationalState.Stopped,
1183
+ operationalError: { errorStateId: RvcOperationalState.ErrorState.NoError, errorStateLabel: 'No Error' },
1184
+ });
1185
+ return this;
1186
+ }
1187
+ createDefaultRvcCleanModeClusterServer() {
1188
+ this.behaviors.require(RvcCleanModeServer, {
1189
+ supportedModes: [
1190
+ { label: 'Idle', mode: 1, modeTags: [] },
1191
+ { label: 'Cleaning', mode: 2, modeTags: [] },
1192
+ { label: 'SpotCleaning', mode: 3, modeTags: [] },
1193
+ ],
1194
+ currentMode: 1,
1195
+ });
1196
+ return this;
1197
+ }
1799
1198
  }
1800
- //# sourceMappingURL=matterbridgeEndpoint.js.map