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 +21 -3
- package/README.md +3 -3
- package/dist/module.js +18 -18
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|

|
|
8
8
|

|
|
9
9
|
[](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platformr)
|
|
10
|
-
[](https://
|
|
11
|
-
[](https://
|
|
10
|
+
[](https://prettier.io/)
|
|
11
|
+
[](https://eslint.org/)
|
|
12
12
|
[](https://www.typescriptlang.org/)
|
|
13
|
-
[](https://nodejs.org/
|
|
13
|
+
[](https://nodejs.org/)
|
|
14
14
|
[](https://matterbridge.io)
|
|
15
15
|
|
|
16
16
|
[](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
|

|
|
10
10
|

|
|
11
11
|
[](https://codecov.io/gh/Luligu/matterbridge-example-dynamic-platform)
|
|
12
|
-
[](https://
|
|
13
|
-
[](https://
|
|
12
|
+
[](https://prettier.io/)
|
|
13
|
+
[](https://eslint.org/)
|
|
14
14
|
[](https://www.typescriptlang.org/)
|
|
15
|
-
[](https://nodejs.org/
|
|
15
|
+
[](https://nodejs.org/)
|
|
16
16
|
[](https://matterbridge.io)
|
|
17
17
|
|
|
18
18
|
[](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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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)
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "matterbridge-example-dynamic-platform",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
9
|
+
"version": "2.0.16-dev-20260420-a832576",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"node-ansi-logger": "3.2.
|
|
13
|
-
"node-persist-manager": "2.0.
|
|
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.
|
|
25
|
-
"resolved": "https://registry.npmjs.org/node-ansi-logger/-/node-ansi-logger-3.2.
|
|
26
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
39
|
-
"resolved": "https://registry.npmjs.org/node-persist-manager/-/node-persist-manager-2.0.
|
|
40
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
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.
|
|
71
|
-
"node-persist-manager": "2.0.
|
|
70
|
+
"node-ansi-logger": "3.2.1",
|
|
71
|
+
"node-persist-manager": "2.0.2"
|
|
72
72
|
},
|
|
73
73
|
"overrides": {
|
|
74
|
-
"eslint": "10.2.
|
|
74
|
+
"eslint": "10.2.1",
|
|
75
75
|
"@eslint/js": "10.0.1"
|
|
76
76
|
}
|
|
77
77
|
}
|