matterbridge 2.1.1-dev.2 → 2.1.2-dev.2
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 +18 -2
- package/dist/deviceManager.js +2 -3
- package/dist/frontend.js +27 -16
- package/dist/matter/export.js +1 -0
- package/dist/matterbridge.js +4 -4
- package/dist/matterbridgePlatform.js +6 -6
- package/dist/pluginManager.js +2 -3
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -31,11 +31,27 @@ matterbridge-zigbee2mqtt v. 2.4.4
|
|
|
31
31
|
matterbridge-somfy-tahoma v. 1.2.3
|
|
32
32
|
matterbridge-hass v. 0.0.8
|
|
33
33
|
|
|
34
|
-
## [2.1.
|
|
34
|
+
## [2.1.2] - 2025-02-03
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- [frotnend]: Add rss and heap to SystemInformation.
|
|
39
|
+
- [memorydump]: Add cpu to memoryDump.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- [frontend]: Fixed update matterbridge.
|
|
44
|
+
|
|
45
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
46
|
+
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
|
47
|
+
</a>
|
|
48
|
+
|
|
49
|
+
## [2.1.1] - 2025-02-02
|
|
35
50
|
|
|
36
51
|
### Fixed
|
|
37
52
|
|
|
38
|
-
- [matter.js]: Fix
|
|
53
|
+
- [matter.js]: Fix close server nodes.
|
|
54
|
+
|
|
39
55
|
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
40
56
|
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
|
41
57
|
</a>
|
package/dist/deviceManager.js
CHANGED
|
@@ -48,6 +48,8 @@ export class DeviceManager {
|
|
|
48
48
|
return this._devices.values();
|
|
49
49
|
}
|
|
50
50
|
async forEach(callback) {
|
|
51
|
+
if (this.size === 0)
|
|
52
|
+
return;
|
|
51
53
|
const tasks = Array.from(this._devices.values()).map(async (device) => {
|
|
52
54
|
try {
|
|
53
55
|
await callback(device);
|
|
@@ -58,9 +60,6 @@ export class DeviceManager {
|
|
|
58
60
|
});
|
|
59
61
|
await Promise.all(tasks);
|
|
60
62
|
}
|
|
61
|
-
get logLevel() {
|
|
62
|
-
return this.log.logLevel;
|
|
63
|
-
}
|
|
64
63
|
set logLevel(logLevel) {
|
|
65
64
|
this.log.logLevel = logLevel;
|
|
66
65
|
}
|
package/dist/frontend.js
CHANGED
|
@@ -22,6 +22,7 @@ export class Frontend {
|
|
|
22
22
|
httpServer;
|
|
23
23
|
httpsServer;
|
|
24
24
|
webSocketServer;
|
|
25
|
+
prevCpus = os.cpus();
|
|
25
26
|
memoryData = [];
|
|
26
27
|
memoryInterval;
|
|
27
28
|
memoryTimeout;
|
|
@@ -162,7 +163,7 @@ export class Frontend {
|
|
|
162
163
|
this.log.error(`WebSocketServer error: ${error}`);
|
|
163
164
|
});
|
|
164
165
|
if (hasParameter('memorydump')) {
|
|
165
|
-
this.
|
|
166
|
+
this.startCpuMemoryDump();
|
|
166
167
|
}
|
|
167
168
|
this.expressApp.post('/api/login', express.json(), async (req, res) => {
|
|
168
169
|
const { password } = req.body;
|
|
@@ -630,14 +631,6 @@ export class Frontend {
|
|
|
630
631
|
return;
|
|
631
632
|
}
|
|
632
633
|
if (command === 'update') {
|
|
633
|
-
this.log.info('Updating matterbridge...');
|
|
634
|
-
try {
|
|
635
|
-
await this.matterbridge.spawnCommand('npm', ['install', '-g', 'matterbridge', '--omit=dev', '--verbose']);
|
|
636
|
-
this.log.info('Matterbridge has been updated. Full restart required.');
|
|
637
|
-
}
|
|
638
|
-
catch (error) {
|
|
639
|
-
this.log.error('Error updating matterbridge');
|
|
640
|
-
}
|
|
641
634
|
await this.matterbridge.updateProcess();
|
|
642
635
|
this.wssSendRestartRequired();
|
|
643
636
|
res.json({ message: 'Command received' });
|
|
@@ -786,7 +779,7 @@ export class Frontend {
|
|
|
786
779
|
this.webSocketServer = undefined;
|
|
787
780
|
}
|
|
788
781
|
if (hasParameter('memorydump')) {
|
|
789
|
-
this.
|
|
782
|
+
this.stopCpuMemoryDump();
|
|
790
783
|
}
|
|
791
784
|
}
|
|
792
785
|
formatMemoryUsage = (bytes) => {
|
|
@@ -794,12 +787,26 @@ export class Frontend {
|
|
|
794
787
|
const mb = kb / 1024;
|
|
795
788
|
return mb >= 1 ? `${mb.toFixed(2)} MB` : `${kb.toFixed(2)} KB`;
|
|
796
789
|
};
|
|
797
|
-
|
|
790
|
+
startCpuMemoryDump() {
|
|
798
791
|
clearInterval(this.memoryInterval);
|
|
799
792
|
clearTimeout(this.memoryTimeout);
|
|
800
793
|
const interval = () => {
|
|
794
|
+
const currCpus = os.cpus();
|
|
795
|
+
if (currCpus.length !== this.prevCpus.length) {
|
|
796
|
+
this.prevCpus = currCpus;
|
|
797
|
+
}
|
|
798
|
+
let totalIdle = 0, totalTick = 0;
|
|
799
|
+
this.prevCpus.forEach((prevCpu, i) => {
|
|
800
|
+
const currCpu = currCpus[i];
|
|
801
|
+
const idleDiff = currCpu.times.idle - prevCpu.times.idle;
|
|
802
|
+
const totalDiff = Object.keys(currCpu.times).reduce((acc, key) => acc + (currCpu.times[key] - prevCpu.times[key]), 0);
|
|
803
|
+
totalIdle += idleDiff;
|
|
804
|
+
totalTick += totalDiff;
|
|
805
|
+
});
|
|
806
|
+
const cpuUsage = (100 - (totalIdle / totalTick) * 100).toFixed(2);
|
|
807
|
+
this.prevCpus = currCpus;
|
|
801
808
|
const memoryUsageRaw = process.memoryUsage();
|
|
802
|
-
this.memoryData.push(memoryUsageRaw);
|
|
809
|
+
this.memoryData.push({ ...memoryUsageRaw, cpu: cpuUsage });
|
|
803
810
|
const memoryUsage = {
|
|
804
811
|
rss: this.formatMemoryUsage(memoryUsageRaw.rss),
|
|
805
812
|
heapTotal: this.formatMemoryUsage(memoryUsageRaw.heapTotal),
|
|
@@ -807,17 +814,17 @@ export class Frontend {
|
|
|
807
814
|
external: this.formatMemoryUsage(memoryUsageRaw.external),
|
|
808
815
|
arrayBuffers: this.formatMemoryUsage(memoryUsageRaw.arrayBuffers),
|
|
809
816
|
};
|
|
810
|
-
this.log.debug(`***Memory usage rss ${CYAN}${memoryUsage.rss}${db} heapTotal ${CYAN}${memoryUsage.heapTotal}${db} heapUsed ${CYAN}${memoryUsage.heapUsed}${db} external ${memoryUsage.external} arrayBuffers ${memoryUsage.arrayBuffers}`);
|
|
817
|
+
this.log.debug(`***Cpu usage ${CYAN}${cpuUsage.padStart(6, ' ')} %${db} - Memory usage rss ${CYAN}${memoryUsage.rss}${db} heapTotal ${CYAN}${memoryUsage.heapTotal}${db} heapUsed ${CYAN}${memoryUsage.heapUsed}${db} external ${memoryUsage.external} arrayBuffers ${memoryUsage.arrayBuffers}`);
|
|
811
818
|
};
|
|
812
819
|
interval();
|
|
813
820
|
this.memoryInterval = setInterval(interval, getIntParameter('memorydump') ?? 1000);
|
|
814
821
|
this.memoryInterval.unref();
|
|
815
822
|
this.memoryTimeout = setTimeout(() => {
|
|
816
|
-
this.
|
|
823
|
+
this.stopCpuMemoryDump();
|
|
817
824
|
}, 360000);
|
|
818
825
|
this.memoryTimeout.unref();
|
|
819
826
|
}
|
|
820
|
-
|
|
827
|
+
stopCpuMemoryDump() {
|
|
821
828
|
clearInterval(this.memoryInterval);
|
|
822
829
|
this.memoryInterval = undefined;
|
|
823
830
|
clearTimeout(this.memoryTimeout);
|
|
@@ -830,10 +837,14 @@ export class Frontend {
|
|
|
830
837
|
external: this.formatMemoryUsage(memory.external),
|
|
831
838
|
arrayBuffers: this.formatMemoryUsage(memory.arrayBuffers),
|
|
832
839
|
};
|
|
833
|
-
console.log(`${YELLOW}Memory usage${db} rss ${CYAN}${memoryUsage.rss}${db} heapTotal ${CYAN}${memoryUsage.heapTotal}${db} heapUsed ${CYAN}${memoryUsage.heapUsed}${db} external ${memoryUsage.external} arrayBuffers ${memoryUsage.arrayBuffers}${rs}`);
|
|
840
|
+
console.log(`${YELLOW}Cpu usage${db} ${CYAN}${memory.cpu.padStart(6, ' ')} %${db} - ${YELLOW}Memory usage${db} rss ${CYAN}${memoryUsage.rss}${db} heapTotal ${CYAN}${memoryUsage.heapTotal}${db} heapUsed ${CYAN}${memoryUsage.heapUsed}${db} external ${memoryUsage.external} arrayBuffers ${memoryUsage.arrayBuffers}${rs}`);
|
|
834
841
|
}
|
|
842
|
+
this.memoryData = [];
|
|
843
|
+
this.prevCpus = [];
|
|
835
844
|
}
|
|
836
845
|
async getApiSettings() {
|
|
846
|
+
this.matterbridge.systemInformation.rss = this.formatMemoryUsage(process.memoryUsage().rss);
|
|
847
|
+
this.matterbridge.systemInformation.heap = this.formatMemoryUsage(process.memoryUsage().heapUsed) + ' / ' + this.formatMemoryUsage(process.memoryUsage().heapTotal);
|
|
837
848
|
this.matterbridge.matterbridgeInformation.bridgeMode = this.matterbridge.bridgeMode;
|
|
838
849
|
this.matterbridge.matterbridgeInformation.restartMode = this.matterbridge.restartMode;
|
|
839
850
|
this.matterbridge.matterbridgeInformation.loggerLevel = this.matterbridge.log.logLevel;
|
package/dist/matter/export.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from '@matter/main';
|
|
2
2
|
export { SemanticNamespace, ClosureTag, CompassDirectionTag, CompassLocationTag, DirectionTag, ElectricalMeasurementTag, LaundryTag, LevelTag, LocationTag, NumberTag, PositionTag, PowerSourceTag, RefrigeratorTag, RoomAirConditionerTag, SwitchesTag, } from '@matter/main';
|
|
3
3
|
export { AttributeElement, ClusterElement, ClusterModel, CommandElement, EventElement, FieldElement } from '@matter/main/model';
|
|
4
|
+
export { logEndpoint, MdnsService } from '@matter/main/protocol';
|
package/dist/matterbridge.js
CHANGED
|
@@ -35,6 +35,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
35
35
|
totalMemory: '',
|
|
36
36
|
freeMemory: '',
|
|
37
37
|
systemUptime: '',
|
|
38
|
+
rss: '',
|
|
39
|
+
heap: '',
|
|
38
40
|
};
|
|
39
41
|
matterbridgeInformation = {
|
|
40
42
|
homeDirectory: '',
|
|
@@ -995,12 +997,11 @@ export class Matterbridge extends EventEmitter {
|
|
|
995
997
|
}
|
|
996
998
|
}
|
|
997
999
|
this.frontend.stop();
|
|
998
|
-
this.log.
|
|
1000
|
+
this.log.notice(`Stopping matter server nodes in ${this.bridgeMode} mode...`);
|
|
999
1001
|
if (this.bridgeMode === 'bridge') {
|
|
1000
1002
|
if (this.serverNode) {
|
|
1001
1003
|
await this.stopServerNode(this.serverNode);
|
|
1002
1004
|
this.serverNode = undefined;
|
|
1003
|
-
this.log.info(`Stopped matter server node for Matterbridge`);
|
|
1004
1005
|
}
|
|
1005
1006
|
}
|
|
1006
1007
|
if (this.bridgeMode === 'childbridge') {
|
|
@@ -1008,11 +1009,10 @@ export class Matterbridge extends EventEmitter {
|
|
|
1008
1009
|
if (plugin.serverNode) {
|
|
1009
1010
|
await this.stopServerNode(plugin.serverNode);
|
|
1010
1011
|
plugin.serverNode = undefined;
|
|
1011
|
-
this.log.info(`Stopped matter server node for ${plugin.name}`);
|
|
1012
1012
|
}
|
|
1013
1013
|
}
|
|
1014
1014
|
}
|
|
1015
|
-
this.log.
|
|
1015
|
+
this.log.notice('Stopped matter server nodes');
|
|
1016
1016
|
await this.stopMatterStorage();
|
|
1017
1017
|
try {
|
|
1018
1018
|
Logger.removeLogger('matterfilelogger');
|
|
@@ -83,10 +83,10 @@ export class MatterbridgePlatform {
|
|
|
83
83
|
return false;
|
|
84
84
|
return true;
|
|
85
85
|
}
|
|
86
|
-
validateDevice(device, log = true) {
|
|
87
|
-
return this.validateDeviceWhiteBlackList(device, log);
|
|
88
|
-
}
|
|
89
86
|
validateDeviceWhiteBlackList(device, log = true) {
|
|
87
|
+
return this.validateDevice(device, log);
|
|
88
|
+
}
|
|
89
|
+
validateDevice(device, log = true) {
|
|
90
90
|
if (!Array.isArray(device))
|
|
91
91
|
device = [device];
|
|
92
92
|
let blackListBlocked = 0;
|
|
@@ -115,10 +115,10 @@ export class MatterbridgePlatform {
|
|
|
115
115
|
this.log.info(`Skipping device ${CYAN}${device.join(', ')}${nf} because not in whitelist`);
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
|
-
validateEntity(device, entity, log = true) {
|
|
119
|
-
return this.validateEntityBlackList(device, entity, log);
|
|
120
|
-
}
|
|
121
118
|
validateEntityBlackList(device, entity, log = true) {
|
|
119
|
+
return this.validateEntity(device, entity, log);
|
|
120
|
+
}
|
|
121
|
+
validateEntity(device, entity, log = true) {
|
|
122
122
|
if (isValidArray(this.config.entityBlackList, 1) && this.config.entityBlackList.find((e) => e === entity)) {
|
|
123
123
|
if (log)
|
|
124
124
|
this.log.info(`Skipping entity ${CYAN}${entity}${nf} because in entityBlackList`);
|
package/dist/pluginManager.js
CHANGED
|
@@ -42,6 +42,8 @@ export class PluginManager {
|
|
|
42
42
|
return this._plugins.values();
|
|
43
43
|
}
|
|
44
44
|
async forEach(callback) {
|
|
45
|
+
if (this.size === 0)
|
|
46
|
+
return;
|
|
45
47
|
const tasks = Array.from(this._plugins.values()).map(async (plugin) => {
|
|
46
48
|
try {
|
|
47
49
|
await callback(plugin);
|
|
@@ -52,9 +54,6 @@ export class PluginManager {
|
|
|
52
54
|
});
|
|
53
55
|
await Promise.all(tasks);
|
|
54
56
|
}
|
|
55
|
-
get logLevel() {
|
|
56
|
-
return this.log.logLevel;
|
|
57
|
-
}
|
|
58
57
|
set logLevel(logLevel) {
|
|
59
58
|
this.log.logLevel = logLevel;
|
|
60
59
|
}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "matterbridge",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2-dev.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "matterbridge",
|
|
9
|
-
"version": "2.1.
|
|
9
|
+
"version": "2.1.2-dev.2",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@matter/main": "0.12.2",
|