matterbridge 3.1.1-dev-20250629-cfe9124 → 3.1.1-dev-20250630-1555eae
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 +5 -3
- package/dist/batteryStorage.js +12 -8
- package/dist/devices/export.js +1 -0
- package/dist/evse.js +1 -0
- package/dist/heatPump.js +21 -0
- package/dist/laundryDryer.js +58 -0
- package/dist/laundryWasher.js +2 -2
- package/dist/matterbridgeEndpoint.js +0 -23
- package/dist/roboticVacuumCleaner.js +2 -2
- package/dist/solarPower.js +1 -0
- package/dist/waterHeater.js +2 -2
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,15 +10,17 @@ If you like this project and find it useful, please consider giving it a star on
|
|
|
10
10
|
|
|
11
11
|
## [3.1.1] - 2025-07-??
|
|
12
12
|
|
|
13
|
-
### Breaking Changes
|
|
13
|
+
### Development Breaking Changes
|
|
14
14
|
|
|
15
15
|
- [devices]: The single devices (i.e. Rvc, Evse etc...) are only exported from matterbridge/devices. Please update your imports to use the new export path. Refer to the [documentation](README-DEV.md) for details on imports.
|
|
16
16
|
|
|
17
17
|
### Added
|
|
18
18
|
|
|
19
|
-
- [
|
|
20
|
-
- [BatteryStorage]: Added BatteryStorage class and Jest test. Thanks Ludovic BOUÉ.
|
|
19
|
+
- [LaundryDryer]: Added LaundryDryer (not supported by the Home app) class and Jest test.
|
|
21
20
|
- [DeviceEnergyManagement]: Added MatterbridgeDeviceEnergyManagementServer with power adjustment methods.
|
|
21
|
+
- [SolarPower]: Added SolarPower class and Jest test (working on Home Assistant and SmartThings). Thanks Ludovic BOUÉ.
|
|
22
|
+
- [BatteryStorage]: Added BatteryStorage class and Jest test (working on Home Assistant and SmartThings). Thanks Ludovic BOUÉ.
|
|
23
|
+
- [HeatPump]: Added HeatPump class and Jest test (working on Home Assistant and SmartThings).
|
|
22
24
|
|
|
23
25
|
### Changed
|
|
24
26
|
|
package/dist/batteryStorage.js
CHANGED
|
@@ -5,20 +5,24 @@ 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, powerSource, electricalSensor, deviceEnergyManagement], {
|
|
9
|
-
tagList: [
|
|
10
|
-
{ mfgCode: null, namespaceId: PowerSourceTag.Battery.namespaceId, tag: PowerSourceTag.Battery.tag, label: null },
|
|
11
|
-
{ mfgCode: null, namespaceId: PowerSourceTag.Grid.namespaceId, tag: PowerSourceTag.Grid.tag, label: null },
|
|
12
|
-
],
|
|
13
|
-
id: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}`,
|
|
14
|
-
}, true);
|
|
8
|
+
super([batteryStorage, powerSource, electricalSensor, deviceEnergyManagement], { id: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
15
9
|
this.createDefaultIdentifyClusterServer()
|
|
16
10
|
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Solar Power')
|
|
17
|
-
.createDefaultPowerSourceWiredBatteryClusterServer(batPercentRemaining, batChargeLevel)
|
|
18
11
|
.createDefaultPowerTopologyClusterServer()
|
|
19
12
|
.createDefaultElectricalPowerMeasurementClusterServer(voltage, current, power)
|
|
20
13
|
.createDefaultElectricalEnergyMeasurementClusterServer(energyImported, energyExported)
|
|
21
14
|
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.BatteryStorage, true, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
15
|
+
.createDefaultDeviceEnergyManagementModeClusterServer()
|
|
16
|
+
.addRequiredClusterServers();
|
|
17
|
+
this.addChildDeviceType('BatteryPowerSource', powerSource, {
|
|
18
|
+
tagList: [{ mfgCode: null, namespaceId: PowerSourceTag.Battery.namespaceId, tag: PowerSourceTag.Battery.tag, label: null }],
|
|
19
|
+
})
|
|
20
|
+
.createDefaultPowerSourceRechargeableBatteryClusterServer(batPercentRemaining, batChargeLevel)
|
|
21
|
+
.addRequiredClusterServers();
|
|
22
|
+
this.addChildDeviceType('GridPowerSource', powerSource, {
|
|
23
|
+
tagList: [{ mfgCode: null, namespaceId: PowerSourceTag.Grid.namespaceId, tag: PowerSourceTag.Grid.tag, label: null }],
|
|
24
|
+
})
|
|
25
|
+
.createDefaultPowerSourceWiredClusterServer()
|
|
22
26
|
.addRequiredClusterServers();
|
|
23
27
|
}
|
|
24
28
|
}
|
package/dist/devices/export.js
CHANGED
package/dist/evse.js
CHANGED
|
@@ -16,6 +16,7 @@ export class Evse extends MatterbridgeEndpoint {
|
|
|
16
16
|
.createDefaultElectricalPowerMeasurementClusterServer()
|
|
17
17
|
.createDefaultElectricalEnergyMeasurementClusterServer()
|
|
18
18
|
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.Evse, false, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
19
|
+
.createDefaultDeviceEnergyManagementModeClusterServer()
|
|
19
20
|
.createDefaultEnergyEvseClusterServer(state, supplyState, faultState)
|
|
20
21
|
.createDefaultEnergyEvseModeClusterServer(currentMode, supportedModes)
|
|
21
22
|
.addRequiredClusterServers();
|
package/dist/heatPump.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PowerSourceTag } from '@matter/main';
|
|
2
|
+
import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
|
|
3
|
+
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
4
|
+
import { deviceEnergyManagement, electricalSensor, powerSource, heatPump } from './matterbridgeDeviceTypes.js';
|
|
5
|
+
export class HeatPump extends MatterbridgeEndpoint {
|
|
6
|
+
constructor(name, serial, voltage = null, current = null, power = null, energyImported = null, absMinPower = 0, absMaxPower = 0) {
|
|
7
|
+
super([heatPump, powerSource, electricalSensor, deviceEnergyManagement], {
|
|
8
|
+
tagList: [{ mfgCode: null, namespaceId: PowerSourceTag.Grid.namespaceId, tag: PowerSourceTag.Grid.tag, label: null }],
|
|
9
|
+
id: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}`,
|
|
10
|
+
}, true);
|
|
11
|
+
this.createDefaultIdentifyClusterServer()
|
|
12
|
+
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Heat Pump')
|
|
13
|
+
.createDefaultPowerSourceWiredClusterServer()
|
|
14
|
+
.createDefaultPowerTopologyClusterServer()
|
|
15
|
+
.createDefaultElectricalPowerMeasurementClusterServer(voltage, current, power)
|
|
16
|
+
.createDefaultElectricalEnergyMeasurementClusterServer(energyImported)
|
|
17
|
+
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.Other, true, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
18
|
+
.createDefaultDeviceEnergyManagementModeClusterServer()
|
|
19
|
+
.addRequiredClusterServers();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { LaundryWasherMode } from '@matter/main/clusters/laundry-washer-mode';
|
|
2
|
+
import { TemperatureControl } from '@matter/main/clusters/temperature-control';
|
|
3
|
+
import { LaundryDryerControls } from '@matter/main/clusters/laundry-dryer-controls';
|
|
4
|
+
import { LaundryDryerControlsServer } from '@matter/main/behaviors/laundry-dryer-controls';
|
|
5
|
+
import { laundryDryer, powerSource } from './matterbridgeDeviceTypes.js';
|
|
6
|
+
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
7
|
+
import { MatterbridgeLaundryWasherModeServer, MatterbridgeLevelTemperatureControlServer, MatterbridgeNumberTemperatureControlServer } from './laundryWasher.js';
|
|
8
|
+
export class LaundryDryer extends MatterbridgeEndpoint {
|
|
9
|
+
constructor(name, serial, currentMode, supportedModes, selectedTemperatureLevel, supportedTemperatureLevels, temperatureSetpoint, minTemperature, maxTemperature, step, operationalState) {
|
|
10
|
+
super([laundryDryer, powerSource], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
11
|
+
this.createDefaultIdentifyClusterServer();
|
|
12
|
+
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Laundry Dryer');
|
|
13
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
|
14
|
+
this.createDeadFrontOnOffClusterServer(true);
|
|
15
|
+
this.createDefaultLaundryWasherModeClusterServer(currentMode, supportedModes);
|
|
16
|
+
this.createDefaultLaundryDryerControlsClusterServer(1);
|
|
17
|
+
if (temperatureSetpoint)
|
|
18
|
+
this.createNumberTemperatureControlClusterServer(temperatureSetpoint, minTemperature, maxTemperature, step);
|
|
19
|
+
else
|
|
20
|
+
this.createLevelTemperatureControlClusterServer(selectedTemperatureLevel, supportedTemperatureLevels);
|
|
21
|
+
this.createDefaultOperationalStateClusterServer(operationalState);
|
|
22
|
+
}
|
|
23
|
+
createDefaultLaundryWasherModeClusterServer(currentMode = 2, supportedModes = [
|
|
24
|
+
{ label: 'Delicate', mode: 1, modeTags: [{ value: LaundryWasherMode.ModeTag.Delicate }] },
|
|
25
|
+
{ label: 'Normal', mode: 2, modeTags: [{ value: LaundryWasherMode.ModeTag.Normal }] },
|
|
26
|
+
{ label: 'Heavy', mode: 3, modeTags: [{ value: LaundryWasherMode.ModeTag.Heavy }] },
|
|
27
|
+
{ label: 'Whites', mode: 4, modeTags: [{ value: LaundryWasherMode.ModeTag.Whites }] },
|
|
28
|
+
]) {
|
|
29
|
+
this.behaviors.require(MatterbridgeLaundryWasherModeServer, {
|
|
30
|
+
supportedModes,
|
|
31
|
+
currentMode,
|
|
32
|
+
});
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
createDefaultLaundryDryerControlsClusterServer(selectedDrynessLevel, supportedDrynessLevels) {
|
|
36
|
+
this.behaviors.require(LaundryDryerControlsServer, {
|
|
37
|
+
supportedDrynessLevels: supportedDrynessLevels ?? [LaundryDryerControls.DrynessLevel.Low, LaundryDryerControls.DrynessLevel.Normal, LaundryDryerControls.DrynessLevel.Extra, LaundryDryerControls.DrynessLevel.Max],
|
|
38
|
+
selectedDrynessLevel,
|
|
39
|
+
});
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
createLevelTemperatureControlClusterServer(selectedTemperatureLevel = 1, supportedTemperatureLevels = ['Cold', 'Warm', 'Hot', '30°', '40°', '60°', '80°']) {
|
|
43
|
+
this.behaviors.require(MatterbridgeLevelTemperatureControlServer.with(TemperatureControl.Feature.TemperatureLevel), {
|
|
44
|
+
selectedTemperatureLevel,
|
|
45
|
+
supportedTemperatureLevels,
|
|
46
|
+
});
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
createNumberTemperatureControlClusterServer(temperatureSetpoint = 40 * 100, minTemperature = 30 * 100, maxTemperature = 60 * 100, step = 10 * 100) {
|
|
50
|
+
this.behaviors.require(MatterbridgeNumberTemperatureControlServer.with(TemperatureControl.Feature.TemperatureNumber, TemperatureControl.Feature.TemperatureStep), {
|
|
51
|
+
temperatureSetpoint,
|
|
52
|
+
minTemperature,
|
|
53
|
+
maxTemperature,
|
|
54
|
+
step,
|
|
55
|
+
});
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
}
|
package/dist/laundryWasher.js
CHANGED
|
@@ -5,12 +5,12 @@ import { ModeBase } from '@matter/main/clusters/mode-base';
|
|
|
5
5
|
import { TemperatureControlServer } from '@matter/main/behaviors/temperature-control';
|
|
6
6
|
import { LaundryWasherModeServer } from '@matter/main/behaviors/laundry-washer-mode';
|
|
7
7
|
import { LaundryWasherControlsServer } from '@matter/main/behaviors/laundry-washer-controls';
|
|
8
|
-
import { laundryWasher } from './matterbridgeDeviceTypes.js';
|
|
8
|
+
import { laundryWasher, powerSource } from './matterbridgeDeviceTypes.js';
|
|
9
9
|
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
10
10
|
import { MatterbridgeOnOffServer, MatterbridgeServer } from './matterbridgeBehaviors.js';
|
|
11
11
|
export class LaundryWasher extends MatterbridgeEndpoint {
|
|
12
12
|
constructor(name, serial, currentMode, supportedModes, spinSpeedCurrent, spinSpeeds, numberOfRinses, supportedRinses, selectedTemperatureLevel, supportedTemperatureLevels, temperatureSetpoint, minTemperature, maxTemperature, step, operationalState) {
|
|
13
|
-
super(laundryWasher, { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
13
|
+
super([laundryWasher, powerSource], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
14
14
|
this.createDefaultIdentifyClusterServer();
|
|
15
15
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Laundry Washer');
|
|
16
16
|
this.createDefaultPowerSourceWiredClusterServer();
|
|
@@ -417,29 +417,6 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
417
417
|
});
|
|
418
418
|
return this;
|
|
419
419
|
}
|
|
420
|
-
createDefaultPowerSourceWiredBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok) {
|
|
421
|
-
this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Rechargeable), {
|
|
422
|
-
status: PowerSource.PowerSourceStatus.Active,
|
|
423
|
-
order: 0,
|
|
424
|
-
description: 'Primary battery',
|
|
425
|
-
endpointList: [],
|
|
426
|
-
batVoltage: null,
|
|
427
|
-
batPercentRemaining: Math.min(Math.max(batPercentRemaining * 2, 0), 200),
|
|
428
|
-
batTimeRemaining: null,
|
|
429
|
-
batChargeLevel,
|
|
430
|
-
batReplacementNeeded: false,
|
|
431
|
-
batReplaceability: PowerSource.BatReplaceability.Unspecified,
|
|
432
|
-
batPresent: true,
|
|
433
|
-
activeBatFaults: [],
|
|
434
|
-
batChargeState: PowerSource.BatChargeState.IsNotCharging,
|
|
435
|
-
batTimeToFullCharge: null,
|
|
436
|
-
batFunctionalWhileCharging: true,
|
|
437
|
-
batChargingCurrent: null,
|
|
438
|
-
batCapacity: 1,
|
|
439
|
-
activeBatChargeFaults: [],
|
|
440
|
-
});
|
|
441
|
-
return this;
|
|
442
|
-
}
|
|
443
420
|
createDefaultPowerSourceReplaceableBatteryClusterServer(batPercentRemaining = 100, batChargeLevel = PowerSource.BatChargeLevel.Ok, batVoltage = 1500, batReplacementDescription = 'Battery type', batQuantity = 1) {
|
|
444
421
|
this.behaviors.require(PowerSourceServer.with(PowerSource.Feature.Battery, PowerSource.Feature.Replaceable), {
|
|
445
422
|
status: PowerSource.PowerSourceStatus.Active,
|
|
@@ -8,11 +8,11 @@ import { RvcOperationalState } from '@matter/main/clusters/rvc-operational-state
|
|
|
8
8
|
import { ModeBase } from '@matter/main/clusters/mode-base';
|
|
9
9
|
import { OperationalState } from '@matter/main/clusters/operational-state';
|
|
10
10
|
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
11
|
-
import { roboticVacuumCleaner } from './matterbridgeDeviceTypes.js';
|
|
11
|
+
import { powerSource, roboticVacuumCleaner } from './matterbridgeDeviceTypes.js';
|
|
12
12
|
import { MatterbridgeServer, MatterbridgeServiceAreaServer } from './matterbridgeBehaviors.js';
|
|
13
13
|
export class RoboticVacuumCleaner extends MatterbridgeEndpoint {
|
|
14
14
|
constructor(name, serial, currentRunMode, supportedRunModes, currentCleanMode, supportedCleanModes, currentPhase = null, phaseList = null, operationalState, operationalStateList, supportedAreas, selectedAreas, currentArea) {
|
|
15
|
-
super(roboticVacuumCleaner, { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
15
|
+
super([roboticVacuumCleaner, powerSource], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
16
16
|
this.createDefaultIdentifyClusterServer()
|
|
17
17
|
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Robot Vacuum Cleaner')
|
|
18
18
|
.createDefaultPowerSourceRechargeableBatteryClusterServer(80, PowerSource.BatChargeLevel.Ok, 5900)
|
package/dist/solarPower.js
CHANGED
|
@@ -15,6 +15,7 @@ export class SolarPower extends MatterbridgeEndpoint {
|
|
|
15
15
|
.createDefaultElectricalPowerMeasurementClusterServer(voltage, current, power)
|
|
16
16
|
.createDefaultElectricalEnergyMeasurementClusterServer(0, energyExported)
|
|
17
17
|
.createDefaultDeviceEnergyManagementClusterServer(DeviceEnergyManagement.EsaType.SolarPv, true, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
|
|
18
|
+
.createDefaultDeviceEnergyManagementModeClusterServer()
|
|
18
19
|
.addRequiredClusterServers();
|
|
19
20
|
}
|
|
20
21
|
}
|
package/dist/waterHeater.js
CHANGED
|
@@ -4,11 +4,11 @@ import { WaterHeaterMode } from '@matter/main/clusters/water-heater-mode';
|
|
|
4
4
|
import { WaterHeaterManagementServer } from '@matter/main/behaviors/water-heater-management';
|
|
5
5
|
import { WaterHeaterModeServer } from '@matter/main/behaviors/water-heater-mode';
|
|
6
6
|
import { MatterbridgeServer } from './matterbridgeBehaviors.js';
|
|
7
|
-
import { waterHeater } from './matterbridgeDeviceTypes.js';
|
|
7
|
+
import { electricalSensor, powerSource, waterHeater } from './matterbridgeDeviceTypes.js';
|
|
8
8
|
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
9
9
|
export class WaterHeater extends MatterbridgeEndpoint {
|
|
10
10
|
constructor(name, serial, waterTemperature = 50, targetWaterTemperature = 55, minHeatSetpointLimit = 20, maxHeatSetpointLimit = 80, heaterTypes = { immersionElement1: true }, tankPercentage = 90) {
|
|
11
|
-
super(waterHeater, { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
11
|
+
super([waterHeater, powerSource, electricalSensor], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
|
|
12
12
|
this.createDefaultIdentifyClusterServer()
|
|
13
13
|
.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Matterbridge Water Heater')
|
|
14
14
|
.createDefaultPowerSourceWiredClusterServer()
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "matterbridge",
|
|
3
|
-
"version": "3.1.1-dev-
|
|
3
|
+
"version": "3.1.1-dev-20250630-1555eae",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "matterbridge",
|
|
9
|
-
"version": "3.1.1-dev-
|
|
9
|
+
"version": "3.1.1-dev-20250630-1555eae",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@matter/main": "0.15.0",
|
package/package.json
CHANGED