matterbridge-example-dynamic-platform 1.2.3-rc.1 → 1.2.4-dev-20250612-b04ef65
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 +14 -1
- package/README.md +2 -1
- package/dist/appliances.js +20 -20
- package/dist/platform.js +32 -10
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -8,15 +8,28 @@ 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
|
+
## [1.2.4] - 2025-06-11
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
|
15
|
+
- [package]: Require matterbridge 3.0.6.
|
16
|
+
- [package]: Updated package.
|
17
|
+
- [package]: Updated dependencies.
|
18
|
+
|
19
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
20
|
+
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
21
|
+
</a>
|
22
|
+
|
11
23
|
## [1.2.3] - 2025-05-25
|
12
24
|
|
13
25
|
### Added
|
14
26
|
|
15
27
|
- [platform]: Added a cover device with both lift and tilt (supported by the Home app).
|
28
|
+
- [platform]: Added evse (EV charger) device type (not supported by the Home app).
|
16
29
|
|
17
30
|
### Changed
|
18
31
|
|
19
|
-
- [package]: Require matterbridge 3.0.
|
32
|
+
- [package]: Require matterbridge 3.0.5.
|
20
33
|
- [package]: Updated package.
|
21
34
|
- [package]: Updated dependencies.
|
22
35
|
|
package/README.md
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
Matterbridge dynamic platform example plugin is a template to develop your own plugin using the dynamic platform.
|
18
18
|
|
19
|
-
It exposes
|
19
|
+
It exposes 41 virtual devices:
|
20
20
|
|
21
21
|
- a switch with onOff cluster
|
22
22
|
- a light with onOff
|
@@ -59,6 +59,7 @@ It exposes 40 virtual devices:
|
|
59
59
|
- an extractor Hood device (supported by SmartThings, Alexa and Home Assistant)
|
60
60
|
- a cooktop device (supported by SmartThings, Alexa and Home Assistant)
|
61
61
|
- a water heater device (supported by SmartThings and Home Assistant)
|
62
|
+
- a car charger device (supported by Home Assistant)
|
62
63
|
|
63
64
|
All these devices continuously change state and position. The plugin also shows how to use all the command handlers (you can control all the devices), how to subscribe to attributes and how to trigger events.
|
64
65
|
|
package/dist/appliances.js
CHANGED
@@ -276,12 +276,12 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
276
276
|
class MatterbridgeLevelTemperatureControlServer extends TemperatureControlBehavior.with(TemperatureControl.Feature.TemperatureLevel) {
|
277
277
|
initialize() {
|
278
278
|
if (this.state.supportedTemperatureLevels.length >= 2) {
|
279
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
279
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
280
280
|
device.log.info('MatterbridgeLevelTemperatureControlServer initialized');
|
281
281
|
}
|
282
282
|
}
|
283
283
|
setTemperature(request) {
|
284
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
284
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
285
285
|
if (request.targetTemperatureLevel !== undefined && request.targetTemperatureLevel >= 0 && request.targetTemperatureLevel < this.state.supportedTemperatureLevels.length) {
|
286
286
|
device.log.info(`MatterbridgeLevelTemperatureControlServer: setTemperature called setting selectedTemperatureLevel to ${request.targetTemperatureLevel}: ${this.state.supportedTemperatureLevels[request.targetTemperatureLevel]}`);
|
287
287
|
this.state.selectedTemperatureLevel = request.targetTemperatureLevel;
|
@@ -293,11 +293,11 @@ class MatterbridgeLevelTemperatureControlServer extends TemperatureControlBehavi
|
|
293
293
|
}
|
294
294
|
class MatterbridgeNumberTemperatureControlServer extends TemperatureControlBehavior.with(TemperatureControl.Feature.TemperatureNumber) {
|
295
295
|
initialize() {
|
296
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
296
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
297
297
|
device.log.info('MatterbridgeNumberTemperatureControlServer initialized');
|
298
298
|
}
|
299
299
|
setTemperature(request) {
|
300
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
300
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
301
301
|
if (request.targetTemperature !== undefined && request.targetTemperature >= this.state.minTemperature && request.targetTemperature <= this.state.maxTemperature) {
|
302
302
|
device.log.info(`MatterbridgeNumberTemperatureControlServer: setTemperature called setting temperatureSetpoint to ${request.targetTemperature}`);
|
303
303
|
this.state.temperatureSetpoint = request.targetTemperature;
|
@@ -309,11 +309,11 @@ class MatterbridgeNumberTemperatureControlServer extends TemperatureControlBehav
|
|
309
309
|
}
|
310
310
|
class MatterbridgeMicrowaveOvenControlServer extends MicrowaveOvenControlBehavior.with(MicrowaveOvenControl.Feature.PowerInWatts) {
|
311
311
|
initialize() {
|
312
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
312
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
313
313
|
device.log.info('MatterbridgeMicrowaveOvenControlServer initialized');
|
314
314
|
}
|
315
315
|
setCookingParameters(request) {
|
316
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
316
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
317
317
|
if (request.cookMode !== undefined) {
|
318
318
|
device.log.info(`MatterbridgeMicrowaveOvenControlServer: setCookingParameters called setting cookMode to ${request.cookMode}`);
|
319
319
|
this.endpoint.setStateOf(MicrowaveOvenModeServer, { currentMode: request.cookMode });
|
@@ -340,7 +340,7 @@ class MatterbridgeMicrowaveOvenControlServer extends MicrowaveOvenControlBehavio
|
|
340
340
|
}
|
341
341
|
}
|
342
342
|
addMoreTime(request) {
|
343
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
343
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
344
344
|
if (request.timeToAdd !== undefined && request.timeToAdd >= 0) {
|
345
345
|
device.log.info(`MatterbridgeMicrowaveOvenControlServer: addMoreTime called setting cookTime to ${this.state.cookTime + request.timeToAdd}`);
|
346
346
|
this.state.cookTime += request.timeToAdd;
|
@@ -352,13 +352,13 @@ class MatterbridgeMicrowaveOvenControlServer extends MicrowaveOvenControlBehavio
|
|
352
352
|
}
|
353
353
|
export class MatterbridgeOvenCavityOperationalStateServer extends OvenCavityOperationalStateBehavior {
|
354
354
|
initialize() {
|
355
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
355
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
356
356
|
device.log.info('OvenCavityOperationalStateServer initialized: setting operational state to Stopped and operational error to No error');
|
357
357
|
this.state.operationalState = OperationalState.OperationalStateEnum.Stopped;
|
358
358
|
this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateLabel: 'No error', errorStateDetails: 'Fully operational' };
|
359
359
|
}
|
360
360
|
stop() {
|
361
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
361
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
362
362
|
device.log.info('OvenCavityOperationalStateServer: stop called setting operational state to Stopped and operational error to No error');
|
363
363
|
this.state.operationalState = OperationalState.OperationalStateEnum.Stopped;
|
364
364
|
this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateLabel: 'No error', errorStateDetails: 'Fully operational' };
|
@@ -367,7 +367,7 @@ export class MatterbridgeOvenCavityOperationalStateServer extends OvenCavityOper
|
|
367
367
|
};
|
368
368
|
}
|
369
369
|
start() {
|
370
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
370
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
371
371
|
device.log.info('OvenCavityOperationalStateServer: start called setting operational state to Running and operational error to No error');
|
372
372
|
this.state.operationalState = OperationalState.OperationalStateEnum.Running;
|
373
373
|
this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateLabel: 'No error', errorStateDetails: 'Fully operational' };
|
@@ -378,12 +378,12 @@ export class MatterbridgeOvenCavityOperationalStateServer extends OvenCavityOper
|
|
378
378
|
}
|
379
379
|
class MatterbridgeRefrigeratorAndTemperatureControlledCabinetModeServer extends RefrigeratorAndTemperatureControlledCabinetModeBehavior {
|
380
380
|
initialize() {
|
381
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
381
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
382
382
|
device.log.info('MatterbridgeRefrigeratorAndTemperatureControlledCabinetModeServer initialized: setting currentMode to 1');
|
383
383
|
this.state.currentMode = 1;
|
384
384
|
}
|
385
385
|
changeToMode(request) {
|
386
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
386
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
387
387
|
const supportedMode = this.state.supportedModes.find((supportedMode) => supportedMode.mode === request.newMode);
|
388
388
|
if (supportedMode) {
|
389
389
|
device.log.info(`MatterbridgeRefrigeratorAndTemperatureControlledCabinetModeServer: changeToMode called with mode ${supportedMode.mode} = ${supportedMode.label}`);
|
@@ -398,12 +398,12 @@ class MatterbridgeRefrigeratorAndTemperatureControlledCabinetModeServer extends
|
|
398
398
|
}
|
399
399
|
class MatterbridgeOvenModeServer extends OvenModeBehavior {
|
400
400
|
initialize() {
|
401
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
401
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
402
402
|
device.log.info('OvenModeServer initialized: setting currentMode to 3');
|
403
403
|
this.state.currentMode = 3;
|
404
404
|
}
|
405
405
|
changeToMode(request) {
|
406
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
406
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
407
407
|
const supportedMode = this.state.supportedModes.find((supportedMode) => supportedMode.mode === request.newMode);
|
408
408
|
if (supportedMode) {
|
409
409
|
device.log.info(`OvenModeServer: changeToMode called with mode ${supportedMode.mode} = ${supportedMode.label}`);
|
@@ -418,20 +418,20 @@ class MatterbridgeOvenModeServer extends OvenModeBehavior {
|
|
418
418
|
}
|
419
419
|
class MatterbridgeDishwasherModeServer extends DishwasherModeBehavior {
|
420
420
|
initialize() {
|
421
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
421
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
422
422
|
device.log.info('DishwasherModeServer initialized: setting currentMode to 3');
|
423
423
|
this.state.currentMode = 2;
|
424
424
|
this.reactTo(this.agent.get(MatterbridgeOnOffServer).events.onOff$Changed, this.handleOnOffChange);
|
425
425
|
}
|
426
426
|
handleOnOffChange(onOff) {
|
427
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
427
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
428
428
|
if (onOff === false) {
|
429
429
|
device.log.info('***OnOffServer changed to OFF: setting Dead Front state to Manufacturer Specific');
|
430
430
|
this.state.currentMode = 2;
|
431
431
|
}
|
432
432
|
}
|
433
433
|
changeToMode(request) {
|
434
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
434
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
435
435
|
const supportedMode = this.state.supportedModes.find((supportedMode) => supportedMode.mode === request.newMode);
|
436
436
|
if (supportedMode) {
|
437
437
|
device.log.info(`DishwasherModeServer: changeToMode called with mode ${supportedMode.mode} = ${supportedMode.label}`);
|
@@ -446,20 +446,20 @@ class MatterbridgeDishwasherModeServer extends DishwasherModeBehavior {
|
|
446
446
|
}
|
447
447
|
class MatterbridgeLaundryWasherModeServer extends LaundryWasherModeBehavior {
|
448
448
|
initialize() {
|
449
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
449
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
450
450
|
device.log.info('LaundryWasherModeServer initialized: setting currentMode to 3');
|
451
451
|
this.state.currentMode = 2;
|
452
452
|
this.reactTo(this.agent.get(MatterbridgeOnOffServer).events.onOff$Changed, this.handleOnOffChange);
|
453
453
|
}
|
454
454
|
handleOnOffChange(onOff) {
|
455
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
455
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
456
456
|
if (onOff === false) {
|
457
457
|
device.log.notice('OnOffServer changed to OFF: setting Dead Front state to Manufacturer Specific');
|
458
458
|
this.state.currentMode = 2;
|
459
459
|
}
|
460
460
|
}
|
461
461
|
changeToMode(request) {
|
462
|
-
const device = this.endpoint.stateOf(MatterbridgeServer)
|
462
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
463
463
|
const supportedMode = this.state.supportedModes.find((supportedMode) => supportedMode.mode === request.newMode);
|
464
464
|
if (supportedMode) {
|
465
465
|
device.log.info(`LaundryWasherModeServer: changeToMode called with mode ${supportedMode.mode} = ${supportedMode.label}`);
|
package/dist/platform.js
CHANGED
@@ -1,7 +1,7 @@
|
|
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, laundryWasher, cooktop, extractorHood, microwaveOven, oven, refrigerator, dishwasher, laundryDryer, onOffMountedSwitch, dimmableMountedSwitch, extendedColorLight, RoboticVacuumCleaner, WaterHeater, } from 'matterbridge';
|
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, laundryWasher, cooktop, extractorHood, microwaveOven, oven, refrigerator, dishwasher, laundryDryer, onOffMountedSwitch, dimmableMountedSwitch, extendedColorLight, RoboticVacuumCleaner, WaterHeater, Evse, } from 'matterbridge';
|
2
2
|
import { isValidBoolean, isValidNumber } from 'matterbridge/utils';
|
3
3
|
import { LocationTag } from 'matterbridge/matter';
|
4
|
-
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, } from 'matterbridge/matter/clusters';
|
4
|
+
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, } from 'matterbridge/matter/clusters';
|
5
5
|
import { Appliances } from './appliances.js';
|
6
6
|
export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
|
7
7
|
switch;
|
@@ -35,7 +35,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
35
35
|
momentarySwitch;
|
36
36
|
latchingSwitch;
|
37
37
|
vacuum;
|
38
|
-
|
38
|
+
waterHeater;
|
39
|
+
evse;
|
39
40
|
switchInterval;
|
40
41
|
lightInterval;
|
41
42
|
outletInterval;
|
@@ -58,8 +59,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
58
59
|
fanModeLookup = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
|
59
60
|
constructor(matterbridge, log, config) {
|
60
61
|
super(matterbridge, log, config);
|
61
|
-
if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('3.0.
|
62
|
-
throw new Error(`This plugin requires Matterbridge version >= "3.0.
|
62
|
+
if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('3.0.6')) {
|
63
|
+
throw new Error(`This plugin requires Matterbridge version >= "3.0.6". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend.`);
|
63
64
|
}
|
64
65
|
this.log.info('Initializing platform:', this.config.name);
|
65
66
|
if (config.whiteList === undefined)
|
@@ -672,6 +673,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
672
673
|
});
|
673
674
|
await this.airPurifier?.subscribeAttribute(FanControl.Cluster.id, 'fanMode', (newValue, oldValue, context) => {
|
674
675
|
this.airPurifier?.log.info(`Fan mode changed from ${this.fanModeLookup[oldValue]} to ${this.fanModeLookup[newValue]} context: ${context.offline === true ? 'offline' : 'online'}`);
|
676
|
+
if (context.offline === true)
|
677
|
+
return;
|
675
678
|
if (newValue === FanControl.FanMode.Off) {
|
676
679
|
this.airPurifier?.setAttribute(FanControl.Cluster.id, 'percentCurrent', 0, this.airPurifier?.log);
|
677
680
|
}
|
@@ -690,6 +693,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
690
693
|
}, this.airPurifier.log);
|
691
694
|
await this.airPurifier?.subscribeAttribute(FanControl.Cluster.id, 'percentSetting', (newValue, oldValue, context) => {
|
692
695
|
this.airPurifier?.log.info(`Percent setting changed from ${oldValue} to ${newValue} context: ${context.offline === true ? 'offline' : 'online'}`);
|
696
|
+
if (context.offline === true)
|
697
|
+
return;
|
693
698
|
if (isValidNumber(newValue, 0, 100))
|
694
699
|
this.airPurifier?.setAttribute(FanControl.Cluster.id, 'percentCurrent', newValue, this.airPurifier?.log);
|
695
700
|
}, this.airPurifier.log);
|
@@ -791,6 +796,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
791
796
|
}
|
792
797
|
await this.fan?.subscribeAttribute(FanControl.Cluster.id, 'fanMode', (newValue, oldValue, context) => {
|
793
798
|
this.fan?.log.info(`Fan mode changed from ${this.fanModeLookup[oldValue]} to ${this.fanModeLookup[newValue]} context: ${context.offline === true ? 'offline' : 'online'}`);
|
799
|
+
if (context.offline === true)
|
800
|
+
return;
|
794
801
|
if (newValue === FanControl.FanMode.Off) {
|
795
802
|
this.fan?.setAttribute(FanControl.Cluster.id, 'percentSetting', 0, this.fan?.log);
|
796
803
|
this.fan?.setAttribute(FanControl.Cluster.id, 'percentCurrent', 0, this.fan?.log);
|
@@ -818,11 +825,15 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
818
825
|
}, this.fan.log);
|
819
826
|
await this.fan?.subscribeAttribute(FanControl.Cluster.id, 'percentSetting', (newValue, oldValue, context) => {
|
820
827
|
this.fan?.log.info(`Percent setting changed from ${oldValue} to ${newValue} context: ${context.offline === true ? 'offline' : 'online'}`);
|
828
|
+
if (context.offline === true)
|
829
|
+
return;
|
821
830
|
if (isValidNumber(newValue, 0, 100))
|
822
831
|
this.fan?.setAttribute(FanControl.Cluster.id, 'percentCurrent', newValue, this.fan?.log);
|
823
832
|
}, this.fan.log);
|
824
833
|
await this.fan?.subscribeAttribute(FanControl.Cluster.id, 'speedSetting', (newValue, oldValue, context) => {
|
825
834
|
this.fan?.log.info(`Speed setting changed from ${oldValue} to ${newValue} context: ${context.offline === true ? 'offline' : 'online'}`);
|
835
|
+
if (context.offline === true)
|
836
|
+
return;
|
826
837
|
if (isValidNumber(newValue, 0, 100))
|
827
838
|
this.fan?.setAttribute(FanControl.Cluster.id, 'speedCurrent', newValue, this.fan?.log);
|
828
839
|
}, this.fan.log);
|
@@ -966,11 +977,22 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
966
977
|
this.bridgedDevices.set(robot.deviceName ?? '', robot);
|
967
978
|
}
|
968
979
|
}
|
969
|
-
|
970
|
-
this.setSelectDevice(
|
971
|
-
if (this.validateDevice(
|
972
|
-
await this.registerDevice(
|
973
|
-
this.bridgedDevices.set(
|
980
|
+
this.waterHeater = new WaterHeater('Water Heater', '3456177820');
|
981
|
+
this.setSelectDevice(this.waterHeater.serialNumber ?? '', this.waterHeater.deviceName ?? '', undefined, 'hub');
|
982
|
+
if (this.validateDevice(this.waterHeater.deviceName ?? '')) {
|
983
|
+
await this.registerDevice(this.waterHeater);
|
984
|
+
this.bridgedDevices.set(this.waterHeater.deviceName ?? '', this.waterHeater);
|
985
|
+
}
|
986
|
+
this.evse = new Evse('Evse', '3456127820', 1, [
|
987
|
+
{ label: 'On demand', mode: 1, modeTags: [{ value: EnergyEvseMode.ModeTag.Manual }] },
|
988
|
+
{ label: 'Scheduled', mode: 2, modeTags: [{ value: EnergyEvseMode.ModeTag.TimeOfUse }] },
|
989
|
+
{ label: 'Solar Charging', mode: 3, modeTags: [{ value: EnergyEvseMode.ModeTag.SolarCharging }] },
|
990
|
+
{ label: 'Solar Charging Scheduled', mode: 4, modeTags: [{ value: EnergyEvseMode.ModeTag.SolarCharging }, { value: EnergyEvseMode.ModeTag.TimeOfUse }] },
|
991
|
+
]);
|
992
|
+
this.setSelectDevice(this.evse.serialNumber ?? '', this.evse.deviceName ?? '', undefined, 'hub');
|
993
|
+
if (this.validateDevice(this.evse.deviceName ?? '')) {
|
994
|
+
await this.registerDevice(this.evse);
|
995
|
+
this.bridgedDevices.set(this.evse.deviceName ?? '', this.evse);
|
974
996
|
}
|
975
997
|
const laundryWasherDevice = new Appliances(laundryWasher, 'Laundry Washer', '1234567890');
|
976
998
|
this.setSelectDevice(laundryWasherDevice.serialNumber ?? '', laundryWasherDevice.deviceName ?? '', undefined, 'hub');
|
package/npm-shrinkwrap.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "matterbridge-example-dynamic-platform",
|
3
|
-
"version": "1.2.
|
3
|
+
"version": "1.2.4-dev-20250612-b04ef65",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "matterbridge-example-dynamic-platform",
|
9
|
-
"version": "1.2.
|
9
|
+
"version": "1.2.4-dev-20250612-b04ef65",
|
10
10
|
"license": "MIT",
|
11
11
|
"dependencies": {
|
12
12
|
"node-ansi-logger": "3.0.1",
|