matterbridge-example-accessory-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
@@ -23,12 +23,12 @@
23
23
  ],
24
24
  "rules": {
25
25
  "prettier/prettier": ["error"],
26
- "indent": ["error", 2],
27
- "max-len": ["warn", 180],
26
+ "indent": ["error", 2, { "SwitchCase": 1 }],
27
+ "max-len": ["warn", 200],
28
28
  "no-console": ["warn"],
29
29
  "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": false }],
30
30
  "comma-spacing": ["error", { "before": false, "after": true }],
31
- "space-before-function-paren": ["error", { "anonymous": "never", "named": "never", "asyncArrow": "always" }],
31
+ "space-before-function-paren": ["error", { "anonymous": "always", "named": "never", "asyncArrow": "always" }],
32
32
  "keyword-spacing": ["error", { "before": true, "after": true }],
33
33
  "no-multi-spaces": "error",
34
34
  "object-curly-spacing": ["error", "always"],
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 accessory 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 accessory platform example plugin
2
+
3
+ [![npm version](https://img.shields.io/npm/v/matterbridge-example-accessory-platform.svg)](https://www.npmjs.com/package/matterbridge-example-accessory-platform)
4
+ [![npm downloads](https://img.shields.io/npm/dt/matterbridge-example-accessory-platform.svg)](https://www.npmjs.com/package/matterbridge-example-accessory-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 accessory platform example plugin is a template to develop your own plugin using the accessory 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 { ExampleMatterbridgeAccessoryPlatform } 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,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,wCAgBnF"}
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,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,wCAEnF"}
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 { ExampleMatterbridgeAccessoryPlatform } from './platform.js';
5
2
  /**
6
3
  * This is the standard interface for MatterBridge plugins.
@@ -9,16 +6,6 @@ import { ExampleMatterbridgeAccessoryPlatform } 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 accessory platform example plugin is loading...');
20
- const platform = new ExampleMatterbridgeAccessoryPlatform(matterbridge, log);
21
- log.info('Matterbridge accessory platform example plugin initialized successfully!');
22
- return platform;
9
+ return new ExampleMatterbridgeAccessoryPlatform(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,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;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,8DAA8D,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAG,IAAI,oCAAoC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE7E,GAAG,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACrF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAA0B,EAAE,GAAe;IAClF,OAAO,IAAI,oCAAoC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACrE,CAAC"}
@@ -1,8 +1,12 @@
1
- import { Matterbridge, MatterbridgeAccessoryPlatform } from '../../matterbridge/dist/index.js';
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Matterbridge, MatterbridgeDevice, MatterbridgeAccessoryPlatform } from 'matterbridge';
2
3
  import { AnsiLogger } from 'node-ansi-logger';
3
4
  export declare class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryPlatform {
5
+ cover: MatterbridgeDevice | undefined;
6
+ coverInterval: NodeJS.Timeout | undefined;
4
7
  constructor(matterbridge: Matterbridge, log: AnsiLogger);
5
- onStartAccessoryPlatform(): void;
6
- onShutdown(): void;
8
+ onStart(reason?: string): Promise<void>;
9
+ onConfigure(): Promise<void>;
10
+ onShutdown(reason?: string): Promise<void>;
7
11
  }
8
12
  //# 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,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACnH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,qBAAa,oCAAqC,SAAQ,6BAA6B;gBACzE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU;IAI9C,wBAAwB,IAAI,IAAI;IAkChC,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,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,qBAAa,oCAAqC,SAAQ,6BAA6B;IACrF,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;gBAE9B,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU;IAIxC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IA6CvB,WAAW;IA2BX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAK1C"}
package/dist/platform.js CHANGED
@@ -1,27 +1,63 @@
1
- import { DeviceTypes } from '@project-chip/matter-node.js/device';
2
- import { MatterbridgeDevice, MatterbridgeAccessoryPlatform } from '../../matterbridge/dist/index.js';
3
- import { WindowCovering, WindowCoveringCluster } from '@project-chip/matter-node.js/cluster';
1
+ import { DeviceTypes, WindowCovering } from 'matterbridge';
2
+ import { MatterbridgeDevice, MatterbridgeAccessoryPlatform } from 'matterbridge';
4
3
  export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryPlatform {
4
+ cover;
5
+ coverInterval;
5
6
  constructor(matterbridge, log) {
6
7
  super(matterbridge, log);
7
8
  }
8
- onStartAccessoryPlatform() {
9
- this.log.info('onStartAccessoryPlatform called');
10
- const cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING);
11
- cover.createDefaultIdentifyClusterServer();
12
- cover.createDefaultBasicInformationClusterServer('Device1', 'Device1 0x9010880304', 0xfff1, 'Luligu', 0x0001, 'Device1');
13
- cover.createDefaultWindowCoveringClusterServer(10000);
14
- this.registerDevice(cover);
15
- cover.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
16
- this.log.warn(`Command identify called identifyTime:${identifyTime}`);
9
+ async onStart(reason) {
10
+ this.log.info('onStart called with reason:', reason ?? 'none');
11
+ this.cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING);
12
+ this.cover.createDefaultIdentifyClusterServer();
13
+ this.cover.createDefaultBasicInformationClusterServer('Accessory device', '0x59108853', 0xfff1, 'Luligu', 0x0001, 'Accessory device');
14
+ this.cover.createDefaultPowerSourceWiredClusterServer();
15
+ this.cover.createDefaultWindowCoveringClusterServer(10000);
16
+ await this.registerDevice(this.cover);
17
+ this.cover.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
18
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
17
19
  });
18
- cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue } }) => {
19
- this.log.warn(`Command goToLiftPercentage called liftPercent100thsValue:${liftPercent100thsValue}`);
20
+ this.cover.addCommandHandler('stopMotion', async ({ attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
21
+ const position = currentPositionLiftPercent100ths?.getLocal();
22
+ if (position !== null && position !== undefined)
23
+ targetPositionLiftPercent100ths?.setLocal(position);
24
+ operationalStatus.setLocal({
25
+ global: WindowCovering.MovementStatus.Stopped,
26
+ lift: WindowCovering.MovementStatus.Stopped,
27
+ tilt: WindowCovering.MovementStatus.Stopped,
28
+ });
29
+ this.log.debug(`Command stopMotion called. Attributes: currentPositionLiftPercent100ths: ${currentPositionLiftPercent100ths?.getLocal()}`);
30
+ this.log.debug(`Command stopMotion called. Attributes: targetPositionLiftPercent100ths: ${targetPositionLiftPercent100ths?.getLocal()}`);
31
+ this.log.debug(`Command stopMotion called. Attributes: operationalStatus: ${operationalStatus?.getLocal().lift}`);
20
32
  });
21
- setInterval(() => {
22
- const coverCluster = cover.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
33
+ this.cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue }, attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
34
+ currentPositionLiftPercent100ths?.setLocal(liftPercent100thsValue);
35
+ targetPositionLiftPercent100ths?.setLocal(liftPercent100thsValue);
36
+ operationalStatus.setLocal({
37
+ global: WindowCovering.MovementStatus.Stopped,
38
+ lift: WindowCovering.MovementStatus.Stopped,
39
+ tilt: WindowCovering.MovementStatus.Stopped,
40
+ });
41
+ this.log.info(`Command goToLiftPercentage called. Request: liftPercent100thsValue: ${liftPercent100thsValue} `);
42
+ this.log.debug(`Command goToLiftPercentage called. Attributes: currentPositionLiftPercent100ths: ${currentPositionLiftPercent100ths?.getLocal()}`);
43
+ this.log.debug(`Command goToLiftPercentage called. Attributes: targetPositionLiftPercent100ths: ${targetPositionLiftPercent100ths?.getLocal()}`);
44
+ this.log.debug(`Command goToLiftPercentage called. Attributes: operationalStatus: ${operationalStatus?.getLocal().lift}`);
45
+ });
46
+ }
47
+ async onConfigure() {
48
+ this.log.info('onConfigure called');
49
+ // Set cover to target = current position and status to stopped (current position is persisted in the cluster)
50
+ this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
51
+ this.log.debug('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
52
+ this.coverInterval = setInterval(() => {
53
+ if (!this.cover)
54
+ return;
55
+ const coverCluster = this.cover.getClusterServer(WindowCovering.Complete);
23
56
  if (coverCluster && coverCluster.getCurrentPositionLiftPercent100thsAttribute) {
24
- let position = coverCluster.getCurrentPositionLiftPercent100thsAttribute() + 1000;
57
+ let position = coverCluster.getCurrentPositionLiftPercent100thsAttribute();
58
+ if (position === null || position === undefined)
59
+ return;
60
+ position = position + 1000;
25
61
  position = position > 10000 ? 0 : position;
26
62
  coverCluster.setTargetPositionLiftPercent100thsAttribute(position);
27
63
  coverCluster.setCurrentPositionLiftPercent100thsAttribute(position);
@@ -30,12 +66,14 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
30
66
  lift: WindowCovering.MovementStatus.Stopped,
31
67
  tilt: WindowCovering.MovementStatus.Stopped,
32
68
  });
33
- this.log.warn(`Set liftPercent100thsValue to ${position}`);
69
+ this.log.info(`Set liftPercent100thsValue to ${position}`);
34
70
  }
35
- }, 10 * 1000);
71
+ }, 60 * 1000);
36
72
  }
37
- onShutdown() {
38
- this.log.info('onShutdown called');
73
+ async onShutdown(reason) {
74
+ this.log.info('onShutdown called with reason:', reason ?? 'none');
75
+ clearInterval(this.coverInterval);
76
+ await this.unregisterAllDevices();
39
77
  }
40
78
  }
41
79
  //# 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,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEnH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7F,MAAM,OAAO,oCAAqC,SAAQ,6BAA6B;IACrF,YAAY,YAA0B,EAAE,GAAe;QACrD,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEQ,wBAAwB;QAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAClE,KAAK,CAAC,kCAAkC,EAAE,CAAC;QAC3C,KAAK,CAAC,0CAA0C,CAAC,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACzH,KAAK,CAAC,wCAAwC,CAAC,KAAK,CAAC,CAAC;QACtD,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;QAEH,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,WAAW,CAAC,GAAG,EAAE;YACf,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/I,IAAI,YAAY,IAAI,YAAY,CAAC,4CAA4C,EAAE,CAAC;gBAC9E,IAAI,QAAQ,GAAG,YAAY,CAAC,4CAA4C,EAAG,GAAG,IAAI,CAAC;gBACnF,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC3C,YAAY,CAAC,2CAA2C,CAAC,QAAQ,CAAC,CAAC;gBACnE,YAAY,CAAC,4CAA4C,CAAC,QAAQ,CAAC,CAAC;gBACpE,YAAY,CAAC,6BAA6B,CAAC;oBACzC,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO;oBAC7C,IAAI,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO;oBAC3C,IAAI,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO;iBAC5C,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAChB,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-accessory-platform",
3
- "version": "1.0.0",
3
+ "version": "1.0.4",
4
4
  "description": "Matterbridge accessory 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-accessory-platform"
12
+ "url": "git+https://github.com/Luligu/matterbridge-example-accessory-platform.git"
13
13
  },
14
14
  "bugs": {
15
15
  "url": "https://github.com/Luligu/matterbridge-example-accessory-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
  }