matterbridge 1.5.2 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +31 -2
  2. package/README-DEV.md +4 -2
  3. package/dist/cluster/export.d.ts +1 -22
  4. package/dist/cluster/export.d.ts.map +1 -1
  5. package/dist/cluster/export.js +2 -22
  6. package/dist/cluster/export.js.map +1 -1
  7. package/dist/index.d.ts +3 -25
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -32
  10. package/dist/index.js.map +1 -1
  11. package/dist/matterbridge.d.ts +3 -1
  12. package/dist/matterbridge.d.ts.map +1 -1
  13. package/dist/matterbridge.js +127 -20
  14. package/dist/matterbridge.js.map +1 -1
  15. package/dist/matterbridgeDevice.d.ts +4608 -2298
  16. package/dist/matterbridgeDevice.d.ts.map +1 -1
  17. package/dist/matterbridgeDevice.js +170 -582
  18. package/dist/matterbridgeDevice.js.map +1 -1
  19. package/dist/matterbridgeTypes.d.ts +3 -0
  20. package/dist/matterbridgeTypes.d.ts.map +1 -1
  21. package/dist/pluginManager.d.ts.map +1 -1
  22. package/dist/pluginManager.js +20 -4
  23. package/dist/pluginManager.js.map +1 -1
  24. package/frontend/build/asset-manifest.json +3 -3
  25. package/frontend/build/index.html +1 -1
  26. package/frontend/build/static/js/{main.cfcfbb06.js → main.f86befcf.js} +3 -3
  27. package/frontend/build/static/js/main.f86befcf.js.map +1 -0
  28. package/package.json +13 -8
  29. package/dist/cluster/AirQualityCluster.d.ts +0 -188
  30. package/dist/cluster/AirQualityCluster.d.ts.map +0 -1
  31. package/dist/cluster/AirQualityCluster.js +0 -98
  32. package/dist/cluster/AirQualityCluster.js.map +0 -1
  33. package/dist/cluster/BooleanStateConfigurationCluster.d.ts +0 -2200
  34. package/dist/cluster/BooleanStateConfigurationCluster.d.ts.map +0 -1
  35. package/dist/cluster/BooleanStateConfigurationCluster.js +0 -388
  36. package/dist/cluster/BooleanStateConfigurationCluster.js.map +0 -1
  37. package/dist/cluster/BridgedDeviceBasicInformationCluster.d.ts +0 -223
  38. package/dist/cluster/BridgedDeviceBasicInformationCluster.d.ts.map +0 -1
  39. package/dist/cluster/BridgedDeviceBasicInformationCluster.js +0 -177
  40. package/dist/cluster/BridgedDeviceBasicInformationCluster.js.map +0 -1
  41. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.d.ts +0 -396
  42. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.d.ts.map +0 -1
  43. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.js +0 -30
  44. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.js.map +0 -1
  45. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.d.ts +0 -396
  46. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.d.ts.map +0 -1
  47. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.js +0 -30
  48. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.js.map +0 -1
  49. package/dist/cluster/ConcentrationMeasurementCluster.d.ts +0 -524
  50. package/dist/cluster/ConcentrationMeasurementCluster.d.ts.map +0 -1
  51. package/dist/cluster/ConcentrationMeasurementCluster.js +0 -282
  52. package/dist/cluster/ConcentrationMeasurementCluster.js.map +0 -1
  53. package/dist/cluster/DeviceEnergyManagementCluster.d.ts +0 -7851
  54. package/dist/cluster/DeviceEnergyManagementCluster.d.ts.map +0 -1
  55. package/dist/cluster/DeviceEnergyManagementCluster.js +0 -1634
  56. package/dist/cluster/DeviceEnergyManagementCluster.js.map +0 -1
  57. package/dist/cluster/DeviceEnergyManagementModeCluster.d.ts +0 -68
  58. package/dist/cluster/DeviceEnergyManagementModeCluster.d.ts.map +0 -1
  59. package/dist/cluster/DeviceEnergyManagementModeCluster.js +0 -49
  60. package/dist/cluster/DeviceEnergyManagementModeCluster.js.map +0 -1
  61. package/dist/cluster/ElectricalEnergyMeasurementCluster.d.ts +0 -4978
  62. package/dist/cluster/ElectricalEnergyMeasurementCluster.d.ts.map +0 -1
  63. package/dist/cluster/ElectricalEnergyMeasurementCluster.js +0 -510
  64. package/dist/cluster/ElectricalEnergyMeasurementCluster.js.map +0 -1
  65. package/dist/cluster/ElectricalPowerMeasurementCluster.d.ts +0 -3250
  66. package/dist/cluster/ElectricalPowerMeasurementCluster.d.ts.map +0 -1
  67. package/dist/cluster/ElectricalPowerMeasurementCluster.js +0 -675
  68. package/dist/cluster/ElectricalPowerMeasurementCluster.js.map +0 -1
  69. package/dist/cluster/FanControlCluster.d.ts +0 -1583
  70. package/dist/cluster/FanControlCluster.d.ts.map +0 -1
  71. package/dist/cluster/FanControlCluster.js +0 -492
  72. package/dist/cluster/FanControlCluster.js.map +0 -1
  73. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.d.ts +0 -396
  74. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.d.ts.map +0 -1
  75. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.js +0 -30
  76. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.js.map +0 -1
  77. package/dist/cluster/MeasurementAccuracy.d.ts +0 -63
  78. package/dist/cluster/MeasurementAccuracy.d.ts.map +0 -1
  79. package/dist/cluster/MeasurementAccuracy.js +0 -47
  80. package/dist/cluster/MeasurementAccuracy.js.map +0 -1
  81. package/dist/cluster/MeasurementAccuracyRange.d.ts +0 -134
  82. package/dist/cluster/MeasurementAccuracyRange.d.ts.map +0 -1
  83. package/dist/cluster/MeasurementAccuracyRange.js +0 -103
  84. package/dist/cluster/MeasurementAccuracyRange.js.map +0 -1
  85. package/dist/cluster/MeasurementType.d.ts +0 -68
  86. package/dist/cluster/MeasurementType.d.ts.map +0 -1
  87. package/dist/cluster/MeasurementType.js +0 -69
  88. package/dist/cluster/MeasurementType.js.map +0 -1
  89. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.d.ts +0 -396
  90. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.d.ts.map +0 -1
  91. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.js +0 -34
  92. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.js.map +0 -1
  93. package/dist/cluster/OzoneConcentrationMeasurementCluster.d.ts +0 -395
  94. package/dist/cluster/OzoneConcentrationMeasurementCluster.d.ts.map +0 -1
  95. package/dist/cluster/OzoneConcentrationMeasurementCluster.js +0 -29
  96. package/dist/cluster/OzoneConcentrationMeasurementCluster.js.map +0 -1
  97. package/dist/cluster/Pm10ConcentrationMeasurementCluster.d.ts +0 -395
  98. package/dist/cluster/Pm10ConcentrationMeasurementCluster.d.ts.map +0 -1
  99. package/dist/cluster/Pm10ConcentrationMeasurementCluster.js +0 -29
  100. package/dist/cluster/Pm10ConcentrationMeasurementCluster.js.map +0 -1
  101. package/dist/cluster/Pm1ConcentrationMeasurementCluster.d.ts +0 -395
  102. package/dist/cluster/Pm1ConcentrationMeasurementCluster.d.ts.map +0 -1
  103. package/dist/cluster/Pm1ConcentrationMeasurementCluster.js +0 -29
  104. package/dist/cluster/Pm1ConcentrationMeasurementCluster.js.map +0 -1
  105. package/dist/cluster/Pm25ConcentrationMeasurementCluster.d.ts +0 -395
  106. package/dist/cluster/Pm25ConcentrationMeasurementCluster.d.ts.map +0 -1
  107. package/dist/cluster/Pm25ConcentrationMeasurementCluster.js +0 -29
  108. package/dist/cluster/Pm25ConcentrationMeasurementCluster.js.map +0 -1
  109. package/dist/cluster/PowerTopologyCluster.d.ts +0 -345
  110. package/dist/cluster/PowerTopologyCluster.d.ts.map +0 -1
  111. package/dist/cluster/PowerTopologyCluster.js +0 -138
  112. package/dist/cluster/PowerTopologyCluster.js.map +0 -1
  113. package/dist/cluster/RadonConcentrationMeasurementCluster.d.ts +0 -395
  114. package/dist/cluster/RadonConcentrationMeasurementCluster.d.ts.map +0 -1
  115. package/dist/cluster/RadonConcentrationMeasurementCluster.js +0 -29
  116. package/dist/cluster/RadonConcentrationMeasurementCluster.js.map +0 -1
  117. package/dist/cluster/SmokeCoAlarmCluster.d.ts +0 -1575
  118. package/dist/cluster/SmokeCoAlarmCluster.d.ts.map +0 -1
  119. package/dist/cluster/SmokeCoAlarmCluster.js +0 -603
  120. package/dist/cluster/SmokeCoAlarmCluster.js.map +0 -1
  121. package/dist/cluster/TvocCluster.d.ts +0 -465
  122. package/dist/cluster/TvocCluster.d.ts.map +0 -1
  123. package/dist/cluster/TvocCluster.js +0 -197
  124. package/dist/cluster/TvocCluster.js.map +0 -1
  125. package/frontend/build/static/js/main.cfcfbb06.js.map +0 -1
  126. /package/frontend/build/static/js/{main.cfcfbb06.js.LICENSE.txt → main.f86befcf.js.LICENSE.txt} +0 -0
@@ -4,9 +4,9 @@
4
4
  * @file matterbridgeDevice.ts
5
5
  * @author Luca Liguori
6
6
  * @date 2023-12-29
7
- * @version 1.2.0
7
+ * @version 2.0.0
8
8
  *
9
- * Copyright 2023, 2024 Luca Liguori.
9
+ * Copyright 2023, 2024, 2025 Luca Liguori.
10
10
  *
11
11
  * Licensed under the Apache License, Version 2.0 (the "License");
12
12
  * you may not use this file except in compliance with the License.
@@ -20,35 +20,14 @@
20
20
  * See the License for the specific language governing permissions and
21
21
  * limitations under the License. *
22
22
  */
23
- import { BasicInformationCluster, BooleanState, BooleanStateCluster, ClusterServer, ColorControl, ColorControlCluster, DoorLock, DoorLockCluster, FanControl, FanControlCluster, FixedLabelCluster, FlowMeasurement, FlowMeasurementCluster, Groups, GroupsCluster, GroupsClusterHandler, Identify, IdentifyCluster, IlluminanceMeasurement, IlluminanceMeasurementCluster, LevelControl, LevelControlCluster, ModeSelectCluster, OccupancySensing, OccupancySensingCluster, OnOff, OnOffCluster, PowerSource, PowerSourceCluster, PowerSourceConfigurationCluster, PressureMeasurement, PressureMeasurementCluster, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, Scenes, ScenesCluster, ScenesClusterHandler, Switch, SwitchCluster, TemperatureMeasurement, TemperatureMeasurementCluster, Thermostat, ThermostatCluster, ThreadNetworkDiagnostics, ThreadNetworkDiagnosticsCluster, TimeSync, TimeSyncCluster, WindowCovering, WindowCoveringCluster, getClusterNameById, } from '@project-chip/matter-node.js/cluster';
24
- import { EndpointNumber, GroupId, VendorId } from '@project-chip/matter-node.js/datatype';
23
+ import { AirQuality, AirQualityCluster, BasicInformationCluster, BooleanState, BooleanStateCluster, BooleanStateConfiguration, BooleanStateConfigurationCluster, BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster, CarbonDioxideConcentrationMeasurement, CarbonDioxideConcentrationMeasurementCluster, CarbonMonoxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurementCluster, ClusterServer, ColorControl, ColorControlCluster, ConcentrationMeasurement, DeviceEnergyManagement, DeviceEnergyManagementCluster, DeviceEnergyManagementMode, DeviceEnergyManagementModeCluster, DoorLock, DoorLockCluster, ElectricalEnergyMeasurement, ElectricalEnergyMeasurementCluster, ElectricalPowerMeasurement, ElectricalPowerMeasurementCluster, FanControl, FanControlCluster, FixedLabelCluster, FlowMeasurement, FlowMeasurementCluster, FormaldehydeConcentrationMeasurement, FormaldehydeConcentrationMeasurementCluster, Groups, GroupsCluster, GroupsClusterHandler, Identify, IdentifyCluster, IlluminanceMeasurement, IlluminanceMeasurementCluster, LevelControl, LevelControlCluster, MeasurementType, 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, getClusterNameById, } from '@project-chip/matter-node.js/cluster';
24
+ import { Specification } from '@project-chip/matter-node.js/model';
25
+ import { EndpointNumber, VendorId } from '@project-chip/matter-node.js/datatype';
25
26
  import { Device, DeviceClasses, DeviceTypeDefinition, Endpoint } from '@project-chip/matter-node.js/device';
26
27
  import { extendPublicHandlerMethods } from '@project-chip/matter-node.js/util';
27
28
  import { EveHistory, MatterHistory } from 'matter-history';
28
29
  import { AnsiLogger, CYAN, YELLOW, db, debugStringify, hk, or, zb } from 'node-ansi-logger';
29
- import { AirQuality, AirQualityCluster } from './cluster/AirQualityCluster.js';
30
30
  import { createHash } from 'crypto';
31
- import { TvocMeasurement, TvocMeasurementCluster } from './cluster/TvocCluster.js';
32
- import { BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster } from './cluster/BridgedDeviceBasicInformationCluster.js';
33
- import { PowerTopology, PowerTopologyCluster } from './cluster/PowerTopologyCluster.js';
34
- import { ElectricalPowerMeasurement, ElectricalPowerMeasurementCluster } from './cluster/ElectricalPowerMeasurementCluster.js';
35
- import { ElectricalEnergyMeasurement, ElectricalEnergyMeasurementCluster } from './cluster/ElectricalEnergyMeasurementCluster.js';
36
- import { MeasurementType } from './cluster/MeasurementType.js';
37
- import { CarbonMonoxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurementCluster } from './cluster/CarbonMonoxideConcentrationMeasurementCluster.js';
38
- import { SmokeCoAlarm, SmokeCoAlarmCluster } from './cluster/SmokeCoAlarmCluster.js';
39
- import { BooleanStateConfiguration, BooleanStateConfigurationCluster } from './cluster/BooleanStateConfigurationCluster.js';
40
- import { DeviceEnergyManagement, DeviceEnergyManagementCluster } from './cluster/DeviceEnergyManagementCluster.js';
41
- import { DeviceEnergyManagementMode, DeviceEnergyManagementModeCluster } from './cluster/DeviceEnergyManagementModeCluster.js';
42
- // import { FanControl, FanControlCluster } from './cluster/FanControlCluster.js';
43
- import { ConcentrationMeasurement } from './cluster/ConcentrationMeasurementCluster.js';
44
- import { CarbonDioxideConcentrationMeasurement, CarbonDioxideConcentrationMeasurementCluster } from './cluster/CarbonDioxideConcentrationMeasurementCluster.js';
45
- import { OzoneConcentrationMeasurement, OzoneConcentrationMeasurementCluster } from './cluster/OzoneConcentrationMeasurementCluster.js';
46
- import { Pm1ConcentrationMeasurement, Pm1ConcentrationMeasurementCluster } from './cluster/Pm1ConcentrationMeasurementCluster.js';
47
- import { Pm25ConcentrationMeasurement, Pm25ConcentrationMeasurementCluster } from './cluster/Pm25ConcentrationMeasurementCluster.js';
48
- import { Pm10ConcentrationMeasurement, Pm10ConcentrationMeasurementCluster } from './cluster/Pm10ConcentrationMeasurementCluster.js';
49
- import { RadonConcentrationMeasurement, RadonConcentrationMeasurementCluster } from './cluster/RadonConcentrationMeasurementCluster.js';
50
- import { NitrogenDioxideConcentrationMeasurement, NitrogenDioxideConcentrationMeasurementCluster } from './cluster/NitrogenDioxideConcentrationMeasurementCluster.js';
51
- import { FormaldehydeConcentrationMeasurement, FormaldehydeConcentrationMeasurementCluster } from './cluster/FormaldehydeConcentrationMeasurementCluster.js';
52
31
  // Matter 1.2 and 1.3 device types
53
32
  export const airQualitySensor = DeviceTypeDefinition({
54
33
  name: 'MA-airQualitySensor',
@@ -68,7 +47,7 @@ export const airQualitySensor = DeviceTypeDefinition({
68
47
  Pm25ConcentrationMeasurement.Cluster.id,
69
48
  Pm10ConcentrationMeasurement.Cluster.id,
70
49
  RadonConcentrationMeasurement.Cluster.id,
71
- TvocMeasurement.Cluster.id,
50
+ TotalVolatileOrganicCompoundsConcentrationMeasurement.Cluster.id,
72
51
  ],
73
52
  });
74
53
  export const waterFreezeDetector = DeviceTypeDefinition({
@@ -135,13 +114,61 @@ export const bridgedNode = DeviceTypeDefinition({
135
114
  requiredServerClusters: [BridgedDeviceBasicInformation.Cluster.id],
136
115
  optionalServerClusters: [PowerSource.Cluster.id],
137
116
  });
117
+ export const genericSwitch = DeviceTypeDefinition({
118
+ name: 'MA-genericswitch',
119
+ code: 0x000f,
120
+ deviceClass: DeviceClasses.Simple,
121
+ revision: 1,
122
+ requiredServerClusters: [IdentifyCluster.id, SwitchCluster.id],
123
+ optionalServerClusters: [FixedLabelCluster.id],
124
+ });
125
+ export const onOffLight = DeviceTypeDefinition({
126
+ name: 'MA-onofflight',
127
+ code: 0x0100,
128
+ deviceClass: DeviceClasses.Simple,
129
+ revision: 2,
130
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
131
+ optionalServerClusters: [LevelControl.Cluster.id, ColorControl.Cluster.id],
132
+ });
133
+ export const dimmableLight = DeviceTypeDefinition({
134
+ name: 'MA-dimmablelight',
135
+ code: 0x0101,
136
+ deviceClass: DeviceClasses.Simple,
137
+ revision: 2,
138
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
139
+ optionalServerClusters: [ColorControl.Cluster.id],
140
+ });
141
+ export const colorTemperatureLight = DeviceTypeDefinition({
142
+ name: 'MA-colortemperaturelight',
143
+ code: 0x010c,
144
+ deviceClass: DeviceClasses.Simple,
145
+ revision: 2,
146
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
147
+ optionalServerClusters: [],
148
+ });
149
+ export const onOffOutlet = DeviceTypeDefinition({
150
+ name: 'MA-onoffpluginunit',
151
+ code: 0x010a,
152
+ deviceClass: DeviceClasses.Simple,
153
+ revision: 2,
154
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
155
+ optionalServerClusters: [LevelControl.Cluster.id],
156
+ });
157
+ export const dimmableOutlet = DeviceTypeDefinition({
158
+ name: 'MA-dimmablepluginunit',
159
+ code: 0x010b,
160
+ deviceClass: DeviceClasses.Simple,
161
+ revision: 2,
162
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
163
+ optionalServerClusters: [],
164
+ });
138
165
  // Custom device types: switch without ClientClusters
139
166
  export const onOffSwitch = DeviceTypeDefinition({
140
167
  name: 'MA-onoffswitch',
141
168
  code: 0x0103,
142
169
  deviceClass: DeviceClasses.Simple,
143
170
  revision: 2,
144
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, Scenes.Cluster.id, OnOff.Cluster.id],
171
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id],
145
172
  optionalServerClusters: [LevelControl.Cluster.id, ColorControl.Cluster.id],
146
173
  });
147
174
  export const dimmableSwitch = DeviceTypeDefinition({
@@ -149,7 +176,7 @@ export const dimmableSwitch = DeviceTypeDefinition({
149
176
  code: 0x0104,
150
177
  deviceClass: DeviceClasses.Simple,
151
178
  revision: 2,
152
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, Scenes.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id],
179
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id],
153
180
  optionalServerClusters: [ColorControl.Cluster.id],
154
181
  });
155
182
  export const colorTemperatureSwitch = DeviceTypeDefinition({
@@ -157,7 +184,7 @@ export const colorTemperatureSwitch = DeviceTypeDefinition({
157
184
  code: 0x0105,
158
185
  deviceClass: DeviceClasses.Simple,
159
186
  revision: 2,
160
- requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, Scenes.Cluster.id, OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
187
+ requiredServerClusters: [Identify.Cluster.id, Groups.Cluster.id, /* Scenes.Cluster.id,*/ OnOff.Cluster.id, LevelControl.Cluster.id, ColorControl.Cluster.id],
161
188
  optionalServerClusters: [],
162
189
  });
163
190
  export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
@@ -402,8 +429,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
402
429
  endpoint.addClusterServer(this.getDefaultIdentifyClusterServer());
403
430
  if (includeServerList.includes(Groups.Cluster.id))
404
431
  endpoint.addClusterServer(this.getDefaultGroupsClusterServer());
405
- if (includeServerList.includes(Scenes.Cluster.id))
406
- endpoint.addClusterServer(this.getDefaultScenesClusterServer());
432
+ // if (includeServerList.includes(ScenesManagement.Cluster.id)) endpoint.addClusterServer(this.getDefaultScenesClusterServer());
407
433
  if (includeServerList.includes(OnOff.Cluster.id))
408
434
  endpoint.addClusterServer(this.getDefaultOnOffClusterServer());
409
435
  if (includeServerList.includes(LevelControl.Cluster.id))
@@ -416,7 +442,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
416
442
  endpoint.addClusterServer(this.getDefaultDoorLockClusterServer());
417
443
  if (includeServerList.includes(Thermostat.Cluster.id))
418
444
  endpoint.addClusterServer(this.getDefaultThermostatClusterServer());
419
- if (includeServerList.includes(TimeSync.Cluster.id))
445
+ if (includeServerList.includes(TimeSynchronization.Cluster.id))
420
446
  endpoint.addClusterServer(this.getDefaultTimeSyncClusterServer());
421
447
  if (includeServerList.includes(WindowCovering.Cluster.id))
422
448
  endpoint.addClusterServer(this.getDefaultWindowCoveringClusterServer());
@@ -440,7 +466,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
440
466
  endpoint.addClusterServer(this.getDefaultPowerSourceWiredClusterServer());
441
467
  if (includeServerList.includes(EveHistory.Cluster.id))
442
468
  endpoint.addClusterServer(MatterHistory.getEveHistoryClusterServer());
443
- // if (includeServerList.includes(ElectricalMeasurement.Cluster.id)) endpoint.addClusterServer(this.getDefaultElectricalMeasurementClusterServer());
444
469
  if (includeServerList.includes(PowerTopology.Cluster.id))
445
470
  endpoint.addClusterServer(this.getDefaultPowerTopologyClusterServer());
446
471
  if (includeServerList.includes(ElectricalPowerMeasurement.Cluster.id))
@@ -469,7 +494,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
469
494
  endpoint.addClusterServer(this.getDefaultPm10ConcentrationMeasurementClusterServer());
470
495
  if (includeServerList.includes(RadonConcentrationMeasurement.Cluster.id))
471
496
  endpoint.addClusterServer(this.getDefaultRadonConcentrationMeasurementClusterServer());
472
- if (includeServerList.includes(TvocMeasurement.Cluster.id))
497
+ if (includeServerList.includes(TotalVolatileOrganicCompoundsConcentrationMeasurement.Cluster.id))
473
498
  endpoint.addClusterServer(this.getDefaultTvocMeasurementClusterServer());
474
499
  if (includeServerList.includes(FanControl.Cluster.id))
475
500
  endpoint.addClusterServer(this.getDefaultFanControlClusterServer());
@@ -631,6 +656,44 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
631
656
  `to ${YELLOW}${typeof value === 'object' ? debugStringify(value) : value}${db}`);
632
657
  return true;
633
658
  }
659
+ /**
660
+ * Subscribes to an attribute on a cluster.
661
+ *
662
+ * @param {ClusterId} clusterId - The ID of the cluster.
663
+ * @param {string} attribute - The name of the attribute to subscribe to.
664
+ * @param {(newValue: any, oldValue: any) => void} listener - A callback function that will be called when the attribute value changes.
665
+ * @param {AnsiLogger} log - (Optional) An AnsiLogger instance for logging errors and information.
666
+ * @param {Endpoint} endpoint - (Optional) The endpoint to subscribe the attribute on. If not provided, the current endpoint will be used.
667
+ * @returns A boolean indicating whether the subscription was successful.
668
+ */
669
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
670
+ subscribeAttribute(clusterId, attribute, listener, log, endpoint) {
671
+ if (!endpoint)
672
+ endpoint = this;
673
+ const clusterServer = endpoint.getClusterServerById(clusterId);
674
+ if (!clusterServer) {
675
+ log?.error(`subscribeAttribute error: Cluster ${clusterId} not found on endpoint ${endpoint.name}:${endpoint.number}`);
676
+ return false;
677
+ }
678
+ const capitalizedAttributeName = attribute.charAt(0).toUpperCase() + attribute.slice(1);
679
+ if (!clusterServer.isAttributeSupportedByName(attribute) && !clusterServer.isAttributeSupportedByName(capitalizedAttributeName)) {
680
+ if (log)
681
+ log.error(`subscribeAttribute error: Attribute ${attribute} not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
682
+ return false;
683
+ }
684
+ // Find the subscribe method
685
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
686
+ if (!clusterServer[`subscribe${capitalizedAttributeName}Attribute`]) {
687
+ log?.error(`subscribeAttribute error: subscribe${capitalizedAttributeName}Attribute not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
688
+ return false;
689
+ }
690
+ // Subscribe to the attribute
691
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type
692
+ const subscribe = clusterServer[`subscribe${capitalizedAttributeName}Attribute`];
693
+ subscribe(listener);
694
+ log?.info(`${db}Subscribe endpoint ${or}${endpoint.name}:${endpoint.number}${db} attribute ${hk}${clusterServer.name}.${capitalizedAttributeName}${db}`);
695
+ return true;
696
+ }
634
697
  /**
635
698
  * Serializes the Matterbridge device into a serialized object.
636
699
  *
@@ -648,7 +711,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
648
711
  serialNumber: this.serialNumber,
649
712
  deviceName: this.deviceName,
650
713
  uniqueId: this.uniqueId,
651
- productId: cluster.attributes.productId?.getLocal(),
652
714
  productName: cluster.attributes.productName?.getLocal(),
653
715
  vendorId: cluster.attributes.vendorId?.getLocal(),
654
716
  vendorName: cluster.attributes.vendorName?.getLocal(),
@@ -682,475 +744,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
682
744
  }
683
745
  return device;
684
746
  }
685
- /**
686
- * Returns a default static EveHistoryClusterServer object with the specified voltage, current, power, and consumption values.
687
- * This shows up in HA as a static sensor!
688
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
689
- * @param voltage - The voltage value (default: 0).
690
- * @param current - The current value (default: 0).
691
- * @param power - The power value (default: 0).
692
- * @param consumption - The consumption value (default: 0).
693
- * @returns The default static EveHistoryClusterServer object.
694
- */
695
- /*
696
- getDefaultStaticEveHistoryClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
697
- return ClusterServer(
698
- EveHistoryCluster.with(EveHistory.Feature.EveEnergy),
699
- {
700
- // Dynamic attributes
701
- ConfigDataGet: Uint8Array.fromHex(''),
702
- ConfigDataSet: Uint8Array.fromHex(''),
703
- HistoryStatus: Uint8Array.fromHex(''),
704
- HistoryEntries: Uint8Array.fromHex(''),
705
- HistoryRequest: Uint8Array.fromHex(''),
706
- HistorySetTime: Uint8Array.fromHex(''),
707
- LastEvent: 0,
708
- ResetTotal: 0,
709
- // Normal static attributes
710
- Voltage: voltage,
711
- Current: current,
712
- Consumption: power,
713
- TotalConsumption: consumption,
714
- EnergyUnknown: 1,
715
- ChildLock: false,
716
- RLoc: 46080,
717
- },
718
- {},
719
- {},
720
- );
721
- }
722
- */
723
- /**
724
- * Create a default static EveHistoryClusterServer object with the specified voltage, current, power, and consumption values.
725
- * This shows up in HA as a static sensor!
726
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
727
- * @param voltage - The voltage value (default: 0).
728
- * @param current - The current value (default: 0).
729
- * @param power - The power value (default: 0).
730
- * @param consumption - The consumption value (default: 0).
731
- * @returns The default static EveHistoryClusterServer object.
732
- */
733
- /*
734
- createDefaultStaticEveHistoryClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
735
- this.addClusterServer(this.getDefaultStaticEveHistoryClusterServer(voltage, current, power, consumption));
736
- }
737
- */
738
- /**
739
- * Creates a room Eve History Cluster Server.
740
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
741
- *
742
- * @param history - The MatterHistory object.
743
- * @param log - The AnsiLogger object.
744
- */
745
- /*
746
- createRoomEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
747
- history.setMatterHystoryType('room', this.serialNumber);
748
- this.addClusterServer(
749
- ClusterServer(
750
- EveHistoryCluster.with(EveHistory.Feature.EveRoom),
751
- {
752
- // Dynamic attributes
753
- ConfigDataGet: Uint8Array.fromHex(''),
754
- ConfigDataSet: Uint8Array.fromHex(''),
755
- HistoryStatus: Uint8Array.fromHex(''),
756
- HistoryEntries: Uint8Array.fromHex(''),
757
- HistoryRequest: Uint8Array.fromHex(''),
758
- HistorySetTime: Uint8Array.fromHex(''),
759
- // Normal attributes
760
- TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
761
- RLoc: 46080,
762
- },
763
- {
764
- ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
765
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
766
- return history.OnGetConfigData(isFabricFiltered);
767
- },
768
-
769
- ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
770
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
771
- return Uint8Array.fromHex('');
772
- },
773
- ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
774
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
775
- return history.OnSetConfigData(value);
776
- },
777
-
778
- HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
779
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
780
- return history.OnGetHistoryStatus(isFabricFiltered);
781
- },
782
-
783
- HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
784
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
785
- return history.OnGetHistoryEntries();
786
- },
787
-
788
- HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
789
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
790
- return Uint8Array.fromHex('');
791
- },
792
- HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
793
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
794
- return history.OnSetHistorySetTime(value);
795
- },
796
-
797
- HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
798
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
799
- return Uint8Array.fromHex('');
800
- },
801
- HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
802
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
803
- return history.OnSetHistoryRequest(value);
804
- },
805
- },
806
- {},
807
- ),
808
- );
809
- }
810
- */
811
- /**
812
- * Creates a Weather Eve History Cluster Server.
813
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
814
- *
815
- * @param history - The MatterHistory instance.
816
- * @param log - The AnsiLogger instance.
817
- */
818
- /*
819
- createWeatherEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
820
- history.setMatterHystoryType('weather', this.serialNumber);
821
- this.addClusterServer(
822
- ClusterServer(
823
- EveHistoryCluster.with(EveHistory.Feature.EveWeather),
824
- {
825
- // Dynamic attributes
826
- ConfigDataGet: Uint8Array.fromHex(''),
827
- ConfigDataSet: Uint8Array.fromHex(''),
828
- HistoryStatus: Uint8Array.fromHex(''),
829
- HistoryEntries: Uint8Array.fromHex(''),
830
- HistoryRequest: Uint8Array.fromHex(''),
831
- HistorySetTime: Uint8Array.fromHex(''),
832
- // Normal attributes
833
- Elevation: 0,
834
- AirPressure: 1000,
835
- WeatherTrend: WeatherTrend.SUN,
836
- TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
837
- RLoc: 46080,
838
- },
839
- {
840
- ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
841
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
842
- return history.OnGetConfigData(isFabricFiltered);
843
- },
844
-
845
- ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
846
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
847
- return Uint8Array.fromHex('');
848
- },
849
- ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
850
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
851
- return history.OnSetConfigData(value);
852
- },
853
-
854
- HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
855
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
856
- return history.OnGetHistoryStatus(isFabricFiltered);
857
- },
858
-
859
- HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
860
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
861
- return history.OnGetHistoryEntries();
862
- },
863
-
864
- HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
865
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
866
- return Uint8Array.fromHex('');
867
- },
868
- HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
869
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
870
- return history.OnSetHistorySetTime(value);
871
- },
872
-
873
- HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
874
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
875
- return Uint8Array.fromHex('');
876
- },
877
- HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
878
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
879
- return history.OnSetHistoryRequest(value);
880
- },
881
- },
882
- {},
883
- ),
884
- );
885
- }
886
- */
887
- /**
888
- * Creates an Energy Eve History Cluster Server.
889
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
890
- *
891
- * @param history - The MatterHistory object.
892
- * @param log - The AnsiLogger object.
893
- */
894
- /*
895
- createEnergyEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
896
- history.setMatterHystoryType('energy');
897
- this.addClusterServer(
898
- ClusterServer(
899
- EveHistoryCluster.with(EveHistory.Feature.EveEnergy),
900
- {
901
- // Dynamic attributes
902
- ConfigDataGet: Uint8Array.fromHex(''),
903
- ConfigDataSet: Uint8Array.fromHex(''),
904
- HistoryStatus: Uint8Array.fromHex(''),
905
- HistoryEntries: Uint8Array.fromHex(''),
906
- HistoryRequest: Uint8Array.fromHex(''),
907
- HistorySetTime: Uint8Array.fromHex(''),
908
- LastEvent: 0,
909
- ResetTotal: 0,
910
- // Normal attributes
911
- Voltage: 0,
912
- Current: 0,
913
- Consumption: 0,
914
- TotalConsumption: 0,
915
- EnergyUnknown: 1,
916
- ChildLock: false,
917
- RLoc: 46080,
918
- },
919
- {
920
- ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
921
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
922
- return history.OnGetConfigData(isFabricFiltered);
923
- },
924
-
925
- ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
926
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
927
- return Uint8Array.fromHex('');
928
- },
929
- ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
930
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
931
- return history.OnSetConfigData(value);
932
- },
933
-
934
- HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
935
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
936
- return history.OnGetHistoryStatus(isFabricFiltered);
937
- },
938
-
939
- HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
940
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
941
- return history.OnGetHistoryEntries();
942
- },
943
-
944
- HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
945
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
946
- return Uint8Array.fromHex('');
947
- },
948
- HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
949
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
950
- return history.OnSetHistorySetTime(value);
951
- },
952
-
953
- HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
954
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
955
- return Uint8Array.fromHex('');
956
- },
957
- HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
958
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
959
- return history.OnSetHistoryRequest(value);
960
- },
961
-
962
- LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
963
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
964
- return history.OnGetLastEvent();
965
- },
966
-
967
- ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
968
- log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
969
- return history.OnGetLastReset();
970
- },
971
- ResetTotalAttributeSetter: (value: number, { attributes, endpoint, session }) => {
972
- log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
973
- return history.OnSetLastReset(value);
974
- },
975
- },
976
- {},
977
- ),
978
- );
979
- }
980
- */
981
- /**
982
- * Creates a Motion Eve History Cluster Server.
983
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
984
- *
985
- * @param history - The MatterHistory object.
986
- * @param log - The AnsiLogger object.
987
- */
988
- /*
989
- createMotionEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
990
- history.setMatterHystoryType('motion');
991
- this.addClusterServer(
992
- ClusterServer(
993
- EveHistoryCluster.with(EveHistory.Feature.EveMotion),
994
- {
995
- // Dynamic attributes
996
- ConfigDataGet: Uint8Array.fromHex(''),
997
- ConfigDataSet: Uint8Array.fromHex(''),
998
- HistoryStatus: Uint8Array.fromHex(''),
999
- HistoryEntries: Uint8Array.fromHex(''),
1000
- HistoryRequest: Uint8Array.fromHex(''),
1001
- HistorySetTime: Uint8Array.fromHex(''),
1002
- LastEvent: 0,
1003
- // Normal attributes
1004
- MotionSensitivity: Sensitivity.HIGH,
1005
- RLoc: 46080,
1006
- },
1007
- {
1008
- ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
1009
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1010
- return history.OnGetConfigData(isFabricFiltered);
1011
- },
1012
-
1013
- ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
1014
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1015
- return Uint8Array.fromHex('');
1016
- },
1017
- ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1018
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
1019
- return history.OnSetConfigData(value);
1020
- },
1021
-
1022
- HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
1023
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1024
- return history.OnGetHistoryStatus(isFabricFiltered);
1025
- },
1026
-
1027
- HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
1028
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1029
- return history.OnGetHistoryEntries();
1030
- },
1031
-
1032
- HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
1033
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1034
- return Uint8Array.fromHex('');
1035
- },
1036
- HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1037
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
1038
- return history.OnSetHistorySetTime(value);
1039
- },
1040
-
1041
- HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
1042
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1043
- return Uint8Array.fromHex('');
1044
- },
1045
- HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1046
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
1047
- return history.OnSetHistoryRequest(value);
1048
- },
1049
-
1050
- LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
1051
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1052
- return history.OnGetLastEvent();
1053
- },
1054
- },
1055
- {},
1056
- ),
1057
- );
1058
- }
1059
- */
1060
- /**
1061
- * Creates a door EveHistoryCluster server.
1062
- * @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
1063
- *
1064
- * @param history - The MatterHistory instance.
1065
- * @param log - The AnsiLogger instance.
1066
- */
1067
- /*
1068
- createDoorEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
1069
- history.setMatterHystoryType('door');
1070
- this.addClusterServer(
1071
- ClusterServer(
1072
- EveHistoryCluster.with(EveHistory.Feature.EveDoor),
1073
- {
1074
- // Dynamic attributes
1075
- ConfigDataGet: Uint8Array.fromHex(''),
1076
- ConfigDataSet: Uint8Array.fromHex(''),
1077
- HistoryStatus: Uint8Array.fromHex(''),
1078
- HistoryEntries: Uint8Array.fromHex(''),
1079
- HistoryRequest: Uint8Array.fromHex(''),
1080
- HistorySetTime: Uint8Array.fromHex(''),
1081
- TimesOpened: 0,
1082
- LastEvent: 0,
1083
- ResetTotal: 0,
1084
- // Normal attributes
1085
- RLoc: 46080,
1086
- },
1087
- {
1088
- ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
1089
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1090
- return history.OnGetConfigData(isFabricFiltered);
1091
- },
1092
-
1093
- ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
1094
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1095
- return Uint8Array.fromHex('');
1096
- },
1097
- ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1098
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
1099
- return history.OnSetConfigData(value);
1100
- },
1101
-
1102
- HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
1103
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1104
- return history.OnGetHistoryStatus(isFabricFiltered);
1105
- },
1106
-
1107
- HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
1108
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1109
- return history.OnGetHistoryEntries();
1110
- },
1111
-
1112
- HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
1113
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1114
- return Uint8Array.fromHex('');
1115
- },
1116
- HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1117
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
1118
- return history.OnSetHistorySetTime(value);
1119
- },
1120
-
1121
- HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
1122
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1123
- return Uint8Array.fromHex('');
1124
- },
1125
- HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
1126
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
1127
- return history.OnSetHistoryRequest(value);
1128
- },
1129
-
1130
- LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
1131
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1132
- return history.OnGetLastEvent();
1133
- },
1134
-
1135
- TimesOpenedAttributeGetter: ({ session, isFabricFiltered }) => {
1136
- log.debug(`TimesOpenedAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1137
- return history.OnGetimesOpened();
1138
- },
1139
-
1140
- ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
1141
- log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1142
- return history.OnGetLastReset();
1143
- },
1144
- ResetTotalAttributeSetter: (value: number, { attributes, endpoint, session }) => {
1145
- log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
1146
- return history.OnSetLastReset(value);
1147
- },
1148
- },
1149
- {},
1150
- ),
1151
- );
1152
- }
1153
- */
1154
747
  /**
1155
748
  * Get a default IdentifyCluster server.
1156
749
  */
@@ -1194,25 +787,35 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1194
787
  }
1195
788
  /**
1196
789
  * Get a default scenes cluster server and adds it to the current instance.
790
+ * @deprecated This method is deprecated.
791
+ *
1197
792
  */
1198
793
  getDefaultScenesClusterServer() {
1199
- return ClusterServer(ScenesCluster, {
794
+ /*
795
+ return ClusterServer(
796
+ ScenesCluster,
797
+ {
1200
798
  sceneCount: 0,
1201
799
  currentScene: 0,
1202
800
  currentGroup: GroupId(0),
1203
801
  sceneValid: false,
1204
802
  nameSupport: {
1205
- nameSupport: true,
803
+ nameSupport: true,
1206
804
  },
1207
805
  lastConfiguredBy: null,
1208
- }, ScenesClusterHandler());
1209
- // return createDefaultScenesClusterServer();
806
+ },
807
+ {},
808
+ );
809
+ */
1210
810
  }
1211
811
  /**
1212
812
  * Creates a default scenes cluster server and adds it to the current instance.
813
+ * @deprecated This method is deprecated.
1213
814
  */
1214
815
  createDefaultScenesClusterServer() {
816
+ /*
1215
817
  this.addClusterServer(this.getDefaultScenesClusterServer());
818
+ */
1216
819
  }
1217
820
  /**
1218
821
  * Creates a unique identifier based on the provided parameters.
@@ -1259,6 +862,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1259
862
  hardwareVersionString: hardwareVersionString.slice(0, 64),
1260
863
  reachable: true,
1261
864
  capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
865
+ specificationVersion: Specification.SPECIFICATION_VERSION,
866
+ maxPathsPerInvoke: 1,
1262
867
  }, {}, {
1263
868
  startUp: true,
1264
869
  shutDown: true,
@@ -1307,7 +912,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1307
912
  return ClusterServer(BridgedDeviceBasicInformationCluster, {
1308
913
  vendorId: vendorId !== undefined ? VendorId(vendorId) : undefined, // 4874
1309
914
  vendorName: vendorName.slice(0, 32),
1310
- productId: 0x8000,
1311
915
  productName: productName.slice(0, 32),
1312
916
  productLabel: deviceName.slice(0, 64),
1313
917
  nodeLabel: deviceName.slice(0, 32),
@@ -1363,7 +967,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1363
967
  measured: true,
1364
968
  minMeasuredValue: 0,
1365
969
  maxMeasuredValue: 0,
1366
- accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62, fixedMin: 10, fixedMax: 10, fixedTypical: 0 }],
970
+ accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62 /* , fixedMin: 10, fixedMax: 10, fixedTypical: 0*/ }],
1367
971
  },
1368
972
  cumulativeEnergyImported: { energy },
1369
973
  cumulativeEnergyExported: null,
@@ -1386,21 +990,21 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1386
990
  measured: true,
1387
991
  minMeasuredValue: 0,
1388
992
  maxMeasuredValue: 100,
1389
- accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62, fixedMin: 10, fixedMax: 10, fixedTypical: 0 }],
993
+ accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62 /* , fixedMin: 10, fixedMax: 10, fixedTypical: 0*/ }],
1390
994
  },
1391
995
  {
1392
996
  measurementType: MeasurementType.ActiveCurrent,
1393
997
  measured: true,
1394
998
  minMeasuredValue: 0,
1395
999
  maxMeasuredValue: 100,
1396
- accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62, fixedMin: 10, fixedMax: 10, fixedTypical: 0 }],
1000
+ accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62 /* , fixedMin: 10, fixedMax: 10, fixedTypical: 0 */ }],
1397
1001
  },
1398
1002
  {
1399
1003
  measurementType: MeasurementType.ActivePower,
1400
1004
  measured: true,
1401
1005
  minMeasuredValue: 0,
1402
1006
  maxMeasuredValue: 100,
1403
- accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62, fixedMin: 10, fixedMax: 10, fixedTypical: 0 }],
1007
+ accuracyRanges: [{ rangeMin: 0, rangeMax: 2 ** 62 /* , fixedMin: 10, fixedMax: 10, fixedTypical: 0 */ }],
1404
1008
  },
1405
1009
  ],
1406
1010
  voltage: voltage,
@@ -1408,44 +1012,6 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1408
1012
  activePower: power,
1409
1013
  }, {}, {});
1410
1014
  }
1411
- /**
1412
- * @deprecated This method is deprecated and will be removed in a future version.
1413
- * Get a default Electrical Measurement Cluster Server.
1414
- *
1415
- * @param voltage - The RMS voltage value.
1416
- * @param current - The RMS current value.
1417
- * @param power - The active power value.
1418
- * @param consumption - The total active power consumption value.
1419
- */
1420
- /*
1421
- getDefaultElectricalMeasurementClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
1422
- return ClusterServer(
1423
- ElectricalMeasurementCluster,
1424
- {
1425
- rmsVoltage: voltage,
1426
- rmsCurrent: current,
1427
- activePower: power,
1428
- totalActivePower: consumption,
1429
- },
1430
- {},
1431
- {},
1432
- );
1433
- }
1434
- */
1435
- /**
1436
- * @deprecated This method is deprecated and will be removed in a future version.
1437
- * Creates a default Electrical Measurement Cluster Server.
1438
- *
1439
- * @param voltage - The RMS voltage value.
1440
- * @param current - The RMS current value.
1441
- * @param power - The active power value.
1442
- * @param consumption - The total active power consumption value.
1443
- */
1444
- /*
1445
- createDefaultElectricalMeasurementClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
1446
- this.addClusterServer(this.getDefaultElectricalMeasurementClusterServer(voltage, current, power, consumption));
1447
- }
1448
- */
1449
1015
  /**
1450
1016
  * Creates a default Dummy Thread Network Diagnostics Cluster server.
1451
1017
  * @deprecated This method is deprecated and is only used for testing.
@@ -1474,7 +1040,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1474
1040
  channelPage0Mask: null,
1475
1041
  operationalDatasetComponents: null,
1476
1042
  overrunCount: 0,
1477
- activeNetworkFaults: [],
1043
+ activeNetworkFaultsList: [],
1478
1044
  }, {
1479
1045
  resetCounts: async (data) => {
1480
1046
  this.log.debug('Matter command: resetCounts');
@@ -1749,25 +1315,25 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1749
1315
  * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
1750
1316
  * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
1751
1317
  */
1752
- getDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
1318
+ getDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
1753
1319
  return ClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
1754
1320
  colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
1321
+ enhancedColorMode: ColorControl.EnhancedColorMode.CurrentHueAndCurrentSaturation,
1322
+ colorCapabilities: { xy: true, hueSaturation: true, colorLoop: false, enhancedHue: false, colorTemperature: true },
1755
1323
  options: {
1756
1324
  executeIfOff: false,
1757
1325
  },
1758
1326
  numberOfPrimaries: null,
1759
- enhancedColorMode: ColorControl.EnhancedColorMode.CurrentHueAndCurrentSaturation,
1760
- colorCapabilities: { xy: true, hueSaturation: true, colorLoop: false, enhancedHue: false, colorTemperature: true },
1761
- currentHue: 0,
1762
- currentSaturation: 0,
1763
1327
  currentX,
1764
1328
  currentY,
1329
+ currentHue,
1330
+ currentSaturation,
1765
1331
  colorTemperatureMireds,
1766
1332
  colorTempPhysicalMinMireds,
1767
1333
  colorTempPhysicalMaxMireds,
1768
1334
  }, {
1769
1335
  moveToColor: async (data) => {
1770
- this.log.debug('Matter command: moveToColor request:', data.request, 'attributes.currentHue:', data.attributes.currentX.getLocal(), data.attributes.currentY.getLocal());
1336
+ this.log.debug('Matter command: moveToColor request:', data.request, 'attributes.currentX:', data.attributes.currentX.getLocal(), 'attributes.currentY:', data.attributes.currentY.getLocal());
1771
1337
  this.commandHandler.executeHandler('moveToColor', data);
1772
1338
  },
1773
1339
  moveColor: async () => {
@@ -1826,8 +1392,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
1826
1392
  * @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
1827
1393
  * @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
1828
1394
  */
1829
- createDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
1830
- this.addClusterServer(this.getDefaultCompleteColorControlClusterServer(currentX, currentY, colorTemperatureMireds, colorTempPhysicalMinMireds, colorTempPhysicalMaxMireds));
1395
+ createDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, currentHue = 0, currentSaturation = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
1396
+ this.addClusterServer(this.getDefaultCompleteColorControlClusterServer(currentX, currentY, currentHue, currentSaturation, colorTemperatureMireds, colorTempPhysicalMinMireds, colorTempPhysicalMaxMireds));
1831
1397
  }
1832
1398
  /**
1833
1399
  * Configures the color control cluster for a device.
@@ -2010,7 +1576,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2010
1576
  * This method adds a cluster server for a door lock cluster with default settings.
2011
1577
  *
2012
1578
  */
2013
- getDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.Deadbolt) {
1579
+ getDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
2014
1580
  return ClusterServer(DoorLockCluster, {
2015
1581
  operatingMode: DoorLock.OperatingMode.Normal,
2016
1582
  lockState,
@@ -2039,7 +1605,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2039
1605
  * This method adds a cluster server for a door lock cluster with default settings.
2040
1606
  *
2041
1607
  */
2042
- createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.Deadbolt) {
1608
+ createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
2043
1609
  this.addClusterServer(this.getDefaultDoorLockClusterServer(lockState, lockType));
2044
1610
  }
2045
1611
  /**
@@ -2101,7 +1667,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2101
1667
  /**
2102
1668
  * Triggers a switch event on the specified endpoint.
2103
1669
  *
2104
- * @param {string} event - The type of event to trigger. Possible values are 'Single', 'Double', 'Long', 'Press', and 'Release'.
1670
+ * @param {string} event - The type of event to trigger. Possible values are 'Single', 'Double', 'Long' for momentarySwitch and 'Press', 'Release' for latchingSwitch.
2105
1671
  * @param {Endpoint} endpoint - The endpoint on which to trigger the event (default the device endpoint).
2106
1672
  * @returns {void}
2107
1673
  */
@@ -2420,6 +1986,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2420
1986
  activeBatFaults: undefined,
2421
1987
  batReplacementDescription,
2422
1988
  batQuantity,
1989
+ endpointList: [],
2423
1990
  }, {}, {});
2424
1991
  }
2425
1992
  /**
@@ -2455,6 +2022,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2455
2022
  activeBatFaults: undefined,
2456
2023
  batChargeState: PowerSource.BatChargeState.IsNotCharging,
2457
2024
  batFunctionalWhileCharging: true,
2025
+ endpointList: [],
2458
2026
  }, {}, {});
2459
2027
  }
2460
2028
  /**
@@ -2478,6 +2046,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2478
2046
  description: wiredCurrentType === PowerSource.WiredCurrentType.Ac ? 'AC Power' : 'DC Power',
2479
2047
  status: PowerSource.PowerSourceStatus.Active,
2480
2048
  order: 0,
2049
+ endpointList: [],
2481
2050
  }, {}, {});
2482
2051
  }
2483
2052
  /**
@@ -2501,8 +2070,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2501
2070
  *
2502
2071
  * @param airQuality The air quality type. Defaults to `AirQuality.AirQualityType.Unknown`.
2503
2072
  */
2504
- getDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityType.Unknown) {
2505
- return ClusterServer(AirQualityCluster.with(AirQuality.Feature.FairAirQuality, AirQuality.Feature.ModerateAirQuality, AirQuality.Feature.VeryPoorAirQuality), {
2073
+ getDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
2074
+ return ClusterServer(AirQualityCluster.with(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), {
2506
2075
  airQuality,
2507
2076
  }, {}, {});
2508
2077
  }
@@ -2511,7 +2080,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2511
2080
  *
2512
2081
  * @param airQuality The air quality type. Defaults to `AirQuality.AirQualityType.Unknown`.
2513
2082
  */
2514
- createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityType.Unknown) {
2083
+ createDefaultAirQualityClusterServer(airQuality = AirQuality.AirQualityEnum.Unknown) {
2515
2084
  this.addClusterServer(this.getDefaultAirQualityClusterServer(airQuality));
2516
2085
  }
2517
2086
  /**
@@ -2519,11 +2088,14 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2519
2088
  *
2520
2089
  * @param measuredValue - The measured value for TVOC.
2521
2090
  */
2522
- getDefaultTvocMeasurementClusterServer(measuredValue = 0) {
2523
- return ClusterServer(TvocMeasurementCluster.with(TvocMeasurement.Feature.NumericMeasurement), {
2091
+ getDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
2092
+ return ClusterServer(TotalVolatileOrganicCompoundsConcentrationMeasurementCluster.with('NumericMeasurement'), {
2524
2093
  measuredValue,
2525
2094
  minMeasuredValue: null,
2526
2095
  maxMeasuredValue: null,
2096
+ uncertainty: 0,
2097
+ measurementUnit,
2098
+ measurementMedium,
2527
2099
  }, {}, {});
2528
2100
  }
2529
2101
  /**
@@ -2531,8 +2103,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2531
2103
  *
2532
2104
  * @param measuredValue - The measured value for TVOC.
2533
2105
  */
2534
- createDefaultTvocMeasurementClusterServer(measuredValue = 0) {
2535
- this.addClusterServer(this.getDefaultTvocMeasurementClusterServer(measuredValue));
2106
+ createDefaultTvocMeasurementClusterServer(measuredValue = 0, measurementUnit = ConcentrationMeasurement.MeasurementUnit.Ppm, measurementMedium = ConcentrationMeasurement.MeasurementMedium.Air) {
2107
+ this.addClusterServer(this.getDefaultTvocMeasurementClusterServer(measuredValue, measurementUnit, measurementMedium));
2536
2108
  }
2537
2109
  /**
2538
2110
  * Get a default thermostat cluster server with the specified parameters.
@@ -2581,15 +2153,25 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2581
2153
  * Get a default dummy time sync cluster server. Only needed to create a thermostat.
2582
2154
  */
2583
2155
  getDefaultTimeSyncClusterServer() {
2584
- return ClusterServer(TimeSyncCluster.with(TimeSync.Feature.TimeZone), {
2156
+ return ClusterServer(TimeSynchronizationCluster.with(TimeSynchronization.Feature.TimeZone), {
2585
2157
  utcTime: null,
2586
- granularity: TimeSync.Granularity.NoTimeGranularity,
2158
+ granularity: TimeSynchronization.Granularity.NoTimeGranularity,
2587
2159
  timeZone: [{ offset: 0, validAt: 0 }],
2588
- trustedTimeNodeId: null,
2589
2160
  dstOffset: [],
2590
2161
  localTime: null,
2591
- timeZoneDatabase: true,
2162
+ timeZoneDatabase: TimeSynchronization.TimeZoneDatabase.None,
2163
+ timeZoneListMaxSize: 1,
2164
+ dstOffsetListMaxSize: 1,
2592
2165
  }, {
2166
+ setTimeZone: async ({ request, attributes }) => {
2167
+ this.log.debug('Matter command: setTimeZone', request);
2168
+ await this.commandHandler.executeHandler('setTimeZone', { request, attributes });
2169
+ return { dstOffsetsRequired: false };
2170
+ },
2171
+ setDstOffset: async ({ request, attributes }) => {
2172
+ this.log.debug('Matter command: setDstOffset', request);
2173
+ await this.commandHandler.executeHandler('setDstOffset', { request, attributes });
2174
+ },
2593
2175
  setUtcTime: async ({ request, attributes }) => {
2594
2176
  this.log.debug('Matter command: setUtcTime', request);
2595
2177
  await this.commandHandler.executeHandler('setUtcTime', { request, attributes });
@@ -2598,6 +2180,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2598
2180
  dstTableEmpty: true,
2599
2181
  dstStatus: true,
2600
2182
  timeZoneStatus: true,
2183
+ timeFailure: true,
2601
2184
  });
2602
2185
  }
2603
2186
  /**
@@ -2966,13 +2549,18 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
2966
2549
  // NOTE Support of Device Energy Management Mode Cluster is provisional.
2967
2550
  getDefaultDeviceEnergyManagementModeClusterServer() {
2968
2551
  return ClusterServer(DeviceEnergyManagementModeCluster, {
2969
- esaType: DeviceEnergyManagement.EsaType.Other,
2970
- esaCanGenerate: false,
2971
- esaState: DeviceEnergyManagement.EsaState.Online,
2972
- absMinPower: 0,
2973
- absMaxPower: 0,
2974
- optOutState: DeviceEnergyManagement.OptOutState.NoOptOut,
2975
- }, {}, {});
2552
+ supportedModes: [
2553
+ { label: 'Normal', mode: 1, modeTags: [{ value: 1 }] },
2554
+ { label: 'Eco', mode: 2, modeTags: [{ value: 2 }] },
2555
+ ],
2556
+ currentMode: 1,
2557
+ startUpMode: 1,
2558
+ }, {
2559
+ changeToMode: async ({ request, attributes }) => {
2560
+ this.log.debug('Matter command: DeviceEnergyManagementMode.changeToMode', request);
2561
+ await this.commandHandler.executeHandler('changeToMode', { request, attributes });
2562
+ },
2563
+ }, {});
2976
2564
  }
2977
2565
  }
2978
2566
  //# sourceMappingURL=matterbridgeDevice.js.map