matterbridge-example-dynamic-platform 1.1.2 → 1.1.4-dev.1
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 +31 -2
- package/README.md +9 -4
- package/dist/index.js +0 -10
- package/dist/platform.js +244 -131
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/platform.d.ts +0 -43
- package/dist/platform.d.ts.map +0 -1
- package/dist/platform.js.map +0 -1
package/CHANGELOG.md
CHANGED
@@ -4,10 +4,39 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
|
5
5
|
If you like this project and find it useful, please consider giving it a star on GitHub at https://github.com/Luligu/matterbridge-example-dynamic-platform and sponsoring it.
|
6
6
|
|
7
|
+
## [1.1.4-dev.1] - 2024-12-17
|
8
|
+
|
9
|
+
- [package]: Added thermostat Heat only with two external temperature sensors (tagged like Indoor and Outdoor).
|
10
|
+
- [package]: Added thermostat Cool only.
|
11
|
+
- [package]: Added an airPurifier device with temperature and humidity sensor (supported by Apple Home).
|
12
|
+
- [package]: Added a pumpDevice device.
|
13
|
+
- [package]: Added a waterValve device.
|
14
|
+
- [package]: Require matterbridge 1.6.7.
|
15
|
+
- [package]: Updated dependencies.
|
16
|
+
|
17
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
18
|
+
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
19
|
+
</a>
|
20
|
+
|
21
|
+
## [1.1.3] - 2024-12-16
|
22
|
+
|
23
|
+
- [package]: Added thermostat Heat only with two external temperature sensors (tagged like Indoor and Outdoor).
|
24
|
+
- [package]: Added thermostat Cool only.
|
25
|
+
- [package]: Added an airPurifier device with temperature and humidity sensor (supported by Apple Home).
|
26
|
+
- [package]: Added a pumpDevice device.
|
27
|
+
- [package]: Added a waterValve device.
|
28
|
+
- [package]: Require matterbridge 1.6.7.
|
29
|
+
- [package]: Updated dependencies.
|
30
|
+
|
31
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
32
|
+
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
|
33
|
+
</a>
|
34
|
+
|
7
35
|
## [1.1.2] - 2024-12-12
|
8
36
|
|
9
|
-
- [package]: Added the Matter 1.3 airConditioner device.
|
10
|
-
- [package]: Require matterbridge 1.6.6
|
37
|
+
- [package]: Added the Matter 1.3 airConditioner device (not supported by Apple Home).
|
38
|
+
- [package]: Require matterbridge 1.6.6.
|
39
|
+
- [package]: Added Jest test with 100% coverage.
|
11
40
|
- [package]: Updated package.
|
12
41
|
- [package]: Updated dependencies.
|
13
42
|
|
package/README.md
CHANGED
@@ -22,20 +22,25 @@ It exposes:
|
|
22
22
|
- a light with onOff
|
23
23
|
- a light with onOff and levelControl (dimmer)
|
24
24
|
- a light with onOff, levelControl and colorControl (with XY, HS and CT) clusters
|
25
|
-
- a light with onOff, levelControl and colorControl (with HS
|
26
|
-
- a light with onOff, levelControl and colorControl (with XY
|
25
|
+
- a light with onOff, levelControl and colorControl (with HS and CT) clusters
|
26
|
+
- a light with onOff, levelControl and colorControl (with XY and CT) clusters
|
27
27
|
- a light with onOff, levelControl and colorControl (with CT only) clusters
|
28
28
|
- an outlet (plug) with onOff cluster
|
29
29
|
- a cover with windowCovering cluster
|
30
30
|
- a lock with doorLock cluster
|
31
|
-
- a thermo with thermostat cluster and 3 sub endpoints with flowMeasurement cluster, temperatureMeasurement cluster
|
31
|
+
- a thermo autoMode (i.e. with Auto Heat and Cool features) with thermostat cluster and 3 sub endpoints with flowMeasurement cluster, temperatureMeasurement cluster
|
32
32
|
and relativeHumidityMeasurement cluster (to show how to create a composed device with sub endpoints)
|
33
|
-
-
|
33
|
+
- a thermo heat only with two external temperature sensors (tagged like Indoor and Outdoor)
|
34
|
+
- a thermo cool only
|
34
35
|
- a fan with FanControl cluster
|
35
36
|
- a rainSensor device
|
36
37
|
- a waterFreezeDetector device
|
37
38
|
- a waterLeakDetector device
|
38
39
|
- a smokeCoAlarm device
|
40
|
+
- an airConditioner device
|
41
|
+
- an airPurifier device with temperature and humidity sensor (supported by Apple Home)
|
42
|
+
- a pumpDevice device
|
43
|
+
- a waterValve device
|
39
44
|
|
40
45
|
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) and how to subscribe to attributes.
|
41
46
|
|
package/dist/index.js
CHANGED
@@ -1,14 +1,4 @@
|
|
1
1
|
import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
|
2
|
-
/**
|
3
|
-
* This is the standard interface for Matterbridge plugins.
|
4
|
-
* Each plugin should export a default function that follows this signature.
|
5
|
-
*
|
6
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
7
|
-
* @param {AnsiLogger} log - The logger instance.
|
8
|
-
* @param {PlatformConfig} config - The platform configuration.
|
9
|
-
* @returns {ExampleMatterbridgeDynamicPlatform} The initialized platform.
|
10
|
-
*/
|
11
2
|
export default function initializePlugin(matterbridge, log, config) {
|
12
3
|
return new ExampleMatterbridgeDynamicPlatform(matterbridge, log, config);
|
13
4
|
}
|
14
|
-
//# sourceMappingURL=index.js.map
|
package/dist/platform.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { AirQuality, AirQualityCluster, BooleanStateCluster, BooleanStateConfiguration, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, ColorControl, ColorControlCluster,
|
2
|
-
import {
|
1
|
+
import { AirQuality, AirQualityCluster, BooleanStateCluster, BooleanStateConfiguration, CarbonDioxideConcentrationMeasurement, CarbonMonoxideConcentrationMeasurement, ColorControl, ColorControlCluster, DoorLock, DoorLockCluster, FanControl, FanControlCluster, FlowMeasurement, FlowMeasurementCluster, FormaldehydeConcentrationMeasurement, LevelControlCluster, MatterbridgeEndpoint, NitrogenDioxideConcentrationMeasurement, OnOffCluster, OzoneConcentrationMeasurement, Pm10ConcentrationMeasurement, Pm1ConcentrationMeasurement, Pm25ConcentrationMeasurement, RadonConcentrationMeasurement, RelativeHumidityMeasurement, RelativeHumidityMeasurementCluster, SmokeCoAlarm, SmokeCoAlarmCluster, TemperatureMeasurement, TemperatureMeasurementCluster, Thermostat, ThermostatCluster, TotalVolatileOrganicCompoundsConcentrationMeasurement, WindowCovering, WindowCoveringCluster, airConditioner, airQualitySensor, bridgedNode, colorTemperatureLight, coverDevice, dimmableLight, doorLockDevice, fanDevice, flowSensor, humiditySensor, onOffLight, onOffOutlet, onOffSwitch, powerSource, rainSensor, smokeCoAlarm, temperatureSensor, thermostatDevice, waterFreezeDetector, waterLeakDetector, LocationTag, airPurifier, pumpDevice, waterValve, } from 'matterbridge';
|
2
|
+
import { MatterbridgeDevice, MatterbridgeDynamicPlatform } from 'matterbridge';
|
3
3
|
import { isValidBoolean, isValidNumber } from 'matterbridge/utils';
|
4
4
|
export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
|
5
5
|
switch;
|
@@ -12,7 +12,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
12
12
|
outlet;
|
13
13
|
cover;
|
14
14
|
lock;
|
15
|
-
|
15
|
+
thermoAuto;
|
16
|
+
thermoHeat;
|
17
|
+
thermoCool;
|
16
18
|
fan;
|
17
19
|
waterLeak;
|
18
20
|
waterFreeze;
|
@@ -20,6 +22,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
20
22
|
smoke;
|
21
23
|
airQuality;
|
22
24
|
airConditioner;
|
25
|
+
airPurifier;
|
26
|
+
pump;
|
27
|
+
valve;
|
23
28
|
switchInterval;
|
24
29
|
lightInterval;
|
25
30
|
outletInterval;
|
@@ -34,6 +39,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
34
39
|
airQualityInterval;
|
35
40
|
airConditionerInterval;
|
36
41
|
bridgedDevices = new Map();
|
42
|
+
fanModeLookup = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
|
37
43
|
async createMutableDevice(definition, options = {}, debug = false) {
|
38
44
|
let device;
|
39
45
|
if (this.matterbridge.edge === true)
|
@@ -44,15 +50,13 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
44
50
|
}
|
45
51
|
constructor(matterbridge, log, config) {
|
46
52
|
super(matterbridge, log, config);
|
47
|
-
|
48
|
-
|
49
|
-
throw new Error(`This plugin requires Matterbridge version >= "1.6.6". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend.`);
|
53
|
+
if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('1.6.7')) {
|
54
|
+
throw new Error(`This plugin requires Matterbridge version >= "1.6.7". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend.`);
|
50
55
|
}
|
51
56
|
this.log.info('Initializing platform:', this.config.name);
|
52
57
|
}
|
53
58
|
async onStart(reason) {
|
54
59
|
this.log.info('onStart called with reason:', reason ?? 'none');
|
55
|
-
// Create a switch device
|
56
60
|
this.switch = await this.createMutableDevice([onOffSwitch, bridgedNode], { uniqueStorageKey: 'Switch' }, this.config.debug);
|
57
61
|
this.switch.log.logName = 'Switch';
|
58
62
|
this.switch.createDefaultIdentifyClusterServer();
|
@@ -75,8 +79,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
75
79
|
await this.switch?.setAttribute(OnOffCluster.id, 'onOff', false, this.switch.log, this.switch);
|
76
80
|
this.switch?.log.info('Command off called');
|
77
81
|
});
|
78
|
-
|
79
|
-
this.lightOnOff = await this.createMutableDevice([DeviceTypes.ON_OFF_LIGHT, bridgedNode], { uniqueStorageKey: 'Light (on/off)' }, this.config.debug);
|
82
|
+
this.lightOnOff = await this.createMutableDevice([onOffLight, bridgedNode], { uniqueStorageKey: 'Light (on/off)' }, this.config.debug);
|
80
83
|
this.lightOnOff.log.logName = 'Light (on/off)';
|
81
84
|
this.lightOnOff.createDefaultIdentifyClusterServer();
|
82
85
|
this.lightOnOff.createDefaultGroupsClusterServer();
|
@@ -98,8 +101,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
98
101
|
await this.light?.setAttribute(OnOffCluster.id, 'onOff', false, this.lightOnOff?.log, this.lightOnOff);
|
99
102
|
this.lightOnOff?.log.info('Command off called');
|
100
103
|
});
|
101
|
-
|
102
|
-
this.dimmer = await this.createMutableDevice([DeviceTypes.DIMMABLE_LIGHT, bridgedNode], { uniqueStorageKey: 'Dimmer' }, this.config.debug);
|
104
|
+
this.dimmer = await this.createMutableDevice([dimmableLight, bridgedNode], { uniqueStorageKey: 'Dimmer' }, this.config.debug);
|
103
105
|
this.dimmer.log.logName = 'Dimmer';
|
104
106
|
this.dimmer.createDefaultIdentifyClusterServer();
|
105
107
|
this.dimmer.createDefaultGroupsClusterServer();
|
@@ -130,8 +132,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
130
132
|
await this.dimmer?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.dimmer.log, this.dimmer);
|
131
133
|
this.dimmer?.log.debug(`Command moveToLevelWithOnOff called request: ${level}`);
|
132
134
|
});
|
133
|
-
|
134
|
-
this.light = await this.createMutableDevice([DeviceTypes.COLOR_TEMPERATURE_LIGHT, bridgedNode], { uniqueStorageKey: 'Light (XY, HS and CT)' }, this.config.debug);
|
135
|
+
this.light = await this.createMutableDevice([colorTemperatureLight, bridgedNode], { uniqueStorageKey: 'Light (XY, HS and CT)' }, this.config.debug);
|
135
136
|
this.light.log.logName = 'Light (XY, HS and CT)';
|
136
137
|
this.light.createDefaultIdentifyClusterServer();
|
137
138
|
this.light.createDefaultGroupsClusterServer();
|
@@ -185,8 +186,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
185
186
|
await this.light?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', request.colorTemperatureMireds, this.light?.log, this.light);
|
186
187
|
this.light?.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
|
187
188
|
});
|
188
|
-
|
189
|
-
this.lightHS = await this.createMutableDevice([DeviceTypes.COLOR_TEMPERATURE_LIGHT, bridgedNode], { uniqueStorageKey: 'Light (HS)' }, this.config.debug);
|
189
|
+
this.lightHS = await this.createMutableDevice([colorTemperatureLight, bridgedNode], { uniqueStorageKey: 'Light (HS)' }, this.config.debug);
|
190
190
|
this.lightHS.log.logName = 'Light (HS, CT)';
|
191
191
|
this.lightHS.createDefaultIdentifyClusterServer();
|
192
192
|
this.lightHS.createDefaultGroupsClusterServer();
|
@@ -195,7 +195,6 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
195
195
|
this.lightHS.createDefaultOnOffClusterServer();
|
196
196
|
this.lightHS.createDefaultLevelControlClusterServer();
|
197
197
|
this.lightHS.createHsColorControlClusterServer();
|
198
|
-
// await this.lightHS.configureColorControlCluster(true, false, false, ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
|
199
198
|
this.lightHS.addDeviceType(powerSource);
|
200
199
|
this.lightHS.createDefaultPowerSourceWiredClusterServer();
|
201
200
|
await this.registerDevice(this.lightHS);
|
@@ -236,8 +235,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
236
235
|
await this.light?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', request.colorTemperatureMireds, this.light?.log, this.light);
|
237
236
|
this.light?.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
|
238
237
|
});
|
239
|
-
|
240
|
-
this.lightXY = await this.createMutableDevice([DeviceTypes.COLOR_TEMPERATURE_LIGHT, bridgedNode], { uniqueStorageKey: 'Light (XY)' }, this.config.debug);
|
238
|
+
this.lightXY = await this.createMutableDevice([colorTemperatureLight, bridgedNode], { uniqueStorageKey: 'Light (XY)' }, this.config.debug);
|
241
239
|
this.lightXY.log.logName = 'Light (XY, CT)';
|
242
240
|
this.lightXY.createDefaultIdentifyClusterServer();
|
243
241
|
this.lightXY.createDefaultGroupsClusterServer();
|
@@ -246,7 +244,6 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
246
244
|
this.lightXY.createDefaultOnOffClusterServer();
|
247
245
|
this.lightXY.createDefaultLevelControlClusterServer();
|
248
246
|
this.lightXY.createXyColorControlClusterServer();
|
249
|
-
// await this.lightXY.configureColorControlCluster(false, true, false, ColorControl.ColorMode.CurrentXAndCurrentY);
|
250
247
|
this.lightXY.addDeviceType(powerSource);
|
251
248
|
this.lightXY.createDefaultPowerSourceWiredClusterServer();
|
252
249
|
await this.registerDevice(this.lightXY);
|
@@ -279,8 +276,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
279
276
|
await this.light?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', request.colorTemperatureMireds, this.light?.log, this.light);
|
280
277
|
this.light?.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
|
281
278
|
});
|
282
|
-
|
283
|
-
this.lightCT = await this.createMutableDevice([DeviceTypes.COLOR_TEMPERATURE_LIGHT, bridgedNode], { uniqueStorageKey: 'Light (CT)' }, this.config.debug);
|
279
|
+
this.lightCT = await this.createMutableDevice([colorTemperatureLight, bridgedNode], { uniqueStorageKey: 'Light (CT)' }, this.config.debug);
|
284
280
|
this.lightCT.log.logName = 'Light (CT)';
|
285
281
|
this.lightCT.createDefaultIdentifyClusterServer();
|
286
282
|
this.lightCT.createDefaultGroupsClusterServer();
|
@@ -289,7 +285,6 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
289
285
|
this.lightCT.createDefaultOnOffClusterServer();
|
290
286
|
this.lightCT.createDefaultLevelControlClusterServer();
|
291
287
|
this.lightCT.createCtColorControlClusterServer();
|
292
|
-
// await this.lightCT.configureColorControlCluster(false, false, true, ColorControl.ColorMode.ColorTemperatureMireds);
|
293
288
|
this.lightCT.addDeviceType(powerSource);
|
294
289
|
this.lightCT.createDefaultPowerSourceReplaceableBatteryClusterServer(70);
|
295
290
|
await this.registerDevice(this.lightCT);
|
@@ -317,8 +312,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
317
312
|
await this.lightCT?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', request.colorTemperatureMireds, this.lightCT?.log, this.lightCT);
|
318
313
|
this.lightCT?.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds}`);
|
319
314
|
});
|
320
|
-
|
321
|
-
this.outlet = await this.createMutableDevice([DeviceTypes.ON_OFF_PLUGIN_UNIT, bridgedNode], { uniqueStorageKey: 'Outlet' }, this.config.debug);
|
315
|
+
this.outlet = await this.createMutableDevice([onOffOutlet, bridgedNode], { uniqueStorageKey: 'Outlet' }, this.config.debug);
|
322
316
|
this.outlet.log.logName = 'Outlet';
|
323
317
|
this.outlet.createDefaultIdentifyClusterServer();
|
324
318
|
this.outlet.createDefaultGroupsClusterServer();
|
@@ -340,9 +334,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
340
334
|
await this.outlet?.setAttribute(OnOffCluster.id, 'onOff', false, this.outlet?.log, this.outlet);
|
341
335
|
this.outlet?.log.info('Command off called');
|
342
336
|
});
|
343
|
-
|
344
|
-
// Matter uses 10000 = fully closed 0 = fully opened
|
345
|
-
this.cover = await this.createMutableDevice([DeviceTypes.WINDOW_COVERING, bridgedNode], { uniqueStorageKey: 'Cover' }, this.config.debug);
|
337
|
+
this.cover = await this.createMutableDevice([coverDevice, bridgedNode], { uniqueStorageKey: 'Cover' }, this.config.debug);
|
346
338
|
this.cover.log.logName = 'Cover';
|
347
339
|
this.cover.createDefaultIdentifyClusterServer();
|
348
340
|
this.cover.createDefaultGroupsClusterServer();
|
@@ -375,8 +367,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
375
367
|
await this.cover?.setWindowCoveringCurrentTargetStatus(liftPercent100thsValue, liftPercent100thsValue, WindowCovering.MovementStatus.Stopped);
|
376
368
|
this.cover?.log.info(`Command goToLiftPercentage ${liftPercent100thsValue} called`);
|
377
369
|
});
|
378
|
-
|
379
|
-
this.lock = await this.createMutableDevice([DeviceTypes.DOOR_LOCK, bridgedNode], { uniqueStorageKey: 'Lock' }, this.config.debug);
|
370
|
+
this.lock = await this.createMutableDevice([doorLockDevice, bridgedNode], { uniqueStorageKey: 'Lock' }, this.config.debug);
|
380
371
|
this.lock.log.logName = 'Lock';
|
381
372
|
this.lock.createDefaultIdentifyClusterServer();
|
382
373
|
this.lock.createDefaultBridgedDeviceBasicInformationClusterServer('Lock', '0x96352164', 0xfff1, 'Matterbridge', 'Matterbridge Lock', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
@@ -396,63 +387,163 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
396
387
|
await this.lock?.setAttribute(DoorLockCluster.id, 'lockState', DoorLock.LockState.Unlocked, this.lock?.log, this.lock);
|
397
388
|
this.lock?.log.info('Command unlockDoor called');
|
398
389
|
});
|
399
|
-
|
400
|
-
this.
|
401
|
-
this.
|
402
|
-
this.
|
403
|
-
this.
|
404
|
-
this.
|
405
|
-
this.
|
406
|
-
this.
|
407
|
-
this.
|
408
|
-
this.
|
409
|
-
const flowChild = this.thermo.addChildDeviceTypeWithClusterServer('Flow', [DeviceTypes.FLOW_SENSOR], [FlowMeasurement.Cluster.id]);
|
390
|
+
this.thermoAuto = await this.createMutableDevice([thermostatDevice, bridgedNode], { uniqueStorageKey: 'ThermostatAuto' }, this.config.debug);
|
391
|
+
this.thermoAuto.log.logName = 'Thermostat (AutoMode)';
|
392
|
+
this.thermoAuto.createDefaultIdentifyClusterServer();
|
393
|
+
this.thermoAuto.createDefaultGroupsClusterServer();
|
394
|
+
this.thermoAuto.createDefaultScenesClusterServer();
|
395
|
+
this.thermoAuto.createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (AutoMode)', '0x96382164A', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
396
|
+
this.thermoAuto.createDefaultThermostatClusterServer(20, 18, 22);
|
397
|
+
this.thermoAuto.addDeviceType(powerSource);
|
398
|
+
this.thermoAuto.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
|
399
|
+
const flowChild = this.thermoAuto.addChildDeviceTypeWithClusterServer('Flow', [flowSensor], [FlowMeasurement.Cluster.id]);
|
410
400
|
flowChild.getClusterServer(FlowMeasurement.Cluster)?.setMeasuredValueAttribute(1 * 10);
|
411
|
-
const tempChild = this.
|
401
|
+
const tempChild = this.thermoAuto.addChildDeviceTypeWithClusterServer('Temperature', [temperatureSensor], [TemperatureMeasurement.Cluster.id]);
|
412
402
|
tempChild.getClusterServer(TemperatureMeasurement.Cluster)?.setMeasuredValueAttribute(41 * 100);
|
413
|
-
const humidityChild = this.
|
403
|
+
const humidityChild = this.thermoAuto.addChildDeviceTypeWithClusterServer('Humidity', [humiditySensor], [RelativeHumidityMeasurement.Cluster.id]);
|
414
404
|
humidityChild.getClusterServer(RelativeHumidityMeasurement.Cluster)?.setMeasuredValueAttribute(80 * 100);
|
415
|
-
await this.registerDevice(this.
|
416
|
-
this.bridgedDevices.set(this.
|
417
|
-
this.
|
418
|
-
this.
|
405
|
+
await this.registerDevice(this.thermoAuto);
|
406
|
+
this.bridgedDevices.set(this.thermoAuto.deviceName ?? '', this.thermoAuto);
|
407
|
+
this.thermoAuto.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
408
|
+
this.thermoAuto?.log.info(`Command identify called identifyTime ${identifyTime}`);
|
419
409
|
});
|
420
|
-
this.
|
410
|
+
this.thermoAuto.addCommandHandler('triggerEffect', async ({ request: { effectIdentifier, effectVariant } }) => {
|
411
|
+
this.thermoAuto?.log.info(`Command identify called effectIdentifier ${effectIdentifier} effectVariant ${effectVariant}`);
|
412
|
+
});
|
413
|
+
this.thermoAuto.addCommandHandler('setpointRaiseLower', async ({ request: { mode, amount } }) => {
|
421
414
|
const lookupSetpointAdjustMode = ['Heat', 'Cool', 'Both'];
|
422
|
-
this.
|
415
|
+
this.thermoAuto?.log.info(`Command setpointRaiseLower called with mode: ${lookupSetpointAdjustMode[mode]} amount: ${amount / 10}`);
|
423
416
|
if (mode === Thermostat.SetpointRaiseLowerMode.Heat || mode === Thermostat.SetpointRaiseLowerMode.Both) {
|
424
|
-
const setpoint = this.
|
425
|
-
await this.
|
426
|
-
this.
|
417
|
+
const setpoint = this.thermoAuto?.getAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', this.thermoAuto?.log) / 100 + amount / 10;
|
418
|
+
await this.thermoAuto?.setAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', setpoint * 100, this.thermoAuto?.log);
|
419
|
+
this.thermoAuto?.log.info('Set occupiedHeatingSetpoint:', setpoint);
|
427
420
|
}
|
428
421
|
if (mode === Thermostat.SetpointRaiseLowerMode.Cool || mode === Thermostat.SetpointRaiseLowerMode.Both) {
|
429
|
-
const setpoint = this.
|
430
|
-
await this.
|
431
|
-
this.
|
422
|
+
const setpoint = this.thermoAuto?.getAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', this.thermoAuto?.log) / 100 + amount / 10;
|
423
|
+
await this.thermoAuto?.setAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', setpoint * 100, this.thermoAuto?.log);
|
424
|
+
this.thermoAuto?.log.info('Set occupiedCoolingSetpoint:', setpoint);
|
432
425
|
}
|
433
426
|
});
|
434
|
-
this.
|
427
|
+
this.thermoAuto.subscribeAttribute(ThermostatCluster.id, 'systemMode', async (value) => {
|
428
|
+
const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
|
429
|
+
this.thermoAuto?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
|
430
|
+
}, this.thermoAuto.log, this.thermoAuto);
|
431
|
+
this.thermoAuto.subscribeAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', async (value) => {
|
432
|
+
this.thermoAuto?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
|
433
|
+
}, this.thermoAuto.log, this.thermoAuto);
|
434
|
+
this.thermoAuto.subscribeAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', async (value) => {
|
435
|
+
this.thermoAuto?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
|
436
|
+
}, this.thermoAuto.log, this.thermoAuto);
|
437
|
+
this.thermoHeat = await this.createMutableDevice([thermostatDevice, bridgedNode], { uniqueStorageKey: 'ThermostatHeat' }, this.config.debug);
|
438
|
+
this.thermoHeat.log.logName = 'Thermostat (Heat)';
|
439
|
+
this.thermoHeat.createDefaultIdentifyClusterServer();
|
440
|
+
this.thermoHeat.createDefaultGroupsClusterServer();
|
441
|
+
this.thermoHeat.createDefaultScenesClusterServer();
|
442
|
+
this.thermoHeat.createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (Heat)', '0x96382164H', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
443
|
+
this.thermoHeat.createDefaultHeatingThermostatClusterServer(20, 18, 5, 35);
|
444
|
+
this.thermoHeat.addDeviceType(powerSource);
|
445
|
+
this.thermoHeat.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
|
446
|
+
const heatTempIN = this.thermoHeat.addChildDeviceType('TemperatureIN', [temperatureSensor], {
|
447
|
+
tagList: [{ mfgCode: null, namespaceId: LocationTag.Indoor.namespaceId, tag: LocationTag.Indoor.tag, label: null }],
|
448
|
+
});
|
449
|
+
heatTempIN.createDefaultIdentifyClusterServer();
|
450
|
+
heatTempIN.createDefaultTemperatureMeasurementClusterServer(21 * 100);
|
451
|
+
const heatTempOUT = this.thermoHeat.addChildDeviceType('TemperatureOUT', [temperatureSensor], {
|
452
|
+
tagList: [{ mfgCode: null, namespaceId: LocationTag.Outdoor.namespaceId, tag: LocationTag.Outdoor.tag, label: null }],
|
453
|
+
});
|
454
|
+
heatTempOUT.createDefaultIdentifyClusterServer();
|
455
|
+
heatTempOUT.createDefaultTemperatureMeasurementClusterServer(15 * 100);
|
456
|
+
await this.registerDevice(this.thermoHeat);
|
457
|
+
this.bridgedDevices.set(this.thermoHeat.deviceName ?? '', this.thermoHeat);
|
458
|
+
this.thermoHeat.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
459
|
+
this.thermoHeat?.log.info(`Command identify called identifyTime ${identifyTime}`);
|
460
|
+
});
|
461
|
+
this.thermoHeat.addCommandHandler('triggerEffect', async ({ request: { effectIdentifier, effectVariant } }) => {
|
462
|
+
this.thermoHeat?.log.info(`Command identify called effectIdentifier ${effectIdentifier} effectVariant ${effectVariant}`);
|
463
|
+
});
|
464
|
+
this.thermoHeat.subscribeAttribute(ThermostatCluster.id, 'systemMode', async (value) => {
|
465
|
+
const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
|
466
|
+
this.thermoHeat?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
|
467
|
+
}, this.thermoHeat.log);
|
468
|
+
this.thermoHeat.subscribeAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', async (value) => {
|
469
|
+
this.thermoHeat?.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
|
470
|
+
}, this.thermoHeat.log);
|
471
|
+
this.thermoCool = await this.createMutableDevice([thermostatDevice, bridgedNode], { uniqueStorageKey: 'ThermostatCool' }, this.config.debug);
|
472
|
+
this.thermoCool.log.logName = 'Thermostat (Cool)';
|
473
|
+
this.thermoCool.createDefaultIdentifyClusterServer();
|
474
|
+
this.thermoCool.createDefaultGroupsClusterServer();
|
475
|
+
this.thermoCool.createDefaultScenesClusterServer();
|
476
|
+
this.thermoCool.createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat (Cool)', '0x96382164C', 0xfff1, 'Matterbridge', 'Matterbridge Thermostat', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
477
|
+
this.thermoCool.createDefaultCoolingThermostatClusterServer(20, 18, 5, 35);
|
478
|
+
this.thermoCool.addDeviceType(powerSource);
|
479
|
+
this.thermoCool.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
|
480
|
+
await this.registerDevice(this.thermoCool);
|
481
|
+
this.bridgedDevices.set(this.thermoCool.deviceName ?? '', this.thermoCool);
|
482
|
+
this.thermoCool.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
483
|
+
this.thermoCool?.log.info(`Command identify called identifyTime ${identifyTime}`);
|
484
|
+
});
|
485
|
+
this.thermoCool.addCommandHandler('triggerEffect', async ({ request: { effectIdentifier, effectVariant } }) => {
|
486
|
+
this.thermoCool?.log.info(`Command identify called effectIdentifier ${effectIdentifier} effectVariant ${effectVariant}`);
|
487
|
+
});
|
488
|
+
this.thermoCool.subscribeAttribute(ThermostatCluster.id, 'systemMode', async (value) => {
|
435
489
|
const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
|
436
|
-
this.
|
437
|
-
}, this.
|
438
|
-
this.
|
439
|
-
this.
|
440
|
-
}, this.
|
441
|
-
this.
|
442
|
-
|
443
|
-
|
444
|
-
|
490
|
+
this.thermoCool?.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
|
491
|
+
}, this.thermoCool.log);
|
492
|
+
this.thermoCool.subscribeAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', async (value) => {
|
493
|
+
this.thermoCool?.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
|
494
|
+
}, this.thermoCool.log);
|
495
|
+
this.airPurifier = await this.createMutableDevice([airPurifier, temperatureSensor, humiditySensor, bridgedNode], { uniqueStorageKey: 'Air purifier' }, this.config.debug);
|
496
|
+
this.airPurifier.log.logName = 'Air purifier';
|
497
|
+
this.airPurifier.createDefaultBridgedDeviceBasicInformationClusterServer('Air purifier', '0x96584864AP', 0xfff1, 'Matterbridge', 'Matterbridge Air purifier', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
498
|
+
this.airPurifier.createDefaultIdentifyClusterServer();
|
499
|
+
this.airPurifier.createDefaultFanControlClusterServer();
|
500
|
+
this.airPurifier.createDefaultTemperatureMeasurementClusterServer(20 * 100);
|
501
|
+
this.airPurifier.createDefaultRelativeHumidityMeasurementClusterServer(50 * 100);
|
502
|
+
this.airPurifier.addDeviceType(powerSource);
|
503
|
+
this.airPurifier.createDefaultPowerSourceWiredClusterServer();
|
504
|
+
await this.registerDevice(this.airPurifier);
|
505
|
+
this.bridgedDevices.set(this.airPurifier.deviceName ?? '', this.airPurifier);
|
506
|
+
this.airPurifier.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
507
|
+
this.airPurifier?.log.info(`Command identify called identifyTime:${identifyTime}`);
|
508
|
+
});
|
509
|
+
this.airPurifier.subscribeAttribute(FanControlCluster.id, 'fanMode', async (newValue, oldValue) => {
|
510
|
+
this.fan?.log.info(`Fan mode changed from ${this.fanModeLookup[oldValue]} to ${this.fanModeLookup[newValue]}`);
|
511
|
+
if (newValue === FanControl.FanMode.Off) {
|
512
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 0, this.airPurifier?.log);
|
513
|
+
}
|
514
|
+
else if (newValue === FanControl.FanMode.Low) {
|
515
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 33, this.airPurifier?.log);
|
516
|
+
}
|
517
|
+
else if (newValue === FanControl.FanMode.Medium) {
|
518
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 66, this.airPurifier?.log);
|
519
|
+
}
|
520
|
+
else if (newValue === FanControl.FanMode.High) {
|
521
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 100, this.airPurifier?.log);
|
522
|
+
}
|
523
|
+
else if (newValue === FanControl.FanMode.On) {
|
524
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 100, this.airPurifier?.log);
|
525
|
+
}
|
526
|
+
else if (newValue === FanControl.FanMode.Auto) {
|
527
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', 50, this.airPurifier?.log);
|
528
|
+
}
|
529
|
+
}, this.airPurifier.log);
|
530
|
+
this.airPurifier.subscribeAttribute(FanControlCluster.id, 'percentSetting', async (newValue, oldValue) => {
|
531
|
+
this.fan?.log.info(`Percent setting changed from ${oldValue} to ${newValue}`);
|
532
|
+
if (isValidNumber(newValue, 0, 100))
|
533
|
+
await this.airPurifier?.setAttribute(FanControlCluster.id, 'percentCurrent', newValue, this.airPurifier?.log);
|
534
|
+
}, this.airPurifier.log);
|
445
535
|
this.airConditioner = await this.createMutableDevice([airConditioner, bridgedNode], { uniqueStorageKey: 'Air conditioner' }, this.config.debug);
|
446
536
|
this.airConditioner.log.logName = 'Air conditioner';
|
447
|
-
this.airConditioner.createDefaultBridgedDeviceBasicInformationClusterServer('Air conditioner', '
|
537
|
+
this.airConditioner.createDefaultBridgedDeviceBasicInformationClusterServer('Air conditioner', '0x96382864AC', 0xfff1, 'Matterbridge', 'Matterbridge Air conditioner', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
448
538
|
this.airConditioner.createDefaultIdentifyClusterServer();
|
449
|
-
this.airConditioner.
|
539
|
+
this.airConditioner.createDeadFrontOnOffClusterServer(true);
|
450
540
|
this.airConditioner.createDefaultThermostatClusterServer(20, 18, 22);
|
451
|
-
this.airConditioner.createDefaultFanControlClusterServer();
|
452
|
-
this.airConditioner.createDefaultTemperatureMeasurementClusterServer(20);
|
453
|
-
this.airConditioner.createDefaultRelativeHumidityMeasurementClusterServer(50);
|
541
|
+
this.airConditioner.createDefaultFanControlClusterServer(FanControl.FanMode.Auto);
|
542
|
+
this.airConditioner.createDefaultTemperatureMeasurementClusterServer(20 * 100);
|
543
|
+
this.airConditioner.createDefaultRelativeHumidityMeasurementClusterServer(50 * 100);
|
454
544
|
this.airConditioner.addDeviceType(powerSource);
|
455
545
|
this.airConditioner.createDefaultPowerSourceWiredClusterServer();
|
546
|
+
this.airConditioner.addRequiredClusterServers(this.airConditioner);
|
456
547
|
await this.registerDevice(this.airConditioner);
|
457
548
|
this.bridgedDevices.set(this.airConditioner.deviceName ?? '', this.airConditioner);
|
458
549
|
this.airConditioner.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
@@ -460,22 +551,64 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
460
551
|
});
|
461
552
|
this.airConditioner.addCommandHandler('on', async () => {
|
462
553
|
await this.airConditioner?.setAttribute(OnOffCluster.id, 'onOff', true, this.airConditioner?.log);
|
463
|
-
this.
|
554
|
+
this.airConditioner?.log.info('Command on called');
|
555
|
+
await this.airConditioner?.setAttribute(OnOffCluster.id, 'onOff', true, this.airConditioner?.log);
|
556
|
+
await this.airConditioner?.setAttribute(ThermostatCluster.id, 'localTemperature', 20 * 100, this.airConditioner?.log);
|
557
|
+
await this.airConditioner?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', 20 * 100, this.airConditioner?.log);
|
558
|
+
await this.airConditioner?.setAttribute(RelativeHumidityMeasurementCluster.id, 'measuredValue', 50 * 100, this.airConditioner?.log);
|
559
|
+
await this.airConditioner?.setAttribute(FanControlCluster.id, 'speedSetting', 50, this.airConditioner?.log);
|
560
|
+
await this.airConditioner?.setAttribute(FanControlCluster.id, 'percentSetting', 50, this.airConditioner?.log);
|
464
561
|
});
|
465
562
|
this.airConditioner.addCommandHandler('off', async () => {
|
466
563
|
await this.airConditioner?.setAttribute(OnOffCluster.id, 'onOff', false, this.airConditioner?.log);
|
467
|
-
this.
|
468
|
-
|
469
|
-
|
470
|
-
|
564
|
+
await this.airConditioner?.setAttribute(ThermostatCluster.id, 'localTemperature', null, this.airConditioner?.log);
|
565
|
+
await this.airConditioner?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', null, this.airConditioner?.log);
|
566
|
+
await this.airConditioner?.setAttribute(RelativeHumidityMeasurementCluster.id, 'measuredValue', null, this.airConditioner?.log);
|
567
|
+
await this.airConditioner?.setAttribute(FanControlCluster.id, 'speedSetting', null, this.airConditioner?.log);
|
568
|
+
await this.airConditioner?.setAttribute(FanControlCluster.id, 'percentSetting', null, this.airConditioner?.log);
|
569
|
+
this.airConditioner?.log.info('Command off called');
|
570
|
+
});
|
571
|
+
this.pump = await this.createMutableDevice([pumpDevice, bridgedNode], { uniqueStorageKey: 'Pump' }, this.config.debug);
|
572
|
+
this.pump.log.logName = 'Pump';
|
573
|
+
this.pump.createDefaultBridgedDeviceBasicInformationClusterServer('Pump', '0x96382864PUMP', 0xfff1, 'Matterbridge', 'Matterbridge Pump', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
574
|
+
this.pump.createDefaultIdentifyClusterServer();
|
575
|
+
this.pump.createDefaultOnOffClusterServer(true);
|
576
|
+
this.pump.createDefaultPumpConfigurationAndControlClusterServer();
|
577
|
+
this.pump.addDeviceType(powerSource);
|
578
|
+
this.pump.createDefaultPowerSourceWiredClusterServer();
|
579
|
+
await this.registerDevice(this.pump);
|
580
|
+
this.bridgedDevices.set(this.pump.deviceName ?? '', this.pump);
|
581
|
+
this.pump.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
582
|
+
this.pump?.log.info(`Command identify called identifyTime:${identifyTime}`);
|
583
|
+
});
|
584
|
+
this.pump.addCommandHandler('on', async () => {
|
585
|
+
await this.pump?.setAttribute(OnOffCluster.id, 'onOff', true, this.pump?.log);
|
586
|
+
this.pump?.log.info('Command on called');
|
587
|
+
});
|
588
|
+
this.pump.addCommandHandler('off', async () => {
|
589
|
+
await this.pump?.setAttribute(OnOffCluster.id, 'onOff', false, this.pump?.log);
|
590
|
+
this.pump?.log.info('Command off called');
|
591
|
+
});
|
592
|
+
this.valve = await this.createMutableDevice([waterValve, bridgedNode], { uniqueStorageKey: 'Water valve' }, this.config.debug);
|
593
|
+
this.valve.log.logName = 'Water valve';
|
594
|
+
this.valve.createDefaultBridgedDeviceBasicInformationClusterServer('Water valve', '0x96382864WV', 0xfff1, 'Matterbridge', 'Matterbridge Water valve', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
595
|
+
this.valve.createDefaultIdentifyClusterServer();
|
596
|
+
this.valve.createDefaultValveConfigurationAndControlClusterServer();
|
597
|
+
this.valve.addDeviceType(powerSource);
|
598
|
+
this.valve.createDefaultPowerSourceWiredClusterServer();
|
599
|
+
await this.registerDevice(this.valve);
|
600
|
+
this.bridgedDevices.set(this.valve.deviceName ?? '', this.valve);
|
601
|
+
this.valve.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
602
|
+
this.valve?.log.info(`Command identify called identifyTime:${identifyTime}`);
|
603
|
+
});
|
604
|
+
this.fan = await this.createMutableDevice([fanDevice, bridgedNode], { uniqueStorageKey: 'Fan' }, this.config.debug);
|
471
605
|
this.fan.log.logName = 'Fan';
|
472
606
|
this.fan.createDefaultBridgedDeviceBasicInformationClusterServer('Fan', 'serial_980545631228', 0xfff1, 'Matterbridge', 'Matterbridge Fan', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
473
|
-
this.fan.addDeviceTypeWithClusterServer([
|
607
|
+
this.fan.addDeviceTypeWithClusterServer([fanDevice], []);
|
474
608
|
await this.registerDevice(this.fan);
|
475
609
|
this.bridgedDevices.set(this.fan.deviceName ?? '', this.fan);
|
476
|
-
const fanModeLookup = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
|
477
610
|
this.fan.subscribeAttribute(FanControlCluster.id, 'fanMode', async (newValue, oldValue) => {
|
478
|
-
this.fan?.log.info(`Fan mode changed from ${fanModeLookup[oldValue]} to ${fanModeLookup[newValue]}`);
|
611
|
+
this.fan?.log.info(`Fan mode changed from ${this.fanModeLookup[oldValue]} to ${this.fanModeLookup[newValue]}`);
|
479
612
|
if (newValue === FanControl.FanMode.Off) {
|
480
613
|
await this.fan?.setAttribute(FanControlCluster.id, 'percentCurrent', 0, this.fan?.log);
|
481
614
|
}
|
@@ -499,17 +632,18 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
499
632
|
this.fan?.log.info(`Percent setting changed from ${oldValue} to ${newValue}`);
|
500
633
|
if (isValidNumber(newValue, 0, 100))
|
501
634
|
await this.fan?.setAttribute(FanControlCluster.id, 'percentCurrent', newValue, this.fan?.log);
|
502
|
-
}, this.fan.log
|
635
|
+
}, this.fan.log);
|
503
636
|
this.fan.subscribeAttribute(FanControlCluster.id, 'speedSetting', async (newValue, oldValue) => {
|
504
637
|
this.fan?.log.info(`Speed setting changed from ${oldValue} to ${newValue}`);
|
505
638
|
if (isValidNumber(newValue, 0, 100))
|
506
639
|
await this.fan?.setAttribute(FanControlCluster.id, 'speedCurrent', newValue, this.fan?.log);
|
507
|
-
}, this.fan.log
|
640
|
+
}, this.fan.log);
|
508
641
|
this.waterLeak = await this.createMutableDevice([waterLeakDetector, bridgedNode], { uniqueStorageKey: 'Water leak detector' }, this.config.debug);
|
509
642
|
this.waterLeak.log.logName = 'Water leak detector';
|
510
643
|
this.waterLeak.createDefaultBridgedDeviceBasicInformationClusterServer('Water leak detector', 'serial_98745631222', 0xfff1, 'Matterbridge', 'Matterbridge WaterLeakDetector', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
511
644
|
this.waterLeak.addDeviceTypeWithClusterServer([waterLeakDetector], [BooleanStateConfiguration.Cluster.id]);
|
512
645
|
await this.registerDevice(this.waterLeak);
|
646
|
+
this.bridgedDevices.set(this.waterLeak.deviceName ?? '', this.waterLeak);
|
513
647
|
await this.waterLeak.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.waterLeak.log);
|
514
648
|
this.waterFreeze = await this.createMutableDevice([waterFreezeDetector, bridgedNode], { uniqueStorageKey: 'Water freeze detector' }, this.config.debug);
|
515
649
|
this.waterFreeze.log.logName = 'Water freeze detector';
|
@@ -534,7 +668,6 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
534
668
|
await this.smoke.setAttribute(SmokeCoAlarmCluster.id, 'smokeState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
|
535
669
|
await this.smoke.setAttribute(SmokeCoAlarmCluster.id, 'coState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
|
536
670
|
await this.smoke.setAttribute(CarbonMonoxideConcentrationMeasurement.Cluster.id, 'measuredValue', 100, this.smoke.log);
|
537
|
-
// Create an airQuality device
|
538
671
|
this.airQuality = await this.createMutableDevice([airQualitySensor, bridgedNode], { uniqueStorageKey: 'Air quality sensor' }, this.config.debug);
|
539
672
|
this.airQuality.log.logName = 'Air quality Sensor';
|
540
673
|
this.airQuality.createDefaultBridgedDeviceBasicInformationClusterServer('Air quality sensor', 'serial_987484318322', 0xfff1, 'Matterbridge', 'Matterbridge Air Quality Sensor', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion);
|
@@ -570,10 +703,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
570
703
|
}
|
571
704
|
async onConfigure() {
|
572
705
|
this.log.info('onConfigure called');
|
573
|
-
// Set switch to off
|
574
706
|
await this.switch?.setAttribute(OnOffCluster.id, 'onOff', false, this.switch.log);
|
575
707
|
this.switch?.log.info('Set switch initial onOff to false');
|
576
|
-
// Toggle switch onOff every minute
|
577
708
|
this.switchInterval = setInterval(async () => {
|
578
709
|
const status = this.switch?.getAttribute(OnOffCluster.id, 'onOff', this.switch.log);
|
579
710
|
if (isValidBoolean(status)) {
|
@@ -581,35 +712,29 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
581
712
|
this.switch?.log.info(`Set switch onOff to ${!status}`);
|
582
713
|
}
|
583
714
|
}, 60 * 1000 + 100);
|
584
|
-
// Set light on/off to off
|
585
715
|
await this.lightOnOff?.setAttribute(OnOffCluster.id, 'onOff', false, this.lightOnOff.log);
|
586
716
|
this.lightOnOff?.log.info('Set light initial onOff to false.');
|
587
|
-
// Set light on/off to off
|
588
717
|
await this.dimmer?.setAttribute(OnOffCluster.id, 'onOff', false, this.dimmer.log);
|
589
718
|
await this.dimmer?.setAttribute(LevelControlCluster.id, 'currentLevel', 1, this.dimmer.log);
|
590
719
|
this.dimmer?.log.info(`Set dimmer initial onOff to false, currentLevel to 1.`);
|
591
|
-
// Set light to off, level to 0 and hue to 0 and saturation to 50% (pink color)
|
592
720
|
await this.light?.setAttribute(OnOffCluster.id, 'onOff', false, this.light.log);
|
593
721
|
await this.light?.setAttribute(LevelControlCluster.id, 'currentLevel', 1, this.light.log);
|
594
722
|
await this.light?.setAttribute(ColorControlCluster.id, 'currentHue', 0, this.light.log);
|
595
723
|
await this.light?.setAttribute(ColorControlCluster.id, 'currentSaturation', 128, this.light.log);
|
596
724
|
await this.light?.configureColorControlMode(ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
|
597
725
|
this.light?.log.info('Set light initial onOff to false, currentLevel to 1, hue to 0 and saturation to 50%.');
|
598
|
-
// Set light XY to true, level to 100% and XY to red
|
599
726
|
await this.lightXY?.setAttribute(OnOffCluster.id, 'onOff', true, this.lightXY.log);
|
600
727
|
await this.lightXY?.setAttribute(LevelControlCluster.id, 'currentLevel', 254, this.lightXY.log);
|
601
728
|
await this.lightXY?.setAttribute(ColorControlCluster.id, 'currentX', 0.7006 * 65536, this.lightXY.log);
|
602
729
|
await this.lightXY?.setAttribute(ColorControlCluster.id, 'currentY', 0.2993 * 65536, this.lightXY.log);
|
603
730
|
await this.lightXY?.configureColorControlMode(ColorControl.ColorMode.CurrentXAndCurrentY);
|
604
731
|
this.lightXY?.log.info('Set light XY initial onOff to true, currentLevel to 254, X to 0.7006 and Y to 0.2993.');
|
605
|
-
// Set light HS to off, level to 0 and hue to 0 and saturation to 50% (pink color)
|
606
732
|
await this.lightHS?.setAttribute(OnOffCluster.id, 'onOff', false, this.lightHS.log);
|
607
733
|
await this.lightHS?.setAttribute(LevelControlCluster.id, 'currentLevel', 1, this.lightHS.log);
|
608
734
|
await this.lightHS?.setAttribute(ColorControlCluster.id, 'currentHue', 0, this.lightHS.log);
|
609
735
|
await this.lightHS?.setAttribute(ColorControlCluster.id, 'currentSaturation', 128, this.lightHS.log);
|
610
736
|
await this.lightHS?.configureColorControlMode(ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
|
611
737
|
this.lightHS?.log.info('Set light HS initial onOff to false, currentLevel to 1, hue to 0 and saturation to 50%.');
|
612
|
-
// Set light CT to true, level to 50% and colorTemperatureMireds to 250
|
613
738
|
await this.lightCT?.setAttribute(OnOffCluster.id, 'onOff', true, this.lightCT.log);
|
614
739
|
await this.lightCT?.setAttribute(LevelControlCluster.id, 'currentLevel', 128, this.lightCT.log);
|
615
740
|
await this.lightCT?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', 250, this.lightCT.log);
|
@@ -652,11 +777,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
652
777
|
this.log.info(`Set lights currentLevel to ${level}`);
|
653
778
|
}
|
654
779
|
}
|
780
|
+
else {
|
781
|
+
this.log.error(`Invalid state ${state} or level ${level}`);
|
782
|
+
}
|
655
783
|
}, 60 * 1000 + 200);
|
656
|
-
// Set outlet to off
|
657
784
|
await this.outlet?.setAttribute(OnOffCluster.id, 'onOff', false, this.outlet.log);
|
658
785
|
this.outlet?.log.info('Set outlet initial onOff to false');
|
659
|
-
// Toggle outlet onOff every minute
|
660
786
|
this.outletInterval = setInterval(async () => {
|
661
787
|
const state = this.outlet?.getAttribute(OnOffCluster.id, 'onOff', this.outlet.log);
|
662
788
|
if (isValidBoolean(state)) {
|
@@ -664,10 +790,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
664
790
|
this.outlet?.log.info(`Set outlet onOff to ${!state}`);
|
665
791
|
}
|
666
792
|
}, 60 * 1000 + 300);
|
667
|
-
// Set cover to target = current position and status to stopped (current position is persisted in the cluster)
|
668
793
|
await this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
|
669
794
|
this.cover?.log.info('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
|
670
|
-
// Increment cover position every minute
|
671
795
|
this.coverInterval = setInterval(async () => {
|
672
796
|
let position = this.cover?.getAttribute(WindowCoveringCluster.id, 'currentPositionLiftPercent100ths', this.cover.log);
|
673
797
|
if (isValidNumber(position, 0, 10000)) {
|
@@ -678,10 +802,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
678
802
|
this.cover?.log.info(`Set cover current and target positionLiftPercent100ths to ${position} and operationalStatus to Stopped`);
|
679
803
|
}
|
680
804
|
}, 60 * 1000 + 400);
|
681
|
-
// Set lock to Locked
|
682
805
|
await this.lock?.setAttribute(DoorLockCluster.id, 'lockState', DoorLock.LockState.Locked, this.lock.log);
|
683
806
|
this.lock?.log.info('Set lock initial lockState to Locked');
|
684
|
-
// Toggle lock every minute
|
685
807
|
this.lockInterval = setInterval(async () => {
|
686
808
|
const status = this.lock?.getAttribute(DoorLockCluster.id, 'lockState', this.lock.log);
|
687
809
|
if (isValidNumber(status, DoorLock.LockState.Locked, DoorLock.LockState.Unlocked)) {
|
@@ -689,35 +811,39 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
689
811
|
this.lock?.log.info(`Set lock lockState to ${status === DoorLock.LockState.Locked ? 'Unlocked' : 'Locked'}`);
|
690
812
|
}
|
691
813
|
}, 60 * 1000 + 500);
|
692
|
-
|
693
|
-
await this.
|
694
|
-
|
695
|
-
this.
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
this.thermo?.log.info('Set thermostat ext temperature to 16°C, ext humidity to 50% and ext valve flow to 10');
|
703
|
-
// Increment localTemperature every minute
|
814
|
+
await this.thermoAuto?.setAttribute(ThermostatCluster.id, 'localTemperature', 16 * 100, this.thermoAuto.log);
|
815
|
+
await this.thermoAuto?.setAttribute(ThermostatCluster.id, 'systemMode', Thermostat.SystemMode.Auto, this.thermoAuto.log);
|
816
|
+
this.thermoAuto?.log.info('Set thermostat initial localTemperature to 16°C and mode Auto');
|
817
|
+
const temperature = this.thermoAuto?.getChildEndpointByName('Temperature');
|
818
|
+
await this.thermoAuto?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', 16 * 100, this.thermoAuto.log, temperature);
|
819
|
+
const humidity = this.thermoAuto?.getChildEndpointByName('Humidity');
|
820
|
+
await this.thermoAuto?.setAttribute(RelativeHumidityMeasurementCluster.id, 'measuredValue', 50 * 100, this.thermoAuto.log, humidity);
|
821
|
+
const flow = this.thermoAuto?.getChildEndpointByName('Flow');
|
822
|
+
await this.thermoAuto?.setAttribute(FlowMeasurementCluster.id, 'measuredValue', 10, this.thermoAuto.log, flow);
|
823
|
+
this.thermoAuto?.log.info('Set thermostat ext temperature to 16°C, ext humidity to 50% and ext valve flow to 10');
|
704
824
|
this.thermoInterval = setInterval(async () => {
|
705
|
-
let temperature = this.
|
825
|
+
let temperature = this.thermoAuto?.getAttribute(ThermostatCluster.id, 'localTemperature', this.thermoAuto.log);
|
706
826
|
if (isValidNumber(temperature, 1600, 2400)) {
|
707
827
|
temperature = temperature + 100 > 2400 ? 1600 : temperature + 100;
|
708
|
-
await this.
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
await this.
|
715
|
-
this.
|
828
|
+
await this.thermoAuto?.setAttribute(ThermostatCluster.id, 'localTemperature', temperature, this.thermoAuto.log);
|
829
|
+
await this.thermoHeat?.setAttribute(ThermostatCluster.id, 'localTemperature', temperature, this.thermoHeat.log);
|
830
|
+
const tempIn = this.thermoHeat?.getChildEndpointByName('TemperatureIN');
|
831
|
+
await tempIn?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', temperature - 50, this.thermoHeat?.log);
|
832
|
+
const tempOut = this.thermoHeat?.getChildEndpointByName('TemperatureOUT');
|
833
|
+
await tempOut?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', temperature - 400, this.thermoHeat?.log);
|
834
|
+
await this.thermoCool?.setAttribute(ThermostatCluster.id, 'localTemperature', temperature, this.thermoCool.log);
|
835
|
+
const temp = this.thermoAuto?.getChildEndpointByName('Temperature');
|
836
|
+
await this.thermoAuto?.setAttribute(TemperatureMeasurementCluster.id, 'measuredValue', temperature, this.thermoAuto.log, temp);
|
837
|
+
const humidity = this.thermoAuto?.getChildEndpointByName('Humidity');
|
838
|
+
await this.thermoAuto?.setAttribute(RelativeHumidityMeasurementCluster.id, 'measuredValue', 50 * 100, this.thermoAuto.log, humidity);
|
839
|
+
const flow = this.thermoAuto?.getChildEndpointByName('Flow');
|
840
|
+
await this.thermoAuto?.setAttribute(FlowMeasurementCluster.id, 'measuredValue', 10, this.thermoAuto.log, flow);
|
841
|
+
this.thermoAuto?.log.info(`Set thermostat localTemperature to ${temperature / 100}°C`);
|
842
|
+
this.thermoHeat?.log.info(`Set thermostat localTemperature to ${temperature / 100}°C`);
|
843
|
+
this.thermoCool?.log.info(`Set thermostat localTemperature to ${temperature / 100}°C`);
|
716
844
|
}
|
717
845
|
}, 60 * 1000 + 600);
|
718
|
-
// Set airConditioner to on
|
719
846
|
await this.airConditioner?.setAttribute(OnOffCluster.id, 'onOff', true, this.airConditioner.log);
|
720
|
-
// Increment airConditioner localTemperature every minute
|
721
847
|
this.airConditionerInterval = setInterval(async () => {
|
722
848
|
let temperature = this.airConditioner?.getAttribute(ThermostatCluster.id, 'localTemperature', this.airConditioner.log);
|
723
849
|
if (isValidNumber(temperature, 1600, 2400)) {
|
@@ -728,14 +854,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
728
854
|
this.airConditioner?.log.info(`Set airConditioner localTemperature to ${temperature / 100}°C`);
|
729
855
|
}
|
730
856
|
}, 60 * 1000 + 550);
|
731
|
-
// Set fan to auto
|
732
857
|
this.fan?.log.info('Set fan initial fanMode to Auto, percentCurrent and percentSetting to 50 and speedCurrent and speedSetting to 50');
|
733
858
|
await this.fan?.setAttribute(FanControlCluster.id, 'fanMode', FanControl.FanMode.Auto, this.fan.log);
|
734
859
|
await this.fan?.setAttribute(FanControlCluster.id, 'percentCurrent', 50, this.fan.log);
|
735
860
|
await this.fan?.setAttribute(FanControlCluster.id, 'percentSetting', 50, this.fan.log);
|
736
861
|
await this.fan?.setAttribute(FanControlCluster.id, 'speedCurrent', 50, this.fan.log);
|
737
862
|
await this.fan?.setAttribute(FanControlCluster.id, 'speedSetting', 50, this.fan.log);
|
738
|
-
// Increment fan percentCurrent every minute
|
739
863
|
this.fanInterval = setInterval(async () => {
|
740
864
|
const mode = this.fan?.getAttribute(FanControlCluster.id, 'fanMode', this.fan.log);
|
741
865
|
let value = this.fan?.getAttribute(FanControlCluster.id, 'percentCurrent', this.fan.log);
|
@@ -746,9 +870,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
746
870
|
this.fan?.log.info(`Set fan percentCurrent and percentSetting to ${value}`);
|
747
871
|
}
|
748
872
|
}, 60 * 1000 + 700);
|
749
|
-
// Set waterLeak to false
|
750
873
|
await this.waterLeak?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.waterLeak.log);
|
751
|
-
// Toggle waterLeak every minute
|
752
874
|
this.waterLeakInterval = setInterval(async () => {
|
753
875
|
let value = this.waterLeak?.getAttribute(BooleanStateCluster.id, 'stateValue', this.waterLeak.log);
|
754
876
|
if (isValidBoolean(value)) {
|
@@ -757,9 +879,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
757
879
|
this.waterLeak?.log.info(`Set waterLeak stateValue to ${value}`);
|
758
880
|
}
|
759
881
|
}, 60 * 1000 + 800);
|
760
|
-
// Set waterFreeze to false
|
761
882
|
await this.waterFreeze?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.waterFreeze.log);
|
762
|
-
// Toggle waterFreeze every minute
|
763
883
|
this.waterFreezeInterval = setInterval(async () => {
|
764
884
|
let value = this.waterFreeze?.getAttribute(BooleanStateCluster.id, 'stateValue', this.waterFreeze.log);
|
765
885
|
if (isValidBoolean(value)) {
|
@@ -768,9 +888,7 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
768
888
|
this.waterFreeze?.log.info(`Set waterFreeze stateValue to ${value}`);
|
769
889
|
}
|
770
890
|
}, 60 * 1000 + 900);
|
771
|
-
// Set rain to false
|
772
891
|
await this.rain?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.rain.log);
|
773
|
-
// Toggle rain every minute
|
774
892
|
this.rainInterval = setInterval(async () => {
|
775
893
|
let value = this.rain?.getAttribute(BooleanStateCluster.id, 'stateValue', this.rain.log);
|
776
894
|
if (isValidBoolean(value)) {
|
@@ -779,10 +897,8 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
779
897
|
this.rain?.log.info(`Set rain stateValue to ${value}`);
|
780
898
|
}
|
781
899
|
}, 60 * 1000 + 1000);
|
782
|
-
// Set smoke to Normal
|
783
900
|
await this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'smokeState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
|
784
901
|
await this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'coState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
|
785
|
-
// Toggle smoke every minute
|
786
902
|
this.smokeInterval = setInterval(async () => {
|
787
903
|
let value = this.smoke?.getAttribute(SmokeCoAlarmCluster.id, 'smokeState', this.smoke.log);
|
788
904
|
if (isValidNumber(value, SmokeCoAlarm.AlarmState.Normal, SmokeCoAlarm.AlarmState.Critical)) {
|
@@ -792,15 +908,13 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
792
908
|
this.smoke?.log.info(`Set smoke smokeState and coState to ${value}`);
|
793
909
|
}
|
794
910
|
}, 60 * 1000 + 1100);
|
795
|
-
// Set air quality to Normal
|
796
911
|
this.airQuality?.setAttribute(AirQualityCluster.id, 'airQuality', AirQuality.AirQualityEnum.Good, this.airQuality.log);
|
797
|
-
// Toggle air quality every minute
|
798
912
|
this.airQualityInterval = setInterval(async () => {
|
799
913
|
let value = this.airQuality?.getAttribute(AirQualityCluster.id, 'airQuality', this.airQuality?.log);
|
800
914
|
if (isValidNumber(value, AirQuality.AirQualityEnum.Good, AirQuality.AirQualityEnum.ExtremelyPoor)) {
|
801
915
|
value = value >= AirQuality.AirQualityEnum.ExtremelyPoor ? AirQuality.AirQualityEnum.Good : value + 1;
|
802
916
|
await this.airQuality?.setAttribute(AirQualityCluster.id, 'airQuality', value, this.airQuality.log);
|
803
|
-
this.
|
917
|
+
this.airQuality?.log.info(`Set air quality to ${value}`);
|
804
918
|
}
|
805
919
|
}, 60 * 1000 + 1100);
|
806
920
|
}
|
@@ -823,4 +937,3 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
823
937
|
await this.unregisterAllDevices();
|
824
938
|
}
|
825
939
|
}
|
826
|
-
//# sourceMappingURL=platform.js.map
|
package/npm-shrinkwrap.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "matterbridge-example-dynamic-platform",
|
3
|
-
"version": "1.1.
|
3
|
+
"version": "1.1.4-dev.1",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "matterbridge-example-dynamic-platform",
|
9
|
-
"version": "1.1.
|
9
|
+
"version": "1.1.4-dev.1",
|
10
10
|
"license": "MIT",
|
11
11
|
"dependencies": {
|
12
12
|
"node-ansi-logger": "3.0.0",
|
package/package.json
CHANGED
package/dist/index.d.ts
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
import { Matterbridge, PlatformConfig } from 'matterbridge';
|
2
|
-
import { AnsiLogger } from 'matterbridge/logger';
|
3
|
-
import { ExampleMatterbridgeDynamicPlatform } from './platform.js';
|
4
|
-
/**
|
5
|
-
* This is the standard interface for Matterbridge plugins.
|
6
|
-
* Each plugin should export a default function that follows this signature.
|
7
|
-
*
|
8
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
9
|
-
* @param {AnsiLogger} log - The logger instance.
|
10
|
-
* @param {PlatformConfig} config - The platform configuration.
|
11
|
-
* @returns {ExampleMatterbridgeDynamicPlatform} The initialized platform.
|
12
|
-
*/
|
13
|
-
export default function initializePlugin(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig): ExampleMatterbridgeDynamicPlatform;
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,kCAAkC,CAEhJ"}
|
package/dist/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,YAA0B,EAAE,GAAe,EAAE,MAAsB;IAC1G,OAAO,IAAI,kCAAkC,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC"}
|
package/dist/platform.d.ts
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
import { AtLeastOne, DeviceTypeDefinition, EndpointOptions, PlatformConfig } from 'matterbridge';
|
2
|
-
import { Matterbridge, /* MatterbridgeEndpoint as */ MatterbridgeDevice, MatterbridgeDynamicPlatform } from 'matterbridge';
|
3
|
-
import { AnsiLogger } from 'matterbridge/logger';
|
4
|
-
export declare class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
|
5
|
-
switch: MatterbridgeDevice | undefined;
|
6
|
-
lightOnOff: MatterbridgeDevice | undefined;
|
7
|
-
dimmer: MatterbridgeDevice | undefined;
|
8
|
-
light: MatterbridgeDevice | undefined;
|
9
|
-
lightXY: MatterbridgeDevice | undefined;
|
10
|
-
lightHS: MatterbridgeDevice | undefined;
|
11
|
-
lightCT: MatterbridgeDevice | undefined;
|
12
|
-
outlet: MatterbridgeDevice | undefined;
|
13
|
-
cover: MatterbridgeDevice | undefined;
|
14
|
-
lock: MatterbridgeDevice | undefined;
|
15
|
-
thermo: MatterbridgeDevice | undefined;
|
16
|
-
fan: MatterbridgeDevice | undefined;
|
17
|
-
waterLeak: MatterbridgeDevice | undefined;
|
18
|
-
waterFreeze: MatterbridgeDevice | undefined;
|
19
|
-
rain: MatterbridgeDevice | undefined;
|
20
|
-
smoke: MatterbridgeDevice | undefined;
|
21
|
-
airQuality: MatterbridgeDevice | undefined;
|
22
|
-
airConditioner: MatterbridgeDevice | undefined;
|
23
|
-
switchInterval: NodeJS.Timeout | undefined;
|
24
|
-
lightInterval: NodeJS.Timeout | undefined;
|
25
|
-
outletInterval: NodeJS.Timeout | undefined;
|
26
|
-
coverInterval: NodeJS.Timeout | undefined;
|
27
|
-
lockInterval: NodeJS.Timeout | undefined;
|
28
|
-
thermoInterval: NodeJS.Timeout | undefined;
|
29
|
-
fanInterval: NodeJS.Timeout | undefined;
|
30
|
-
waterLeakInterval: NodeJS.Timeout | undefined;
|
31
|
-
waterFreezeInterval: NodeJS.Timeout | undefined;
|
32
|
-
rainInterval: NodeJS.Timeout | undefined;
|
33
|
-
smokeInterval: NodeJS.Timeout | undefined;
|
34
|
-
airQualityInterval: NodeJS.Timeout | undefined;
|
35
|
-
airConditionerInterval: NodeJS.Timeout | undefined;
|
36
|
-
bridgedDevices: Map<string, MatterbridgeDevice>;
|
37
|
-
createMutableDevice(definition: DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>, options?: EndpointOptions, debug?: boolean): Promise<MatterbridgeDevice>;
|
38
|
-
constructor(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig);
|
39
|
-
onStart(reason?: string): Promise<void>;
|
40
|
-
onConfigure(): Promise<void>;
|
41
|
-
onShutdown(reason?: string): Promise<void>;
|
42
|
-
}
|
43
|
-
//# sourceMappingURL=platform.d.ts.map
|
package/dist/platform.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAQV,oBAAoB,EAIpB,eAAe,EAWf,cAAc,EA0Bf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,6BAA6B,CAAC,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3H,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,kCAAmC,SAAQ,2BAA2B;IACjF,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,GAAG,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAE/C,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IACzC,cAAc,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC9C,mBAAmB,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC/C,sBAAsB,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAEnD,cAAc,kCAAyC;IAEjD,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAE,eAAoB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;gBAO7J,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAahE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IAkyBvB,WAAW;IAiTX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAiB1C"}
|
package/dist/platform.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|