matterbridge 1.5.8 → 1.5.10
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 +36 -0
- package/README-DEV.md +10 -6
- package/README-DOCKER.md +11 -2
- package/README-PODMAN.md +2 -0
- package/README-SERVICE.md +57 -6
- package/README.md +46 -0
- package/dist/defaultConfigSchema.d.ts.map +1 -1
- package/dist/defaultConfigSchema.js +9 -3
- package/dist/defaultConfigSchema.js.map +1 -1
- package/dist/matterbridge.d.ts +0 -1
- package/dist/matterbridge.d.ts.map +1 -1
- package/dist/matterbridge.js +33 -58
- package/dist/matterbridge.js.map +1 -1
- package/dist/matterbridgeDevice.d.ts +24 -34
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +2 -2
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/matterbridgeTypes.d.ts +1 -5
- package/dist/matterbridgeTypes.d.ts.map +1 -1
- package/dist/matterbridgeTypes.js +1 -1
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +24 -4
- package/dist/pluginManager.js.map +1 -1
- package/frontend/build/asset-manifest.json +3 -3
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/js/{main.af741b33.js → main.96d6324b.js} +3 -3
- package/frontend/build/static/js/main.96d6324b.js.map +1 -0
- package/npm-shrinkwrap.json +139 -129
- package/package.json +18 -17
- package/CODEOWNERS +0 -1
- package/frontend/build/static/js/main.af741b33.js.map +0 -1
- /package/frontend/build/static/js/{main.af741b33.js.LICENSE.txt → main.96d6324b.js.LICENSE.txt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,10 +8,46 @@ If you like this project and find it useful, please consider giving it a star on
|
|
|
8
8
|
|
|
9
9
|
The Home Assistant Community Add-ons and plugins are not verified to work with Matterbridge. I strongly advise against using them. If you do use them and encounter an issue (which is likely because some do not meet the Matterbridge guidelines), please do not open an issue in the Matterbridge repository.
|
|
10
10
|
|
|
11
|
+
If you want to run Matterbridge in Home Assistant please use the official add-on https://github.com/Luligu/matterbridge-home-assistant-addon.
|
|
12
|
+
|
|
11
13
|
### New Apple firmware v. 18.0
|
|
12
14
|
|
|
13
15
|
Please read this: https://github.com/Luligu/matterbridge/discussions/135
|
|
14
16
|
|
|
17
|
+
### Discord
|
|
18
|
+
|
|
19
|
+
Tamer (https://github.com/tammeryousef1006) has created the Matterbridge Discord group: https://discord.gg/raWywpD4.
|
|
20
|
+
|
|
21
|
+
Feel free to join!
|
|
22
|
+
|
|
23
|
+
## [1.5.10] - 2024-10-01
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- [matterbridge]: Added '--omit=dev' to all install commands to save space and time on low powered devices.
|
|
28
|
+
- [matterbridge]: Integrated the DeviceManager class and removed the old array.
|
|
29
|
+
- [package]: Update dependencies.
|
|
30
|
+
|
|
31
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
32
|
+
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
|
33
|
+
</a>
|
|
34
|
+
|
|
35
|
+
## [1.5.9] - 2024-09-23
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- [ingress]: Fixed download routes with Ingress from the ha addon. The add-on https://github.com/Luligu/matterbridge-home-assistant-addon has been updated to v. 1.0.4.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- [package]: Update matter-node.js to 0.10.6.
|
|
44
|
+
- [package]: Update matter-history to 1.1.16.
|
|
45
|
+
- [package]: Update dependencies.
|
|
46
|
+
|
|
47
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
48
|
+
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
|
49
|
+
</a>
|
|
50
|
+
|
|
15
51
|
## [1.5.8] - 2024-09-21
|
|
16
52
|
|
|
17
53
|
### Added
|
package/README-DEV.md
CHANGED
|
@@ -43,23 +43,27 @@ Matterbridge exports from:
|
|
|
43
43
|
|
|
44
44
|
- NodeStorage classes.
|
|
45
45
|
|
|
46
|
-
#
|
|
46
|
+
# \***\*\*\*\*\***
|
|
47
47
|
|
|
48
|
-
A plugin must never install or import from `matter-node.js` or `matter.js` directly, as this leads to a second instance of `matter.js`, causing instability and unpredictable errors such as "The only instance is Endpoint".
|
|
48
|
+
A plugin must never install or import from `matter-node.js` or `matter.js` directly (neither as a dependency, devDependency, nor peerDependency), as this leads to a second instance of `matter.js`, causing instability and unpredictable errors such as "The only instance is Endpoint".
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Additionally, when Matterbridge updates the `matter.js` version, it should be consistent across all plugins.
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
# \***\*\*\*\*\***
|
|
53
|
+
|
|
54
|
+
A plugin must never install Matterbridge (neither as a dependency, devDependency, nor peerDependency).
|
|
55
|
+
|
|
56
|
+
Matterbridge must be linked to the plugin in development only.
|
|
53
57
|
|
|
54
58
|
```json
|
|
55
59
|
"scripts": {
|
|
56
60
|
'''
|
|
57
|
-
"
|
|
61
|
+
"dev:link": "npm link matterbridge",
|
|
58
62
|
'''
|
|
59
63
|
}
|
|
60
64
|
```
|
|
61
65
|
|
|
62
|
-
#
|
|
66
|
+
# \***\*\*\*\*\***
|
|
63
67
|
|
|
64
68
|
In the next releases I will remove the duplicated exports so please update your plugins.
|
|
65
69
|
|
package/README-DOCKER.md
CHANGED
|
@@ -20,7 +20,7 @@ The Matterbridge Docker image, which includes a manifest list for the linux/amd6
|
|
|
20
20
|
|
|
21
21
|
### First create the Matterbridge directories
|
|
22
22
|
|
|
23
|
-
This will create the required directories if they don't exist
|
|
23
|
+
This will create the required directories in your home directory if they don't exist
|
|
24
24
|
|
|
25
25
|
```
|
|
26
26
|
cd ~
|
|
@@ -31,9 +31,18 @@ sudo chown -R $USER:$USER ./Matterbridge ./.matterbridge
|
|
|
31
31
|
|
|
32
32
|
You may need to adapt the script to your setup.
|
|
33
33
|
|
|
34
|
+
### Add your user to docker group
|
|
35
|
+
|
|
36
|
+
If you don't want to use sudo with docker commands, run this command:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
sudo groupadd docker
|
|
40
|
+
sudo usermod -aG docker $USER
|
|
41
|
+
```
|
|
42
|
+
|
|
34
43
|
### Run the Docker container and start it
|
|
35
44
|
|
|
36
|
-
The container
|
|
45
|
+
The container must have full access to the host network (needed for mdns).
|
|
37
46
|
|
|
38
47
|
```
|
|
39
48
|
docker run --name matterbridge \
|
package/README-PODMAN.md
CHANGED
|
@@ -41,6 +41,7 @@ sudo chown -R $USER:$USER ./Matterbridge ./.matterbridge
|
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
You may need to adapt the script to your setup:
|
|
44
|
+
|
|
44
45
|
- ./Matterbridge is the position outside of the container of your matterbridge plugin directory (inside your home directory).
|
|
45
46
|
- ./.matterbridge is the position outside of the container of your matterbridge storage directory (inside your home directory).
|
|
46
47
|
|
|
@@ -56,6 +57,7 @@ podman run --name matterbridge \
|
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
You may need to adapt the script to your setup:
|
|
60
|
+
|
|
59
61
|
- ~/Matterbridge is the position outside of the container of your matterbridge plugin directory.
|
|
60
62
|
- ~/.matterbridge is the position outside of the container of your matterbridge storage directory.
|
|
61
63
|
|
package/README-SERVICE.md
CHANGED
|
@@ -16,6 +16,19 @@
|
|
|
16
16
|
|
|
17
17
|
## Run matterbridge as a daemon with systemctl (Linux only)
|
|
18
18
|
|
|
19
|
+
### First create the Matterbridge directories
|
|
20
|
+
|
|
21
|
+
This will create the required directories if they don't exist
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
cd ~
|
|
25
|
+
mkdir -p ./Matterbridge
|
|
26
|
+
mkdir -p ./.matterbridge
|
|
27
|
+
sudo chown -R $USER:$USER ./Matterbridge ./.matterbridge
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Then create a systemctl configuration file for Matterbridge
|
|
31
|
+
|
|
19
32
|
Create a systemctl configuration file for Matterbridge
|
|
20
33
|
|
|
21
34
|
```
|
|
@@ -92,48 +105,86 @@ sudo journalctl -u matterbridge.service -f --output cat
|
|
|
92
105
|
|
|
93
106
|
### Delete the logs older then 3 days (all of them not only the ones of Matterbridge!)
|
|
94
107
|
|
|
108
|
+
Check the space used
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
sudo journalctl --disk-usage
|
|
95
112
|
```
|
|
113
|
+
|
|
114
|
+
remove all log older then 3 days
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
sudo journalctl --rotate
|
|
96
118
|
sudo journalctl --vacuum-time=3d
|
|
97
119
|
```
|
|
98
120
|
|
|
99
|
-
|
|
121
|
+
## Prevent the journal logs to grow
|
|
122
|
+
|
|
123
|
+
If you want to make the setting permanent to prevent the journal logs to grow too much, run
|
|
124
|
+
|
|
100
125
|
```
|
|
101
126
|
sudo nano /etc/systemd/journald.conf
|
|
102
127
|
```
|
|
128
|
+
|
|
103
129
|
add
|
|
130
|
+
|
|
104
131
|
```
|
|
105
|
-
|
|
132
|
+
Compress=yes # Compress logs
|
|
133
|
+
MaxRetentionSec=3days # Keep logs for a maximum of 3 days.
|
|
134
|
+
MaxFileSec=1day # Rotate logs daily within the 3-day retention period.
|
|
135
|
+
ForwardToSyslog=no # Disable forwarding to syslog to prevent duplicate logging.
|
|
136
|
+
SystemMaxUse=100M # Limit persistent logs in /var/log/journal to 100 MB.
|
|
137
|
+
RuntimeMaxUse=100M # Limit runtime logs in /run/log/journal to 100 MB.
|
|
106
138
|
```
|
|
139
|
+
|
|
107
140
|
save it and run
|
|
141
|
+
|
|
108
142
|
```
|
|
109
143
|
sudo systemctl restart systemd-journald
|
|
110
144
|
```
|
|
111
145
|
|
|
112
|
-
|
|
146
|
+
## Verify that with your distro you can run sudo npm install -g matterbridge without the password
|
|
113
147
|
|
|
114
148
|
Run the following command to verify if you can install Matterbridge globally without being prompted for a password:
|
|
115
149
|
|
|
116
150
|
```
|
|
117
151
|
sudo npm install -g matterbridge
|
|
118
152
|
```
|
|
153
|
+
|
|
119
154
|
If you are not prompted for a password, no further action is required.
|
|
120
155
|
|
|
121
|
-
If that is not the case open the sudoers file for editing using visudo
|
|
156
|
+
If that is not the case, open the sudoers file for editing using visudo
|
|
157
|
+
|
|
122
158
|
```
|
|
123
159
|
sudo visudo
|
|
124
160
|
```
|
|
125
161
|
|
|
162
|
+
verify the presence of of a line
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
@includedir /etc/sudoers.d
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
exit and create a configuration file for sudoers
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
sudo nano /etc/sudoers.d/matterbridge
|
|
172
|
+
```
|
|
173
|
+
|
|
126
174
|
add this line replacing USER with your user name (e.g. radxa ALL=(ALL) NOPASSWD: ALL)
|
|
127
175
|
|
|
128
176
|
```
|
|
129
177
|
<USER> ALL=(ALL) NOPASSWD: ALL
|
|
130
178
|
```
|
|
131
179
|
|
|
132
|
-
or if you prefers to only give access to npm without password try (e.g. radxa ALL=(ALL) NOPASSWD: /usr/bin/npm)
|
|
180
|
+
or if you prefers to only give access to npm without password try with (e.g. radxa ALL=(ALL) NOPASSWD: /usr/bin/npm)
|
|
133
181
|
|
|
134
182
|
```
|
|
135
183
|
<USER> ALL=(ALL) NOPASSWD: /usr/bin/npm
|
|
136
184
|
```
|
|
137
185
|
|
|
138
|
-
save the file and
|
|
186
|
+
save the file and reload the settings with:
|
|
139
187
|
|
|
188
|
+
```
|
|
189
|
+
sudo visudo -c
|
|
190
|
+
```
|
package/README.md
CHANGED
|
@@ -320,6 +320,52 @@ matterbridge -factoryreset
|
|
|
320
320
|
|
|
321
321
|
This will reset the internal storages. All commissioning informations will be lost. All plugins will be unregistered.
|
|
322
322
|
|
|
323
|
+
# Frequently asked questions
|
|
324
|
+
|
|
325
|
+
## How to enable HTTPS for the frontend
|
|
326
|
+
|
|
327
|
+
### Provide your own certificates
|
|
328
|
+
|
|
329
|
+
Place your own certificates in the `.matterbridge/cert` directory:
|
|
330
|
+
|
|
331
|
+
- `cert.pem`
|
|
332
|
+
- `key.pem`
|
|
333
|
+
- `ca.pem` (optional)
|
|
334
|
+
|
|
335
|
+

|
|
336
|
+
|
|
337
|
+
### Change the command line
|
|
338
|
+
|
|
339
|
+
Add the **-ssl** parameter to the command line. If desired, you can also change the frontend port with **-frontend 443**.
|
|
340
|
+
|
|
341
|
+
```sh
|
|
342
|
+
matterbridge -ssl -frontend 443
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Restart
|
|
346
|
+
|
|
347
|
+
If the certificate are correctly configured, you will be able to connect with https to the frontend.
|
|
348
|
+
|
|
349
|
+

|
|
350
|
+
|
|
351
|
+
## How to send the debug log files
|
|
352
|
+
|
|
353
|
+
### Enable debug and log on file
|
|
354
|
+
|
|
355
|
+
In the frontend, go to settings and enable debug mode as shown below:
|
|
356
|
+
|
|
357
|
+

|
|
358
|
+
|
|
359
|
+

|
|
360
|
+
|
|
361
|
+
### Restart
|
|
362
|
+
|
|
363
|
+
Wait a few minutes to allow the logs to to accumulate.
|
|
364
|
+
|
|
365
|
+
Then, from the dots menu in the frontend, download the `matterbridge.log` and `matter.log` files.
|
|
366
|
+
|
|
367
|
+

|
|
368
|
+
|
|
323
369
|
# Known general issues
|
|
324
370
|
|
|
325
371
|
## Session XYZ does not exist
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultConfigSchema.d.ts","sourceRoot":"","sources":["../src/defaultConfigSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,eAAO,MAAM,kBAAkB,EAAE,cAiBhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAWhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"defaultConfigSchema.d.ts","sourceRoot":"","sources":["../src/defaultConfigSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,eAAO,MAAM,kBAAkB,EAAE,cAiBhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAWhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAwB3B,CAAC"}
|
|
@@ -56,8 +56,9 @@ export const shelly_config = {
|
|
|
56
56
|
username: '',
|
|
57
57
|
password: '',
|
|
58
58
|
exposeSwitch: 'switch',
|
|
59
|
-
exposeInput: '
|
|
60
|
-
|
|
59
|
+
exposeInput: 'momentary',
|
|
60
|
+
exposeInputEvent: 'momentary',
|
|
61
|
+
exposePowerMeter: 'disabled',
|
|
61
62
|
blackList: [],
|
|
62
63
|
whiteList: [],
|
|
63
64
|
deviceIp: {},
|
|
@@ -65,8 +66,13 @@ export const shelly_config = {
|
|
|
65
66
|
enableStorageDiscover: true,
|
|
66
67
|
resetStorageDiscover: false,
|
|
67
68
|
enableConfigDiscover: false,
|
|
68
|
-
enableBleDiscover:
|
|
69
|
+
enableBleDiscover: true,
|
|
70
|
+
failsafeCount: 0,
|
|
71
|
+
postfix: '',
|
|
69
72
|
debug: false,
|
|
73
|
+
debugMdns: false,
|
|
74
|
+
debugCoap: false,
|
|
75
|
+
debugWs: false,
|
|
70
76
|
unregisterOnShutdown: false,
|
|
71
77
|
};
|
|
72
78
|
//# sourceMappingURL=defaultConfigSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultConfigSchema.js","sourceRoot":"","sources":["../src/defaultConfigSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,EAAE;IACpB,sBAAsB,EAAE,EAAE;IAC1B,KAAK,EAAE,KAAK;IACZ,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,2BAA2B;IACjC,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,gBAAgB,EAAE,EAAE;IACpB,KAAK,EAAE,KAAK;IACZ,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"defaultConfigSchema.js","sourceRoot":"","sources":["../src/defaultConfigSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,EAAE;IACpB,sBAAsB,EAAE,EAAE;IAC1B,KAAK,EAAE,KAAK;IACZ,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,2BAA2B;IACjC,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,gBAAgB,EAAE,EAAE;IACpB,KAAK,EAAE,KAAK;IACZ,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;IACxB,gBAAgB,EAAE,WAAW;IAC7B,gBAAgB,EAAE,UAAU;IAC5B,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,kBAAkB,EAAE,IAAI;IACxB,qBAAqB,EAAE,IAAI;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,oBAAoB,EAAE,KAAK;CAC5B,CAAC"}
|
package/dist/matterbridge.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,OAAO,YAAY,MAAM,QAAQ,CAAC;AAQlC,OAAO,EAAE,UAAU,EAAyK,MAAM,kBAAkB,CAAC;AAGrN,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAwB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"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"}
|
package/dist/matterbridge.js
CHANGED
|
@@ -121,7 +121,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
121
121
|
matterLoggerFile = 'matter' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.log';
|
|
122
122
|
plugins;
|
|
123
123
|
devices;
|
|
124
|
-
registeredDevices = [];
|
|
125
124
|
nodeStorage;
|
|
126
125
|
nodeContext;
|
|
127
126
|
matterStorageName = 'matterbridge' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.json';
|
|
@@ -225,6 +224,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
225
224
|
this.nodeStorage = new NodeStorageManager({ dir: path.join(this.matterbridgeDirectory, this.nodeStorageName), writeQueue: false, expiredInterval: undefined, logging: false });
|
|
226
225
|
// this.log.debug('Creating node storage context for matterbridge');
|
|
227
226
|
this.nodeContext = await this.nodeStorage.createStorage('matterbridge');
|
|
227
|
+
// Check if the storage is corrupted and remove it
|
|
228
|
+
// TODO: Check if the storage is corrupted and remove it
|
|
228
229
|
// Create matterbridge logger
|
|
229
230
|
this.log = new AnsiLogger({ logName: 'Matterbridge', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: "info" /* LogLevel.INFO */ });
|
|
230
231
|
// Create the file logger for matterbridge (context: matterbridgeFileLog)
|
|
@@ -344,7 +345,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
344
345
|
// We don't do this when the add parameter is set because we shut down the process after adding the plugin
|
|
345
346
|
this.log.info(`Error parsing plugin ${plg}${plugin.name}${nf}. Trying to reinstall it from npm.`);
|
|
346
347
|
try {
|
|
347
|
-
await this.spawnCommand('npm', ['install', '-g', plugin.name]);
|
|
348
|
+
await this.spawnCommand('npm', ['install', '-g', '--omit=dev', plugin.name]);
|
|
348
349
|
this.log.info(`Plugin ${plg}${plugin.name}${nf} reinstalled.`);
|
|
349
350
|
plugin.error = false;
|
|
350
351
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -473,28 +474,24 @@ export class Matterbridge extends EventEmitter {
|
|
|
473
474
|
}
|
|
474
475
|
if (getParameter('add')) {
|
|
475
476
|
this.log.debug(`Adding plugin ${getParameter('add')}`);
|
|
476
|
-
// await this.executeCommandLine(getParameter('add') as string, 'add');
|
|
477
477
|
await this.plugins.add(getParameter('add'));
|
|
478
478
|
this.emit('shutdown');
|
|
479
479
|
return;
|
|
480
480
|
}
|
|
481
481
|
if (getParameter('remove')) {
|
|
482
482
|
this.log.debug(`Removing plugin ${getParameter('remove')}`);
|
|
483
|
-
// await this.executeCommandLine(getParameter('remove') as string, 'remove');
|
|
484
483
|
await this.plugins.remove(getParameter('remove'));
|
|
485
484
|
this.emit('shutdown');
|
|
486
485
|
return;
|
|
487
486
|
}
|
|
488
487
|
if (getParameter('enable')) {
|
|
489
488
|
this.log.debug(`Enabling plugin ${getParameter('enable')}`);
|
|
490
|
-
// await this.executeCommandLine(getParameter('enable') as string, 'enable');
|
|
491
489
|
await this.plugins.enable(getParameter('enable'));
|
|
492
490
|
this.emit('shutdown');
|
|
493
491
|
return;
|
|
494
492
|
}
|
|
495
493
|
if (getParameter('disable')) {
|
|
496
494
|
this.log.debug(`Disabling plugin ${getParameter('disable')}`);
|
|
497
|
-
// await this.executeCommandLine(getParameter('disable') as string, 'disable');
|
|
498
495
|
await this.plugins.disable(getParameter('disable'));
|
|
499
496
|
this.emit('shutdown');
|
|
500
497
|
return;
|
|
@@ -518,7 +515,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
518
515
|
this.nodeContext = undefined;
|
|
519
516
|
this.nodeStorage = undefined;
|
|
520
517
|
this.plugins.clear();
|
|
521
|
-
this.
|
|
518
|
+
this.devices.clear();
|
|
522
519
|
this.emit('shutdown');
|
|
523
520
|
return;
|
|
524
521
|
}
|
|
@@ -1175,8 +1172,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
1175
1172
|
if (this.nodeStorage && this.nodeContext) {
|
|
1176
1173
|
this.log.info('Saving registered devices...');
|
|
1177
1174
|
const serializedRegisteredDevices = [];
|
|
1178
|
-
this.
|
|
1179
|
-
const serializedMatterbridgeDevice =
|
|
1175
|
+
this.devices.forEach(async (device) => {
|
|
1176
|
+
const serializedMatterbridgeDevice = device.serialize();
|
|
1180
1177
|
// this.log.info(`- ${serializedMatterbridgeDevice.deviceName}${rs}\n`, serializedMatterbridgeDevice);
|
|
1181
1178
|
if (serializedMatterbridgeDevice)
|
|
1182
1179
|
serializedRegisteredDevices.push(serializedMatterbridgeDevice);
|
|
@@ -1203,7 +1200,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
1203
1200
|
this.log.error('Error saving registered devices: nodeContext not found!');
|
|
1204
1201
|
}
|
|
1205
1202
|
this.plugins.clear();
|
|
1206
|
-
this.
|
|
1203
|
+
this.devices.clear();
|
|
1204
|
+
// this.registeredDevices = [];
|
|
1207
1205
|
// this.log.info('Waiting for matter to deliver last messages...');
|
|
1208
1206
|
// this.cleanupTimeout2 = setTimeout(async () => {
|
|
1209
1207
|
if (restart) {
|
|
@@ -1301,7 +1299,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1301
1299
|
plugin.aggregator?.addBridgedDevice(device);
|
|
1302
1300
|
}
|
|
1303
1301
|
}
|
|
1304
|
-
this.registeredDevices.push({ plugin: pluginName, device });
|
|
1305
1302
|
if (plugin.registeredDevices !== undefined)
|
|
1306
1303
|
plugin.registeredDevices++;
|
|
1307
1304
|
if (plugin.addedDevices !== undefined)
|
|
@@ -1337,12 +1334,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1337
1334
|
// device.getClusterServerById(BridgedDeviceBasicInformation.Cluster.id)?.triggerShutDownEvent({});
|
|
1338
1335
|
// device.getClusterServerById(BridgedDeviceBasicInformation.Cluster.id)?.triggerLeaveEvent({});
|
|
1339
1336
|
this.matterAggregator?.removeBridgedDevice(device);
|
|
1340
|
-
this.registeredDevices.forEach((registeredDevice, index) => {
|
|
1341
|
-
if (registeredDevice.device === device) {
|
|
1342
|
-
this.registeredDevices.splice(index, 1);
|
|
1343
|
-
return;
|
|
1344
|
-
}
|
|
1345
|
-
});
|
|
1346
1337
|
this.log.info(`Removed bridged device(${plugin.registeredDevices}/${plugin.addedDevices}) ${dev}${device.deviceName}${nf} (${dev}${device.name}${nf}) for plugin ${plg}${pluginName}${nf}`);
|
|
1347
1338
|
if (plugin.registeredDevices !== undefined)
|
|
1348
1339
|
plugin.registeredDevices--;
|
|
@@ -1356,24 +1347,12 @@ export class Matterbridge extends EventEmitter {
|
|
|
1356
1347
|
this.log.error(`Error removing bridged device ${dev}${device.deviceName}${er} (${dev}${device.name}${er}) for plugin ${plg}${pluginName}${er}: commissioning server not found`);
|
|
1357
1348
|
return;
|
|
1358
1349
|
}
|
|
1359
|
-
this.registeredDevices.forEach((registeredDevice, index) => {
|
|
1360
|
-
if (registeredDevice.device === device) {
|
|
1361
|
-
this.registeredDevices.splice(index, 1);
|
|
1362
|
-
return;
|
|
1363
|
-
}
|
|
1364
|
-
});
|
|
1365
1350
|
}
|
|
1366
1351
|
else if (plugin.type === 'DynamicPlatform') {
|
|
1367
1352
|
if (!plugin.aggregator) {
|
|
1368
1353
|
this.log.error(`Error removing bridged device ${dev}${device.deviceName}${er} (${dev}${device.name}${er}) for plugin ${plg}${pluginName}${er}: aggregator not found`);
|
|
1369
1354
|
return;
|
|
1370
1355
|
}
|
|
1371
|
-
this.registeredDevices.forEach((registeredDevice, index) => {
|
|
1372
|
-
if (registeredDevice.device === device) {
|
|
1373
|
-
this.registeredDevices.splice(index, 1);
|
|
1374
|
-
return;
|
|
1375
|
-
}
|
|
1376
|
-
});
|
|
1377
1356
|
if (device.number !== undefined) {
|
|
1378
1357
|
device.setBridgedDeviceReachability(false);
|
|
1379
1358
|
device.getClusterServerById(BridgedDeviceBasicInformation.Cluster.id)?.triggerReachableChangedEvent({ reachableNewValue: false });
|
|
@@ -1403,18 +1382,14 @@ export class Matterbridge extends EventEmitter {
|
|
|
1403
1382
|
*/
|
|
1404
1383
|
async removeAllBridgedDevices(pluginName) {
|
|
1405
1384
|
this.log.debug(`Removing all bridged devices for plugin ${plg}${pluginName}${db}`);
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
devicesToRemove.push(registeredDevice);
|
|
1385
|
+
this.devices.forEach(async (device) => {
|
|
1386
|
+
if (device.plugin === pluginName) {
|
|
1387
|
+
await this.removeBridgedDevice(pluginName, device);
|
|
1410
1388
|
}
|
|
1411
|
-
}
|
|
1412
|
-
for (const registeredDevice of devicesToRemove) {
|
|
1413
|
-
this.removeBridgedDevice(pluginName, registeredDevice.device);
|
|
1414
|
-
}
|
|
1389
|
+
});
|
|
1415
1390
|
}
|
|
1416
1391
|
async startTest() {
|
|
1417
|
-
// Start the Matterbridge
|
|
1392
|
+
// Start the Matterbridge test
|
|
1418
1393
|
}
|
|
1419
1394
|
/**
|
|
1420
1395
|
* Starts the Matterbridge in bridge mode.
|
|
@@ -2452,7 +2427,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
2452
2427
|
this.wssSendMessage('spawn', this.log.now(), 'Matterbridge:spawn', `child process closed with code ${code} and signal ${signal}`);
|
|
2453
2428
|
if (code === 0) {
|
|
2454
2429
|
if (cmdLine.startsWith('npm install -g'))
|
|
2455
|
-
this.log.notice(`Package ${cmdLine.replace('npm install -g ', '').replace('--verbose', '')} installed correctly`);
|
|
2430
|
+
this.log.notice(`Package ${cmdLine.replace('npm install -g ', '').replace('--verbose', '').replace('--omit=dev', '')} installed correctly`);
|
|
2456
2431
|
this.log.debug(`Child process "${cmdLine}" closed with code ${code} and signal ${signal}`);
|
|
2457
2432
|
resolve();
|
|
2458
2433
|
}
|
|
@@ -2745,21 +2720,21 @@ export class Matterbridge extends EventEmitter {
|
|
|
2745
2720
|
this.expressApp.get('/api/devices', (req, res) => {
|
|
2746
2721
|
this.log.debug('The frontend sent /api/devices');
|
|
2747
2722
|
const data = [];
|
|
2748
|
-
this.
|
|
2749
|
-
let name =
|
|
2723
|
+
this.devices.forEach(async (device) => {
|
|
2724
|
+
let name = device.getClusterServer(BasicInformationCluster)?.attributes.nodeLabel?.getLocal();
|
|
2750
2725
|
if (!name)
|
|
2751
|
-
name =
|
|
2752
|
-
let serial =
|
|
2726
|
+
name = device.getClusterServer(BridgedDeviceBasicInformationCluster)?.attributes.nodeLabel?.getLocal() ?? 'Unknown';
|
|
2727
|
+
let serial = device.getClusterServer(BasicInformationCluster)?.attributes.serialNumber?.getLocal();
|
|
2753
2728
|
if (!serial)
|
|
2754
|
-
serial =
|
|
2755
|
-
let uniqueId =
|
|
2729
|
+
serial = device.getClusterServer(BridgedDeviceBasicInformationCluster)?.attributes.serialNumber?.getLocal() ?? 'Unknown';
|
|
2730
|
+
let uniqueId = device.getClusterServer(BasicInformationCluster)?.attributes.uniqueId?.getLocal();
|
|
2756
2731
|
if (!uniqueId)
|
|
2757
|
-
uniqueId =
|
|
2758
|
-
const cluster = this.getClusterTextFromDevice(
|
|
2732
|
+
uniqueId = device.getClusterServer(BridgedDeviceBasicInformationCluster)?.attributes.uniqueId?.getLocal() ?? 'Unknown';
|
|
2733
|
+
const cluster = this.getClusterTextFromDevice(device);
|
|
2759
2734
|
data.push({
|
|
2760
|
-
pluginName:
|
|
2761
|
-
type:
|
|
2762
|
-
endpoint:
|
|
2735
|
+
pluginName: device.plugin ?? 'Unknown',
|
|
2736
|
+
type: device.name + ' (0x' + device.deviceType.toString(16).padStart(4, '0') + ')',
|
|
2737
|
+
endpoint: device.number,
|
|
2763
2738
|
name,
|
|
2764
2739
|
serial,
|
|
2765
2740
|
uniqueId,
|
|
@@ -2779,9 +2754,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
2779
2754
|
return;
|
|
2780
2755
|
}
|
|
2781
2756
|
const data = [];
|
|
2782
|
-
this.
|
|
2783
|
-
if (
|
|
2784
|
-
const clusterServers =
|
|
2757
|
+
this.devices.forEach(async (device) => {
|
|
2758
|
+
if (device.plugin === selectedPluginName && device.number === selectedDeviceEndpoint) {
|
|
2759
|
+
const clusterServers = device.getAllClusterServers();
|
|
2785
2760
|
clusterServers.forEach((clusterServer) => {
|
|
2786
2761
|
Object.entries(clusterServer.attributes).forEach(([key, value]) => {
|
|
2787
2762
|
if (clusterServer.name === 'EveHistory')
|
|
@@ -2800,7 +2775,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
2800
2775
|
// console.log(error);
|
|
2801
2776
|
}
|
|
2802
2777
|
data.push({
|
|
2803
|
-
endpoint:
|
|
2778
|
+
endpoint: device.number ? device.number.toString() : '...',
|
|
2804
2779
|
clusterName: clusterServer.name,
|
|
2805
2780
|
clusterId: '0x' + clusterServer.id.toString(16).padStart(2, '0'),
|
|
2806
2781
|
attributeName: key,
|
|
@@ -2809,8 +2784,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
2809
2784
|
});
|
|
2810
2785
|
});
|
|
2811
2786
|
});
|
|
2812
|
-
|
|
2813
|
-
const name =
|
|
2787
|
+
device.getChildEndpoints().forEach((childEndpoint) => {
|
|
2788
|
+
const name = device.getChildEndpointName(childEndpoint);
|
|
2814
2789
|
const clusterServers = childEndpoint.getAllClusterServers();
|
|
2815
2790
|
clusterServers.forEach((clusterServer) => {
|
|
2816
2791
|
Object.entries(clusterServer.attributes).forEach(([key, value]) => {
|
|
@@ -3138,7 +3113,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
3138
3113
|
if (command === 'update') {
|
|
3139
3114
|
this.log.info('Updating matterbridge...');
|
|
3140
3115
|
try {
|
|
3141
|
-
await this.spawnCommand('npm', ['install', '-g', 'matterbridge', '--verbose']);
|
|
3116
|
+
await this.spawnCommand('npm', ['install', '-g', 'matterbridge', '--omit=dev', '--verbose']);
|
|
3142
3117
|
this.log.info('Matterbridge has been updated. Full restart required.');
|
|
3143
3118
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3144
3119
|
}
|
|
@@ -3173,7 +3148,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
3173
3148
|
param = param.replace(/\*/g, '\\');
|
|
3174
3149
|
this.log.info(`Installing plugin ${plg}${param}${nf}...`);
|
|
3175
3150
|
try {
|
|
3176
|
-
await this.spawnCommand('npm', ['install', '-g', param, '--verbose']);
|
|
3151
|
+
await this.spawnCommand('npm', ['install', '-g', param, '--omit=dev', '--verbose']);
|
|
3177
3152
|
this.log.info(`Plugin ${plg}${param}${nf} installed. Full restart required.`);
|
|
3178
3153
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3179
3154
|
}
|