matterbridge 3.0.0-edge.14 → 3.0.0-edge.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
@@ -51,12 +51,17 @@ Modified clusters:
51
51
  - [deviceTypes]: Added Robotic device type.
52
52
  - [deviceTypes]: Added Appliances device types.
53
53
  - [frontend]: Added the matterbridge aggregator serialNumber in the QRDiv.
54
+ - [frontend]: Added Power column in the Devices panel of the Home page.
55
+ - [frontend]: Added support for appliances and robot in IconView.
56
+ - [parameter]: Added getIntArrayParameter and getStringArrayParameter.
54
57
 
55
58
  ### Changed
56
59
 
57
60
  - [package]: Updated package.
58
61
  - [package]: Updated express to v5.1.0.
59
62
  - [package]: Updated dependencies.
63
+ - [frontend]: Frontend v.2.6.3.
64
+ - [frontend]: Changed icons with mdiIcons in IconView.
60
65
  - [package]: Added tsconfig.jest.json with "isolatedModules": true for ts-jest.
61
66
  - [deviceTypes]: Updated device types to Matter 1.4.
62
67
  - [clusters]: Updated cluster helpers to Matter 1.4.
@@ -71,9 +76,9 @@ Modified clusters:
71
76
  - [matter.js]: Update to 0.13.0-alpha.0-20250423-8917d1d1d.
72
77
  - [matter.js]: Update to 0.13.0-alpha.0-20250424-4760af1f3.
73
78
  - [matter.js]: Update to 0.13.0-alpha.0-20250425-94b33ff98.
79
+ - [matter.js]: Update to 0.13.0-alpha.0-20250427-e7df8aa45.
74
80
  - [help]: Updated cli help screen.
75
81
  - [logger]: Improved frontend logger cleaning.
76
- - [parameter]: Added getIntArrayParameter and getStringArrayParameter.
77
82
 
78
83
  ### Fixed
79
84
 
package/README.md CHANGED
@@ -250,6 +250,20 @@ It is the ideal companion of the official [Matterbridge Home Assistant Add-on](h
250
250
 
251
251
  Matterbridge Webhooks plugin allows you to expose any webhooks to Matter..
252
252
 
253
+ ### BTHome
254
+
255
+ <a href="https://github.com/Luligu/matterbridge-webhooks">
256
+ <img src="frontend/public/matterbridge.svg" alt="Matterbridge logo" width="100" />
257
+ </a>
258
+
259
+ Matterbridge BTHome allows you to expose any BTHome device to Matter using the native bluetooth of the host machine.
260
+
261
+ Features:
262
+
263
+ - The bluetooth works correctly on all platforms and is based on the @stoprocent fork of noble.
264
+ - The discovered BTHome devices are stored with all attributes to easily restart the plugin.
265
+ - The plugin has also a command line to test and verify the bluetooth adapter and the ble network.
266
+
253
267
  ### Accessory platform example
254
268
 
255
269
  This is an example of an accessory platform plugin.
@@ -310,6 +324,12 @@ The history works in both bridge and childbridge mode.
310
324
 
311
325
  The Eve app only shows the history when the plugins run like an AccessoryPlatform in childbridge mode (this means the plugin is paired directly).
312
326
 
327
+ ## Third-party plugins
328
+
329
+ ### [Loxone](https://github.com/andrasg/matterbridge-loxone)
330
+
331
+ A matterbridge plugin that allows connecting Loxone devices to Matter.
332
+
313
333
  ## How to install and add a plugin with the frontend (best option)
314
334
 
315
335
  Just open the frontend on the link provided in the log, select a plugin and click install.
package/dist/frontend.js CHANGED
@@ -979,6 +979,7 @@ export class Frontend {
979
979
  return '';
980
980
  };
981
981
  let attributes = '';
982
+ let supportedModes = [];
982
983
  device.forEachAttribute((clusterName, clusterId, attributeName, attributeId, attributeValue) => {
983
984
  if (typeof attributeValue === 'undefined')
984
985
  return;
@@ -996,6 +997,20 @@ export class Frontend {
996
997
  attributes += `Heat to: ${attributeValue / 100}°C `;
997
998
  if (clusterName === 'thermostat' && attributeName === 'occupiedCoolingSetpoint' && isValidNumber(attributeValue))
998
999
  attributes += `Cool to: ${attributeValue / 100}°C `;
1000
+ const modeClusters = ['modeSelect', 'rvcRunMode', 'rvcCleanMode', 'laundryWasherMode', 'ovenMode', 'microwaveOvenMode'];
1001
+ if (modeClusters.includes(clusterName) && attributeName === 'supportedModes') {
1002
+ supportedModes = attributeValue;
1003
+ }
1004
+ if (modeClusters.includes(clusterName) && attributeName === 'currentMode') {
1005
+ const supportedMode = supportedModes.find((mode) => mode.mode === attributeValue);
1006
+ if (supportedMode)
1007
+ attributes += `Mode: ${supportedMode.label} `;
1008
+ else
1009
+ attributes += `Mode: ${attributeValue} `;
1010
+ }
1011
+ const operationalStateClusters = ['operationalState', 'rvcOperationalState'];
1012
+ if (operationalStateClusters.includes(clusterName) && attributeName === 'operationalState')
1013
+ attributes += `OpState: ${attributeValue} `;
999
1014
  if (clusterName === 'pumpConfigurationAndControl' && attributeName === 'operationMode')
1000
1015
  attributes += `Mode: ${attributeValue} `;
1001
1016
  if (clusterName === 'valveConfigurationAndControl' && attributeName === 'currentState')
@@ -399,6 +399,20 @@ export function getAttributeId(endpoint, cluster, attribute) {
399
399
  else if (attribute === 'levelValue')
400
400
  return 0xa;
401
401
  }
402
+ if (endpoint.behaviors.supported[lowercaseFirstLetter(cluster)]?.schema?.type === 'OperationalState') {
403
+ if (attribute === 'phaseList')
404
+ return 0x0;
405
+ else if (attribute === 'currentPhase')
406
+ return 0x1;
407
+ else if (attribute === 'countdownTime')
408
+ return 0x2;
409
+ else if (attribute === 'operationalStateList')
410
+ return 0x3;
411
+ else if (attribute === 'operationalState')
412
+ return 0x4;
413
+ else if (attribute === 'operationalError')
414
+ return 0x5;
415
+ }
402
416
  return endpoint.behaviors.supported[lowercaseFirstLetter(cluster)]?.schema?.children?.find((child) => child.name === capitalizeFirstLetter(attribute))?.id;
403
417
  }
404
418
  }
package/dist/update.js CHANGED
@@ -35,14 +35,15 @@ async function getMatterbridgeLatestVersion(matterbridge) {
35
35
  }
36
36
  async function getMatterbridgeDevVersion(matterbridge) {
37
37
  const { getNpmPackageVersion } = await import('./utils/network.js');
38
- getNpmPackageVersion('matterbridge', 'edge')
38
+ getNpmPackageVersion('matterbridge', 'dev')
39
39
  .then(async (version) => {
40
40
  matterbridge.matterbridgeDevVersion = version;
41
41
  matterbridge.matterbridgeInformation.matterbridgeDevVersion = version;
42
42
  await matterbridge.nodeContext?.set('matterbridgeDevVersion', version);
43
- if (matterbridge.matterbridgeVersion.includes('-edge.') && matterbridge.matterbridgeVersion !== version) {
43
+ if (matterbridge.matterbridgeVersion.includes('-dev.') && matterbridge.matterbridgeVersion !== version) {
44
44
  matterbridge.log.notice(`Matterbridge@dev is out of date. Current version: ${matterbridge.matterbridgeVersion}. Latest dev version: ${matterbridge.matterbridgeDevVersion}.`);
45
45
  matterbridge.frontend.wssSendRefreshRequired('matterbridgeDevVersion');
46
+ matterbridge.frontend.wssSendUpdateRequired();
46
47
  }
47
48
  })
48
49
  .catch((error) => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.944b63c3.css",
4
- "main.js": "./static/js/main.13560e6f.js",
4
+ "main.js": "./static/js/main.32273640.js",
5
5
  "static/js/453.d855a71b.chunk.js": "./static/js/453.d855a71b.chunk.js",
6
6
  "static/media/roboto-latin-700-normal.woff2": "./static/media/roboto-latin-700-normal.c4d6cab43bec89049809.woff2",
7
7
  "static/media/roboto-latin-500-normal.woff2": "./static/media/roboto-latin-500-normal.599f66a60bdf974e578e.woff2",
@@ -77,11 +77,11 @@
77
77
  "static/media/roboto-greek-ext-300-normal.woff": "./static/media/roboto-greek-ext-300-normal.60729cafbded24073dfb.woff",
78
78
  "index.html": "./index.html",
79
79
  "main.944b63c3.css.map": "./static/css/main.944b63c3.css.map",
80
- "main.13560e6f.js.map": "./static/js/main.13560e6f.js.map",
80
+ "main.32273640.js.map": "./static/js/main.32273640.js.map",
81
81
  "453.d855a71b.chunk.js.map": "./static/js/453.d855a71b.chunk.js.map"
82
82
  },
83
83
  "entrypoints": [
84
84
  "static/css/main.944b63c3.css",
85
- "static/js/main.13560e6f.js"
85
+ "static/js/main.32273640.js"
86
86
  ]
87
87
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.13560e6f.js"></script><link href="./static/css/main.944b63c3.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.32273640.js"></script><link href="./static/css/main.944b63c3.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>