matterbridge-example-accessory-platform 1.1.2 → 1.1.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/CHANGELOG.md CHANGED
@@ -4,8 +4,37 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  If you like this project and find it useful, please consider giving it a star on GitHub at https://github.com/Luligu/matterbridge-example-dynamic-platform and sponsoring it.
6
6
 
7
+ ## [1.1.4] - 2025-01-21
8
+
9
+ ### Changed
10
+
11
+ - [package]: Require matterbridge 2.0.0.
12
+ - [package]: Updated dependencies.
13
+ - [package]: Updated package.
14
+
15
+ <a href="https://www.buymeacoffee.com/luligugithub">
16
+ <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
17
+ </a>
18
+
19
+ ## [1.1.3] - 2024-12-21
20
+
21
+ ### Added
22
+
23
+ - [platform]: Added call to super.OnConfigure() and super.OnShutDown() to check endpoints numbers.
24
+
25
+ ### Changed
26
+
27
+ - [package]: Updated dependencies.
28
+ - [package]: Updated package.
29
+
30
+ <a href="https://www.buymeacoffee.com/luligugithub">
31
+ <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
32
+ </a>
33
+
7
34
  ## [1.1.2] - 2024-12-12
8
35
 
36
+ ### Changed
37
+
9
38
  - [package]: Require matterbridge 1.6.6
10
39
  - [package]: Updated package.
11
40
  - [package]: Updated dependencies.
package/dist/index.js CHANGED
@@ -1,14 +1,4 @@
1
1
  import { ExampleMatterbridgeAccessoryPlatform } from './platform.js';
2
- /**
3
- * This is the standard interface for Matterbridge plugins.
4
- * Each plugin should export a default function that follows this signature.
5
- *
6
- * @param {Matterbridge} matterbridge - The Matterbridge instance.
7
- * @param {AnsiLogger} log - The logger instance.
8
- * @param {PlatformConfig} config - The platform configuration.
9
- * @returns {ExampleMatterbridgeAccessoryPlatform} The initialized platform.
10
- */
11
2
  export default function initializePlugin(matterbridge, log, config) {
12
3
  return new ExampleMatterbridgeAccessoryPlatform(matterbridge, log, config);
13
4
  }
14
- //# sourceMappingURL=index.js.map
package/dist/platform.js CHANGED
@@ -1,31 +1,22 @@
1
- import { MatterbridgeDevice, MatterbridgeAccessoryPlatform, DeviceTypes, WindowCovering, powerSource, WindowCoveringCluster, MatterbridgeEndpoint, } from 'matterbridge';
1
+ import { MatterbridgeAccessoryPlatform, WindowCovering, powerSource, WindowCoveringCluster, MatterbridgeEndpoint, coverDevice, } from 'matterbridge';
2
2
  import { isValidNumber } from 'matterbridge/utils';
3
3
  export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryPlatform {
4
4
  cover;
5
5
  coverInterval;
6
- async createMutableDevice(definition, options = {}, debug = false) {
7
- let device;
8
- if (this.matterbridge.edge === true)
9
- device = new MatterbridgeEndpoint(definition, options, debug);
10
- else
11
- device = new MatterbridgeDevice(definition, options, debug);
12
- return device;
13
- }
14
6
  constructor(matterbridge, log, config) {
15
7
  super(matterbridge, log, config);
16
- // Verify that Matterbridge is the correct version
17
- if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('1.6.6')) {
18
- throw new Error(`This plugin requires Matterbridge version >= "1.6.6". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend.`);
8
+ if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('2.0.0')) {
9
+ throw new Error(`This plugin requires Matterbridge version >= "2.0.0". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend.`);
19
10
  }
20
11
  this.log.info('Initializing platform:', this.config.name);
21
12
  }
22
13
  async onStart(reason) {
23
14
  this.log.info('onStart called with reason:', reason ?? 'none');
24
- this.cover = await this.createMutableDevice(DeviceTypes.WINDOW_COVERING, { uniqueStorageKey: 'Cover example device' }, this.config.debug);
15
+ this.cover = new MatterbridgeEndpoint([coverDevice, powerSource], { uniqueStorageKey: 'Cover example device' }, this.config.debug);
16
+ this.cover.log.logName = 'Cover example device';
25
17
  this.cover.createDefaultIdentifyClusterServer();
26
- this.cover.createDefaultBasicInformationClusterServer('Cover example device', `0x59108853594}`, 0xfff1, 'Matterbridge', 0x0001, 'Matterbridge Cover', parseInt(this.version.replace(/\D/g, '')), this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
18
+ this.cover.createDefaultBasicInformationClusterServer('Cover example device', `0x59108853594`, 0xfff1, 'Matterbridge', 0x0001, 'Matterbridge Cover', parseInt(this.version.replace(/\D/g, '')), this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
27
19
  this.cover.createDefaultWindowCoveringClusterServer(10000);
28
- this.cover.addDeviceType(powerSource);
29
20
  this.cover.createDefaultPowerSourceWiredClusterServer();
30
21
  await this.registerDevice(this.cover);
31
22
  this.cover.subscribeAttribute(WindowCoveringCluster.id, 'mode', (newValue, oldValue) => {
@@ -47,15 +38,15 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
47
38
  await this.cover?.setWindowCoveringCurrentTargetStatus(10000, 10000, WindowCovering.MovementStatus.Stopped);
48
39
  });
49
40
  this.cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue } }) => {
50
- this.cover?.log.info(`Command goToLiftPercentage ${liftPercent100thsValue} called`);
41
+ this.cover?.log.info(`Command goToLiftPercentage called request ${liftPercent100thsValue}`);
51
42
  await this.cover?.setWindowCoveringCurrentTargetStatus(liftPercent100thsValue, liftPercent100thsValue, WindowCovering.MovementStatus.Stopped);
52
43
  });
53
44
  }
54
45
  async onConfigure() {
46
+ await super.onConfigure();
55
47
  this.log.info('onConfigure called');
56
48
  await this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
57
49
  this.log.info('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
58
- // Matter: 0 Fully open 10000 fully closed
59
50
  this.coverInterval = setInterval(async () => {
60
51
  if (!this.cover)
61
52
  return;
@@ -69,11 +60,11 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
69
60
  }, 60 * 1000);
70
61
  }
71
62
  async onShutdown(reason) {
72
- this.log.info('onShutdown called with reason:', reason ?? 'none');
73
63
  clearInterval(this.coverInterval);
74
64
  this.coverInterval = undefined;
65
+ await super.onShutdown(reason);
66
+ this.log.info('onShutdown called with reason:', reason ?? 'none');
75
67
  if (this.config.unregisterOnShutdown === true)
76
68
  await this.unregisterAllDevices();
77
69
  }
78
70
  }
79
- //# sourceMappingURL=platform.js.map
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge-example-accessory-platform",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge-example-accessory-platform",
9
- "version": "1.1.2",
9
+ "version": "1.1.4",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "node-ansi-logger": "3.0.0",
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "matterbridge-example-accessory-platform",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Matterbridge accessory plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
9
- "types": "dist/index.d.ts",
10
9
  "repository": {
11
10
  "type": "git",
12
11
  "url": "git+https://github.com/Luligu/matterbridge-example-accessory-platform.git"
package/dist/index.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import { Matterbridge, PlatformConfig } from 'matterbridge';
2
- import { AnsiLogger } from 'matterbridge/logger';
3
- import { ExampleMatterbridgeAccessoryPlatform } from './platform.js';
4
- /**
5
- * This is the standard interface for Matterbridge plugins.
6
- * Each plugin should export a default function that follows this signature.
7
- *
8
- * @param {Matterbridge} matterbridge - The Matterbridge instance.
9
- * @param {AnsiLogger} log - The logger instance.
10
- * @param {PlatformConfig} config - The platform configuration.
11
- * @returns {ExampleMatterbridgeAccessoryPlatform} The initialized platform.
12
- */
13
- export default function initializePlugin(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig): ExampleMatterbridgeAccessoryPlatform;
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,oCAAoC,CAElJ"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAA0B,EAAE,GAAe,EAAE,MAAsB;IAC1G,OAAO,IAAI,oCAAoC,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Matterbridge, MatterbridgeDevice, MatterbridgeAccessoryPlatform, PlatformConfig, DeviceTypeDefinition, AtLeastOne, EndpointOptions } from 'matterbridge';
2
- import { AnsiLogger } from 'matterbridge/logger';
3
- export declare class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryPlatform {
4
- cover: MatterbridgeDevice | undefined;
5
- coverInterval: NodeJS.Timeout | undefined;
6
- createMutableDevice(definition: DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>, options?: EndpointOptions, debug?: boolean): Promise<MatterbridgeDevice>;
7
- constructor(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig);
8
- onStart(reason?: string): Promise<void>;
9
- onConfigure(): Promise<void>;
10
- onShutdown(reason?: string): Promise<void>;
11
- }
12
- //# sourceMappingURL=platform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,6BAA6B,EAE7B,cAAc,EAMd,oBAAoB,EACpB,UAAU,EACV,eAAe,EAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,oCAAqC,SAAQ,6BAA6B;IACrF,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAEpC,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAE,eAAoB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;gBAO7J,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAahE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IAyEvB,WAAW;IAkBX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAM1C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}