matterbridge 2.2.7 → 2.2.8-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 +21 -0
- package/README-DEV.md +24 -12
- 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 +20 -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 +46 -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 +15 -709
- package/dist/matterbridgeEndpointHelpers.js +9 -118
- package/dist/matterbridgePlatform.js +7 -216
- package/dist/matterbridgeTypes.js +0 -24
- package/dist/pluginManager.js +43 -306
- 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.1fa50342.js → main.eb2f3e01.js} +3 -3
- package/frontend/build/static/js/{main.1fa50342.js.map → main.eb2f3e01.js.map} +1 -1
- package/npm-shrinkwrap.json +2 -9
- package/package.json +1 -3
- 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 -852
- 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.1fa50342.js.LICENSE.txt → main.eb2f3e01.js.LICENSE.txt} +0 -0
|
@@ -1,36 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the class MatterbridgeEndpoint that extends the Endpoint class from the Matter.js library.
|
|
3
|
-
*
|
|
4
|
-
* @file matterbridgeEndpoint.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @date 2024-10-01
|
|
7
|
-
* @version 2.0.0
|
|
8
|
-
*
|
|
9
|
-
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
* you may not use this file except in compliance with the License.
|
|
13
|
-
* You may obtain a copy of the License at
|
|
14
|
-
*
|
|
15
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
-
*
|
|
17
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
* See the License for the specific language governing permissions and
|
|
21
|
-
* limitations under the License. *
|
|
22
|
-
*/
|
|
23
|
-
// AnsiLogger module
|
|
24
1
|
import { AnsiLogger, BLUE, CYAN, YELLOW, db, debugStringify, er, hk, or, zb } from './logger/export.js';
|
|
25
|
-
// Matterbridge
|
|
26
2
|
import { bridgedNode } from './matterbridgeDeviceTypes.js';
|
|
27
3
|
import { isValidNumber, isValidObject } from './utils/export.js';
|
|
28
4
|
import { MatterbridgeBehavior, MatterbridgeBehaviorDevice, MatterbridgeIdentifyServer, MatterbridgeOnOffServer, MatterbridgeLevelControlServer, MatterbridgeColorControlServer, MatterbridgeWindowCoveringServer, MatterbridgeThermostatServer, MatterbridgeFanControlServer, MatterbridgeDoorLockServer, MatterbridgeModeSelectServer, MatterbridgeValveConfigurationAndControlServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeSwitchServer, } from './matterbridgeBehaviors.js';
|
|
29
5
|
import { addClusterServers, addFixedLabel, addOptionalClusterServers, addRequiredClusterServers, addUserLabel, capitalizeFirstLetter, createUniqueId, getBehavior, getBehaviourTypesFromClusterClientIds, getBehaviourTypesFromClusterServerIds, getDefaultFlowMeasurementClusterServer, getDefaultIlluminanceMeasurementClusterServer, getDefaultPressureMeasurementClusterServer, getDefaultRelativeHumidityMeasurementClusterServer, getDefaultTemperatureMeasurementClusterServer, getDefaultOccupancySensingClusterServer, lowercaseFirstLetter, updateAttribute, getClusterId, getAttributeId, setAttribute, getAttribute, checkNotLatinCharacters, generateUniqueId, subscribeAttribute, } from './matterbridgeEndpointHelpers.js';
|
|
30
|
-
// @matter
|
|
31
6
|
import { Endpoint, Lifecycle, MutableEndpoint, NamedHandler, SupportedBehaviors, VendorId } from '@matter/main';
|
|
32
7
|
import { ClusterType, getClusterNameById, MeasurementType } from '@matter/main/types';
|
|
33
|
-
// @matter clusters
|
|
34
8
|
import { Descriptor } from '@matter/main/clusters/descriptor';
|
|
35
9
|
import { PowerSource } from '@matter/main/clusters/power-source';
|
|
36
10
|
import { BridgedDeviceBasicInformation } from '@matter/main/clusters/bridged-device-basic-information';
|
|
@@ -52,7 +26,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.for(ClusterType(OnOff.Base)), {
|
|
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,18 +544,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
895
544
|
});
|
|
896
545
|
return this;
|
|
897
546
|
}
|
|
898
|
-
/**
|
|
899
|
-
* Creates a default color control cluster server with Xy, HueSaturation and ColorTemperature.
|
|
900
|
-
*
|
|
901
|
-
* @param currentX - The current X value.
|
|
902
|
-
* @param currentY - The current Y value.
|
|
903
|
-
* @param currentHue - The current hue value.
|
|
904
|
-
* @param currentSaturation - The current saturation value.
|
|
905
|
-
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
906
|
-
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
907
|
-
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
908
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
909
|
-
*/
|
|
910
547
|
createDefaultColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
911
548
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
|
|
912
549
|
colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
@@ -929,19 +566,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
929
566
|
});
|
|
930
567
|
return this;
|
|
931
568
|
}
|
|
932
|
-
/**
|
|
933
|
-
* Creates a Xy color control cluster server with Xy and ColorTemperature.
|
|
934
|
-
*
|
|
935
|
-
* @param currentX - The current X value.
|
|
936
|
-
* @param currentY - The current Y value.
|
|
937
|
-
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
938
|
-
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
939
|
-
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
940
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
941
|
-
*
|
|
942
|
-
* @remarks
|
|
943
|
-
* From zigbee to matter = Math.max(Math.min(Math.round(x * 65536), 65279), 0)
|
|
944
|
-
*/
|
|
945
569
|
createXyColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
946
570
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.Xy, ColorControl.Feature.ColorTemperature), {
|
|
947
571
|
colorMode: ColorControl.ColorMode.CurrentXAndCurrentY,
|
|
@@ -962,16 +586,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
962
586
|
});
|
|
963
587
|
return this;
|
|
964
588
|
}
|
|
965
|
-
/**
|
|
966
|
-
* Creates a default hue and saturation control cluster server with HueSaturation and ColorTemperature.
|
|
967
|
-
*
|
|
968
|
-
* @param currentHue - The current hue value.
|
|
969
|
-
* @param currentSaturation - The current saturation value.
|
|
970
|
-
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
971
|
-
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
972
|
-
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
973
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
974
|
-
*/
|
|
975
589
|
createHsColorControlClusterServer(currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
976
590
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
|
|
977
591
|
colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
@@ -992,14 +606,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
992
606
|
});
|
|
993
607
|
return this;
|
|
994
608
|
}
|
|
995
|
-
/**
|
|
996
|
-
* Creates a color temperature color control cluster server.
|
|
997
|
-
*
|
|
998
|
-
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
999
|
-
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
1000
|
-
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
1001
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1002
|
-
*/
|
|
1003
609
|
createCtColorControlClusterServer(colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
1004
610
|
this.behaviors.require(MatterbridgeColorControlServer.with(ColorControl.Feature.ColorTemperature), {
|
|
1005
611
|
colorMode: ColorControl.ColorMode.ColorTemperatureMireds,
|
|
@@ -1018,23 +624,12 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1018
624
|
});
|
|
1019
625
|
return this;
|
|
1020
626
|
}
|
|
1021
|
-
/**
|
|
1022
|
-
* Configures the color control mode for the device.
|
|
1023
|
-
*
|
|
1024
|
-
* @param {ColorControl.ColorMode} colorMode - The color mode to set.
|
|
1025
|
-
*/
|
|
1026
627
|
async configureColorControlMode(colorMode) {
|
|
1027
628
|
if (isValidNumber(colorMode, ColorControl.ColorMode.CurrentHueAndCurrentSaturation, ColorControl.ColorMode.ColorTemperatureMireds)) {
|
|
1028
629
|
await this.setAttribute(ColorControl.Cluster.id, 'colorMode', colorMode, this.log);
|
|
1029
630
|
await this.setAttribute(ColorControl.Cluster.id, 'enhancedColorMode', colorMode, this.log);
|
|
1030
631
|
}
|
|
1031
632
|
}
|
|
1032
|
-
/**
|
|
1033
|
-
* Creates a default window covering cluster server (Lift and PositionAwareLift).
|
|
1034
|
-
*
|
|
1035
|
-
* @param positionPercent100ths - The position percentage in 100ths (0-10000). Defaults to 0. Matter uses 10000 = fully closed 0 = fully opened.
|
|
1036
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1037
|
-
*/
|
|
1038
633
|
createDefaultWindowCoveringClusterServer(positionPercent100ths) {
|
|
1039
634
|
this.behaviors.require(MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift), {
|
|
1040
635
|
type: WindowCovering.WindowCoveringType.Rollershade,
|
|
@@ -1050,15 +645,11 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1050
645
|
operationalStatus: { global: WindowCovering.MovementStatus.Stopped, lift: WindowCovering.MovementStatus.Stopped, tilt: WindowCovering.MovementStatus.Stopped },
|
|
1051
646
|
endProductType: WindowCovering.EndProductType.RollerShade,
|
|
1052
647
|
mode: { motorDirectionReversed: false, calibrationMode: false, maintenanceMode: false, ledFeedback: false },
|
|
1053
|
-
targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
1054
|
-
currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
648
|
+
targetPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
649
|
+
currentPositionLiftPercent100ths: positionPercent100ths ?? 0,
|
|
1055
650
|
});
|
|
1056
651
|
return this;
|
|
1057
652
|
}
|
|
1058
|
-
/**
|
|
1059
|
-
* Sets the window covering target position as the current position and stops the movement.
|
|
1060
|
-
*
|
|
1061
|
-
*/
|
|
1062
653
|
async setWindowCoveringTargetAsCurrentAndStopped() {
|
|
1063
654
|
const position = this.getAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', this.log);
|
|
1064
655
|
if (isValidNumber(position, 0, 10000)) {
|
|
@@ -1071,12 +662,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1071
662
|
}
|
|
1072
663
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths and targetPositionLiftPercent100ths to ${position} and operationalStatus to Stopped.`);
|
|
1073
664
|
}
|
|
1074
|
-
/**
|
|
1075
|
-
* Sets the current and target status of a window covering.
|
|
1076
|
-
* @param {number} current - The current position of the window covering.
|
|
1077
|
-
* @param {number} target - The target position of the window covering.
|
|
1078
|
-
* @param {WindowCovering.MovementStatus} status - The movement status of the window covering.
|
|
1079
|
-
*/
|
|
1080
665
|
async setWindowCoveringCurrentTargetStatus(current, target, status) {
|
|
1081
666
|
await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', current, this.log);
|
|
1082
667
|
await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', target, this.log);
|
|
@@ -1087,10 +672,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1087
672
|
}, this.log);
|
|
1088
673
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${current}, targetPositionLiftPercent100ths: ${target} and operationalStatus: ${status}.`);
|
|
1089
674
|
}
|
|
1090
|
-
/**
|
|
1091
|
-
* Sets the status of the window covering.
|
|
1092
|
-
* @param {WindowCovering.MovementStatus} status - The movement status to set.
|
|
1093
|
-
*/
|
|
1094
675
|
async setWindowCoveringStatus(status) {
|
|
1095
676
|
await this.setAttribute(WindowCovering.Cluster.id, 'operationalStatus', {
|
|
1096
677
|
global: status,
|
|
@@ -1099,11 +680,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1099
680
|
}, this.log);
|
|
1100
681
|
this.log.debug(`Set WindowCovering operationalStatus: ${status}`);
|
|
1101
682
|
}
|
|
1102
|
-
/**
|
|
1103
|
-
* Retrieves the status of the window covering.
|
|
1104
|
-
*
|
|
1105
|
-
* @returns The global operational status of the window covering or undefined.
|
|
1106
|
-
*/
|
|
1107
683
|
getWindowCoveringStatus() {
|
|
1108
684
|
const status = this.getAttribute(WindowCovering.Cluster.id, 'operationalStatus', this.log);
|
|
1109
685
|
if (isValidObject(status, 3) && 'global' in status && typeof status.global === 'number') {
|
|
@@ -1111,66 +687,36 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1111
687
|
return status.global;
|
|
1112
688
|
}
|
|
1113
689
|
}
|
|
1114
|
-
/**
|
|
1115
|
-
* Sets the target and current position of the window covering.
|
|
1116
|
-
*
|
|
1117
|
-
* @param position - The position to set, specified as a number.
|
|
1118
|
-
*/
|
|
1119
690
|
async setWindowCoveringTargetAndCurrentPosition(position) {
|
|
1120
691
|
await this.setAttribute(WindowCovering.Cluster.id, 'currentPositionLiftPercent100ths', position, this.log);
|
|
1121
692
|
await this.setAttribute(WindowCovering.Cluster.id, 'targetPositionLiftPercent100ths', position, this.log);
|
|
1122
693
|
this.log.debug(`Set WindowCovering currentPositionLiftPercent100ths: ${position} and targetPositionLiftPercent100ths: ${position}.`);
|
|
1123
694
|
}
|
|
1124
|
-
/**
|
|
1125
|
-
* Creates a default thermostat cluster server with Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode.
|
|
1126
|
-
*
|
|
1127
|
-
* @param {number} [localTemperature=23] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1128
|
-
* @param {number} [occupiedHeatingSetpoint=21] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
|
|
1129
|
-
* @param {number} [occupiedCoolingSetpoint=25] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
|
|
1130
|
-
* @param {number} [minSetpointDeadBand=1] - The minimum setpoint dead band value. Defaults to 1°.
|
|
1131
|
-
* @param {number} [minHeatSetpointLimit=0] - The minimum heat setpoint limit value. Defaults to 0°.
|
|
1132
|
-
* @param {number} [maxHeatSetpointLimit=50] - The maximum heat setpoint limit value. Defaults to 50°.
|
|
1133
|
-
* @param {number} [minCoolSetpointLimit=0] - The minimum cool setpoint limit value. Defaults to 0°.
|
|
1134
|
-
* @param {number} [maxCoolSetpointLimit=50] - The maximum cool setpoint limit value. Defaults to 50°.
|
|
1135
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1136
|
-
*/
|
|
1137
695
|
createDefaultThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 1, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1138
696
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode), {
|
|
1139
697
|
localTemperature: localTemperature * 100,
|
|
1140
698
|
systemMode: Thermostat.SystemMode.Auto,
|
|
1141
699
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
|
|
1142
|
-
// Thermostat.Feature.Heating
|
|
1143
700
|
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1144
701
|
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1145
702
|
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1146
703
|
absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1147
704
|
absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1148
|
-
// Thermostat.Feature.Cooling
|
|
1149
705
|
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1150
706
|
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1151
707
|
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1152
708
|
absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1153
709
|
absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1154
|
-
// Thermostat.Feature.AutoMode
|
|
1155
710
|
minSetpointDeadBand: minSetpointDeadBand * 100,
|
|
1156
711
|
thermostatRunningMode: Thermostat.ThermostatRunningMode.Off,
|
|
1157
712
|
});
|
|
1158
713
|
return this;
|
|
1159
714
|
}
|
|
1160
|
-
/**
|
|
1161
|
-
* Creates a default heating thermostat cluster server with Thermostat.Feature.Heating.
|
|
1162
|
-
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1163
|
-
* @param {number} [occupiedHeatingSetpoint] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
|
|
1164
|
-
* @param {number} [minHeatSetpointLimit] - The minimum heat setpoint limit value. Defaults to 0°.
|
|
1165
|
-
* @param {number} [maxHeatSetpointLimit] - The maximum heat setpoint limit value. Defaults to 50°.
|
|
1166
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1167
|
-
*/
|
|
1168
715
|
createDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
|
|
1169
716
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Heating), {
|
|
1170
717
|
localTemperature: localTemperature * 100,
|
|
1171
718
|
systemMode: Thermostat.SystemMode.Heat,
|
|
1172
719
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.HeatingOnly,
|
|
1173
|
-
// Thermostat.Feature.Heating
|
|
1174
720
|
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1175
721
|
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1176
722
|
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
@@ -1179,20 +725,11 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1179
725
|
});
|
|
1180
726
|
return this;
|
|
1181
727
|
}
|
|
1182
|
-
/**
|
|
1183
|
-
* Creates a default cooling thermostat cluster server with Thermostat.Feature.Cooling.
|
|
1184
|
-
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1185
|
-
* @param {number} [occupiedCoolingSetpoint] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
|
|
1186
|
-
* @param {number} [minCoolSetpointLimit] - The minimum cool setpoint limit value. Defaults to 0°.
|
|
1187
|
-
* @param {number} [maxCoolSetpointLimit] - The maximum cool setpoint limit value. Defaults to 50°.
|
|
1188
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1189
|
-
*/
|
|
1190
728
|
createDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1191
729
|
this.behaviors.require(MatterbridgeThermostatServer.with(Thermostat.Feature.Cooling), {
|
|
1192
730
|
localTemperature: localTemperature * 100,
|
|
1193
731
|
systemMode: Thermostat.SystemMode.Cool,
|
|
1194
732
|
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingOnly,
|
|
1195
|
-
// Thermostat.Feature.Cooling
|
|
1196
733
|
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1197
734
|
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1198
735
|
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
@@ -1201,12 +738,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1201
738
|
});
|
|
1202
739
|
return this;
|
|
1203
740
|
}
|
|
1204
|
-
/**
|
|
1205
|
-
* Creates a default fan control cluster server.
|
|
1206
|
-
*
|
|
1207
|
-
* @param fanMode The fan mode to set. Defaults to `FanControl.FanMode.Off`.
|
|
1208
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1209
|
-
*/
|
|
1210
741
|
createDefaultFanControlClusterServer(fanMode = FanControl.FanMode.Off) {
|
|
1211
742
|
this.behaviors.require(MatterbridgeFanControlServer.with(FanControl.Feature.MultiSpeed, FanControl.Feature.Auto, FanControl.Feature.Step), {
|
|
1212
743
|
fanMode,
|
|
@@ -1219,16 +750,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1219
750
|
});
|
|
1220
751
|
return this;
|
|
1221
752
|
}
|
|
1222
|
-
/**
|
|
1223
|
-
* Creates a default door lock cluster server.
|
|
1224
|
-
*
|
|
1225
|
-
* @param {DoorLock.LockState} [lockState=DoorLock.LockState.Locked] - The initial state of the lock (default: Locked).
|
|
1226
|
-
* @param {DoorLock.LockType} [lockType=DoorLock.LockType.DeadBolt] - The type of the lock (default: DeadBolt).
|
|
1227
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1228
|
-
*
|
|
1229
|
-
* @remarks
|
|
1230
|
-
* 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.
|
|
1231
|
-
*/
|
|
1232
753
|
createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
|
|
1233
754
|
this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
|
|
1234
755
|
operatingMode: DoorLock.OperatingMode.Normal,
|
|
@@ -1239,18 +760,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1239
760
|
});
|
|
1240
761
|
return this;
|
|
1241
762
|
}
|
|
1242
|
-
/**
|
|
1243
|
-
* Creates a default Mode Select cluster server.
|
|
1244
|
-
*
|
|
1245
|
-
* @param {string} description - The description of the mode select cluster.
|
|
1246
|
-
* @param {ModeSelect.ModeOption[]} supportedModes - The list of supported modes.
|
|
1247
|
-
* @param {number} [currentMode=0] - The current mode (default: 0).
|
|
1248
|
-
* @param {number} [startUpMode=0] - The startup mode (default: 0).
|
|
1249
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1250
|
-
*
|
|
1251
|
-
* @remarks
|
|
1252
|
-
* endpoint.createDefaultModeSelectClusterServer('Night mode', [{ label: 'Led ON', mode: 0, semanticTags: [] }, { label: 'Led OFF', mode: 1, semanticTags: [] }], 0, 0);
|
|
1253
|
-
*/
|
|
1254
763
|
createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
|
|
1255
764
|
this.behaviors.require(MatterbridgeModeSelectServer, {
|
|
1256
765
|
description: description,
|
|
@@ -1261,13 +770,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1261
770
|
});
|
|
1262
771
|
return this;
|
|
1263
772
|
}
|
|
1264
|
-
/**
|
|
1265
|
-
* Creates the default Valve Configuration And Control cluster server.
|
|
1266
|
-
*
|
|
1267
|
-
* @param {ValveConfigurationAndControl.ValveState} [valveState=ValveConfigurationAndControl.ValveState.Closed] - The valve state to set. Defaults to `ValveConfigurationAndControl.ValveState.Closed`.
|
|
1268
|
-
* @param {number} [valveLevel=0] - The valve level to set. Defaults to 0.
|
|
1269
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1270
|
-
*/
|
|
1271
773
|
createDefaultValveConfigurationAndControlClusterServer(valveState = ValveConfigurationAndControl.ValveState.Closed, valveLevel = 0) {
|
|
1272
774
|
this.behaviors.require(MatterbridgeValveConfigurationAndControlServer.with(ValveConfigurationAndControl.Feature.Level), {
|
|
1273
775
|
currentState: valveState,
|
|
@@ -1280,12 +782,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1280
782
|
});
|
|
1281
783
|
return this;
|
|
1282
784
|
}
|
|
1283
|
-
/**
|
|
1284
|
-
* Creates the default PumpConfigurationAndControl cluster server.
|
|
1285
|
-
*
|
|
1286
|
-
* @param {PumpConfigurationAndControl.OperationMode} [pumpMode=PumpConfigurationAndControl.OperationMode.Normal] - The pump mode to set. Defaults to `PumpConfigurationAndControl.OperationMode.Normal`.
|
|
1287
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1288
|
-
*/
|
|
1289
785
|
createDefaultPumpConfigurationAndControlClusterServer(pumpMode = PumpConfigurationAndControl.OperationMode.Normal) {
|
|
1290
786
|
this.behaviors.require(PumpConfigurationAndControlServer.with(PumpConfigurationAndControl.Feature.ConstantSpeed), {
|
|
1291
787
|
minConstSpeed: null,
|
|
@@ -1300,13 +796,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1300
796
|
});
|
|
1301
797
|
return this;
|
|
1302
798
|
}
|
|
1303
|
-
/**
|
|
1304
|
-
* Creates the default SmokeCOAlarm Cluster Server.
|
|
1305
|
-
*
|
|
1306
|
-
* @param {SmokeCoAlarm.AlarmState} smokeState - The state of the smoke alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
|
|
1307
|
-
* @param {SmokeCoAlarm.AlarmState} coState - The state of the CO alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
|
|
1308
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1309
|
-
*/
|
|
1310
799
|
createDefaultSmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal, coState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1311
800
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm).enable({
|
|
1312
801
|
events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1319,17 +808,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1319
808
|
testInProgress: false,
|
|
1320
809
|
hardwareFaultAlert: false,
|
|
1321
810
|
endOfServiceAlert: SmokeCoAlarm.EndOfService.Normal,
|
|
1322
|
-
// interconnectSmokeAlarm: SmokeCoAlarm.AlarmState.Normal,
|
|
1323
|
-
// interconnectCoAlarm: SmokeCoAlarm.AlarmState.Normal,
|
|
1324
811
|
});
|
|
1325
812
|
return this;
|
|
1326
813
|
}
|
|
1327
|
-
/**
|
|
1328
|
-
* Creates a smoke only SmokeCOAlarm Cluster Server.
|
|
1329
|
-
*
|
|
1330
|
-
* @param {SmokeCoAlarm.AlarmState} smokeState - The state of the smoke alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
|
|
1331
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1332
|
-
*/
|
|
1333
814
|
createSmokeOnlySmokeCOAlarmClusterServer(smokeState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1334
815
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.SmokeAlarm).enable({
|
|
1335
816
|
events: { smokeAlarm: true, interconnectSmokeAlarm: false, coAlarm: false, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1344,12 +825,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1344
825
|
});
|
|
1345
826
|
return this;
|
|
1346
827
|
}
|
|
1347
|
-
/**
|
|
1348
|
-
* Creates a co only SmokeCOAlarm Cluster Server.
|
|
1349
|
-
*
|
|
1350
|
-
* @param {SmokeCoAlarm.AlarmState} coState - The state of the CO alarm. Defaults to SmokeCoAlarm.AlarmState.Normal.
|
|
1351
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1352
|
-
*/
|
|
1353
828
|
createCoOnlySmokeCOAlarmClusterServer(coState = SmokeCoAlarm.AlarmState.Normal) {
|
|
1354
829
|
this.behaviors.require(MatterbridgeSmokeCoAlarmServer.with(SmokeCoAlarm.Feature.CoAlarm).enable({
|
|
1355
830
|
events: { smokeAlarm: false, interconnectSmokeAlarm: false, coAlarm: true, interconnectCoAlarm: false, lowBattery: true, hardwareFault: true, endOfService: true, selfTestComplete: true, alarmMuted: true, muteEnded: true, allClear: true },
|
|
@@ -1364,13 +839,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1364
839
|
});
|
|
1365
840
|
return this;
|
|
1366
841
|
}
|
|
1367
|
-
/**
|
|
1368
|
-
* Creates a default momentary switch cluster server.
|
|
1369
|
-
*
|
|
1370
|
-
* @remarks
|
|
1371
|
-
* This method adds a cluster server with default momentary switch features and configuration suitable for (AppleHome) Single Double Long automations.
|
|
1372
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1373
|
-
*/
|
|
1374
842
|
createDefaultSwitchClusterServer() {
|
|
1375
843
|
this.behaviors.require(MatterbridgeSwitchServer.with(Switch.Feature.MomentarySwitch, Switch.Feature.MomentarySwitchRelease, Switch.Feature.MomentarySwitchLongPress, Switch.Feature.MomentarySwitchMultiPress).enable({
|
|
1376
844
|
events: { initialPress: true, longPress: true, shortRelease: true, longRelease: true, multiPressOngoing: true, multiPressComplete: true },
|
|
@@ -1381,13 +849,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1381
849
|
});
|
|
1382
850
|
return this;
|
|
1383
851
|
}
|
|
1384
|
-
/**
|
|
1385
|
-
* Creates a default latching switch cluster server.
|
|
1386
|
-
*
|
|
1387
|
-
* @remarks
|
|
1388
|
-
* This method adds a cluster server with default latching switch features and configuration suitable for a latching switch with 2 positions.
|
|
1389
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1390
|
-
*/
|
|
1391
852
|
createDefaultLatchingSwitchClusterServer() {
|
|
1392
853
|
this.behaviors.require(SwitchServer.with(Switch.Feature.LatchingSwitch).enable({
|
|
1393
854
|
events: { switchLatched: true },
|
|
@@ -1397,13 +858,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1397
858
|
});
|
|
1398
859
|
return this;
|
|
1399
860
|
}
|
|
1400
|
-
/**
|
|
1401
|
-
* Triggers a switch event on the specified endpoint.
|
|
1402
|
-
*
|
|
1403
|
-
* @param {string} event - The type of event to trigger. Possible values are 'Single', 'Double', 'Long' for momentarySwitch and 'Press', 'Release' for latchingSwitch.
|
|
1404
|
-
* @param {Endpoint} endpoint - The endpoint on which to trigger the event (default the device endpoint).
|
|
1405
|
-
* @returns {boolean} - A boolean indicating whether the event was successfully triggered.
|
|
1406
|
-
*/
|
|
1407
861
|
async triggerSwitchEvent(event, log) {
|
|
1408
862
|
if (this.maybeNumber === undefined) {
|
|
1409
863
|
this.log.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${this.maybeId}:${this.maybeNumber}`);
|
|
@@ -1463,31 +917,14 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1463
917
|
}
|
|
1464
918
|
return true;
|
|
1465
919
|
}
|
|
1466
|
-
/**
|
|
1467
|
-
* Creates a default boolean state cluster server.
|
|
1468
|
-
*
|
|
1469
|
-
* @param {boolean} contact - The state of the cluster. Defaults to true (true = contact).
|
|
1470
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1471
|
-
*/
|
|
1472
920
|
createDefaultBooleanStateClusterServer(contact) {
|
|
1473
921
|
this.behaviors.require(BooleanStateServer.enable({
|
|
1474
922
|
events: { stateChange: true },
|
|
1475
923
|
}), {
|
|
1476
|
-
stateValue: contact ?? true,
|
|
924
|
+
stateValue: contact ?? true,
|
|
1477
925
|
});
|
|
1478
926
|
return this;
|
|
1479
927
|
}
|
|
1480
|
-
/**
|
|
1481
|
-
* Creates a default boolean state configuration cluster server to be used with the waterFreezeDetector, waterLeakDetector, and rainSensor device types.
|
|
1482
|
-
*
|
|
1483
|
-
* @remarks Supports the enableDisableAlarm command.
|
|
1484
|
-
*
|
|
1485
|
-
* @param {boolean} [sensorFault=false] - Optional boolean value indicating the sensor fault state. Defaults to `false` if not provided.
|
|
1486
|
-
* @param {number} [currentSensitivityLevel=0] - The current sensitivity level. Defaults to `0` if not provided.
|
|
1487
|
-
* @param {number} [supportedSensitivityLevels=2] - The number of supported sensitivity levels. Defaults to `2` if not provided (min 2, max 10).
|
|
1488
|
-
* @param {number} [defaultSensitivityLevel=0] - The default sensitivity level. Defaults to `0` if not provided.
|
|
1489
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1490
|
-
*/
|
|
1491
928
|
createDefaultBooleanStateConfigurationClusterServer(sensorFault = false, currentSensitivityLevel = 0, supportedSensitivityLevels = 2, defaultSensitivityLevel = 0) {
|
|
1492
929
|
this.behaviors.require(MatterbridgeBooleanStateConfigurationServer.with(BooleanStateConfiguration.Feature.Visual, BooleanStateConfiguration.Feature.Audible, BooleanStateConfiguration.Feature.SensitivityLevel).enable({
|
|
1493
930
|
events: { alarmsStateChanged: true, sensorFault: true },
|
|
@@ -1502,21 +939,10 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1502
939
|
});
|
|
1503
940
|
return this;
|
|
1504
941
|
}
|
|
1505
|
-
/**
|
|
1506
|
-
* Creates a default Power Topology Cluster Server with feature TreeTopology. Only needed for an electricalSensor device type.
|
|
1507
|
-
*
|
|
1508
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1509
|
-
*/
|
|
1510
942
|
createDefaultPowerTopologyClusterServer() {
|
|
1511
943
|
this.behaviors.require(PowerTopologyServer.with(PowerTopology.Feature.TreeTopology));
|
|
1512
944
|
return this;
|
|
1513
945
|
}
|
|
1514
|
-
/**
|
|
1515
|
-
* Creates a default Electrical Energy Measurement Cluster Server.
|
|
1516
|
-
*
|
|
1517
|
-
* @param {number} energy - The total consumption value in mW/h.
|
|
1518
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1519
|
-
*/
|
|
1520
946
|
createDefaultElectricalEnergyMeasurementClusterServer(energy = null) {
|
|
1521
947
|
this.behaviors.require(ElectricalEnergyMeasurementServer.with(ElectricalEnergyMeasurement.Feature.ImportedEnergy, ElectricalEnergyMeasurement.Feature.ExportedEnergy, ElectricalEnergyMeasurement.Feature.CumulativeEnergy), {
|
|
1522
948
|
accuracy: {
|
|
@@ -1532,15 +958,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1532
958
|
});
|
|
1533
959
|
return this;
|
|
1534
960
|
}
|
|
1535
|
-
/**
|
|
1536
|
-
* Creates a default Electrical Power Measurement Cluster Server.
|
|
1537
|
-
*
|
|
1538
|
-
* @param {number} voltage - The voltage value in millivolts.
|
|
1539
|
-
* @param {number} current - The current value in milliamperes.
|
|
1540
|
-
* @param {number} power - The power value in milliwatts.
|
|
1541
|
-
* @param {number} frequency - The frequency value in millihertz.
|
|
1542
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1543
|
-
*/
|
|
1544
961
|
createDefaultElectricalPowerMeasurementClusterServer(voltage = null, current = null, power = null, frequency = null) {
|
|
1545
962
|
this.behaviors.require(ElectricalPowerMeasurementServer.with(ElectricalPowerMeasurement.Feature.AlternatingCurrent), {
|
|
1546
963
|
powerMode: ElectricalPowerMeasurement.PowerMode.Ac,
|
|
@@ -1582,108 +999,54 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1582
999
|
});
|
|
1583
1000
|
return this;
|
|
1584
1001
|
}
|
|
1585
|
-
/**
|
|
1586
|
-
* Creates a default TemperatureMeasurement cluster server.
|
|
1587
|
-
*
|
|
1588
|
-
* @param {number} measuredValue - The measured value of the temperature x 100.
|
|
1589
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1590
|
-
*/
|
|
1591
1002
|
createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
|
|
1592
1003
|
this.behaviors.require(TemperatureMeasurementServer, getDefaultTemperatureMeasurementClusterServer(measuredValue));
|
|
1593
1004
|
return this;
|
|
1594
1005
|
}
|
|
1595
|
-
/**
|
|
1596
|
-
* Creates a default RelativeHumidityMeasurement cluster server.
|
|
1597
|
-
*
|
|
1598
|
-
* @param {number} measuredValue - The measured value of the relative humidity x 100.
|
|
1599
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1600
|
-
*/
|
|
1601
1006
|
createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
|
|
1602
1007
|
this.behaviors.require(RelativeHumidityMeasurementServer, getDefaultRelativeHumidityMeasurementClusterServer(measuredValue));
|
|
1603
1008
|
return this;
|
|
1604
1009
|
}
|
|
1605
|
-
/**
|
|
1606
|
-
* Creates a default PressureMeasurement cluster server.
|
|
1607
|
-
*
|
|
1608
|
-
* @param {number} measuredValue - The measured value for the pressure.
|
|
1609
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1610
|
-
*/
|
|
1611
1010
|
createDefaultPressureMeasurementClusterServer(measuredValue = 1000) {
|
|
1612
1011
|
this.behaviors.require(PressureMeasurementServer, getDefaultPressureMeasurementClusterServer(measuredValue));
|
|
1613
1012
|
return this;
|
|
1614
1013
|
}
|
|
1615
|
-
/**
|
|
1616
|
-
* Creates a default IlluminanceMeasurement cluster server.
|
|
1617
|
-
*
|
|
1618
|
-
* @param {number} measuredValue - The measured value of illuminance.
|
|
1619
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1620
|
-
*
|
|
1621
|
-
* @remarks
|
|
1622
|
-
* Lux to matter = Math.round(Math.max(Math.min(10000 * Math.log10(lux), 0xfffe), 0))
|
|
1623
|
-
* Matter to Lux = Math.round(Math.max(Math.pow(10, value / 10000), 0))
|
|
1624
|
-
*/
|
|
1625
1014
|
createDefaultIlluminanceMeasurementClusterServer(measuredValue = 0) {
|
|
1626
1015
|
this.behaviors.require(IlluminanceMeasurementServer, getDefaultIlluminanceMeasurementClusterServer(measuredValue));
|
|
1627
1016
|
return this;
|
|
1628
1017
|
}
|
|
1629
|
-
/**
|
|
1630
|
-
* Creates a default FlowMeasurement cluster server.
|
|
1631
|
-
*
|
|
1632
|
-
* @param {number} measuredValue - The measured value of the flow in 10 x m/h.
|
|
1633
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1634
|
-
*/
|
|
1635
1018
|
createDefaultFlowMeasurementClusterServer(measuredValue = 0) {
|
|
1636
1019
|
this.behaviors.require(FlowMeasurementServer, getDefaultFlowMeasurementClusterServer(measuredValue));
|
|
1637
1020
|
return this;
|
|
1638
1021
|
}
|
|
1639
|
-
/**
|
|
1640
|
-
* Creates a default OccupancySensing cluster server.
|
|
1641
|
-
*
|
|
1642
|
-
* @param {boolean} occupied - A boolean indicating whether the occupancy is occupied or not. Default is false.
|
|
1643
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1644
|
-
*/
|
|
1645
1022
|
createDefaultOccupancySensingClusterServer(occupied = false) {
|
|
1646
1023
|
this.behaviors.require(OccupancySensingServer, getDefaultOccupancySensingClusterServer(occupied));
|
|
1647
1024
|
return this;
|
|
1648
1025
|
}
|
|
1649
|
-
/**
|
|
1650
|
-
* Creates a default AirQuality cluster server.
|
|
1651
|
-
*
|
|
1652
|
-
* @param {AirQuality.AirQualityEnum} airQuality The air quality level. Defaults to `AirQuality.AirQualityType.Unknown`.
|
|
1653
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1654
|
-
*/
|
|
1655
1026
|
createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
|
|
1656
1027
|
this.behaviors.require(AirQualityServer.with(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), {
|
|
1657
1028
|
airQuality,
|
|
1658
1029
|
});
|
|
1659
1030
|
return this;
|
|
1660
1031
|
}
|
|
1661
|
-
|
|
1662
|
-
* Creates a default TotalVolatileOrganicCompoundsConcentrationMeasurement cluster server.
|
|
1663
|
-
*
|
|
1664
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1665
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1666
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1667
|
-
* @returns {this} The current MatterbridgeEndpoint instance for chaining.
|
|
1668
|
-
*/
|
|
1669
|
-
createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1032
|
+
createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air, uncertainty) {
|
|
1670
1033
|
this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1671
1034
|
measuredValue,
|
|
1672
1035
|
minMeasuredValue: null,
|
|
1673
1036
|
maxMeasuredValue: null,
|
|
1674
|
-
uncertainty
|
|
1037
|
+
uncertainty,
|
|
1675
1038
|
measurementUnit,
|
|
1676
1039
|
measurementMedium,
|
|
1677
1040
|
});
|
|
1678
1041
|
return this;
|
|
1679
1042
|
}
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1043
|
+
createLevelTvocMeasurementClusterServer(levelValue = ConcentrationMeasurement.LevelValue.Unknown, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1044
|
+
this.behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), {
|
|
1045
|
+
levelValue,
|
|
1046
|
+
measurementMedium,
|
|
1047
|
+
});
|
|
1048
|
+
return this;
|
|
1049
|
+
}
|
|
1687
1050
|
createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1688
1051
|
this.behaviors.require(CarbonMonoxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1689
1052
|
measuredValue,
|
|
@@ -1695,13 +1058,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1695
1058
|
});
|
|
1696
1059
|
return this;
|
|
1697
1060
|
}
|
|
1698
|
-
/**
|
|
1699
|
-
* Create a default CarbonDioxideConcentrationMeasurement cluster server.
|
|
1700
|
-
*
|
|
1701
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1702
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1703
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1704
|
-
*/
|
|
1705
1061
|
createDefaultCarbonDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1706
1062
|
this.behaviors.require(CarbonDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1707
1063
|
measuredValue,
|
|
@@ -1713,13 +1069,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1713
1069
|
});
|
|
1714
1070
|
return this;
|
|
1715
1071
|
}
|
|
1716
|
-
/**
|
|
1717
|
-
* Create a default FormaldehydeConcentrationMeasurement cluster server.
|
|
1718
|
-
*
|
|
1719
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1720
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1721
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1722
|
-
*/
|
|
1723
1072
|
createDefaultFormaldehydeConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1724
1073
|
this.behaviors.require(FormaldehydeConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1725
1074
|
measuredValue,
|
|
@@ -1731,13 +1080,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1731
1080
|
});
|
|
1732
1081
|
return this;
|
|
1733
1082
|
}
|
|
1734
|
-
/**
|
|
1735
|
-
* Create a default Pm1ConcentrationMeasurement cluster server.
|
|
1736
|
-
*
|
|
1737
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1738
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1739
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1740
|
-
*/
|
|
1741
1083
|
createDefaultPm1ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1742
1084
|
this.behaviors.require(Pm1ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1743
1085
|
measuredValue,
|
|
@@ -1749,13 +1091,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1749
1091
|
});
|
|
1750
1092
|
return this;
|
|
1751
1093
|
}
|
|
1752
|
-
/**
|
|
1753
|
-
* Create a default Pm25ConcentrationMeasurement cluster server.
|
|
1754
|
-
*
|
|
1755
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1756
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1757
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1758
|
-
*/
|
|
1759
1094
|
createDefaultPm25ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1760
1095
|
this.behaviors.require(Pm25ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1761
1096
|
measuredValue,
|
|
@@ -1767,13 +1102,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1767
1102
|
});
|
|
1768
1103
|
return this;
|
|
1769
1104
|
}
|
|
1770
|
-
/**
|
|
1771
|
-
* Create a default Pm10ConcentrationMeasurement cluster server.
|
|
1772
|
-
*
|
|
1773
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1774
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1775
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1776
|
-
*/
|
|
1777
1105
|
createDefaultPm10ConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1778
1106
|
this.behaviors.require(Pm10ConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1779
1107
|
measuredValue,
|
|
@@ -1785,13 +1113,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1785
1113
|
});
|
|
1786
1114
|
return this;
|
|
1787
1115
|
}
|
|
1788
|
-
/**
|
|
1789
|
-
* Create a default OzoneConcentrationMeasurement cluster server.
|
|
1790
|
-
*
|
|
1791
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1792
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
|
|
1793
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1794
|
-
*/
|
|
1795
1116
|
createDefaultOzoneConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1796
1117
|
this.behaviors.require(OzoneConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1797
1118
|
measuredValue,
|
|
@@ -1803,13 +1124,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1803
1124
|
});
|
|
1804
1125
|
return this;
|
|
1805
1126
|
}
|
|
1806
|
-
/**
|
|
1807
|
-
* Create a default RadonConcentrationMeasurement cluster server.
|
|
1808
|
-
*
|
|
1809
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1810
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ppm).
|
|
1811
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1812
|
-
*/
|
|
1813
1127
|
createDefaultRadonConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1814
1128
|
this.behaviors.require(RadonConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1815
1129
|
measuredValue,
|
|
@@ -1821,13 +1135,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1821
1135
|
});
|
|
1822
1136
|
return this;
|
|
1823
1137
|
}
|
|
1824
|
-
/**
|
|
1825
|
-
* Create a default NitrogenDioxideConcentrationMeasurement cluster server.
|
|
1826
|
-
*
|
|
1827
|
-
* @param {number} measuredValue - The measured value of the concentration.
|
|
1828
|
-
* @param {ConcentrationMeasurement.MeasurementUnit} measurementUnit - The unit of measurement (default to ConcentrationMeasurement.MeasurementUnit.Ugm3).
|
|
1829
|
-
* @param {ConcentrationMeasurement.MeasurementMedium} measurementMedium - The unit of measurement (default to ConcentrationMeasurement.MeasurementMedium.Air).
|
|
1830
|
-
*/
|
|
1831
1138
|
createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ugm3, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1832
1139
|
this.behaviors.require(NitrogenDioxideConcentrationMeasurementServer.with(ConcentrationMeasurement.Feature.NumericMeasurement), {
|
|
1833
1140
|
measuredValue,
|
|
@@ -1840,4 +1147,3 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1840
1147
|
return this;
|
|
1841
1148
|
}
|
|
1842
1149
|
}
|
|
1843
|
-
//# sourceMappingURL=matterbridgeEndpoint.js.map
|