matterbridge 3.1.3 → 3.1.4-dev-20250715-075e722
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 +16 -0
- package/README.md +18 -18
- package/dist/cli.js +2 -91
- package/dist/cliEmitter.js +0 -30
- package/dist/clusters/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -24
- package/dist/deviceManager.js +1 -94
- package/dist/devices/batteryStorage.js +1 -48
- package/dist/devices/evse.js +10 -74
- package/dist/devices/export.js +0 -2
- package/dist/devices/heatPump.js +2 -50
- package/dist/devices/laundryDryer.js +6 -83
- package/dist/devices/laundryWasher.js +7 -91
- package/dist/devices/roboticVacuumCleaner.js +6 -89
- package/dist/devices/solarPower.js +0 -38
- package/dist/devices/waterHeater.js +2 -82
- package/dist/frontend.js +18 -423
- package/dist/globalMatterbridge.js +0 -47
- package/dist/helpers.js +0 -53
- package/dist/index.js +1 -30
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.js +0 -3
- package/dist/matter/types.js +0 -3
- package/dist/matterbridge.js +55 -788
- package/dist/matterbridgeAccessoryPlatform.js +0 -36
- package/dist/matterbridgeBehaviors.js +1 -61
- package/dist/matterbridgeDeviceTypes.js +15 -579
- package/dist/matterbridgeDynamicPlatform.js +0 -36
- package/dist/matterbridgeEndpoint.js +42 -1106
- package/dist/matterbridgeEndpointHelpers.js +12 -322
- package/dist/matterbridgePlatform.js +0 -233
- package/dist/matterbridgeTypes.js +0 -25
- package/dist/pluginManager.js +3 -269
- package/dist/shelly.js +7 -168
- package/dist/storage/export.js +0 -1
- package/dist/update.js +0 -54
- package/dist/utils/colorUtils.js +2 -263
- package/dist/utils/commandLine.js +0 -54
- package/dist/utils/copyDirectory.js +1 -38
- package/dist/utils/createDirectory.js +0 -33
- package/dist/utils/createZip.js +2 -47
- package/dist/utils/deepCopy.js +0 -39
- package/dist/utils/deepEqual.js +1 -72
- package/dist/utils/export.js +0 -1
- package/dist/utils/hex.js +0 -58
- package/dist/utils/isvalid.js +0 -101
- package/dist/utils/network.js +16 -96
- package/dist/utils/spawn.js +0 -18
- package/dist/utils/wait.js +9 -62
- package/npm-shrinkwrap.json +3 -3
- package/package.json +2 -3
- package/dist/cli.d.ts +0 -26
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cliEmitter.d.ts +0 -34
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.js.map +0 -1
- package/dist/clusters/export.d.ts +0 -2
- package/dist/clusters/export.d.ts.map +0 -1
- package/dist/clusters/export.js.map +0 -1
- package/dist/defaultConfigSchema.d.ts +0 -28
- package/dist/defaultConfigSchema.d.ts.map +0 -1
- package/dist/defaultConfigSchema.js.map +0 -1
- package/dist/deviceManager.d.ts +0 -112
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/devices/batteryStorage.d.ts +0 -48
- package/dist/devices/batteryStorage.d.ts.map +0 -1
- package/dist/devices/batteryStorage.js.map +0 -1
- package/dist/devices/evse.d.ts +0 -75
- package/dist/devices/evse.d.ts.map +0 -1
- package/dist/devices/evse.js.map +0 -1
- package/dist/devices/export.d.ts +0 -9
- package/dist/devices/export.d.ts.map +0 -1
- package/dist/devices/export.js.map +0 -1
- package/dist/devices/heatPump.d.ts +0 -47
- package/dist/devices/heatPump.d.ts.map +0 -1
- package/dist/devices/heatPump.js.map +0 -1
- package/dist/devices/laundryDryer.d.ts +0 -87
- package/dist/devices/laundryDryer.d.ts.map +0 -1
- package/dist/devices/laundryDryer.js.map +0 -1
- package/dist/devices/laundryWasher.d.ts +0 -242
- package/dist/devices/laundryWasher.d.ts.map +0 -1
- package/dist/devices/laundryWasher.js.map +0 -1
- package/dist/devices/roboticVacuumCleaner.d.ts +0 -110
- package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
- package/dist/devices/roboticVacuumCleaner.js.map +0 -1
- package/dist/devices/solarPower.d.ts +0 -40
- package/dist/devices/solarPower.d.ts.map +0 -1
- package/dist/devices/solarPower.js.map +0 -1
- package/dist/devices/waterHeater.d.ts +0 -111
- package/dist/devices/waterHeater.d.ts.map +0 -1
- package/dist/devices/waterHeater.js.map +0 -1
- package/dist/frontend.d.ts +0 -303
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/globalMatterbridge.d.ts +0 -59
- package/dist/globalMatterbridge.d.ts.map +0 -1
- package/dist/globalMatterbridge.js.map +0 -1
- package/dist/helpers.d.ts +0 -48
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts +0 -33
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/export.d.ts +0 -2
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts +0 -2
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts +0 -2
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts +0 -2
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts +0 -2
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts +0 -5
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts +0 -3
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterbridge.d.ts +0 -444
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -42
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts +0 -1340
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts +0 -709
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -42
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts +0 -1250
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -3198
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts +0 -310
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts +0 -195
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -291
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts +0 -174
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts +0 -2
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts +0 -59
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -117
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/commandLine.d.ts +0 -59
- package/dist/utils/commandLine.d.ts.map +0 -1
- package/dist/utils/commandLine.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts +0 -33
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createDirectory.d.ts +0 -34
- package/dist/utils/createDirectory.d.ts.map +0 -1
- package/dist/utils/createDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts +0 -39
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts +0 -32
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts +0 -54
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/export.d.ts +0 -12
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/hex.d.ts +0 -49
- package/dist/utils/hex.d.ts.map +0 -1
- package/dist/utils/hex.js.map +0 -1
- package/dist/utils/isvalid.d.ts +0 -103
- package/dist/utils/isvalid.d.ts.map +0 -1
- package/dist/utils/isvalid.js.map +0 -1
- package/dist/utils/network.d.ts +0 -76
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts +0 -11
- package/dist/utils/spawn.d.ts.map +0 -1
- package/dist/utils/spawn.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -56
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js.map +0 -1
- /package/bin/{matterbridge → matterbridge.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,22 @@ If you like this project and find it useful, please consider giving it a star on
|
|
|
8
8
|
<img src="bmc-button.svg" alt="Buy me a coffee" width="120">
|
|
9
9
|
</a>
|
|
10
10
|
|
|
11
|
+
## [3.1.4] - 2025-07-??
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- [package]: Updated dependencies.
|
|
18
|
+
- [bin]: Updated matterbridge bin.
|
|
19
|
+
- [network]: Refactor network logging to improve clarity and update logging format.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
24
|
+
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
|
25
|
+
</a>
|
|
26
|
+
|
|
11
27
|
## [3.1.3] - 2025-07-14
|
|
12
28
|
|
|
13
29
|
### Added
|
package/README.md
CHANGED
|
@@ -86,19 +86,19 @@ Avoid using VLAN and firewall blocking the communications between the controller
|
|
|
86
86
|
|
|
87
87
|
Follow these steps to install Matterbridge:
|
|
88
88
|
|
|
89
|
-
```
|
|
89
|
+
```bash
|
|
90
90
|
npm install -g matterbridge --omit=dev
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
on Linux or macOS you may need the necessary permissions:
|
|
94
94
|
|
|
95
|
-
```
|
|
95
|
+
```bash
|
|
96
96
|
sudo npm install -g matterbridge --omit=dev
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
Test the installation with:
|
|
100
100
|
|
|
101
|
-
```
|
|
101
|
+
```bash
|
|
102
102
|
matterbridge
|
|
103
103
|
```
|
|
104
104
|
|
|
@@ -110,7 +110,7 @@ You can then change the bridge mode and other parameters from the frontend.
|
|
|
110
110
|
|
|
111
111
|
### mode bridge
|
|
112
112
|
|
|
113
|
-
```
|
|
113
|
+
```bash
|
|
114
114
|
matterbridge -bridge
|
|
115
115
|
```
|
|
116
116
|
|
|
@@ -120,7 +120,7 @@ Matterbridge only exposes itself, and you have to pair it scanning the QR code s
|
|
|
120
120
|
|
|
121
121
|
### mode childbridge
|
|
122
122
|
|
|
123
|
-
```
|
|
123
|
+
```bash
|
|
124
124
|
matterbridge -childbridge
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -130,7 +130,7 @@ Matterbridge exposes each registered plugins, and you have to pair each one by s
|
|
|
130
130
|
|
|
131
131
|
### Use matterbridge -help to see the command line syntax
|
|
132
132
|
|
|
133
|
-
```
|
|
133
|
+
```bash
|
|
134
134
|
matterbridge -help
|
|
135
135
|
```
|
|
136
136
|
|
|
@@ -142,7 +142,7 @@ You can change the default port by adding the frontend parameter when you run it
|
|
|
142
142
|
|
|
143
143
|
Here's how to specify a different port number:
|
|
144
144
|
|
|
145
|
-
```
|
|
145
|
+
```bash
|
|
146
146
|
matterbridge -frontend [port number]
|
|
147
147
|
```
|
|
148
148
|
|
|
@@ -394,15 +394,15 @@ To install i.e. https://github.com/Luligu/matterbridge-zigbee2mqtt
|
|
|
394
394
|
|
|
395
395
|
On windows:
|
|
396
396
|
|
|
397
|
-
```
|
|
397
|
+
```powershell
|
|
398
398
|
cd $HOME\Matterbridge
|
|
399
399
|
npm install -g matterbridge-zigbee2mqtt
|
|
400
400
|
matterbridge -add matterbridge-zigbee2mqtt
|
|
401
401
|
```
|
|
402
402
|
|
|
403
|
-
On linux:
|
|
403
|
+
On linux or macOS:
|
|
404
404
|
|
|
405
|
-
```
|
|
405
|
+
```bash
|
|
406
406
|
cd ~/Matterbridge
|
|
407
407
|
sudo npm install -g matterbridge-zigbee2mqtt
|
|
408
408
|
matterbridge -add matterbridge-zigbee2mqtt
|
|
@@ -410,43 +410,43 @@ matterbridge -add matterbridge-zigbee2mqtt
|
|
|
410
410
|
|
|
411
411
|
## How to add a plugin to Matterbridge from a terminal
|
|
412
412
|
|
|
413
|
-
```
|
|
413
|
+
```bash
|
|
414
414
|
matterbridge -add [plugin path or plugin name]
|
|
415
415
|
```
|
|
416
416
|
|
|
417
417
|
## How to remove a plugin from Matterbridge from a terminal
|
|
418
418
|
|
|
419
|
-
```
|
|
419
|
+
```bash
|
|
420
420
|
matterbridge -remove [plugin path or plugin name]
|
|
421
421
|
```
|
|
422
422
|
|
|
423
423
|
## How to disable a registered plugin from a terminal
|
|
424
424
|
|
|
425
|
-
```
|
|
425
|
+
```bash
|
|
426
426
|
matterbridge -disable [plugin path or plugin name]
|
|
427
427
|
```
|
|
428
428
|
|
|
429
429
|
## How to enable a registered plugin from a terminal
|
|
430
430
|
|
|
431
|
-
```
|
|
431
|
+
```bash
|
|
432
432
|
matterbridge -enable [plugin path or plugin name]
|
|
433
433
|
```
|
|
434
434
|
|
|
435
435
|
## How to remove the commissioning information for Matterbridge so you can pair it again (bridge mode). Shutdown Matterbridge before!
|
|
436
436
|
|
|
437
|
-
```
|
|
437
|
+
```bash
|
|
438
438
|
matterbridge -reset
|
|
439
439
|
```
|
|
440
440
|
|
|
441
441
|
## How to remove the commissioning information for a registered plugin so you can pair it again (childbridge mode). Shutdown Matterbridge before!
|
|
442
442
|
|
|
443
|
-
```
|
|
443
|
+
```bash
|
|
444
444
|
matterbridge -reset [plugin path or plugin name]
|
|
445
445
|
```
|
|
446
446
|
|
|
447
447
|
## How to factory reset Matterbridge. Shutdown Matterbridge before!
|
|
448
448
|
|
|
449
|
-
```
|
|
449
|
+
```bash
|
|
450
450
|
matterbridge -factoryreset
|
|
451
451
|
```
|
|
452
452
|
|
|
@@ -470,7 +470,7 @@ Place your own certificates in the `.matterbridge/cert` directory:
|
|
|
470
470
|
|
|
471
471
|
Add the **-ssl** parameter to the command line. If desired, you can also change the frontend port with **-frontend 443**.
|
|
472
472
|
|
|
473
|
-
```
|
|
473
|
+
```bash
|
|
474
474
|
matterbridge -ssl -frontend 443
|
|
475
475
|
```
|
|
476
476
|
|
package/dist/cli.js
CHANGED
|
@@ -1,44 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the CLI entry point of Matterbridge.
|
|
3
|
-
*
|
|
4
|
-
* @file cli.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2023-12-29
|
|
7
|
-
* @version 2.0.1
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2023, 2024, 2025 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
1
|
import os from 'node:os';
|
|
25
2
|
import { inspect } from 'node:util';
|
|
26
|
-
// AnsiLogger module
|
|
27
3
|
import { AnsiLogger, BRIGHT, CYAN, db, YELLOW } from 'node-ansi-logger';
|
|
28
|
-
// Matterbridge
|
|
29
4
|
import { getIntParameter, hasParameter } from './utils/export.js';
|
|
30
5
|
import { Matterbridge } from './matterbridge.js';
|
|
31
6
|
import { cliEmitter, lastCpuUsage, setLastCpuUsage } from './cliEmitter.js';
|
|
32
7
|
export let instance;
|
|
33
|
-
// Inspectop
|
|
34
8
|
let session;
|
|
35
9
|
let snapshotInterval;
|
|
36
|
-
// Cpu and memory check
|
|
37
10
|
let memoryCheckInterval;
|
|
38
11
|
let prevCpus;
|
|
39
12
|
let peakCpu = 0;
|
|
40
13
|
let peakRss = 0;
|
|
41
|
-
const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4
|
|
14
|
+
const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
|
|
42
15
|
const formatMemoryUsage = (bytes) => {
|
|
43
16
|
if (bytes >= 1024 ** 3) {
|
|
44
17
|
return `${(bytes / 1024 ** 3).toFixed(2)} GB`;
|
|
@@ -65,20 +38,14 @@ const formatOsUpTime = (seconds) => {
|
|
|
65
38
|
}
|
|
66
39
|
return `${seconds} second${seconds !== 1 ? 's' : ''}`;
|
|
67
40
|
};
|
|
68
|
-
/**
|
|
69
|
-
* Starts the CPU and memory check interval.
|
|
70
|
-
*/
|
|
71
41
|
async function startCpuMemoryCheck() {
|
|
72
|
-
// const os = await import('node:os');
|
|
73
42
|
log.debug(`Cpu memory check started`);
|
|
74
43
|
prevCpus = os.cpus();
|
|
75
44
|
clearInterval(memoryCheckInterval);
|
|
76
45
|
const interval = () => {
|
|
77
|
-
// Get the os uptime
|
|
78
46
|
const systemUptime = formatOsUpTime(Math.floor(os.uptime()));
|
|
79
47
|
const processUptime = formatOsUpTime(Math.floor(process.uptime()));
|
|
80
48
|
cliEmitter.emit('uptime', systemUptime, processUptime);
|
|
81
|
-
// Get the memory usage
|
|
82
49
|
const totalMememory = formatMemoryUsage(os.totalmem());
|
|
83
50
|
const freeMemory = formatMemoryUsage(os.freemem());
|
|
84
51
|
const memoryUsageRaw = process.memoryUsage();
|
|
@@ -90,12 +57,10 @@ async function startCpuMemoryCheck() {
|
|
|
90
57
|
if (memoryUsageRaw.rss > peakRss)
|
|
91
58
|
peakRss = memoryUsageRaw.rss;
|
|
92
59
|
cliEmitter.emit('memory', totalMememory, freeMemory, rss, heapTotal, heapUsed, external, arrayBuffers);
|
|
93
|
-
// Get the cpu usage
|
|
94
60
|
const currCpus = os.cpus();
|
|
95
|
-
// log.debug(`Cpus: ${JSON.stringify(currCpus)}`);
|
|
96
61
|
let cpuUsageLog;
|
|
97
62
|
if (currCpus.length !== prevCpus.length) {
|
|
98
|
-
prevCpus = currCpus;
|
|
63
|
+
prevCpus = currCpus;
|
|
99
64
|
log.debug(`Cpu check length failed, resetting previous cpus`);
|
|
100
65
|
return;
|
|
101
66
|
}
|
|
@@ -121,29 +86,20 @@ async function startCpuMemoryCheck() {
|
|
|
121
86
|
cliEmitter.emit('cpu', lastCpuUsage);
|
|
122
87
|
}
|
|
123
88
|
prevCpus = currCpus;
|
|
124
|
-
// Show the cpu and memory usage
|
|
125
89
|
log.debug(`***${YELLOW}${BRIGHT}Cpu usage:${db} ${CYAN}${cpuUsageLog.padStart(6, ' ')} %${db} ${YELLOW}${BRIGHT}Memory usage:${db} rss ${CYAN}${rss}${db} heapTotal ${CYAN}${heapTotal}${db} heapUsed ${CYAN}${heapUsed}${db} external ${external} arrayBuffers ${arrayBuffers}`);
|
|
126
90
|
};
|
|
127
91
|
interval();
|
|
128
92
|
clearInterval(memoryCheckInterval);
|
|
129
93
|
memoryCheckInterval = setInterval(interval, getIntParameter('memoryinterval') ?? 10 * 1000).unref();
|
|
130
94
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Stops the CPU and memory check interval.
|
|
133
|
-
*/
|
|
134
95
|
async function stopCpuMemoryCheck() {
|
|
135
96
|
log.debug(`***Cpu memory check stopped. Peak cpu: ${CYAN}${peakCpu.toFixed(2)} %${db}. Peak rss: ${CYAN}${formatMemoryUsage(peakRss)}${db}.`);
|
|
136
97
|
clearInterval(memoryCheckInterval);
|
|
137
98
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Starts the inspector for heap sampling.
|
|
140
|
-
* This function is called when the -inspect parameter is passed.
|
|
141
|
-
*/
|
|
142
99
|
async function startInspector() {
|
|
143
100
|
const { Session } = await import('node:inspector');
|
|
144
101
|
const { mkdirSync } = await import('node:fs');
|
|
145
102
|
log.debug(`***Starting heap sampling...`);
|
|
146
|
-
// Create the heap snapshots directory if it doesn't exist
|
|
147
103
|
mkdirSync('heap_profile', { recursive: true });
|
|
148
104
|
try {
|
|
149
105
|
session = new Session();
|
|
@@ -152,7 +108,6 @@ async function startInspector() {
|
|
|
152
108
|
session?.post('HeapProfiler.startSampling', (err) => (err ? reject(err) : resolve()));
|
|
153
109
|
});
|
|
154
110
|
log.debug(`***Started heap sampling`);
|
|
155
|
-
// Set an interval to take heap snapshots
|
|
156
111
|
const interval = getIntParameter('snapshotinterval');
|
|
157
112
|
if (interval && interval >= 30000) {
|
|
158
113
|
log.debug(`***Started heap snapshot interval of ${CYAN}${interval}${db} ms`);
|
|
@@ -170,19 +125,13 @@ async function startInspector() {
|
|
|
170
125
|
return;
|
|
171
126
|
}
|
|
172
127
|
}
|
|
173
|
-
/**
|
|
174
|
-
* Stops the heap sampling and saves the profile to a file.
|
|
175
|
-
* This function is called when the inspector is stopped.
|
|
176
|
-
*/
|
|
177
128
|
async function stopInspector() {
|
|
178
129
|
const { writeFileSync } = await import('node:fs');
|
|
179
130
|
const path = await import('node:path');
|
|
180
131
|
log.debug(`***Stopping heap sampling...`);
|
|
181
132
|
if (snapshotInterval) {
|
|
182
133
|
log.debug(`***Clearing heap snapshot interval...`);
|
|
183
|
-
// Clear the snapshot interval if it exists
|
|
184
134
|
clearInterval(snapshotInterval);
|
|
185
|
-
// Take a final heap snapshot before stopping
|
|
186
135
|
await takeHeapSnapshot();
|
|
187
136
|
}
|
|
188
137
|
if (!session) {
|
|
@@ -190,7 +139,6 @@ async function stopInspector() {
|
|
|
190
139
|
return;
|
|
191
140
|
}
|
|
192
141
|
try {
|
|
193
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
142
|
const result = await new Promise((resolve, reject) => {
|
|
195
143
|
session?.post('HeapProfiler.stopSampling', (err, result) => (err ? reject(err) : resolve(result)));
|
|
196
144
|
});
|
|
@@ -208,13 +156,6 @@ async function stopInspector() {
|
|
|
208
156
|
log.debug(`***Stopped heap sampling`);
|
|
209
157
|
}
|
|
210
158
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Takes a heap snapshot and saves it to the file name Heap-snapshot-<timestamp>.heapsnapshot.
|
|
213
|
-
* This function is called periodically based on the -snapshotinterval parameter.
|
|
214
|
-
* The -snapshotinterval parameter must at least 30000 ms.
|
|
215
|
-
* The snapshot is saved in the heap_profile directory that is created in the current working directory.
|
|
216
|
-
* The snapshot can be analyzed using vscode or Chrome DevTools or other tools that support heap snapshots.
|
|
217
|
-
*/
|
|
218
159
|
async function takeHeapSnapshot() {
|
|
219
160
|
const { writeFileSync } = await import('node:fs');
|
|
220
161
|
const path = await import('node:path');
|
|
@@ -246,10 +187,6 @@ async function takeHeapSnapshot() {
|
|
|
246
187
|
});
|
|
247
188
|
});
|
|
248
189
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Triggers a manual garbage collection.
|
|
251
|
-
* This function is working only if the process is started with --expose-gc.
|
|
252
|
-
*/
|
|
253
190
|
function triggerGarbageCollection() {
|
|
254
191
|
if (typeof global.gc === 'function') {
|
|
255
192
|
global.gc();
|
|
@@ -259,9 +196,6 @@ function triggerGarbageCollection() {
|
|
|
259
196
|
log.debug('Garbage collection is not exposed. Start Node.js with --expose-gc to enable manual GC.');
|
|
260
197
|
}
|
|
261
198
|
}
|
|
262
|
-
/**
|
|
263
|
-
* Registers event handlers for the Matterbridge instance.
|
|
264
|
-
*/
|
|
265
199
|
function registerHandlers() {
|
|
266
200
|
log.debug('Registering event handlers...');
|
|
267
201
|
if (instance)
|
|
@@ -284,52 +218,32 @@ function registerHandlers() {
|
|
|
284
218
|
instance.on('triggergarbagecollection', async () => triggerGarbageCollection());
|
|
285
219
|
log.debug('Registered event handlers');
|
|
286
220
|
}
|
|
287
|
-
/**
|
|
288
|
-
* Shuts down the Matterbridge instance and exits the process.
|
|
289
|
-
*/
|
|
290
221
|
async function shutdown() {
|
|
291
222
|
log.debug('Received shutdown event, exiting...');
|
|
292
223
|
if (hasParameter('inspect'))
|
|
293
224
|
await stopInspector();
|
|
294
225
|
await stopCpuMemoryCheck();
|
|
295
226
|
cliEmitter.emit('shutdown');
|
|
296
|
-
// eslint-disable-next-line n/no-process-exit
|
|
297
227
|
process.exit(0);
|
|
298
228
|
}
|
|
299
|
-
/**
|
|
300
|
-
*
|
|
301
|
-
*/
|
|
302
229
|
async function restart() {
|
|
303
230
|
log.debug('Received restart event, loading...');
|
|
304
231
|
instance = await Matterbridge.loadInstance(true);
|
|
305
232
|
registerHandlers();
|
|
306
233
|
}
|
|
307
|
-
/**
|
|
308
|
-
*
|
|
309
|
-
*/
|
|
310
234
|
async function update() {
|
|
311
235
|
log.debug('Received update event, updating...');
|
|
312
|
-
// TODO: Implement update logic outside of matterbridge
|
|
313
236
|
instance = await Matterbridge.loadInstance(true);
|
|
314
237
|
registerHandlers();
|
|
315
238
|
}
|
|
316
|
-
/**
|
|
317
|
-
* Starts the CPU and memory check when the -startmemorycheck parameter is passed.
|
|
318
|
-
*/
|
|
319
239
|
async function start() {
|
|
320
240
|
log.debug('Received start memory check event');
|
|
321
241
|
await startCpuMemoryCheck();
|
|
322
242
|
}
|
|
323
|
-
/**
|
|
324
|
-
* Stops the CPU and memory check when the -stopmemorycheck parameter is passed.
|
|
325
|
-
*/
|
|
326
243
|
async function stop() {
|
|
327
244
|
log.debug('Received stop memory check event');
|
|
328
245
|
await stopCpuMemoryCheck();
|
|
329
246
|
}
|
|
330
|
-
/**
|
|
331
|
-
* Main function that initializes the Matterbridge instance and starts the CLI.
|
|
332
|
-
*/
|
|
333
247
|
async function main() {
|
|
334
248
|
log.debug(`Cli main() started`);
|
|
335
249
|
await startCpuMemoryCheck();
|
|
@@ -338,7 +252,6 @@ async function main() {
|
|
|
338
252
|
log.debug(`***Matterbridge.loadInstance(true) called`);
|
|
339
253
|
instance = await Matterbridge.loadInstance(true);
|
|
340
254
|
log.debug(`***Matterbridge.loadInstance(true) exited`);
|
|
341
|
-
// Check if the instance needs to shut down from parseCommandLine()
|
|
342
255
|
if (!instance || instance.shutdown) {
|
|
343
256
|
shutdown();
|
|
344
257
|
}
|
|
@@ -347,11 +260,9 @@ async function main() {
|
|
|
347
260
|
cliEmitter.emit('ready');
|
|
348
261
|
}
|
|
349
262
|
}
|
|
350
|
-
// Run the main function
|
|
351
263
|
process.title = 'matterbridge';
|
|
352
264
|
main().catch((error) => {
|
|
353
265
|
const errorMessage = error instanceof Error ? error.message : error;
|
|
354
266
|
const errorInspect = inspect(error, { depth: 10 });
|
|
355
267
|
log.error(`Matterbridge.loadInstance() failed with error: ${errorMessage}\nstack: ${errorInspect}`);
|
|
356
268
|
});
|
|
357
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cliEmitter.js
CHANGED
|
@@ -1,36 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the CLI emitter.
|
|
3
|
-
*
|
|
4
|
-
* @file cliEmitter.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2025-07-04
|
|
7
|
-
* @version 1.0.0
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2025, 2026, 2027 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
1
|
import { EventEmitter } from 'node:events';
|
|
25
2
|
export const cliEmitter = new EventEmitter();
|
|
26
3
|
export let lastCpuUsage = 0;
|
|
27
|
-
/**
|
|
28
|
-
* Sets the last CPU usage.
|
|
29
|
-
*
|
|
30
|
-
* @param {number} val - The CPU usage percentage to set.
|
|
31
|
-
* @returns {void}
|
|
32
|
-
*/
|
|
33
4
|
export function setLastCpuUsage(val) {
|
|
34
5
|
lastCpuUsage = val;
|
|
35
6
|
}
|
|
36
|
-
//# sourceMappingURL=cliEmitter.js.map
|
package/dist/clusters/export.js
CHANGED
|
@@ -1,26 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the default config for the plugins.
|
|
3
|
-
*
|
|
4
|
-
* @file defaultConfigSchema.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2024-05-07
|
|
7
|
-
* @version 1.0.1
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
1
|
export const zigbee2mqtt_config = {
|
|
25
2
|
name: 'matterbridge-zigbee2mqtt',
|
|
26
3
|
type: 'DynamicPlatform',
|
|
@@ -79,4 +56,3 @@ export const shelly_config = {
|
|
|
79
56
|
debugWs: false,
|
|
80
57
|
unregisterOnShutdown: false,
|
|
81
58
|
};
|
|
82
|
-
//# sourceMappingURL=defaultConfigSchema.js.map
|
package/dist/deviceManager.js
CHANGED
|
@@ -1,87 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the DeviceManager class.
|
|
3
|
-
*
|
|
4
|
-
* @file devices.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2024-07-26
|
|
7
|
-
* @version 1.0.11
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
|
-
// AnsiLogger module
|
|
25
1
|
import { AnsiLogger, BLUE, er } from 'node-ansi-logger';
|
|
26
2
|
import { dev } from './matterbridgeTypes.js';
|
|
27
|
-
/**
|
|
28
|
-
* Manages Matterbridge devices.
|
|
29
|
-
*/
|
|
30
3
|
export class DeviceManager {
|
|
31
4
|
_devices = new Map();
|
|
32
5
|
matterbridge;
|
|
33
6
|
log;
|
|
34
|
-
/**
|
|
35
|
-
* Creates an instance of DeviceManager.
|
|
36
|
-
*
|
|
37
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
38
|
-
*/
|
|
39
7
|
constructor(matterbridge) {
|
|
40
8
|
this.matterbridge = matterbridge;
|
|
41
|
-
this.log = new AnsiLogger({ logName: 'DeviceManager', logTimestampFormat: 4
|
|
9
|
+
this.log = new AnsiLogger({ logName: 'DeviceManager', logTimestampFormat: 4, logLevel: matterbridge.log.logLevel });
|
|
42
10
|
this.log.debug('Matterbridge device manager starting...');
|
|
43
11
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Gets the number of devices.
|
|
46
|
-
*
|
|
47
|
-
* @returns {number} The number of devices.
|
|
48
|
-
*/
|
|
49
12
|
get length() {
|
|
50
13
|
return this._devices.size;
|
|
51
14
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Gets the number of devices.
|
|
54
|
-
*
|
|
55
|
-
* @returns {number} The number of devices.
|
|
56
|
-
*/
|
|
57
15
|
get size() {
|
|
58
16
|
return this._devices.size;
|
|
59
17
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Checks if a device with the specified unique ID exists.
|
|
62
|
-
*
|
|
63
|
-
* @param {string} uniqueId - The unique ID of the device.
|
|
64
|
-
* @returns {boolean} True if the device exists, false otherwise.
|
|
65
|
-
*/
|
|
66
18
|
has(uniqueId) {
|
|
67
19
|
return this._devices.has(uniqueId);
|
|
68
20
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Gets a device by its unique ID.
|
|
71
|
-
*
|
|
72
|
-
* @param {string} uniqueId - The unique ID of the device.
|
|
73
|
-
* @returns {MatterbridgeEndpoint | undefined} The device, or undefined if not found.
|
|
74
|
-
*/
|
|
75
21
|
get(uniqueId) {
|
|
76
22
|
return this._devices.get(uniqueId);
|
|
77
23
|
}
|
|
78
|
-
/**
|
|
79
|
-
* Adds a device to the manager.
|
|
80
|
-
*
|
|
81
|
-
* @param {MatterbridgeEndpoint} device - The device to add.
|
|
82
|
-
* @returns {MatterbridgeEndpoint} The added device.
|
|
83
|
-
* @throws {Error} If the device does not have a unique ID.
|
|
84
|
-
*/
|
|
85
24
|
set(device) {
|
|
86
25
|
if (!device.uniqueId)
|
|
87
26
|
throw new Error(`The device ${dev}${device.deviceName}${er} has not been initialized: uniqueId is required`);
|
|
@@ -90,13 +29,6 @@ export class DeviceManager {
|
|
|
90
29
|
this._devices.set(device.uniqueId, device);
|
|
91
30
|
return device;
|
|
92
31
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Removes a device from the manager.
|
|
95
|
-
*
|
|
96
|
-
* @param {MatterbridgeEndpoint} device - The device to remove.
|
|
97
|
-
* @returns {boolean} True if the device was removed, false otherwise.
|
|
98
|
-
* @throws {Error} If the device does not have a unique ID.
|
|
99
|
-
*/
|
|
100
32
|
remove(device) {
|
|
101
33
|
if (!device.uniqueId)
|
|
102
34
|
throw new Error(`The device ${dev}${device.deviceName}${er} has not been initialized: uniqueId is required`);
|
|
@@ -104,34 +36,15 @@ export class DeviceManager {
|
|
|
104
36
|
this.log.error(`The device ${dev}${device.deviceName}${er} with uniqueId ${BLUE}${device.uniqueId}${er} serialNumber ${BLUE}${device.serialNumber}${er} is not registered in the device manager`);
|
|
105
37
|
return this._devices.delete(device.uniqueId);
|
|
106
38
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Clears all devices from the manager.
|
|
109
|
-
*/
|
|
110
39
|
clear() {
|
|
111
40
|
this._devices.clear();
|
|
112
41
|
}
|
|
113
|
-
/**
|
|
114
|
-
* Gets an array of all devices.
|
|
115
|
-
*
|
|
116
|
-
* @returns {MatterbridgeEndpoint[]} An array of all devices.
|
|
117
|
-
*/
|
|
118
42
|
array() {
|
|
119
43
|
return Array.from(this._devices.values());
|
|
120
44
|
}
|
|
121
|
-
/**
|
|
122
|
-
* Iterates over all devices.
|
|
123
|
-
*
|
|
124
|
-
* @returns {IterableIterator<MatterbridgeEndpoint>} An iterator for the devices.
|
|
125
|
-
*/
|
|
126
45
|
[Symbol.iterator]() {
|
|
127
46
|
return this._devices.values();
|
|
128
47
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Asynchronously iterates over each device and calls the provided callback function.
|
|
131
|
-
*
|
|
132
|
-
* @param {(device: MatterbridgeEndpoint) => Promise<void>} callback - The callback function to call with each device.
|
|
133
|
-
* @returns {Promise<void>} A promise that resolves when all callbacks have been called.
|
|
134
|
-
*/
|
|
135
48
|
async forEach(callback) {
|
|
136
49
|
if (this.size === 0)
|
|
137
50
|
return;
|
|
@@ -145,13 +58,7 @@ export class DeviceManager {
|
|
|
145
58
|
});
|
|
146
59
|
await Promise.all(tasks);
|
|
147
60
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Sets the log level.
|
|
150
|
-
*
|
|
151
|
-
* @param {LogLevel} logLevel - The log level to set.
|
|
152
|
-
*/
|
|
153
61
|
set logLevel(logLevel) {
|
|
154
62
|
this.log.logLevel = logLevel;
|
|
155
63
|
}
|
|
156
64
|
}
|
|
157
|
-
//# sourceMappingURL=deviceManager.js.map
|