matterbridge-example-dynamic-platform 2.0.15 → 2.0.16-dev-20260420-a832576

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
@@ -7,10 +7,10 @@
7
7
  ![Node.js CI](https://github.com/Luligu/matterbridge-example-dynamic-platform/actions/workflows/build.yml/badge.svg)
8
8
  ![CodeQL](https://github.com/Luligu/matterbridge-example-dynamic-platform/actions/workflows/codeql.yml/badge.svg)
9
9
  [![codecov](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platform/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platformr)
10
- [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://github.com/prettier/prettier)
11
- [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://github.com/eslint/eslint)
10
+ [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://prettier.io/)
11
+ [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://eslint.org/)
12
12
  [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
13
- [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/api/esm.html)
13
+ [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
14
14
  [![matterbridge.io](https://img.shields.io/badge/matterbridge.io-online-brightgreen)](https://matterbridge.io)
15
15
 
16
16
  [![powered by](https://img.shields.io/badge/powered%20by-matterbridge-blue)](https://www.npmjs.com/package/matterbridge)
@@ -26,6 +26,24 @@ If you like this project and find it useful, please consider giving it a star on
26
26
 
27
27
  <a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="120"></a>
28
28
 
29
+ ## [2.0.16] - Dev branch
30
+
31
+ ### Changed
32
+
33
+ - [package]: Preliminary compatibility update to `matterbridge 3.8.0`, matter 1.5.1 and matter.js 0.17.0.
34
+ - [package]: Update dependencies.
35
+ - [package]: Bump package to `automator` v.3.1.6.
36
+ - [package]: Bump `typescript` to v.6.0.3.
37
+ - [package]: Bump `eslint` to v.10.2.1.
38
+ - [package]: Bump `typescript-eslint` to v.8.58.2.
39
+ - [package]: Add `.vscode\tasks.json`.
40
+ - [package]: Add `.vscode\settings.json`.
41
+ - [devcontainer]: Add `Claude Code for VS Code extension` to Dev Container.
42
+ - [agent]: Add `.github\copilot-instructions.md` for copilot.
43
+ - [agent]: Add `.claude\CLAUDE.md` for claude.
44
+ - [agent]: Add agent custom instructions (`testing`) for copilot and claude.
45
+ - [agent]: Add agent custom instructions (`matterbridge`) for copilot and claude.
46
+
29
47
  ## [2.0.15] - 2026-04-08
30
48
 
31
49
  ### Added
package/README.md CHANGED
@@ -9,10 +9,10 @@
9
9
  ![Node.js CI](https://github.com/Luligu/matterbridge-example-dynamic-platform/actions/workflows/build.yml/badge.svg)
10
10
  ![CodeQL](https://github.com/Luligu/matterbridge-example-dynamic-platform/actions/workflows/codeql.yml/badge.svg)
11
11
  [![codecov](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platform/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platform)
12
- [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://github.com/prettier/prettier)
13
- [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://github.com/eslint/eslint)
12
+ [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://prettier.io/)
13
+ [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://eslint.org/)
14
14
  [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
15
- [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/api/esm.html)
15
+ [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
16
16
  [![matterbridge.io](https://img.shields.io/badge/matterbridge.io-online-brightgreen)](https://matterbridge.io)
17
17
 
18
18
  [![powered by](https://img.shields.io/badge/powered%20by-matterbridge-blue)](https://www.npmjs.com/package/matterbridge)
package/dist/module.js CHANGED
@@ -720,7 +720,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
720
720
  .createDefaultPowerSourceRechargeableBatteryClusterServer(95)
721
721
  .addRequiredClusterServers();
722
722
  this.userPinLock = await this.addDevice(this.userPinLock);
723
- await this.userPinLock?.setAttribute(PowerSource.Cluster.with(PowerSource.Feature.Rechargeable, PowerSource.Feature.Battery), 'batChargeState', PowerSource.BatChargeState.IsCharging);
723
+ await this.userPinLock?.setAttribute(PowerSource.Complete, 'batChargeState', PowerSource.BatChargeState.IsCharging);
724
724
  this.userPinLock?.addCommandHandler('Identify.identify', async ({ request: { identifyTime } }) => {
725
725
  this.userPinLock?.log.info(`Command identify called identifyTime:${identifyTime}`);
726
726
  });
@@ -768,14 +768,14 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
768
768
  const lookupSetpointAdjustMode = ['Heat', 'Cool', 'Both'];
769
769
  this.thermoAuto?.log.info(`Command setpointRaiseLower called with mode: ${lookupSetpointAdjustMode[mode]} amount: ${amount / 10}`);
770
770
  });
771
- await this.thermoAuto?.subscribeAttribute(Thermostat.CompleteInstance, 'systemMode', (value) => {
771
+ await this.thermoAuto?.subscribeAttribute(Thermostat.Complete, 'systemMode', (value) => {
772
772
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
773
773
  this.thermoAuto?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
774
774
  }, this.thermoAuto.log);
775
- await this.thermoAuto?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'occupiedHeatingSetpoint', (value) => {
775
+ await this.thermoAuto?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedHeatingSetpoint', (value) => {
776
776
  this.thermoAuto?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
777
777
  }, this.thermoAuto.log);
778
- await this.thermoAuto?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling), 'occupiedCoolingSetpoint', (value) => {
778
+ await this.thermoAuto?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedCoolingSetpoint', (value) => {
779
779
  this.thermoAuto?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
780
780
  }, this.thermoAuto.log);
781
781
  this.thermoAutoOccupancy = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (AutoModeOccupancy)' }, this.config.debug)
@@ -785,20 +785,20 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
785
785
  .createDefaultPowerSourceWiredClusterServer()
786
786
  .addRequiredClusterServers();
787
787
  this.thermoAutoOccupancy = await this.addDevice(this.thermoAutoOccupancy);
788
- await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'systemMode', (value) => {
788
+ await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Complete, 'systemMode', (value) => {
789
789
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
790
790
  this.thermoAutoOccupancy?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
791
791
  }, this.thermoAutoOccupancy.log);
792
- await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'occupiedHeatingSetpoint', (value) => {
792
+ await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedHeatingSetpoint', (value) => {
793
793
  this.thermoAutoOccupancy?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
794
794
  }, this.thermoAutoOccupancy.log);
795
- await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling), 'occupiedCoolingSetpoint', (value) => {
795
+ await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedCoolingSetpoint', (value) => {
796
796
  this.thermoAutoOccupancy?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
797
797
  }, this.thermoAutoOccupancy.log);
798
- await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Occupancy), 'unoccupiedHeatingSetpoint', (value) => {
798
+ await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.id, 'unoccupiedHeatingSetpoint', (value) => {
799
799
  this.thermoAutoOccupancy?.log.info('Subscribe unoccupiedHeatingSetpoint called with:', value / 100);
800
800
  }, this.thermoAutoOccupancy.log);
801
- await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling, Thermostat.Feature.Occupancy), 'unoccupiedCoolingSetpoint', (value) => {
801
+ await this.thermoAutoOccupancy?.subscribeAttribute(Thermostat.Cluster.id, 'unoccupiedCoolingSetpoint', (value) => {
802
802
  this.thermoAutoOccupancy?.log.info('Subscribe unoccupiedCoolingSetpoint called with:', value / 100);
803
803
  }, this.thermoAutoOccupancy.log);
804
804
  const presets_List = [
@@ -931,20 +931,20 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
931
931
  this.thermoAutoPresets?.addCommandHandler('setActivePresetRequest', async ({ request: { presetHandle } }) => {
932
932
  this.thermoAutoPresets?.log.info(`Command setActivePresetRequest called with presetHandle: ${presetHandle ? `0x${Buffer.from(presetHandle).toString('hex')}` : 'null'}`);
933
933
  });
934
- await this.thermoAutoPresets?.subscribeAttribute(Thermostat.CompleteInstance, 'systemMode', (newValue, oldValue) => {
934
+ await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Complete, 'systemMode', (newValue, oldValue) => {
935
935
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
936
936
  this.thermoAutoPresets?.log.info(`Subscribe systemMode called with: ${lookupSystemMode[newValue]} (old value: ${lookupSystemMode[oldValue]})`);
937
937
  }, this.thermoAutoPresets.log);
938
- await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'occupiedHeatingSetpoint', (newValue, oldValue) => {
938
+ await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedHeatingSetpoint', (newValue, oldValue) => {
939
939
  this.thermoAutoPresets?.log.info(`Subscribe occupiedHeatingSetpoint called with: ${newValue / 100} (old value: ${oldValue / 100})`);
940
940
  }, this.thermoAutoPresets.log);
941
- await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling), 'occupiedCoolingSetpoint', (newValue, oldValue) => {
941
+ await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedCoolingSetpoint', (newValue, oldValue) => {
942
942
  this.thermoAutoPresets?.log.info(`Subscribe occupiedCoolingSetpoint called with: ${newValue / 100} (old value: ${oldValue / 100})`);
943
943
  }, this.thermoAutoPresets.log);
944
- await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.Presets), 'activePresetHandle', (newValue, oldValue) => {
944
+ await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.id, 'activePresetHandle', (newValue, oldValue) => {
945
945
  this.thermoAutoPresets?.log.info(`Subscribe activePresetHandle called with: ${newValue ? `0x${Buffer.from(newValue).toString('hex')}` : 'null'} (old value: ${oldValue ? `0x${Buffer.from(oldValue).toString('hex')}` : 'null'})`);
946
946
  }, this.thermoAutoPresets.log);
947
- await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.Presets), 'presets', (newValue, oldValue) => {
947
+ await this.thermoAutoPresets?.subscribeAttribute(Thermostat.Cluster.id, 'presets', (newValue, oldValue) => {
948
948
  this.thermoAutoPresets?.log.info(`Subscribe presets called with: ${debugStringify(newValue)} (old value: ${debugStringify(oldValue)})`);
949
949
  }, this.thermoAutoPresets.log);
950
950
  this.thermoHeat = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (Heat)' }, this.config.debug)
@@ -978,11 +978,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
978
978
  this.thermoHeat?.addCommandHandler('triggerEffect', async ({ request: { effectIdentifier, effectVariant } }) => {
979
979
  this.thermoHeat?.log.info(`Command identify called effectIdentifier ${effectIdentifier} effectVariant ${effectVariant}`);
980
980
  });
981
- await this.thermoHeat?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'systemMode', (value) => {
981
+ await this.thermoHeat?.subscribeAttribute(Thermostat.Complete, 'systemMode', (value) => {
982
982
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
983
983
  this.thermoHeat?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
984
984
  }, this.thermoHeat.log);
985
- await this.thermoHeat?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Heating), 'occupiedHeatingSetpoint', (value) => {
985
+ await this.thermoHeat?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedHeatingSetpoint', (value) => {
986
986
  this.thermoHeat?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
987
987
  }, this.thermoHeat.log);
988
988
  this.thermoCool = new MatterbridgeEndpoint([thermostatDevice, bridgedNode, powerSource], { id: 'Thermostat (Cool)' }, this.config.debug)
@@ -998,11 +998,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
998
998
  this.thermoCool?.addCommandHandler('triggerEffect', async ({ request: { effectIdentifier, effectVariant } }) => {
999
999
  this.thermoCool?.log.info(`Command identify called effectIdentifier ${effectIdentifier} effectVariant ${effectVariant}`);
1000
1000
  });
1001
- await this.thermoCool?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling), 'systemMode', (value) => {
1001
+ await this.thermoCool?.subscribeAttribute(Thermostat.Complete, 'systemMode', (value) => {
1002
1002
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
1003
1003
  this.thermoCool?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
1004
1004
  }, this.thermoCool.log);
1005
- await this.thermoCool?.subscribeAttribute(Thermostat.Cluster.with(Thermostat.Feature.Cooling), 'occupiedCoolingSetpoint', (value) => {
1005
+ await this.thermoCool?.subscribeAttribute(Thermostat.Cluster.id, 'occupiedCoolingSetpoint', (value) => {
1006
1006
  this.thermoCool?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
1007
1007
  }, this.thermoCool.log);
1008
1008
  this.airPurifier = new MatterbridgeEndpoint([airPurifier, bridgedNode, powerSource], { id: 'Air purifier' }, this.config.debug)
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "2.0.15",
3
+ "version": "2.0.16-dev-20260420-a832576",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge-example-dynamic-platform",
9
- "version": "2.0.15",
9
+ "version": "2.0.16-dev-20260420-a832576",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
- "node-ansi-logger": "3.2.0",
13
- "node-persist-manager": "2.0.1"
12
+ "node-ansi-logger": "3.2.1",
13
+ "node-persist-manager": "2.0.2"
14
14
  },
15
15
  "engines": {
16
16
  "node": ">=20.19.0 <21.0.0 || >=22.13.0 <23.0.0 || >=24.0.0 <25.0.0"
@@ -21,13 +21,13 @@
21
21
  }
22
22
  },
23
23
  "node_modules/node-ansi-logger": {
24
- "version": "3.2.0",
25
- "resolved": "https://registry.npmjs.org/node-ansi-logger/-/node-ansi-logger-3.2.0.tgz",
26
- "integrity": "sha512-HvKsTZpMSrEkO2x2egSvTpjgWkVpYO0xsXNxmCG+7vi0Ohs5yy9EdTKbTPYbNwzXY70g7nqsE10yE+Tsw5MA8w==",
24
+ "version": "3.2.1",
25
+ "resolved": "https://registry.npmjs.org/node-ansi-logger/-/node-ansi-logger-3.2.1.tgz",
26
+ "integrity": "sha512-R5YptDlGVfVqACSiOtfmAwV+N/ytj8crwXStrs9d9kdAXYT4xF1J1H5qfhGbXsot06OHSha76Y2Fq66sIzMq2A==",
27
27
  "hasShrinkwrap": true,
28
28
  "license": "Apache-2.0",
29
29
  "engines": {
30
- "node": ">=20.0.0 <21.0.0 || >=22.0.0 <23.0.0 || >=24.0.0 <25.0.0"
30
+ "node": ">=20.19.0 <21.0.0 || >=22.13.0 <23.0.0 || >=24.0.0 <25.0.0"
31
31
  },
32
32
  "funding": {
33
33
  "type": "buymeacoffee",
@@ -35,16 +35,16 @@
35
35
  }
36
36
  },
37
37
  "node_modules/node-persist-manager": {
38
- "version": "2.0.1",
39
- "resolved": "https://registry.npmjs.org/node-persist-manager/-/node-persist-manager-2.0.1.tgz",
40
- "integrity": "sha512-uCnZd8YZSaaYkxhFdOtzC4Q0uix+z5Cfnq5RbL43OKKFvU/6Ms/kZtXWF4CrlhIX9CBKAPUtV7pIUQy85nYc8g==",
38
+ "version": "2.0.2",
39
+ "resolved": "https://registry.npmjs.org/node-persist-manager/-/node-persist-manager-2.0.2.tgz",
40
+ "integrity": "sha512-FGDdNOH4c6Xqb2LwTZ55GT0UaoqaOiWJ+hWt+O7w1+9QIUQh2NsaXPtGaTiibvCi6cX823JTFQPJK2NRseLTvw==",
41
41
  "hasShrinkwrap": true,
42
42
  "license": "Apache-2.0",
43
43
  "dependencies": {
44
44
  "node-persist": "4.0.4"
45
45
  },
46
46
  "engines": {
47
- "node": ">=20.0.0 <21.0.0 || >=22.0.0 <23.0.0 || >=24.0.0 <25.0.0"
47
+ "node": ">=20.19.0 <21.0.0 || >=22.13.0 <23.0.0 || >=24.0.0 <25.0.0"
48
48
  },
49
49
  "funding": {
50
50
  "type": "buymeacoffee",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "2.0.15",
3
+ "version": "2.0.16-dev-20260420-a832576",
4
4
  "description": "Matterbridge dynamic plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",
@@ -67,11 +67,11 @@
67
67
  "*.schema.json"
68
68
  ],
69
69
  "dependencies": {
70
- "node-ansi-logger": "3.2.0",
71
- "node-persist-manager": "2.0.1"
70
+ "node-ansi-logger": "3.2.1",
71
+ "node-persist-manager": "2.0.2"
72
72
  },
73
73
  "overrides": {
74
- "eslint": "10.2.0",
74
+ "eslint": "10.2.1",
75
75
  "@eslint/js": "10.0.1"
76
76
  }
77
77
  }