matterbridge-example-accessory-platform 1.1.3 → 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,6 +4,17 @@ 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>
7
18
 
8
19
  ## [1.1.3] - 2024-12-21
9
20
 
@@ -22,6 +33,8 @@ If you like this project and find it useful, please consider giving it a star on
22
33
 
23
34
  ## [1.1.2] - 2024-12-12
24
35
 
36
+ ### Changed
37
+
25
38
  - [package]: Require matterbridge 1.6.6
26
39
  - [package]: Updated package.
27
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,32 +1,22 @@
1
- import { MatterbridgeDevice, MatterbridgeAccessoryPlatform, WindowCovering, powerSource, WindowCoveringCluster, MatterbridgeEndpoint, coverDevice, } 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(coverDevice, { uniqueStorageKey: 'Cover example device' }, this.config.debug);
15
+ this.cover = new MatterbridgeEndpoint([coverDevice, powerSource], { uniqueStorageKey: 'Cover example device' }, this.config.debug);
25
16
  this.cover.log.logName = 'Cover example device';
26
17
  this.cover.createDefaultIdentifyClusterServer();
27
- 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);
28
19
  this.cover.createDefaultWindowCoveringClusterServer(10000);
29
- this.cover.addDeviceType(powerSource);
30
20
  this.cover.createDefaultPowerSourceWiredClusterServer();
31
21
  await this.registerDevice(this.cover);
32
22
  this.cover.subscribeAttribute(WindowCoveringCluster.id, 'mode', (newValue, oldValue) => {
@@ -48,7 +38,7 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
48
38
  await this.cover?.setWindowCoveringCurrentTargetStatus(10000, 10000, WindowCovering.MovementStatus.Stopped);
49
39
  });
50
40
  this.cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue } }) => {
51
- this.cover?.log.info(`Command goToLiftPercentage ${liftPercent100thsValue} called`);
41
+ this.cover?.log.info(`Command goToLiftPercentage called request ${liftPercent100thsValue}`);
52
42
  await this.cover?.setWindowCoveringCurrentTargetStatus(liftPercent100thsValue, liftPercent100thsValue, WindowCovering.MovementStatus.Stopped);
53
43
  });
54
44
  }
@@ -57,7 +47,6 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
57
47
  this.log.info('onConfigure called');
58
48
  await this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
59
49
  this.log.info('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
60
- // Matter: 0 Fully open 10000 fully closed
61
50
  this.coverInterval = setInterval(async () => {
62
51
  if (!this.cover)
63
52
  return;
@@ -71,12 +60,11 @@ export class ExampleMatterbridgeAccessoryPlatform extends MatterbridgeAccessoryP
71
60
  }, 60 * 1000);
72
61
  }
73
62
  async onShutdown(reason) {
74
- await super.onShutdown(reason);
75
- this.log.info('onShutdown called with reason:', reason ?? 'none');
76
63
  clearInterval(this.coverInterval);
77
64
  this.coverInterval = undefined;
65
+ await super.onShutdown(reason);
66
+ this.log.info('onShutdown called with reason:', reason ?? 'none');
78
67
  if (this.config.unregisterOnShutdown === true)
79
68
  await this.unregisterAllDevices();
80
69
  }
81
70
  }
82
- //# sourceMappingURL=platform.js.map
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge-example-accessory-platform",
3
- "version": "1.1.3",
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.3",
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.3",
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,EAC7B,cAAc,EAMd,oBAAoB,EACpB,UAAU,EACV,eAAe,EAGhB,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;IA0EvB,WAAW;IAmBX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAO1C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}