matterbridge 3.1.1-dev-20250629-cfe9124 → 3.1.1-dev-20250630-ea4c889

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
@@ -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
- - [SolarPower]: Added SolarPower class and Jest test. Thanks Ludovic BOUÉ.
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
 
@@ -1,24 +1,28 @@
1
1
  import { PowerSourceTag } from '@matter/main';
2
2
  import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
3
3
  import { PowerSource } from '@matter/main/clusters/power-source';
4
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
5
- import { deviceEnergyManagement, electricalSensor, batteryStorage, powerSource } from './matterbridgeDeviceTypes.js';
4
+ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
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, 24_000)
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
  }
@@ -3,9 +3,9 @@ import { EnergyEvseModeServer } from '@matter/main/behaviors/energy-evse-mode';
3
3
  import { EnergyEvse, EnergyEvseMode } from '@matter/main/clusters';
4
4
  import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
5
5
  import { ModeBase } from '@matter/main/clusters/mode-base';
6
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
7
- import { MatterbridgeServer } from './matterbridgeBehaviors.js';
8
- import { deviceEnergyManagement, electricalSensor, evse, powerSource } from './matterbridgeDeviceTypes.js';
6
+ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
7
+ import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
8
+ import { deviceEnergyManagement, electricalSensor, evse, powerSource } from '../matterbridgeDeviceTypes.js';
9
9
  export class Evse extends MatterbridgeEndpoint {
10
10
  constructor(name, serial, currentMode, supportedModes, state, supplyState, faultState, absMinPower, absMaxPower) {
11
11
  super([evse, powerSource, electricalSensor, deviceEnergyManagement], { uniqueStorageKey: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` }, true);
@@ -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();
@@ -1,6 +1,8 @@
1
- export * from '../roboticVacuumCleaner.js';
2
- export * from '../laundryWasher.js';
3
- export * from '../waterHeater.js';
4
- export * from '../evse.js';
5
- export * from '../solarPower.js';
6
- export * from '../batteryStorage.js';
1
+ export * from './roboticVacuumCleaner.js';
2
+ export * from './laundryWasher.js';
3
+ export * from './laundryDryer.js';
4
+ export * from './waterHeater.js';
5
+ export * from './evse.js';
6
+ export * from './solarPower.js';
7
+ export * from './batteryStorage.js';
8
+ export * from './heatPump.js';
@@ -0,0 +1,36 @@
1
+ import { NumberTag, 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, temperatureSensor, thermostatDevice } 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.SpaceHeating, false, DeviceEnergyManagement.EsaState.Online, absMinPower, absMaxPower)
18
+ .createDefaultDeviceEnergyManagementModeClusterServer()
19
+ .addRequiredClusterServers();
20
+ this.addChildDeviceType('FlowTemperature', temperatureSensor, {
21
+ tagList: [{ mfgCode: null, namespaceId: NumberTag.One.namespaceId, tag: NumberTag.One.tag, label: 'Flow' }],
22
+ })
23
+ .createDefaultTemperatureMeasurementClusterServer(4500)
24
+ .addRequiredClusterServers();
25
+ this.addChildDeviceType('ReturnTemperature', temperatureSensor, {
26
+ tagList: [{ mfgCode: null, namespaceId: NumberTag.Two.namespaceId, tag: NumberTag.Two.tag, label: 'Return' }],
27
+ })
28
+ .createDefaultTemperatureMeasurementClusterServer(3500)
29
+ .addRequiredClusterServers();
30
+ this.addChildDeviceType('Thermostat', thermostatDevice, {
31
+ tagList: [{ mfgCode: null, namespaceId: NumberTag.One.namespaceId, tag: NumberTag.One.tag, label: 'Main Thermostat' }],
32
+ })
33
+ .createDefaultHeatingThermostatClusterServer()
34
+ .addRequiredClusterServers();
35
+ }
36
+ }
@@ -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
+ }
@@ -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';
9
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
10
- import { MatterbridgeOnOffServer, MatterbridgeServer } from './matterbridgeBehaviors.js';
8
+ import { laundryWasher, powerSource } from '../matterbridgeDeviceTypes.js';
9
+ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
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();
@@ -7,12 +7,12 @@ import { RvcCleanMode } from '@matter/main/clusters/rvc-clean-mode';
7
7
  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
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
11
- import { roboticVacuumCleaner } from './matterbridgeDeviceTypes.js';
12
- import { MatterbridgeServer, MatterbridgeServiceAreaServer } from './matterbridgeBehaviors.js';
10
+ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
11
+ import { powerSource, roboticVacuumCleaner } from '../matterbridgeDeviceTypes.js';
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)
@@ -1,7 +1,7 @@
1
1
  import { PowerSourceTag } from '@matter/main';
2
2
  import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
3
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
4
- import { deviceEnergyManagement, electricalSensor, solarPower, powerSource } from './matterbridgeDeviceTypes.js';
3
+ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
+ import { deviceEnergyManagement, electricalSensor, solarPower, powerSource } from '../matterbridgeDeviceTypes.js';
5
5
  export class SolarPower extends MatterbridgeEndpoint {
6
6
  constructor(name, serial, voltage = null, current = null, power = null, energyExported = null, absMinPower = 0, absMaxPower = 0) {
7
7
  super([solarPower, powerSource, electricalSensor, deviceEnergyManagement], {
@@ -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
  }
@@ -3,12 +3,12 @@ import { WaterHeaterManagement } from '@matter/main/clusters/water-heater-manage
3
3
  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
- import { MatterbridgeServer } from './matterbridgeBehaviors.js';
7
- import { waterHeater } from './matterbridgeDeviceTypes.js';
8
- import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
6
+ import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
7
+ import { electricalSensor, powerSource, waterHeater } from '../matterbridgeDeviceTypes.js';
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/dist/index.js CHANGED
@@ -11,12 +11,14 @@ export * from './matterbridgePlatform.js';
11
11
  export * from './matterbridgeAccessoryPlatform.js';
12
12
  export * from './matterbridgeDynamicPlatform.js';
13
13
  export { addVirtualDevice } from './helpers.js';
14
- export * from './roboticVacuumCleaner.js';
15
- export * from './laundryWasher.js';
16
- export * from './waterHeater.js';
17
- export * from './evse.js';
18
- export * from './solarPower.js';
19
- export * from './batteryStorage.js';
14
+ export * from './devices/roboticVacuumCleaner.js';
15
+ export * from './devices/laundryWasher.js';
16
+ export * from './devices/laundryDryer.js';
17
+ export * from './devices/waterHeater.js';
18
+ export * from './devices/evse.js';
19
+ export * from './devices/solarPower.js';
20
+ export * from './devices/batteryStorage.js';
21
+ export * from './devices/heatPump.js';
20
22
  const log = new AnsiLogger({ logName: 'Main', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
21
23
  async function main() {
22
24
  log.debug('***Matterbridge.loadInstance() called');
@@ -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,
@@ -464,11 +441,12 @@ export class MatterbridgeEndpoint extends Endpoint {
464
441
  description: 'Primary battery',
465
442
  batVoltage,
466
443
  batPercentRemaining: Math.min(Math.max(batPercentRemaining * 2, 0), 200),
467
- batTimeRemaining: 1,
444
+ batTimeRemaining: null,
468
445
  batChargeLevel,
469
446
  batReplacementNeeded: false,
470
447
  batReplaceability: PowerSource.BatReplaceability.Unspecified,
471
- activeBatFaults: undefined,
448
+ batPresent: true,
449
+ activeBatFaults: [],
472
450
  batChargeState: PowerSource.BatChargeState.IsNotCharging,
473
451
  batFunctionalWhileCharging: true,
474
452
  endpointList: [],
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.1.1-dev-20250629-cfe9124",
3
+ "version": "3.1.1-dev-20250630-ea4c889",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge",
9
- "version": "3.1.1-dev-20250629-cfe9124",
9
+ "version": "3.1.1-dev-20250630-ea4c889",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
- "@matter/main": "0.15.0",
12
+ "@matter/main": "0.15.1-alpha.0-20250630-daa5888a0",
13
13
  "archiver": "7.0.1",
14
14
  "express": "5.1.0",
15
15
  "glob": "11.0.3",
@@ -68,86 +68,86 @@
68
68
  }
69
69
  },
70
70
  "node_modules/@matter/general": {
71
- "version": "0.15.0",
72
- "resolved": "https://registry.npmjs.org/@matter/general/-/general-0.15.0.tgz",
73
- "integrity": "sha512-rZC045EkAiWBWt3nUhvjhW6Tx4L/8RLsZMtdo9VEqPytwYIP9JMuLZt01x4+szM0dRx72k1g0e8zaU8CqobGJQ==",
71
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
72
+ "resolved": "https://registry.npmjs.org/@matter/general/-/general-0.15.1-alpha.0-20250630-daa5888a0.tgz",
73
+ "integrity": "sha512-ngZijLAMlS+fbkOyfkhayatFQ96jIN2lDU3XWIYtvZZvFUs7tCaxwkYyTaYegmEwwUhGLlxH0/A9T38+NU//Pw==",
74
74
  "license": "Apache-2.0",
75
75
  "dependencies": {
76
76
  "@noble/curves": "^1.9.2"
77
77
  }
78
78
  },
79
79
  "node_modules/@matter/main": {
80
- "version": "0.15.0",
81
- "resolved": "https://registry.npmjs.org/@matter/main/-/main-0.15.0.tgz",
82
- "integrity": "sha512-+mtEs4FRaonPMae38BLIaG6lYbszPfYj2gROAhIHYUuRb/Qf/dk05ZANcCyHuY0+ewi9L51q/nhReSHBQpt3vw==",
80
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
81
+ "resolved": "https://registry.npmjs.org/@matter/main/-/main-0.15.1-alpha.0-20250630-daa5888a0.tgz",
82
+ "integrity": "sha512-iKXAhqOCdW4kVJsK0MDqBbpxovUu2fU0dtndTzJjFO2DCSBOLqUhEwmlFcGPikhxTlGVtLr10+oi5O/51kB7AA==",
83
83
  "license": "Apache-2.0",
84
84
  "dependencies": {
85
- "@matter/general": "0.15.0",
86
- "@matter/model": "0.15.0",
87
- "@matter/node": "0.15.0",
88
- "@matter/protocol": "0.15.0",
89
- "@matter/types": "0.15.0"
85
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0",
86
+ "@matter/model": "0.15.1-alpha.0-20250630-daa5888a0",
87
+ "@matter/node": "0.15.1-alpha.0-20250630-daa5888a0",
88
+ "@matter/protocol": "0.15.1-alpha.0-20250630-daa5888a0",
89
+ "@matter/types": "0.15.1-alpha.0-20250630-daa5888a0"
90
90
  },
91
91
  "optionalDependencies": {
92
- "@matter/nodejs": "0.15.0"
92
+ "@matter/nodejs": "0.15.1-alpha.0-20250630-daa5888a0"
93
93
  }
94
94
  },
95
95
  "node_modules/@matter/model": {
96
- "version": "0.15.0",
97
- "resolved": "https://registry.npmjs.org/@matter/model/-/model-0.15.0.tgz",
98
- "integrity": "sha512-H0gxGN6b0bdV9UmozbC36BLeo949DcV1F84xRvRZvwaOzNEAruP4SSG9Ku0ZWU7cNlRX9+pinmWUAxm8CLomaw==",
96
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
97
+ "resolved": "https://registry.npmjs.org/@matter/model/-/model-0.15.1-alpha.0-20250630-daa5888a0.tgz",
98
+ "integrity": "sha512-rMr9SIrv0sXdaZvTpZTJEKnQpNXvoqsb078vMaNoPJOKDjipbvjgnVsTGK3uvSAtwmM2jN/ryv9ZhvnSSxcIJA==",
99
99
  "license": "Apache-2.0",
100
100
  "dependencies": {
101
- "@matter/general": "0.15.0"
101
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0"
102
102
  }
103
103
  },
104
104
  "node_modules/@matter/node": {
105
- "version": "0.15.0",
106
- "resolved": "https://registry.npmjs.org/@matter/node/-/node-0.15.0.tgz",
107
- "integrity": "sha512-v15+L1grC+ahHalk28Gf9cKoztxmjHdhkWEkXmYi51YE+XJJYZCC/Ib7QDBHJkk+znf1O6jq19SXoQ2Kylxwug==",
105
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
106
+ "resolved": "https://registry.npmjs.org/@matter/node/-/node-0.15.1-alpha.0-20250630-daa5888a0.tgz",
107
+ "integrity": "sha512-XIr9xa49EZ83ErCUAn2euTvCr+/e8eDVu8RpEnqMAAZsMKONcIMolKI5Movde1j0BSwjkyG4SS3sjlrZR/ccFg==",
108
108
  "license": "Apache-2.0",
109
109
  "dependencies": {
110
- "@matter/general": "0.15.0",
111
- "@matter/model": "0.15.0",
112
- "@matter/protocol": "0.15.0",
113
- "@matter/types": "0.15.0"
110
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0",
111
+ "@matter/model": "0.15.1-alpha.0-20250630-daa5888a0",
112
+ "@matter/protocol": "0.15.1-alpha.0-20250630-daa5888a0",
113
+ "@matter/types": "0.15.1-alpha.0-20250630-daa5888a0"
114
114
  }
115
115
  },
116
116
  "node_modules/@matter/nodejs": {
117
- "version": "0.15.0",
118
- "resolved": "https://registry.npmjs.org/@matter/nodejs/-/nodejs-0.15.0.tgz",
119
- "integrity": "sha512-CaFEEtNWzUpOzjdoxYu4oiN4GJMEjoZlGv19TAwaSvT7SLjm2B1ojcHBhvD+uUrF1SkGn2zql5mwO+qfYHCJHA==",
117
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
118
+ "resolved": "https://registry.npmjs.org/@matter/nodejs/-/nodejs-0.15.1-alpha.0-20250630-daa5888a0.tgz",
119
+ "integrity": "sha512-zvOgJGVbtyWJw5rqhLoprrjheqCR9NAk2MHi7kG6P7D/pUl5KoeddYmjfgey9AVyyJwz90+m3qMYa7PH5StoaQ==",
120
120
  "license": "Apache-2.0",
121
121
  "optional": true,
122
122
  "dependencies": {
123
- "@matter/general": "0.15.0",
124
- "@matter/node": "0.15.0",
125
- "@matter/protocol": "0.15.0",
126
- "@matter/types": "0.15.0"
123
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0",
124
+ "@matter/node": "0.15.1-alpha.0-20250630-daa5888a0",
125
+ "@matter/protocol": "0.15.1-alpha.0-20250630-daa5888a0",
126
+ "@matter/types": "0.15.1-alpha.0-20250630-daa5888a0"
127
127
  },
128
128
  "engines": {
129
129
  "node": ">=18.0.0"
130
130
  }
131
131
  },
132
132
  "node_modules/@matter/protocol": {
133
- "version": "0.15.0",
134
- "resolved": "https://registry.npmjs.org/@matter/protocol/-/protocol-0.15.0.tgz",
135
- "integrity": "sha512-TcR3Y+iPDz1N0dcSIQ1qO7uiIbiCwNpcoMSl5Ly8Q9aoyJfYQtIKWMMq6cCrAB9oeMHwLK0SopvSPAbCvWiPkQ==",
133
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
134
+ "resolved": "https://registry.npmjs.org/@matter/protocol/-/protocol-0.15.1-alpha.0-20250630-daa5888a0.tgz",
135
+ "integrity": "sha512-EwO0WX/jKWgsXthN6ZK0/xk3ELD/kgyBHZqc5aMLmQFKmMzn8lbMU5LNul1/tp7xhrHgehR0Y4oYzL+jhPGnGQ==",
136
136
  "license": "Apache-2.0",
137
137
  "dependencies": {
138
- "@matter/general": "0.15.0",
139
- "@matter/model": "0.15.0",
140
- "@matter/types": "0.15.0"
138
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0",
139
+ "@matter/model": "0.15.1-alpha.0-20250630-daa5888a0",
140
+ "@matter/types": "0.15.1-alpha.0-20250630-daa5888a0"
141
141
  }
142
142
  },
143
143
  "node_modules/@matter/types": {
144
- "version": "0.15.0",
145
- "resolved": "https://registry.npmjs.org/@matter/types/-/types-0.15.0.tgz",
146
- "integrity": "sha512-gLh0AGTUs7XZituhPSfpTc8WbC8lRyJqs5jMaLBZZj+4ptuvI9Y29d9ivitElkwBObG3SJYIgWgSPTmnHuz0IQ==",
144
+ "version": "0.15.1-alpha.0-20250630-daa5888a0",
145
+ "resolved": "https://registry.npmjs.org/@matter/types/-/types-0.15.1-alpha.0-20250630-daa5888a0.tgz",
146
+ "integrity": "sha512-3lpWYaE/s8R90gR9sSnQ06EZ3mSufBLuyxYLzG8SvNdqjVSFyxzgsZAHgzad/EYre5U0+sro/R9yakV8w67kYw==",
147
147
  "license": "Apache-2.0",
148
148
  "dependencies": {
149
- "@matter/general": "0.15.0",
150
- "@matter/model": "0.15.0"
149
+ "@matter/general": "0.15.1-alpha.0-20250630-daa5888a0",
150
+ "@matter/model": "0.15.1-alpha.0-20250630-daa5888a0"
151
151
  }
152
152
  },
153
153
  "node_modules/@noble/curves": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.1.1-dev-20250629-cfe9124",
3
+ "version": "3.1.1-dev-20250630-ea4c889",
4
4
  "description": "Matterbridge plugin manager for Matter",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",
@@ -98,7 +98,7 @@
98
98
  }
99
99
  },
100
100
  "dependencies": {
101
- "@matter/main": "0.15.0",
101
+ "@matter/main": "0.15.1-alpha.0-20250630-daa5888a0",
102
102
  "archiver": "7.0.1",
103
103
  "express": "5.1.0",
104
104
  "glob": "11.0.3",