matterbridge-example-dynamic-platform 1.0.0 → 1.0.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.
package/.eslintrc.json CHANGED
@@ -1,4 +1,5 @@
1
1
  {
2
+ "ignorePatterns":["dist/", "node_modules/"],
2
3
  "plugins": [
3
4
  "@typescript-eslint",
4
5
  "@stylistic",
@@ -22,12 +23,12 @@
22
23
  ],
23
24
  "rules": {
24
25
  "prettier/prettier": ["error"],
25
- "indent": ["error", 2],
26
- "max-len": ["warn", 180],
26
+ "indent": ["error", 2, { "SwitchCase": 1 }],
27
+ "max-len": ["warn", 200],
27
28
  "no-console": ["warn"],
28
29
  "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": false }],
29
30
  "comma-spacing": ["error", { "before": false, "after": true }],
30
- "space-before-function-paren": ["error", { "anonymous": "never", "named": "never", "asyncArrow": "always" }],
31
+ "space-before-function-paren": ["error", { "anonymous": "always", "named": "never", "asyncArrow": "always" }],
31
32
  "keyword-spacing": ["error", { "before": true, "after": true }],
32
33
  "no-multi-spaces": "error",
33
34
  "object-curly-spacing": ["error", "always"],
@@ -40,6 +41,6 @@
40
41
  "after": true
41
42
  }
42
43
  }
43
- }]
44
+ }]
44
45
  }
45
46
  }
package/.prettierrc.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "printWidth": 180,
2
+ "printWidth": 200,
3
3
  "semi": true,
4
4
  "tabWidth": 2,
5
5
  "useTabs": false,
package/README.md CHANGED
@@ -1,2 +1,15 @@
1
- # Matterbridge
2
- Matterbridge dynamic platform example plugin
1
+ # <img src="https://github.com/Luligu/matterbridge/blob/main/frontend/public/matterbridge%2064x64.png" alt="Matterbridge Logo" width="64px" height="64px">&nbsp;&nbsp;&nbsp;Matterbridge dynamic platform example plugin
2
+
3
+ [![npm version](https://img.shields.io/npm/v/matterbridge-example-dynamic-platform.svg)](https://www.npmjs.com/package/matterbridge-example-dynamic-platform)
4
+ [![npm downloads](https://img.shields.io/npm/dt/matterbridge-example-dynamic-platform.svg)](https://www.npmjs.com/package/matterbridge-example-dynamic-platform)
5
+
6
+ [![power by](https://img.shields.io/badge/powered%20by-matterbridge-blue)](https://www.npmjs.com/package/matterbridge)
7
+ [![power by](https://img.shields.io/badge/powered%20by-matter--history-blue)](https://www.npmjs.com/package/matter-history)
8
+ [![power by](https://img.shields.io/badge/powered%20by-node--ansi--logger-blue)](https://www.npmjs.com/package/node-ansi-logger)
9
+ [![power by](https://img.shields.io/badge/powered%20by-node--persist--manager-blue)](https://www.npmjs.com/package/node-persist-manager)
10
+
11
+ ---
12
+
13
+ Matterbridge dynamic platform example plugin is a template to develop your own plugin using the dynamic platform.
14
+
15
+ See the guidelines on [Matterbridge](https://github.com/Luligu/matterbridge/blob/main/README.md) for more information.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Matterbridge } from '../../matterbridge/dist/index.js';
1
+ import { Matterbridge } from 'matterbridge';
2
2
  import { AnsiLogger } from 'node-ansi-logger';
3
3
  import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,sCAgBnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,sCAEnF"}
package/dist/index.js CHANGED
@@ -1,6 +1,3 @@
1
- import { MatterServer } from '@project-chip/matter-node.js';
2
- import { Format, Level, Logger } from '@project-chip/matter-node.js/log';
3
- import { StorageBackendJsonFile, StorageManager } from '@project-chip/matter-node.js/storage';
4
1
  import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
5
2
  /**
6
3
  * This is the standard interface for MatterBridge plugins.
@@ -9,16 +6,6 @@ import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
9
6
  * @param matterbridge - An instance of MatterBridge
10
7
  */
11
8
  export default function initializePlugin(matterbridge, log) {
12
- // set matter.js logger level and format
13
- Logger.defaultLogLevel = Level.DEBUG;
14
- Logger.format = Format.ANSI;
15
- // Do nothing just load @project-chip/matter-node.js for the Time Crypto Net Node variant
16
- const storageJson = new StorageBackendJsonFile('matterbridge-example');
17
- const storageManager = new StorageManager(storageJson);
18
- new MatterServer(storageManager);
19
- log.info('Matterbridge dynamic platform plugin example is loading...');
20
- const platform = new ExampleMatterbridgeDynamicPlatform(matterbridge, log);
21
- log.info('Matterbridge dynamic platform plugin example initialized successfully!');
22
- return platform;
9
+ return new ExampleMatterbridgeDynamicPlatform(matterbridge, log);
23
10
  }
24
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAI9F,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAA0B,EAAE,GAAe;IAClF,wCAAwC;IACxC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAE5B,yFAAyF;IACzF,MAAM,WAAW,GAAG,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;IAEjC,GAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,IAAI,kCAAkC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE3E,GAAG,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAA0B,EAAE,GAAe;IAClF,OAAO,IAAI,kCAAkC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACnE,CAAC"}
@@ -1,8 +1,18 @@
1
- import { Matterbridge, MatterbridgeDynamicPlatform } from '../../matterbridge/dist/index.js';
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Matterbridge, MatterbridgeDevice, MatterbridgeDynamicPlatform } from 'matterbridge';
2
3
  import { AnsiLogger } from 'node-ansi-logger';
3
4
  export declare class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
5
+ switch: MatterbridgeDevice | undefined;
6
+ light: MatterbridgeDevice | undefined;
7
+ outlet: MatterbridgeDevice | undefined;
8
+ cover: MatterbridgeDevice | undefined;
9
+ switchInterval: NodeJS.Timeout | undefined;
10
+ lightInterval: NodeJS.Timeout | undefined;
11
+ outletInterval: NodeJS.Timeout | undefined;
12
+ coverInterval: NodeJS.Timeout | undefined;
4
13
  constructor(matterbridge: Matterbridge, log: AnsiLogger);
5
- onStartDynamicPlatform(): void;
6
- onShutdown(): void;
14
+ onStart(reason?: string): Promise<void>;
15
+ onConfigure(): Promise<void>;
16
+ onShutdown(reason?: string): Promise<void>;
7
17
  }
8
18
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AACjH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,qBAAa,kCAAmC,SAAQ,2BAA2B;gBACrE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU;IAI9C,sBAAsB,IAAI,IAAI;IAuC9B,UAAU,IAAI,IAAI;CAG5B"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,qBAAa,kCAAmC,SAAQ,2BAA2B;IACjF,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;gBAE9B,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU;IAIxC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IAqIvB,WAAW;IAwFX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAQ1C"}
package/dist/platform.js CHANGED
@@ -1,45 +1,218 @@
1
- import { DeviceTypes } from '@project-chip/matter-node.js/device';
2
- import { MatterbridgeDevice, MatterbridgeDynamicPlatform } from '../../matterbridge/dist/index.js';
1
+ import { ColorControl, ColorControlCluster, DeviceTypes, LevelControlCluster, OnOffCluster, WindowCovering, WindowCoveringCluster, onOffSwitch } from 'matterbridge';
2
+ import { MatterbridgeDevice, MatterbridgeDynamicPlatform } from 'matterbridge';
3
3
  export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
4
+ switch;
5
+ light;
6
+ outlet;
7
+ cover;
8
+ switchInterval;
9
+ lightInterval;
10
+ outletInterval;
11
+ coverInterval;
4
12
  constructor(matterbridge, log) {
5
13
  super(matterbridge, log);
6
14
  }
7
- onStartDynamicPlatform() {
8
- this.log.info('onStartDynamicPlatform called');
9
- const cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING);
10
- cover.createDefaultIdentifyClusterServer();
11
- cover.createDefaultGroupsClusterServer();
12
- cover.createDefaultScenesClusterServer();
13
- cover.createDefaultBridgedDeviceBasicInformationClusterServer('BridgedDevice1', 'BridgedDevice1 0x01020564', 0xfff1, 'Luligu', 'BridgedDevice1');
14
- cover.createDefaultPowerSourceRechargableBatteryClusterServer(86);
15
- cover.createDefaultWindowCoveringClusterServer();
16
- this.registerDevice(cover);
17
- cover.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
18
- this.log.warn(`Command identify called identifyTime:${identifyTime}`);
19
- });
20
- cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue } }) => {
21
- this.log.warn(`Command goToLiftPercentage called liftPercent100thsValue:${liftPercent100thsValue}`);
22
- });
23
- const light = new MatterbridgeDevice(DeviceTypes.ON_OFF_LIGHT);
24
- light.createDefaultIdentifyClusterServer();
25
- light.createDefaultGroupsClusterServer();
26
- light.createDefaultScenesClusterServer();
27
- light.createDefaultBridgedDeviceBasicInformationClusterServer('BridgedDevice2', 'BridgedDevice2 0x23023304', 0xfff1, 'Luligu', 'BridgedDevice2');
28
- light.createDefaultPowerSourceReplaceableBatteryClusterServer(70);
29
- light.createDefaultOnOffClusterServer();
30
- this.registerDevice(light);
31
- light.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
32
- this.log.warn(`Command identify called identifyTime:${identifyTime}`);
33
- });
34
- light.addCommandHandler('on', async () => {
35
- this.log.warn('Command on called');
36
- });
37
- light.addCommandHandler('off', async () => {
38
- this.log.warn('Command off called');
15
+ async onStart(reason) {
16
+ this.log.info('onStart called with reason:', reason ?? 'none');
17
+ // Create a switch device
18
+ this.switch = new MatterbridgeDevice(onOffSwitch);
19
+ this.switch.createDefaultIdentifyClusterServer();
20
+ this.switch.createDefaultGroupsClusterServer();
21
+ this.switch.createDefaultScenesClusterServer();
22
+ this.switch.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 3', '0x23452164', 0xfff1, 'Luligu', 'Dynamic device 3');
23
+ this.switch.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
24
+ this.switch.createDefaultOnOffClusterServer();
25
+ await this.registerDevice(this.switch);
26
+ this.switch.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
27
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
39
28
  });
29
+ this.switch.addCommandHandler('on', async () => {
30
+ this.switch?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
31
+ this.log.info('Command on called');
32
+ });
33
+ this.switch.addCommandHandler('off', async () => {
34
+ this.switch?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
35
+ this.log.info('Command off called');
36
+ });
37
+ // Create a light device
38
+ this.light = new MatterbridgeDevice(DeviceTypes.ON_OFF_LIGHT);
39
+ this.light.createDefaultIdentifyClusterServer();
40
+ this.light.createDefaultGroupsClusterServer();
41
+ this.light.createDefaultScenesClusterServer();
42
+ this.light.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 2', '0x23480564', 0xfff1, 'Luligu', 'Dynamic device 2');
43
+ this.light.createDefaultPowerSourceReplaceableBatteryClusterServer(70);
44
+ this.light.createDefaultOnOffClusterServer();
45
+ this.light.createDefaultLevelControlClusterServer();
46
+ this.light.createDefaultColorControlClusterServer();
47
+ await this.registerDevice(this.light);
48
+ this.light.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
49
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
50
+ });
51
+ this.light.addCommandHandler('on', async () => {
52
+ this.light?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
53
+ this.log.info('Command on called');
54
+ });
55
+ this.light.addCommandHandler('off', async () => {
56
+ this.light?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
57
+ this.log.info('Command off called');
58
+ });
59
+ this.light.addCommandHandler('moveToLevel', async ({ request: { level }, attributes: { currentLevel } }) => {
60
+ this.light?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
61
+ this.log.debug(`Command moveToLevel called request: ${level} attributes: ${currentLevel?.getLocal()}`);
62
+ });
63
+ this.light.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level }, attributes: { currentLevel } }) => {
64
+ this.light?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
65
+ this.log.debug(`Command moveToLevelWithOnOff called request: ${level} attributes: ${currentLevel?.getLocal()}`);
66
+ });
67
+ this.light.addCommandHandler('moveToHueAndSaturation', async ({ request: { hue, saturation }, attributes: { currentHue, currentSaturation } }) => {
68
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(hue);
69
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(saturation);
70
+ this.log.debug(`Command moveToHueAndSaturation called request: hue ${hue} saturation ${saturation} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
71
+ });
72
+ this.light.addCommandHandler('moveToColorTemperature', async ({ request, attributes }) => {
73
+ this.light?.getClusterServer(ColorControl.Complete)?.setColorTemperatureMiredsAttribute(request.colorTemperatureMireds);
74
+ this.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
75
+ });
76
+ // Create an outlet device
77
+ this.outlet = new MatterbridgeDevice(DeviceTypes.ON_OFF_PLUGIN_UNIT);
78
+ this.outlet.createDefaultIdentifyClusterServer();
79
+ this.outlet.createDefaultGroupsClusterServer();
80
+ this.outlet.createDefaultScenesClusterServer();
81
+ this.outlet.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 4', '0x29252164', 0xfff1, 'Luligu', 'Dynamic device 4');
82
+ this.outlet.createDefaultPowerSourceWiredClusterServer();
83
+ this.outlet.createDefaultOnOffClusterServer();
84
+ await this.registerDevice(this.outlet);
85
+ this.outlet.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
86
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
87
+ });
88
+ this.outlet.addCommandHandler('on', async () => {
89
+ this.outlet?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
90
+ this.log.info('Command on called');
91
+ });
92
+ this.outlet.addCommandHandler('off', async () => {
93
+ this.outlet?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
94
+ this.log.info('Command off called');
95
+ });
96
+ // Create a window covering device
97
+ this.cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING);
98
+ this.cover.createDefaultIdentifyClusterServer();
99
+ this.cover.createDefaultGroupsClusterServer();
100
+ this.cover.createDefaultScenesClusterServer();
101
+ this.cover.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 1', '0x01020564', 0xfff1, 'Luligu', 'Dynamic device 1');
102
+ this.cover.createDefaultPowerSourceRechargeableBatteryClusterServer(86);
103
+ this.cover.createDefaultWindowCoveringClusterServer();
104
+ await this.registerDevice(this.cover);
105
+ this.cover.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
106
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
107
+ });
108
+ this.cover.addCommandHandler('stopMotion', async ({ attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
109
+ const position = currentPositionLiftPercent100ths?.getLocal();
110
+ if (position !== null && position !== undefined)
111
+ targetPositionLiftPercent100ths?.setLocal(position);
112
+ operationalStatus.setLocal({
113
+ global: WindowCovering.MovementStatus.Stopped,
114
+ lift: WindowCovering.MovementStatus.Stopped,
115
+ tilt: WindowCovering.MovementStatus.Stopped,
116
+ });
117
+ this.log.debug(`Command stopMotion called. Attributes: currentPositionLiftPercent100ths: ${currentPositionLiftPercent100ths?.getLocal()}`);
118
+ this.log.debug(`Command stopMotion called. Attributes: targetPositionLiftPercent100ths: ${targetPositionLiftPercent100ths?.getLocal()}`);
119
+ this.log.debug(`Command stopMotion called. Attributes: operationalStatus: ${operationalStatus?.getLocal().lift}`);
120
+ });
121
+ this.cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue }, attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
122
+ currentPositionLiftPercent100ths?.setLocal(liftPercent100thsValue);
123
+ targetPositionLiftPercent100ths?.setLocal(liftPercent100thsValue);
124
+ operationalStatus.setLocal({
125
+ global: WindowCovering.MovementStatus.Stopped,
126
+ lift: WindowCovering.MovementStatus.Stopped,
127
+ tilt: WindowCovering.MovementStatus.Stopped,
128
+ });
129
+ this.log.info(`Command goToLiftPercentage called. Request: liftPercent100thsValue: ${liftPercent100thsValue} `);
130
+ this.log.debug(`Command goToLiftPercentage called. Attributes: currentPositionLiftPercent100ths: ${currentPositionLiftPercent100ths?.getLocal()}`);
131
+ this.log.debug(`Command goToLiftPercentage called. Attributes: targetPositionLiftPercent100ths: ${targetPositionLiftPercent100ths?.getLocal()}`);
132
+ this.log.debug(`Command goToLiftPercentage called. Attributes: operationalStatus: ${operationalStatus?.getLocal().lift}`);
133
+ });
134
+ }
135
+ async onConfigure() {
136
+ this.log.info('onConfigure called');
137
+ // Set switch to off
138
+ this.switch?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
139
+ this.log.info('Set switch initial onOff to false');
140
+ this.switchInterval = setInterval(() => {
141
+ if (!this.switch)
142
+ return;
143
+ const status = this.switch.getClusterServer(OnOffCluster)?.getOnOffAttribute();
144
+ this.switch.getClusterServer(OnOffCluster)?.setOnOffAttribute(!status);
145
+ this.log.info(`Set switch onOff to ${status}`);
146
+ }, 60 * 1000 + 100);
147
+ // Set light to off, level to 0 and hue to 0 and saturation to 50% (pink color)
148
+ this.light?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
149
+ this.light?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(0);
150
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(0);
151
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(128);
152
+ this.log.info('Set light initial onOff to false, currentLevel to 0, hue to 0 and saturation to 50%.');
153
+ this.lightInterval = setInterval(() => {
154
+ if (!this.light)
155
+ return;
156
+ const lightLevelControlCluster = this.light.getClusterServer(LevelControlCluster);
157
+ if (lightLevelControlCluster) {
158
+ let level = lightLevelControlCluster.getCurrentLevelAttribute();
159
+ if (level === null)
160
+ return;
161
+ level += 10;
162
+ if (level > 254) {
163
+ level = 0;
164
+ this.light.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
165
+ this.log.info('Set light onOff to false');
166
+ return;
167
+ }
168
+ else {
169
+ this.light.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
170
+ this.log.info('Set light onOff to true');
171
+ }
172
+ lightLevelControlCluster.setCurrentLevelAttribute(level);
173
+ this.log.info(`Set light currentLevel to ${level}`);
174
+ }
175
+ }, 60 * 1000 + 200);
176
+ // Set outlet to off
177
+ this.outlet?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
178
+ this.log.info('Set outlet initial onOff to false');
179
+ this.outletInterval = setInterval(() => {
180
+ if (!this.outlet)
181
+ return;
182
+ const status = this.outlet.getClusterServer(OnOffCluster)?.getOnOffAttribute();
183
+ this.outlet.getClusterServer(OnOffCluster)?.setOnOffAttribute(!status);
184
+ this.log.info(`Set outlet onOff to ${status}`);
185
+ }, 60 * 1000 + 300);
186
+ // Set cover to target = current position and status to stopped (current position is persisted in the cluster)
187
+ this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
188
+ this.log.debug('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
189
+ this.coverInterval = setInterval(() => {
190
+ if (!this.cover)
191
+ return;
192
+ const coverCluster = this.cover.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
193
+ if (coverCluster && coverCluster.getCurrentPositionLiftPercent100thsAttribute) {
194
+ let position = coverCluster.getCurrentPositionLiftPercent100thsAttribute();
195
+ if (position === null)
196
+ return;
197
+ position = position >= 9000 ? 0 : position + 1000;
198
+ coverCluster.setTargetPositionLiftPercent100thsAttribute(position);
199
+ coverCluster.setCurrentPositionLiftPercent100thsAttribute(position);
200
+ coverCluster.setOperationalStatusAttribute({
201
+ global: WindowCovering.MovementStatus.Stopped,
202
+ lift: WindowCovering.MovementStatus.Stopped,
203
+ tilt: WindowCovering.MovementStatus.Stopped,
204
+ });
205
+ this.log.info(`Set cover positionLiftPercent100ths to ${position}`);
206
+ }
207
+ }, 60 * 1000 + 400);
40
208
  }
41
- onShutdown() {
42
- this.log.info('onShutdown called');
209
+ async onShutdown(reason) {
210
+ this.log.info('onShutdown called with reason:', reason ?? 'none');
211
+ clearInterval(this.switchInterval);
212
+ clearInterval(this.lightInterval);
213
+ clearInterval(this.outletInterval);
214
+ clearInterval(this.coverInterval);
215
+ await this.unregisterAllDevices();
43
216
  }
44
217
  }
45
218
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAgB,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAGjH,MAAM,OAAO,kCAAmC,SAAQ,2BAA2B;IACjF,YAAY,YAA0B,EAAE,GAAe;QACrD,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEQ,sBAAsB;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAClE,KAAK,CAAC,kCAAkC,EAAE,CAAC;QAC3C,KAAK,CAAC,gCAAgC,EAAE,CAAC;QACzC,KAAK,CAAC,gCAAgC,EAAE,CAAC;QACzC,KAAK,CAAC,uDAAuD,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACjJ,KAAK,CAAC,uDAAuD,CAAC,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,wCAAwC,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;YAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE;YAC9F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4DAA4D,sBAAsB,EAAE,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/D,KAAK,CAAC,kCAAkC,EAAE,CAAC;QAC3C,KAAK,CAAC,gCAAgC,EAAE,CAAC;QACzC,KAAK,CAAC,gCAAgC,EAAE,CAAC;QACzC,KAAK,CAAC,uDAAuD,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACjJ,KAAK,CAAC,uDAAuD,CAAC,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,+BAA+B,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;YAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEQ,UAAU;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ // link-script.js
2
+ import { exec } from 'child_process';
3
+
4
+ const command = process.platform === 'win32' ? 'npm link matterbridge' : 'sudo npm link matterbridge';
5
+
6
+ exec(command, (error, stdout, stderr) => {
7
+ if (error) {
8
+ console.error(`exec error: ${error}`);
9
+ return;
10
+ }
11
+ console.log(`stdout: ${stdout}`);
12
+ if (stderr) {
13
+ console.error(`stderr: ${stderr}`);
14
+ }
15
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "1.0.0",
3
+ "version": "1.0.4",
4
4
  "description": "Matterbridge dynamic platform plugin example",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "MIT",
@@ -9,7 +9,7 @@
9
9
  "types": "dist/index.d.js",
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/Luligu/matterbridge-example-dynamic-platform"
12
+ "url": "git+https://github.com/Luligu/matterbridge-example-dynamic-platform.git"
13
13
  },
14
14
  "bugs": {
15
15
  "url": "https://github.com/Luligu/matterbridge-example-dynamic-platform/issues"
@@ -26,7 +26,8 @@
26
26
  "scripts": {
27
27
  "build": "tsc",
28
28
  "watch": "tsc --watch",
29
- "start": "node ./dist/index.js",
29
+ "start:bridge": "matterbridge -bridge",
30
+ "start:childbridge": "matterbridge -childbridge",
30
31
  "test": "jest",
31
32
  "test:verbose": "jest --verbose",
32
33
  "test:watch": "jest --watch",
@@ -40,22 +41,29 @@
40
41
  "prepublishOnly": "npm run lint && npm run cleanBuild",
41
42
  "checkDependencies": "npx npm-check-updates",
42
43
  "updateDependencies": "npx npm-check-updates -u",
43
- "updateMatter": "npm install @project-chip/matter.js@dev && npm install @project-chip/matter-node.js@dev && npm install @project-chip/matter.js-tools@dev && npm install @project-chip/matter-node-ble.js@dev"
44
+ "matterbridge:add": "matterbridge -add .\\",
45
+ "matterbridge:remove": "matterbridge -remove .\\",
46
+ "matterbridge:enable": "matterbridge -enable .\\",
47
+ "matterbridge:disable": "matterbridge -disable .\\",
48
+ "matterbridge:list": "matterbridge -list",
49
+ "dev:link": "npm link --save-dev matterbridge",
50
+ "dev:install": "npm install --save-dev matterbridge",
51
+ "dev:unlink": "npm uninstall matterbridge && npm unlink matterbridge",
52
+ "install": "node link-matterbridge-script.js && npm run build"
44
53
  },
45
54
  "devDependencies": {
46
- "@stylistic/eslint-plugin": "^1.6.2",
55
+ "@stylistic/eslint-plugin": "^1.7.0",
47
56
  "@tsconfig/node-lts": "^20.1.1",
48
- "@types/node": "^20.11.20",
49
- "@typescript-eslint/eslint-plugin": "^7.0.2",
50
- "@typescript-eslint/parser": "^7.0.2",
57
+ "@types/node": "^20.11.30",
58
+ "@typescript-eslint/eslint-plugin": "^7.3.1",
59
+ "@typescript-eslint/parser": "^7.3.1",
51
60
  "eslint-config-prettier": "^9.1.0",
52
61
  "eslint-plugin-prettier": "^5.1.3",
62
+ "matterbridge": "file:../matterbridge",
53
63
  "prettier": "^3.2.5",
54
- "typescript": "^5.3.3"
64
+ "typescript": "^5.4.3"
55
65
  },
56
66
  "dependencies": {
57
- "@project-chip/matter-node.js": "^0.7.5",
58
- "node-ansi-logger": "^1.9.1",
59
- "node-persist-manager": "^1.0.3"
67
+ "node-ansi-logger": "^1.9.2"
60
68
  }
61
69
  }