matterbridge 1.1.3 → 1.1.5
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 +20 -0
- package/README.md +33 -14
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/matterbridge.d.ts +14 -6
- package/dist/matterbridge.d.ts.map +1 -1
- package/dist/matterbridge.js +351 -216
- package/dist/matterbridge.js.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +7 -13
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.js +9 -18
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -1
- package/dist/matterbridgeDevice.d.ts +10 -0
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +11 -7
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +7 -13
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -1
- package/dist/matterbridgeDynamicPlatform.js +9 -18
- package/dist/matterbridgeDynamicPlatform.js.map +1 -1
- package/frontend/build/asset-manifest.json +3 -3
- package/frontend/build/index.html +1 -1
- package/frontend/build/manifest.json +2 -2
- package/frontend/build/matterbridge 32x32.png +0 -0
- package/frontend/build/matterbridge 64x64.png +0 -0
- package/frontend/build/static/js/{main.b5a876cf.js → main.b6ca1c6b.js} +3 -3
- package/frontend/build/static/js/main.b6ca1c6b.js.map +1 -0
- package/package.json +4 -3
- package/frontend/build/static/js/main.b5a876cf.js.map +0 -1
- /package/frontend/build/static/js/{main.b5a876cf.js.LICENSE.txt → main.b6ca1c6b.js.LICENSE.txt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.1.5] - 2024-03-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- [debug]: Added public property enableDebug to Matterbridge.
|
|
10
|
+
- [debug]: Added parameter -debug to the command line.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- [plugin]: Fixed the plugin.paired and plugin.commissioned in bridge mode.
|
|
15
|
+
- [routes]: Fixed the plugin devices route.
|
|
16
|
+
- [bridge]: Fixed the BasicInformationCluster in bridge mode.
|
|
17
|
+
|
|
18
|
+
## [1.1.4] - 2024-03-10
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- [cli]: Updated the loading from cli.
|
|
23
|
+
|
|
24
|
+
|
|
5
25
|
## [1.1.3] - 2024-03-10
|
|
6
26
|
|
|
7
27
|
### Added
|
package/README.md
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
# Matterbridge
|
|
1
|
+
# <img src="https://github.com/Luligu/matterbridge/blob/main/frontend/public/matterbridge%2064x64.png" alt="Matterbridge Logo" width="64px" height="64px"> Matterbridge
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/matterbridge)
|
|
4
4
|
[](https://www.npmjs.com/package/matterbridge)
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
[](https://www.npmjs.com/package/node-ansi-logger)
|
|
8
|
-
|
|
9
7
|
[](https://www.npmjs.com/package/node-persist-manager)
|
|
10
8
|
|
|
11
9
|
---
|
|
@@ -27,16 +25,19 @@ any other ecosystem supporting Matter.
|
|
|
27
25
|
|
|
28
26
|
The project is build on top of https://github.com/project-chip/matter.js.
|
|
29
27
|
|
|
30
|
-
A special thank to Apollon77 for
|
|
28
|
+
A special thank to Apollon77 for his incredible work.
|
|
31
29
|
|
|
32
30
|
## Installation
|
|
33
31
|
|
|
34
32
|
Follow these steps to install Matterbridge:
|
|
35
|
-
|
|
33
|
+
|
|
34
|
+
on Windows:
|
|
35
|
+
``` powershell
|
|
36
36
|
npm install -g matterbridge
|
|
37
37
|
```
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
|
|
39
|
+
on Linux (you need the necessary permissions):
|
|
40
|
+
``` bash
|
|
40
41
|
sudo npm install -g matterbridge
|
|
41
42
|
```
|
|
42
43
|
|
|
@@ -73,7 +74,7 @@ matterbridge -help
|
|
|
73
74
|
|
|
74
75
|
## Frontend
|
|
75
76
|
|
|
76
|
-
Matterbridge has a frontend
|
|
77
|
+
Matterbridge has a frontend available on http://localhost:3000
|
|
77
78
|
|
|
78
79
|
You can change the default port by adding the frontend parameter when you launch it.
|
|
79
80
|
Here's how to specify a different port number:
|
|
@@ -125,6 +126,7 @@ Matterbridge can run as many plugins as you want.
|
|
|
125
126
|
## How to install a plugin
|
|
126
127
|
|
|
127
128
|
To install i.e. https://github.com/Luligu/matterbridge-example-accessory-platform
|
|
129
|
+
|
|
128
130
|
```
|
|
129
131
|
git clone https://github.com/Luligu/matterbridge-example-accessory-platform
|
|
130
132
|
cd matterbridge-example-accessory-platform
|
|
@@ -136,17 +138,26 @@ Then add the plugin to Matterbridge
|
|
|
136
138
|
matterbridge -add .\
|
|
137
139
|
```
|
|
138
140
|
|
|
139
|
-
|
|
141
|
+
### How to add a plugin to Matterbridge
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
matterbridge -add .\
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### How to remove a plugin from Matterbridge
|
|
148
|
+
|
|
140
149
|
```
|
|
141
150
|
matterbridge -remove .\
|
|
142
151
|
```
|
|
143
152
|
|
|
144
|
-
|
|
153
|
+
### How to disable a registerd plugin
|
|
154
|
+
|
|
145
155
|
```
|
|
146
156
|
matterbridge -disable .\
|
|
147
157
|
```
|
|
148
158
|
|
|
149
|
-
|
|
159
|
+
### How to enable a registerd plugin
|
|
160
|
+
|
|
150
161
|
```
|
|
151
162
|
matterbridge -enable .\
|
|
152
163
|
```
|
|
@@ -165,10 +176,18 @@ Then change the name, version, description and author in the package.json.
|
|
|
165
176
|
Add your plugin logic in platform.ts:
|
|
166
177
|
|
|
167
178
|
### onStart(reason?: string)
|
|
168
|
-
The method onStart() is where you have to create your MatterbridgeDevice and add all needed clusters and command handlers.
|
|
179
|
+
The method onStart() is where you have to create your MatterbridgeDevice and add all needed clusters and command handlers.
|
|
180
|
+
|
|
181
|
+
The MatterbridgeDevice class has the create cluster methods already done and all command handlers needed (see plugin examples).
|
|
182
|
+
|
|
183
|
+
The method is called when Matterbridge load the plugin.
|
|
169
184
|
|
|
170
185
|
### onConfigure()
|
|
171
|
-
The method onConfigure() is where you can configure or initialize your device.
|
|
186
|
+
The method onConfigure() is where you can configure or initialize your device.
|
|
187
|
+
|
|
188
|
+
The method is called when the platform is commissioned.
|
|
172
189
|
|
|
173
190
|
### onShutdown(reason?: string)
|
|
174
|
-
The method onShutdown() is where you have to eventually cleanup some resources.
|
|
191
|
+
The method onShutdown() is where you have to eventually cleanup some resources.
|
|
192
|
+
|
|
193
|
+
The method is called when Matterbridge is shutting down.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Matterbridge } from './matterbridge.js';
|
|
3
|
+
async function main() {
|
|
4
|
+
// eslint-disable-next-line no-console
|
|
5
|
+
console.log('Loading Matterbridge from cli');
|
|
6
|
+
await Matterbridge.loadInstance(true);
|
|
7
|
+
}
|
|
8
|
+
process.title = 'matterbridge';
|
|
9
|
+
main().catch((error) => {
|
|
10
|
+
// eslint-disable-next-line no-console
|
|
11
|
+
console.error(`Failed to initialize Matterbridge from cli: ${error}`);
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;AAE/B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,+CAA+C,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,8BAA8B,CAAC;AAGtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
/**
|
|
3
2
|
* This file contains the entry point of Matterbridge.
|
|
4
3
|
*
|
|
@@ -36,6 +35,8 @@ export * from './AirQualityCluster.js';
|
|
|
36
35
|
export * from './ColorControlServer.js';
|
|
37
36
|
export * from './TvocCluster.js';
|
|
38
37
|
async function main() {
|
|
38
|
+
// eslint-disable-next-line no-console
|
|
39
|
+
console.log('Loading Matterbridge instance');
|
|
39
40
|
await Matterbridge.loadInstance();
|
|
40
41
|
}
|
|
41
42
|
main().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AAEjC,KAAK,UAAU,IAAI;IACjB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,YAAY,CAAC,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
|
package/dist/matterbridge.d.ts
CHANGED
|
@@ -42,7 +42,9 @@ export declare class Matterbridge {
|
|
|
42
42
|
homeDirectory: string;
|
|
43
43
|
rootDirectory: string;
|
|
44
44
|
matterbridgeDirectory: string;
|
|
45
|
+
matterbridgeVersion: string;
|
|
45
46
|
bridgeMode: 'bridge' | 'childbridge' | 'controller' | '';
|
|
47
|
+
debugEnabled: boolean;
|
|
46
48
|
private log;
|
|
47
49
|
private hasCleanupStarted;
|
|
48
50
|
private registeredPlugins;
|
|
@@ -61,11 +63,10 @@ export declare class Matterbridge {
|
|
|
61
63
|
private constructor();
|
|
62
64
|
/**
|
|
63
65
|
* Loads an instance of the Matterbridge class.
|
|
64
|
-
* If an instance already exists,
|
|
66
|
+
* If an instance already exists, return that instance.
|
|
65
67
|
* @returns The loaded instance of the Matterbridge class.
|
|
66
|
-
* @throws Error if an instance of Matterbridge already exists.
|
|
67
68
|
*/
|
|
68
|
-
static loadInstance(): Promise<Matterbridge>;
|
|
69
|
+
static loadInstance(cli?: boolean): Promise<Matterbridge>;
|
|
69
70
|
/**
|
|
70
71
|
* Initializes the Matterbridge application.
|
|
71
72
|
*
|
|
@@ -86,10 +87,10 @@ export declare class Matterbridge {
|
|
|
86
87
|
/**
|
|
87
88
|
* Loads a plugin from the specified package.json file path.
|
|
88
89
|
* @param packageJsonPath - The path to the package.json file of the plugin.
|
|
89
|
-
* @param mode - The mode of operation. Possible values are '
|
|
90
|
+
* @param mode - The mode of operation. Possible values are 'add', 'remove', 'enable', 'disable'.
|
|
90
91
|
* @returns A Promise that resolves when the plugin is loaded successfully, or rejects with an error if loading fails.
|
|
91
92
|
*/
|
|
92
|
-
private
|
|
93
|
+
private executeCommandLine;
|
|
93
94
|
/**
|
|
94
95
|
* Registers the signal handlers for SIGINT and SIGTERM.
|
|
95
96
|
* When either of these signals are received, the cleanup method is called with an appropriate message.
|
|
@@ -111,12 +112,14 @@ export declare class Matterbridge {
|
|
|
111
112
|
* Adds a device to the Matterbridge.
|
|
112
113
|
* @param pluginName - The name of the plugin.
|
|
113
114
|
* @param device - The device to be added.
|
|
115
|
+
* @returns A Promise that resolves when the device is added successfully.
|
|
114
116
|
*/
|
|
115
117
|
addDevice(pluginName: string, device: MatterbridgeDevice): Promise<void>;
|
|
116
118
|
/**
|
|
117
119
|
* Adds a bridged device to the Matterbridge.
|
|
118
120
|
* @param pluginName - The name of the plugin.
|
|
119
121
|
* @param device - The bridged device to add.
|
|
122
|
+
* @returns {Promise<void>} - A promise that resolves when the storage process is started.
|
|
120
123
|
*/
|
|
121
124
|
addBridgedDevice(pluginName: string, device: MatterbridgeDevice): Promise<void>;
|
|
122
125
|
/**
|
|
@@ -138,6 +141,10 @@ export declare class Matterbridge {
|
|
|
138
141
|
* @returns {Promise<void>} A promise that resolves when the storage is stopped.
|
|
139
142
|
*/
|
|
140
143
|
private stopStorage;
|
|
144
|
+
private testStartMatterBridge;
|
|
145
|
+
private startPlugin;
|
|
146
|
+
private configurePlugin;
|
|
147
|
+
private loadPlugin;
|
|
141
148
|
/**
|
|
142
149
|
* Starts the Matterbridge based on the bridge mode.
|
|
143
150
|
* If the bridge mode is 'bridge', it creates a commissioning server, matter aggregator,
|
|
@@ -223,7 +230,8 @@ export declare class Matterbridge {
|
|
|
223
230
|
* Logs the node and system information.
|
|
224
231
|
*/
|
|
225
232
|
private logNodeAndSystemInfo;
|
|
226
|
-
private
|
|
233
|
+
private getBaseRegisteredPlugins;
|
|
234
|
+
private getBaseRegisteredDevices;
|
|
227
235
|
/**
|
|
228
236
|
* Initializes the frontend of Matterbridge.
|
|
229
237
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"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"}
|