matterbridge-example-dynamic-platform 1.3.7-dev-20250730-3e59229 → 1.3.7-dev-20250801-09a1219

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
@@ -23,14 +23,21 @@ If you like this project and find it useful, please consider giving it a star on
23
23
  <img src="bmc-button.svg" alt="Buy me a coffee" width="120">
24
24
  </a>
25
25
 
26
- ## [1.3.7] - 2025-07-??
26
+ ## [1.3.7] - 2025-08-01
27
27
 
28
28
  ### Added
29
29
 
30
+ - [airquality]: Added support of Concentration Measurements for Home app.
31
+
30
32
  ### Changed
31
33
 
32
34
  - [package]: Updated dependencies.
33
35
 
36
+ ### Fixed
37
+
38
+ - [platform]: Fixed missed softwareVersion and hardwareVersion. Thanks Tamer.
39
+ - [platform]: Fixed missed BridgedDeviceBasicInformation cluster for single class devices. Thanks Tamer.
40
+
34
41
  <a href="https://www.buymeacoffee.com/luligugithub">
35
42
  <img src="bmc-button.svg" alt="Buy me a coffee" width="80">
36
43
  </a>
package/dist/platform.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { MatterbridgeEndpoint, MatterbridgeDynamicPlatform, airQualitySensor, bridgedNode, colorTemperatureLight, coverDevice, dimmableLight, doorLockDevice, fanDevice, flowSensor, humiditySensor, onOffLight, onOffOutlet, onOffSwitch, powerSource, rainSensor, smokeCoAlarm, temperatureSensor, thermostatDevice, waterFreezeDetector, waterLeakDetector, airPurifier, pumpDevice, waterValve, genericSwitch, airConditioner, cooktop, microwaveOven, oven, refrigerator, onOffMountedSwitch, dimmableMountedSwitch, extendedColorLight, } from 'matterbridge';
2
2
  import { RoboticVacuumCleaner, LaundryWasher, WaterHeater, Evse, SolarPower, BatteryStorage, LaundryDryer, HeatPump, Dishwasher, ExtractorHood } from 'matterbridge/devices';
3
- import { isValidBoolean, isValidNumber } from 'matterbridge/utils';
3
+ import { isValidBoolean, isValidNumber, isValidString } from 'matterbridge/utils';
4
4
  import { debugStringify } from 'matterbridge/logger';
5
- import { AreaNamespaceTag, LocationTag, NumberTag, PositionTag, SwitchesTag } from 'matterbridge/matter';
6
- import { PowerSource, BooleanState, OnOff, LevelControl, AirQuality, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, FlowMeasurement, ColorControl, DoorLock, FanControl, FormaldehydeConcentrationMeasurement, NitrogenDioxideConcentrationMeasurement, OzoneConcentrationMeasurement, Pm10ConcentrationMeasurement, Pm1ConcentrationMeasurement, Pm25ConcentrationMeasurement, RadonConcentrationMeasurement, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, TemperatureMeasurement, Thermostat, ThermostatCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, WindowCovering, EnergyEvseMode, EnergyEvse, RvcRunMode, RvcCleanMode, } from 'matterbridge/matter/clusters';
5
+ import { AreaNamespaceTag, LocationTag, NumberTag, PositionTag, SwitchesTag, UINT16_MAX, UINT32_MAX } from 'matterbridge/matter';
6
+ import { PowerSource, BooleanState, OnOff, LevelControl, AirQuality, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, FlowMeasurement, ColorControl, DoorLock, FanControl, FormaldehydeConcentrationMeasurement, NitrogenDioxideConcentrationMeasurement, OzoneConcentrationMeasurement, Pm10ConcentrationMeasurement, Pm1ConcentrationMeasurement, Pm25ConcentrationMeasurement, RadonConcentrationMeasurement, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, TemperatureMeasurement, Thermostat, ThermostatCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, WindowCovering, EnergyEvseMode, EnergyEvse, RvcRunMode, RvcCleanMode, ConcentrationMeasurement, Descriptor, BridgedDeviceBasicInformation, } from 'matterbridge/matter/clusters';
7
7
  import { Appliances } from './appliances.js';
8
8
  export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
9
9
  switch;
@@ -882,12 +882,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
882
882
  .createDefaultCarbonDioxideConcentrationMeasurementClusterServer(400)
883
883
  .createDefaultNitrogenDioxideConcentrationMeasurementClusterServer(1)
884
884
  .createDefaultOzoneConcentrationMeasurementClusterServer(1)
885
- .createDefaultFormaldehydeConcentrationMeasurementClusterServer(1)
886
- .createDefaultPm1ConcentrationMeasurementClusterServer(100)
887
- .createDefaultPm25ConcentrationMeasurementClusterServer(100)
888
- .createDefaultPm10ConcentrationMeasurementClusterServer(100)
889
- .createDefaultRadonConcentrationMeasurementClusterServer(100)
890
- .createDefaultTvocMeasurementClusterServer(100);
885
+ .createDefaultFormaldehydeConcentrationMeasurementClusterServer(1, ConcentrationMeasurement.MeasurementUnit.Ugm3)
886
+ .createDefaultPm1ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
887
+ .createDefaultPm25ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
888
+ .createDefaultPm10ConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
889
+ .createDefaultRadonConcentrationMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3)
890
+ .createDefaultTvocMeasurementClusterServer(100, ConcentrationMeasurement.MeasurementUnit.Ugm3);
891
891
  this.airQuality = await this.addDevice(this.airQuality);
892
892
  this.momentarySwitch = new MatterbridgeEndpoint([bridgedNode, powerSource], { uniqueStorageKey: 'Momentary switch composed' }, this.config.debug)
893
893
  .createDefaultBridgedDeviceBasicInformationClusterServer('Momentary switch (Top-1 Middle-2 Bottom-3)', 'serial_947942331225', 0xfff1, 'Matterbridge', 'Matterbridge MomentarySwitch')
@@ -1424,6 +1424,28 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
1424
1424
  device.softwareVersionString = this.version === '' ? 'Unknown' : this.version;
1425
1425
  device.hardwareVersion = parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, ''));
1426
1426
  device.hardwareVersionString = this.matterbridge.matterbridgeVersion;
1427
+ device.softwareVersion = isValidNumber(device.softwareVersion, 0, UINT32_MAX) ? device.softwareVersion : undefined;
1428
+ device.softwareVersionString = isValidString(device.softwareVersionString) ? device.softwareVersionString.slice(0, 64) : undefined;
1429
+ device.hardwareVersion = isValidNumber(device.hardwareVersion, 0, UINT16_MAX) ? device.hardwareVersion : undefined;
1430
+ device.hardwareVersionString = isValidString(device.hardwareVersionString) ? device.hardwareVersionString.slice(0, 64) : undefined;
1431
+ const options = device.getClusterServerOptions(BridgedDeviceBasicInformation.Cluster.id);
1432
+ if (options) {
1433
+ options.softwareVersion = device.softwareVersion || 1;
1434
+ options.softwareVersionString = device.softwareVersionString || '1.0.0';
1435
+ options.hardwareVersion = device.hardwareVersion || 1;
1436
+ options.hardwareVersionString = device.hardwareVersionString || '1.0.0';
1437
+ }
1438
+ if (device.mode === undefined && !device.deviceTypes.has(bridgedNode.code)) {
1439
+ device.deviceTypes.set(bridgedNode.code, bridgedNode);
1440
+ const options = device.getClusterServerOptions(Descriptor.Cluster.id);
1441
+ if (options) {
1442
+ const deviceTypeList = options.deviceTypeList;
1443
+ if (!deviceTypeList.find((dt) => dt.deviceType === bridgedNode.code)) {
1444
+ deviceTypeList.push({ deviceType: bridgedNode.code, revision: bridgedNode.revision });
1445
+ }
1446
+ }
1447
+ device.createDefaultBridgedDeviceBasicInformationClusterServer(device.deviceName, device.serialNumber, device.vendorId, device.vendorName, device.productName, device.softwareVersion, device.softwareVersionString, device.hardwareVersion, device.hardwareVersionString);
1448
+ }
1427
1449
  await this.registerDevice(device);
1428
1450
  this.bridgedDevices.set(device.deviceName, device);
1429
1451
  return device;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "1.3.7-dev-20250730-3e59229",
3
+ "version": "1.3.7-dev-20250801-09a1219",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge-example-dynamic-platform",
9
- "version": "1.3.7-dev-20250730-3e59229",
9
+ "version": "1.3.7-dev-20250801-09a1219",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "node-ansi-logger": "3.1.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "1.3.7-dev-20250730-3e59229",
3
+ "version": "1.3.7-dev-20250801-09a1219",
4
4
  "description": "Matterbridge dynamic plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",