matterbridge 1.0.6 → 1.1.3
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 +60 -0
- package/LICENSE +202 -21
- package/README.md +160 -5
- package/Screenshot devices page.png +0 -0
- package/Screenshot home page.png +0 -0
- package/dist/AirQualityCluster.d.ts +22 -0
- package/dist/AirQualityCluster.d.ts.map +1 -1
- package/dist/AirQualityCluster.js +23 -1
- package/dist/AirQualityCluster.js.map +1 -1
- package/dist/ColorControlServer.d.ts +20 -3
- package/dist/ColorControlServer.d.ts.map +1 -1
- package/dist/ColorControlServer.js +20 -3
- package/dist/ColorControlServer.js.map +1 -1
- package/dist/TvocCluster.d.ts +262 -0
- package/dist/TvocCluster.d.ts.map +1 -0
- package/dist/TvocCluster.js +114 -0
- package/dist/TvocCluster.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/matterbridge.d.ts +188 -17
- package/dist/matterbridge.d.ts.map +1 -1
- package/dist/matterbridge.js +762 -224
- package/dist/matterbridge.js.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +65 -11
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.js +73 -39
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -1
- package/dist/matterbridgeComposed.d.ts +43 -0
- package/dist/matterbridgeComposed.d.ts.map +1 -0
- package/dist/matterbridgeComposed.js +58 -0
- package/dist/matterbridgeComposed.js.map +1 -0
- package/dist/matterbridgeController.d.ts +2 -0
- package/dist/matterbridgeController.d.ts.map +1 -0
- package/dist/matterbridgeController.js +309 -0
- package/dist/matterbridgeController.js.map +1 -0
- package/dist/matterbridgeDevice.d.ts +209 -4
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +587 -51
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +65 -11
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -1
- package/dist/matterbridgeDynamicPlatform.js +73 -39
- package/dist/matterbridgeDynamicPlatform.js.map +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +33 -0
- package/dist/utils.js.map +1 -0
- package/frontend/build/Matterbridge.jpg +0 -0
- package/frontend/build/asset-manifest.json +6 -6
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/css/main.6d93e0db.css +2 -0
- package/frontend/build/static/css/main.6d93e0db.css.map +1 -0
- package/frontend/build/static/js/main.b5a876cf.js +3 -0
- package/frontend/build/static/js/{main.a000062f.js.LICENSE.txt → main.b5a876cf.js.LICENSE.txt} +2 -0
- package/frontend/build/static/js/main.b5a876cf.js.map +1 -0
- package/package.json +16 -12
- package/.eslintrc.json +0 -45
- package/.gitattributes +0 -2
- package/.prettierignore +0 -2
- package/.prettierrc.json +0 -12
- package/frontend/README.md +0 -70
- package/frontend/build/static/css/main.8b969fd5.css +0 -2
- package/frontend/build/static/css/main.8b969fd5.css.map +0 -1
- package/frontend/build/static/js/main.a000062f.js +0 -3
- package/frontend/build/static/js/main.a000062f.js.map +0 -1
- package/frontend/package-lock.json +0 -18351
- package/frontend/package.json +0 -40
- package/frontend/public/favicon.ico +0 -0
- package/frontend/public/index.html +0 -15
- package/frontend/public/manifest.json +0 -15
- package/frontend/public/matter.png +0 -0
- package/frontend/public/robots.txt +0 -3
|
@@ -1,9 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This file contains the class MatterbridgeDevice.
|
|
3
|
+
*
|
|
4
|
+
* @file matterbridgeDevice.ts
|
|
5
|
+
* @author Luca Liguori
|
|
6
|
+
* @date 2023-12-29
|
|
7
|
+
* @version 1.0.15
|
|
8
|
+
*
|
|
9
|
+
* Copyright 2023, 2024 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
|
+
import { BasicInformationCluster, BooleanStateCluster, BridgedDeviceBasicInformationCluster, ClusterServer, ColorControl, ElectricalMeasurementCluster, Groups, Identify, IdentifyCluster, IlluminanceMeasurementCluster, LevelControl, OccupancySensing, OccupancySensingCluster, OnOff, OnOffCluster, PowerSource, PowerSourceCluster, PowerSourceConfigurationCluster, PressureMeasurementCluster, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, Scenes, TemperatureMeasurement, TemperatureMeasurementCluster, ThreadNetworkDiagnostics, ThreadNetworkDiagnosticsCluster, WindowCovering, WindowCoveringCluster, createDefaultGroupsClusterServer, createDefaultScenesClusterServer, } from '@project-chip/matter-node.js/cluster';
|
|
3
24
|
import { EndpointNumber, VendorId } from '@project-chip/matter-node.js/datatype';
|
|
4
25
|
import { Device, DeviceClasses, DeviceTypeDefinition } from '@project-chip/matter-node.js/device';
|
|
5
26
|
import { extendPublicHandlerMethods } from '@project-chip/matter-node.js/util';
|
|
27
|
+
import { EveHistoryCluster } from 'matter-history';
|
|
6
28
|
import { AirQuality, AirQualityCluster } from './AirQualityCluster.js';
|
|
29
|
+
import { createHash } from 'crypto';
|
|
30
|
+
import { TvocMeasurement, TvocMeasurementCluster } from './TvocCluster.js';
|
|
7
31
|
// Custom device types
|
|
8
32
|
export const onOffSwitch = DeviceTypeDefinition({
|
|
9
33
|
name: 'MA-onoffswitch',
|
|
@@ -35,66 +59,431 @@ export const airQualitySensor = DeviceTypeDefinition({
|
|
|
35
59
|
deviceClass: DeviceClasses.Simple,
|
|
36
60
|
revision: 1,
|
|
37
61
|
requiredServerClusters: [Identify.Cluster.id, AirQuality.Cluster.id],
|
|
38
|
-
optionalServerClusters: [TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id],
|
|
62
|
+
optionalServerClusters: [TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id, TvocMeasurement.Cluster.id],
|
|
39
63
|
});
|
|
40
64
|
export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
41
|
-
constructor(definition,
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
43
|
-
// attributeInitialValues?: { [key: ClusterId]: AttributeInitialValues<any> },
|
|
44
|
-
options = {}) {
|
|
65
|
+
constructor(definition, options = {}) {
|
|
45
66
|
super(definition, options);
|
|
46
67
|
}
|
|
68
|
+
addDeviceType(deviceType) {
|
|
69
|
+
const deviceTypes = this.getDeviceTypes();
|
|
70
|
+
deviceTypes.push(deviceType);
|
|
71
|
+
this.setDeviceTypes(deviceTypes);
|
|
72
|
+
}
|
|
73
|
+
/*
|
|
74
|
+
removeClusterServer<A extends Attributes, E extends Events>(cluster: ClusterServerObj<A, E>) {
|
|
75
|
+
const currentCluster = this.clusterServers.get(cluster.id);
|
|
76
|
+
if (currentCluster !== undefined) {
|
|
77
|
+
asClusterServerInternal(currentCluster)._destroy();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* Creates a room Eve History Cluster Server.
|
|
83
|
+
*
|
|
84
|
+
* @param history - The MatterHistory object.
|
|
85
|
+
* @param log - The AnsiLogger object.
|
|
86
|
+
*/
|
|
87
|
+
createRoomEveHistoryClusterServer(history, log) {
|
|
88
|
+
history.setMatterHystoryType('room');
|
|
89
|
+
this.addClusterServer(ClusterServer(EveHistoryCluster, {
|
|
90
|
+
// Dynamic attributes
|
|
91
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
92
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
93
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
94
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
95
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
96
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
97
|
+
// Normal attributes
|
|
98
|
+
TemperatureDisplayUnits: 0 /* TemperatureDisplayUnits.CELSIUS */,
|
|
99
|
+
RLoc: 46080,
|
|
100
|
+
}, {
|
|
101
|
+
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
102
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
103
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
104
|
+
},
|
|
105
|
+
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
106
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
107
|
+
return Uint8Array.fromHex('');
|
|
108
|
+
},
|
|
109
|
+
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
110
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
111
|
+
return history.OnSetConfigData(value);
|
|
112
|
+
},
|
|
113
|
+
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
114
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
115
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
116
|
+
},
|
|
117
|
+
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
118
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
119
|
+
return history.OnGetHistoryEntries();
|
|
120
|
+
},
|
|
121
|
+
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
122
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
123
|
+
return Uint8Array.fromHex('');
|
|
124
|
+
},
|
|
125
|
+
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
126
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
127
|
+
return history.OnSetHistorySetTime(value);
|
|
128
|
+
},
|
|
129
|
+
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
130
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
131
|
+
return Uint8Array.fromHex('');
|
|
132
|
+
},
|
|
133
|
+
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
134
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
135
|
+
return history.OnSetHistoryRequest(value);
|
|
136
|
+
},
|
|
137
|
+
}, {}));
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Creates a Weather Eve History Cluster Server.
|
|
141
|
+
*
|
|
142
|
+
* @param history - The MatterHistory instance.
|
|
143
|
+
* @param log - The AnsiLogger instance.
|
|
144
|
+
*/
|
|
145
|
+
createWeatherEveHistoryClusterServer(history, log) {
|
|
146
|
+
history.setMatterHystoryType('weather');
|
|
147
|
+
this.addClusterServer(ClusterServer(EveHistoryCluster, {
|
|
148
|
+
// Dynamic attributes
|
|
149
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
150
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
151
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
152
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
153
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
154
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
155
|
+
// Normal attributes
|
|
156
|
+
Elevation: 0,
|
|
157
|
+
LastPressure: 1000,
|
|
158
|
+
WeatherTrend: 1 /* WeatherTrend.SUN */,
|
|
159
|
+
TemperatureDisplayUnits: 0 /* TemperatureDisplayUnits.CELSIUS */,
|
|
160
|
+
RLoc: 46080,
|
|
161
|
+
}, {
|
|
162
|
+
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
163
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
164
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
165
|
+
},
|
|
166
|
+
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
167
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
168
|
+
return Uint8Array.fromHex('');
|
|
169
|
+
},
|
|
170
|
+
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
171
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
172
|
+
return history.OnSetConfigData(value);
|
|
173
|
+
},
|
|
174
|
+
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
175
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
176
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
177
|
+
},
|
|
178
|
+
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
179
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
180
|
+
return history.OnGetHistoryEntries();
|
|
181
|
+
},
|
|
182
|
+
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
183
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
184
|
+
return Uint8Array.fromHex('');
|
|
185
|
+
},
|
|
186
|
+
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
187
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
188
|
+
return history.OnSetHistorySetTime(value);
|
|
189
|
+
},
|
|
190
|
+
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
191
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
192
|
+
return Uint8Array.fromHex('');
|
|
193
|
+
},
|
|
194
|
+
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
195
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
196
|
+
return history.OnSetHistoryRequest(value);
|
|
197
|
+
},
|
|
198
|
+
}, {}));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Creates an Energy Eve History Cluster Server.
|
|
202
|
+
*
|
|
203
|
+
* @param history - The MatterHistory object.
|
|
204
|
+
* @param log - The AnsiLogger object.
|
|
205
|
+
*/
|
|
206
|
+
createEnergyEveHistoryClusterServer(history, log) {
|
|
207
|
+
history.setMatterHystoryType('energy');
|
|
208
|
+
this.addClusterServer(ClusterServer(EveHistoryCluster, {
|
|
209
|
+
// Dynamic attributes
|
|
210
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
211
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
212
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
213
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
214
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
215
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
216
|
+
LastEvent: 0,
|
|
217
|
+
ResetTotal: 0,
|
|
218
|
+
// Normal attributes
|
|
219
|
+
Voltage: 0,
|
|
220
|
+
Current: 0,
|
|
221
|
+
Consumption: 0,
|
|
222
|
+
TotalConsumption: 0,
|
|
223
|
+
EnergyUnknown: 1,
|
|
224
|
+
ChildLock: false,
|
|
225
|
+
RLoc: 46080,
|
|
226
|
+
}, {
|
|
227
|
+
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
228
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
229
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
230
|
+
},
|
|
231
|
+
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
232
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
233
|
+
return Uint8Array.fromHex('');
|
|
234
|
+
},
|
|
235
|
+
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
236
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
237
|
+
return history.OnSetConfigData(value);
|
|
238
|
+
},
|
|
239
|
+
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
240
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
241
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
242
|
+
},
|
|
243
|
+
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
244
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
245
|
+
return history.OnGetHistoryEntries();
|
|
246
|
+
},
|
|
247
|
+
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
248
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
249
|
+
return Uint8Array.fromHex('');
|
|
250
|
+
},
|
|
251
|
+
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
252
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
253
|
+
return history.OnSetHistorySetTime(value);
|
|
254
|
+
},
|
|
255
|
+
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
256
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
257
|
+
return Uint8Array.fromHex('');
|
|
258
|
+
},
|
|
259
|
+
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
260
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
261
|
+
return history.OnSetHistoryRequest(value);
|
|
262
|
+
},
|
|
263
|
+
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
264
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
265
|
+
return history.OnGetLastEvent();
|
|
266
|
+
},
|
|
267
|
+
ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
268
|
+
log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
269
|
+
return history.OnGetLastReset();
|
|
270
|
+
},
|
|
271
|
+
ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
272
|
+
log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
273
|
+
return history.OnSetLastReset(value);
|
|
274
|
+
},
|
|
275
|
+
}, {}));
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Creates a Motion Eve History Cluster Server.
|
|
279
|
+
*
|
|
280
|
+
* @param history - The MatterHistory object.
|
|
281
|
+
* @param log - The AnsiLogger object.
|
|
282
|
+
*/
|
|
283
|
+
createMotionEveHistoryClusterServer(history, log) {
|
|
284
|
+
history.setMatterHystoryType('motion');
|
|
285
|
+
this.addClusterServer(ClusterServer(EveHistoryCluster, {
|
|
286
|
+
// Dynamic attributes
|
|
287
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
288
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
289
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
290
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
291
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
292
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
293
|
+
LastEvent: 0,
|
|
294
|
+
// Normal attributes
|
|
295
|
+
MotionSensitivity: 0 /* Sensitivity.HIGH */,
|
|
296
|
+
RLoc: 46080,
|
|
297
|
+
}, {
|
|
298
|
+
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
299
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
300
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
301
|
+
},
|
|
302
|
+
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
303
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
304
|
+
return Uint8Array.fromHex('');
|
|
305
|
+
},
|
|
306
|
+
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
307
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
308
|
+
return history.OnSetConfigData(value);
|
|
309
|
+
},
|
|
310
|
+
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
311
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
312
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
313
|
+
},
|
|
314
|
+
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
315
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
316
|
+
return history.OnGetHistoryEntries();
|
|
317
|
+
},
|
|
318
|
+
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
319
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
320
|
+
return Uint8Array.fromHex('');
|
|
321
|
+
},
|
|
322
|
+
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
323
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
324
|
+
return history.OnSetHistorySetTime(value);
|
|
325
|
+
},
|
|
326
|
+
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
327
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
328
|
+
return Uint8Array.fromHex('');
|
|
329
|
+
},
|
|
330
|
+
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
331
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
332
|
+
return history.OnSetHistoryRequest(value);
|
|
333
|
+
},
|
|
334
|
+
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
335
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
336
|
+
return history.OnGetLastEvent();
|
|
337
|
+
},
|
|
338
|
+
}, {}));
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Creates a door EveHistoryCluster server.
|
|
342
|
+
*
|
|
343
|
+
* @param history - The MatterHistory instance.
|
|
344
|
+
* @param log - The AnsiLogger instance.
|
|
345
|
+
*/
|
|
346
|
+
createDoorEveHistoryClusterServer(history, log) {
|
|
347
|
+
history.setMatterHystoryType('door');
|
|
348
|
+
this.addClusterServer(ClusterServer(EveHistoryCluster, {
|
|
349
|
+
// Dynamic attributes
|
|
350
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
351
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
352
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
353
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
354
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
355
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
356
|
+
TimesOpened: 0,
|
|
357
|
+
LastEvent: 0,
|
|
358
|
+
ResetTotal: 0,
|
|
359
|
+
// Normal attributes
|
|
360
|
+
RLoc: 46080,
|
|
361
|
+
}, {
|
|
362
|
+
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
363
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
364
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
365
|
+
},
|
|
366
|
+
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
367
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
368
|
+
return Uint8Array.fromHex('');
|
|
369
|
+
},
|
|
370
|
+
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
371
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
372
|
+
return history.OnSetConfigData(value);
|
|
373
|
+
},
|
|
374
|
+
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
375
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
376
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
377
|
+
},
|
|
378
|
+
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
379
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
380
|
+
return history.OnGetHistoryEntries();
|
|
381
|
+
},
|
|
382
|
+
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
383
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
384
|
+
return Uint8Array.fromHex('');
|
|
385
|
+
},
|
|
386
|
+
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
387
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
388
|
+
return history.OnSetHistorySetTime(value);
|
|
389
|
+
},
|
|
390
|
+
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
391
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
392
|
+
return Uint8Array.fromHex('');
|
|
393
|
+
},
|
|
394
|
+
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
395
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
396
|
+
return history.OnSetHistoryRequest(value);
|
|
397
|
+
},
|
|
398
|
+
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
399
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
400
|
+
return history.OnGetLastEvent();
|
|
401
|
+
},
|
|
402
|
+
TimesOpenedAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
403
|
+
log.debug(`TimesOpenedAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
404
|
+
return history.OnGetimesOpened();
|
|
405
|
+
},
|
|
406
|
+
ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
407
|
+
log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
408
|
+
return history.OnGetLastReset();
|
|
409
|
+
},
|
|
410
|
+
ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
411
|
+
log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
412
|
+
return history.OnSetLastReset(value);
|
|
413
|
+
},
|
|
414
|
+
}, {}));
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Creates a default IdentifyCluster server.
|
|
418
|
+
*/
|
|
47
419
|
createDefaultIdentifyClusterServer() {
|
|
48
420
|
this.addClusterServer(ClusterServer(IdentifyCluster, {
|
|
49
421
|
identifyTime: 0,
|
|
50
422
|
identifyType: Identify.IdentifyType.None,
|
|
51
423
|
}, {
|
|
52
424
|
identify: async (data) => {
|
|
53
|
-
console
|
|
425
|
+
// eslint-disable-next-line no-console
|
|
426
|
+
console.log('Identify');
|
|
54
427
|
await this.commandHandler.executeHandler('identify', data);
|
|
55
428
|
},
|
|
56
429
|
}));
|
|
57
430
|
}
|
|
431
|
+
/**
|
|
432
|
+
* Creates a default groups cluster server and adds it to the device.
|
|
433
|
+
*/
|
|
58
434
|
createDefaultGroupsClusterServer() {
|
|
59
435
|
this.addClusterServer(createDefaultGroupsClusterServer());
|
|
60
436
|
}
|
|
437
|
+
/**
|
|
438
|
+
* Creates a default scenes cluster server and adds it to the current instance.
|
|
439
|
+
*/
|
|
61
440
|
createDefaultScenesClusterServer() {
|
|
62
441
|
this.addClusterServer(createDefaultScenesClusterServer());
|
|
63
442
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
hardwareVersionString: 'v.1.0',
|
|
77
|
-
reachable: true,
|
|
78
|
-
}, {}, {
|
|
79
|
-
reachableChanged: true,
|
|
80
|
-
}));
|
|
443
|
+
/**
|
|
444
|
+
* Creates a unique identifier based on the provided parameters.
|
|
445
|
+
* @param param1 - The first parameter.
|
|
446
|
+
* @param param2 - The second parameter.
|
|
447
|
+
* @param param3 - The third parameter.
|
|
448
|
+
* @param param4 - The fourth parameter.
|
|
449
|
+
* @returns A unique identifier generated using the MD5 hash algorithm.
|
|
450
|
+
*/
|
|
451
|
+
createUniqueId(param1, param2, param3, param4) {
|
|
452
|
+
const hash = createHash('md5');
|
|
453
|
+
hash.update(param1 + param2 + param3 + param4);
|
|
454
|
+
return hash.digest('hex');
|
|
81
455
|
}
|
|
82
|
-
|
|
456
|
+
/**
|
|
457
|
+
* Creates a default Basic Information Cluster Server.
|
|
458
|
+
*
|
|
459
|
+
* @param deviceName - The name of the device.
|
|
460
|
+
* @param serialNumber - The serial number of the device.
|
|
461
|
+
* @param vendorId - The vendor ID of the device.
|
|
462
|
+
* @param vendorName - The vendor name of the device.
|
|
463
|
+
* @param productId - The product ID of the device.
|
|
464
|
+
* @param productName - The product name of the device.
|
|
465
|
+
* @param softwareVersion - The software version of the device. Default is 1.
|
|
466
|
+
* @param softwareVersionString - The software version string of the device. Default is 'v.1.0.0'.
|
|
467
|
+
* @param hardwareVersion - The hardware version of the device. Default is 1.
|
|
468
|
+
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
469
|
+
*/
|
|
470
|
+
createDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = 'v.1.0.0', hardwareVersion = 1, hardwareVersionString = 'v.1.0.0') {
|
|
83
471
|
this.addClusterServer(ClusterServer(BasicInformationCluster, {
|
|
84
472
|
dataModelRevision: 1,
|
|
473
|
+
location: 'XX',
|
|
85
474
|
vendorId: VendorId(vendorId),
|
|
86
475
|
vendorName: vendorName,
|
|
87
476
|
productId: productId,
|
|
88
477
|
productName: productName,
|
|
89
478
|
productLabel: deviceName,
|
|
90
479
|
nodeLabel: deviceName,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
480
|
+
serialNumber,
|
|
481
|
+
uniqueId: this.createUniqueId(deviceName, serialNumber, vendorName, productName),
|
|
482
|
+
softwareVersion,
|
|
483
|
+
softwareVersionString,
|
|
484
|
+
hardwareVersion,
|
|
485
|
+
hardwareVersionString,
|
|
486
|
+
reachable: true,
|
|
98
487
|
capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
|
|
99
488
|
}, {}, {
|
|
100
489
|
startUp: true,
|
|
@@ -103,6 +492,61 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
103
492
|
reachableChanged: true,
|
|
104
493
|
}));
|
|
105
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* Creates a default BridgedDeviceBasicInformationClusterServer.
|
|
497
|
+
*
|
|
498
|
+
* @param deviceName - The name of the device.
|
|
499
|
+
* @param serialNumber - The serial number of the device.
|
|
500
|
+
* @param vendorId - The vendor ID of the device.
|
|
501
|
+
* @param vendorName - The name of the vendor.
|
|
502
|
+
* @param productName - The name of the product.
|
|
503
|
+
* @param softwareVersion - The software version of the device. Default is 1.
|
|
504
|
+
* @param softwareVersionString - The software version string of the device. Default is 'v.1.0.0'.
|
|
505
|
+
* @param hardwareVersion - The hardware version of the device. Default is 1.
|
|
506
|
+
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
507
|
+
*/
|
|
508
|
+
createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = 'v.1.0.0', hardwareVersion = 1, hardwareVersionString = 'v.1.0.0') {
|
|
509
|
+
this.addClusterServer(ClusterServer(BridgedDeviceBasicInformationCluster, {
|
|
510
|
+
vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined, // 4874
|
|
511
|
+
vendorName: vendorName,
|
|
512
|
+
productName: productName,
|
|
513
|
+
productLabel: deviceName,
|
|
514
|
+
nodeLabel: deviceName,
|
|
515
|
+
serialNumber,
|
|
516
|
+
uniqueId: this.createUniqueId(deviceName, serialNumber, vendorName, productName),
|
|
517
|
+
softwareVersion,
|
|
518
|
+
softwareVersionString,
|
|
519
|
+
hardwareVersion,
|
|
520
|
+
hardwareVersionString,
|
|
521
|
+
reachable: true,
|
|
522
|
+
}, {}, {
|
|
523
|
+
reachableChanged: true,
|
|
524
|
+
}));
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Creates a default Electrical Measurement Cluster Server.
|
|
528
|
+
*
|
|
529
|
+
* @param voltage - The RMS voltage value.
|
|
530
|
+
* @param current - The RMS current value.
|
|
531
|
+
* @param power - The active power value.
|
|
532
|
+
* @param consumption - The total active power consumption value.
|
|
533
|
+
*/
|
|
534
|
+
createDefaultElectricalMeasurementClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
|
|
535
|
+
this.addClusterServer(ClusterServer(ElectricalMeasurementCluster, {
|
|
536
|
+
rmsVoltage: voltage,
|
|
537
|
+
rmsCurrent: current,
|
|
538
|
+
activePower: power,
|
|
539
|
+
totalActivePower: consumption,
|
|
540
|
+
}, {}, {}));
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Creates a default Thread Network Diagnostics Cluster server.
|
|
544
|
+
*
|
|
545
|
+
* @remarks
|
|
546
|
+
* This method adds a cluster server used only to give the networkName to Eve app.
|
|
547
|
+
*
|
|
548
|
+
* @returns void
|
|
549
|
+
*/
|
|
106
550
|
createDefaultThreadNetworkDiagnosticsClusterServer() {
|
|
107
551
|
this.addClusterServer(ClusterServer(ThreadNetworkDiagnosticsCluster.with(ThreadNetworkDiagnostics.Feature.PacketCounts, ThreadNetworkDiagnostics.Feature.ErrorCounts), {
|
|
108
552
|
channel: 1,
|
|
@@ -125,36 +569,50 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
125
569
|
activeNetworkFaults: [],
|
|
126
570
|
}, {
|
|
127
571
|
resetCounts: async (data) => {
|
|
572
|
+
// eslint-disable-next-line no-console
|
|
128
573
|
console.log('resetCounts');
|
|
129
574
|
await this.commandHandler.executeHandler('resetCounts', data);
|
|
130
575
|
},
|
|
131
576
|
}, {}));
|
|
132
577
|
}
|
|
578
|
+
/**
|
|
579
|
+
* Creates a default OnOff cluster server.
|
|
580
|
+
*
|
|
581
|
+
* @param onOff - The initial state of the OnOff cluster (default: false).
|
|
582
|
+
*/
|
|
133
583
|
createDefaultOnOffClusterServer(onOff = false) {
|
|
134
584
|
this.addClusterServer(ClusterServer(OnOffCluster, {
|
|
135
585
|
onOff,
|
|
136
586
|
}, {
|
|
137
587
|
on: async (data) => {
|
|
138
|
-
console
|
|
588
|
+
// eslint-disable-next-line no-console
|
|
589
|
+
console.log('on');
|
|
139
590
|
await this.commandHandler.executeHandler('on', data);
|
|
140
591
|
},
|
|
141
592
|
off: async (data) => {
|
|
142
|
-
console
|
|
593
|
+
// eslint-disable-next-line no-console
|
|
594
|
+
console.log('off');
|
|
143
595
|
await this.commandHandler.executeHandler('off', data);
|
|
144
596
|
},
|
|
145
597
|
toggle: async (data) => {
|
|
146
|
-
console
|
|
598
|
+
// eslint-disable-next-line no-console
|
|
599
|
+
console.log('toggle');
|
|
147
600
|
await this.commandHandler.executeHandler('toggle', data);
|
|
148
601
|
},
|
|
149
602
|
}, {}));
|
|
150
603
|
}
|
|
604
|
+
/**
|
|
605
|
+
* Creates a default window covering cluster server.
|
|
606
|
+
*
|
|
607
|
+
* @param positionPercent100ths - The position percentage in 100ths (0-10000). Defaults to 0.
|
|
608
|
+
*/
|
|
151
609
|
createDefaultWindowCoveringClusterServer(positionPercent100ths) {
|
|
152
610
|
this.addClusterServer(ClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift), {
|
|
153
611
|
type: WindowCovering.WindowCoveringType.Shutter,
|
|
154
612
|
configStatus: {
|
|
155
613
|
operational: true,
|
|
156
614
|
onlineReserved: false,
|
|
157
|
-
liftMovementReversed:
|
|
615
|
+
liftMovementReversed: false,
|
|
158
616
|
liftPositionAware: true,
|
|
159
617
|
tiltPositionAware: false,
|
|
160
618
|
liftEncoderControlled: false,
|
|
@@ -167,28 +625,33 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
167
625
|
currentPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
|
|
168
626
|
}, {
|
|
169
627
|
upOrOpen: async (data) => {
|
|
170
|
-
console
|
|
628
|
+
// eslint-disable-next-line no-console
|
|
629
|
+
console.log('upOrOpen');
|
|
171
630
|
await this.commandHandler.executeHandler('upOrOpen', data);
|
|
172
631
|
},
|
|
173
632
|
downOrClose: async (data) => {
|
|
174
|
-
console
|
|
633
|
+
// eslint-disable-next-line no-console
|
|
634
|
+
console.log('downOrClose');
|
|
175
635
|
await this.commandHandler.executeHandler('downOrClose', data);
|
|
176
636
|
},
|
|
177
637
|
stopMotion: async (data) => {
|
|
178
|
-
console
|
|
638
|
+
// eslint-disable-next-line no-console
|
|
639
|
+
console.log('stopMotion');
|
|
179
640
|
await this.commandHandler.executeHandler('stopMotion', data);
|
|
180
641
|
},
|
|
181
642
|
goToLiftPercentage: async (data) => {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
data.attributes.currentPositionLiftPercent100ths?.setLocal(data.request.liftPercent100thsValue);
|
|
185
|
-
data.attributes.targetPositionLiftPercent100ths?.setLocal(data.request.liftPercent100thsValue);
|
|
186
|
-
console.log(`*goToLiftPercentage: ${data.request.liftPercent100thsValue} current: ${data.attributes.currentPositionLiftPercent100ths?.getLocal()} ` +
|
|
643
|
+
// eslint-disable-next-line no-console
|
|
644
|
+
console.log(`goToLiftPercentage: ${data.request.liftPercent100thsValue} current: ${data.attributes.currentPositionLiftPercent100ths?.getLocal()} ` +
|
|
187
645
|
`target: ${data.attributes.targetPositionLiftPercent100ths?.getLocal()}`);
|
|
188
646
|
await this.commandHandler.executeHandler('goToLiftPercentage', data);
|
|
189
647
|
},
|
|
190
648
|
}, {}));
|
|
191
649
|
}
|
|
650
|
+
/**
|
|
651
|
+
* Creates a default occupancy sensing cluster server.
|
|
652
|
+
*
|
|
653
|
+
* @param occupied - A boolean indicating whether the occupancy is occupied or not. Default is false.
|
|
654
|
+
*/
|
|
192
655
|
createDefaultOccupancySensingClusterServer(occupied = false) {
|
|
193
656
|
this.addClusterServer(ClusterServer(OccupancySensingCluster, {
|
|
194
657
|
occupancy: { occupied },
|
|
@@ -197,6 +660,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
197
660
|
pirOccupiedToUnoccupiedDelay: 30,
|
|
198
661
|
}, {}));
|
|
199
662
|
}
|
|
663
|
+
/**
|
|
664
|
+
* Creates a default Illuminance Measurement Cluster Server.
|
|
665
|
+
*
|
|
666
|
+
* @param measuredValue - The measured value of illuminance.
|
|
667
|
+
*/
|
|
200
668
|
createDefaultIlluminanceMeasurementClusterServer(measuredValue = 0) {
|
|
201
669
|
this.addClusterServer(ClusterServer(IlluminanceMeasurementCluster, {
|
|
202
670
|
measuredValue,
|
|
@@ -205,6 +673,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
205
673
|
tolerance: 0,
|
|
206
674
|
}, {}, {}));
|
|
207
675
|
}
|
|
676
|
+
/**
|
|
677
|
+
* Creates a default temperature measurement cluster server.
|
|
678
|
+
*
|
|
679
|
+
* @param measuredValue - The measured value of the temperature.
|
|
680
|
+
*/
|
|
208
681
|
createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
|
|
209
682
|
this.addClusterServer(ClusterServer(TemperatureMeasurementCluster, {
|
|
210
683
|
measuredValue,
|
|
@@ -213,6 +686,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
213
686
|
tolerance: 0,
|
|
214
687
|
}, {}, {}));
|
|
215
688
|
}
|
|
689
|
+
/**
|
|
690
|
+
* Creates a default RelativeHumidityMeasurementCluster server.
|
|
691
|
+
*
|
|
692
|
+
* @param measuredValue - The measured value of the relative humidity.
|
|
693
|
+
*/
|
|
216
694
|
createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
|
|
217
695
|
this.addClusterServer(ClusterServer(RelativeHumidityMeasurementCluster, {
|
|
218
696
|
measuredValue,
|
|
@@ -221,7 +699,12 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
221
699
|
tolerance: 0,
|
|
222
700
|
}, {}, {}));
|
|
223
701
|
}
|
|
224
|
-
|
|
702
|
+
/**
|
|
703
|
+
* Creates a default Pressure Measurement Cluster Server.
|
|
704
|
+
*
|
|
705
|
+
* @param measuredValue - The measured value for the pressure.
|
|
706
|
+
*/
|
|
707
|
+
createDefaultPressureMeasurementClusterServer(measuredValue = 1000) {
|
|
225
708
|
this.addClusterServer(ClusterServer(PressureMeasurementCluster, {
|
|
226
709
|
measuredValue,
|
|
227
710
|
minMeasuredValue: null,
|
|
@@ -229,6 +712,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
229
712
|
tolerance: 0,
|
|
230
713
|
}, {}, {}));
|
|
231
714
|
}
|
|
715
|
+
/**
|
|
716
|
+
* Creates a default boolean state cluster server.
|
|
717
|
+
*
|
|
718
|
+
* @param contact - Optional boolean value indicating the contact state. Defaults to `true` if not provided.
|
|
719
|
+
*/
|
|
232
720
|
createDefaultBooleanStateClusterServer(contact) {
|
|
233
721
|
this.addClusterServer(ClusterServer(BooleanStateCluster, {
|
|
234
722
|
stateValue: contact ?? true, // true=contact false=no_contact
|
|
@@ -236,7 +724,16 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
236
724
|
stateChange: true,
|
|
237
725
|
}));
|
|
238
726
|
}
|
|
239
|
-
|
|
727
|
+
/**
|
|
728
|
+
* Creates a default power source replaceable battery cluster server.
|
|
729
|
+
*
|
|
730
|
+
* @param batPercentRemaining - The remaining battery percentage (default: 100).
|
|
731
|
+
* @param batChargeLevel - The battery charge level (default: PowerSource.BatChargeLevel.Ok).
|
|
732
|
+
* @param batVoltage - The battery voltage (default: 1500).
|
|
733
|
+
* @param batReplacementDescription - The battery replacement description (default: 'Battery type').
|
|
734
|
+
* @param batQuantity - The battery quantity (default: 1).
|
|
735
|
+
*/
|
|
736
|
+
createDefaultPowerSourceReplaceableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500, batReplacementDescription = 'Battery type', batQuantity = 1) {
|
|
240
737
|
this.addClusterServer(ClusterServer(PowerSourceCluster.with(PowerSource.Feature.Battery, PowerSource.Feature.Replaceable), {
|
|
241
738
|
status: PowerSource.PowerSourceStatus.Active,
|
|
242
739
|
order: 0,
|
|
@@ -247,10 +744,17 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
247
744
|
batReplacementNeeded: false,
|
|
248
745
|
batReplaceability: PowerSource.BatReplaceability.UserReplaceable,
|
|
249
746
|
activeBatFaults: undefined,
|
|
250
|
-
batReplacementDescription
|
|
251
|
-
batQuantity
|
|
747
|
+
batReplacementDescription,
|
|
748
|
+
batQuantity,
|
|
252
749
|
}, {}, {}));
|
|
253
750
|
}
|
|
751
|
+
/**
|
|
752
|
+
* Creates a default power source rechargeable battery cluster server.
|
|
753
|
+
*
|
|
754
|
+
* @param batPercentRemaining - The remaining battery percentage (default: 100).
|
|
755
|
+
* @param batChargeLevel - The battery charge level (default: PowerSource.BatChargeLevel.Ok).
|
|
756
|
+
* @param batVoltage - The battery voltage (default: 1500).
|
|
757
|
+
*/
|
|
254
758
|
createDefaultPowerSourceRechargableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500) {
|
|
255
759
|
this.addClusterServer(ClusterServer(PowerSourceCluster.with(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable), {
|
|
256
760
|
status: PowerSource.PowerSourceStatus.Active,
|
|
@@ -267,6 +771,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
267
771
|
batFunctionalWhileCharging: true,
|
|
268
772
|
}, {}, {}));
|
|
269
773
|
}
|
|
774
|
+
/**
|
|
775
|
+
* Creates a default power source wired cluster server.
|
|
776
|
+
*
|
|
777
|
+
* @param wiredCurrentType - The type of wired current (default: PowerSource.WiredCurrentType.Ac)
|
|
778
|
+
*/
|
|
270
779
|
createDefaultPowerSourceWiredClusterServer(wiredCurrentType = PowerSource.WiredCurrentType.Ac) {
|
|
271
780
|
this.addClusterServer(ClusterServer(PowerSourceCluster.with(PowerSource.Feature.Wired), {
|
|
272
781
|
wiredCurrentType,
|
|
@@ -275,14 +784,41 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
275
784
|
order: 0,
|
|
276
785
|
}, {}, {}));
|
|
277
786
|
}
|
|
787
|
+
/**
|
|
788
|
+
* Creates a default power source configuration cluster server.
|
|
789
|
+
*
|
|
790
|
+
* @remarks
|
|
791
|
+
* The endpoint at this time is only known for Accessory Platforms.
|
|
792
|
+
* Don't use it in Dynamic Platforms.
|
|
793
|
+
*
|
|
794
|
+
*
|
|
795
|
+
* @param endpointNumber - The endpoint number where to find the PowerSourceCluster.
|
|
796
|
+
*/
|
|
278
797
|
createDefaultPowerSourceConfigurationClusterServer(endpointNumber) {
|
|
279
798
|
this.addClusterServer(ClusterServer(PowerSourceConfigurationCluster, {
|
|
280
799
|
sources: [EndpointNumber(endpointNumber)],
|
|
281
800
|
}, {}, {}));
|
|
282
801
|
}
|
|
283
|
-
|
|
802
|
+
/**
|
|
803
|
+
* Creates a default air quality cluster server.
|
|
804
|
+
*
|
|
805
|
+
* @param airQuality The air quality type. Defaults to `AirQuality.AirQualityType.Unknown`.
|
|
806
|
+
*/
|
|
807
|
+
createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityType.Unknown) {
|
|
284
808
|
this.addClusterServer(ClusterServer(AirQualityCluster.with(AirQuality.Feature.FairAirQuality, AirQuality.Feature.ModerateAirQuality, AirQuality.Feature.VeryPoorAirQuality), {
|
|
285
|
-
airQuality
|
|
809
|
+
airQuality,
|
|
810
|
+
}, {}, {}));
|
|
811
|
+
}
|
|
812
|
+
/**
|
|
813
|
+
* Creates a default TVOC measurement cluster server.
|
|
814
|
+
*
|
|
815
|
+
* @param measuredValue - The measured value for TVOC.
|
|
816
|
+
*/
|
|
817
|
+
createDefaultTvocMeasurementClusterServer(measuredValue = 0) {
|
|
818
|
+
this.addClusterServer(ClusterServer(TvocMeasurementCluster.with(TvocMeasurement.Feature.NumericMeasurement), {
|
|
819
|
+
measuredValue,
|
|
820
|
+
minMeasuredValue: null,
|
|
821
|
+
maxMeasuredValue: null,
|
|
286
822
|
}, {}, {}));
|
|
287
823
|
}
|
|
288
824
|
}
|