matterbridge-example-dynamic-platform 1.0.17 → 1.0.18

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
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ If you like this project and find it useful, please consider giving it a star on GitHub at https://github.com/Luligu/matterbridge-shelly and sponsoring it.
6
+
7
+ ## [1.0.18] - 2024-09-03
8
+
9
+ ### Added
10
+
11
+ - [plugin] Added:
12
+ - a light with onOff, levelControl and colorControl (with HS only) clusters
13
+ - a light with onOff, levelControl and colorControl (with XY only) clusters
14
+ - a light with onOff, levelControl and colorControl (with CT only) clusters
15
+ - a fan with FanControl cluster
16
+ - a rainSensor device
17
+ - a waterFreezeDetector device
18
+ - a waterLeakDetector device
19
+ - a smokeCoAlarm device
20
+
21
+ ### Changed
22
+
23
+ - [package]: Updated dependencies.
24
+
5
25
  <a href="https://www.buymeacoffee.com/luligugithub">
6
26
  <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
7
27
  </a>
package/README.md CHANGED
@@ -18,12 +18,21 @@ Matterbridge dynamic platform example plugin is a template to develop your own p
18
18
  It exposes:
19
19
 
20
20
  - a switch with onOff cluster
21
- - a light with onOff-levelControl-colorControl clusters
21
+ - a light with onOff, levelControl and colorControl (with XY, HS and CT) clusters
22
+ - a light with onOff, levelControl and colorControl (with HS only) clusters
23
+ - a light with onOff, levelControl and colorControl (with XY only) clusters
24
+ - a light with onOff, levelControl and colorControl (with CT only) clusters
22
25
  - an outlet with onOff cluster
23
26
  - a cover with windowCovering cluster
24
27
  - a lock with doorLock cluster
25
28
  - a thermo with thermostat cluster and 3 sub endpoints with flowMeasurement cluster, temperatureMeasurement cluster
26
29
  and relativeHumidityMeasurement cluster (to show how to create a composed device with sub enpoints)
30
+ - a fan with FanControl cluster
31
+ - a rainSensor device
32
+ - a waterFreezeDetector device
33
+ - a waterLeakDetector device
34
+ - a smokeCoAlarm device
35
+
27
36
 
28
37
  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.
29
38
 
@@ -4,16 +4,29 @@ import { AnsiLogger } from 'matterbridge/logger';
4
4
  export declare class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
5
5
  switch: MatterbridgeDevice | undefined;
6
6
  light: MatterbridgeDevice | undefined;
7
+ lightXY: MatterbridgeDevice | undefined;
8
+ lightHS: MatterbridgeDevice | undefined;
9
+ lightCT: MatterbridgeDevice | undefined;
7
10
  outlet: MatterbridgeDevice | undefined;
8
11
  cover: MatterbridgeDevice | undefined;
9
12
  lock: MatterbridgeDevice | undefined;
10
13
  thermo: MatterbridgeDevice | undefined;
14
+ fan: MatterbridgeDevice | undefined;
15
+ waterLeak: MatterbridgeDevice | undefined;
16
+ waterFreeze: MatterbridgeDevice | undefined;
17
+ rain: MatterbridgeDevice | undefined;
18
+ smoke: MatterbridgeDevice | undefined;
11
19
  switchInterval: NodeJS.Timeout | undefined;
12
20
  lightInterval: NodeJS.Timeout | undefined;
13
21
  outletInterval: NodeJS.Timeout | undefined;
14
22
  coverInterval: NodeJS.Timeout | undefined;
15
23
  lockInterval: NodeJS.Timeout | undefined;
16
24
  thermoInterval: NodeJS.Timeout | undefined;
25
+ fanInterval: NodeJS.Timeout | undefined;
26
+ waterLeakInterval: NodeJS.Timeout | undefined;
27
+ waterFreezeInterval: NodeJS.Timeout | undefined;
28
+ rainInterval: NodeJS.Timeout | undefined;
29
+ smokeInterval: NodeJS.Timeout | undefined;
17
30
  constructor(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig);
18
31
  onStart(reason?: string): Promise<void>;
19
32
  onConfigure(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,cAAc,EASf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,kCAAmC,SAAQ,2BAA2B;IACjF,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtC,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,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;gBAE/B,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAKhE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IAsNvB,WAAW;IAuHX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAU1C"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAgBL,cAAc,EAgBf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,EAAE,UAAU,EAAc,MAAM,qBAAqB,CAAC;AAE7D,qBAAa,kCAAmC,SAAQ,2BAA2B;IACjF,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;IAEtC,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;gBAE9B,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAKhE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;IAodvB,WAAW;IA4OX,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM;CAe1C"}
package/dist/platform.js CHANGED
@@ -1,18 +1,33 @@
1
- import { ColorControl, ColorControlCluster, DeviceTypes, DoorLock, DoorLockCluster, FlowMeasurement, LevelControlCluster, OnOffCluster, RelativeHumidityMeasurement, TemperatureMeasurement, Thermostat, ThermostatCluster, WindowCovering, WindowCoveringCluster, onOffSwitch, powerSource, } from 'matterbridge';
1
+ import { BooleanStateCluster, BooleanStateConfiguration, CarbonMonoxideConcentrationMeasurement, ColorControl, ColorControlCluster, DeviceTypes, DoorLock, DoorLockCluster, FanControl, FanControlCluster, FlowMeasurement, LevelControlCluster, OnOffCluster, RelativeHumidityMeasurement, SmokeCoAlarm, SmokeCoAlarmCluster, TemperatureMeasurement, Thermostat, ThermostatCluster, WindowCovering, WindowCoveringCluster, bridgedNode, onOffSwitch, powerSource, rainSensor, smokeCoAlarm, waterFreezeDetector, waterLeakDetector, } from 'matterbridge';
2
2
  import { MatterbridgeDevice, MatterbridgeDynamicPlatform } from 'matterbridge';
3
+ import { isValidBoolean, isValidNumber } from 'matterbridge/utils';
4
+ import { db, hk, or } from 'matterbridge/logger';
3
5
  export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatform {
4
6
  switch;
5
7
  light;
8
+ lightXY;
9
+ lightHS;
10
+ lightCT;
6
11
  outlet;
7
12
  cover;
8
13
  lock;
9
14
  thermo;
15
+ fan;
16
+ waterLeak;
17
+ waterFreeze;
18
+ rain;
19
+ smoke;
10
20
  switchInterval;
11
21
  lightInterval;
12
22
  outletInterval;
13
23
  coverInterval;
14
24
  lockInterval;
15
25
  thermoInterval;
26
+ fanInterval;
27
+ waterLeakInterval;
28
+ waterFreezeInterval;
29
+ rainInterval;
30
+ smokeInterval;
16
31
  constructor(matterbridge, log, config) {
17
32
  super(matterbridge, log, config);
18
33
  this.log.info('Initializing platform:', this.config.name);
@@ -20,11 +35,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
20
35
  async onStart(reason) {
21
36
  this.log.info('onStart called with reason:', reason ?? 'none');
22
37
  // Create a switch device
23
- this.switch = new MatterbridgeDevice(onOffSwitch);
38
+ this.switch = new MatterbridgeDevice(onOffSwitch, undefined, this.config.debug);
39
+ this.switch.log.logName = 'Switch';
24
40
  this.switch.createDefaultIdentifyClusterServer();
25
41
  this.switch.createDefaultGroupsClusterServer();
26
42
  this.switch.createDefaultScenesClusterServer();
27
- this.switch.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 3', '0x23452164', 0xfff1, 'Luligu', 'Dynamic device 3');
43
+ this.switch.createDefaultBridgedDeviceBasicInformationClusterServer('Switch', '0x23452164', 0xfff1, 'Luligu', 'Matterbridge Switch');
28
44
  this.switch.createDefaultOnOffClusterServer();
29
45
  this.switch.addDeviceType(powerSource);
30
46
  this.switch.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
@@ -41,14 +57,15 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
41
57
  this.log.info('Command off called');
42
58
  });
43
59
  // Create a light device
44
- this.light = new MatterbridgeDevice(DeviceTypes.ON_OFF_LIGHT);
60
+ this.light = new MatterbridgeDevice(DeviceTypes.COLOR_TEMPERATURE_LIGHT, undefined, this.config.debug);
61
+ this.light.log.logName = 'Light (XY, HS and CT)';
45
62
  this.light.createDefaultIdentifyClusterServer();
46
63
  this.light.createDefaultGroupsClusterServer();
47
64
  this.light.createDefaultScenesClusterServer();
48
- this.light.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 2', '0x23480564', 0xfff1, 'Luligu', 'Dynamic device 2');
65
+ this.light.createDefaultBridgedDeviceBasicInformationClusterServer('Light (XY, HS and CT)', '0x23480564', 0xfff1, 'Luligu', 'Matterbridge Light');
49
66
  this.light.createDefaultOnOffClusterServer();
50
67
  this.light.createDefaultLevelControlClusterServer();
51
- this.light.createDefaultColorControlClusterServer();
68
+ this.light.createDefaultCompleteColorControlClusterServer();
52
69
  this.light.addDeviceType(powerSource);
53
70
  this.light.createDefaultPowerSourceReplaceableBatteryClusterServer(70);
54
71
  await this.registerDevice(this.light);
@@ -71,21 +88,156 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
71
88
  this.light?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
72
89
  this.log.debug(`Command moveToLevelWithOnOff called request: ${level} attributes: ${currentLevel?.getLocal()}`);
73
90
  });
91
+ this.light.addCommandHandler('moveToColor', async ({ request: { colorX, colorY }, attributes: { currentX, currentY } }) => {
92
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy))?.setCurrentXAttribute(colorX);
93
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy))?.setCurrentYAttribute(colorY);
94
+ this.log.debug(`Command moveToColor called request: X ${colorX / 65536} Y ${colorY / 65536} attributes: X ${(currentX?.getLocal() ?? 0) / 65536} Y ${(currentY?.getLocal() ?? 0) / 65536}`);
95
+ });
74
96
  this.light.addCommandHandler('moveToHueAndSaturation', async ({ request: { hue, saturation }, attributes: { currentHue, currentSaturation } }) => {
75
97
  this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(hue);
76
98
  this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(saturation);
77
99
  this.log.debug(`Command moveToHueAndSaturation called request: hue ${hue} saturation ${saturation} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
78
100
  });
101
+ this.light.addCommandHandler('moveToHue', async ({ request: { hue }, attributes: { currentHue, currentSaturation } }) => {
102
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(hue);
103
+ this.log.debug(`Command moveToHue called request: hue ${hue} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
104
+ });
105
+ this.light.addCommandHandler('moveToSaturation', async ({ request: { saturation }, attributes: { currentHue, currentSaturation } }) => {
106
+ this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(saturation);
107
+ this.log.debug(`Command moveToSaturation called request: saturation ${saturation} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
108
+ });
79
109
  this.light.addCommandHandler('moveToColorTemperature', async ({ request, attributes }) => {
80
110
  this.light?.getClusterServer(ColorControl.Complete)?.setColorTemperatureMiredsAttribute(request.colorTemperatureMireds);
81
111
  this.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
82
112
  });
113
+ // Create a light device with HS color control
114
+ this.lightHS = new MatterbridgeDevice(DeviceTypes.COLOR_TEMPERATURE_LIGHT, undefined, this.config.debug);
115
+ this.lightHS.log.logName = 'Light (HS)';
116
+ this.lightHS.createDefaultIdentifyClusterServer();
117
+ this.lightHS.createDefaultGroupsClusterServer();
118
+ this.lightHS.createDefaultScenesClusterServer();
119
+ this.lightHS.createDefaultBridgedDeviceBasicInformationClusterServer('Light (HS)', '0x25097564', 0xfff1, 'Luligu', 'Matterbridge Light');
120
+ this.lightHS.createDefaultOnOffClusterServer();
121
+ this.lightHS.createDefaultLevelControlClusterServer();
122
+ this.lightHS.createDefaultCompleteColorControlClusterServer();
123
+ this.lightHS.configureColorControlCluster(true, false, false, ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
124
+ this.lightHS.addDeviceType(powerSource);
125
+ this.lightHS.createDefaultPowerSourceWiredClusterServer();
126
+ await this.registerDevice(this.lightHS);
127
+ this.lightHS.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
128
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
129
+ });
130
+ this.lightHS.addCommandHandler('on', async () => {
131
+ this.lightHS?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
132
+ this.log.info('Command on called');
133
+ });
134
+ this.lightHS.addCommandHandler('off', async () => {
135
+ this.lightHS?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
136
+ this.log.info('Command off called');
137
+ });
138
+ this.lightHS.addCommandHandler('moveToLevel', async ({ request: { level }, attributes: { currentLevel } }) => {
139
+ this.lightHS?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
140
+ this.log.debug(`Command moveToLevel called request: ${level} attributes: ${currentLevel?.getLocal()}`);
141
+ });
142
+ this.lightHS.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level }, attributes: { currentLevel } }) => {
143
+ this.lightHS?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
144
+ this.log.debug(`Command moveToLevelWithOnOff called request: ${level} attributes: ${currentLevel?.getLocal()}`);
145
+ });
146
+ this.lightHS.addCommandHandler('moveToHueAndSaturation', async ({ request: { hue, saturation }, attributes: { currentHue, currentSaturation } }) => {
147
+ this.lightHS?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(hue);
148
+ this.lightHS?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(saturation);
149
+ this.log.debug(`Command moveToHueAndSaturation called request: hue ${hue} saturation ${saturation} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
150
+ });
151
+ this.lightHS.addCommandHandler('moveToHue', async ({ request: { hue }, attributes: { currentHue, currentSaturation } }) => {
152
+ this.lightHS?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(hue);
153
+ this.log.debug(`Command moveToHue called request: hue ${hue} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
154
+ });
155
+ this.lightHS.addCommandHandler('moveToSaturation', async ({ request: { saturation }, attributes: { currentHue, currentSaturation } }) => {
156
+ this.lightHS?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(saturation);
157
+ this.log.debug(`Command moveToSaturation called request: saturation ${saturation} attributes: hue ${currentHue?.getLocal()} saturation ${currentSaturation?.getLocal()}`);
158
+ });
159
+ // Create a light device with XY color control
160
+ this.lightXY = new MatterbridgeDevice(DeviceTypes.COLOR_TEMPERATURE_LIGHT, undefined, this.config.debug);
161
+ this.lightXY.log.logName = 'Light (XY)';
162
+ this.lightXY.createDefaultIdentifyClusterServer();
163
+ this.lightXY.createDefaultGroupsClusterServer();
164
+ this.lightXY.createDefaultScenesClusterServer();
165
+ this.lightXY.createDefaultBridgedDeviceBasicInformationClusterServer('Light (XY)', '0x23497564', 0xfff1, 'Luligu', 'Matterbridge Light');
166
+ this.lightXY.createDefaultOnOffClusterServer();
167
+ this.lightXY.createDefaultLevelControlClusterServer();
168
+ this.lightXY.createDefaultCompleteColorControlClusterServer();
169
+ this.lightXY.configureColorControlCluster(false, true, false, ColorControl.ColorMode.CurrentXAndCurrentY);
170
+ this.lightXY.addDeviceType(powerSource);
171
+ this.lightXY.createDefaultPowerSourceWiredClusterServer();
172
+ await this.registerDevice(this.lightXY);
173
+ this.lightXY.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
174
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
175
+ });
176
+ this.lightXY.addCommandHandler('on', async () => {
177
+ this.lightXY?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
178
+ this.log.info('Command on called');
179
+ });
180
+ this.lightXY.addCommandHandler('off', async () => {
181
+ this.lightXY?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
182
+ this.log.info('Command off called');
183
+ });
184
+ this.lightXY.addCommandHandler('moveToLevel', async ({ request: { level }, attributes: { currentLevel } }) => {
185
+ this.lightXY?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
186
+ this.log.debug(`Command moveToLevel called request: ${level} attributes: ${currentLevel?.getLocal()}`);
187
+ });
188
+ this.lightXY.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level }, attributes: { currentLevel } }) => {
189
+ this.lightXY?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
190
+ this.log.debug(`Command moveToLevelWithOnOff called request: ${level} attributes: ${currentLevel?.getLocal()}`);
191
+ });
192
+ this.lightXY.addCommandHandler('moveToColor', async ({ request: { colorX, colorY }, attributes: { currentX, currentY } }) => {
193
+ this.lightXY?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy))?.setCurrentXAttribute(colorX);
194
+ this.lightXY?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy))?.setCurrentYAttribute(colorY);
195
+ this.log.debug(`Command moveToColor called request: X ${colorX / 65536} Y ${colorY / 65536} attributes: X ${(currentX?.getLocal() ?? 0) / 65536} Y ${(currentY?.getLocal() ?? 0) / 65536}`);
196
+ });
197
+ // Create a light device with CT color control
198
+ this.lightCT = new MatterbridgeDevice(DeviceTypes.COLOR_TEMPERATURE_LIGHT, undefined, this.config.debug);
199
+ this.lightCT.log.logName = 'Light (CT)';
200
+ this.lightCT.createDefaultIdentifyClusterServer();
201
+ this.lightCT.createDefaultGroupsClusterServer();
202
+ this.lightCT.createDefaultScenesClusterServer();
203
+ this.lightCT.createDefaultBridgedDeviceBasicInformationClusterServer('Light (CT)', '0x23480749', 0xfff1, 'Luligu', 'Matterbridge Light');
204
+ this.lightCT.createDefaultOnOffClusterServer();
205
+ this.lightCT.createDefaultLevelControlClusterServer();
206
+ this.lightCT.createDefaultCompleteColorControlClusterServer();
207
+ this.lightCT.configureColorControlCluster(false, false, true, ColorControl.ColorMode.ColorTemperatureMireds);
208
+ this.lightCT.addDeviceType(powerSource);
209
+ this.lightCT.createDefaultPowerSourceReplaceableBatteryClusterServer(70);
210
+ await this.registerDevice(this.lightCT);
211
+ this.lightCT.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
212
+ this.log.info(`Command identify called identifyTime:${identifyTime}`);
213
+ });
214
+ this.lightCT.addCommandHandler('on', async () => {
215
+ this.lightCT?.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
216
+ this.log.info('Command on called');
217
+ });
218
+ this.lightCT.addCommandHandler('off', async () => {
219
+ this.lightCT?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
220
+ this.log.info('Command off called');
221
+ });
222
+ this.lightCT.addCommandHandler('moveToLevel', async ({ request: { level }, attributes: { currentLevel } }) => {
223
+ this.lightCT?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
224
+ this.log.debug(`Command moveToLevel called request: ${level} attributes: ${currentLevel?.getLocal()}`);
225
+ });
226
+ this.lightCT.addCommandHandler('moveToLevelWithOnOff', async ({ request: { level }, attributes: { currentLevel } }) => {
227
+ this.lightCT?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(level);
228
+ this.log.debug(`Command moveToLevelWithOnOff called request: ${level} attributes: ${currentLevel?.getLocal()}`);
229
+ });
230
+ this.lightCT.addCommandHandler('moveToColorTemperature', async ({ request, attributes }) => {
231
+ this.lightCT?.getClusterServer(ColorControl.Complete)?.setColorTemperatureMiredsAttribute(request.colorTemperatureMireds);
232
+ this.log.debug(`Command moveToColorTemperature called request: ${request.colorTemperatureMireds} attributes: ${attributes.colorTemperatureMireds?.getLocal()}`);
233
+ });
83
234
  // Create an outlet device
84
- this.outlet = new MatterbridgeDevice(DeviceTypes.ON_OFF_PLUGIN_UNIT);
235
+ this.outlet = new MatterbridgeDevice(DeviceTypes.ON_OFF_PLUGIN_UNIT, undefined, this.config.debug);
236
+ this.outlet.log.logName = 'Outlet';
85
237
  this.outlet.createDefaultIdentifyClusterServer();
86
238
  this.outlet.createDefaultGroupsClusterServer();
87
239
  this.outlet.createDefaultScenesClusterServer();
88
- this.outlet.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 4', '0x29252164', 0xfff1, 'Luligu', 'Dynamic device 4');
240
+ this.outlet.createDefaultBridgedDeviceBasicInformationClusterServer('Outlet', '0x29252164', 0xfff1, 'Luligu', 'Matterbridge Outlet');
89
241
  this.outlet.createDefaultOnOffClusterServer();
90
242
  this.outlet.addDeviceType(powerSource);
91
243
  this.outlet.createDefaultPowerSourceWiredClusterServer();
@@ -102,11 +254,13 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
102
254
  this.log.info('Command off called');
103
255
  });
104
256
  // Create a window covering device
105
- this.cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING);
257
+ // Matter uses 10000 = fully closed 0 = fully opened
258
+ this.cover = new MatterbridgeDevice(DeviceTypes.WINDOW_COVERING, undefined, this.config.debug);
259
+ this.cover.log.logName = 'Cover';
106
260
  this.cover.createDefaultIdentifyClusterServer();
107
261
  this.cover.createDefaultGroupsClusterServer();
108
262
  this.cover.createDefaultScenesClusterServer();
109
- this.cover.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 1', '0x01020564', 0xfff1, 'Luligu', 'Dynamic device 1');
263
+ this.cover.createDefaultBridgedDeviceBasicInformationClusterServer('Cover', '0x01020564', 0xfff1, 'Luligu', 'Matterbridge Cover');
110
264
  this.cover.createDefaultWindowCoveringClusterServer();
111
265
  this.cover.addDeviceType(powerSource);
112
266
  this.cover.createDefaultPowerSourceRechargeableBatteryClusterServer(86);
@@ -119,11 +273,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
119
273
  this.log.info(`Command stopMotion called: current ${currentPositionLiftPercent100ths?.getLocal()} target ${targetPositionLiftPercent100ths?.getLocal()} status ${operationalStatus?.getLocal().lift}`);
120
274
  });
121
275
  this.cover.addCommandHandler('downOrClose', async ({ attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
122
- this.cover?.setWindowCoveringCurrentTargetStatus(0, 0, WindowCovering.MovementStatus.Stopped);
276
+ this.cover?.setWindowCoveringCurrentTargetStatus(10000, 10000, WindowCovering.MovementStatus.Stopped);
123
277
  this.log.info(`Command downOrClose called: current ${currentPositionLiftPercent100ths?.getLocal()} target ${targetPositionLiftPercent100ths?.getLocal()} status ${operationalStatus?.getLocal().lift}`);
124
278
  });
125
279
  this.cover.addCommandHandler('upOrOpen', async ({ attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
126
- this.cover?.setWindowCoveringCurrentTargetStatus(10000, 10000, WindowCovering.MovementStatus.Stopped);
280
+ this.cover?.setWindowCoveringCurrentTargetStatus(0, 0, WindowCovering.MovementStatus.Stopped);
127
281
  this.log.info(`Command upOrOpen called: current ${currentPositionLiftPercent100ths?.getLocal()} target ${targetPositionLiftPercent100ths?.getLocal()} status ${operationalStatus?.getLocal().lift}`);
128
282
  });
129
283
  this.cover.addCommandHandler('goToLiftPercentage', async ({ request: { liftPercent100thsValue }, attributes: { currentPositionLiftPercent100ths, targetPositionLiftPercent100ths, operationalStatus } }) => {
@@ -131,9 +285,10 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
131
285
  this.log.info(`Command goToLiftPercentage ${liftPercent100thsValue} called: current ${currentPositionLiftPercent100ths?.getLocal()} target ${targetPositionLiftPercent100ths?.getLocal()} status ${operationalStatus?.getLocal().lift}`);
132
286
  });
133
287
  // Create a lock device
134
- this.lock = new MatterbridgeDevice(DeviceTypes.DOOR_LOCK);
288
+ this.lock = new MatterbridgeDevice(DeviceTypes.DOOR_LOCK, undefined, this.config.debug);
289
+ this.lock.log.logName = 'Lock';
135
290
  this.lock.createDefaultIdentifyClusterServer();
136
- this.lock.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 5', '0x96352164', 0xfff1, 'Luligu', 'Dynamic device 5');
291
+ this.lock.createDefaultBridgedDeviceBasicInformationClusterServer('Lock', '0x96352164', 0xfff1, 'Luligu', 'Matterbridge Lock');
137
292
  this.lock.createDefaultDoorLockClusterServer();
138
293
  this.lock.addDeviceType(powerSource);
139
294
  this.lock.createDefaultPowerSourceRechargeableBatteryClusterServer(30);
@@ -150,11 +305,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
150
305
  this.log.info('Command unlockDoor called');
151
306
  });
152
307
  // Create a thermostat device
153
- this.thermo = new MatterbridgeDevice(DeviceTypes.THERMOSTAT);
308
+ this.thermo = new MatterbridgeDevice(DeviceTypes.THERMOSTAT, undefined, this.config.debug);
309
+ this.thermo.log.logName = 'Thermostat';
154
310
  this.thermo.createDefaultIdentifyClusterServer();
155
311
  this.thermo.createDefaultGroupsClusterServer();
156
312
  this.thermo.createDefaultScenesClusterServer();
157
- this.thermo.createDefaultBridgedDeviceBasicInformationClusterServer('Bridged device 6', '0x96382164', 0xfff1, 'Luligu', 'Dynamic device 6');
313
+ this.thermo.createDefaultBridgedDeviceBasicInformationClusterServer('Thermostat', '0x96382164', 0xfff1, 'Luligu', 'Matterbridge Thermostat');
158
314
  this.thermo.createDefaultThermostatClusterServer(20, 18, 22);
159
315
  this.thermo.addDeviceType(powerSource);
160
316
  this.thermo.createDefaultPowerSourceRechargeableBatteryClusterServer(70);
@@ -172,12 +328,12 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
172
328
  this.thermo.addCommandHandler('setpointRaiseLower', async ({ request: { mode, amount }, attributes }) => {
173
329
  const lookupSetpointAdjustMode = ['Heat', 'Cool', 'Both'];
174
330
  this.log.info(`Command setpointRaiseLower called with mode: ${lookupSetpointAdjustMode[mode]} amount: ${amount / 10}`);
175
- if (mode === Thermostat.SetpointAdjustMode.Heat && attributes.occupiedHeatingSetpoint) {
331
+ if (mode === /* Thermostat.SetpointRaiseLowerMode.Heat*/ 0 && attributes.occupiedHeatingSetpoint) {
176
332
  const setpoint = attributes.occupiedHeatingSetpoint?.getLocal() / 100 + amount / 10;
177
333
  attributes.occupiedHeatingSetpoint.setLocal(setpoint * 100);
178
334
  this.log.info('Set occupiedHeatingSetpoint:', setpoint);
179
335
  }
180
- if (mode === Thermostat.SetpointAdjustMode.Cool && attributes.occupiedCoolingSetpoint) {
336
+ if (mode === /* Thermostat.SetpointRaiseLowerMode.Cool*/ 1 && attributes.occupiedCoolingSetpoint) {
181
337
  const setpoint = attributes.occupiedCoolingSetpoint.getLocal() / 100 + amount / 10;
182
338
  attributes.occupiedCoolingSetpoint.setLocal(setpoint * 100);
183
339
  this.log.info('Set occupiedCoolingSetpoint:', setpoint);
@@ -185,115 +341,267 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
185
341
  });
186
342
  const thermostat = this.thermo.getClusterServer(ThermostatCluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode));
187
343
  if (thermostat) {
188
- thermostat.subscribeSystemModeAttribute(async (value) => {
344
+ subscribeAttribute(ThermostatCluster.id, 'systemMode', async (value) => {
189
345
  const lookupSystemMode = ['Off', 'Auto', '', 'Cool', 'Heat', 'EmergencyHeat', 'Precooling', 'FanOnly', 'Dry', 'Sleep'];
190
346
  this.log.info('Subscribe systemMode called with:', lookupSystemMode[value]);
191
- });
192
- thermostat.subscribeOccupiedHeatingSetpointAttribute(async (value) => {
347
+ }, this.thermo.log, this.thermo);
348
+ subscribeAttribute(ThermostatCluster.id, 'occupiedHeatingSetpoint', async (value) => {
193
349
  this.log.info('Subscribe occupiedHeatingSetpoint called with:', value / 100);
194
- });
195
- thermostat.subscribeOccupiedCoolingSetpointAttribute(async (value) => {
350
+ }, this.thermo.log, this.thermo);
351
+ subscribeAttribute(ThermostatCluster.id, 'occupiedCoolingSetpoint', async (value) => {
196
352
  this.log.info('Subscribe occupiedCoolingSetpoint called with:', value / 100);
197
- });
353
+ }, this.thermo.log, this.thermo);
198
354
  }
355
+ // Create a fan device
356
+ this.fan = new MatterbridgeDevice([DeviceTypes.FAN, bridgedNode], undefined, this.config.debug);
357
+ this.fan.log.logName = 'Fan';
358
+ this.fan.createDefaultBridgedDeviceBasicInformationClusterServer('Fan', 'serial_980545631228', 0xfff1, 'Luligu', 'Matterbridge Fan', 2, '2.1.1');
359
+ this.fan.addDeviceTypeWithClusterServer([DeviceTypes.FAN], []);
360
+ await this.registerDevice(this.fan);
361
+ const fanCluster = this.fan.getClusterServer(FanControlCluster.with(FanControl.Feature.MultiSpeed, FanControl.Feature.Auto));
362
+ if (fanCluster) {
363
+ const fanModeLookup = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
364
+ subscribeAttribute(FanControlCluster.id, 'fanMode', (newValue, oldValue) => {
365
+ this.log.info(`Fan mode changed from ${fanModeLookup[oldValue]} to ${fanModeLookup[newValue]}`);
366
+ if (newValue === FanControl.FanMode.Off) {
367
+ fanCluster.setPercentCurrentAttribute(0);
368
+ }
369
+ else if (newValue === FanControl.FanMode.Low) {
370
+ fanCluster.setPercentCurrentAttribute(33);
371
+ }
372
+ else if (newValue === FanControl.FanMode.Medium) {
373
+ fanCluster.setPercentCurrentAttribute(66);
374
+ }
375
+ else if (newValue === FanControl.FanMode.High) {
376
+ fanCluster.setPercentCurrentAttribute(100);
377
+ }
378
+ else if (newValue === FanControl.FanMode.On) {
379
+ fanCluster.setPercentCurrentAttribute(100);
380
+ }
381
+ else if (newValue === FanControl.FanMode.Auto) {
382
+ fanCluster.setPercentCurrentAttribute(50);
383
+ }
384
+ }, this.fan.log, this.fan);
385
+ subscribeAttribute(FanControlCluster.id, 'percentSetting', (newValue, oldValue) => {
386
+ this.log.info(`Percent setting changed from ${oldValue} to ${newValue}`);
387
+ if (newValue)
388
+ fanCluster.setPercentCurrentAttribute(newValue);
389
+ }, this.fan.log, this.fan);
390
+ subscribeAttribute(FanControlCluster.id, 'speedSetting', (newValue, oldValue) => {
391
+ this.log.info(`Speed setting changed from ${oldValue} to ${newValue}`);
392
+ if (newValue)
393
+ fanCluster.setSpeedCurrentAttribute(newValue);
394
+ }, this.fan.log, this.fan);
395
+ }
396
+ this.waterLeak = new MatterbridgeDevice([waterLeakDetector, bridgedNode], undefined, this.config.debug);
397
+ this.waterLeak.log.logName = 'Water leak detector';
398
+ this.waterLeak.createDefaultBridgedDeviceBasicInformationClusterServer('Water leak detector', 'serial_98745631222', 0xfff1, 'Luligu', 'Matterbridge WaterLeakDetector');
399
+ this.waterLeak.addDeviceTypeWithClusterServer([waterLeakDetector], [BooleanStateConfiguration.Cluster.id]);
400
+ this.waterLeak.getClusterServer(BooleanStateCluster)?.setStateValueAttribute(false);
401
+ await this.registerDevice(this.waterLeak);
402
+ this.waterFreeze = new MatterbridgeDevice([waterFreezeDetector, bridgedNode], undefined, this.config.debug);
403
+ this.waterFreeze.log.logName = 'Water freeze detector';
404
+ this.waterFreeze.createDefaultBridgedDeviceBasicInformationClusterServer('Water freeze detector', 'serial_98745631223', 0xfff1, 'Luligu', 'Matterbridge WaterFreezeDetector');
405
+ this.waterFreeze.addDeviceTypeWithClusterServer([waterFreezeDetector], [BooleanStateConfiguration.Cluster.id]);
406
+ this.waterFreeze.getClusterServer(BooleanStateCluster)?.setStateValueAttribute(false);
407
+ await this.registerDevice(this.waterFreeze);
408
+ this.rain = new MatterbridgeDevice([rainSensor, bridgedNode], undefined, this.config.debug);
409
+ this.rain.log.logName = 'Rain sensor';
410
+ this.rain.createDefaultBridgedDeviceBasicInformationClusterServer('Rain sensor', 'serial_98745631224', 0xfff1, 'Luligu', 'Matterbridge RainSensor');
411
+ this.rain.addDeviceTypeWithClusterServer([rainSensor], [BooleanStateConfiguration.Cluster.id]);
412
+ this.rain.getClusterServer(BooleanStateCluster)?.setStateValueAttribute(false);
413
+ await this.registerDevice(this.rain);
414
+ this.smoke = new MatterbridgeDevice([smokeCoAlarm, bridgedNode], undefined, this.config.debug);
415
+ this.smoke.log.logName = 'Smoke alarm sensor';
416
+ this.smoke.createDefaultBridgedDeviceBasicInformationClusterServer('Smoke alarm sensor', 'serial_94745631225', 0xfff1, 'Luligu', 'Matterbridge SmokeCoAlarm');
417
+ this.smoke.addDeviceTypeWithClusterServer([smokeCoAlarm], [CarbonMonoxideConcentrationMeasurement.Cluster.id]);
418
+ this.smoke.getClusterServer(SmokeCoAlarmCluster.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm))?.setSmokeStateAttribute(SmokeCoAlarm.AlarmState.Normal);
419
+ this.smoke.getClusterServer(SmokeCoAlarmCluster.with(SmokeCoAlarm.Feature.SmokeAlarm, SmokeCoAlarm.Feature.CoAlarm))?.setCoStateAttribute(SmokeCoAlarm.AlarmState.Normal);
420
+ this.smoke.getClusterServer(CarbonMonoxideConcentrationMeasurement.Complete)?.setMeasuredValueAttribute(100);
421
+ await this.registerDevice(this.smoke);
199
422
  }
200
423
  async onConfigure() {
201
424
  this.log.info('onConfigure called');
202
425
  // Set switch to off
203
- this.switch?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
426
+ this.switch?.setAttribute(OnOffCluster.id, 'onOff', false, this.switch.log);
204
427
  this.log.info('Set switch initial onOff to false');
428
+ // Toggle switch onOff every minute
205
429
  this.switchInterval = setInterval(() => {
206
- if (!this.switch)
207
- return;
208
- const status = this.switch.getClusterServer(OnOffCluster)?.getOnOffAttribute();
209
- this.switch.getClusterServer(OnOffCluster)?.setOnOffAttribute(!status);
210
- this.log.info(`Set switch onOff to ${status}`);
430
+ const status = this.switch?.getAttribute(OnOffCluster.id, 'onOff', this.switch.log);
431
+ if (isValidBoolean(status)) {
432
+ this.switch?.setAttribute(OnOffCluster.id, 'onOff', !status, this.switch.log);
433
+ this.log.info(`Set switch onOff to ${!status}`);
434
+ }
211
435
  }, 60 * 1000 + 100);
212
436
  // Set light to off, level to 0 and hue to 0 and saturation to 50% (pink color)
213
- this.light?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
214
- this.light?.getClusterServer(LevelControlCluster)?.setCurrentLevelAttribute(0);
215
- this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentHueAttribute(0);
216
- this.light?.getClusterServer(ColorControlCluster.with(ColorControl.Feature.HueSaturation))?.setCurrentSaturationAttribute(128);
437
+ this.light?.setAttribute(OnOffCluster.id, 'onOff', false, this.light.log);
438
+ this.light?.setAttribute(LevelControlCluster.id, 'currentLevel', 0, this.light.log);
439
+ this.light?.setAttribute(ColorControlCluster.id, 'currentHue', 0, this.light.log);
440
+ this.light?.setAttribute(ColorControlCluster.id, 'currentSaturation', 128, this.light.log);
441
+ this.light?.configureColorControlMode(ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
217
442
  this.log.info('Set light initial onOff to false, currentLevel to 0, hue to 0 and saturation to 50%.');
443
+ // Set light XY to true, level to 100% and XY to red
444
+ this.lightXY?.setAttribute(OnOffCluster.id, 'onOff', true, this.lightXY.log);
445
+ this.lightXY?.setAttribute(LevelControlCluster.id, 'currentLevel', 254, this.lightXY.log);
446
+ this.lightXY?.setAttribute(ColorControlCluster.id, 'currentX', 0.7006 * 65536, this.lightXY.log);
447
+ this.lightXY?.setAttribute(ColorControlCluster.id, 'currentY', 0.2993 * 65536, this.lightXY.log);
448
+ this.lightXY?.configureColorControlMode(ColorControl.ColorMode.CurrentXAndCurrentY);
449
+ this.log.info('Set light XY initial onOff to true, currentLevel to 254, X to 0.7006 and Y to 0.2993.');
450
+ // Set light HS to off, level to 0 and hue to 0 and saturation to 50% (pink color)
451
+ this.lightHS?.setAttribute(OnOffCluster.id, 'onOff', false, this.lightHS.log);
452
+ this.lightHS?.setAttribute(LevelControlCluster.id, 'currentLevel', 0, this.lightHS.log);
453
+ this.lightHS?.setAttribute(ColorControlCluster.id, 'currentHue', 0, this.lightHS.log);
454
+ this.lightHS?.setAttribute(ColorControlCluster.id, 'currentSaturation', 128, this.lightHS.log);
455
+ this.lightHS?.configureColorControlMode(ColorControl.ColorMode.CurrentHueAndCurrentSaturation);
456
+ this.log.info('Set light HS initial onOff to false, currentLevel to 0, hue to 0 and saturation to 50%.');
457
+ // Set light CT to true, level to 50% and colorTemperatureMireds to 250
458
+ this.lightCT?.setAttribute(OnOffCluster.id, 'onOff', true, this.lightCT.log);
459
+ this.lightCT?.setAttribute(LevelControlCluster.id, 'currentLevel', 128, this.lightCT.log);
460
+ this.lightCT?.setAttribute(ColorControlCluster.id, 'colorTemperatureMireds', 250, this.lightCT.log);
461
+ this.lightCT?.configureColorControlMode(ColorControl.ColorMode.ColorTemperatureMireds);
462
+ this.log.info('Set light CT initial onOff to true, currentLevel to 128, colorTemperatureMireds to 250.');
218
463
  this.lightInterval = setInterval(() => {
219
- if (!this.light)
220
- return;
221
- const lightLevelControlCluster = this.light.getClusterServer(LevelControlCluster);
222
- if (lightLevelControlCluster) {
223
- let level = lightLevelControlCluster.getCurrentLevelAttribute();
224
- if (level === null)
225
- return;
464
+ const state = this.light?.getAttribute(OnOffCluster.id, 'onOff', this.light.log);
465
+ let level = this.light?.getAttribute(LevelControlCluster.id, 'currentLevel', this.light.log);
466
+ if (isValidBoolean(state) && isValidNumber(level, 0, 254)) {
226
467
  level += 10;
227
468
  if (level > 254) {
228
469
  level = 0;
229
- this.light.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
470
+ this.light?.setAttribute(OnOffCluster.id, 'onOff', false, this.light?.log);
471
+ this.lightXY?.setAttribute(OnOffCluster.id, 'onOff', false, this.light?.log);
472
+ this.lightHS?.setAttribute(OnOffCluster.id, 'onOff', false, this.light?.log);
473
+ this.lightCT?.setAttribute(OnOffCluster.id, 'onOff', false, this.light?.log);
230
474
  this.log.info('Set light onOff to false');
231
- return;
475
+ this.light?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light.log);
476
+ this.lightXY?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
477
+ this.lightHS?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
478
+ this.lightCT?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
479
+ this.log.info(`Set light currentLevel to ${level}`);
232
480
  }
233
481
  else {
234
- this.light.getClusterServer(OnOffCluster)?.setOnOffAttribute(true);
482
+ this.light?.setAttribute(OnOffCluster.id, 'onOff', true, this.light.log);
483
+ this.lightXY?.setAttribute(OnOffCluster.id, 'onOff', true, this.light?.log);
484
+ this.lightHS?.setAttribute(OnOffCluster.id, 'onOff', true, this.light?.log);
485
+ this.lightCT?.setAttribute(OnOffCluster.id, 'onOff', true, this.light?.log);
235
486
  this.log.info('Set light onOff to true');
487
+ this.light?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light.log);
488
+ this.lightXY?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
489
+ this.lightHS?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
490
+ this.lightCT?.setAttribute(LevelControlCluster.id, 'currentLevel', level, this.light?.log);
491
+ this.log.info(`Set light currentLevel to ${level}`);
236
492
  }
237
- lightLevelControlCluster.setCurrentLevelAttribute(level);
238
- this.log.info(`Set light currentLevel to ${level}`);
239
493
  }
240
494
  }, 60 * 1000 + 200);
241
495
  // Set outlet to off
242
- this.outlet?.getClusterServer(OnOffCluster)?.setOnOffAttribute(false);
496
+ this.outlet?.setAttribute(OnOffCluster.id, 'onOff', false, this.outlet.log);
243
497
  this.log.info('Set outlet initial onOff to false');
498
+ // Toggle outlet onOff every minute
244
499
  this.outletInterval = setInterval(() => {
245
- if (!this.outlet)
246
- return;
247
- const status = this.outlet.getClusterServer(OnOffCluster)?.getOnOffAttribute();
248
- this.outlet.getClusterServer(OnOffCluster)?.setOnOffAttribute(!status);
249
- this.log.info(`Set outlet onOff to ${status}`);
500
+ const state = this.outlet?.getAttribute(OnOffCluster.id, 'onOff', this.outlet.log);
501
+ if (isValidBoolean(state)) {
502
+ this.outlet?.setAttribute(OnOffCluster.id, 'onOff', !state, this.outlet.log);
503
+ this.log.info(`Set outlet onOff to ${!state}`);
504
+ }
250
505
  }, 60 * 1000 + 300);
251
506
  // Set cover to target = current position and status to stopped (current position is persisted in the cluster)
252
507
  this.cover?.setWindowCoveringTargetAsCurrentAndStopped();
253
508
  this.log.info('Set cover initial targetPositionLiftPercent100ths = currentPositionLiftPercent100ths and operationalStatus to Stopped.');
509
+ // Increment cover position every minute
254
510
  this.coverInterval = setInterval(() => {
255
- if (!this.cover)
256
- return;
257
- const coverCluster = this.cover.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
258
- if (coverCluster && coverCluster.getCurrentPositionLiftPercent100thsAttribute) {
259
- let position = coverCluster.getCurrentPositionLiftPercent100thsAttribute();
260
- if (position === null)
261
- return;
511
+ let position = this.cover?.getAttribute(WindowCoveringCluster.id, 'currentPositionLiftPercent100ths', this.cover.log);
512
+ if (isValidNumber(position, 0, 10000)) {
262
513
  position = position > 9000 ? 0 : position + 1000;
263
- coverCluster.setTargetPositionLiftPercent100thsAttribute(position);
264
- coverCluster.setCurrentPositionLiftPercent100thsAttribute(position);
265
- coverCluster.setOperationalStatusAttribute({
266
- global: WindowCovering.MovementStatus.Stopped,
267
- lift: WindowCovering.MovementStatus.Stopped,
268
- tilt: WindowCovering.MovementStatus.Stopped,
269
- });
514
+ this.cover?.setAttribute(WindowCoveringCluster.id, 'targetPositionLiftPercent100ths', position, this.cover.log);
515
+ this.cover?.setAttribute(WindowCoveringCluster.id, 'currentPositionLiftPercent100ths', position, this.cover.log);
516
+ this.cover?.setAttribute(WindowCoveringCluster.id, 'operationalStatus', { global: WindowCovering.MovementStatus.Stopped, lift: WindowCovering.MovementStatus.Stopped, tilt: WindowCovering.MovementStatus.Stopped }, this.cover.log);
270
517
  this.log.info(`Set cover current and target positionLiftPercent100ths to ${position} and operationalStatus to Stopped`);
271
518
  }
272
519
  }, 60 * 1000 + 400);
273
520
  // Set lock to Locked
274
- this.lock?.getClusterServer(DoorLockCluster)?.setLockStateAttribute(DoorLock.LockState.Locked);
521
+ this.lock?.setAttribute(DoorLockCluster.id, 'lockState', DoorLock.LockState.Locked, this.lock.log);
275
522
  this.log.info('Set lock initial lockState to Locked');
523
+ // Toggle lock every minute
276
524
  this.lockInterval = setInterval(() => {
277
- if (!this.lock)
278
- return;
279
- const status = this.lock.getClusterServer(DoorLockCluster)?.getLockStateAttribute();
280
- this.lock.getClusterServer(DoorLockCluster)?.setLockStateAttribute(status === DoorLock.LockState.Locked ? DoorLock.LockState.Unlocked : DoorLock.LockState.Locked);
281
- this.log.info(`Set lock lockState to ${status === DoorLock.LockState.Locked ? 'Locked' : 'Unlocked'}`);
282
- }, 60 * 1000 + 700);
525
+ const status = this.lock?.getAttribute(DoorLockCluster.id, 'lockState', this.lock.log);
526
+ if (isValidNumber(status, DoorLock.LockState.Locked, DoorLock.LockState.Unlocked)) {
527
+ this.lock?.setAttribute(DoorLockCluster.id, 'lockState', status === DoorLock.LockState.Locked ? DoorLock.LockState.Unlocked : DoorLock.LockState.Locked, this.lock.log);
528
+ this.log.info(`Set lock lockState to ${status === DoorLock.LockState.Locked ? 'Unlocked' : 'Locked'}`);
529
+ }
530
+ }, 60 * 1000 + 500);
283
531
  // Set local to 16°C
284
- this.thermo?.getClusterServer(ThermostatCluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode))?.setLocalTemperatureAttribute(1600);
285
- this.log.info('Set thermo initial localTemperature to 16°C');
532
+ this.thermo?.setAttribute(ThermostatCluster.id, 'localTemperature', 1600, this.thermo.log);
533
+ this.thermo?.setAttribute(ThermostatCluster.id, 'systemMode', Thermostat.SystemMode.Auto, this.thermo.log);
534
+ this.log.info('Set thermostat initial localTemperature to 16°C and mode Auto');
535
+ // Increment localTemperature every minute
286
536
  this.thermoInterval = setInterval(() => {
287
- if (!this.thermo)
288
- return;
289
- const cluster = this.thermo.getClusterServer(ThermostatCluster.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode));
290
- if (!cluster)
291
- return;
292
- let local = cluster.getLocalTemperatureAttribute() ?? 1600;
293
- local = local >= 2300 ? 1600 : local + 100;
294
- cluster.setLocalTemperatureAttribute(local);
295
- this.log.info(`Set thermo localTemperature to ${local / 100}°C`);
537
+ let temperature = this.thermo?.getAttribute(ThermostatCluster.id, 'localTemperature', this.thermo.log);
538
+ if (isValidNumber(temperature, 1600, 2400)) {
539
+ temperature = temperature + 100 >= 2400 ? 1600 : temperature + 100;
540
+ this.thermo?.setAttribute(ThermostatCluster.id, 'localTemperature', temperature, this.thermo.log);
541
+ this.log.info(`Set thermostat localTemperature to ${temperature / 100}°C`);
542
+ }
543
+ }, 60 * 1000 + 600);
544
+ // Set fan to auto
545
+ this.log.info('Set fan initial fanMode to Auto, percentCurrent to 50 and speedCurrent to 50');
546
+ this.fan?.setAttribute(FanControlCluster.id, 'fanMode', FanControl.FanMode.Auto, this.fan.log);
547
+ this.fan?.setAttribute(FanControlCluster.id, 'percentCurrent', 50, this.fan.log);
548
+ this.fan?.setAttribute(FanControlCluster.id, 'speedCurrent', 50, this.fan.log);
549
+ // Increment fan percentCurrent every minute
550
+ this.fanInterval = setInterval(() => {
551
+ const mode = this.fan?.getAttribute(FanControlCluster.id, 'fanMode', this.fan.log);
552
+ let value = this.fan?.getAttribute(FanControlCluster.id, 'percentCurrent', this.fan.log);
553
+ if (isValidNumber(mode, FanControl.FanMode.Off, FanControl.FanMode.Auto) && mode === FanControl.FanMode.Auto && isValidNumber(value, 0, 100)) {
554
+ value = value + 10 >= 100 ? 0 : value + 10;
555
+ this.fan?.setAttribute(FanControlCluster.id, 'percentCurrent', value, this.fan.log);
556
+ this.log.info(`Set fan percentCurrent to ${value}`);
557
+ }
296
558
  }, 60 * 1000 + 700);
559
+ // Set waterLeak to false
560
+ this.waterLeak?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.waterLeak.log);
561
+ // Toggle waterLeak every minute
562
+ this.waterLeakInterval = setInterval(() => {
563
+ let value = this.waterLeak?.getAttribute(BooleanStateCluster.id, 'stateValue', this.waterLeak.log);
564
+ if (isValidBoolean(value)) {
565
+ value = !value;
566
+ this.waterLeak?.setAttribute(BooleanStateCluster.id, 'stateValue', value, this.waterLeak.log);
567
+ this.log.info(`Set waterLeak stateValue to ${value}`);
568
+ }
569
+ }, 60 * 1000 + 800);
570
+ // Set waterFreeze to false
571
+ this.waterFreeze?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.waterFreeze.log);
572
+ // Toggle waterFreeze every minute
573
+ this.waterFreezeInterval = setInterval(() => {
574
+ let value = this.waterFreeze?.getAttribute(BooleanStateCluster.id, 'stateValue', this.waterFreeze.log);
575
+ if (isValidBoolean(value)) {
576
+ value = !value;
577
+ this.waterFreeze?.setAttribute(BooleanStateCluster.id, 'stateValue', value, this.waterFreeze.log);
578
+ this.log.info(`Set waterFreeze stateValue to ${value}`);
579
+ }
580
+ }, 60 * 1000 + 900);
581
+ // Set rain to false
582
+ this.rain?.setAttribute(BooleanStateCluster.id, 'stateValue', false, this.rain.log);
583
+ // Toggle rain every minute
584
+ this.rainInterval = setInterval(() => {
585
+ let value = this.rain?.getAttribute(BooleanStateCluster.id, 'stateValue', this.rain.log);
586
+ if (isValidBoolean(value)) {
587
+ value = !value;
588
+ this.rain?.setAttribute(BooleanStateCluster.id, 'stateValue', value, this.rain.log);
589
+ this.log.info(`Set rain stateValue to ${value}`);
590
+ }
591
+ }, 60 * 1000 + 1000);
592
+ // Set smoke to Normal
593
+ this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'smokeState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
594
+ this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'coState', SmokeCoAlarm.AlarmState.Normal, this.smoke.log);
595
+ // Toggle smoke every minute
596
+ this.smokeInterval = setInterval(() => {
597
+ let value = this.smoke?.getAttribute(SmokeCoAlarmCluster.id, 'smokeState', this.smoke.log);
598
+ if (isValidNumber(value, SmokeCoAlarm.AlarmState.Normal, SmokeCoAlarm.AlarmState.Critical)) {
599
+ value = value === SmokeCoAlarm.AlarmState.Normal ? SmokeCoAlarm.AlarmState.Critical : SmokeCoAlarm.AlarmState.Normal;
600
+ this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'smokeState', value, this.smoke.log);
601
+ this.smoke?.setAttribute(SmokeCoAlarmCluster.id, 'coState', value, this.smoke.log);
602
+ this.log.info(`Set smoke smokeState and coState to ${value}`);
603
+ }
604
+ }, 60 * 1000 + 1100);
297
605
  }
298
606
  async onShutdown(reason) {
299
607
  this.log.info('onShutdown called with reason:', reason ?? 'none');
@@ -303,8 +611,42 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
303
611
  clearInterval(this.coverInterval);
304
612
  clearInterval(this.lockInterval);
305
613
  clearInterval(this.thermoInterval);
614
+ clearInterval(this.fanInterval);
615
+ clearInterval(this.waterLeakInterval);
616
+ clearInterval(this.waterFreezeInterval);
617
+ clearInterval(this.rainInterval);
618
+ clearInterval(this.smokeInterval);
306
619
  if (this.config.unregisterOnShutdown === true)
307
620
  await this.unregisterAllDevices();
308
621
  }
309
622
  }
623
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
624
+ function subscribeAttribute(clusterId, attribute, listener, log, endpoint) {
625
+ // if (!endpoint) endpoint = this as Endpoint;
626
+ if (!endpoint)
627
+ return false;
628
+ const clusterServer = endpoint.getClusterServerById(clusterId);
629
+ if (!clusterServer) {
630
+ log?.error(`subscribeAttribute error: Cluster ${clusterId} not found on endpoint ${endpoint.name}:${endpoint.number}`);
631
+ return false;
632
+ }
633
+ const capitalizedAttributeName = attribute.charAt(0).toUpperCase() + attribute.slice(1);
634
+ if (!clusterServer.isAttributeSupportedByName(attribute) && !clusterServer.isAttributeSupportedByName(capitalizedAttributeName)) {
635
+ if (log)
636
+ log.error(`subscribeAttribute error: Attribute ${attribute} not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
637
+ return false;
638
+ }
639
+ // Find the subscribe method
640
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
641
+ if (!clusterServer[`subscribe${capitalizedAttributeName}Attribute`]) {
642
+ log?.error(`subscribeAttribute error: subscribe${capitalizedAttributeName}Attribute not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
643
+ return false;
644
+ }
645
+ // Subscribe to the attribute
646
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type
647
+ const subscribe = clusterServer[`subscribe${capitalizedAttributeName}Attribute`];
648
+ subscribe(listener);
649
+ log?.info(`${db}Subscribe endpoint ${or}${endpoint.name}:${endpoint.number}${db} attribute ${hk}${clusterServer.name}.${capitalizedAttributeName}${db}`);
650
+ return true;
651
+ }
310
652
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-example-dynamic-platform",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "Matterbridge dynamic plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "MIT",
@@ -44,7 +44,7 @@
44
44
  "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
45
45
  "clean": "rimraf tsconfig.tsbuildinfo ./dist",
46
46
  "cleanBuild": "npm run clean && tsc",
47
- "deepClean": "rimraf tsconfig.tsbuildinfo package-lock.json ./dist ./node_modulesI",
47
+ "deepClean": "rimraf tsconfig.tsbuildinfo package-lock.json ./dist ./node_modules",
48
48
  "deepCleanRebuild": "npm run deepClean && npm install && npm run build",
49
49
  "prepublishOnly": "npm run lint && npm run cleanBuild",
50
50
  "checkDependencies": "npx npm-check-updates",
@@ -59,23 +59,21 @@
59
59
  "dev:uninstall": "npm uninstall matterbridge && npm unlink matterbridge",
60
60
  "install": "node link-matterbridge-script.js"
61
61
  },
62
- "overrides": {
63
- "eslint": "latest"
64
- },
65
62
  "devDependencies": {
66
- "@eslint/js": "9.9.0",
63
+ "@eslint/js": "9.9.1",
67
64
  "@types/eslint__js": "8.42.3",
68
65
  "@types/jest": "29.5.12",
69
- "@types/node": "22.4.2",
66
+ "@types/node": "22.5.2",
67
+ "eslint": "9.9.1",
70
68
  "eslint-config-prettier": "9.1.0",
71
- "eslint-plugin-jest": "28.8.0",
69
+ "eslint-plugin-jest": "28.8.2",
72
70
  "eslint-plugin-prettier": "5.2.1",
73
71
  "jest": "29.7.0",
74
72
  "prettier": "3.3.3",
75
73
  "rimraf": "6.0.1",
76
- "ts-jest": "29.2.4",
74
+ "ts-jest": "29.2.5",
77
75
  "typescript": "5.5.4",
78
- "typescript-eslint": "8.2.0"
76
+ "typescript-eslint": "8.3.0"
79
77
  },
80
78
  "dependencies": {
81
79
  "node-ansi-logger": "3.0.0",