matterbridge-example-dynamic-platform 1.0.0

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 ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "plugins": [
3
+ "@typescript-eslint",
4
+ "@stylistic",
5
+ "prettier"
6
+ ],
7
+ "parser": "@typescript-eslint/parser",
8
+ "parserOptions": {
9
+ "ecmaVersion": "latest",
10
+ "sourceType": "module"
11
+ },
12
+ "env": {
13
+ "browser": true,
14
+ "es2021": true,
15
+ "node": true
16
+ },
17
+ "extends": [
18
+ "eslint:recommended",
19
+ "plugin:@typescript-eslint/eslint-recommended",
20
+ "plugin:@typescript-eslint/recommended",
21
+ "prettier"
22
+ ],
23
+ "rules": {
24
+ "prettier/prettier": ["error"],
25
+ "indent": ["error", 2],
26
+ "max-len": ["warn", 180],
27
+ "no-console": ["warn"],
28
+ "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": false }],
29
+ "comma-spacing": ["error", { "before": false, "after": true }],
30
+ "space-before-function-paren": ["error", { "anonymous": "never", "named": "never", "asyncArrow": "always" }],
31
+ "keyword-spacing": ["error", { "before": true, "after": true }],
32
+ "no-multi-spaces": "error",
33
+ "object-curly-spacing": ["error", "always"],
34
+ "@typescript-eslint/type-annotation-spacing": ["error", {
35
+ "before": false,
36
+ "after": true,
37
+ "overrides": {
38
+ "arrow": {
39
+ "before": true,
40
+ "after": true
41
+ }
42
+ }
43
+ }]
44
+ }
45
+ }
package/.gitattributes ADDED
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
@@ -0,0 +1,2 @@
1
+ node_modules
2
+ dist
@@ -0,0 +1,12 @@
1
+ {
2
+ "printWidth": 180,
3
+ "semi": true,
4
+ "tabWidth": 2,
5
+ "useTabs": false,
6
+ "trailingComma": "all",
7
+ "singleQuote": true,
8
+ "endOfLine": "lf",
9
+ "bracketSpacing": true,
10
+ "arrowParens": "always",
11
+ "quoteProps": "as-needed"
12
+ }
package/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # Matterbridge
2
+ Matterbridge dynamic platform example plugin
@@ -0,0 +1,11 @@
1
+ import { Matterbridge } from '../../matterbridge/dist/index.js';
2
+ import { AnsiLogger } from 'node-ansi-logger';
3
+ import { ExampleMatterbridgeDynamicPlatform } 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 - An instance of MatterBridge
9
+ */
10
+ export default function initializePlugin(matterbridge: Matterbridge, log: AnsiLogger): ExampleMatterbridgeDynamicPlatform;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
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
+ import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
5
+ /**
6
+ * This is the standard interface for MatterBridge plugins.
7
+ * Each plugin should export a default function that follows this signature.
8
+ *
9
+ * @param matterbridge - An instance of MatterBridge
10
+ */
11
+ 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;
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,8 @@
1
+ import { Matterbridge, MatterbridgeDynamicPlatform } from '../../matterbridge/dist/index.js';
2
+ import { AnsiLogger } from 'node-ansi-logger';
3
+ export declare class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
4
+ constructor(matterbridge: Matterbridge, log: AnsiLogger);
5
+ onStartDynamicPlatform(): void;
6
+ onShutdown(): void;
7
+ }
8
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,45 @@
1
+ import { DeviceTypes } from '@project-chip/matter-node.js/device';
2
+ import { MatterbridgeDevice, MatterbridgeDynamicPlatform } from '../../matterbridge/dist/index.js';
3
+ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
4
+ constructor(matterbridge, log) {
5
+ super(matterbridge, log);
6
+ }
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');
39
+ });
40
+ }
41
+ onShutdown() {
42
+ this.log.info('onShutdown called');
43
+ }
44
+ }
45
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "matterbridge-example-dynamic-platform",
3
+ "version": "1.0.0",
4
+ "description": "Matterbridge dynamic platform plugin example",
5
+ "author": "https://github.com/Luligu",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.js",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/Luligu/matterbridge-example-dynamic-platform"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/Luligu/matterbridge-example-dynamic-platform/issues"
16
+ },
17
+ "keywords": [
18
+ "matterbridge",
19
+ "homebridge",
20
+ "matter",
21
+ "matter.js"
22
+ ],
23
+ "engines": {
24
+ "node": "^18.19.0 || ^20.11.0"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "watch": "tsc --watch",
29
+ "start": "node ./dist/index.js",
30
+ "test": "jest",
31
+ "test:verbose": "jest --verbose",
32
+ "test:watch": "jest --watch",
33
+ "lint": "eslint src/**.ts",
34
+ "lint:fix": "eslint src/**.ts --fix",
35
+ "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
36
+ "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"",
37
+ "clean": "rimraf tsconfig.tsbuildinfo ./dist",
38
+ "cleanBuild": "npm run clean && tsc",
39
+ "deepClean": "rimraf tsconfig.tsbuildinfo package-lock.json ./dist ./node_modules",
40
+ "prepublishOnly": "npm run lint && npm run cleanBuild",
41
+ "checkDependencies": "npx npm-check-updates",
42
+ "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
+ },
45
+ "devDependencies": {
46
+ "@stylistic/eslint-plugin": "^1.6.2",
47
+ "@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",
51
+ "eslint-config-prettier": "^9.1.0",
52
+ "eslint-plugin-prettier": "^5.1.3",
53
+ "prettier": "^3.2.5",
54
+ "typescript": "^5.3.3"
55
+ },
56
+ "dependencies": {
57
+ "@project-chip/matter-node.js": "^0.7.5",
58
+ "node-ansi-logger": "^1.9.1",
59
+ "node-persist-manager": "^1.0.3"
60
+ }
61
+ }