matterbridge-example-dynamic-platform 2.0.0 → 2.0.1-dev-20251112-2974ca7

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 CHANGED
@@ -25,6 +25,19 @@ If you like this project and find it useful, please consider giving it a star on
25
25
  <img src="bmc-button.svg" alt="Buy me a coffee" width="120">
26
26
  </a>
27
27
 
28
+ ## [2.0.1] - 2025-11-11
29
+
30
+ ### Changed
31
+
32
+ - [package]: Updated dependencies.
33
+ - [package]: Bumped package to automator v. 2.0.12.
34
+ - [jest]: Updated jestHelpers to v. 1.0.12.
35
+ - [workflows]: Use shallow clones and --no-fund --no-audit for faster builds.
36
+
37
+ <a href="https://www.buymeacoffee.com/luligugithub">
38
+ <img src="bmc-button.svg" alt="Buy me a coffee" width="80">
39
+ </a>
40
+
28
41
  ## [2.0.0] - 2025-10-24
29
42
 
30
43
  ### Changed
package/dist/module.js CHANGED
@@ -3,7 +3,7 @@ import { RoboticVacuumCleaner, LaundryWasher, WaterHeater, Evse, SolarPower, Bat
3
3
  import { isValidBoolean, isValidNumber, isValidObject, isValidString } from 'matterbridge/utils';
4
4
  import { debugStringify } from 'matterbridge/logger';
5
5
  import { AreaNamespaceTag, LocationTag, NumberTag, PositionTag, RefrigeratorTag, SwitchesTag, UINT16_MAX, UINT32_MAX } from 'matterbridge/matter';
6
- import { PowerSource, BooleanState, OnOff, LevelControl, AirQuality, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, FlowMeasurement, ColorControl, DoorLock, FanControl, FormaldehydeConcentrationMeasurement, NitrogenDioxideConcentrationMeasurement, OzoneConcentrationMeasurement, Pm10ConcentrationMeasurement, Pm1ConcentrationMeasurement, Pm25ConcentrationMeasurement, RadonConcentrationMeasurement, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, TemperatureMeasurement, Thermostat, ThermostatCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, WindowCovering, EnergyEvseMode, EnergyEvse, RvcRunMode, RvcCleanMode, ConcentrationMeasurement, Descriptor, BridgedDeviceBasicInformation, OvenMode, OperationalState, OccupancySensing, IlluminanceMeasurement, PressureMeasurement, RefrigeratorAndTemperatureControlledCabinetMode, RvcOperationalState, DeviceEnergyManagement, } from 'matterbridge/matter/clusters';
6
+ import { PowerSource, BooleanState, OnOff, LevelControl, AirQuality, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, FlowMeasurement, ColorControl, DoorLock, FanControl, FormaldehydeConcentrationMeasurement, NitrogenDioxideConcentrationMeasurement, OzoneConcentrationMeasurement, Pm10ConcentrationMeasurement, Pm1ConcentrationMeasurement, Pm25ConcentrationMeasurement, RadonConcentrationMeasurement, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, TemperatureMeasurement, Thermostat, ThermostatCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, WindowCovering, EnergyEvseMode, EnergyEvse, RvcRunMode, RvcCleanMode, Descriptor, BridgedDeviceBasicInformation, OvenMode, OperationalState, OccupancySensing, IlluminanceMeasurement, PressureMeasurement, RefrigeratorAndTemperatureControlledCabinetMode, RvcOperationalState, DeviceEnergyManagement, } from 'matterbridge/matter/clusters';
7
7
  function luxToMatter(lux) {
8
8
  if (!Number.isFinite(lux) || lux <= 0)
9
9
  return 0;
@@ -119,56 +119,56 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
119
119
  this.log.info('onStart called with reason:', reason ?? 'none');
120
120
  await this.ready;
121
121
  await this.clearSelect();
122
- this.door = new MatterbridgeEndpoint([contactSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Door' }, this.config.debug)
122
+ this.door = new MatterbridgeEndpoint([contactSensor, bridgedNode, powerSource], { id: 'Door' }, this.config.debug)
123
123
  .createDefaultIdentifyClusterServer()
124
124
  .createDefaultBridgedDeviceBasicInformationClusterServer('Door', 'DOO00001', 0xfff1, 'Matterbridge', 'Matterbridge Door')
125
125
  .createDefaultBooleanStateClusterServer(true)
126
126
  .createDefaultPowerSourceReplaceableBatteryClusterServer(90, PowerSource.BatChargeLevel.Ok, 2990, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
127
127
  .addRequiredClusterServers();
128
128
  this.door = await this.addDevice(this.door);
129
- this.occupancy = new MatterbridgeEndpoint([occupancySensor, bridgedNode, powerSource], { uniqueStorageKey: 'Occupancy' }, this.config.debug)
129
+ this.occupancy = new MatterbridgeEndpoint([occupancySensor, bridgedNode, powerSource], { id: 'Occupancy' }, this.config.debug)
130
130
  .createDefaultIdentifyClusterServer()
131
131
  .createDefaultBridgedDeviceBasicInformationClusterServer('Occupancy', 'OCC00002', 0xfff1, 'Matterbridge', 'Matterbridge Occupancy')
132
132
  .createDefaultOccupancySensingClusterServer(false)
133
133
  .createDefaultPowerSourceReplaceableBatteryClusterServer(70, PowerSource.BatChargeLevel.Ok, 2950, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
134
134
  .addRequiredClusterServers();
135
135
  this.occupancy = await this.addDevice(this.occupancy);
136
- this.illuminance = new MatterbridgeEndpoint([lightSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Illuminance' }, this.config.debug)
136
+ this.illuminance = new MatterbridgeEndpoint([lightSensor, bridgedNode, powerSource], { id: 'Illuminance' }, this.config.debug)
137
137
  .createDefaultIdentifyClusterServer()
138
138
  .createDefaultBridgedDeviceBasicInformationClusterServer('Illuminance', 'ILL00003', 0xfff1, 'Matterbridge', 'Matterbridge Illuminance')
139
139
  .createDefaultIlluminanceMeasurementClusterServer(luxToMatter(1))
140
140
  .createDefaultPowerSourceReplaceableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 3100, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
141
141
  .addRequiredClusterServers();
142
142
  this.illuminance = await this.addDevice(this.illuminance);
143
- this.temperature = new MatterbridgeEndpoint([temperatureSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Temperature' }, this.config.debug)
143
+ this.temperature = new MatterbridgeEndpoint([temperatureSensor, bridgedNode, powerSource], { id: 'Temperature' }, this.config.debug)
144
144
  .createDefaultIdentifyClusterServer()
145
145
  .createDefaultBridgedDeviceBasicInformationClusterServer('Temperature', 'TEM00004', 0xfff1, 'Matterbridge', 'Matterbridge Temperature')
146
146
  .createDefaultTemperatureMeasurementClusterServer(1000)
147
147
  .createDefaultPowerSourceReplaceableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 3100, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
148
148
  .addRequiredClusterServers();
149
149
  this.temperature = await this.addDevice(this.temperature);
150
- this.humidity = new MatterbridgeEndpoint([humiditySensor, bridgedNode, powerSource], { uniqueStorageKey: 'Humidity' }, this.config.debug)
150
+ this.humidity = new MatterbridgeEndpoint([humiditySensor, bridgedNode, powerSource], { id: 'Humidity' }, this.config.debug)
151
151
  .createDefaultIdentifyClusterServer()
152
152
  .createDefaultBridgedDeviceBasicInformationClusterServer('Humidity', 'HUM00005', 0xfff1, 'Matterbridge', 'Matterbridge Humidity')
153
153
  .createDefaultRelativeHumidityMeasurementClusterServer(1000)
154
154
  .createDefaultPowerSourceReplaceableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 3100, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
155
155
  .addRequiredClusterServers();
156
156
  this.humidity = await this.addDevice(this.humidity);
157
- this.pressure = new MatterbridgeEndpoint([pressureSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Pressure' }, this.config.debug)
157
+ this.pressure = new MatterbridgeEndpoint([pressureSensor, bridgedNode, powerSource], { id: 'Pressure' }, this.config.debug)
158
158
  .createDefaultIdentifyClusterServer()
159
159
  .createDefaultBridgedDeviceBasicInformationClusterServer('Pressure', 'PRE00006', 0xfff1, 'Matterbridge', 'Matterbridge Pressure')
160
160
  .createDefaultPressureMeasurementClusterServer(9000)
161
161
  .createDefaultPowerSourceReplaceableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 3050, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
162
162
  .addRequiredClusterServers();
163
163
  this.pressure = await this.addDevice(this.pressure);
164
- this.flow = new MatterbridgeEndpoint([flowSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Flow' }, this.config.debug)
164
+ this.flow = new MatterbridgeEndpoint([flowSensor, bridgedNode, powerSource], { id: 'Flow' }, this.config.debug)
165
165
  .createDefaultIdentifyClusterServer()
166
166
  .createDefaultBridgedDeviceBasicInformationClusterServer('Flow', 'FLO00007', 0xfff1, 'Matterbridge', 'Matterbridge Flow')
167
167
  .createDefaultFlowMeasurementClusterServer(10)
168
168
  .createDefaultPowerSourceReplaceableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 3050, 'AA', 1, PowerSource.BatReplaceability.UserReplaceable)
169
169
  .addRequiredClusterServers();
170
170
  this.flow = await this.addDevice(this.flow);
171
- this.climate = new MatterbridgeEndpoint([temperatureSensor, humiditySensor, pressureSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Climate' }, this.config.debug)
171
+ this.climate = new MatterbridgeEndpoint([temperatureSensor, humiditySensor, pressureSensor, bridgedNode, powerSource], { id: 'Climate' }, this.config.debug)
172
172
  .createDefaultIdentifyClusterServer()
173
173
  .createDefaultBridgedDeviceBasicInformationClusterServer('Climate', 'CLI00008', 0xfff1, 'Matterbridge', 'Matterbridge Climate')
174
174
  .createDefaultTemperatureMeasurementClusterServer(1000)
@@ -177,7 +177,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
177
177
  .createDefaultPowerSourceReplaceableBatteryClusterServer(90, PowerSource.BatChargeLevel.Ok, 2990, '2 x AA', 2, PowerSource.BatReplaceability.UserReplaceable)
178
178
  .addRequiredClusterServers();
179
179
  this.climate = await this.addDevice(this.climate);
180
- this.select = new MatterbridgeEndpoint([modeSelect, bridgedNode, powerSource], { uniqueStorageKey: 'Select' }, this.config.debug)
180
+ this.select = new MatterbridgeEndpoint([modeSelect, bridgedNode, powerSource], { id: 'Select' }, this.config.debug)
181
181
  .createDefaultBridgedDeviceBasicInformationClusterServer('Select', 'SEL00009', 0xfff1, 'Matterbridge', 'Matterbridge Select')
182
182
  .createDefaultModeSelectClusterServer('Night mode', [
183
183
  { label: 'Led ON', mode: 1, semanticTags: [] },
@@ -189,7 +189,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
189
189
  this.select?.addCommandHandler('changeToMode', async ({ request: { newMode } }) => {
190
190
  this.log.info(`Command changeToMode called newMode:${newMode}`);
191
191
  });
192
- this.switch = new MatterbridgeEndpoint([onOffSwitch, bridgedNode, powerSource], { uniqueStorageKey: 'Switch' }, this.config.debug)
192
+ this.switch = new MatterbridgeEndpoint([onOffSwitch, bridgedNode, powerSource], { id: 'Switch' }, this.config.debug)
193
193
  .createDefaultIdentifyClusterServer()
194
194
  .createDefaultGroupsClusterServer()
195
195
  .createDefaultBridgedDeviceBasicInformationClusterServer('Switch', 'SWI00010', 0xfff1, 'Matterbridge', 'Matterbridge Switch')
@@ -205,7 +205,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
205
205
  this.switch?.addCommandHandler('off', async () => {
206
206
  this.switch?.log.info('Command off called');
207
207
  });
208
- this.mountedOnOffSwitch = new MatterbridgeEndpoint([onOffMountedSwitch, bridgedNode, powerSource], { uniqueStorageKey: 'OnOffMountedSwitch' }, this.config.debug)
208
+ this.mountedOnOffSwitch = new MatterbridgeEndpoint([onOffMountedSwitch, bridgedNode, powerSource], { id: 'OnOffMountedSwitch' }, this.config.debug)
209
209
  .createDefaultIdentifyClusterServer()
210
210
  .createDefaultGroupsClusterServer()
211
211
  .createDefaultBridgedDeviceBasicInformationClusterServer('OnOff Mounted Switch', 'OMS00011', 0xfff1, 'Matterbridge', 'Matterbridge OnOff Mounted Switch')
@@ -221,7 +221,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
221
221
  this.mountedOnOffSwitch?.addCommandHandler('off', async () => {
222
222
  this.mountedOnOffSwitch?.log.info('Command off called');
223
223
  });
224
- this.mountedDimmerSwitch = new MatterbridgeEndpoint([dimmableMountedSwitch, bridgedNode, powerSource], { uniqueStorageKey: 'DimmerMountedSwitch' }, this.config.debug)
224
+ this.mountedDimmerSwitch = new MatterbridgeEndpoint([dimmableMountedSwitch, bridgedNode, powerSource], { id: 'DimmerMountedSwitch' }, this.config.debug)
225
225
  .createDefaultIdentifyClusterServer()
226
226
  .createDefaultGroupsClusterServer()
227
227
  .createDefaultBridgedDeviceBasicInformationClusterServer('Dimmer Mounted Switch', 'DMS00012', 0xfff1, 'Matterbridge', 'Matterbridge Dimmer Mounted Switch')
@@ -245,7 +245,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
245
245
  this.mountedDimmerSwitch?.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level } }) => {
246
246
  this.mountedDimmerSwitch?.log.debug(`Command moveToLevelWithOnOff called request: ${level}`);
247
247
  });
248
- this.lightOnOff = new MatterbridgeEndpoint([onOffLight, bridgedNode, powerSource], { uniqueStorageKey: 'Light (on/off)' }, this.config.debug)
248
+ this.lightOnOff = new MatterbridgeEndpoint([onOffLight, bridgedNode, powerSource], { id: 'Light (on/off)' }, this.config.debug)
249
249
  .createDefaultIdentifyClusterServer()
250
250
  .createDefaultGroupsClusterServer()
251
251
  .createDefaultBridgedDeviceBasicInformationClusterServer('Light (on/off)', 'LON00013', 0xfff1, 'Matterbridge', 'Matterbridge Light on/off')
@@ -261,7 +261,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
261
261
  this.lightOnOff?.addCommandHandler('off', async () => {
262
262
  this.lightOnOff?.log.info('Command off called');
263
263
  });
264
- this.dimmer = new MatterbridgeEndpoint([dimmableLight, bridgedNode, powerSource], { uniqueStorageKey: 'Dimmer' }, this.config.debug)
264
+ this.dimmer = new MatterbridgeEndpoint([dimmableLight, bridgedNode, powerSource], { id: 'Dimmer' }, this.config.debug)
265
265
  .createDefaultIdentifyClusterServer()
266
266
  .createDefaultGroupsClusterServer()
267
267
  .createDefaultBridgedDeviceBasicInformationClusterServer('Dimmer', 'DMR00014', 0xfff1, 'Matterbridge', 'Matterbridge Dimmer')
@@ -284,7 +284,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
284
284
  this.dimmer?.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level } }) => {
285
285
  this.dimmer?.log.debug(`Command moveToLevelWithOnOff called request: ${level}`);
286
286
  });
287
- this.light = new MatterbridgeEndpoint([extendedColorLight, bridgedNode, powerSource], { uniqueStorageKey: 'Light (XY, HS, CT)' }, this.config.debug)
287
+ this.light = new MatterbridgeEndpoint([extendedColorLight, bridgedNode, powerSource], { id: 'Light (XY, HS, CT)' }, this.config.debug)
288
288
  .createDefaultIdentifyClusterServer()
289
289
  .createDefaultGroupsClusterServer()
290
290
  .createDefaultBridgedDeviceBasicInformationClusterServer('Light (XY, HS, CT)', 'LXC00015', 0xfff1, 'Matterbridge', 'Matterbridge Light')
@@ -323,7 +323,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
323
323
  this.light?.addCommandHandler('moveToColorTemperature', async ({ request: { colorTemperatureMireds } }) => {
324
324
  this.light?.log.debug(`Command moveToColorTemperature called request: ${colorTemperatureMireds}`);
325
325
  });
326
- this.lightHS = new MatterbridgeEndpoint([colorTemperatureLight, bridgedNode, powerSource], { uniqueStorageKey: 'Light (HS, CT)' }, this.config.debug)
326
+ this.lightHS = new MatterbridgeEndpoint([colorTemperatureLight, bridgedNode, powerSource], { id: 'Light (HS, CT)' }, this.config.debug)
327
327
  .createDefaultIdentifyClusterServer()
328
328
  .createDefaultGroupsClusterServer()
329
329
  .createDefaultBridgedDeviceBasicInformationClusterServer('Light (HS, CT)', 'LHC00016', 0xfff1, 'Matterbridge', 'Matterbridge Light')
@@ -359,7 +359,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
359
359
  this.lightHS?.addCommandHandler('moveToColorTemperature', async ({ request: { colorTemperatureMireds } }) => {
360
360
  this.lightHS?.log.debug(`Command moveToColorTemperature called request: ${colorTemperatureMireds}`);
361
361
  });
362
- this.lightXY = new MatterbridgeEndpoint([extendedColorLight, bridgedNode, powerSource], { uniqueStorageKey: 'Light (XY, CT)' }, this.config.debug)
362
+ this.lightXY = new MatterbridgeEndpoint([extendedColorLight, bridgedNode, powerSource], { id: 'Light (XY, CT)' }, this.config.debug)
363
363
  .createDefaultIdentifyClusterServer()
364
364
  .createDefaultGroupsClusterServer()
365
365
  .createDefaultBridgedDeviceBasicInformationClusterServer('Light (XY, CT)', 'LXT00017', 0xfff1, 'Matterbridge', 'Matterbridge Light')
@@ -389,7 +389,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
389
389
  this.lightXY?.addCommandHandler('moveToColorTemperature', async ({ request: { colorTemperatureMireds } }) => {
390
390
  this.lightXY?.log.debug(`Command moveToColorTemperature called request: ${colorTemperatureMireds}`);
391
391
  });
392
- this.lightCT = new MatterbridgeEndpoint([colorTemperatureLight, bridgedNode, powerSource], { uniqueStorageKey: 'Light (CT)' }, this.config.debug)
392
+ this.lightCT = new MatterbridgeEndpoint([colorTemperatureLight, bridgedNode, powerSource], { id: 'Light (CT)' }, this.config.debug)
393
393
  .createDefaultIdentifyClusterServer()
394
394
  .createDefaultGroupsClusterServer()
395
395
  .createDefaultBridgedDeviceBasicInformationClusterServer('Light (CT)', 'LCT00018', 0xfff1, 'Matterbridge', 'Matterbridge Light')
@@ -416,7 +416,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
416
416
  this.lightCT?.addCommandHandler('moveToColorTemperature', async ({ request: { colorTemperatureMireds } }) => {
417
417
  this.lightCT?.log.debug(`Command moveToColorTemperature called request: ${colorTemperatureMireds}`);
418
418
  });
419
- this.outlet = new MatterbridgeEndpoint([onOffOutlet, bridgedNode, powerSource], { uniqueStorageKey: 'Outlet' }, this.config.debug)
419
+ this.outlet = new MatterbridgeEndpoint([onOffOutlet, bridgedNode, powerSource], { id: 'Outlet' }, this.config.debug)
420
420
  .createDefaultIdentifyClusterServer()
421
421
  .createDefaultGroupsClusterServer()
422
422
  .createDefaultBridgedDeviceBasicInformationClusterServer('Outlet', 'OUT00019', 0xfff1, 'Matterbridge', 'Matterbridge Outlet')
@@ -432,7 +432,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
432
432
  this.outlet?.addCommandHandler('off', async () => {
433
433
  this.outlet?.log.info('Command off called');
434
434
  });
435
- this.coverLift = new MatterbridgeEndpoint([coverDevice, bridgedNode, powerSource], { uniqueStorageKey: 'CoverLift' }, this.config.debug)
435
+ this.coverLift = new MatterbridgeEndpoint([coverDevice, bridgedNode, powerSource], { id: 'CoverLift' }, this.config.debug)
436
436
  .createDefaultIdentifyClusterServer()
437
437
  .createDefaultGroupsClusterServer()
438
438
  .createDefaultBridgedDeviceBasicInformationClusterServer('Cover lift', 'COV00020', 0xfff1, 'Matterbridge', 'Matterbridge Cover')
@@ -458,7 +458,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
458
458
  await this.coverLift?.setWindowCoveringCurrentTargetStatus(liftPercent100thsValue, liftPercent100thsValue, WindowCovering.MovementStatus.Stopped);
459
459
  this.coverLift?.log.info(`Command goToLiftPercentage ${liftPercent100thsValue} called`);
460
460
  });
461
- this.coverLiftTilt = new MatterbridgeEndpoint([coverDevice, bridgedNode, powerSource], { uniqueStorageKey: 'CoverLiftTilt' }, this.config.debug)
461
+ this.coverLiftTilt = new MatterbridgeEndpoint([coverDevice, bridgedNode, powerSource], { id: 'CoverLiftTilt' }, this.config.debug)
462
462
  .createDefaultIdentifyClusterServer()
463
463
  .createDefaultGroupsClusterServer()
464
464
  .createDefaultBridgedDeviceBasicInformationClusterServer('Cover lift and tilt', 'CLT00021', 0xfff1, 'Matterbridge', 'Matterbridge Cover')
@@ -489,7 +489,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
489
489
  await this.coverLiftTilt?.setWindowCoveringTargetAndCurrentPosition(position, tiltPercent100thsValue);
490
490
  this.coverLiftTilt?.log.info(`Command goToTiltPercentage ${tiltPercent100thsValue} called`);
491
491
  });
492
- this.lock = new MatterbridgeEndpoint([doorLockDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Lock' }, this.config.debug)
492
+ this.lock = new MatterbridgeEndpoint([doorLockDevice, bridgedNode, powerSource], { id: 'Lock' }, this.config.debug)
493
493
  .createDefaultIdentifyClusterServer()
494
494
  .createDefaultBridgedDeviceBasicInformationClusterServer('Lock', 'LOC00022', 0xfff1, 'Matterbridge', 'Matterbridge Lock')
495
495
  .createDefaultDoorLockClusterServer()
@@ -504,7 +504,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
504
504
  this.lock?.addCommandHandler('unlockDoor', async () => {
505
505
  this.lock?.log.info('Command unlockDoor called');
506
506
  });
507
- this.thermoAuto = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Thermostat (AutoMode)' }, this.config.debug)
507
+ this.thermoAuto = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (AutoMode)' }, this.config.debug)
508
508
  .createDefaultIdentifyClusterServer()
509
509
  .createDefaultGroupsClusterServer()
510
510
  .createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (Auto)', 'TAU00023', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat')
@@ -543,7 +543,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
543
543
  await this.thermoAuto?.subscribeAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', (value) => {
544
544
  this.thermoAuto?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
545
545
  }, this.thermoAuto.log);
546
- this.thermoAutoOccupancy = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Thermostat (AutoModeOccupancy)' }, this.config.debug)
546
+ this.thermoAutoOccupancy = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (AutoModeOccupancy)' }, this.config.debug)
547
547
  .createDefaultIdentifyClusterServer()
548
548
  .createDefaultGroupsClusterServer()
549
549
  .createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (AutoOccupancy)', 'TAO00058', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat')
@@ -566,7 +566,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
566
566
  await this.thermoAutoOccupancy?.subscribeAttribute(ThermostatCluster.id, 'unoccupiedCoolingSetpoint', (value) => {
567
567
  this.thermoAutoOccupancy?.log.info('Subscribe unoccupiedCoolingSetpoint called with:', value / 100);
568
568
  }, this.thermoAutoOccupancy.log);
569
- this.thermoHeat = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Thermostat (Heat)' }, this.config.debug)
569
+ this.thermoHeat = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (Heat)' }, this.config.debug)
570
570
  .createDefaultIdentifyClusterServer()
571
571
  .createDefaultGroupsClusterServer()
572
572
  .createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (Heat)', 'THE00024', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat')
@@ -604,7 +604,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
604
604
  await this.thermoHeat?.subscribeAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', (value) => {
605
605
  this.thermoHeat?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
606
606
  }, this.thermoHeat.log);
607
- this.thermoCool = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Thermostat (Cool)' }, this.config.debug)
607
+ this.thermoCool = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (Cool)' }, this.config.debug)
608
608
  .createDefaultIdentifyClusterServer()
609
609
  .createDefaultGroupsClusterServer()
610
610
  .createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (Cool)', 'TCO00025', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat')
@@ -624,7 +624,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
624
624
  await this.thermoCool?.subscribeAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', (value) => {
625
625
  this.thermoCool?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
626
626
  }, this.thermoCool.log);
627
- this.airPurifier = new MatterbridgeEndpoint([airPurifier, temperatureSensor, humiditySensor, bridgedNode, powerSource], { uniqueStorageKey: 'Air purifier' }, this.config.debug)
627
+ this.airPurifier = new MatterbridgeEndpoint([airPurifier, temperatureSensor, humiditySensor, bridgedNode, powerSource], { id: 'Air purifier' }, this.config.debug)
628
628
  .createDefaultBridgedDeviceBasicInformationClusterServer('Air purifier', 'AIR00026', 0xfff1, 'Matterbridge', 'Matterbridge Air purifier')
629
629
  .createDefaultIdentifyClusterServer()
630
630
  .createDefaultFanControlClusterServer()
@@ -669,7 +669,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
669
669
  if (isValidNumber(newValue, 0, 100))
670
670
  this.airPurifier?.setAttribute(FanControl.Cluster.id, 'percentCurrent', newValue, this.airPurifier?.log);
671
671
  }, this.airPurifier.log);
672
- this.pump = new MatterbridgeEndpoint([pumpDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Pump' }, this.config.debug)
672
+ this.pump = new MatterbridgeEndpoint([pumpDevice, bridgedNode, powerSource], { id: 'Pump' }, this.config.debug)
673
673
  .createDefaultBridgedDeviceBasicInformationClusterServer('Pump', 'PUM00028', 0xfff1, 'Matterbridge', 'Matterbridge Pump')
674
674
  .createDefaultIdentifyClusterServer()
675
675
  .createOnOffClusterServer()
@@ -692,7 +692,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
692
692
  this.pump?.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level } }) => {
693
693
  this.pump?.log.info(`Command moveToLevelWithOnOff called request: ${level}`);
694
694
  });
695
- this.valve = new MatterbridgeEndpoint([waterValve, bridgedNode, powerSource], { uniqueStorageKey: 'Water valve' }, this.config.debug)
695
+ this.valve = new MatterbridgeEndpoint([waterValve, bridgedNode, powerSource], { id: 'Water valve' }, this.config.debug)
696
696
  .createDefaultBridgedDeviceBasicInformationClusterServer('Water valve', 'WAV00029', 0xfff1, 'Matterbridge', 'Matterbridge Water valve')
697
697
  .createDefaultIdentifyClusterServer()
698
698
  .createDefaultValveConfigurationAndControlClusterServer()
@@ -701,7 +701,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
701
701
  this.valve?.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
702
702
  this.valve?.log.info(`Command identify called identifyTime:${identifyTime}`);
703
703
  });
704
- this.fanDefault = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Fan off low medium high auto' }, this.config.debug)
704
+ this.fanDefault = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { id: 'Fan off low medium high auto' }, this.config.debug)
705
705
  .createDefaultBridgedDeviceBasicInformationClusterServer('Fan', 'FAN00030', 0xfff1, 'Matterbridge', 'Matterbridge Fan')
706
706
  .createDefaultPowerSourceWiredClusterServer()
707
707
  .createDefaultFanControlClusterServer()
@@ -743,7 +743,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
743
743
  if (isValidNumber(newValue, 0, 100))
744
744
  this.fanDefault?.setAttribute(FanControl.Cluster.id, 'percentCurrent', newValue, this.fanDefault?.log);
745
745
  }, this.fanDefault.log);
746
- this.fanBase = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Fan off low medium high' }, this.config.debug)
746
+ this.fanBase = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { id: 'Fan off low medium high' }, this.config.debug)
747
747
  .createDefaultBridgedDeviceBasicInformationClusterServer('Fan base', 'FBA00031', 0xfff1, 'Matterbridge', 'Matterbridge Fan')
748
748
  .createDefaultPowerSourceWiredClusterServer()
749
749
  .createBaseFanControlClusterServer()
@@ -785,7 +785,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
785
785
  if (isValidNumber(newValue, 0, 100))
786
786
  this.fanBase?.setAttribute(FanControl.Cluster.id, 'percentCurrent', newValue, this.fanBase?.log);
787
787
  }, this.fanBase.log);
788
- this.fanOnHigh = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Fan off high' }, this.config.debug)
788
+ this.fanOnHigh = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { id: 'Fan off high' }, this.config.debug)
789
789
  .createDefaultBridgedDeviceBasicInformationClusterServer('Fan off high', 'FOH00032', 0xfff1, 'Matterbridge', 'Matterbridge Fan')
790
790
  .createDefaultPowerSourceWiredClusterServer()
791
791
  .createOnOffFanControlClusterServer()
@@ -815,7 +815,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
815
815
  this.fanOnHigh?.setAttribute(FanControl.Cluster.id, 'percentSetting', newValue, this.fanOnHigh?.log);
816
816
  }
817
817
  }, this.fanOnHigh.log);
818
- this.fanComplete = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Fan complete' }, this.config.debug)
818
+ this.fanComplete = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { id: 'Fan complete' }, this.config.debug)
819
819
  .createDefaultBridgedDeviceBasicInformationClusterServer('Fan complete', 'FCO00033', 0xfff1, 'Matterbridge', 'Matterbridge Fan')
820
820
  .createDefaultPowerSourceWiredClusterServer()
821
821
  .createCompleteFanControlClusterServer()
@@ -866,64 +866,65 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
866
866
  await this.fanComplete?.subscribeAttribute(FanControl.Cluster.id, 'airflowDirection', (newValue, oldValue, context) => {
867
867
  this.fanComplete?.log.info(`Airflow direction changed from ${this.fanDirectionLookup[oldValue]} to ${this.fanDirectionLookup[newValue]} context: ${context.offline === true ? 'offline' : 'online'}`);
868
868
  }, this.fanComplete?.log);
869
- this.waterLeak = new MatterbridgeEndpoint([waterLeakDetector, bridgedNode, powerSource], { uniqueStorageKey: 'Water leak detector' }, this.config.debug)
869
+ this.waterLeak = new MatterbridgeEndpoint([waterLeakDetector, bridgedNode, powerSource], { id: 'Water leak detector' }, this.config.debug)
870
870
  .createDefaultBridgedDeviceBasicInformationClusterServer('Water leak detector', 'WLD00034', 0xfff1, 'Matterbridge', 'Matterbridge WaterLeakDetector')
871
871
  .createDefaultPowerSourceRechargeableBatteryClusterServer()
872
872
  .createDefaultBooleanStateClusterServer(false)
873
873
  .addRequiredClusterServers()
874
874
  .addOptionalClusterServers();
875
875
  this.waterLeak = await this.addDevice(this.waterLeak);
876
- this.waterFreeze = new MatterbridgeEndpoint([waterFreezeDetector, bridgedNode, powerSource], { uniqueStorageKey: 'Water freeze detector' }, this.config.debug)
876
+ this.waterFreeze = new MatterbridgeEndpoint([waterFreezeDetector, bridgedNode, powerSource], { id: 'Water freeze detector' }, this.config.debug)
877
877
  .createDefaultBridgedDeviceBasicInformationClusterServer('Water freeze detector', 'WFD00035', 0xfff1, 'Matterbridge', 'Matterbridge WaterFreezeDetector')
878
878
  .createDefaultPowerSourceRechargeableBatteryClusterServer()
879
879
  .createDefaultBooleanStateClusterServer(false)
880
880
  .addRequiredClusterServers()
881
881
  .addOptionalClusterServers();
882
882
  this.waterFreeze = await this.addDevice(this.waterFreeze);
883
- this.rain = new MatterbridgeEndpoint([rainSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Rain sensor' }, this.config.debug)
883
+ this.rain = new MatterbridgeEndpoint([rainSensor, bridgedNode, powerSource], { id: 'Rain sensor' }, this.config.debug)
884
884
  .createDefaultBridgedDeviceBasicInformationClusterServer('Rain sensor', 'RAI00036', 0xfff1, 'Matterbridge', 'Matterbridge RainSensor')
885
885
  .createDefaultPowerSourceRechargeableBatteryClusterServer()
886
886
  .createDefaultIdentifyClusterServer()
887
887
  .createDefaultBooleanStateClusterServer(false)
888
888
  .createDefaultBooleanStateConfigurationClusterServer();
889
889
  this.rain = await this.addDevice(this.rain);
890
- this.smokeCo = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'SmokeCo alarm sensor' }, this.config.debug)
890
+ this.smokeCo = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { id: 'SmokeCo alarm sensor' }, this.config.debug)
891
891
  .createDefaultBridgedDeviceBasicInformationClusterServer('SmokeCo alarm sensor', 'SCA00037', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm')
892
892
  .createDefaultIdentifyClusterServer()
893
893
  .createDefaultSmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal, SmokeCoAlarm.AlarmState.Normal)
894
894
  .createDefaultPowerSourceReplaceableBatteryClusterServer()
895
895
  .createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(100);
896
896
  this.smokeCo = await this.addDevice(this.smokeCo);
897
- this.smokeOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'Smoke alarm sensor' }, this.config.debug)
897
+ this.smokeOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { id: 'Smoke alarm sensor' }, this.config.debug)
898
898
  .createDefaultBridgedDeviceBasicInformationClusterServer('Smoke alarm sensor', 'SAL00038', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm')
899
899
  .createDefaultIdentifyClusterServer()
900
900
  .createSmokeOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
901
901
  .createDefaultPowerSourceReplaceableBatteryClusterServer();
902
902
  this.smokeOnly = await this.addDevice(this.smokeOnly);
903
- this.coOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'Co alarm sensor' }, this.config.debug)
903
+ this.coOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { id: 'Co alarm sensor' }, this.config.debug)
904
904
  .createDefaultBridgedDeviceBasicInformationClusterServer('Co alarm sensor', 'COA00039', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm')
905
905
  .createDefaultIdentifyClusterServer()
906
906
  .createCoOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
907
907
  .createDefaultPowerSourceReplaceableBatteryClusterServer()
908
908
  .createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(100);
909
909
  this.coOnly = await this.addDevice(this.coOnly);
910
- this.airQuality = new MatterbridgeEndpoint([airQualitySensor, bridgedNode, powerSource], { uniqueStorageKey: 'Air quality sensor' }, this.config.debug)
910
+ this.airQuality = new MatterbridgeEndpoint([airQualitySensor, bridgedNode, powerSource], { id: 'Air quality sensor' }, this.config.debug)
911
911
  .createDefaultBridgedDeviceBasicInformationClusterServer('Air quality sensor', 'AQS00040', 0xfff1, 'Matterbridge', 'Matterbridge Air Quality Sensor')
912
912
  .createDefaultPowerSourceReplaceableBatteryClusterServer(50, PowerSource.BatChargeLevel.Warning, 2900, 'CR2450', 1)
913
913
  .addRequiredClusterServers()
914
914
  .addClusterServers([TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id])
915
+ .createDefaultAirQualityClusterServer(AirQuality.AirQualityEnum.Good)
915
916
  .createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(10)
916
917
  .createDefaultCarbonDioxideConcentrationMeasurementClusterServer(400)
917
918
  .createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(1)
918
919
  .createDefaultOzoneConcentrationMeasurementClusterServer(1)
919
- .createDefaultFormaldehydeConcentrationMeasurementClusterServer(1, ConcentrationMeasurement.MeasurementUnit.Ugm3)
920
- .createDefaultPm1ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
921
- .createDefaultPm25ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
922
- .createDefaultPm10ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
923
- .createDefaultRadonConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
924
- .createDefaultTvocMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3);
920
+ .createDefaultFormaldehydeConcentrationMeasurementClusterServer(1)
921
+ .createDefaultPm1ConcentrationMeasurementClusterServer(100)
922
+ .createDefaultPm25ConcentrationMeasurementClusterServer(100)
923
+ .createDefaultPm10ConcentrationMeasurementClusterServer(100)
924
+ .createDefaultRadonConcentrationMeasurementClusterServer(100)
925
+ .createDefaultTvocMeasurementClusterServer(100);
925
926
  this.airQuality = await this.addDevice(this.airQuality);
926
- this.momentarySwitch = new MatterbridgeEndpoint([bridgedNode, powerSource], { uniqueStorageKey: 'Momentary switch composed' }, this.config.debug)
927
+ this.momentarySwitch = new MatterbridgeEndpoint([bridgedNode, powerSource], { id: 'Momentary switch composed' }, this.config.debug)
927
928
  .createDefaultBridgedDeviceBasicInformationClusterServer('Momentary switch', 'MOS00041', 0xfff1, 'Matterbridge', 'Matterbridge MomentarySwitch')
928
929
  .createDefaultIdentifyClusterServer()
929
930
  .createDefaultPowerSourceReplaceableBatteryClusterServer(50, PowerSource.BatChargeLevel.Ok, 2900, 'CR2450', 1);
@@ -1005,7 +1006,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
1005
1006
  await switch6.addFixedLabel('switch', 'Switch 6');
1006
1007
  await switch6.addFixedLabel('button', 'Button 6');
1007
1008
  }
1008
- this.latchingSwitch = new MatterbridgeEndpoint([genericSwitch, bridgedNode, powerSource], { uniqueStorageKey: 'Latching switch' }, this.config.debug)
1009
+ this.latchingSwitch = new MatterbridgeEndpoint([genericSwitch, bridgedNode, powerSource], { id: 'Latching switch' }, this.config.debug)
1009
1010
  .createDefaultBridgedDeviceBasicInformationClusterServer('Latching switch', 'LAS00042', 0xfff1, 'Matterbridge', 'Matterbridge LatchingSwitch')
1010
1011
  .createDefaultIdentifyClusterServer()
1011
1012
  .createDefaultLatchingSwitchClusterServer()
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "2.0.0",
3
+ "version": "2.0.1-dev-20251112-2974ca7",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge-example-dynamic-platform",
9
- "version": "2.0.0",
9
+ "version": "2.0.1-dev-20251112-2974ca7",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "node-ansi-logger": "3.1.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "2.0.0",
3
+ "version": "2.0.1-dev-20251112-2974ca7",
4
4
  "description": "Matterbridge dynamic plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",