matterbridge 3.1.1-dev-20250630-ea4c889 → 3.1.1-dev-20250701-9281629
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 +4 -1
- package/README-DOCKER.md +2 -2
- package/README.md +6 -3
- package/dist/devices/batteryStorage.js +1 -1
- package/dist/devices/evse.js +14 -13
- package/dist/devices/waterHeater.js +8 -2
- package/dist/matterbridgeEndpoint.js +4 -4
- package/frontend/build/asset-manifest.json +3 -3
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/js/{main.2486c3e3.js → main.42525fab.js} +5 -5
- package/frontend/build/static/js/{main.2486c3e3.js.map → main.42525fab.js.map} +1 -1
- package/npm-shrinkwrap.json +44 -44
- package/package.json +2 -2
- /package/frontend/build/static/js/{main.2486c3e3.js.LICENSE.txt → main.42525fab.js.LICENSE.txt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,7 @@ 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.1] - 2025-07
|
|
11
|
+
## [3.1.1] - 2025-07-01
|
|
12
12
|
|
|
13
13
|
### Development Breaking Changes
|
|
14
14
|
|
|
@@ -25,6 +25,9 @@ If you like this project and find it useful, please consider giving it a star on
|
|
|
25
25
|
### Changed
|
|
26
26
|
|
|
27
27
|
- [package]: Updated dependencies.
|
|
28
|
+
- [frontend]: Added all esa devices.
|
|
29
|
+
- [frontend]: New default values: select on the home page and icon view on devices page.
|
|
30
|
+
- [matter.js]: Bumped `matter.js` to 0.15.1 (https://github.com/project-chip/matter.js/discussions/2220). Great job matter.js!
|
|
28
31
|
|
|
29
32
|
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
30
33
|
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
package/README-DOCKER.md
CHANGED
|
@@ -120,11 +120,11 @@ docker compose down
|
|
|
120
120
|
|
|
121
121
|
### Update with docker compose
|
|
122
122
|
|
|
123
|
-
This will pull the new matterbridge image and restart the matterbridge container.
|
|
123
|
+
This will pull the new matterbridge image and restart only the matterbridge container.
|
|
124
124
|
|
|
125
125
|
```bash
|
|
126
126
|
docker compose pull matterbridge
|
|
127
|
-
docker compose up -d --no-deps matterbridge
|
|
127
|
+
docker compose up -d --no-deps --force-recreate matterbridge
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
### Inspect the container
|
package/README.md
CHANGED
|
@@ -69,15 +69,18 @@ https://matter-smarthome.de/en/interview/an-alternative-to-the-official-matter-s
|
|
|
69
69
|
To run Matterbridge, you need either a [Node.js](https://nodejs.org/en) environment or [Docker](https://docs.docker.com/get-started/get-docker/) installed on your system.
|
|
70
70
|
|
|
71
71
|
If you don't have Node.js already install, please use this method to install it on a debian device: https://github.com/nodesource/distributions.
|
|
72
|
-
The supported versions of node are 18, 20 and 22. Please install
|
|
73
|
-
Node 23 is not supported.
|
|
72
|
+
The supported versions of node are 18, 20 and 22. Please install Node.js 22 LTS.
|
|
73
|
+
Node.js 23, like all odd-numbered versions, is not supported.
|
|
74
74
|
Nvm is not a good choice and should not be used for production.
|
|
75
75
|
|
|
76
76
|
If you don't have Docker already install, please use this method to install it on a debian device: https://docs.docker.com/desktop/setup/install/linux/debian/.
|
|
77
|
+
After follow the guidelines for the [Docker configurations](README-DOCKER.md).
|
|
78
|
+
|
|
79
|
+
I suggest using Docker for its simplicity.
|
|
77
80
|
|
|
78
81
|
Since as stated in the Matter specifications "Matter aims to build a universal IPv6-based communication protocol for smart home devices", ipv6 should be enabled in the network.
|
|
79
82
|
|
|
80
|
-
Avoid using VLAN and firewall blocking the communications between the
|
|
83
|
+
Avoid using VLAN and firewall blocking the communications between the controllers and Matterbridge.
|
|
81
84
|
|
|
82
85
|
## Installation
|
|
83
86
|
|
|
@@ -5,7 +5,7 @@ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
|
|
|
5
5
|
import { deviceEnergyManagement, electricalSensor, batteryStorage, powerSource } from '../matterbridgeDeviceTypes.js';
|
|
6
6
|
export class BatteryStorage extends MatterbridgeEndpoint {
|
|
7
7
|
constructor(name, serial, batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, voltage = null, current = null, power = null, energyImported = null, energyExported = null, absMinPower = 0, absMaxPower = 0) {
|
|
8
|
-
super([batteryStorage,
|
|
8
|
+
super([batteryStorage, electricalSensor, deviceEnergyManagement], { id: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
9
9
|
this.createDefaultIdentifyClusterServer()
|
|
10
10
|
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Solar Power')
|
|
11
11
|
.createDefaultPowerTopologyClusterServer()
|
package/dist/devices/evse.js
CHANGED
|
@@ -7,14 +7,14 @@ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
|
|
|
7
7
|
import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
|
|
8
8
|
import { deviceEnergyManagement, electricalSensor, evse, powerSource } from '../matterbridgeDeviceTypes.js';
|
|
9
9
|
export class Evse extends MatterbridgeEndpoint {
|
|
10
|
-
constructor(name, serial, currentMode, supportedModes, state, supplyState, faultState, absMinPower, absMaxPower) {
|
|
10
|
+
constructor(name, serial, currentMode, supportedModes, state, supplyState, faultState, voltage = null, current = null, power = null, energy = null, absMinPower, absMaxPower) {
|
|
11
11
|
super([evse, powerSource, electricalSensor, deviceEnergyManagement], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
12
12
|
this.createDefaultIdentifyClusterServer()
|
|
13
|
-
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge
|
|
13
|
+
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Evse')
|
|
14
14
|
.createDefaultPowerSourceWiredClusterServer()
|
|
15
15
|
.createDefaultPowerTopologyClusterServer()
|
|
16
|
-
.createDefaultElectricalPowerMeasurementClusterServer()
|
|
17
|
-
.createDefaultElectricalEnergyMeasurementClusterServer()
|
|
16
|
+
.createDefaultElectricalPowerMeasurementClusterServer(voltage, current, power)
|
|
17
|
+
.createDefaultElectricalEnergyMeasurementClusterServer(energy, 0)
|
|
18
18
|
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.Evse, false, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
19
19
|
.createDefaultDeviceEnergyManagementModeClusterServer()
|
|
20
20
|
.createDefaultEnergyEvseClusterServer(state, supplyState, faultState)
|
|
@@ -23,16 +23,17 @@ export class Evse extends MatterbridgeEndpoint {
|
|
|
23
23
|
}
|
|
24
24
|
createDefaultEnergyEvseClusterServer(state, supplyState, faultState) {
|
|
25
25
|
this.behaviors.require(MatterbridgeEnergyEvseServer, {
|
|
26
|
-
state: state
|
|
27
|
-
supplyState: supplyState
|
|
28
|
-
faultState: faultState
|
|
29
|
-
chargingEnabledUntil:
|
|
30
|
-
circuitCapacity:
|
|
31
|
-
minimumChargeCurrent:
|
|
32
|
-
maximumChargeCurrent:
|
|
26
|
+
state: state !== undefined ? state : EnergyEvse.State.NotPluggedIn,
|
|
27
|
+
supplyState: supplyState !== undefined ? supplyState : EnergyEvse.SupplyState.ChargingEnabled,
|
|
28
|
+
faultState: faultState !== undefined ? faultState : EnergyEvse.FaultState.NoError,
|
|
29
|
+
chargingEnabledUntil: null,
|
|
30
|
+
circuitCapacity: 32_000,
|
|
31
|
+
minimumChargeCurrent: 6_000,
|
|
32
|
+
maximumChargeCurrent: 32_000,
|
|
33
|
+
userMaximumChargeCurrent: 32_000,
|
|
33
34
|
sessionId: null,
|
|
34
|
-
sessionDuration:
|
|
35
|
-
sessionEnergyCharged:
|
|
35
|
+
sessionDuration: null,
|
|
36
|
+
sessionEnergyCharged: null,
|
|
36
37
|
});
|
|
37
38
|
return this;
|
|
38
39
|
}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { ModeBase } from '@matter/main/clusters/mode-base';
|
|
2
2
|
import { WaterHeaterManagement } from '@matter/main/clusters/water-heater-management';
|
|
3
3
|
import { WaterHeaterMode } from '@matter/main/clusters/water-heater-mode';
|
|
4
|
+
import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
|
|
4
5
|
import { WaterHeaterManagementServer } from '@matter/main/behaviors/water-heater-management';
|
|
5
6
|
import { WaterHeaterModeServer } from '@matter/main/behaviors/water-heater-mode';
|
|
6
7
|
import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
|
|
7
8
|
import { electricalSensor, powerSource, waterHeater } from '../matterbridgeDeviceTypes.js';
|
|
8
9
|
import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
|
|
9
10
|
export class WaterHeater extends MatterbridgeEndpoint {
|
|
10
|
-
constructor(name, serial, waterTemperature = 50, targetWaterTemperature = 55, minHeatSetpointLimit = 20, maxHeatSetpointLimit = 80, heaterTypes = { immersionElement1: true }, tankPercentage = 90) {
|
|
11
|
+
constructor(name, serial, waterTemperature = 50, targetWaterTemperature = 55, minHeatSetpointLimit = 20, maxHeatSetpointLimit = 80, heaterTypes = { immersionElement1: true }, tankPercentage = 90, voltage = null, current = null, power = null, energy = null, absMinPower = 0, absMaxPower = 0) {
|
|
11
12
|
super([waterHeater, powerSource, electricalSensor], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
12
13
|
this.createDefaultIdentifyClusterServer()
|
|
13
14
|
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Water Heater')
|
|
14
15
|
.createDefaultPowerSourceWiredClusterServer()
|
|
15
16
|
.createDefaultHeatingThermostatClusterServer(waterTemperature, targetWaterTemperature, minHeatSetpointLimit, maxHeatSetpointLimit)
|
|
16
17
|
.createDefaultWaterHeaterManagementClusterServer(heaterTypes, {}, tankPercentage)
|
|
17
|
-
.createDefaultWaterHeaterModeClusterServer()
|
|
18
|
+
.createDefaultWaterHeaterModeClusterServer()
|
|
19
|
+
.createDefaultPowerTopologyClusterServer()
|
|
20
|
+
.createDefaultElectricalPowerMeasurementClusterServer(voltage, current, power)
|
|
21
|
+
.createDefaultElectricalEnergyMeasurementClusterServer(energy)
|
|
22
|
+
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.WaterHeating, true, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
23
|
+
.createDefaultDeviceEnergyManagementModeClusterServer();
|
|
18
24
|
}
|
|
19
25
|
createDefaultWaterHeaterManagementClusterServer(heaterTypes, heatDemand, tankPercentage, boostState) {
|
|
20
26
|
this.behaviors.require(MatterbridgeWaterHeaterManagementServer.with(WaterHeaterManagement.Feature.TankPercent), {
|
|
@@ -215,8 +215,8 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
215
215
|
this.commandHandler.addHandler(command, handler);
|
|
216
216
|
return this;
|
|
217
217
|
}
|
|
218
|
-
async executeCommandHandler(command, request) {
|
|
219
|
-
await this.commandHandler.executeHandler(command, { request });
|
|
218
|
+
async executeCommandHandler(command, request, cluster, attributes, endpoint) {
|
|
219
|
+
await this.commandHandler.executeHandler(command, { request, cluster, attributes, endpoint });
|
|
220
220
|
}
|
|
221
221
|
async invokeBehaviorCommand(cluster, command, params) {
|
|
222
222
|
await invokeBehaviorCommand(this, cluster, command, params);
|
|
@@ -1116,8 +1116,8 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1116
1116
|
accuracyRanges: [{ rangeMin: Number.MIN_SAFE_INTEGER, rangeMax: Number.MAX_SAFE_INTEGER, fixedMax: 1 }],
|
|
1117
1117
|
},
|
|
1118
1118
|
cumulativeEnergyReset: null,
|
|
1119
|
-
cumulativeEnergyImported: energyImported ? { energy: energyImported } : null,
|
|
1120
|
-
cumulativeEnergyExported: energyExported ? { energy: energyExported } : null,
|
|
1119
|
+
cumulativeEnergyImported: energyImported !== null && energyImported >= 0 ? { energy: energyImported } : null,
|
|
1120
|
+
cumulativeEnergyExported: energyExported !== null && energyExported >= 0 ? { energy: energyExported } : null,
|
|
1121
1121
|
});
|
|
1122
1122
|
return this;
|
|
1123
1123
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "./static/css/main.944b63c3.css",
|
|
4
|
-
"main.js": "./static/js/main.
|
|
4
|
+
"main.js": "./static/js/main.42525fab.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.
|
|
80
|
+
"main.42525fab.js.map": "./static/js/main.42525fab.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.
|
|
85
|
+
"static/js/main.42525fab.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.
|
|
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.42525fab.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>
|