matterbridge 1.6.0 → 1.6.2
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 +53 -1
- package/README-DEV.md +0 -4
- package/README-NGINX.md +63 -0
- package/README.md +8 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +18 -8
- package/dist/cli.js.map +1 -1
- package/dist/defaultConfigSchema.d.ts +1 -1
- package/dist/defaultConfigSchema.js +1 -1
- package/dist/deviceManager.d.ts +2 -2
- package/dist/deviceManager.d.ts.map +1 -1
- package/dist/deviceManager.js +2 -2
- package/dist/deviceManager.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -11
- package/dist/index.js.map +1 -1
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +5 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matterbridge.d.ts +32 -16
- package/dist/matterbridge.d.ts.map +1 -1
- package/dist/matterbridge.js +254 -115
- package/dist/matterbridge.js.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +1 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.js +1 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -1
- package/dist/matterbridgeBehaviors.d.ts +1123 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +281 -0
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDevice.d.ts +2069 -1511
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +192 -196
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/matterbridgeDeviceTypes.d.ts +58 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +308 -0
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +1 -1
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -1
- package/dist/matterbridgeDynamicPlatform.js +1 -1
- package/dist/matterbridgeDynamicPlatform.js.map +1 -1
- package/dist/matterbridgeEdge.d.ts +20 -21
- package/dist/matterbridgeEdge.d.ts.map +1 -1
- package/dist/matterbridgeEdge.js +506 -103
- package/dist/matterbridgeEdge.js.map +1 -1
- package/dist/matterbridgeEndpoint.d.ts +3545 -2336
- package/dist/matterbridgeEndpoint.d.ts.map +1 -1
- package/dist/matterbridgeEndpoint.js +672 -468
- package/dist/matterbridgeEndpoint.js.map +1 -1
- package/dist/matterbridgePlatform.d.ts +5 -4
- package/dist/matterbridgePlatform.d.ts.map +1 -1
- package/dist/matterbridgePlatform.js +11 -3
- package/dist/matterbridgePlatform.js.map +1 -1
- package/dist/matterbridgeTypes.d.ts +7 -8
- package/dist/matterbridgeTypes.d.ts.map +1 -1
- package/dist/matterbridgeTypes.js.map +1 -1
- package/dist/matterbridgeWebsocket.d.ts +1 -1
- package/dist/matterbridgeWebsocket.d.ts.map +1 -1
- package/dist/matterbridgeWebsocket.js +41 -3
- package/dist/matterbridgeWebsocket.js.map +1 -1
- package/dist/pluginManager.d.ts +1 -1
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +17 -8
- package/dist/pluginManager.js.map +1 -1
- package/dist/utils/colorUtils.d.ts +1 -1
- package/dist/utils/colorUtils.js +2 -2
- package/dist/utils/colorUtils.js.map +1 -1
- package/dist/utils/utils.d.ts +42 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +105 -3
- package/dist/utils/utils.js.map +1 -1
- package/frontend/build/asset-manifest.json +62 -6
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/css/main.823e08b6.css +2 -0
- package/frontend/build/static/css/main.823e08b6.css.map +1 -0
- package/frontend/build/static/js/main.a14c87e7.js +115 -0
- package/frontend/build/static/js/{main.045d08f7.js.LICENSE.txt → main.a14c87e7.js.LICENSE.txt} +3 -3
- package/frontend/build/static/js/main.a14c87e7.js.map +1 -0
- package/frontend/build/static/media/roboto-cyrillic-300-normal.1b79538ccd585c259996.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-300-normal.5f077fd7b977d1715acf.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-400-normal.5d2930082227d172f62c.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-400-normal.a9e19870cf6c4b973427.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-500-normal.0ae2428323939af5e1ad.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-500-normal.dd7bc8a52c6c70c5a3f5.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-700-normal.3f6e1548bd5175a8c342.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-700-normal.4fdfc29a10e7d4b7c527.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.795dbc8140e3fef82983.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.80947a31d23c70204b47.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.135d076fa32aa0b4d105.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.5cec61a21cc20180fbe1.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.6de16332fda843a3dc3d.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.c0a0638f90b31d6454ba.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.4750292c47fa2bc6ac1a.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.ca247189fc12d00de361.woff +0 -0
- package/frontend/build/static/media/roboto-greek-300-normal.285f3e6261d8eb20417d.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-300-normal.889beddda1c9bd9f97df.woff +0 -0
- package/frontend/build/static/media/roboto-greek-400-normal.160a791a8e4f46bca3cc.woff +0 -0
- package/frontend/build/static/media/roboto-greek-400-normal.2c32b1315be61477013a.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-500-normal.60810e07c7b0273013aa.woff +0 -0
- package/frontend/build/static/media/roboto-greek-500-normal.f95e757c5483310f9c11.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-700-normal.77dd370f2001e184ba0d.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-700-normal.df87b053fae3d7ad5f7a.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-300-normal.d6049cb54aa6fbe14c42.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-400-normal.1df4abad55796d11a0c8.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-500-normal.4a96ba31abcce0f5d52b.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-500-normal.fd28d9c008bf3af1bed7.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-700-normal.2dd6febad11502dec6a6.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-700-normal.4abdc9fff4507f17d726.woff +0 -0
- package/frontend/build/static/media/roboto-latin-300-normal.b850f1ff581ea232fac9.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-300-normal.c4bc0593c9954d79cb3a.woff +0 -0
- package/frontend/build/static/media/roboto-latin-400-normal.047a7839f69b209db815.woff +0 -0
- package/frontend/build/static/media/roboto-latin-400-normal.297d48e1b5a10c0831a9.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-500-normal.68d40d6d01c6f85d24ba.woff +0 -0
- package/frontend/build/static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-700-normal.9f6a16a7770c87b2042b.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-300-normal.14982a9e4857a93b6dce.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-300-normal.97cbc447d4a8d41a9543.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-400-normal.27da5b36b6d3a16f53f4.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-400-normal.2eeae187764baf05867d.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-500-normal.06c30711d588145a4541.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-500-normal.9a18d7bb9ff7a6af7b32.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-700-normal.18841836e391d39e83a8.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-700-normal.3c5bcdd0e69c4c3ffafe.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-300-normal.c96b16e5c05c7b7c3e89.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-300-normal.f5e7cea32756dfe7af40.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-400-normal.0dc97c66f9b542d6fa17.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-400-normal.d3f8e26d6c27de8102b6.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-500-normal.090fabef926bdc0e9b9f.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-500-normal.23b7b8a2524d2d4b637b.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-700-normal.0a79a9fabfc32e33f360.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-700-normal.35ed0597568ff6f19c16.woff +0 -0
- package/npm-shrinkwrap.json +120 -39
- package/package.json +8 -3
- package/dist/matterbridgeController.d.ts +0 -24
- package/dist/matterbridgeController.d.ts.map +0 -1
- package/dist/matterbridgeController.js +0 -386
- package/dist/matterbridgeController.js.map +0 -1
- package/frontend/build/static/css/main.1cf003ae.css +0 -2
- package/frontend/build/static/css/main.1cf003ae.css.map +0 -1
- package/frontend/build/static/js/main.045d08f7.js +0 -3
- package/frontend/build/static/js/main.045d08f7.js.map +0 -1
|
@@ -20,179 +20,19 @@
|
|
|
20
20
|
* See the License for the specific language governing permissions and
|
|
21
21
|
* limitations under the License. *
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
|
|
23
|
+
// @matter
|
|
24
|
+
import { AirQuality, AirQualityCluster, BasicInformationCluster, BooleanState, BooleanStateCluster, BooleanStateConfiguration, BooleanStateConfigurationCluster, BridgedDeviceBasicInformationCluster, CarbonDioxideConcentrationMeasurement, CarbonDioxideConcentrationMeasurementCluster, CarbonMonoxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurementCluster, ColorControl, ColorControlCluster, ConcentrationMeasurement, Descriptor, DescriptorCluster, DeviceEnergyManagement, DeviceEnergyManagementCluster, DeviceEnergyManagementMode, DeviceEnergyManagementModeCluster, DoorLock, DoorLockCluster, ElectricalEnergyMeasurement, ElectricalEnergyMeasurementCluster, ElectricalPowerMeasurement, ElectricalPowerMeasurementCluster, FanControl, FanControlCluster, FlowMeasurement, FlowMeasurementCluster, FormaldehydeConcentrationMeasurement, FormaldehydeConcentrationMeasurementCluster, Groups, GroupsCluster, Identify, IdentifyCluster, IlluminanceMeasurement, IlluminanceMeasurementCluster, LevelControl, LevelControlCluster, ModeSelectCluster, NitrogenDioxideConcentrationMeasurement, NitrogenDioxideConcentrationMeasurementCluster, OccupancySensing, OccupancySensingCluster, OnOff, OnOffCluster, OzoneConcentrationMeasurement, OzoneConcentrationMeasurementCluster, Pm10ConcentrationMeasurement, Pm10ConcentrationMeasurementCluster, Pm1ConcentrationMeasurement, Pm1ConcentrationMeasurementCluster, Pm25ConcentrationMeasurement, Pm25ConcentrationMeasurementCluster, PowerSource, PowerSourceCluster, PowerSourceConfigurationCluster, PowerTopology, PowerTopologyCluster, PressureMeasurement, PressureMeasurementCluster, RadonConcentrationMeasurement, RadonConcentrationMeasurementCluster, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, SmokeCoAlarmCluster, Switch, SwitchCluster, TemperatureMeasurement, TemperatureMeasurementCluster, Thermostat, ThermostatCluster, ThreadNetworkDiagnostics, ThreadNetworkDiagnosticsCluster, TimeSynchronization, TimeSynchronizationCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, TotalVolatileOrganicCompoundsConcentrationMeasurementCluster, WindowCovering, WindowCoveringCluster, } from '@matter/main/clusters';
|
|
25
|
+
import { Specification } from '@matter/main/model';
|
|
26
|
+
import { EndpointNumber, extendPublicHandlerMethods, VendorId } from '@matter/main';
|
|
27
|
+
import { MeasurementType, getClusterNameById } from '@matter/main/types';
|
|
28
|
+
// @project-chip
|
|
29
|
+
import { Device, Endpoint } from '@project-chip/matter.js/device';
|
|
30
|
+
import { GroupsClusterHandler, ClusterServer } from '@project-chip/matter.js/cluster';
|
|
31
|
+
// AnsiLogger module
|
|
32
|
+
import { AnsiLogger, CYAN, YELLOW, db, hk, or, zb, debugStringify } from 'node-ansi-logger';
|
|
33
|
+
// Node.js modules
|
|
29
34
|
import { createHash } from 'crypto';
|
|
30
|
-
|
|
31
|
-
export const airQualitySensor = DeviceTypeDefinition({
|
|
32
|
-
name: 'MA-airQualitySensor',
|
|
33
|
-
code: 0x002c,
|
|
34
|
-
deviceClass: DeviceClasses.Simple,
|
|
35
|
-
revision: 1,
|
|
36
|
-
requiredServerClusters: [Identify.Cluster.id, AirQuality.Cluster.id],
|
|
37
|
-
optionalServerClusters: [
|
|
38
|
-
TemperatureMeasurement.Cluster.id,
|
|
39
|
-
RelativeHumidityMeasurement.Cluster.id,
|
|
40
|
-
CarbonMonoxideConcentrationMeasurement.Cluster.id,
|
|
41
|
-
CarbonDioxideConcentrationMeasurement.Cluster.id,
|
|
42
|
-
NitrogenDioxideConcentrationMeasurement.Cluster.id,
|
|
43
|
-
OzoneConcentrationMeasurement.Cluster.id,
|
|
44
|
-
FormaldehydeConcentrationMeasurement.Cluster.id,
|
|
45
|
-
Pm1ConcentrationMeasurement.Cluster.id,
|
|
46
|
-
Pm25ConcentrationMeasurement.Cluster.id,
|
|
47
|
-
Pm10ConcentrationMeasurement.Cluster.id,
|
|
48
|
-
RadonConcentrationMeasurement.Cluster.id,
|
|
49
|
-
TotalVolatileOrganicCompoundsConcentrationMeasurement.Cluster.id,
|
|
50
|
-
],
|
|
51
|
-
});
|
|
52
|
-
export const waterFreezeDetector = DeviceTypeDefinition({
|
|
53
|
-
name: 'MA-waterFreezeDetector',
|
|
54
|
-
code: 0x0041,
|
|
55
|
-
deviceClass: DeviceClasses.Simple,
|
|
56
|
-
revision: 1,
|
|
57
|
-
requiredServerClusters: [Identify.Cluster.id, BooleanState.Cluster.id],
|
|
58
|
-
optionalServerClusters: [BooleanStateConfiguration.Cluster.id],
|
|
59
|
-
});
|
|
60
|
-
export const waterLeakDetector = DeviceTypeDefinition({
|
|
61
|
-
name: 'MA-waterLeakDetector',
|
|
62
|
-
code: 0x0043,
|
|
63
|
-
deviceClass: DeviceClasses.Simple,
|
|
64
|
-
revision: 1,
|
|
65
|
-
requiredServerClusters: [Identify.Cluster.id, BooleanState.Cluster.id],
|
|
66
|
-
optionalServerClusters: [BooleanStateConfiguration.Cluster.id],
|
|
67
|
-
});
|
|
68
|
-
export const rainSensor = DeviceTypeDefinition({
|
|
69
|
-
name: 'MA-rainSensor',
|
|
70
|
-
code: 0x0044,
|
|
71
|
-
deviceClass: DeviceClasses.Simple,
|
|
72
|
-
revision: 1,
|
|
73
|
-
requiredServerClusters: [Identify.Cluster.id, BooleanState.Cluster.id],
|
|
74
|
-
optionalServerClusters: [BooleanStateConfiguration.Cluster.id],
|
|
75
|
-
});
|
|
76
|
-
export const smokeCoAlarm = DeviceTypeDefinition({
|
|
77
|
-
name: 'MA-smokeCoAlarm',
|
|
78
|
-
code: 0x0076,
|
|
79
|
-
deviceClass: DeviceClasses.Simple,
|
|
80
|
-
revision: 1,
|
|
81
|
-
requiredServerClusters: [Identify.Cluster.id, SmokeCoAlarm.Cluster.id],
|
|
82
|
-
optionalServerClusters: [Groups.Cluster.id, TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id, CarbonMonoxideConcentrationMeasurement.Cluster.id],
|
|
83
|
-
});
|
|
84
|
-
export const electricalSensor = DeviceTypeDefinition({
|
|
85
|
-
name: 'MA-electricalSensor',
|
|
86
|
-
code: 0x0510,
|
|
87
|
-
deviceClass: DeviceClasses.Utility,
|
|
88
|
-
revision: 1,
|
|
89
|
-
requiredServerClusters: [PowerTopology.Cluster.id],
|
|
90
|
-
optionalServerClusters: [ElectricalPowerMeasurement.Cluster.id, ElectricalEnergyMeasurement.Cluster.id],
|
|
91
|
-
});
|
|
92
|
-
export const deviceEnergyManagement = DeviceTypeDefinition({
|
|
93
|
-
name: 'MA-deviceEnergyManagement',
|
|
94
|
-
code: 0x050d,
|
|
95
|
-
deviceClass: DeviceClasses.Utility,
|
|
96
|
-
revision: 1,
|
|
97
|
-
requiredServerClusters: [DeviceEnergyManagement.Cluster.id, DeviceEnergyManagementMode.Cluster.id],
|
|
98
|
-
optionalServerClusters: [],
|
|
99
|
-
});
|
|
100
|
-
export const bridge = DeviceTypeDefinition({
|
|
101
|
-
name: 'MA-aggregator',
|
|
102
|
-
code: 0x000e,
|
|
103
|
-
deviceClass: DeviceClasses.Dynamic,
|
|
104
|
-
revision: 1,
|
|
105
|
-
optionalServerClusters: [ActionsCluster.id],
|
|
106
|
-
});
|
|
107
|
-
export const powerSource = DeviceTypeDefinition({
|
|
108
|
-
name: 'MA-powerSource',
|
|
109
|
-
code: 0x0011,
|
|
110
|
-
deviceClass: DeviceClasses.Utility,
|
|
111
|
-
revision: 1,
|
|
112
|
-
requiredServerClusters: [PowerSource.Cluster.id],
|
|
113
|
-
optionalServerClusters: [],
|
|
114
|
-
});
|
|
115
|
-
export const bridgedNode = DeviceTypeDefinition({
|
|
116
|
-
name: 'MA-bridgedNode',
|
|
117
|
-
code: 0x0013,
|
|
118
|
-
deviceClass: DeviceClasses.Utility,
|
|
119
|
-
revision: 2,
|
|
120
|
-
requiredServerClusters: [BridgedDeviceBasicInformation.Cluster.id],
|
|
121
|
-
optionalServerClusters: [PowerSource.Cluster.id],
|
|
122
|
-
});
|
|
123
|
-
export const genericSwitch = DeviceTypeDefinition({
|
|
124
|
-
name: 'MA-genericswitch',
|
|
125
|
-
code: 0x000f,
|
|
126
|
-
deviceClass: DeviceClasses.Simple,
|
|
127
|
-
revision: 1,
|
|
128
|
-
requiredServerClusters: [IdentifyCluster.id, SwitchCluster.id],
|
|
129
|
-
optionalServerClusters: [FixedLabelCluster.id],
|
|
130
|
-
});
|
|
131
|
-
export const onOffLight = DeviceTypeDefinition({
|
|
132
|
-
name: 'MA-onofflight',
|
|
133
|
-
code: 0x0100,
|
|
134
|
-
deviceClass: DeviceClasses.Simple,
|
|
135
|
-
revision: 2,
|
|
136
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
|
|
137
|
-
optionalServerClusters: [LevelControl.Cluster.id, ColorControl.Cluster.id],
|
|
138
|
-
});
|
|
139
|
-
export const dimmableLight = DeviceTypeDefinition({
|
|
140
|
-
name: 'MA-dimmablelight',
|
|
141
|
-
code: 0x0101,
|
|
142
|
-
deviceClass: DeviceClasses.Simple,
|
|
143
|
-
revision: 2,
|
|
144
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
|
|
145
|
-
optionalServerClusters: [ColorControl.Cluster.id],
|
|
146
|
-
});
|
|
147
|
-
export const colorTemperatureLight = DeviceTypeDefinition({
|
|
148
|
-
name: 'MA-colortemperaturelight',
|
|
149
|
-
code: 0x010c,
|
|
150
|
-
deviceClass: DeviceClasses.Simple,
|
|
151
|
-
revision: 2,
|
|
152
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
|
|
153
|
-
optionalServerClusters: [],
|
|
154
|
-
});
|
|
155
|
-
export const onOffOutlet = DeviceTypeDefinition({
|
|
156
|
-
name: 'MA-onoffpluginunit',
|
|
157
|
-
code: 0x010a,
|
|
158
|
-
deviceClass: DeviceClasses.Simple,
|
|
159
|
-
revision: 2,
|
|
160
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
|
|
161
|
-
optionalServerClusters: [LevelControl.Cluster.id],
|
|
162
|
-
});
|
|
163
|
-
export const dimmableOutlet = DeviceTypeDefinition({
|
|
164
|
-
name: 'MA-dimmablepluginunit',
|
|
165
|
-
code: 0x010b,
|
|
166
|
-
deviceClass: DeviceClasses.Simple,
|
|
167
|
-
revision: 2,
|
|
168
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
|
|
169
|
-
optionalServerClusters: [],
|
|
170
|
-
});
|
|
171
|
-
// Custom device types: switch without ClientClusters
|
|
172
|
-
export const onOffSwitch = DeviceTypeDefinition({
|
|
173
|
-
name: 'MA-onoffswitch',
|
|
174
|
-
code: 0x0103,
|
|
175
|
-
deviceClass: DeviceClasses.Simple,
|
|
176
|
-
revision: 2,
|
|
177
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
|
|
178
|
-
optionalServerClusters: [LevelControl.Cluster.id, ColorControl.Cluster.id],
|
|
179
|
-
});
|
|
180
|
-
export const dimmableSwitch = DeviceTypeDefinition({
|
|
181
|
-
name: 'MA-dimmableswitch',
|
|
182
|
-
code: 0x0104,
|
|
183
|
-
deviceClass: DeviceClasses.Simple,
|
|
184
|
-
revision: 2,
|
|
185
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
|
|
186
|
-
optionalServerClusters: [ColorControl.Cluster.id],
|
|
187
|
-
});
|
|
188
|
-
export const colorTemperatureSwitch = DeviceTypeDefinition({
|
|
189
|
-
name: 'MA-colortemperatureswitch',
|
|
190
|
-
code: 0x0105,
|
|
191
|
-
deviceClass: DeviceClasses.Simple,
|
|
192
|
-
revision: 2,
|
|
193
|
-
requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
|
|
194
|
-
optionalServerClusters: [],
|
|
195
|
-
});
|
|
35
|
+
import { bridgedNode } from './matterbridgeDeviceTypes.js';
|
|
196
36
|
export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
197
37
|
static bridgeMode = '';
|
|
198
38
|
static logLevel = "info" /* LogLevel.INFO */;
|
|
@@ -201,6 +41,14 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
201
41
|
serialNumber = undefined;
|
|
202
42
|
deviceName = undefined;
|
|
203
43
|
uniqueId = undefined;
|
|
44
|
+
vendorId = undefined;
|
|
45
|
+
vendorName = undefined;
|
|
46
|
+
productId = undefined;
|
|
47
|
+
productName = undefined;
|
|
48
|
+
softwareVersion = undefined;
|
|
49
|
+
softwareVersionString = undefined;
|
|
50
|
+
hardwareVersion = undefined;
|
|
51
|
+
hardwareVersionString = undefined;
|
|
204
52
|
/**
|
|
205
53
|
* Create a Matterbridge device.
|
|
206
54
|
* @constructor
|
|
@@ -282,10 +130,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
282
130
|
*
|
|
283
131
|
* @param {string} endpointName - The name of the new enpoint to add.
|
|
284
132
|
* @param {AtLeastOne<DeviceTypeDefinition>} deviceTypes - The device types to add.
|
|
285
|
-
* @param {ClusterId[]} includeServerList - The list of cluster IDs to include.
|
|
133
|
+
* @param {ClusterId[]} [includeServerList=[]] - The list of cluster IDs to include.
|
|
134
|
+
* @param {EndpointOptions} [options={}] - The options for the device.
|
|
135
|
+
* @param {boolean} [debug=false] - Whether to enable debug logging.
|
|
286
136
|
* @returns {Endpoint} - The child endpoint that was found or added.
|
|
287
137
|
*/
|
|
288
|
-
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
139
|
+
addChildDeviceTypeWithClusterServer(endpointName, deviceTypes, includeServerList = [], options = {}, debug = false) {
|
|
289
140
|
this.log.debug(`addChildDeviceTypeWithClusterServer: ${CYAN}${endpointName}${db}`);
|
|
290
141
|
let child = this.getChildEndpoints().find((endpoint) => endpoint.uniqueStorageKey === endpointName);
|
|
291
142
|
if (!child) {
|
|
@@ -570,6 +421,47 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
570
421
|
log?.info(`${db}Subscribe endpoint ${or}${endpoint.name}:${endpoint.number}${db} attribute ${hk}${clusterServer.name}.${capitalizedAttributeName}${db}`);
|
|
571
422
|
return true;
|
|
572
423
|
}
|
|
424
|
+
/**
|
|
425
|
+
* Adds a tag to the tag list of the specified endpoint.
|
|
426
|
+
*
|
|
427
|
+
* @param {Endpoint} endpoint - The endpoint to add the tag to.
|
|
428
|
+
* @param {VendorId | null} mfgCode - The manufacturer code.
|
|
429
|
+
* @param {number} namespaceId - The namespace ID of the tag.
|
|
430
|
+
* @param {number} tag - The tag number.
|
|
431
|
+
* @param {string | null} [label=null] - The label for the tag.
|
|
432
|
+
*
|
|
433
|
+
* @remarks
|
|
434
|
+
* This method is used to add a tag to the tag list of a given endpoint.
|
|
435
|
+
* If the tag list already exists, the new tag is added to the existing list. Otherwise, a new tag list is created with the provided tag.
|
|
436
|
+
*
|
|
437
|
+
* Example usage:
|
|
438
|
+
* ```typescript
|
|
439
|
+
* this.addTagList(endpoint, null, NumberTag.One.namespaceId, NumberTag.One.tag, 'Label');
|
|
440
|
+
* this.addTagList(endpoint, null, SwitchesTag.Custom.namespaceId, SwitchesTag.Custom.tag, 'Label');
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
addTagList(endpoint, mfgCode, namespaceId, tag, label) {
|
|
444
|
+
const descriptor = endpoint.getClusterServer(DescriptorCluster.with(Descriptor.Feature.TagList));
|
|
445
|
+
if (!descriptor) {
|
|
446
|
+
this.log.error(`addTagList: descriptor cluster not found on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
// tagList: { mfgCode: VendorId | null; namespaceId: number; tag: number; label?: string | null }[] = [];
|
|
450
|
+
if (descriptor.attributes.tagList) {
|
|
451
|
+
this.log.debug(`addTagList: adding ${CYAN}tagList${db} mfCode: ${mfgCode}, namespaceId: ${namespaceId}, tag: ${tag}, label: ${label} on endpoint $${endpoint.name}:${endpoint.number}`);
|
|
452
|
+
const tagList = descriptor.attributes.tagList.getLocal();
|
|
453
|
+
tagList.push({ mfgCode, namespaceId, tag, label });
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
this.log.debug(`addTagList: creating ${CYAN}tagList${db} mfCode: ${mfgCode}, namespaceId: ${namespaceId}, tag: ${tag}, label: ${label} on endpoint $${endpoint.name}:${endpoint.number}`);
|
|
457
|
+
endpoint.addClusterServer(ClusterServer(DescriptorCluster.with(Descriptor.Feature.TagList), {
|
|
458
|
+
tagList: [{ mfgCode, namespaceId, tag, label }],
|
|
459
|
+
deviceTypeList: [...descriptor.attributes.deviceTypeList.getLocal()],
|
|
460
|
+
serverList: [...descriptor.attributes.serverList.getLocal()],
|
|
461
|
+
clientList: [...descriptor.attributes.clientList.getLocal()],
|
|
462
|
+
partsList: [...descriptor.attributes.partsList.getLocal()],
|
|
463
|
+
}, {}, {}));
|
|
464
|
+
}
|
|
573
465
|
/**
|
|
574
466
|
* Serializes the Matterbridge device into a serialized object.
|
|
575
467
|
*
|
|
@@ -721,6 +613,18 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
721
613
|
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
722
614
|
*/
|
|
723
615
|
getDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
616
|
+
this.log.logName = deviceName;
|
|
617
|
+
this.deviceName = deviceName;
|
|
618
|
+
this.serialNumber = serialNumber;
|
|
619
|
+
this.uniqueId = this.createUniqueId(deviceName, serialNumber, vendorName, productName);
|
|
620
|
+
this.productId = productId;
|
|
621
|
+
this.productName = productName;
|
|
622
|
+
this.vendorId = vendorId;
|
|
623
|
+
this.vendorName = vendorName;
|
|
624
|
+
this.softwareVersion = softwareVersion;
|
|
625
|
+
this.softwareVersionString = softwareVersionString;
|
|
626
|
+
this.hardwareVersion = hardwareVersion;
|
|
627
|
+
this.hardwareVersionString = hardwareVersionString;
|
|
724
628
|
return ClusterServer(BasicInformationCluster, {
|
|
725
629
|
dataModelRevision: 1,
|
|
726
630
|
location: 'XX',
|
|
@@ -762,10 +666,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
762
666
|
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
763
667
|
*/
|
|
764
668
|
createDefaultBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productId, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
765
|
-
this.deviceName = deviceName;
|
|
766
|
-
this.serialNumber = serialNumber;
|
|
767
|
-
this.uniqueId = this.createUniqueId(deviceName, serialNumber, vendorName, productName);
|
|
768
669
|
if (MatterbridgeDevice.bridgeMode === 'bridge') {
|
|
670
|
+
this.addDeviceType(bridgedNode);
|
|
769
671
|
this.createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion, softwareVersionString, hardwareVersion, hardwareVersionString);
|
|
770
672
|
return;
|
|
771
673
|
}
|
|
@@ -785,6 +687,18 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
785
687
|
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
786
688
|
*/
|
|
787
689
|
getDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
690
|
+
this.log.logName = deviceName;
|
|
691
|
+
this.deviceName = deviceName;
|
|
692
|
+
this.serialNumber = serialNumber;
|
|
693
|
+
this.uniqueId = this.createUniqueId(deviceName, serialNumber, vendorName, productName);
|
|
694
|
+
this.productId = undefined;
|
|
695
|
+
this.productName = productName;
|
|
696
|
+
this.vendorId = vendorId;
|
|
697
|
+
this.vendorName = vendorName;
|
|
698
|
+
this.softwareVersion = softwareVersion;
|
|
699
|
+
this.softwareVersionString = softwareVersionString;
|
|
700
|
+
this.hardwareVersion = hardwareVersion;
|
|
701
|
+
this.hardwareVersionString = hardwareVersionString;
|
|
788
702
|
return ClusterServer(BridgedDeviceBasicInformationCluster, {
|
|
789
703
|
vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined, // 4874
|
|
790
704
|
vendorName: vendorName.slice(0, 32),
|
|
@@ -819,9 +733,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
819
733
|
* @param hardwareVersionString - The hardware version string of the device. Default is 'v.1.0.0'.
|
|
820
734
|
*/
|
|
821
735
|
createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion = 1, softwareVersionString = '1.0.0', hardwareVersion = 1, hardwareVersionString = '1.0.0') {
|
|
822
|
-
this.deviceName = deviceName;
|
|
823
|
-
this.serialNumber = serialNumber;
|
|
824
|
-
this.uniqueId = this.createUniqueId(deviceName, serialNumber, vendorName, productName);
|
|
825
736
|
this.addClusterServer(this.getDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber, vendorId, vendorName, productName, softwareVersion, softwareVersionString, hardwareVersion, hardwareVersionString));
|
|
826
737
|
}
|
|
827
738
|
/**
|
|
@@ -866,7 +777,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
866
777
|
getDefaultElectricalPowerMeasurementClusterServer(voltage = null, current = null, power = null, frequency = null) {
|
|
867
778
|
return ClusterServer(ElectricalPowerMeasurementCluster.with(ElectricalPowerMeasurement.Feature.AlternatingCurrent), {
|
|
868
779
|
powerMode: ElectricalPowerMeasurement.PowerMode.Ac,
|
|
869
|
-
numberOfMeasurementTypes:
|
|
780
|
+
numberOfMeasurementTypes: 4,
|
|
870
781
|
accuracy: [
|
|
871
782
|
{
|
|
872
783
|
measurementType: MeasurementType.Voltage,
|
|
@@ -973,12 +884,17 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
973
884
|
/**
|
|
974
885
|
* Get a default level control cluster server.
|
|
975
886
|
*
|
|
976
|
-
* @param currentLevel - The current level (default:
|
|
887
|
+
* @param currentLevel - The current level (default: 254).
|
|
888
|
+
* @param minLevel - The minimum level (default: 1).
|
|
889
|
+
* @param maxLevel - The maximum level (default: 254).
|
|
890
|
+
* @param onLevel - The on level (default: null).
|
|
977
891
|
*/
|
|
978
|
-
getDefaultLevelControlClusterServer(currentLevel =
|
|
892
|
+
getDefaultLevelControlClusterServer(currentLevel = 254, minLevel = 1, maxLevel = 254, onLevel = null) {
|
|
979
893
|
return ClusterServer(LevelControlCluster.with(LevelControl.Feature.OnOff), {
|
|
980
894
|
currentLevel,
|
|
981
|
-
|
|
895
|
+
minLevel,
|
|
896
|
+
maxLevel,
|
|
897
|
+
onLevel,
|
|
982
898
|
options: {
|
|
983
899
|
executeIfOff: false,
|
|
984
900
|
coupleColorTempToLevel: false,
|
|
@@ -1015,10 +931,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1015
931
|
/**
|
|
1016
932
|
* Creates a default level control cluster server.
|
|
1017
933
|
*
|
|
1018
|
-
* @param currentLevel - The current level (default:
|
|
934
|
+
* @param currentLevel - The current level (default: 254).
|
|
935
|
+
* @param minLevel - The minimum level (default: 1).
|
|
936
|
+
* @param maxLevel - The maximum level (default: 254).
|
|
937
|
+
* @param onLevel - The on level (default: null).
|
|
1019
938
|
*/
|
|
1020
|
-
createDefaultLevelControlClusterServer(currentLevel =
|
|
1021
|
-
this.addClusterServer(this.getDefaultLevelControlClusterServer(currentLevel));
|
|
939
|
+
createDefaultLevelControlClusterServer(currentLevel = 254, minLevel = 1, maxLevel = 254, onLevel = null) {
|
|
940
|
+
this.addClusterServer(this.getDefaultLevelControlClusterServer(currentLevel, minLevel, maxLevel, onLevel));
|
|
1022
941
|
}
|
|
1023
942
|
/**
|
|
1024
943
|
* Get a default color control cluster server.
|
|
@@ -1538,7 +1457,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1538
1457
|
/**
|
|
1539
1458
|
* Get a default flow measurement cluster server.
|
|
1540
1459
|
*
|
|
1541
|
-
* @param measuredValue - The measured value of the
|
|
1460
|
+
* @param measuredValue - The measured value of the flow in 10 x m/h.
|
|
1542
1461
|
*/
|
|
1543
1462
|
getDefaultFlowMeasurementClusterServer(measuredValue = 0) {
|
|
1544
1463
|
return ClusterServer(FlowMeasurementCluster, {
|
|
@@ -1551,7 +1470,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1551
1470
|
/**
|
|
1552
1471
|
* Creates a default flow measurement cluster server.
|
|
1553
1472
|
*
|
|
1554
|
-
* @param measuredValue - The measured value of the
|
|
1473
|
+
* @param measuredValue - The measured value of the of the flow in 10 x m/h.
|
|
1555
1474
|
*/
|
|
1556
1475
|
createDefaultFlowMeasurementClusterServer(measuredValue = 0) {
|
|
1557
1476
|
this.addClusterServer(this.getDefaultFlowMeasurementClusterServer(measuredValue));
|
|
@@ -1559,7 +1478,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1559
1478
|
/**
|
|
1560
1479
|
* Get a default temperature measurement cluster server.
|
|
1561
1480
|
*
|
|
1562
|
-
* @param measuredValue - The measured value of the temperature.
|
|
1481
|
+
* @param measuredValue - The measured value of the temperature x 100.
|
|
1563
1482
|
*/
|
|
1564
1483
|
getDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
|
|
1565
1484
|
return ClusterServer(TemperatureMeasurementCluster, {
|
|
@@ -1572,7 +1491,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1572
1491
|
/**
|
|
1573
1492
|
* Creates a default temperature measurement cluster server.
|
|
1574
1493
|
*
|
|
1575
|
-
* @param measuredValue - The measured value of the temperature.
|
|
1494
|
+
* @param measuredValue - The measured value of the temperature x 100.
|
|
1576
1495
|
*/
|
|
1577
1496
|
createDefaultTemperatureMeasurementClusterServer(measuredValue = 0) {
|
|
1578
1497
|
this.addClusterServer(this.getDefaultTemperatureMeasurementClusterServer(measuredValue));
|
|
@@ -1580,7 +1499,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1580
1499
|
/**
|
|
1581
1500
|
* Get a default RelativeHumidityMeasurementCluster server.
|
|
1582
1501
|
*
|
|
1583
|
-
* @param measuredValue - The measured value of the relative humidity.
|
|
1502
|
+
* @param measuredValue - The measured value of the relative humidity x 100.
|
|
1584
1503
|
*/
|
|
1585
1504
|
getDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
|
|
1586
1505
|
return ClusterServer(RelativeHumidityMeasurementCluster, {
|
|
@@ -1593,7 +1512,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1593
1512
|
/**
|
|
1594
1513
|
* Creates a default RelativeHumidityMeasurementCluster server.
|
|
1595
1514
|
*
|
|
1596
|
-
* @param measuredValue - The measured value of the relative humidity.
|
|
1515
|
+
* @param measuredValue - The measured value of the relative humidity x 100.
|
|
1597
1516
|
*/
|
|
1598
1517
|
createDefaultRelativeHumidityMeasurementClusterServer(measuredValue = 0) {
|
|
1599
1518
|
this.addClusterServer(this.getDefaultRelativeHumidityMeasurementClusterServer(measuredValue));
|
|
@@ -1814,6 +1733,80 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1814
1733
|
createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
|
|
1815
1734
|
this.addClusterServer(this.getDefaultTvocMeasurementClusterServer(measuredValue, measurementUnit, measurementMedium));
|
|
1816
1735
|
}
|
|
1736
|
+
/**
|
|
1737
|
+
* Get a default heating thermostat cluster server with the specified parameters.
|
|
1738
|
+
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1739
|
+
* @param {number} [occupiedHeatingSetpoint] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
|
|
1740
|
+
* @param {number} [minHeatSetpointLimit] - The minimum heat setpoint limit value. Defaults to 0°.
|
|
1741
|
+
* @param {number} [maxHeatSetpointLimit] - The maximum heat setpoint limit value. Defaults to 50°.
|
|
1742
|
+
* @returns {ThermostatClusterServer} A default thermostat cluster server configured with the specified parameters.
|
|
1743
|
+
*/
|
|
1744
|
+
getDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
|
|
1745
|
+
return ClusterServer(ThermostatCluster.with(Thermostat.Feature.Heating), {
|
|
1746
|
+
localTemperature: localTemperature * 100,
|
|
1747
|
+
systemMode: Thermostat.SystemMode.Heat,
|
|
1748
|
+
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.HeatingOnly,
|
|
1749
|
+
// Thermostat.Feature.Heating
|
|
1750
|
+
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1751
|
+
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1752
|
+
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1753
|
+
absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1754
|
+
absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1755
|
+
}, {
|
|
1756
|
+
setpointRaiseLower: async ({ request, attributes }) => {
|
|
1757
|
+
this.log.debug('Matter command: setpointRaiseLower', request);
|
|
1758
|
+
await this.commandHandler.executeHandler('setpointRaiseLower', { request, attributes });
|
|
1759
|
+
},
|
|
1760
|
+
}, {});
|
|
1761
|
+
}
|
|
1762
|
+
/**
|
|
1763
|
+
* Creates and adds a default heating thermostat cluster server to the device.
|
|
1764
|
+
*
|
|
1765
|
+
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1766
|
+
* @param {number} [occupiedHeatingSetpoint] - The occupied heating setpoint value in degrees Celsius. Defaults to 21°.
|
|
1767
|
+
* @param {number} [minHeatSetpointLimit] - The minimum heat setpoint limit value. Defaults to 0°.
|
|
1768
|
+
* @param {number} [maxHeatSetpointLimit] - The maximum heat setpoint limit value. Defaults to 50°.
|
|
1769
|
+
*/
|
|
1770
|
+
createDefaultHeatingThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 25, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50) {
|
|
1771
|
+
this.addClusterServer(this.getDefaultHeatingThermostatClusterServer(localTemperature, occupiedHeatingSetpoint, minHeatSetpointLimit, maxHeatSetpointLimit));
|
|
1772
|
+
}
|
|
1773
|
+
/**
|
|
1774
|
+
* Get a default cooling thermostat cluster server with the specified parameters.
|
|
1775
|
+
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1776
|
+
* @param {number} [occupiedCoolingSetpoint] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
|
|
1777
|
+
* @param {number} [minCoolSetpointLimit] - The minimum cool setpoint limit value. Defaults to 0°.
|
|
1778
|
+
* @param {number} [maxCoolSetpointLimit] - The maximum cool setpoint limit value. Defaults to 50°.
|
|
1779
|
+
* @returns {ThermostatClusterServer} A default thermostat cluster server configured with the specified parameters.
|
|
1780
|
+
*/
|
|
1781
|
+
getDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1782
|
+
return ClusterServer(ThermostatCluster.with(Thermostat.Feature.Cooling), {
|
|
1783
|
+
localTemperature: localTemperature * 100,
|
|
1784
|
+
systemMode: Thermostat.SystemMode.Cool,
|
|
1785
|
+
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingOnly,
|
|
1786
|
+
// Thermostat.Feature.Cooling
|
|
1787
|
+
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1788
|
+
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1789
|
+
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1790
|
+
absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1791
|
+
absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1792
|
+
}, {
|
|
1793
|
+
setpointRaiseLower: async ({ request, attributes }) => {
|
|
1794
|
+
this.log.debug('Matter command: setpointRaiseLower', request);
|
|
1795
|
+
await this.commandHandler.executeHandler('setpointRaiseLower', { request, attributes });
|
|
1796
|
+
},
|
|
1797
|
+
}, {});
|
|
1798
|
+
}
|
|
1799
|
+
/**
|
|
1800
|
+
* Creates and adds a default cooling thermostat cluster server to the device.
|
|
1801
|
+
*
|
|
1802
|
+
* @param {number} [localTemperature] - The local temperature value in degrees Celsius. Defaults to 23°.
|
|
1803
|
+
* @param {number} [occupiedCoolingSetpoint] - The occupied cooling setpoint value in degrees Celsius. Defaults to 25°.
|
|
1804
|
+
* @param {number} [minCoolSetpointLimit] - The minimum cool setpoint limit value. Defaults to 0°.
|
|
1805
|
+
* @param {number} [maxCoolSetpointLimit] - The maximum cool setpoint limit value. Defaults to 50°.
|
|
1806
|
+
*/
|
|
1807
|
+
createDefaultCoolingThermostatClusterServer(localTemperature = 23, occupiedCoolingSetpoint = 25, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1808
|
+
this.addClusterServer(this.getDefaultCoolingThermostatClusterServer(localTemperature, occupiedCoolingSetpoint, minCoolSetpointLimit, maxCoolSetpointLimit));
|
|
1809
|
+
}
|
|
1817
1810
|
/**
|
|
1818
1811
|
* Get a default thermostat cluster server with the specified parameters.
|
|
1819
1812
|
*
|
|
@@ -1830,19 +1823,22 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1830
1823
|
getDefaultThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 1, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50) {
|
|
1831
1824
|
return ClusterServer(ThermostatCluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode), {
|
|
1832
1825
|
localTemperature: localTemperature * 100,
|
|
1826
|
+
systemMode: Thermostat.SystemMode.Auto,
|
|
1827
|
+
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
|
|
1828
|
+
// Thermostat.Feature.Heating
|
|
1833
1829
|
occupiedHeatingSetpoint: occupiedHeatingSetpoint * 100,
|
|
1834
|
-
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1835
1830
|
minHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1836
1831
|
maxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1837
1832
|
absMinHeatSetpointLimit: minHeatSetpointLimit * 100,
|
|
1838
1833
|
absMaxHeatSetpointLimit: maxHeatSetpointLimit * 100,
|
|
1834
|
+
// Thermostat.Feature.Cooling
|
|
1835
|
+
occupiedCoolingSetpoint: occupiedCoolingSetpoint * 100,
|
|
1839
1836
|
minCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1840
1837
|
maxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1841
1838
|
absMinCoolSetpointLimit: minCoolSetpointLimit * 100,
|
|
1842
1839
|
absMaxCoolSetpointLimit: maxCoolSetpointLimit * 100,
|
|
1840
|
+
// Thermostat.Feature.AutoMode
|
|
1843
1841
|
minSetpointDeadBand: minSetpointDeadBand * 100,
|
|
1844
|
-
systemMode: Thermostat.SystemMode.Off,
|
|
1845
|
-
controlSequenceOfOperation: Thermostat.ControlSequenceOfOperation.CoolingAndHeating,
|
|
1846
1842
|
thermostatRunningMode: Thermostat.ThermostatRunningMode.Off,
|
|
1847
1843
|
}, {
|
|
1848
1844
|
setpointRaiseLower: async ({ request, attributes }) => {
|