matterbridge 2.2.9-dev.1 → 2.2.9

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 (147) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/dist/cli.d.ts +29 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +37 -2
  5. package/dist/cli.js.map +1 -0
  6. package/dist/cluster/export.d.ts +2 -0
  7. package/dist/cluster/export.d.ts.map +1 -0
  8. package/dist/cluster/export.js +2 -0
  9. package/dist/cluster/export.js.map +1 -0
  10. package/dist/defaultConfigSchema.d.ts +27 -0
  11. package/dist/defaultConfigSchema.d.ts.map +1 -0
  12. package/dist/defaultConfigSchema.js +23 -0
  13. package/dist/defaultConfigSchema.js.map +1 -0
  14. package/dist/deviceManager.d.ts +114 -0
  15. package/dist/deviceManager.d.ts.map +1 -0
  16. package/dist/deviceManager.js +94 -1
  17. package/dist/deviceManager.js.map +1 -0
  18. package/dist/frontend.d.ts +221 -0
  19. package/dist/frontend.d.ts.map +1 -0
  20. package/dist/frontend.js +326 -19
  21. package/dist/frontend.js.map +1 -0
  22. package/dist/index.d.ts +35 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +28 -1
  25. package/dist/index.js.map +1 -0
  26. package/dist/logger/export.d.ts +2 -0
  27. package/dist/logger/export.d.ts.map +1 -0
  28. package/dist/logger/export.js +1 -0
  29. package/dist/logger/export.js.map +1 -0
  30. package/dist/matter/behaviors.d.ts +2 -0
  31. package/dist/matter/behaviors.d.ts.map +1 -0
  32. package/dist/matter/behaviors.js +2 -0
  33. package/dist/matter/behaviors.js.map +1 -0
  34. package/dist/matter/clusters.d.ts +2 -0
  35. package/dist/matter/clusters.d.ts.map +1 -0
  36. package/dist/matter/clusters.js +2 -0
  37. package/dist/matter/clusters.js.map +1 -0
  38. package/dist/matter/devices.d.ts +2 -0
  39. package/dist/matter/devices.d.ts.map +1 -0
  40. package/dist/matter/devices.js +2 -0
  41. package/dist/matter/devices.js.map +1 -0
  42. package/dist/matter/endpoints.d.ts +2 -0
  43. package/dist/matter/endpoints.d.ts.map +1 -0
  44. package/dist/matter/endpoints.js +2 -0
  45. package/dist/matter/endpoints.js.map +1 -0
  46. package/dist/matter/export.d.ts +5 -0
  47. package/dist/matter/export.d.ts.map +1 -0
  48. package/dist/matter/export.js +2 -0
  49. package/dist/matter/export.js.map +1 -0
  50. package/dist/matter/types.d.ts +3 -0
  51. package/dist/matter/types.d.ts.map +1 -0
  52. package/dist/matter/types.js +2 -0
  53. package/dist/matter/types.js.map +1 -0
  54. package/dist/matterbridge.d.ts +425 -0
  55. package/dist/matterbridge.d.ts.map +1 -0
  56. package/dist/matterbridge.js +747 -46
  57. package/dist/matterbridge.js.map +1 -0
  58. package/dist/matterbridgeAccessoryPlatform.d.ts +39 -0
  59. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  60. package/dist/matterbridgeAccessoryPlatform.js +33 -0
  61. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  62. package/dist/matterbridgeBehaviors.d.ts +1056 -0
  63. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  64. package/dist/matterbridgeBehaviors.js +32 -1
  65. package/dist/matterbridgeBehaviors.js.map +1 -0
  66. package/dist/matterbridgeDeviceTypes.d.ts +178 -0
  67. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  68. package/dist/matterbridgeDeviceTypes.js +120 -11
  69. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  70. package/dist/matterbridgeDynamicPlatform.d.ts +39 -0
  71. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  72. package/dist/matterbridgeDynamicPlatform.js +33 -0
  73. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  74. package/dist/matterbridgeEndpoint.d.ts +867 -0
  75. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  76. package/dist/matterbridgeEndpoint.js +720 -6
  77. package/dist/matterbridgeEndpoint.js.map +1 -0
  78. package/dist/matterbridgeEndpointHelpers.d.ts +2275 -0
  79. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  80. package/dist/matterbridgeEndpointHelpers.js +118 -9
  81. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  82. package/dist/matterbridgePlatform.d.ts +285 -0
  83. package/dist/matterbridgePlatform.d.ts.map +1 -0
  84. package/dist/matterbridgePlatform.js +216 -7
  85. package/dist/matterbridgePlatform.js.map +1 -0
  86. package/dist/matterbridgeTypes.d.ts +183 -0
  87. package/dist/matterbridgeTypes.d.ts.map +1 -0
  88. package/dist/matterbridgeTypes.js +24 -0
  89. package/dist/matterbridgeTypes.js.map +1 -0
  90. package/dist/pluginManager.d.ts +271 -0
  91. package/dist/pluginManager.d.ts.map +1 -0
  92. package/dist/pluginManager.js +262 -3
  93. package/dist/pluginManager.js.map +1 -0
  94. package/dist/shelly.d.ts +92 -0
  95. package/dist/shelly.d.ts.map +1 -0
  96. package/dist/shelly.js +146 -6
  97. package/dist/shelly.js.map +1 -0
  98. package/dist/storage/export.d.ts +2 -0
  99. package/dist/storage/export.d.ts.map +1 -0
  100. package/dist/storage/export.js +1 -0
  101. package/dist/storage/export.js.map +1 -0
  102. package/dist/update.d.ts +32 -0
  103. package/dist/update.d.ts.map +1 -0
  104. package/dist/update.js +45 -0
  105. package/dist/update.js.map +1 -0
  106. package/dist/utils/colorUtils.d.ts +61 -0
  107. package/dist/utils/colorUtils.d.ts.map +1 -0
  108. package/dist/utils/colorUtils.js +205 -2
  109. package/dist/utils/colorUtils.js.map +1 -0
  110. package/dist/utils/copyDirectory.d.ts +32 -0
  111. package/dist/utils/copyDirectory.d.ts.map +1 -0
  112. package/dist/utils/copyDirectory.js +37 -1
  113. package/dist/utils/copyDirectory.js.map +1 -0
  114. package/dist/utils/createZip.d.ts +38 -0
  115. package/dist/utils/createZip.d.ts.map +1 -0
  116. package/dist/utils/createZip.js +42 -2
  117. package/dist/utils/createZip.js.map +1 -0
  118. package/dist/utils/deepCopy.d.ts +31 -0
  119. package/dist/utils/deepCopy.d.ts.map +1 -0
  120. package/dist/utils/deepCopy.js +40 -0
  121. package/dist/utils/deepCopy.js.map +1 -0
  122. package/dist/utils/deepEqual.d.ts +53 -0
  123. package/dist/utils/deepEqual.d.ts.map +1 -0
  124. package/dist/utils/deepEqual.js +65 -1
  125. package/dist/utils/deepEqual.js.map +1 -0
  126. package/dist/utils/export.d.ts +10 -0
  127. package/dist/utils/export.d.ts.map +1 -0
  128. package/dist/utils/export.js +1 -0
  129. package/dist/utils/export.js.map +1 -0
  130. package/dist/utils/isvalid.d.ts +87 -0
  131. package/dist/utils/isvalid.d.ts.map +1 -0
  132. package/dist/utils/isvalid.js +86 -0
  133. package/dist/utils/isvalid.js.map +1 -0
  134. package/dist/utils/network.d.ts +69 -0
  135. package/dist/utils/network.d.ts.map +1 -0
  136. package/dist/utils/network.js +76 -5
  137. package/dist/utils/network.js.map +1 -0
  138. package/dist/utils/parameter.d.ts +44 -0
  139. package/dist/utils/parameter.d.ts.map +1 -0
  140. package/dist/utils/parameter.js +41 -0
  141. package/dist/utils/parameter.js.map +1 -0
  142. package/dist/utils/wait.d.ts +43 -0
  143. package/dist/utils/wait.d.ts.map +1 -0
  144. package/dist/utils/wait.js +48 -5
  145. package/dist/utils/wait.js.map +1 -0
  146. package/npm-shrinkwrap.json +2 -2
  147. package/package.json +2 -1
@@ -1,10 +1,36 @@
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
1
24
  import { AnsiLogger, BLUE, CYAN, YELLOW, db, debugStringify, er, hk, or, zb } from './logger/export.js';
25
+ // Matterbridge
2
26
  import { bridgedNode } from './matterbridgeDeviceTypes.js';
3
27
  import { isValidNumber, isValidObject } from './utils/export.js';
4
28
  import { MatterbridgeBehavior, MatterbridgeBehaviorDevice, MatterbridgeIdentifyServer, MatterbridgeOnOffServer, MatterbridgeLevelControlServer, MatterbridgeColorControlServer, MatterbridgeWindowCoveringServer, MatterbridgeThermostatServer, MatterbridgeFanControlServer, MatterbridgeDoorLockServer, MatterbridgeModeSelectServer, MatterbridgeValveConfigurationAndControlServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeSwitchServer, } from './matterbridgeBehaviors.js';
5
29
  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
6
31
  import { Endpoint, Lifecycle, MutableEndpoint, NamedHandler, SupportedBehaviors, VendorId } from '@matter/main';
7
32
  import { getClusterNameById, MeasurementType } from '@matter/main/types';
33
+ // @matter clusters
8
34
  import { Descriptor } from '@matter/main/clusters/descriptor';
9
35
  import { PowerSource } from '@matter/main/clusters/power-source';
10
36
  import { BridgedDeviceBasicInformation } from '@matter/main/clusters/bridged-device-basic-information';
@@ -26,6 +52,7 @@ import { ElectricalPowerMeasurement } from '@matter/main/clusters/electrical-pow
26
52
  import { ElectricalEnergyMeasurement } from '@matter/main/clusters/electrical-energy-measurement';
27
53
  import { AirQuality } from '@matter/main/clusters/air-quality';
28
54
  import { ConcentrationMeasurement } from '@matter/main/clusters/concentration-measurement';
55
+ // @matter behaviors
29
56
  import { DescriptorServer } from '@matter/main/behaviors/descriptor';
30
57
  import { PowerSourceServer } from '@matter/main/behaviors/power-source';
31
58
  import { BridgedDeviceBasicInformationServer } from '@matter/main/behaviors/bridged-device-basic-information';
@@ -56,7 +83,7 @@ import { RadonConcentrationMeasurementServer } from '@matter/main/behaviors/rado
56
83
  import { TotalVolatileOrganicCompoundsConcentrationMeasurementServer } from '@matter/main/behaviors/total-volatile-organic-compounds-concentration-measurement';
57
84
  export class MatterbridgeEndpoint extends Endpoint {
58
85
  static bridgeMode = '';
59
- static logLevel = "info";
86
+ static logLevel = "info" /* LogLevel.INFO */;
60
87
  log;
61
88
  plugin = undefined;
62
89
  configUrl = undefined;
@@ -72,14 +99,25 @@ export class MatterbridgeEndpoint extends Endpoint {
72
99
  hardwareVersion = undefined;
73
100
  hardwareVersionString = undefined;
74
101
  productUrl = 'https://www.npmjs.com/package/matterbridge';
102
+ // The first device type of the endpoint
75
103
  name = undefined;
76
104
  deviceType;
77
105
  uniqueStorageKey = undefined;
78
106
  tagList = undefined;
107
+ // Maps matter deviceTypes
79
108
  deviceTypes = new Map();
109
+ // Command handler
80
110
  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
+ */
81
118
  constructor(definition, options = {}, debug = false) {
82
119
  let deviceTypeList = [];
120
+ // Get the first DeviceTypeDefinition
83
121
  let firstDefinition;
84
122
  if (Array.isArray(definition)) {
85
123
  firstDefinition = definition[0];
@@ -92,6 +130,7 @@ export class MatterbridgeEndpoint extends Endpoint {
92
130
  firstDefinition = definition;
93
131
  deviceTypeList = [{ deviceType: firstDefinition.code, revision: firstDefinition.revision }];
94
132
  }
133
+ // Convert the first DeviceTypeDefinition to an EndpointType.Options
95
134
  const deviceTypeDefinitionV8 = {
96
135
  name: firstDefinition.name.replace('-', '_'),
97
136
  deviceType: firstDefinition.code,
@@ -110,9 +149,11 @@ export class MatterbridgeEndpoint extends Endpoint {
110
149
  behaviors: options.tagList ? SupportedBehaviors(DescriptorServer.with(Descriptor.Feature.TagList)) : {},
111
150
  };
112
151
  const endpointV8 = MutableEndpoint(deviceTypeDefinitionV8);
152
+ // Check if the uniqueStorageKey is valid
113
153
  if (options.uniqueStorageKey && checkNotLatinCharacters(options.uniqueStorageKey)) {
114
154
  options.uniqueStorageKey = generateUniqueId(options.uniqueStorageKey);
115
155
  }
156
+ // Convert the options to an Endpoint.Options
116
157
  const optionsV8 = {
117
158
  id: options.uniqueStorageKey?.replace(/[ .]/g, ''),
118
159
  number: options.endpointId,
@@ -130,17 +171,41 @@ export class MatterbridgeEndpoint extends Endpoint {
130
171
  }
131
172
  else
132
173
  this.deviceTypes.set(firstDefinition.code, firstDefinition);
133
- this.log = new AnsiLogger({ logName: options.uniqueStorageKey ?? 'MatterbridgeEndpoint', logTimestampFormat: 4, logLevel: debug === true ? "debug" : MatterbridgeEndpoint.logLevel });
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 });
134
179
  this.log.debug(`${YELLOW}new${db} MatterbridgeEndpoint: ${zb}${'0x' + firstDefinition.code.toString(16).padStart(4, '0')}${db}-${zb}${firstDefinition.name}${db} ` +
135
180
  `id: ${CYAN}${options.uniqueStorageKey}${db} number: ${CYAN}${options.endpointId}${db} taglist: ${CYAN}${options.tagList ? debugStringify(options.tagList) : 'undefined'}${db}`);
181
+ // Add MatterbridgeBehavior with MatterbridgeBehaviorDevice
136
182
  this.behaviors.require(MatterbridgeBehavior, { deviceCommand: new MatterbridgeBehaviorDevice(this.log, this.commandHandler, undefined) });
137
183
  }
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
+ */
138
192
  static async loadInstance(definition, options = {}, debug = false) {
139
193
  return new MatterbridgeEndpoint(definition, options, debug);
140
194
  }
195
+ /**
196
+ * Get all the device types of this endpoint.
197
+ *
198
+ * @returns {DeviceTypeDefinition[]} The device types of this endpoint.
199
+ */
141
200
  getDeviceTypes() {
142
201
  return Array.from(this.deviceTypes.values());
143
202
  }
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
+ */
144
209
  hasClusterServer(cluster) {
145
210
  const behavior = getBehavior(this, cluster);
146
211
  if (behavior)
@@ -148,6 +213,13 @@ export class MatterbridgeEndpoint extends Endpoint {
148
213
  else
149
214
  return false;
150
215
  }
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
+ */
151
223
  hasAttributeServer(cluster, attribute) {
152
224
  const behavior = getBehavior(this, cluster);
153
225
  if (!behavior || !this.behaviors.supported[behavior.id])
@@ -156,72 +228,186 @@ export class MatterbridgeEndpoint extends Endpoint {
156
228
  const defaults = this.behaviors.defaultsFor(behavior);
157
229
  return lowercaseFirstLetter(attribute) in options || lowercaseFirstLetter(attribute) in defaults;
158
230
  }
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
+ */
159
237
  getClusterServerOptions(cluster) {
160
238
  const behavior = getBehavior(this, cluster);
161
239
  if (!behavior)
162
240
  return undefined;
163
241
  return this.behaviors.optionsFor(behavior);
164
242
  }
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
165
252
  getAttribute(cluster, attribute, log) {
166
253
  return getAttribute(this, cluster, attribute, log);
167
254
  }
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
+ */
168
264
  async setAttribute(clusterId, attribute, value, log) {
169
265
  return await setAttribute(this, clusterId, attribute, value, log);
170
266
  }
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
+ */
171
276
  async updateAttribute(cluster, attribute, value, log) {
172
277
  return await updateAttribute(this, cluster, attribute, value, log);
173
278
  }
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
174
289
  async subscribeAttribute(cluster, attribute, listener, log) {
175
290
  return await subscribeAttribute(this, cluster, attribute, listener, log);
176
291
  }
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
+ */
177
301
  async triggerEvent(clusterId, event, payload, log) {
178
302
  const clusterName = lowercaseFirstLetter(getClusterNameById(clusterId));
179
303
  if (this.construction.status !== Lifecycle.Status.Active) {
180
304
  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`);
181
305
  return false;
182
306
  }
307
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
183
308
  const events = this.events;
184
309
  if (!(clusterName in events) || !(event in events[clusterName])) {
185
310
  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}`);
186
311
  return false;
187
312
  }
313
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
314
+ // @ts-ignore
188
315
  await this.act((agent) => agent[clusterName].events[event].emit(payload, agent.context));
189
316
  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} `);
190
317
  return true;
191
318
  }
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
+ */
192
325
  addClusterServers(serverList) {
193
326
  addClusterServers(this, serverList);
194
327
  return this;
195
328
  }
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
+ */
196
336
  async addFixedLabel(label, value) {
197
337
  await addFixedLabel(this, label, value);
198
338
  return this;
199
339
  }
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
+ */
200
347
  async addUserLabel(label, value) {
201
348
  await addUserLabel(this, label, value);
202
349
  return this;
203
350
  }
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
+ */
204
358
  addCommandHandler(command, handler) {
205
359
  this.commandHandler.addHandler(command, handler);
206
360
  return this;
207
361
  }
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
+ */
208
369
  async executeCommandHandler(command, request) {
209
370
  await this.commandHandler.executeHandler(command, { request });
210
371
  }
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
+ */
211
377
  addRequiredClusterServers() {
212
378
  addRequiredClusterServers(this);
213
379
  return this;
214
380
  }
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
+ */
215
386
  addOptionalClusterServers() {
216
387
  addOptionalClusterServers(this);
217
388
  return this;
218
389
  }
390
+ /**
391
+ * Retrieves all cluster servers.
392
+ *
393
+ * @returns {Behavior.Type[]} An array of all cluster servers.
394
+ */
219
395
  getAllClusterServers() {
220
396
  return Object.values(this.behaviors.supported);
221
397
  }
398
+ /**
399
+ * Retrieves the names of all cluster servers.
400
+ *
401
+ * @returns {string[]} An array of all cluster server names.
402
+ */
222
403
  getAllClusterServerNames() {
223
404
  return Object.keys(this.behaviors.supported);
224
405
  }
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
+ */
225
411
  forEachAttribute(callback) {
226
412
  if (!this.lifecycle.isReady || this.construction.status !== Lifecycle.Status.Active)
227
413
  return;
@@ -229,16 +415,34 @@ export class MatterbridgeEndpoint extends Endpoint {
229
415
  for (const [attributeName, attributeValue] of Object.entries(clusterAttributes)) {
230
416
  const clusterId = getClusterId(this, clusterName);
231
417
  if (clusterId === undefined) {
418
+ // this.log.error(`forEachAttribute error: cluster ${clusterName} not found`);
232
419
  continue;
233
420
  }
234
421
  const attributeId = getAttributeId(this, clusterName, attributeName);
235
422
  if (attributeId === undefined) {
423
+ // this.log.error(`forEachAttribute error: attribute ${clusterName}.${attributeName} not found`);
236
424
  continue;
237
425
  }
238
426
  callback(clusterName, clusterId, attributeName, attributeId, attributeValue);
239
427
  }
240
428
  }
241
429
  }
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
+ */
242
446
  addChildDeviceType(endpointName, definition, options = {}, debug = false) {
243
447
  this.log.debug(`addChildDeviceType: ${CYAN}${endpointName}${db}`);
244
448
  let alreadyAdded = false;
@@ -278,6 +482,23 @@ export class MatterbridgeEndpoint extends Endpoint {
278
482
  }
279
483
  return child;
280
484
  }
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
+ */
281
502
  addChildDeviceTypeWithClusterServer(endpointName, definition, serverList = [], options = {}, debug = false) {
282
503
  this.log.debug(`addChildDeviceTypeWithClusterServer: ${CYAN}${endpointName}${db}`);
283
504
  let alreadyAdded = false;
@@ -340,15 +561,38 @@ export class MatterbridgeEndpoint extends Endpoint {
340
561
  }
341
562
  return child;
342
563
  }
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
+ */
343
570
  getChildEndpointByName(endpointName) {
344
571
  return this.parts.find((part) => part.id === endpointName);
345
572
  }
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
+ */
346
579
  getChildEndpoint(endpointNumber) {
347
580
  return this.parts.find((part) => part.number === endpointNumber);
348
581
  }
582
+ /**
583
+ * Get all the child endpoints of this endpoint.
584
+ *
585
+ * @returns {MatterbridgeEndpoint[]} The child endpoints.
586
+ */
349
587
  getChildEndpoints() {
350
588
  return Array.from(this.parts);
351
589
  }
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
+ */
352
596
  static serialize(device) {
353
597
  if (!device.serialNumber || !device.deviceName || !device.uniqueId)
354
598
  return;
@@ -371,9 +615,15 @@ export class MatterbridgeEndpoint extends Endpoint {
371
615
  serialized.clusterServersId.push(BridgedDeviceBasicInformation.Cluster.id);
372
616
  if (behaviorName === 'powerSource')
373
617
  serialized.clusterServersId.push(PowerSource.Cluster.id);
618
+ // serialized.clusterServersId.push(this.behaviors.supported[behaviorName]cluster.id);
374
619
  });
375
620
  return serialized;
376
621
  }
622
+ /**
623
+ * Deserializes the device into a serialized object.
624
+ *
625
+ * @returns The deserialized MatterbridgeDevice.
626
+ */
377
627
  static deserialize(serializedDevice) {
378
628
  const device = new MatterbridgeEndpoint(serializedDevice.deviceTypes, { uniqueStorageKey: serializedDevice.endpointName, endpointId: serializedDevice.endpoint }, false);
379
629
  device.plugin = serializedDevice.pluginName;
@@ -389,9 +639,16 @@ export class MatterbridgeEndpoint extends Endpoint {
389
639
  device.createDefaultBridgedDeviceBasicInformationClusterServer(serializedDevice.deviceName, serializedDevice.serialNumber, serializedDevice.vendorId ?? 0xfff1, serializedDevice.vendorName ?? 'Matterbridge', serializedDevice.productName ?? 'Matterbridge device');
390
640
  else if (clusterId === PowerSource.Cluster.id)
391
641
  device.createDefaultPowerSourceWiredClusterServer();
642
+ // else addClusterServerFromList(device, [clusterId]);
392
643
  }
393
644
  return device;
394
645
  }
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
+ */
395
652
  createDefaultPowerSourceWiredClusterServer(wiredCurrentType = PowerSource.WiredCurrentType.Ac) {
396
653
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Wired), {
397
654
  wiredCurrentType,
@@ -402,6 +659,16 @@ export class MatterbridgeEndpoint extends Endpoint {
402
659
  });
403
660
  return this;
404
661
  }
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
+ */
405
672
  createDefaultPowerSourceReplaceableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500, batReplacementDescription = 'Battery type', batQuantity = 1) {
406
673
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Replaceable), {
407
674
  status: PowerSource.PowerSourceStatus.Active,
@@ -419,6 +686,14 @@ export class MatterbridgeEndpoint extends Endpoint {
419
686
  });
420
687
  return this;
421
688
  }
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
+ */
422
697
  createDefaultPowerSourceRechargeableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500) {
423
698
  this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable), {
424
699
  status: PowerSource.PowerSourceStatus.Active,
@@ -437,6 +712,21 @@ export class MatterbridgeEndpoint extends Endpoint {
437
712
  });
438
713
  return this;
439
714
  }
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
+ */
440
730
  createDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
441
731
  this.log.logName = deviceName;
442
732
  this.deviceName = deviceName;
@@ -460,6 +750,20 @@ export class MatterbridgeEndpoint extends Endpoint {
460
750
  }
461
751
  return this;
462
752
  }
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
+ */
463
767
  createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
464
768
  this.log.logName = deviceName;
465
769
  this.deviceName = deviceName;
@@ -476,7 +780,7 @@ export class MatterbridgeEndpoint extends Endpoint {
476
780
  this.behaviors.require(BridgedDeviceBasicInformationServer.enable({
477
781
  events: { leave: true, reachableChanged: true },
478
782
  }), {
479
- vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined,
783
+ vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined, // 4874
480
784
  vendorName: vendorName.slice(0, 32),
481
785
  productName: productName.slice(0, 32),
482
786
  productUrl: this.productUrl,
@@ -492,6 +796,13 @@ export class MatterbridgeEndpoint extends Endpoint {
492
796
  });
493
797
  return this;
494
798
  }
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
+ */
495
806
  createDefaultIdentifyClusterServer(identifyTime = 0, identifyType = Identify.IdentifyType.None) {
496
807
  this.behaviors.require(MatterbridgeIdentifyServer, {
497
808
  identifyTime,
@@ -499,14 +810,32 @@ export class MatterbridgeEndpoint extends Endpoint {
499
810
  });
500
811
  return this;
501
812
  }
813
+ /**
814
+ * Creates a default groups cluster server.
815
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
816
+ */
502
817
  createDefaultGroupsClusterServer() {
503
818
  this.behaviors.require(GroupsServer);
504
819
  return this;
505
820
  }
821
+ /**
822
+ * Creates a default scenes management cluster server.
823
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
824
+ */
506
825
  createDefaultScenesClusterServer() {
507
826
  this.behaviors.require(ScenesManagementServer);
508
827
  return this;
509
828
  }
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
+ */
510
839
  createDefaultOnOffClusterServer(onOff = false, globalSceneControl = false, onTime = 0, offWaitTime = 0, startUpOnOff = null) {
511
840
  this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.Lighting), {
512
841
  onOff,
@@ -517,18 +846,40 @@ export class MatterbridgeEndpoint extends Endpoint {
517
846
  });
518
847
  return this;
519
848
  }
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
+ */
520
855
  createOnOffClusterServer(onOff = false) {
521
856
  this.behaviors.require(MatterbridgeOnOffServer, {
522
857
  onOff,
523
858
  });
524
859
  return this;
525
860
  }
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
+ */
526
867
  createDeadFrontOnOffClusterServer(onOff = false) {
527
868
  this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.DeadFrontBehavior), {
528
869
  onOff,
529
870
  });
530
871
  return this;
531
872
  }
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
+ */
532
883
  createDefaultLevelControlClusterServer(currentLevel = 254, minLevel = 1, maxLevel = 254, onLevel = null, startUpCurrentLevel = null) {
533
884
  this.behaviors.require(MatterbridgeLevelControlServer.with(LevelControl.Feature.OnOff, LevelControl.Feature.Lighting), {
534
885
  currentLevel,
@@ -544,6 +895,13 @@ export class MatterbridgeEndpoint extends Endpoint {
544
895
  });
545
896
  return this;
546
897
  }
898
+ /**
899
+ * Creates a level control cluster server without features.
900
+ *
901
+ * @param {number} [currentLevel=254] - The current level (default: 254).
902
+ * @param {number | null} [onLevel=null] - The on level (default: null).
903
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
904
+ */
547
905
  createLevelControlClusterServer(currentLevel = 254, onLevel = null) {
548
906
  this.behaviors.require(MatterbridgeLevelControlServer, {
549
907
  currentLevel,
@@ -555,6 +913,18 @@ export class MatterbridgeEndpoint extends Endpoint {
555
913
  });
556
914
  return this;
557
915
  }
916
+ /**
917
+ * Creates a default color control cluster server with Xy, HueSaturation and ColorTemperature.
918
+ *
919
+ * @param currentX - The current X value.
920
+ * @param currentY - The current Y value.
921
+ * @param currentHue - The current hue value.
922
+ * @param currentSaturation - The current saturation value.
923
+ * @param colorTemperatureMireds - The color temperature in mireds.
924
+ * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
925
+ * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
926
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
927
+ */
558
928
  createDefaultColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
559
929
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
560
930
  colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
@@ -577,6 +947,19 @@ export class MatterbridgeEndpoint extends Endpoint {
577
947
  });
578
948
  return this;
579
949
  }
950
+ /**
951
+ * Creates a Xy color control cluster server with Xy and ColorTemperature.
952
+ *
953
+ * @param currentX - The current X value.
954
+ * @param currentY - The current Y value.
955
+ * @param colorTemperatureMireds - The color temperature in mireds.
956
+ * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
957
+ * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
958
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
959
+ *
960
+ * @remarks
961
+ * From zigbee to matter = Math.max(Math.min(Math.round(x * 65536), 65279), 0)
962
+ */
580
963
  createXyColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
581
964
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.ColorTemperature), {
582
965
  colorMode: ColorControl.ColorMode.CurrentXAndCurrentY,
@@ -597,6 +980,16 @@ export class MatterbridgeEndpoint extends Endpoint {
597
980
  });
598
981
  return this;
599
982
  }
983
+ /**
984
+ * Creates a default hue and saturation control cluster server with HueSaturation and ColorTemperature.
985
+ *
986
+ * @param currentHue - The current hue value.
987
+ * @param currentSaturation - The current saturation value.
988
+ * @param colorTemperatureMireds - The color temperature in mireds.
989
+ * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
990
+ * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
991
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
992
+ */
600
993
  createHsColorControlClusterServer(currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
601
994
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
602
995
  colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
@@ -617,6 +1010,14 @@ export class MatterbridgeEndpoint extends Endpoint {
617
1010
  });
618
1011
  return this;
619
1012
  }
1013
+ /**
1014
+ * Creates a color temperature color control cluster server.
1015
+ *
1016
+ * @param colorTemperatureMireds - The color temperature in mireds.
1017
+ * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
1018
+ * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
1019
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1020
+ */
620
1021
  createCtColorControlClusterServer(colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
621
1022
  this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.ColorTemperature), {
622
1023
  colorMode: ColorControl.ColorMode.ColorTemperatureMireds,
@@ -635,12 +1036,23 @@ export class MatterbridgeEndpoint extends Endpoint {
635
1036
  });
636
1037
  return this;
637
1038
  }
1039
+ /**
1040
+ * Configures the color control mode for the device.
1041
+ *
1042
+ * @param {ColorControl.ColorMode} colorMode - The color mode to set.
1043
+ */
638
1044
  async configureColorControlMode(colorMode) {
639
1045
  if (isValidNumber(colorMode, ColorControl.ColorMode.CurrentHueAndCurrentSaturation, ColorControl.ColorMode.ColorTemperatureMireds)) {
640
1046
  await this.setAttribute(ColorControl.Cluster.id, 'colorMode', colorMode, this.log);
641
1047
  await this.setAttribute(ColorControl.Cluster.id, 'enhancedColorMode', colorMode, this.log);
642
1048
  }
643
1049
  }
1050
+ /**
1051
+ * Creates a default window covering cluster server (Lift and PositionAwareLift).
1052
+ *
1053
+ * @param positionPercent100ths - The position percentage in 100ths (0-10000). Defaults to 0. Matter uses 10000 = fully closed 0 = fully opened.
1054
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1055
+ */
644
1056
  createDefaultWindowCoveringClusterServer(positionPercent100ths) {
645
1057
  this.behaviors.require(MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift), {
646
1058
  type: WindowCovering.WindowCoveringType.Rollershade,
@@ -656,11 +1068,15 @@ export class MatterbridgeEndpoint extends Endpoint {
656
1068
  operationalStatus: { global: WindowCovering.MovementStatus.Stopped, lift: WindowCovering.MovementStatus.Stopped, tilt: WindowCovering.MovementStatus.Stopped },
657
1069
  endProductType: WindowCovering.EndProductType.RollerShade,
658
1070
  mode: { motorDirectionReversed: false, calibrationMode: false, maintenanceMode: false, ledFeedback: false },
659
- targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
660
- currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
1071
+ targetPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
1072
+ currentPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
661
1073
  });
662
1074
  return this;
663
1075
  }
1076
+ /**
1077
+ * Sets the window covering target position as the current position and stops the movement.
1078
+ *
1079
+ */
664
1080
  async setWindowCoveringTargetAsCurrentAndStopped() {
665
1081
  const position = this.getAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', this.log);
666
1082
  if (isValidNumber(position, 0, 10000)) {
@@ -673,6 +1089,12 @@ export class MatterbridgeEndpoint extends Endpoint {
673
1089
  }
674
1090
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths and targetPositionLiftPercent100ths to ${position} and operationalStatus to Stopped.`);
675
1091
  }
1092
+ /**
1093
+ * Sets the current and target status of a window covering.
1094
+ * @param {number} current - The current position of the window covering.
1095
+ * @param {number} target - The target position of the window covering.
1096
+ * @param {WindowCovering.MovementStatus} status - The movement status of the window covering.
1097
+ */
676
1098
  async setWindowCoveringCurrentTargetStatus(current, target, status) {
677
1099
  await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', current, this.log);
678
1100
  await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', target, this.log);
@@ -683,6 +1105,10 @@ export class MatterbridgeEndpoint extends Endpoint {
683
1105
  }, this.log);
684
1106
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${current}, targetPositionLiftPercent100ths: ${target} and operationalStatus: ${status}.`);
685
1107
  }
1108
+ /**
1109
+ * Sets the status of the window covering.
1110
+ * @param {WindowCovering.MovementStatus} status - The movement status to set.
1111
+ */
686
1112
  async setWindowCoveringStatus(status) {
687
1113
  await this.setAttribute(WindowCovering.Cluster.id, 'operationalStatus', {
688
1114
  global: status,
@@ -691,6 +1117,11 @@ export class MatterbridgeEndpoint extends Endpoint {
691
1117
  }, this.log);
692
1118
  this.log.debug(`Set WindowCovering operationalStatus: ${status}`);
693
1119
  }
1120
+ /**
1121
+ * Retrieves the status of the window covering.
1122
+ *
1123
+ * @returns The global operational status of the window covering or undefined.
1124
+ */
694
1125
  getWindowCoveringStatus() {
695
1126
  const status = this.getAttribute(WindowCovering.Cluster.id, 'operationalStatus', this.log);
696
1127
  if (isValidObject(status, 3) && 'global' in status && typeof status.global === 'number') {
@@ -698,36 +1129,66 @@ export class MatterbridgeEndpoint extends Endpoint {
698
1129
  return status.global;
699
1130
  }
700
1131
  }
1132
+ /**
1133
+ * Sets the target and current position of the window covering.
1134
+ *
1135
+ * @param position - The position to set, specified as a number.
1136
+ */
701
1137
  async setWindowCoveringTargetAndCurrentPosition(position) {
702
1138
  await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', position, this.log);
703
1139
  await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', position, this.log);
704
1140
  this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${position} and targetPositionLiftPercent100ths: ${position}.`);
705
1141
  }
1142
+ /**
1143
+ * Creates a default thermostat cluster server with Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode.
1144
+ *
1145
+ * @param {number} [localTemperature=23] - The local temperature value in degrees Celsius. Defaults to 23°.
1146
+ * @param {number} [occupiedHeatingSetpoint=21] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
1147
+ * @param {number} [occupiedCoolingSetpoint=25] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
1148
+ * @param {number} [minSetpointDeadBand=1] - The minimum setpoint dead band value. Defaults to 1°.
1149
+ * @param {number} [minHeatSetpointLimit=0] - The minimum heat setpoint limit value. Defaults to 0°.
1150
+ * @param {number} [maxHeatSetpointLimit=50] - The maximum heat setpoint limit value. Defaults to 50°.
1151
+ * @param {number} [minCoolSetpointLimit=0] - The minimum cool setpoint limit value. Defaults to 0°.
1152
+ * @param {number} [maxCoolSetpointLimit=50] - The maximum cool setpoint limit value. Defaults to 50°.
1153
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1154
+ */
706
1155
  createDefaultThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 1, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
707
1156
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode), {
708
1157
  localTemperature: localTemperature * 100,
709
1158
  systemMode: Thermostat.SystemMode.Auto,
710
1159
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
1160
+ // Thermostat.Feature.Heating
711
1161
  occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
712
1162
  minHeatSetpointLimit: minHeatSetpointLimit * 100,
713
1163
  maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
714
1164
  absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
715
1165
  absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
1166
+ // Thermostat.Feature.Cooling
716
1167
  occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
717
1168
  minCoolSetpointLimit: minCoolSetpointLimit * 100,
718
1169
  maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
719
1170
  absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
720
1171
  absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
1172
+ // Thermostat.Feature.AutoMode
721
1173
  minSetpointDeadBand: minSetpointDeadBand * 100,
722
1174
  thermostatRunningMode: Thermostat.ThermostatRunningMode.Off,
723
1175
  });
724
1176
  return this;
725
1177
  }
1178
+ /**
1179
+ * Creates a default heating thermostat cluster server with Thermostat.Feature.Heating.
1180
+ * @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
1181
+ * @param {number} [occupiedHeatingSetpoint] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
1182
+ * @param {number} [minHeatSetpointLimit] - The minimum heat setpoint limit value. Defaults to 0°.
1183
+ * @param {number} [maxHeatSetpointLimit] - The maximum heat setpoint limit value. Defaults to 50°.
1184
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1185
+ */
726
1186
  createDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
727
1187
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating), {
728
1188
  localTemperature: localTemperature * 100,
729
1189
  systemMode: Thermostat.SystemMode.Heat,
730
1190
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.HeatingOnly,
1191
+ // Thermostat.Feature.Heating
731
1192
  occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
732
1193
  minHeatSetpointLimit: minHeatSetpointLimit * 100,
733
1194
  maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
@@ -736,11 +1197,20 @@ export class MatterbridgeEndpoint extends Endpoint {
736
1197
  });
737
1198
  return this;
738
1199
  }
1200
+ /**
1201
+ * Creates a default cooling thermostat cluster server with Thermostat.Feature.Cooling.
1202
+ * @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
1203
+ * @param {number} [occupiedCoolingSetpoint] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
1204
+ * @param {number} [minCoolSetpointLimit] - The minimum cool setpoint limit value. Defaults to 0°.
1205
+ * @param {number} [maxCoolSetpointLimit] - The maximum cool setpoint limit value. Defaults to 50°.
1206
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1207
+ */
739
1208
  createDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
740
1209
  this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Cooling), {
741
1210
  localTemperature: localTemperature * 100,
742
1211
  systemMode: Thermostat.SystemMode.Cool,
743
1212
  controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingOnly,
1213
+ // Thermostat.Feature.Cooling
744
1214
  occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
745
1215
  minCoolSetpointLimit: minCoolSetpointLimit * 100,
746
1216
  maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
@@ -749,6 +1219,12 @@ export class MatterbridgeEndpoint extends Endpoint {
749
1219
  });
750
1220
  return this;
751
1221
  }
1222
+ /**
1223
+ * Creates a default fan control cluster server.
1224
+ *
1225
+ * @param fanMode The fan mode to set. Defaults to `FanControl.FanMode.Off`.
1226
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1227
+ */
752
1228
  createDefaultFanControlClusterServer(fanMode = FanControl.FanMode.Off) {
753
1229
  this.behaviors.require(MatterbridgeFanControlServer.with(FanControl.Feature.MultiSpeed, FanControl.Feature.Auto, FanControl.Feature.Step), {
754
1230
  fanMode,
@@ -761,6 +1237,16 @@ export class MatterbridgeEndpoint extends Endpoint {
761
1237
  });
762
1238
  return this;
763
1239
  }
1240
+ /**
1241
+ * Creates a default door lock cluster server.
1242
+ *
1243
+ * @param {DoorLock.LockState} [lockState=DoorLock.LockState.Locked] - The initial state of the lock (default: Locked).
1244
+ * @param {DoorLock.LockType} [lockType=DoorLock.LockType.DeadBolt] - The type of the lock (default: DeadBolt).
1245
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1246
+ *
1247
+ * @remarks
1248
+ * All operating modes NOT supported by a lock SHALL be set to one. The value of the OperatingMode enumeration defines the related bit to be set.
1249
+ */
764
1250
  createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
765
1251
  this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
766
1252
  operatingMode: DoorLock.OperatingMode.Normal,
@@ -771,6 +1257,18 @@ export class MatterbridgeEndpoint extends Endpoint {
771
1257
  });
772
1258
  return this;
773
1259
  }
1260
+ /**
1261
+ * Creates a default Mode Select cluster server.
1262
+ *
1263
+ * @param {string} description - The description of the mode select cluster.
1264
+ * @param {ModeSelect.ModeOption[]} supportedModes - The list of supported modes.
1265
+ * @param {number} [currentMode=0] - The current mode (default: 0).
1266
+ * @param {number} [startUpMode=0] - The startup mode (default: 0).
1267
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1268
+ *
1269
+ * @remarks
1270
+ * endpoint.createDefaultModeSelectClusterServer('Night mode', [{ label: 'Led ON', mode: 0, semanticTags: [] }, { label: 'Led OFF', mode: 1, semanticTags: [] }], 0, 0);
1271
+ */
774
1272
  createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
775
1273
  this.behaviors.require(MatterbridgeModeSelectServer, {
776
1274
  description: description,
@@ -781,6 +1279,13 @@ export class MatterbridgeEndpoint extends Endpoint {
781
1279
  });
782
1280
  return this;
783
1281
  }
1282
+ /**
1283
+ * Creates the default Valve Configuration And Control cluster server.
1284
+ *
1285
+ * @param {ValveConfigurationAndControl.ValveState} [valveState=ValveConfigurationAndControl.ValveState.Closed] - The valve state to set. Defaults to `ValveConfigurationAndControl.ValveState.Closed`.
1286
+ * @param {number} [valveLevel=0] - The valve level to set. Defaults to 0.
1287
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1288
+ */
784
1289
  createDefaultValveConfigurationAndControlClusterServer(valveState = ValveConfigurationAndControl.ValveState.Closed, valveLevel = 0) {
785
1290
  this.behaviors.require(MatterbridgeValveConfigurationAndControlServer.with(ValveConfigurationAndControl.Feature.Level), {
786
1291
  currentState: valveState,
@@ -793,6 +1298,12 @@ export class MatterbridgeEndpoint extends Endpoint {
793
1298
  });
794
1299
  return this;
795
1300
  }
1301
+ /**
1302
+ * Creates the default PumpConfigurationAndControl cluster server.
1303
+ *
1304
+ * @param {PumpConfigurationAndControl.OperationMode} [pumpMode=PumpConfigurationAndControl.OperationMode.Normal] - The pump mode to set. Defaults to `PumpConfigurationAndControl.OperationMode.Normal`.
1305
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1306
+ */
796
1307
  createDefaultPumpConfigurationAndControlClusterServer(pumpMode = PumpConfigurationAndControl.OperationMode.Normal) {
797
1308
  this.behaviors.require(PumpConfigurationAndControlServer.with(PumpConfigurationAndControl.Feature.ConstantSpeed), {
798
1309
  minConstSpeed: null,
@@ -807,6 +1318,13 @@ export class MatterbridgeEndpoint extends Endpoint {
807
1318
  });
808
1319
  return this;
809
1320
  }
1321
+ /**
1322
+ * Creates the default SmokeCOAlarm Cluster Server.
1323
+ *
1324
+ * @param {SmokeCoAlarm.AlarmState} smokeState - The state of the smoke alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1325
+ * @param {SmokeCoAlarm.AlarmState} coState - The state of the CO alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1326
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1327
+ */
810
1328
  createDefaultSmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal, coState = SmokeCoAlarm.AlarmState.Normal) {
811
1329
  this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm).enable({
812
1330
  events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
@@ -819,9 +1337,17 @@ export class MatterbridgeEndpoint extends Endpoint {
819
1337
  testInProgress: false,
820
1338
  hardwareFaultAlert: false,
821
1339
  endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
1340
+ // interconnectSmokeAlarm: SmokeCoAlarm.AlarmState.Normal,
1341
+ // interconnectCoAlarm: SmokeCoAlarm.AlarmState.Normal,
822
1342
  });
823
1343
  return this;
824
1344
  }
1345
+ /**
1346
+ * Creates a smoke only SmokeCOAlarm Cluster Server.
1347
+ *
1348
+ * @param {SmokeCoAlarm.AlarmState} smokeState - The state of the smoke alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1349
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1350
+ */
825
1351
  createSmokeOnlySmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal) {
826
1352
  this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm).enable({
827
1353
  events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: false, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
@@ -836,6 +1362,12 @@ export class MatterbridgeEndpoint extends Endpoint {
836
1362
  });
837
1363
  return this;
838
1364
  }
1365
+ /**
1366
+ * Creates a co only SmokeCOAlarm Cluster Server.
1367
+ *
1368
+ * @param {SmokeCoAlarm.AlarmState} coState - The state of the CO alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
1369
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1370
+ */
839
1371
  createCoOnlySmokeCOAlarmClusterServer(coState = SmokeCoAlarm.AlarmState.Normal) {
840
1372
  this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.CoAlarm).enable({
841
1373
  events: { smokeAlarm: false, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
@@ -850,6 +1382,13 @@ export class MatterbridgeEndpoint extends Endpoint {
850
1382
  });
851
1383
  return this;
852
1384
  }
1385
+ /**
1386
+ * Creates a default momentary switch cluster server.
1387
+ *
1388
+ * @remarks
1389
+ * This method adds a cluster server with default momentary switch features and configuration suitable for (AppleHome) Single Double Long automations.
1390
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1391
+ */
853
1392
  createDefaultSwitchClusterServer() {
854
1393
  this.behaviors.require(MatterbridgeSwitchServer.with(Switch.Feature.MomentarySwitch, Switch.Feature.MomentarySwitchRelease, Switch.Feature.MomentarySwitchLongPress, Switch.Feature.MomentarySwitchMultiPress).enable({
855
1394
  events: { initialPress: true, longPress: true, shortRelease: true, longRelease: true, multiPressOngoing: true, multiPressComplete: true },
@@ -860,6 +1399,13 @@ export class MatterbridgeEndpoint extends Endpoint {
860
1399
  });
861
1400
  return this;
862
1401
  }
1402
+ /**
1403
+ * Creates a default latching switch cluster server.
1404
+ *
1405
+ * @remarks
1406
+ * This method adds a cluster server with default latching switch features and configuration suitable for a latching switch with 2 positions.
1407
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1408
+ */
863
1409
  createDefaultLatchingSwitchClusterServer() {
864
1410
  this.behaviors.require(SwitchServer.with(Switch.Feature.LatchingSwitch).enable({
865
1411
  events: { switchLatched: true },
@@ -869,6 +1415,13 @@ export class MatterbridgeEndpoint extends Endpoint {
869
1415
  });
870
1416
  return this;
871
1417
  }
1418
+ /**
1419
+ * Triggers a switch event on the specified endpoint.
1420
+ *
1421
+ * @param {string} event - The type of event to trigger. Possible values are 'Single', 'Double', 'Long' for momentarySwitch and 'Press', 'Release' for latchingSwitch.
1422
+ * @param {Endpoint} endpoint - The endpoint on which to trigger the event (default the device endpoint).
1423
+ * @returns {boolean} - A boolean indicating whether the event was successfully triggered.
1424
+ */
872
1425
  async triggerSwitchEvent(event, log) {
873
1426
  if (this.maybeNumber === undefined) {
874
1427
  this.log.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${this.maybeId}:${this.maybeNumber}`);
@@ -928,14 +1481,31 @@ export class MatterbridgeEndpoint extends Endpoint {
928
1481
  }
929
1482
  return true;
930
1483
  }
1484
+ /**
1485
+ * Creates a default boolean state cluster server.
1486
+ *
1487
+ * @param {boolean} contact - The state of the cluster. Defaults to true (true = contact).
1488
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1489
+ */
931
1490
  createDefaultBooleanStateClusterServer(contact) {
932
1491
  this.behaviors.require(BooleanStateServer.enable({
933
1492
  events: { stateChange: true },
934
1493
  }), {
935
- stateValue: contact ?? true,
1494
+ stateValue: contact ?? true, // true=contact false=no_contact
936
1495
  });
937
1496
  return this;
938
1497
  }
1498
+ /**
1499
+ * Creates a default boolean state configuration cluster server to be used with the waterFreezeDetector, waterLeakDetector, and rainSensor device types.
1500
+ *
1501
+ * @remarks Supports the enableDisableAlarm command.
1502
+ *
1503
+ * @param {boolean} [sensorFault=false] - Optional boolean value indicating the sensor fault state. Defaults to `false` if not provided.
1504
+ * @param {number} [currentSensitivityLevel=0] - The current sensitivity level. Defaults to `0` if not provided.
1505
+ * @param {number} [supportedSensitivityLevels=2] - The number of supported sensitivity levels. Defaults to `2` if not provided (min 2, max 10).
1506
+ * @param {number} [defaultSensitivityLevel=0] - The default sensitivity level. Defaults to `0` if not provided.
1507
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1508
+ */
939
1509
  createDefaultBooleanStateConfigurationClusterServer(sensorFault = false, currentSensitivityLevel = 0, supportedSensitivityLevels = 2, defaultSensitivityLevel = 0) {
940
1510
  this.behaviors.require(MatterbridgeBooleanStateConfigurationServer.with(BooleanStateConfiguration.Feature.Visual, BooleanStateConfiguration.Feature.Audible, BooleanStateConfiguration.Feature.SensitivityLevel).enable({
941
1511
  events: { alarmsStateChanged: true, sensorFault: true },
@@ -950,10 +1520,21 @@ export class MatterbridgeEndpoint extends Endpoint {
950
1520
  });
951
1521
  return this;
952
1522
  }
1523
+ /**
1524
+ * Creates a default Power Topology Cluster Server with feature TreeTopology. Only needed for an electricalSensor device type.
1525
+ *
1526
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1527
+ */
953
1528
  createDefaultPowerTopologyClusterServer() {
954
1529
  this.behaviors.require(PowerTopologyServer.with(PowerTopology.Feature.TreeTopology));
955
1530
  return this;
956
1531
  }
1532
+ /**
1533
+ * Creates a default Electrical Energy Measurement Cluster Server.
1534
+ *
1535
+ * @param {number} energy - The total consumption value in mW/h.
1536
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1537
+ */
957
1538
  createDefaultElectricalEnergyMeasurementClusterServer(energy = null) {
958
1539
  this.behaviors.require(ElectricalEnergyMeasurementServer.with(ElectricalEnergyMeasurement.Feature.ImportedEnergy, ElectricalEnergyMeasurement.Feature.ExportedEnergy, ElectricalEnergyMeasurement.Feature.CumulativeEnergy), {
959
1540
  accuracy: {
@@ -969,6 +1550,15 @@ export class MatterbridgeEndpoint extends Endpoint {
969
1550
  });
970
1551
  return this;
971
1552
  }
1553
+ /**
1554
+ * Creates a default Electrical Power Measurement Cluster Server.
1555
+ *
1556
+ * @param {number} voltage - The voltage value in millivolts.
1557
+ * @param {number} current - The current value in milliamperes.
1558
+ * @param {number} power - The power value in milliwatts.
1559
+ * @param {number} frequency - The frequency value in millihertz.
1560
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1561
+ */
972
1562
  createDefaultElectricalPowerMeasurementClusterServer(voltage = null, current = null, power = null, frequency = null) {
973
1563
  this.behaviors.require(ElectricalPowerMeasurementServer.with(ElectricalPowerMeasurement.Feature.AlternatingCurrent), {
974
1564
  powerMode: ElectricalPowerMeasurement.PowerMode.Ac,
@@ -1010,36 +1600,91 @@ export class MatterbridgeEndpoint extends Endpoint {
1010
1600
  });
1011
1601
  return this;
1012
1602
  }
1603
+ /**
1604
+ * Creates a default TemperatureMeasurement cluster server.
1605
+ *
1606
+ * @param {number} measuredValue - The measured value of the temperature x 100.
1607
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1608
+ */
1013
1609
  createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
1014
1610
  this.behaviors.require(TemperatureMeasurementServer, getDefaultTemperatureMeasurementClusterServer(measuredValue));
1015
1611
  return this;
1016
1612
  }
1613
+ /**
1614
+ * Creates a default RelativeHumidityMeasurement cluster server.
1615
+ *
1616
+ * @param {number} measuredValue - The measured value of the relative humidity x 100.
1617
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1618
+ */
1017
1619
  createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
1018
1620
  this.behaviors.require(RelativeHumidityMeasurementServer, getDefaultRelativeHumidityMeasurementClusterServer(measuredValue));
1019
1621
  return this;
1020
1622
  }
1623
+ /**
1624
+ * Creates a default PressureMeasurement cluster server.
1625
+ *
1626
+ * @param {number} measuredValue - The measured value for the pressure.
1627
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1628
+ */
1021
1629
  createDefaultPressureMeasurementClusterServer(measuredValue = 1000) {
1022
1630
  this.behaviors.require(PressureMeasurementServer, getDefaultPressureMeasurementClusterServer(measuredValue));
1023
1631
  return this;
1024
1632
  }
1633
+ /**
1634
+ * Creates a default IlluminanceMeasurement cluster server.
1635
+ *
1636
+ * @param {number} measuredValue - The measured value of illuminance.
1637
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1638
+ *
1639
+ * @remarks
1640
+ * Lux to matter = Math.round(Math.max(Math.min(10000 * Math.log10(lux), 0xfffe), 0))
1641
+ * Matter to Lux = Math.round(Math.max(Math.pow(10, value / 10000), 0))
1642
+ */
1025
1643
  createDefaultIlluminanceMeasurementClusterServer(measuredValue = 0) {
1026
1644
  this.behaviors.require(IlluminanceMeasurementServer, getDefaultIlluminanceMeasurementClusterServer(measuredValue));
1027
1645
  return this;
1028
1646
  }
1647
+ /**
1648
+ * Creates a default FlowMeasurement cluster server.
1649
+ *
1650
+ * @param {number} measuredValue - The measured value of the flow in 10 x m/h.
1651
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1652
+ */
1029
1653
  createDefaultFlowMeasurementClusterServer(measuredValue = 0) {
1030
1654
  this.behaviors.require(FlowMeasurementServer, getDefaultFlowMeasurementClusterServer(measuredValue));
1031
1655
  return this;
1032
1656
  }
1657
+ /**
1658
+ * Creates a default OccupancySensing cluster server.
1659
+ *
1660
+ * @param {boolean} occupied - A boolean indicating whether the occupancy is occupied or not. Default is false.
1661
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1662
+ */
1033
1663
  createDefaultOccupancySensingClusterServer(occupied = false) {
1034
1664
  this.behaviors.require(OccupancySensingServer, getDefaultOccupancySensingClusterServer(occupied));
1035
1665
  return this;
1036
1666
  }
1667
+ /**
1668
+ * Creates a default AirQuality cluster server.
1669
+ *
1670
+ * @param {AirQuality.AirQualityEnum} airQuality The air quality level. Defaults to `AirQuality.AirQualityType.Unknown`.
1671
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1672
+ */
1037
1673
  createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
1038
1674
  this.behaviors.require(AirQualityServer.with(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), {
1039
1675
  airQuality,
1040
1676
  });
1041
1677
  return this;
1042
1678
  }
1679
+ /**
1680
+ * Creates a default TotalVolatileOrganicCompoundsConcentrationMeasurement cluster server.
1681
+ *
1682
+ * @param {number} measuredValue - The measured value of the concentration (default to 0).
1683
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1684
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1685
+ * @param {number} [uncertainty] - The uncertainty value (optional).
1686
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1687
+ */
1043
1688
  createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air, uncertainty) {
1044
1689
  this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1045
1690
  measuredValue,
@@ -1051,6 +1696,11 @@ export class MatterbridgeEndpoint extends Endpoint {
1051
1696
  });
1052
1697
  return this;
1053
1698
  }
1699
+ /**
1700
+ * @param {ConcentrationMeasurement.LevelValue} levelValue - The level value of the measurement (default to ConcentrationMeasurement.LevelValue.Unknown).
1701
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The measurement medium (default to ConcentrationMeasurement.MeasurementMedium.Air).
1702
+ * @returns {this} The current MatterbridgeEndpoint instance for chaining.
1703
+ */
1054
1704
  createLevelTvocMeasurementClusterServer(levelValue = ConcentrationMeasurement.LevelValue.Unknown, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1055
1705
  this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), {
1056
1706
  levelValue,
@@ -1058,6 +1708,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1058
1708
  });
1059
1709
  return this;
1060
1710
  }
1711
+ /**
1712
+ * Create a default CarbonMonoxideConcentrationMeasurement cluster server.
1713
+ *
1714
+ * @param {number} measuredValue - The measured value of the concentration.
1715
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1716
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1717
+ */
1061
1718
  createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1062
1719
  this.behaviors.require(CarbonMonoxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1063
1720
  measuredValue,
@@ -1069,6 +1726,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1069
1726
  });
1070
1727
  return this;
1071
1728
  }
1729
+ /**
1730
+ * Create a default CarbonDioxideConcentrationMeasurement cluster server.
1731
+ *
1732
+ * @param {number} measuredValue - The measured value of the concentration.
1733
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1734
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1735
+ */
1072
1736
  createDefaultCarbonDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1073
1737
  this.behaviors.require(CarbonDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1074
1738
  measuredValue,
@@ -1080,6 +1744,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1080
1744
  });
1081
1745
  return this;
1082
1746
  }
1747
+ /**
1748
+ * Create a default FormaldehydeConcentrationMeasurement cluster server.
1749
+ *
1750
+ * @param {number} measuredValue - The measured value of the concentration.
1751
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1752
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1753
+ */
1083
1754
  createDefaultFormaldehydeConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1084
1755
  this.behaviors.require(FormaldehydeConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1085
1756
  measuredValue,
@@ -1091,6 +1762,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1091
1762
  });
1092
1763
  return this;
1093
1764
  }
1765
+ /**
1766
+ * Create a default Pm1ConcentrationMeasurement cluster server.
1767
+ *
1768
+ * @param {number} measuredValue - The measured value of the concentration.
1769
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1770
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1771
+ */
1094
1772
  createDefaultPm1ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1095
1773
  this.behaviors.require(Pm1ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1096
1774
  measuredValue,
@@ -1102,6 +1780,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1102
1780
  });
1103
1781
  return this;
1104
1782
  }
1783
+ /**
1784
+ * Create a default Pm25ConcentrationMeasurement cluster server.
1785
+ *
1786
+ * @param {number} measuredValue - The measured value of the concentration.
1787
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1788
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1789
+ */
1105
1790
  createDefaultPm25ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1106
1791
  this.behaviors.require(Pm25ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1107
1792
  measuredValue,
@@ -1113,6 +1798,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1113
1798
  });
1114
1799
  return this;
1115
1800
  }
1801
+ /**
1802
+ * Create a default Pm10ConcentrationMeasurement cluster server.
1803
+ *
1804
+ * @param {number} measuredValue - The measured value of the concentration.
1805
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1806
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1807
+ */
1116
1808
  createDefaultPm10ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1117
1809
  this.behaviors.require(Pm10ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1118
1810
  measuredValue,
@@ -1124,6 +1816,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1124
1816
  });
1125
1817
  return this;
1126
1818
  }
1819
+ /**
1820
+ * Create a default OzoneConcentrationMeasurement cluster server.
1821
+ *
1822
+ * @param {number} measuredValue - The measured value of the concentration.
1823
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
1824
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1825
+ */
1127
1826
  createDefaultOzoneConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1128
1827
  this.behaviors.require(OzoneConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1129
1828
  measuredValue,
@@ -1135,6 +1834,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1135
1834
  });
1136
1835
  return this;
1137
1836
  }
1837
+ /**
1838
+ * Create a default RadonConcentrationMeasurement cluster server.
1839
+ *
1840
+ * @param {number} measuredValue - The measured value of the concentration.
1841
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
1842
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1843
+ */
1138
1844
  createDefaultRadonConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1139
1845
  this.behaviors.require(RadonConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1140
1846
  measuredValue,
@@ -1146,6 +1852,13 @@ export class MatterbridgeEndpoint extends Endpoint {
1146
1852
  });
1147
1853
  return this;
1148
1854
  }
1855
+ /**
1856
+ * Create a default NitrogenDioxideConcentrationMeasurement cluster server.
1857
+ *
1858
+ * @param {number} measuredValue - The measured value of the concentration.
1859
+ * @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
1860
+ * @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
1861
+ */
1149
1862
  createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
1150
1863
  this.behaviors.require(NitrogenDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
1151
1864
  measuredValue,
@@ -1158,3 +1871,4 @@ export class MatterbridgeEndpoint extends Endpoint {
1158
1871
  return this;
1159
1872
  }
1160
1873
  }
1874
+ //# sourceMappingURL=matterbridgeEndpoint.js.map