matterbridge 1.2.14 → 1.2.15

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 CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.2.15] - 2024-05-14
6
+
7
+ ### Added
8
+
9
+ - [frontend]: Added sponsor link in Header.
10
+ - [frontend]: Added sponsor link in the plugin list.
11
+
12
+ ### Fixed
13
+
14
+ - [frontend]: Fixed the case when the latest version of Matterbridge or a plugin is not available.
15
+
16
+ <a href="https://www.buymeacoffee.com/luligugithub">
17
+ <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
18
+ </a>
19
+
20
+
5
21
  ## [1.2.14] - 2024-05-09
6
22
 
7
23
  ### Added
package/README.md CHANGED
@@ -107,6 +107,9 @@ Devices page:
107
107
  Logs page:
108
108
  ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20logs.jpg)
109
109
 
110
+ Config editor:
111
+ ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20config%20editor.jpg)
112
+
110
113
  ## Plugins
111
114
 
112
115
  ### Accessory platform example
@@ -1 +1 @@
1
- {"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matterbridge.d.ts","sourceRoot":"","sources":["../src/matterbridge.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ import path from 'path';
34
34
  import WebSocket, { WebSocketServer } from 'ws';
35
35
  import { BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster } from './BridgedDeviceBasicInformationCluster.js';
36
36
  import { CommissioningController, CommissioningServer, MatterServer } from '@project-chip/matter-node.js';
37
- import { BasicInformationCluster, BooleanStateCluster, ClusterServer, FixedLabelCluster, GeneralCommissioning, GeneralDiagnostics, GeneralDiagnosticsCluster, PowerSourceCluster, ThreadNetworkDiagnosticsCluster, getClusterNameById, } from '@project-chip/matter-node.js/cluster';
37
+ import { BasicInformationCluster, ClusterServer, FixedLabelCluster, GeneralCommissioning, GeneralDiagnostics, GeneralDiagnosticsCluster, PowerSourceCluster, ThreadNetworkDiagnosticsCluster, getClusterNameById, } from '@project-chip/matter-node.js/cluster';
38
38
  import { DeviceTypeId, VendorId } from '@project-chip/matter-node.js/datatype';
39
39
  import { Aggregator, DeviceTypes, NodeStateInformation } from '@project-chip/matter-node.js/device';
40
40
  import { Format, Level, Logger } from '@project-chip/matter-node.js/log';
@@ -181,7 +181,7 @@ export class Matterbridge extends EventEmitter {
181
181
  this.log.debug(`Creating commissioning server for ${plg}Matterbridge${db}`);
182
182
  this.commissioningServer = await this.createCommisioningServer(this.matterbridgeContext, 'Matterbridge');
183
183
  this.log.debug(`Creating matter aggregator for ${plg}Matterbridge${db}`);
184
- this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext);
184
+ this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext, 'Matterbridge');
185
185
  this.log.debug('Adding matterbridge aggregator to commissioning server');
186
186
  this.commissioningServer.addDevice(this.matterAggregator);
187
187
  this.log.debug('Adding matterbridge commissioning server to matter server');
@@ -1038,93 +1038,85 @@ export class Matterbridge extends EventEmitter {
1038
1038
  this.mattercontrollerContext = undefined;
1039
1039
  }
1040
1040
  async testStartMatterBridge() {
1041
- // Plugins are loaded by loadPlugin on startup and plugin.loaded is set to true
1042
- // Plugins are started and configured by callback when Matterbridge is commissioned
1041
+ /*
1043
1042
  if (!this.storageManager) {
1044
- this.log.error('No storage manager initialized');
1045
- await this.cleanup('No storage manager initialized');
1046
- return;
1043
+ this.log.error('No storage manager initialized');
1044
+ await this.cleanup('No storage manager initialized');
1045
+ return;
1047
1046
  }
1048
1047
  this.log.debug('Starting matterbridge in mode', this.bridgeMode);
1049
1048
  this.matterServer = this.createMatterServer(this.storageManager);
1049
+
1050
1050
  this.log.debug('***Starting startMatterbridge interval for Matterbridge');
1051
1051
  let failCount = 0;
1052
1052
  const startInterval = setInterval(async () => {
1053
- for (const plugin of this.registeredPlugins) {
1054
- if (!plugin.enabled)
1055
- continue;
1056
- if (!plugin.loaded) {
1057
- this.log.info(`***Waiting (failSafeCount=${failCount}/30) in startMatterbridge interval for plugin ${plg}${plugin.name}${db} loaded: ${plugin.loaded}...`);
1058
- failCount++;
1059
- if (failCount > 30) {
1060
- this.log.error(`***Failed to load plugin ${plg}${plugin.name}${er}`);
1061
- plugin.error = true;
1062
- }
1063
- else {
1064
- return;
1065
- }
1066
- }
1067
- }
1068
- clearInterval(startInterval);
1069
- this.log.debug('***Cleared startMatterbridge interval for Matterbridge');
1070
- this.log.debug(`Creating commissioning server context for ${plg}Matterbridge${db}`);
1071
- this.matterbridgeContext = await this.createCommissioningServerContext('Matterbridge', 'Matterbridge', DeviceTypes.AGGREGATOR.code, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Aggregator');
1072
- if (!this.matterbridgeContext) {
1073
- this.log.error(`Error creating storage context for ${plg}Matterbridge${er}`);
1074
- return;
1075
- }
1076
- if (!this.nodeContext) {
1077
- this.log.error(`Node storage context undefined for ${plg}Matterbridge${er}`);
1053
+ for (const plugin of this.registeredPlugins) {
1054
+ if (!plugin.enabled) continue;
1055
+ if (!plugin.loaded) {
1056
+ this.log.info(`***Waiting (failSafeCount=${failCount}/30) in startMatterbridge interval for plugin ${plg}${plugin.name}${db} loaded: ${plugin.loaded}...`);
1057
+ failCount++;
1058
+ if (failCount > 30) {
1059
+ this.log.error(`***Failed to load plugin ${plg}${plugin.name}${er}`);
1060
+ plugin.error = true;
1061
+ } else {
1078
1062
  return;
1063
+ }
1079
1064
  }
1080
- await this.matterbridgeContext.set('softwareVersion', 1);
1081
- await this.matterbridgeContext.set('softwareVersionString', this.matterbridgeVersion);
1082
- this.log.debug(`Creating commissioning server for ${plg}Matterbridge${db}`);
1083
- this.commissioningServer = await this.createCommisioningServer(this.matterbridgeContext, 'Matterbridge');
1084
- this.log.debug(`Creating matter aggregator for ${plg}Matterbridge${db}`);
1085
- this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext);
1086
- this.log.debug('Adding matterbridge aggregator to commissioning server');
1087
- this.commissioningServer.addDevice(this.matterAggregator);
1088
- const device = new MatterbridgeDevice(DeviceTypes.CONTACT_SENSOR);
1089
- device.createDefaultIdentifyClusterServer();
1090
- //device.createDefaultBasicInformationClusterServer('Boolean test', '0x89930475', 0x8000, 'Matterbridge', 77, 'Boolean');
1091
- device.createDefaultBridgedDeviceBasicInformationClusterServer('Boolean test', '0x89930475', 0x8000, 'Matterbridge', 'Boolean');
1092
- device.createDefaultBooleanStateClusterServer(true);
1093
- device.createDefaultPowerSourceReplaceableBatteryClusterServer(75);
1094
- device.createDefaultPowerSourceConfigurationClusterServer(1);
1095
- //this.commissioningServer.addDevice(device);
1096
- //this.matterAggregator.addBridgedDevice(device);
1097
- this.log.debug('Adding matterbridge commissioning server to matter server');
1098
- await this.matterServer?.addCommissioningServer(this.commissioningServer, { uniqueStorageKey: 'Matterbridge' });
1099
- this.log.debug(`Setting reachability to true for ${plg}Matterbridge${db}`);
1100
- this.commissioningServer.setReachability(true);
1101
- this.log.debug('Starting matter server...');
1102
- await this.startMatterServer();
1103
- this.log.info('Matter server started');
1104
- await this.showCommissioningQRCode(this.commissioningServer, this.matterbridgeContext, this.nodeContext, 'Matterbridge');
1105
- //2024-03-31 21:54:12.065 DEBUG InteractionServer Received subscribe request from udp://fe80::14b6:bb16:5d3a:1293%9:51251 on session secure/48170 (keepSubscriptions=true, isFabricFiltered=false)
1106
- //2024-03-31 21:54:12.066 DEBUG InteractionServer Subscribe to attributes:*/*/*, events:!*/*/*
1107
- /*
1108
- 2024-03-31 21:52:22.669 DEBUG SubscriptionHandler Sending subscription update message for ID 2529153003 with 1 attributes and 1 events
1109
- 2024-03-31 21:52:22.669 DEBUG MessageExchange New exchange protocol: 1 id: 30278 session: secure/24489 peerSessionId: 2131 active threshold ms: 4000 active interval ms: 300 idle interval ms: 300 retries: 5
1110
- 2024-03-31 21:52:22.669 DEBUG SubscriptionHandler Sending subscription changes for ID 2529153003: MA-contactsensor(0x3b)/BooleanState(0x45)/stateValue(0x0)=true (1805472651)
1111
- 2024-03-31 21:52:22.670 DEBUG InteractionMessenger Sending DataReport chunk with 1 attributes and 1 events: 85 bytes
1112
- */
1113
- setTimeout(() => {
1114
- this.matterAggregator?.addBridgedDevice(device);
1115
- this.log.info('Added device to aggregator');
1116
- }, 30 * 1000);
1117
- setInterval(() => {
1118
- const cluster = device.getClusterServer(BooleanStateCluster);
1119
- if (!cluster)
1120
- return;
1121
- const contact = cluster.getStateValueAttribute();
1122
- cluster.setStateValueAttribute(!contact);
1123
- if (cluster.isEventSupportedByName('stateChange'))
1124
- cluster.triggerStateChangeEvent({ stateValue: !contact });
1125
- this.log.info('Set attribute and event for BooleanStateCluster to', !contact);
1126
- }, 60 * 1000);
1065
+ }
1066
+ clearInterval(startInterval);
1067
+ this.log.debug('***Cleared startMatterbridge interval for Matterbridge');
1068
+
1069
+ this.log.debug(`Creating commissioning server context for ${plg}Matterbridge${db}`);
1070
+ this.matterbridgeContext = await this.createCommissioningServerContext('Matterbridge', 'Matterbridge', DeviceTypes.AGGREGATOR.code, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Aggregator');
1071
+ if (!this.matterbridgeContext) {
1072
+ this.log.error(`Error creating storage context for ${plg}Matterbridge${er}`);
1073
+ return;
1074
+ }
1075
+ if (!this.nodeContext) {
1076
+ this.log.error(`Node storage context undefined for ${plg}Matterbridge${er}`);
1077
+ return;
1078
+ }
1079
+ await this.matterbridgeContext.set('softwareVersion', 1);
1080
+ await this.matterbridgeContext.set('softwareVersionString', this.matterbridgeVersion);
1081
+ this.log.debug(`Creating commissioning server for ${plg}Matterbridge${db}`);
1082
+ this.commissioningServer = await this.createCommisioningServer(this.matterbridgeContext, 'Matterbridge');
1083
+
1084
+ this.log.debug(`Creating matter aggregator for ${plg}Matterbridge${db}`);
1085
+ this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext, 'Matterbridge');
1086
+ this.log.debug('Adding matterbridge aggregator to commissioning server');
1087
+ this.commissioningServer.addDevice(this.matterAggregator);
1088
+
1089
+ const device = new MatterbridgeDevice(DeviceTypes.CONTACT_SENSOR);
1090
+ device.createDefaultIdentifyClusterServer();
1091
+ device.createDefaultBridgedDeviceBasicInformationClusterServer('Boolean test', '0x89930475', 0x8000, 'Matterbridge', 'Boolean');
1092
+ device.createDefaultBooleanStateClusterServer(true);
1093
+ device.createDefaultPowerSourceReplaceableBatteryClusterServer(75);
1094
+ device.createDefaultPowerSourceConfigurationClusterServer(1);
1095
+
1096
+ this.log.debug('Adding matterbridge commissioning server to matter server');
1097
+ await this.matterServer?.addCommissioningServer(this.commissioningServer, { uniqueStorageKey: 'Matterbridge' });
1098
+ this.log.debug(`Setting reachability to true for ${plg}Matterbridge${db}`);
1099
+ this.commissioningServer.setReachability(true);
1100
+ this.log.debug('Starting matter server...');
1101
+ await this.startMatterServer();
1102
+ this.log.info('Matter server started');
1103
+ await this.showCommissioningQRCode(this.commissioningServer, this.matterbridgeContext, this.nodeContext, 'Matterbridge');
1104
+
1105
+ setTimeout(() => {
1106
+ this.matterAggregator?.addBridgedDevice(device);
1107
+ this.log.info('Added device to aggregator');
1108
+ }, 30 * 1000);
1109
+
1110
+ setInterval(() => {
1111
+ const cluster = device.getClusterServer(BooleanStateCluster);
1112
+ if (!cluster) return;
1113
+ const contact = cluster.getStateValueAttribute();
1114
+ cluster.setStateValueAttribute(!contact);
1115
+ if (cluster.isEventSupportedByName('stateChange')) cluster.triggerStateChangeEvent!({ stateValue: !contact });
1116
+ this.log.info('Set attribute and event for BooleanStateCluster to', !contact);
1117
+ }, 60 * 1000);
1127
1118
  }, 1000);
1119
+ */
1128
1120
  }
1129
1121
  /**
1130
1122
  * Loads the schema for a plugin.
@@ -1675,7 +1667,7 @@ export class Matterbridge extends EventEmitter {
1675
1667
  this.log.debug(`Creating commissioning server for ${plg}Matterbridge${db}`);
1676
1668
  this.commissioningServer = await this.createCommisioningServer(this.matterbridgeContext, 'Matterbridge');
1677
1669
  this.log.debug(`Creating matter aggregator for ${plg}Matterbridge${db}`);
1678
- this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext);
1670
+ this.matterAggregator = await this.createMatterAggregator(this.matterbridgeContext, 'Matterbridge');
1679
1671
  this.log.debug('Adding matterbridge aggregator to commissioning server');
1680
1672
  this.commissioningServer.addDevice(this.matterAggregator);
1681
1673
  this.log.debug('Adding matterbridge commissioning server to matter server');
@@ -1739,7 +1731,7 @@ export class Matterbridge extends EventEmitter {
1739
1731
  this.log.debug(`Creating commissioning server for ${plg}${plugin.name}${db}`);
1740
1732
  plugin.commissioningServer = await this.createCommisioningServer(plugin.storageContext, plugin.name);
1741
1733
  this.log.debug(`Creating aggregator for plugin ${plg}${plugin.name}${db}`);
1742
- plugin.aggregator = await this.createMatterAggregator(plugin.storageContext); // Generate serialNumber and uniqueId
1734
+ plugin.aggregator = await this.createMatterAggregator(plugin.storageContext, plugin.name); // Generate serialNumber and uniqueId
1743
1735
  this.log.debug(`Adding matter aggregator to commissioning server for plugin ${plg}${plugin.name}${db}`);
1744
1736
  plugin.commissioningServer.addDevice(plugin.aggregator);
1745
1737
  this.log.debug(`Adding commissioning server to matter server for plugin ${plg}${plugin.name}${db}`);
@@ -2228,10 +2220,13 @@ export class Matterbridge extends EventEmitter {
2228
2220
  * @param {StorageContext} context - The storage context.
2229
2221
  * @returns {Aggregator} - The created Matter Aggregator.
2230
2222
  */
2231
- async createMatterAggregator(context) {
2223
+ async createMatterAggregator(context, pluginName) {
2232
2224
  const random = 'AG' + CryptoNode.getRandomData(8).toHex();
2233
2225
  await context.set('aggregatorSerialNumber', await context.get('aggregatorSerialNumber', random));
2234
2226
  await context.set('aggregatorUniqueId', await context.get('aggregatorUniqueId', random));
2227
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with uniqueId ${await context.get('aggregatorUniqueId')} serialNumber ${await context.get('aggregatorSerialNumber')}`);
2228
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with softwareVersion ${await context.get('softwareVersion', 1)} softwareVersionString ${await context.get('softwareVersionString', '1.0.0')}`);
2229
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with hardwareVersion ${await context.get('hardwareVersion', 1)} hardwareVersionString ${await context.get('hardwareVersionString', '1.0.0')}`);
2235
2230
  const matterAggregator = new Aggregator();
2236
2231
  matterAggregator.addClusterServer(ClusterServer(BasicInformationCluster, {
2237
2232
  dataModelRevision: 1,