matterbridge 1.6.1 → 1.6.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 +35 -1
- package/README-DEV.md +0 -4
- package/README-NGINX.md +63 -0
- package/README.md +4 -0
- package/dist/cli.js +15 -7
- package/dist/cli.js.map +1 -1
- package/dist/deviceManager.d.ts +1 -1
- package/dist/deviceManager.d.ts.map +1 -1
- package/dist/deviceManager.js +1 -1
- package/dist/deviceManager.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -10
- package/dist/index.js.map +1 -1
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +5 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matterbridge.d.ts +12 -7
- package/dist/matterbridge.d.ts.map +1 -1
- package/dist/matterbridge.js +113 -83
- package/dist/matterbridge.js.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -1
- package/dist/matterbridgeBehaviors.d.ts +1123 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +281 -0
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDevice.d.ts +2069 -1511
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +192 -196
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/matterbridgeDeviceTypes.d.ts +58 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +308 -0
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -1
- package/dist/matterbridgeDynamicPlatform.js.map +1 -1
- package/dist/matterbridgeEdge.d.ts +19 -20
- package/dist/matterbridgeEdge.d.ts.map +1 -1
- package/dist/matterbridgeEdge.js +505 -102
- package/dist/matterbridgeEdge.js.map +1 -1
- package/dist/matterbridgeEndpoint.d.ts +3544 -2304
- package/dist/matterbridgeEndpoint.d.ts.map +1 -1
- package/dist/matterbridgeEndpoint.js +671 -467
- package/dist/matterbridgeEndpoint.js.map +1 -1
- package/dist/matterbridgePlatform.d.ts +4 -3
- package/dist/matterbridgePlatform.d.ts.map +1 -1
- package/dist/matterbridgePlatform.js +10 -2
- package/dist/matterbridgePlatform.js.map +1 -1
- package/dist/matterbridgeTypes.d.ts +7 -8
- package/dist/matterbridgeTypes.d.ts.map +1 -1
- package/dist/matterbridgeTypes.js.map +1 -1
- package/dist/matterbridgeWebsocket.d.ts +1 -1
- package/dist/matterbridgeWebsocket.d.ts.map +1 -1
- package/dist/matterbridgeWebsocket.js +5 -3
- package/dist/matterbridgeWebsocket.js.map +1 -1
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +16 -7
- package/dist/pluginManager.js.map +1 -1
- package/dist/utils/colorUtils.js +1 -1
- package/dist/utils/colorUtils.js.map +1 -1
- package/dist/utils/utils.d.ts +21 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +49 -3
- package/dist/utils/utils.js.map +1 -1
- package/frontend/build/asset-manifest.json +62 -6
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/css/main.823e08b6.css +2 -0
- package/frontend/build/static/css/main.823e08b6.css.map +1 -0
- package/frontend/build/static/js/main.a14c87e7.js +115 -0
- package/frontend/build/static/js/{main.045d08f7.js.LICENSE.txt → main.a14c87e7.js.LICENSE.txt} +3 -3
- package/frontend/build/static/js/main.a14c87e7.js.map +1 -0
- package/frontend/build/static/media/roboto-cyrillic-300-normal.1b79538ccd585c259996.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-300-normal.5f077fd7b977d1715acf.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-400-normal.5d2930082227d172f62c.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-400-normal.a9e19870cf6c4b973427.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-500-normal.0ae2428323939af5e1ad.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-500-normal.dd7bc8a52c6c70c5a3f5.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-700-normal.3f6e1548bd5175a8c342.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-700-normal.4fdfc29a10e7d4b7c527.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.795dbc8140e3fef82983.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.80947a31d23c70204b47.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.135d076fa32aa0b4d105.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.5cec61a21cc20180fbe1.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.6de16332fda843a3dc3d.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.c0a0638f90b31d6454ba.woff +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.4750292c47fa2bc6ac1a.woff2 +0 -0
- package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.ca247189fc12d00de361.woff +0 -0
- package/frontend/build/static/media/roboto-greek-300-normal.285f3e6261d8eb20417d.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-300-normal.889beddda1c9bd9f97df.woff +0 -0
- package/frontend/build/static/media/roboto-greek-400-normal.160a791a8e4f46bca3cc.woff +0 -0
- package/frontend/build/static/media/roboto-greek-400-normal.2c32b1315be61477013a.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-500-normal.60810e07c7b0273013aa.woff +0 -0
- package/frontend/build/static/media/roboto-greek-500-normal.f95e757c5483310f9c11.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-700-normal.77dd370f2001e184ba0d.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-700-normal.df87b053fae3d7ad5f7a.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-300-normal.d6049cb54aa6fbe14c42.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-400-normal.1df4abad55796d11a0c8.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-500-normal.4a96ba31abcce0f5d52b.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-500-normal.fd28d9c008bf3af1bed7.woff +0 -0
- package/frontend/build/static/media/roboto-greek-ext-700-normal.2dd6febad11502dec6a6.woff2 +0 -0
- package/frontend/build/static/media/roboto-greek-ext-700-normal.4abdc9fff4507f17d726.woff +0 -0
- package/frontend/build/static/media/roboto-latin-300-normal.b850f1ff581ea232fac9.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-300-normal.c4bc0593c9954d79cb3a.woff +0 -0
- package/frontend/build/static/media/roboto-latin-400-normal.047a7839f69b209db815.woff +0 -0
- package/frontend/build/static/media/roboto-latin-400-normal.297d48e1b5a10c0831a9.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-500-normal.68d40d6d01c6f85d24ba.woff +0 -0
- package/frontend/build/static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-700-normal.9f6a16a7770c87b2042b.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-300-normal.14982a9e4857a93b6dce.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-300-normal.97cbc447d4a8d41a9543.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-400-normal.27da5b36b6d3a16f53f4.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-400-normal.2eeae187764baf05867d.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-500-normal.06c30711d588145a4541.woff +0 -0
- package/frontend/build/static/media/roboto-latin-ext-500-normal.9a18d7bb9ff7a6af7b32.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-700-normal.18841836e391d39e83a8.woff2 +0 -0
- package/frontend/build/static/media/roboto-latin-ext-700-normal.3c5bcdd0e69c4c3ffafe.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-300-normal.c96b16e5c05c7b7c3e89.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-300-normal.f5e7cea32756dfe7af40.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-400-normal.0dc97c66f9b542d6fa17.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-400-normal.d3f8e26d6c27de8102b6.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-500-normal.090fabef926bdc0e9b9f.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-500-normal.23b7b8a2524d2d4b637b.woff +0 -0
- package/frontend/build/static/media/roboto-vietnamese-700-normal.0a79a9fabfc32e33f360.woff2 +0 -0
- package/frontend/build/static/media/roboto-vietnamese-700-normal.35ed0597568ff6f19c16.woff +0 -0
- package/npm-shrinkwrap.json +117 -36
- package/package.json +8 -3
- package/dist/matterbridgeController.d.ts +0 -24
- package/dist/matterbridgeController.d.ts.map +0 -1
- package/dist/matterbridgeController.js +0 -386
- package/dist/matterbridgeController.js.map +0 -1
- package/frontend/build/static/css/main.1cf003ae.css +0 -2
- package/frontend/build/static/css/main.1cf003ae.css.map +0 -1
- package/frontend/build/static/js/main.045d08f7.js +0 -3
- package/frontend/build/static/js/main.045d08f7.js.map +0 -1
package/dist/matterbridge.js
CHANGED
|
@@ -25,32 +25,32 @@ import { fileURLToPath } from 'url';
|
|
|
25
25
|
import { promises as fs } from 'fs';
|
|
26
26
|
import { exec, spawn } from 'child_process';
|
|
27
27
|
import { createServer } from 'http';
|
|
28
|
-
import https from 'https';
|
|
29
28
|
import EventEmitter from 'events';
|
|
30
|
-
import express from 'express';
|
|
31
29
|
import os from 'os';
|
|
32
30
|
import path from 'path';
|
|
31
|
+
import { randomBytes } from 'crypto';
|
|
32
|
+
// Package modules
|
|
33
|
+
import https from 'https';
|
|
34
|
+
import express from 'express';
|
|
33
35
|
import WebSocket, { WebSocketServer } from 'ws';
|
|
34
36
|
// NodeStorage and AnsiLogger modules
|
|
35
37
|
import { NodeStorageManager } from 'node-persist-manager';
|
|
36
|
-
import { AnsiLogger, UNDERLINE, UNDERLINEOFF, YELLOW, db, debugStringify, stringify, BRIGHT, RESET, er, nf, rs, wr, RED, GREEN, zb,
|
|
38
|
+
import { AnsiLogger, UNDERLINE, UNDERLINEOFF, YELLOW, db, debugStringify, stringify, BRIGHT, RESET, er, nf, rs, wr, RED, GREEN, zb, CYAN, nt, idn, or, hk, BLUE } from 'node-ansi-logger';
|
|
37
39
|
// Matterbridge
|
|
38
40
|
import { MatterbridgeDevice } from './matterbridgeDevice.js';
|
|
39
|
-
import {
|
|
41
|
+
import { WS_ID_LOG, WS_ID_REFRESH_NEEDED, WS_ID_RESTART_NEEDED, wsMessageHandler } from './matterbridgeWebsocket.js';
|
|
42
|
+
import { logInterfaces, wait, waiter, createZip, copyDirectory, getParameter, getIntParameter, hasParameter } from './utils/utils.js';
|
|
40
43
|
import { PluginManager } from './pluginManager.js';
|
|
41
44
|
import { DeviceManager } from './deviceManager.js';
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import { CryptoNode } from '@project-chip/matter-node.js/crypto';
|
|
52
|
-
import { Specification } from '@project-chip/matter-node.js/model';
|
|
53
|
-
import { WS_ID_LOG, WS_ID_REFRESH_NEEDED, WS_ID_RESTART_NEEDED, wsMessageHandler } from './matterbridgeWebsocket.js';
|
|
45
|
+
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
46
|
+
// @matter
|
|
47
|
+
import { DeviceTypeId, Logger, LogLevel as MatterLogLevel, LogFormat as MatterLogFormat, VendorId, StorageManager } from '@matter/main';
|
|
48
|
+
import { BasicInformationCluster, BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster, FixedLabelCluster, GeneralCommissioning, PowerSourceCluster, SwitchCluster, ThreadNetworkDiagnosticsCluster } from '@matter/main/clusters';
|
|
49
|
+
import { getClusterNameById, ManualPairingCodeCodec, QrCodeSchema } from '@matter/main/types';
|
|
50
|
+
import { StorageBackendDisk, StorageBackendJsonFile } from '@matter/nodejs';
|
|
51
|
+
// @project-chip
|
|
52
|
+
import { CommissioningController, CommissioningServer, MatterServer } from '@project-chip/matter.js';
|
|
53
|
+
import { Aggregator, DeviceTypes, NodeStateInformation } from '@project-chip/matter.js/device';
|
|
54
54
|
// Default colors
|
|
55
55
|
const plg = '\u001B[38;5;33m';
|
|
56
56
|
const dev = '\u001B[38;5;79m';
|
|
@@ -91,9 +91,11 @@ export class Matterbridge extends EventEmitter {
|
|
|
91
91
|
matterbridgeConnected: false,
|
|
92
92
|
bridgeMode: '',
|
|
93
93
|
restartMode: '',
|
|
94
|
+
edge: hasParameter('edge'),
|
|
95
|
+
profile: getParameter('profile'),
|
|
94
96
|
loggerLevel: "info" /* LogLevel.INFO */,
|
|
95
97
|
fileLogger: false,
|
|
96
|
-
matterLoggerLevel:
|
|
98
|
+
matterLoggerLevel: MatterLogLevel.INFO,
|
|
97
99
|
matterFileLogger: false,
|
|
98
100
|
mattermdnsinterface: undefined,
|
|
99
101
|
matteripv4address: undefined,
|
|
@@ -117,6 +119,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
117
119
|
bridgeMode = '';
|
|
118
120
|
restartMode = '';
|
|
119
121
|
profile = getParameter('profile');
|
|
122
|
+
edge = hasParameter('edge');
|
|
120
123
|
log;
|
|
121
124
|
matterbrideLoggerFile = 'matterbridge' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.log';
|
|
122
125
|
matterLoggerFile = 'matter' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.log';
|
|
@@ -157,8 +160,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
157
160
|
matterAggregator;
|
|
158
161
|
commissioningServer;
|
|
159
162
|
commissioningController;
|
|
160
|
-
aggregatorVendorId = VendorId(0xfff1);
|
|
161
|
-
aggregatorProductId = 0x8000;
|
|
163
|
+
aggregatorVendorId = VendorId(getIntParameter('vendorId') ?? 0xfff1);
|
|
164
|
+
aggregatorProductId = getIntParameter('productId') ?? 0x8000;
|
|
162
165
|
static instance;
|
|
163
166
|
// We load asyncronously so is private
|
|
164
167
|
constructor() {
|
|
@@ -315,39 +318,39 @@ export class Matterbridge extends EventEmitter {
|
|
|
315
318
|
if (hasParameter('matterlogger')) {
|
|
316
319
|
const level = getParameter('matterlogger');
|
|
317
320
|
if (level === 'debug') {
|
|
318
|
-
Logger.defaultLogLevel =
|
|
321
|
+
Logger.defaultLogLevel = MatterLogLevel.DEBUG;
|
|
319
322
|
}
|
|
320
323
|
else if (level === 'info') {
|
|
321
|
-
Logger.defaultLogLevel =
|
|
324
|
+
Logger.defaultLogLevel = MatterLogLevel.INFO;
|
|
322
325
|
}
|
|
323
326
|
else if (level === 'notice') {
|
|
324
|
-
Logger.defaultLogLevel =
|
|
327
|
+
Logger.defaultLogLevel = MatterLogLevel.NOTICE;
|
|
325
328
|
}
|
|
326
329
|
else if (level === 'warn') {
|
|
327
|
-
Logger.defaultLogLevel =
|
|
330
|
+
Logger.defaultLogLevel = MatterLogLevel.WARN;
|
|
328
331
|
}
|
|
329
332
|
else if (level === 'error') {
|
|
330
|
-
Logger.defaultLogLevel =
|
|
333
|
+
Logger.defaultLogLevel = MatterLogLevel.ERROR;
|
|
331
334
|
}
|
|
332
335
|
else if (level === 'fatal') {
|
|
333
|
-
Logger.defaultLogLevel =
|
|
336
|
+
Logger.defaultLogLevel = MatterLogLevel.FATAL;
|
|
334
337
|
}
|
|
335
338
|
else {
|
|
336
339
|
this.log.warn(`Invalid matter.js logger level: ${level}. Using default level "info".`);
|
|
337
|
-
Logger.defaultLogLevel =
|
|
340
|
+
Logger.defaultLogLevel = MatterLogLevel.INFO;
|
|
338
341
|
}
|
|
339
342
|
}
|
|
340
343
|
else {
|
|
341
|
-
Logger.defaultLogLevel = await this.nodeContext.get('matterLogLevel',
|
|
344
|
+
Logger.defaultLogLevel = await this.nodeContext.get('matterLogLevel', MatterLogLevel.INFO);
|
|
342
345
|
}
|
|
343
|
-
Logger.format =
|
|
346
|
+
Logger.format = MatterLogFormat.ANSI;
|
|
344
347
|
Logger.setLogger('default', this.createMatterLogger());
|
|
345
348
|
// Create the file logger for matter.js (context: matterFileLog)
|
|
346
349
|
if (hasParameter('matterfilelogger') || (await this.nodeContext.get('matterFileLog', false))) {
|
|
347
350
|
this.matterbridgeInformation.matterFileLogger = true;
|
|
348
351
|
Logger.addLogger('matterfilelogger', await this.createMatterFileLogger(path.join(this.matterbridgeDirectory, this.matterLoggerFile), true), {
|
|
349
352
|
defaultLogLevel: Logger.defaultLogLevel,
|
|
350
|
-
logFormat:
|
|
353
|
+
logFormat: MatterLogFormat.PLAIN,
|
|
351
354
|
});
|
|
352
355
|
}
|
|
353
356
|
this.log.debug(`Matter logLevel: ${Logger.defaultLogLevel} fileLoger: ${this.matterbridgeInformation.matterFileLogger}.`);
|
|
@@ -632,6 +635,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
632
635
|
if (hasParameter('bridge') || (!hasParameter('childbridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'bridge')) {
|
|
633
636
|
this.bridgeMode = 'bridge';
|
|
634
637
|
MatterbridgeDevice.bridgeMode = 'bridge';
|
|
638
|
+
MatterbridgeEndpoint.bridgeMode = 'bridge';
|
|
635
639
|
this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
|
|
636
640
|
await this.startBridge();
|
|
637
641
|
return;
|
|
@@ -640,6 +644,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
640
644
|
if (hasParameter('childbridge') || (!hasParameter('bridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'childbridge')) {
|
|
641
645
|
this.bridgeMode = 'childbridge';
|
|
642
646
|
MatterbridgeDevice.bridgeMode = 'childbridge';
|
|
647
|
+
MatterbridgeEndpoint.bridgeMode = 'childbridge';
|
|
643
648
|
this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
|
|
644
649
|
await this.startChildbridge();
|
|
645
650
|
return;
|
|
@@ -695,12 +700,12 @@ export class Matterbridge extends EventEmitter {
|
|
|
695
700
|
process.removeAllListeners('unhandledRejection');
|
|
696
701
|
this.exceptionHandler = async (error) => {
|
|
697
702
|
this.log.fatal('Unhandled Exception detected at:', error.stack || error, rs);
|
|
698
|
-
await this.cleanup('Unhandled Exception detected, cleaning up...');
|
|
703
|
+
// await this.cleanup('Unhandled Exception detected, cleaning up...');
|
|
699
704
|
};
|
|
700
705
|
process.on('uncaughtException', this.exceptionHandler);
|
|
701
706
|
this.rejectionHandler = async (reason, promise) => {
|
|
702
707
|
this.log.fatal('Unhandled Rejection detected at:', promise, 'reason:', reason instanceof Error ? reason.stack : reason, rs);
|
|
703
|
-
await this.cleanup('Unhandled Rejection detected, cleaning up...');
|
|
708
|
+
// await this.cleanup('Unhandled Rejection detected, cleaning up...');
|
|
704
709
|
};
|
|
705
710
|
process.on('unhandledRejection', this.rejectionHandler);
|
|
706
711
|
this.log.debug(`Registering SIGINT and SIGTERM signal handlers...`);
|
|
@@ -993,22 +998,22 @@ export class Matterbridge extends EventEmitter {
|
|
|
993
998
|
const message = formattedLog.slice(65);
|
|
994
999
|
matterLogger.logName = logger;
|
|
995
1000
|
switch (_level) {
|
|
996
|
-
case
|
|
1001
|
+
case MatterLogLevel.DEBUG:
|
|
997
1002
|
matterLogger.log("debug" /* LogLevel.DEBUG */, message);
|
|
998
1003
|
break;
|
|
999
|
-
case
|
|
1004
|
+
case MatterLogLevel.INFO:
|
|
1000
1005
|
matterLogger.log("info" /* LogLevel.INFO */, message);
|
|
1001
1006
|
break;
|
|
1002
|
-
case
|
|
1007
|
+
case MatterLogLevel.NOTICE:
|
|
1003
1008
|
matterLogger.log("notice" /* LogLevel.NOTICE */, message);
|
|
1004
1009
|
break;
|
|
1005
|
-
case
|
|
1010
|
+
case MatterLogLevel.WARN:
|
|
1006
1011
|
matterLogger.log("warn" /* LogLevel.WARN */, message);
|
|
1007
1012
|
break;
|
|
1008
|
-
case
|
|
1013
|
+
case MatterLogLevel.ERROR:
|
|
1009
1014
|
matterLogger.log("error" /* LogLevel.ERROR */, message);
|
|
1010
1015
|
break;
|
|
1011
|
-
case
|
|
1016
|
+
case MatterLogLevel.FATAL:
|
|
1012
1017
|
matterLogger.log("fatal" /* LogLevel.FATAL */, message);
|
|
1013
1018
|
break;
|
|
1014
1019
|
default:
|
|
@@ -1050,22 +1055,22 @@ export class Matterbridge extends EventEmitter {
|
|
|
1050
1055
|
const logger = parts[1];
|
|
1051
1056
|
const finalMessage = parts.slice(2).join(' ') + os.EOL;
|
|
1052
1057
|
switch (_level) {
|
|
1053
|
-
case
|
|
1058
|
+
case MatterLogLevel.DEBUG:
|
|
1054
1059
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [debug] ${finalMessage}`);
|
|
1055
1060
|
break;
|
|
1056
|
-
case
|
|
1061
|
+
case MatterLogLevel.INFO:
|
|
1057
1062
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [info] ${finalMessage}`);
|
|
1058
1063
|
break;
|
|
1059
|
-
case
|
|
1064
|
+
case MatterLogLevel.NOTICE:
|
|
1060
1065
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [notice] ${finalMessage}`);
|
|
1061
1066
|
break;
|
|
1062
|
-
case
|
|
1067
|
+
case MatterLogLevel.WARN:
|
|
1063
1068
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [warn] ${finalMessage}`);
|
|
1064
1069
|
break;
|
|
1065
|
-
case
|
|
1070
|
+
case MatterLogLevel.ERROR:
|
|
1066
1071
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [error] ${finalMessage}`);
|
|
1067
1072
|
break;
|
|
1068
|
-
case
|
|
1073
|
+
case MatterLogLevel.FATAL:
|
|
1069
1074
|
await fs.appendFile(filePath, `[${timestamp}] [${logger}] [fatal] ${finalMessage}`);
|
|
1070
1075
|
break;
|
|
1071
1076
|
default:
|
|
@@ -1280,6 +1285,18 @@ export class Matterbridge extends EventEmitter {
|
|
|
1280
1285
|
this.initialized = false;
|
|
1281
1286
|
}
|
|
1282
1287
|
}
|
|
1288
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1289
|
+
async addBridgedEndpoint(pluginName, device) {
|
|
1290
|
+
// Nothing to do here
|
|
1291
|
+
}
|
|
1292
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1293
|
+
async removeBridgedEndpoint(pluginName, device) {
|
|
1294
|
+
// Nothing to do here
|
|
1295
|
+
}
|
|
1296
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1297
|
+
async removeAllBridgedEndpoints(pluginName) {
|
|
1298
|
+
// Nothing to do here
|
|
1299
|
+
}
|
|
1283
1300
|
/**
|
|
1284
1301
|
* Adds a bridged device to the Matterbridge.
|
|
1285
1302
|
* @param pluginName - The name of the plugin.
|
|
@@ -1955,39 +1972,52 @@ export class Matterbridge extends EventEmitter {
|
|
|
1955
1972
|
* @param {StorageContext} context - The storage context.
|
|
1956
1973
|
* @returns {Aggregator} - The created Matter Aggregator.
|
|
1957
1974
|
*/
|
|
1975
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1958
1976
|
async createMatterAggregator(context, pluginName) {
|
|
1959
|
-
|
|
1977
|
+
/*
|
|
1978
|
+
const random = randomBytes(8).toString('hex');
|
|
1960
1979
|
await context.set('aggregatorSerialNumber', await context.get('aggregatorSerialNumber', random));
|
|
1961
1980
|
await context.set('aggregatorUniqueId', await context.get('aggregatorUniqueId', random));
|
|
1962
|
-
|
|
1963
|
-
this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with
|
|
1964
|
-
this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with
|
|
1981
|
+
|
|
1982
|
+
this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with uniqueId ${await context.get<string>('aggregatorUniqueId')} serialNumber ${await context.get<string>('aggregatorSerialNumber')}`);
|
|
1983
|
+
this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with softwareVersion ${await context.get<number>('softwareVersion', 1)} softwareVersionString ${await context.get<string>('softwareVersionString', '1.0.0')}`);
|
|
1984
|
+
this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with hardwareVersion ${await context.get<number>('hardwareVersion', 1)} hardwareVersionString ${await context.get<string>('hardwareVersionString', '1.0.0')}`);
|
|
1985
|
+
*/
|
|
1965
1986
|
const matterAggregator = new Aggregator();
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1987
|
+
/*
|
|
1988
|
+
matterAggregator.addClusterServer(
|
|
1989
|
+
ClusterServer(
|
|
1990
|
+
BasicInformationCluster,
|
|
1991
|
+
{
|
|
1992
|
+
dataModelRevision: 1,
|
|
1993
|
+
location: 'FR',
|
|
1994
|
+
vendorId: VendorId(0xfff1),
|
|
1995
|
+
vendorName: 'Matterbridge',
|
|
1996
|
+
productId: 0x8000,
|
|
1997
|
+
productName: 'Matterbridge aggregator',
|
|
1998
|
+
productLabel: 'Matterbridge aggregator',
|
|
1999
|
+
nodeLabel: 'Matterbridge aggregator',
|
|
2000
|
+
serialNumber: await context.get<string>('aggregatorSerialNumber'),
|
|
2001
|
+
uniqueId: await context.get<string>('aggregatorUniqueId'),
|
|
2002
|
+
softwareVersion: await context.get<number>('softwareVersion', 1),
|
|
2003
|
+
softwareVersionString: await context.get<string>('softwareVersionString', '1.0.0'),
|
|
2004
|
+
hardwareVersion: await context.get<number>('hardwareVersion', 1),
|
|
2005
|
+
hardwareVersionString: await context.get<string>('hardwareVersionString', '1.0.0'),
|
|
2006
|
+
reachable: true,
|
|
2007
|
+
capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
|
|
2008
|
+
specificationVersion: Specification.SPECIFICATION_VERSION,
|
|
2009
|
+
maxPathsPerInvoke: 1,
|
|
2010
|
+
},
|
|
2011
|
+
{},
|
|
2012
|
+
{
|
|
2013
|
+
startUp: true,
|
|
2014
|
+
shutDown: true,
|
|
2015
|
+
leave: true,
|
|
2016
|
+
reachableChanged: true,
|
|
2017
|
+
},
|
|
2018
|
+
),
|
|
2019
|
+
);
|
|
2020
|
+
*/
|
|
1991
2021
|
return matterAggregator;
|
|
1992
2022
|
}
|
|
1993
2023
|
/**
|
|
@@ -2180,7 +2210,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
2180
2210
|
if (!this.storageManager)
|
|
2181
2211
|
throw new Error('No storage manager initialized');
|
|
2182
2212
|
this.log.debug(`Creating commissioning server storage context for ${plg}${pluginName}${db}`);
|
|
2183
|
-
const random =
|
|
2213
|
+
const random = randomBytes(8).toString('hex');
|
|
2184
2214
|
const storageContext = this.storageManager.createContext(pluginName);
|
|
2185
2215
|
await storageContext.set('deviceName', deviceName);
|
|
2186
2216
|
await storageContext.set('deviceType', deviceType);
|
|
@@ -3122,22 +3152,22 @@ export class Matterbridge extends EventEmitter {
|
|
|
3122
3152
|
if (command === 'setmjloglevel') {
|
|
3123
3153
|
this.log.debug('Matter.js log level:', param);
|
|
3124
3154
|
if (param === 'Debug') {
|
|
3125
|
-
Logger.defaultLogLevel =
|
|
3155
|
+
Logger.defaultLogLevel = MatterLogLevel.DEBUG;
|
|
3126
3156
|
}
|
|
3127
3157
|
else if (param === 'Info') {
|
|
3128
|
-
Logger.defaultLogLevel =
|
|
3158
|
+
Logger.defaultLogLevel = MatterLogLevel.INFO;
|
|
3129
3159
|
}
|
|
3130
3160
|
else if (param === 'Notice') {
|
|
3131
|
-
Logger.defaultLogLevel =
|
|
3161
|
+
Logger.defaultLogLevel = MatterLogLevel.NOTICE;
|
|
3132
3162
|
}
|
|
3133
3163
|
else if (param === 'Warn') {
|
|
3134
|
-
Logger.defaultLogLevel =
|
|
3164
|
+
Logger.defaultLogLevel = MatterLogLevel.WARN;
|
|
3135
3165
|
}
|
|
3136
3166
|
else if (param === 'Error') {
|
|
3137
|
-
Logger.defaultLogLevel =
|
|
3167
|
+
Logger.defaultLogLevel = MatterLogLevel.ERROR;
|
|
3138
3168
|
}
|
|
3139
3169
|
else if (param === 'Fatal') {
|
|
3140
|
-
Logger.defaultLogLevel =
|
|
3170
|
+
Logger.defaultLogLevel = MatterLogLevel.FATAL;
|
|
3141
3171
|
}
|
|
3142
3172
|
await this.nodeContext?.set('matterLogLevel', Logger.defaultLogLevel);
|
|
3143
3173
|
res.json({ message: 'Command received' });
|
|
@@ -3191,8 +3221,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
3191
3221
|
if (param === 'true') {
|
|
3192
3222
|
try {
|
|
3193
3223
|
Logger.addLogger('matterfilelogger', await this.createMatterFileLogger(path.join(this.matterbridgeDirectory, this.matterLoggerFile), true), {
|
|
3194
|
-
defaultLogLevel:
|
|
3195
|
-
logFormat:
|
|
3224
|
+
defaultLogLevel: MatterLogLevel.DEBUG,
|
|
3225
|
+
logFormat: MatterLogFormat.PLAIN,
|
|
3196
3226
|
});
|
|
3197
3227
|
}
|
|
3198
3228
|
catch (error) {
|
|
@@ -3480,8 +3510,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
3480
3510
|
await this.logNodeAndSystemInfo();
|
|
3481
3511
|
this.matterbridgeDirectory = dataPath;
|
|
3482
3512
|
// Set matter.js logger level and format
|
|
3483
|
-
Logger.defaultLogLevel =
|
|
3484
|
-
Logger.format =
|
|
3513
|
+
Logger.defaultLogLevel = MatterLogLevel.INFO;
|
|
3514
|
+
Logger.format = MatterLogFormat.ANSI;
|
|
3485
3515
|
// Start the storage and create matterbridgeContext
|
|
3486
3516
|
await this.startMatterStorage('json', path.join(this.matterbridgeDirectory, this.matterStorageName));
|
|
3487
3517
|
if (!this.storageManager)
|