matterbridge 2.2.8 → 2.2.9-dev.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.
- package/CHANGELOG.md +20 -1
- package/dist/cli.js +2 -37
- package/dist/cluster/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -23
- package/dist/deviceManager.js +1 -94
- package/dist/frontend.js +19 -326
- package/dist/index.js +1 -28
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.js +0 -2
- package/dist/matter/types.js +0 -2
- package/dist/matterbridge.js +51 -747
- package/dist/matterbridgeAccessoryPlatform.js +0 -33
- package/dist/matterbridgeBehaviors.js +1 -32
- package/dist/matterbridgeDeviceTypes.js +11 -112
- package/dist/matterbridgeDynamicPlatform.js +0 -33
- package/dist/matterbridgeEndpoint.js +6 -720
- package/dist/matterbridgeEndpointHelpers.js +9 -118
- package/dist/matterbridgePlatform.js +7 -216
- package/dist/matterbridgeTypes.js +0 -24
- package/dist/pluginManager.js +3 -262
- package/dist/shelly.js +6 -146
- package/dist/storage/export.js +0 -1
- package/dist/update.js +0 -45
- package/dist/utils/colorUtils.js +2 -205
- package/dist/utils/copyDirectory.js +1 -37
- package/dist/utils/createZip.js +2 -42
- package/dist/utils/deepCopy.js +0 -40
- package/dist/utils/deepEqual.js +1 -65
- package/dist/utils/export.js +0 -1
- package/dist/utils/isvalid.js +0 -86
- package/dist/utils/network.js +5 -76
- package/dist/utils/parameter.js +0 -41
- package/dist/utils/wait.js +5 -48
- package/frontend/build/asset-manifest.json +3 -3
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/js/{main.e11d6bb4.js → main.ff47208e.js} +3 -3
- package/frontend/build/static/js/{main.e11d6bb4.js.map → main.ff47208e.js.map} +1 -1
- package/npm-shrinkwrap.json +9 -9
- package/package.json +1 -2
- package/dist/cli.d.ts +0 -29
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cluster/export.d.ts +0 -2
- package/dist/cluster/export.d.ts.map +0 -1
- package/dist/cluster/export.js.map +0 -1
- package/dist/defaultConfigSchema.d.ts +0 -27
- package/dist/defaultConfigSchema.d.ts.map +0 -1
- package/dist/defaultConfigSchema.js.map +0 -1
- package/dist/deviceManager.d.ts +0 -114
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/frontend.d.ts +0 -221
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/export.d.ts +0 -2
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts +0 -2
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts +0 -2
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts +0 -2
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts +0 -2
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts +0 -5
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts +0 -3
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterbridge.d.ts +0 -425
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -39
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts +0 -1056
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts +0 -177
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -39
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts +0 -867
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -2275
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts +0 -285
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts +0 -183
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -271
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts +0 -92
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts +0 -2
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts +0 -32
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -61
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts +0 -32
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts +0 -38
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts +0 -31
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts +0 -53
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/export.d.ts +0 -10
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/isvalid.d.ts +0 -87
- package/dist/utils/isvalid.d.ts.map +0 -1
- package/dist/utils/isvalid.js.map +0 -1
- package/dist/utils/network.d.ts +0 -69
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/parameter.d.ts +0 -44
- package/dist/utils/parameter.d.ts.map +0 -1
- package/dist/utils/parameter.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -43
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js.map +0 -1
- /package/frontend/build/static/js/{main.e11d6bb4.js.LICENSE.txt → main.ff47208e.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 { 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,6 @@ 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
|
|
56
29
|
import { DescriptorServer } from '@matter/main/behaviors/descriptor';
|
|
57
30
|
import { PowerSourceServer } from '@matter/main/behaviors/power-source';
|
|
58
31
|
import { BridgedDeviceBasicInformationServer } from '@matter/main/behaviors/bridged-device-basic-information';
|
|
@@ -83,7 +56,7 @@ import { RadonConcentrationMeasurementServer } from '@matter/main/behaviors/rado
|
|
|
83
56
|
import { TotalVolatileOrganicCompoundsConcentrationMeasurementServer } from '@matter/main/behaviors/total-volatile-organic-compounds-concentration-measurement';
|
|
84
57
|
export class MatterbridgeEndpoint extends Endpoint {
|
|
85
58
|
static bridgeMode = '';
|
|
86
|
-
static logLevel = "info"
|
|
59
|
+
static logLevel = "info";
|
|
87
60
|
log;
|
|
88
61
|
plugin = undefined;
|
|
89
62
|
configUrl = undefined;
|
|
@@ -99,25 +72,14 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
99
72
|
hardwareVersion = undefined;
|
|
100
73
|
hardwareVersionString = undefined;
|
|
101
74
|
productUrl = 'https://www.npmjs.com/package/matterbridge';
|
|
102
|
-
// The first device type of the endpoint
|
|
103
75
|
name = undefined;
|
|
104
76
|
deviceType;
|
|
105
77
|
uniqueStorageKey = undefined;
|
|
106
78
|
tagList = undefined;
|
|
107
|
-
// Maps matter deviceTypes
|
|
108
79
|
deviceTypes = new Map();
|
|
109
|
-
// Command handler
|
|
110
80
|
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
81
|
constructor(definition, options = {}, debug = false) {
|
|
119
82
|
let deviceTypeList = [];
|
|
120
|
-
// Get the first DeviceTypeDefinition
|
|
121
83
|
let firstDefinition;
|
|
122
84
|
if (Array.isArray(definition)) {
|
|
123
85
|
firstDefinition = definition[0];
|
|
@@ -130,7 +92,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
130
92
|
firstDefinition = definition;
|
|
131
93
|
deviceTypeList = [{ deviceType: firstDefinition.code, revision: firstDefinition.revision }];
|
|
132
94
|
}
|
|
133
|
-
// Convert the first DeviceTypeDefinition to an EndpointType.Options
|
|
134
95
|
const deviceTypeDefinitionV8 = {
|
|
135
96
|
name: firstDefinition.name.replace('-', '_'),
|
|
136
97
|
deviceType: firstDefinition.code,
|
|
@@ -149,11 +110,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
149
110
|
behaviors: options.tagList ? SupportedBehaviors(DescriptorServer.with(Descriptor.Feature.TagList)) : {},
|
|
150
111
|
};
|
|
151
112
|
const endpointV8 = MutableEndpoint(deviceTypeDefinitionV8);
|
|
152
|
-
// Check if the uniqueStorageKey is valid
|
|
153
113
|
if (options.uniqueStorageKey && checkNotLatinCharacters(options.uniqueStorageKey)) {
|
|
154
114
|
options.uniqueStorageKey = generateUniqueId(options.uniqueStorageKey);
|
|
155
115
|
}
|
|
156
|
-
// Convert the options to an Endpoint.Options
|
|
157
116
|
const optionsV8 = {
|
|
158
117
|
id: options.uniqueStorageKey?.replace(/[ .]/g, ''),
|
|
159
118
|
number: options.endpointId,
|
|
@@ -171,41 +130,17 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
171
130
|
}
|
|
172
131
|
else
|
|
173
132
|
this.deviceTypes.set(firstDefinition.code, firstDefinition);
|
|
174
|
-
|
|
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 });
|
|
133
|
+
this.log = new AnsiLogger({ logName: options.uniqueStorageKey ?? 'MatterbridgeEndpoint', logTimestampFormat: 4, logLevel: debug === true ? "debug" : MatterbridgeEndpoint.logLevel });
|
|
179
134
|
this.log.debug(`${YELLOW}new${db} MatterbridgeEndpoint: ${zb}${'0x' + firstDefinition.code.toString(16).padStart(4, '0')}${db}-${zb}${firstDefinition.name}${db} ` +
|
|
180
135
|
`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
136
|
this.behaviors.require(MatterbridgeBehavior, { deviceCommand: new MatterbridgeBehaviorDevice(this.log, this.commandHandler, undefined) });
|
|
183
137
|
}
|
|
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
138
|
static async loadInstance(definition, options = {}, debug = false) {
|
|
193
139
|
return new MatterbridgeEndpoint(definition, options, debug);
|
|
194
140
|
}
|
|
195
|
-
/**
|
|
196
|
-
* Get all the device types of this endpoint.
|
|
197
|
-
*
|
|
198
|
-
* @returns {DeviceTypeDefinition[]} The device types of this endpoint.
|
|
199
|
-
*/
|
|
200
141
|
getDeviceTypes() {
|
|
201
142
|
return Array.from(this.deviceTypes.values());
|
|
202
143
|
}
|
|
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
144
|
hasClusterServer(cluster) {
|
|
210
145
|
const behavior = getBehavior(this, cluster);
|
|
211
146
|
if (behavior)
|
|
@@ -213,13 +148,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
213
148
|
else
|
|
214
149
|
return false;
|
|
215
150
|
}
|
|
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
151
|
hasAttributeServer(cluster, attribute) {
|
|
224
152
|
const behavior = getBehavior(this, cluster);
|
|
225
153
|
if (!behavior || !this.behaviors.supported[behavior.id])
|
|
@@ -228,186 +156,72 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
228
156
|
const defaults = this.behaviors.defaultsFor(behavior);
|
|
229
157
|
return lowercaseFirstLetter(attribute) in options || lowercaseFirstLetter(attribute) in defaults;
|
|
230
158
|
}
|
|
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
159
|
getClusterServerOptions(cluster) {
|
|
238
160
|
const behavior = getBehavior(this, cluster);
|
|
239
161
|
if (!behavior)
|
|
240
162
|
return undefined;
|
|
241
163
|
return this.behaviors.optionsFor(behavior);
|
|
242
164
|
}
|
|
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
165
|
getAttribute(cluster, attribute, log) {
|
|
253
166
|
return getAttribute(this, cluster, attribute, log);
|
|
254
167
|
}
|
|
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
168
|
async setAttribute(clusterId, attribute, value, log) {
|
|
265
169
|
return await setAttribute(this, clusterId, attribute, value, log);
|
|
266
170
|
}
|
|
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
171
|
async updateAttribute(cluster, attribute, value, log) {
|
|
277
172
|
return await updateAttribute(this, cluster, attribute, value, log);
|
|
278
173
|
}
|
|
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
174
|
async subscribeAttribute(cluster, attribute, listener, log) {
|
|
290
175
|
return await subscribeAttribute(this, cluster, attribute, listener, log);
|
|
291
176
|
}
|
|
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
177
|
async triggerEvent(clusterId, event, payload, log) {
|
|
302
178
|
const clusterName = lowercaseFirstLetter(getClusterNameById(clusterId));
|
|
303
179
|
if (this.construction.status !== Lifecycle.Status.Active) {
|
|
304
180
|
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
181
|
return false;
|
|
306
182
|
}
|
|
307
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
308
183
|
const events = this.events;
|
|
309
184
|
if (!(clusterName in events) || !(event in events[clusterName])) {
|
|
310
185
|
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
186
|
return false;
|
|
312
187
|
}
|
|
313
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
314
|
-
// @ts-ignore
|
|
315
188
|
await this.act((agent) => agent[clusterName].events[event].emit(payload, agent.context));
|
|
316
189
|
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
190
|
return true;
|
|
318
191
|
}
|
|
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
192
|
addClusterServers(serverList) {
|
|
326
193
|
addClusterServers(this, serverList);
|
|
327
194
|
return this;
|
|
328
195
|
}
|
|
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
196
|
async addFixedLabel(label, value) {
|
|
337
197
|
await addFixedLabel(this, label, value);
|
|
338
198
|
return this;
|
|
339
199
|
}
|
|
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
200
|
async addUserLabel(label, value) {
|
|
348
201
|
await addUserLabel(this, label, value);
|
|
349
202
|
return this;
|
|
350
203
|
}
|
|
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
204
|
addCommandHandler(command, handler) {
|
|
359
205
|
this.commandHandler.addHandler(command, handler);
|
|
360
206
|
return this;
|
|
361
207
|
}
|
|
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
208
|
async executeCommandHandler(command, request) {
|
|
370
209
|
await this.commandHandler.executeHandler(command, { request });
|
|
371
210
|
}
|
|
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
211
|
addRequiredClusterServers() {
|
|
378
212
|
addRequiredClusterServers(this);
|
|
379
213
|
return this;
|
|
380
214
|
}
|
|
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
215
|
addOptionalClusterServers() {
|
|
387
216
|
addOptionalClusterServers(this);
|
|
388
217
|
return this;
|
|
389
218
|
}
|
|
390
|
-
/**
|
|
391
|
-
* Retrieves all cluster servers.
|
|
392
|
-
*
|
|
393
|
-
* @returns {Behavior.Type[]} An array of all cluster servers.
|
|
394
|
-
*/
|
|
395
219
|
getAllClusterServers() {
|
|
396
220
|
return Object.values(this.behaviors.supported);
|
|
397
221
|
}
|
|
398
|
-
/**
|
|
399
|
-
* Retrieves the names of all cluster servers.
|
|
400
|
-
*
|
|
401
|
-
* @returns {string[]} An array of all cluster server names.
|
|
402
|
-
*/
|
|
403
222
|
getAllClusterServerNames() {
|
|
404
223
|
return Object.keys(this.behaviors.supported);
|
|
405
224
|
}
|
|
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
225
|
forEachAttribute(callback) {
|
|
412
226
|
if (!this.lifecycle.isReady || this.construction.status !== Lifecycle.Status.Active)
|
|
413
227
|
return;
|
|
@@ -415,34 +229,16 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
415
229
|
for (const [attributeName, attributeValue] of Object.entries(clusterAttributes)) {
|
|
416
230
|
const clusterId = getClusterId(this, clusterName);
|
|
417
231
|
if (clusterId === undefined) {
|
|
418
|
-
// this.log.error(`forEachAttribute error: cluster ${clusterName} not found`);
|
|
419
232
|
continue;
|
|
420
233
|
}
|
|
421
234
|
const attributeId = getAttributeId(this, clusterName, attributeName);
|
|
422
235
|
if (attributeId === undefined) {
|
|
423
|
-
// this.log.error(`forEachAttribute error: attribute ${clusterName}.${attributeName} not found`);
|
|
424
236
|
continue;
|
|
425
237
|
}
|
|
426
238
|
callback(clusterName, clusterId, attributeName, attributeId, attributeValue);
|
|
427
239
|
}
|
|
428
240
|
}
|
|
429
241
|
}
|
|
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
242
|
addChildDeviceType(endpointName, definition, options = {}, debug = false) {
|
|
447
243
|
this.log.debug(`addChildDeviceType: ${CYAN}${endpointName}${db}`);
|
|
448
244
|
let alreadyAdded = false;
|
|
@@ -482,23 +278,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
482
278
|
}
|
|
483
279
|
return child;
|
|
484
280
|
}
|
|
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
281
|
addChildDeviceTypeWithClusterServer(endpointName, definition, serverList = [], options = {}, debug = false) {
|
|
503
282
|
this.log.debug(`addChildDeviceTypeWithClusterServer: ${CYAN}${endpointName}${db}`);
|
|
504
283
|
let alreadyAdded = false;
|
|
@@ -561,38 +340,15 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
561
340
|
}
|
|
562
341
|
return child;
|
|
563
342
|
}
|
|
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
343
|
getChildEndpointByName(endpointName) {
|
|
571
344
|
return this.parts.find((part) => part.id === endpointName);
|
|
572
345
|
}
|
|
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
346
|
getChildEndpoint(endpointNumber) {
|
|
580
347
|
return this.parts.find((part) => part.number === endpointNumber);
|
|
581
348
|
}
|
|
582
|
-
/**
|
|
583
|
-
* Get all the child endpoints of this endpoint.
|
|
584
|
-
*
|
|
585
|
-
* @returns {MatterbridgeEndpoint[]} The child endpoints.
|
|
586
|
-
*/
|
|
587
349
|
getChildEndpoints() {
|
|
588
350
|
return Array.from(this.parts);
|
|
589
351
|
}
|
|
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
352
|
static serialize(device) {
|
|
597
353
|
if (!device.serialNumber || !device.deviceName || !device.uniqueId)
|
|
598
354
|
return;
|
|
@@ -615,15 +371,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
615
371
|
serialized.clusterServersId.push(BridgedDeviceBasicInformation.Cluster.id);
|
|
616
372
|
if (behaviorName === 'powerSource')
|
|
617
373
|
serialized.clusterServersId.push(PowerSource.Cluster.id);
|
|
618
|
-
// serialized.clusterServersId.push(this.behaviors.supported[behaviorName]cluster.id);
|
|
619
374
|
});
|
|
620
375
|
return serialized;
|
|
621
376
|
}
|
|
622
|
-
/**
|
|
623
|
-
* Deserializes the device into a serialized object.
|
|
624
|
-
*
|
|
625
|
-
* @returns The deserialized MatterbridgeDevice.
|
|
626
|
-
*/
|
|
627
377
|
static deserialize(serializedDevice) {
|
|
628
378
|
const device = new MatterbridgeEndpoint(serializedDevice.deviceTypes, { uniqueStorageKey: serializedDevice.endpointName, endpointId: serializedDevice.endpoint }, false);
|
|
629
379
|
device.plugin = serializedDevice.pluginName;
|
|
@@ -639,16 +389,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
639
389
|
device.createDefaultBridgedDeviceBasicInformationClusterServer(serializedDevice.deviceName, serializedDevice.serialNumber, serializedDevice.vendorId ?? 0xfff1, serializedDevice.vendorName ?? 'Matterbridge', serializedDevice.productName ?? 'Matterbridge device');
|
|
640
390
|
else if (clusterId === PowerSource.Cluster.id)
|
|
641
391
|
device.createDefaultPowerSourceWiredClusterServer();
|
|
642
|
-
// else addClusterServerFromList(device, [clusterId]);
|
|
643
392
|
}
|
|
644
393
|
return device;
|
|
645
394
|
}
|
|
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
395
|
createDefaultPowerSourceWiredClusterServer(wiredCurrentType = PowerSource.WiredCurrentType.Ac) {
|
|
653
396
|
this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Wired), {
|
|
654
397
|
wiredCurrentType,
|
|
@@ -659,16 +402,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
659
402
|
});
|
|
660
403
|
return this;
|
|
661
404
|
}
|
|
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
405
|
createDefaultPowerSourceReplaceableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500, batReplacementDescription = 'Battery type', batQuantity = 1) {
|
|
673
406
|
this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Replaceable), {
|
|
674
407
|
status: PowerSource.PowerSourceStatus.Active,
|
|
@@ -686,14 +419,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
686
419
|
});
|
|
687
420
|
return this;
|
|
688
421
|
}
|
|
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
422
|
createDefaultPowerSourceRechargeableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500) {
|
|
698
423
|
this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable), {
|
|
699
424
|
status: PowerSource.PowerSourceStatus.Active,
|
|
@@ -712,21 +437,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
712
437
|
});
|
|
713
438
|
return this;
|
|
714
439
|
}
|
|
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
440
|
createDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
731
441
|
this.log.logName = deviceName;
|
|
732
442
|
this.deviceName = deviceName;
|
|
@@ -750,20 +460,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
750
460
|
}
|
|
751
461
|
return this;
|
|
752
462
|
}
|
|
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
463
|
createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
768
464
|
this.log.logName = deviceName;
|
|
769
465
|
this.deviceName = deviceName;
|
|
@@ -780,7 +476,7 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
780
476
|
this.behaviors.require(BridgedDeviceBasicInformationServer.enable({
|
|
781
477
|
events: { leave: true, reachableChanged: true },
|
|
782
478
|
}), {
|
|
783
|
-
vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined,
|
|
479
|
+
vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined,
|
|
784
480
|
vendorName: vendorName.slice(0, 32),
|
|
785
481
|
productName: productName.slice(0, 32),
|
|
786
482
|
productUrl: this.productUrl,
|
|
@@ -796,13 +492,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
796
492
|
});
|
|
797
493
|
return this;
|
|
798
494
|
}
|
|
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
495
|
createDefaultIdentifyClusterServer(identifyTime = 0, identifyType = Identify.IdentifyType.None) {
|
|
807
496
|
this.behaviors.require(MatterbridgeIdentifyServer, {
|
|
808
497
|
identifyTime,
|
|
@@ -810,32 +499,14 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
810
499
|
});
|
|
811
500
|
return this;
|
|
812
501
|
}
|
|
813
|
-
/**
|
|
814
|
-
* Creates a default groups cluster server.
|
|
815
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
816
|
-
*/
|
|
817
502
|
createDefaultGroupsClusterServer() {
|
|
818
503
|
this.behaviors.require(GroupsServer);
|
|
819
504
|
return this;
|
|
820
505
|
}
|
|
821
|
-
/**
|
|
822
|
-
* Creates a default scenes management cluster server.
|
|
823
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
824
|
-
*/
|
|
825
506
|
createDefaultScenesClusterServer() {
|
|
826
507
|
this.behaviors.require(ScenesManagementServer);
|
|
827
508
|
return this;
|
|
828
509
|
}
|
|
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
510
|
createDefaultOnOffClusterServer(onOff = false, globalSceneControl = false, onTime = 0, offWaitTime = 0, startUpOnOff = null) {
|
|
840
511
|
this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.Lighting), {
|
|
841
512
|
onOff,
|
|
@@ -846,40 +517,18 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
846
517
|
});
|
|
847
518
|
return this;
|
|
848
519
|
}
|
|
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
520
|
createOnOffClusterServer(onOff = false) {
|
|
856
521
|
this.behaviors.require(MatterbridgeOnOffServer, {
|
|
857
522
|
onOff,
|
|
858
523
|
});
|
|
859
524
|
return this;
|
|
860
525
|
}
|
|
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
526
|
createDeadFrontOnOffClusterServer(onOff = false) {
|
|
868
527
|
this.behaviors.require(MatterbridgeOnOffServer.with(OnOff.Feature.DeadFrontBehavior), {
|
|
869
528
|
onOff,
|
|
870
529
|
});
|
|
871
530
|
return this;
|
|
872
531
|
}
|
|
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
532
|
createDefaultLevelControlClusterServer(currentLevel = 254, minLevel = 1, maxLevel = 254, onLevel = null, startUpCurrentLevel = null) {
|
|
884
533
|
this.behaviors.require(MatterbridgeLevelControlServer.with(LevelControl.Feature.OnOff, LevelControl.Feature.Lighting), {
|
|
885
534
|
currentLevel,
|
|
@@ -895,13 +544,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
895
544
|
});
|
|
896
545
|
return this;
|
|
897
546
|
}
|
|
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
|
-
*/
|
|
905
547
|
createLevelControlClusterServer(currentLevel = 254, onLevel = null) {
|
|
906
548
|
this.behaviors.require(MatterbridgeLevelControlServer, {
|
|
907
549
|
currentLevel,
|
|
@@ -913,18 +555,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
913
555
|
});
|
|
914
556
|
return this;
|
|
915
557
|
}
|
|
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
|
-
*/
|
|
928
558
|
createDefaultColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
929
559
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
|
|
930
560
|
colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
@@ -947,19 +577,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
947
577
|
});
|
|
948
578
|
return this;
|
|
949
579
|
}
|
|
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
|
-
*/
|
|
963
580
|
createXyColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
964
581
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.ColorTemperature), {
|
|
965
582
|
colorMode: ColorControl.ColorMode.CurrentXAndCurrentY,
|
|
@@ -980,16 +597,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
980
597
|
});
|
|
981
598
|
return this;
|
|
982
599
|
}
|
|
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
|
-
*/
|
|
993
600
|
createHsColorControlClusterServer(currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
994
601
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
|
|
995
602
|
colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
@@ -1010,14 +617,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1010
617
|
});
|
|
1011
618
|
return this;
|
|
1012
619
|
}
|
|
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
|
-
*/
|
|
1021
620
|
createCtColorControlClusterServer(colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
1022
621
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.ColorTemperature), {
|
|
1023
622
|
colorMode: ColorControl.ColorMode.ColorTemperatureMireds,
|
|
@@ -1036,23 +635,12 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1036
635
|
});
|
|
1037
636
|
return this;
|
|
1038
637
|
}
|
|
1039
|
-
/**
|
|
1040
|
-
* Configures the color control mode for the device.
|
|
1041
|
-
*
|
|
1042
|
-
* @param {ColorControl.ColorMode} colorMode - The color mode to set.
|
|
1043
|
-
*/
|
|
1044
638
|
async configureColorControlMode(colorMode) {
|
|
1045
639
|
if (isValidNumber(colorMode, ColorControl.ColorMode.CurrentHueAndCurrentSaturation, ColorControl.ColorMode.ColorTemperatureMireds)) {
|
|
1046
640
|
await this.setAttribute(ColorControl.Cluster.id, 'colorMode', colorMode, this.log);
|
|
1047
641
|
await this.setAttribute(ColorControl.Cluster.id, 'enhancedColorMode', colorMode, this.log);
|
|
1048
642
|
}
|
|
1049
643
|
}
|
|
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
|
-
*/
|
|
1056
644
|
createDefaultWindowCoveringClusterServer(positionPercent100ths) {
|
|
1057
645
|
this.behaviors.require(MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift), {
|
|
1058
646
|
type: WindowCovering.WindowCoveringType.Rollershade,
|
|
@@ -1068,15 +656,11 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1068
656
|
operationalStatus: { global: WindowCovering.MovementStatus.Stopped, lift: WindowCovering.MovementStatus.Stopped, tilt: WindowCovering.MovementStatus.Stopped },
|
|
1069
657
|
endProductType: WindowCovering.EndProductType.RollerShade,
|
|
1070
658
|
mode: { motorDirectionReversed: false, calibrationMode: false, maintenanceMode: false, ledFeedback: false },
|
|
1071
|
-
targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
1072
|
-
currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
659
|
+
targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
660
|
+
currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
1073
661
|
});
|
|
1074
662
|
return this;
|
|
1075
663
|
}
|
|
1076
|
-
/**
|
|
1077
|
-
* Sets the window covering target position as the current position and stops the movement.
|
|
1078
|
-
*
|
|
1079
|
-
*/
|
|
1080
664
|
async setWindowCoveringTargetAsCurrentAndStopped() {
|
|
1081
665
|
const position = this.getAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', this.log);
|
|
1082
666
|
if (isValidNumber(position, 0, 10000)) {
|
|
@@ -1089,12 +673,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1089
673
|
}
|
|
1090
674
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths and targetPositionLiftPercent100ths to ${position} and operationalStatus to Stopped.`);
|
|
1091
675
|
}
|
|
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
|
-
*/
|
|
1098
676
|
async setWindowCoveringCurrentTargetStatus(current, target, status) {
|
|
1099
677
|
await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', current, this.log);
|
|
1100
678
|
await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', target, this.log);
|
|
@@ -1105,10 +683,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1105
683
|
}, this.log);
|
|
1106
684
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${current}, targetPositionLiftPercent100ths: ${target} and operationalStatus: ${status}.`);
|
|
1107
685
|
}
|
|
1108
|
-
/**
|
|
1109
|
-
* Sets the status of the window covering.
|
|
1110
|
-
* @param {WindowCovering.MovementStatus} status - The movement status to set.
|
|
1111
|
-
*/
|
|
1112
686
|
async setWindowCoveringStatus(status) {
|
|
1113
687
|
await this.setAttribute(WindowCovering.Cluster.id, 'operationalStatus', {
|
|
1114
688
|
global: status,
|
|
@@ -1117,11 +691,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1117
691
|
}, this.log);
|
|
1118
692
|
this.log.debug(`Set WindowCovering operationalStatus: ${status}`);
|
|
1119
693
|
}
|
|
1120
|
-
/**
|
|
1121
|
-
* Retrieves the status of the window covering.
|
|
1122
|
-
*
|
|
1123
|
-
* @returns The global operational status of the window covering or undefined.
|
|
1124
|
-
*/
|
|
1125
694
|
getWindowCoveringStatus() {
|
|
1126
695
|
const status = this.getAttribute(WindowCovering.Cluster.id, 'operationalStatus', this.log);
|
|
1127
696
|
if (isValidObject(status, 3) && 'global' in status && typeof status.global === 'number') {
|
|
@@ -1129,66 +698,36 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1129
698
|
return status.global;
|
|
1130
699
|
}
|
|
1131
700
|
}
|
|
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
|
-
*/
|
|
1137
701
|
async setWindowCoveringTargetAndCurrentPosition(position) {
|
|
1138
702
|
await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', position, this.log);
|
|
1139
703
|
await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', position, this.log);
|
|
1140
704
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${position} and targetPositionLiftPercent100ths: ${position}.`);
|
|
1141
705
|
}
|
|
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
|
-
*/
|
|
1155
706
|
createDefaultThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 1, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1156
707
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode), {
|
|
1157
708
|
localTemperature: localTemperature * 100,
|
|
1158
709
|
systemMode: Thermostat.SystemMode.Auto,
|
|
1159
710
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
|
|
1160
|
-
// Thermostat.Feature.Heating
|
|
1161
711
|
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1162
712
|
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1163
713
|
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1164
714
|
absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1165
715
|
absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1166
|
-
// Thermostat.Feature.Cooling
|
|
1167
716
|
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1168
717
|
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1169
718
|
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1170
719
|
absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1171
720
|
absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1172
|
-
// Thermostat.Feature.AutoMode
|
|
1173
721
|
minSetpointDeadBand: minSetpointDeadBand * 100,
|
|
1174
722
|
thermostatRunningMode: Thermostat.ThermostatRunningMode.Off,
|
|
1175
723
|
});
|
|
1176
724
|
return this;
|
|
1177
725
|
}
|
|
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
|
-
*/
|
|
1186
726
|
createDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
|
|
1187
727
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating), {
|
|
1188
728
|
localTemperature: localTemperature * 100,
|
|
1189
729
|
systemMode: Thermostat.SystemMode.Heat,
|
|
1190
730
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.HeatingOnly,
|
|
1191
|
-
// Thermostat.Feature.Heating
|
|
1192
731
|
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1193
732
|
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1194
733
|
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
@@ -1197,20 +736,11 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1197
736
|
});
|
|
1198
737
|
return this;
|
|
1199
738
|
}
|
|
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
|
-
*/
|
|
1208
739
|
createDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1209
740
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Cooling), {
|
|
1210
741
|
localTemperature: localTemperature * 100,
|
|
1211
742
|
systemMode: Thermostat.SystemMode.Cool,
|
|
1212
743
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingOnly,
|
|
1213
|
-
// Thermostat.Feature.Cooling
|
|
1214
744
|
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1215
745
|
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1216
746
|
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
@@ -1219,12 +749,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1219
749
|
});
|
|
1220
750
|
return this;
|
|
1221
751
|
}
|
|
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
|
-
*/
|
|
1228
752
|
createDefaultFanControlClusterServer(fanMode = FanControl.FanMode.Off) {
|
|
1229
753
|
this.behaviors.require(MatterbridgeFanControlServer.with(FanControl.Feature.MultiSpeed, FanControl.Feature.Auto, FanControl.Feature.Step), {
|
|
1230
754
|
fanMode,
|
|
@@ -1237,16 +761,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1237
761
|
});
|
|
1238
762
|
return this;
|
|
1239
763
|
}
|
|
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
|
-
*/
|
|
1250
764
|
createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
|
|
1251
765
|
this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
|
|
1252
766
|
operatingMode: DoorLock.OperatingMode.Normal,
|
|
@@ -1257,18 +771,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1257
771
|
});
|
|
1258
772
|
return this;
|
|
1259
773
|
}
|
|
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
|
-
*/
|
|
1272
774
|
createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
|
|
1273
775
|
this.behaviors.require(MatterbridgeModeSelectServer, {
|
|
1274
776
|
description: description,
|
|
@@ -1279,13 +781,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1279
781
|
});
|
|
1280
782
|
return this;
|
|
1281
783
|
}
|
|
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
|
-
*/
|
|
1289
784
|
createDefaultValveConfigurationAndControlClusterServer(valveState = ValveConfigurationAndControl.ValveState.Closed, valveLevel = 0) {
|
|
1290
785
|
this.behaviors.require(MatterbridgeValveConfigurationAndControlServer.with(ValveConfigurationAndControl.Feature.Level), {
|
|
1291
786
|
currentState: valveState,
|
|
@@ -1298,12 +793,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1298
793
|
});
|
|
1299
794
|
return this;
|
|
1300
795
|
}
|
|
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
|
-
*/
|
|
1307
796
|
createDefaultPumpConfigurationAndControlClusterServer(pumpMode = PumpConfigurationAndControl.OperationMode.Normal) {
|
|
1308
797
|
this.behaviors.require(PumpConfigurationAndControlServer.with(PumpConfigurationAndControl.Feature.ConstantSpeed), {
|
|
1309
798
|
minConstSpeed: null,
|
|
@@ -1318,13 +807,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1318
807
|
});
|
|
1319
808
|
return this;
|
|
1320
809
|
}
|
|
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
|
-
*/
|
|
1328
810
|
createDefaultSmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal, coState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1329
811
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm).enable({
|
|
1330
812
|
events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1337,17 +819,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1337
819
|
testInProgress: false,
|
|
1338
820
|
hardwareFaultAlert: false,
|
|
1339
821
|
endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
|
|
1340
|
-
// interconnectSmokeAlarm: SmokeCoAlarm.AlarmState.Normal,
|
|
1341
|
-
// interconnectCoAlarm: SmokeCoAlarm.AlarmState.Normal,
|
|
1342
822
|
});
|
|
1343
823
|
return this;
|
|
1344
824
|
}
|
|
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
|
-
*/
|
|
1351
825
|
createSmokeOnlySmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1352
826
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm).enable({
|
|
1353
827
|
events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: false, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1362,12 +836,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1362
836
|
});
|
|
1363
837
|
return this;
|
|
1364
838
|
}
|
|
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
|
-
*/
|
|
1371
839
|
createCoOnlySmokeCOAlarmClusterServer(coState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1372
840
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.CoAlarm).enable({
|
|
1373
841
|
events: { smokeAlarm: false, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1382,13 +850,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1382
850
|
});
|
|
1383
851
|
return this;
|
|
1384
852
|
}
|
|
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
|
-
*/
|
|
1392
853
|
createDefaultSwitchClusterServer() {
|
|
1393
854
|
this.behaviors.require(MatterbridgeSwitchServer.with(Switch.Feature.MomentarySwitch, Switch.Feature.MomentarySwitchRelease, Switch.Feature.MomentarySwitchLongPress, Switch.Feature.MomentarySwitchMultiPress).enable({
|
|
1394
855
|
events: { initialPress: true, longPress: true, shortRelease: true, longRelease: true, multiPressOngoing: true, multiPressComplete: true },
|
|
@@ -1399,13 +860,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1399
860
|
});
|
|
1400
861
|
return this;
|
|
1401
862
|
}
|
|
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
|
-
*/
|
|
1409
863
|
createDefaultLatchingSwitchClusterServer() {
|
|
1410
864
|
this.behaviors.require(SwitchServer.with(Switch.Feature.LatchingSwitch).enable({
|
|
1411
865
|
events: { switchLatched: true },
|
|
@@ -1415,13 +869,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1415
869
|
});
|
|
1416
870
|
return this;
|
|
1417
871
|
}
|
|
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
|
-
*/
|
|
1425
872
|
async triggerSwitchEvent(event, log) {
|
|
1426
873
|
if (this.maybeNumber === undefined) {
|
|
1427
874
|
this.log.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${this.maybeId}:${this.maybeNumber}`);
|
|
@@ -1481,31 +928,14 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1481
928
|
}
|
|
1482
929
|
return true;
|
|
1483
930
|
}
|
|
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
|
-
*/
|
|
1490
931
|
createDefaultBooleanStateClusterServer(contact) {
|
|
1491
932
|
this.behaviors.require(BooleanStateServer.enable({
|
|
1492
933
|
events: { stateChange: true },
|
|
1493
934
|
}), {
|
|
1494
|
-
stateValue: contact ?? true,
|
|
935
|
+
stateValue: contact ?? true,
|
|
1495
936
|
});
|
|
1496
937
|
return this;
|
|
1497
938
|
}
|
|
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
|
-
*/
|
|
1509
939
|
createDefaultBooleanStateConfigurationClusterServer(sensorFault = false, currentSensitivityLevel = 0, supportedSensitivityLevels = 2, defaultSensitivityLevel = 0) {
|
|
1510
940
|
this.behaviors.require(MatterbridgeBooleanStateConfigurationServer.with(BooleanStateConfiguration.Feature.Visual, BooleanStateConfiguration.Feature.Audible, BooleanStateConfiguration.Feature.SensitivityLevel).enable({
|
|
1511
941
|
events: { alarmsStateChanged: true, sensorFault: true },
|
|
@@ -1520,21 +950,10 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1520
950
|
});
|
|
1521
951
|
return this;
|
|
1522
952
|
}
|
|
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
|
-
*/
|
|
1528
953
|
createDefaultPowerTopologyClusterServer() {
|
|
1529
954
|
this.behaviors.require(PowerTopologyServer.with(PowerTopology.Feature.TreeTopology));
|
|
1530
955
|
return this;
|
|
1531
956
|
}
|
|
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
|
-
*/
|
|
1538
957
|
createDefaultElectricalEnergyMeasurementClusterServer(energy = null) {
|
|
1539
958
|
this.behaviors.require(ElectricalEnergyMeasurementServer.with(ElectricalEnergyMeasurement.Feature.ImportedEnergy, ElectricalEnergyMeasurement.Feature.ExportedEnergy, ElectricalEnergyMeasurement.Feature.CumulativeEnergy), {
|
|
1540
959
|
accuracy: {
|
|
@@ -1550,15 +969,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1550
969
|
});
|
|
1551
970
|
return this;
|
|
1552
971
|
}
|
|
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
|
-
*/
|
|
1562
972
|
createDefaultElectricalPowerMeasurementClusterServer(voltage = null, current = null, power = null, frequency = null) {
|
|
1563
973
|
this.behaviors.require(ElectricalPowerMeasurementServer.with(ElectricalPowerMeasurement.Feature.AlternatingCurrent), {
|
|
1564
974
|
powerMode: ElectricalPowerMeasurement.PowerMode.Ac,
|
|
@@ -1600,91 +1010,36 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1600
1010
|
});
|
|
1601
1011
|
return this;
|
|
1602
1012
|
}
|
|
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
|
-
*/
|
|
1609
1013
|
createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
|
|
1610
1014
|
this.behaviors.require(TemperatureMeasurementServer, getDefaultTemperatureMeasurementClusterServer(measuredValue));
|
|
1611
1015
|
return this;
|
|
1612
1016
|
}
|
|
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
|
-
*/
|
|
1619
1017
|
createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
|
|
1620
1018
|
this.behaviors.require(RelativeHumidityMeasurementServer, getDefaultRelativeHumidityMeasurementClusterServer(measuredValue));
|
|
1621
1019
|
return this;
|
|
1622
1020
|
}
|
|
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
|
-
*/
|
|
1629
1021
|
createDefaultPressureMeasurementClusterServer(measuredValue = 1000) {
|
|
1630
1022
|
this.behaviors.require(PressureMeasurementServer, getDefaultPressureMeasurementClusterServer(measuredValue));
|
|
1631
1023
|
return this;
|
|
1632
1024
|
}
|
|
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
|
-
*/
|
|
1643
1025
|
createDefaultIlluminanceMeasurementClusterServer(measuredValue = 0) {
|
|
1644
1026
|
this.behaviors.require(IlluminanceMeasurementServer, getDefaultIlluminanceMeasurementClusterServer(measuredValue));
|
|
1645
1027
|
return this;
|
|
1646
1028
|
}
|
|
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
|
-
*/
|
|
1653
1029
|
createDefaultFlowMeasurementClusterServer(measuredValue = 0) {
|
|
1654
1030
|
this.behaviors.require(FlowMeasurementServer, getDefaultFlowMeasurementClusterServer(measuredValue));
|
|
1655
1031
|
return this;
|
|
1656
1032
|
}
|
|
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
|
-
*/
|
|
1663
1033
|
createDefaultOccupancySensingClusterServer(occupied = false) {
|
|
1664
1034
|
this.behaviors.require(OccupancySensingServer, getDefaultOccupancySensingClusterServer(occupied));
|
|
1665
1035
|
return this;
|
|
1666
1036
|
}
|
|
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
|
-
*/
|
|
1673
1037
|
createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
|
|
1674
1038
|
this.behaviors.require(AirQualityServer.with(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), {
|
|
1675
1039
|
airQuality,
|
|
1676
1040
|
});
|
|
1677
1041
|
return this;
|
|
1678
1042
|
}
|
|
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
|
-
*/
|
|
1688
1043
|
createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air, uncertainty) {
|
|
1689
1044
|
this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1690
1045
|
measuredValue,
|
|
@@ -1696,11 +1051,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1696
1051
|
});
|
|
1697
1052
|
return this;
|
|
1698
1053
|
}
|
|
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
|
-
*/
|
|
1704
1054
|
createLevelTvocMeasurementClusterServer(levelValue = ConcentrationMeasurement.LevelValue.Unknown, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1705
1055
|
this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), {
|
|
1706
1056
|
levelValue,
|
|
@@ -1708,13 +1058,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1708
1058
|
});
|
|
1709
1059
|
return this;
|
|
1710
1060
|
}
|
|
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
|
-
*/
|
|
1718
1061
|
createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1719
1062
|
this.behaviors.require(CarbonMonoxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1720
1063
|
measuredValue,
|
|
@@ -1726,13 +1069,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1726
1069
|
});
|
|
1727
1070
|
return this;
|
|
1728
1071
|
}
|
|
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
|
-
*/
|
|
1736
1072
|
createDefaultCarbonDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1737
1073
|
this.behaviors.require(CarbonDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1738
1074
|
measuredValue,
|
|
@@ -1744,13 +1080,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1744
1080
|
});
|
|
1745
1081
|
return this;
|
|
1746
1082
|
}
|
|
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
|
-
*/
|
|
1754
1083
|
createDefaultFormaldehydeConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1755
1084
|
this.behaviors.require(FormaldehydeConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1756
1085
|
measuredValue,
|
|
@@ -1762,13 +1091,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1762
1091
|
});
|
|
1763
1092
|
return this;
|
|
1764
1093
|
}
|
|
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
|
-
*/
|
|
1772
1094
|
createDefaultPm1ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1773
1095
|
this.behaviors.require(Pm1ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1774
1096
|
measuredValue,
|
|
@@ -1780,13 +1102,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1780
1102
|
});
|
|
1781
1103
|
return this;
|
|
1782
1104
|
}
|
|
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
|
-
*/
|
|
1790
1105
|
createDefaultPm25ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1791
1106
|
this.behaviors.require(Pm25ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1792
1107
|
measuredValue,
|
|
@@ -1798,13 +1113,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1798
1113
|
});
|
|
1799
1114
|
return this;
|
|
1800
1115
|
}
|
|
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
|
-
*/
|
|
1808
1116
|
createDefaultPm10ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1809
1117
|
this.behaviors.require(Pm10ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1810
1118
|
measuredValue,
|
|
@@ -1816,13 +1124,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1816
1124
|
});
|
|
1817
1125
|
return this;
|
|
1818
1126
|
}
|
|
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
|
-
*/
|
|
1826
1127
|
createDefaultOzoneConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1827
1128
|
this.behaviors.require(OzoneConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1828
1129
|
measuredValue,
|
|
@@ -1834,13 +1135,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1834
1135
|
});
|
|
1835
1136
|
return this;
|
|
1836
1137
|
}
|
|
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
|
-
*/
|
|
1844
1138
|
createDefaultRadonConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1845
1139
|
this.behaviors.require(RadonConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1846
1140
|
measuredValue,
|
|
@@ -1852,13 +1146,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1852
1146
|
});
|
|
1853
1147
|
return this;
|
|
1854
1148
|
}
|
|
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
|
-
*/
|
|
1862
1149
|
createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1863
1150
|
this.behaviors.require(NitrogenDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1864
1151
|
measuredValue,
|
|
@@ -1871,4 +1158,3 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1871
1158
|
return this;
|
|
1872
1159
|
}
|
|
1873
1160
|
}
|
|
1874
|
-
//# sourceMappingURL=matterbridgeEndpoint.js.map
|