homebridge-tsvesync 1.3.3 → 1.3.7

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
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.7 (2025-09-19)
4
+
5
+ ### Dependencies
6
+ - **📦 tsvesync**: Updated to 1.3.7 to keep the plugin and library version numbers matched.
7
+
8
+ ## 1.3.6 (2025-09-19)
9
+
10
+ ### Dependencies
11
+ - **📦 tsvesync**: Updated to 1.3.5 to keep the plugin aligned with the latest library release.
12
+
13
+ ## 1.3.5 (2025-09-19)
14
+
15
+ ### Fixed
16
+ - **🚨 ESWD16 Initialization Regression**: Restore dimmer detection during accessory setup so HomeKit now shows the brightness slider and indicator service without crashing on launch.
17
+ - **🛠️ Safe Capability Fallbacks**: Ensure cached ESWD16 accessories derive capabilities before the base constructor runs, preventing `hasBrightness` errors during rediscovery and background polls.
18
+
19
+ ### Packaging
20
+ - **📦 Built Distribution**: Regenerated compiled `dist/` output and verified release bundle to include the new dimmer logic.
21
+
22
+ ## 1.3.4 (2025-09-18)
23
+
24
+ ### Added
25
+ - **🕹️ ESWD16 Dimming in HomeKit**: ESWD16 dimmer switches now register as HomeKit `Lightbulb` accessories with native On/Off and Brightness control.
26
+ - **🌈 Indicator Ring Control**: Introduced a dedicated "Indicator" light service for the ESWD16 locator ring, including Hue/Saturation control powered by automatic HSV→RGB conversion.
27
+
28
+ ### Improved
29
+ - **🔄 State Synchronization**: On/Off and brightness updates now refresh ESWD16 cloud state immediately, keeping HomeKit characteristics accurate even when VeSync lags.
30
+ - **🛡️ Polling Guardrails**: Background discovery is now serialized and paired with UUID-stable Air Quality accessories, preventing duplicate registrations and overlapping sync loops.
31
+
32
+ ### Dependencies
33
+ - **📦 tsvesync**: Upgraded to 1.3.4 to stay aligned with the latest ESWD16 API surfaces.
34
+
3
35
  ## 1.3.3 (2025-01-05)
4
36
 
5
37
  ### Fixed
@@ -1,11 +1,17 @@
1
1
  import { PlatformAccessory } from 'homebridge';
2
2
  import { BaseAccessory } from './base.accessory';
3
3
  import { TSVESyncPlatform } from '../platform';
4
- import { DeviceCapabilities, VeSyncBulb } from '../types/device.types';
4
+ import { DeviceCapabilities, VeSyncLightDevice } from '../types/device.types';
5
5
  export declare class LightAccessory extends BaseAccessory {
6
- protected readonly device: VeSyncBulb;
7
- private readonly capabilities;
8
- constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncBulb);
6
+ protected readonly device: VeSyncLightDevice;
7
+ private capabilities;
8
+ private isDimmerDevice;
9
+ private indicatorService?;
10
+ private indicatorColorState;
11
+ private indicatorColorUpdateTimeout?;
12
+ private lastDimmerRefresh;
13
+ private static readonly DIMMER_REFRESH_DEBOUNCE_MS;
14
+ constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncLightDevice);
9
15
  protected setupService(): void;
10
16
  private setupColorTemperature;
11
17
  private setupColor;
@@ -24,5 +30,21 @@ export declare class LightAccessory extends BaseAccessory {
24
30
  private getSaturation;
25
31
  private setHue;
26
32
  private setSaturation;
33
+ private detectDimmer;
34
+ private setupIndicatorService;
35
+ private setupCharacteristicForService;
36
+ private updateIndicatorCharacteristic;
37
+ private withService;
38
+ private getIndicatorOn;
39
+ private setIndicatorOn;
40
+ private getIndicatorHue;
41
+ private setIndicatorHue;
42
+ private getIndicatorSaturation;
43
+ private setIndicatorSaturation;
44
+ private scheduleIndicatorColorUpdate;
45
+ private pushIndicatorColor;
46
+ private hsvToRgb;
47
+ private rgbToHsv;
48
+ private refreshDimmerDetails;
27
49
  }
28
50
  //# sourceMappingURL=light.accessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"light.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOvE,qBAAa,cAAe,SAAQ,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAGhD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,UAAU;IAOpB,SAAS,CAAC,YAAY,IAAI,IAAI;IAsC9B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,UAAU;IAclB;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAgBvC,KAAK;YAIL,KAAK;YAeL,aAAa;YAIb,aAAa;YAcb,mBAAmB;YAInB,mBAAmB;YAkBnB,MAAM;YAIN,aAAa;YAIb,MAAM;YAqBN,aAAa;CAoB5B"}
1
+ {"version":3,"file":"light.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAkC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO9G,qBAAa,cAAe,SAAQ,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC7C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,2BAA2B,CAAC,CAAiB;IACrD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAQ;gBAGxD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,iBAAiB;IAM3B,SAAS,CAAC,YAAY,IAAI,IAAI;IA4C9B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,UAAU;IAclB;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAiEvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YA6BvC,KAAK;YAIL,KAAK;YAmBL,aAAa;YAIb,aAAa;YAoCb,mBAAmB;YASnB,mBAAmB;YAwBnB,MAAM;YASN,aAAa;YASb,MAAM;YA2BN,aAAa;IA2B3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,6BAA6B;IAWrC,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,WAAW;YAUL,cAAc;YAQd,cAAc;YAgBd,eAAe;YAcf,eAAe;YASf,sBAAsB;YActB,sBAAsB;IASpC,OAAO,CAAC,4BAA4B;YAYtB,kBAAkB;IA0BhC,OAAO,CAAC,QAAQ;IA2ChB,OAAO,CAAC,QAAQ;YAkCF,oBAAoB;CAsBnC"}
@@ -9,8 +9,10 @@ const DEFAULT_COLOR_TEMP = MIN_COLOR_TEMP;
9
9
  class LightAccessory extends base_accessory_1.BaseAccessory {
10
10
  constructor(platform, accessory, device) {
11
11
  super(platform, accessory, device);
12
+ this.isDimmerDevice = false;
13
+ this.indicatorColorState = { hue: 0, saturation: 0 };
14
+ this.lastDimmerRefresh = 0;
12
15
  this.device = device;
13
- this.capabilities = this.getDeviceCapabilities();
14
16
  }
15
17
  setupService() {
16
18
  // Get or create the light service
@@ -19,7 +21,9 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
19
21
  // Set up required characteristics
20
22
  this.setupCharacteristic(this.platform.Characteristic.On, this.getOn.bind(this), this.setOn.bind(this));
21
23
  // Set up optional characteristics based on device capabilities
22
- const capabilities = this.getDeviceCapabilities();
24
+ this.isDimmerDevice = this.detectDimmer(this.device);
25
+ this.capabilities = this.getDeviceCapabilities();
26
+ const capabilities = this.capabilities;
23
27
  if (capabilities.hasBrightness) {
24
28
  this.setupCharacteristic(this.platform.Characteristic.Brightness, this.getBrightness.bind(this), this.setBrightness.bind(this));
25
29
  }
@@ -31,6 +35,9 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
31
35
  }
32
36
  // Add Name characteristic
33
37
  this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
38
+ if (this.isDimmerDevice) {
39
+ this.setupIndicatorService();
40
+ }
34
41
  }
35
42
  setupColorTemperature() {
36
43
  this.service.getCharacteristic(this.platform.Characteristic.ColorTemperature)
@@ -69,9 +76,30 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
69
76
  this.updateCharacteristicValue(this.platform.Characteristic.Saturation, lightDetails.saturation);
70
77
  }
71
78
  }
79
+ if (this.isDimmerDevice && this.indicatorService) {
80
+ const dimmer = lightDetails;
81
+ const isRgbOn = dimmer.rgbLightStatus === 'on';
82
+ this.updateIndicatorCharacteristic(this.platform.Characteristic.On, isRgbOn);
83
+ const { hue, saturation } = this.rgbToHsv(dimmer.rgbLightValue.red, dimmer.rgbLightValue.green, dimmer.rgbLightValue.blue);
84
+ this.indicatorColorState = { hue, saturation };
85
+ this.updateIndicatorCharacteristic(this.platform.Characteristic.Hue, hue);
86
+ this.updateIndicatorCharacteristic(this.platform.Characteristic.Saturation, saturation);
87
+ }
72
88
  }
73
89
  getDeviceCapabilities() {
74
- // Determine capabilities based on model
90
+ if (this.isDimmerDevice) {
91
+ return {
92
+ hasBrightness: true,
93
+ hasColorTemp: false,
94
+ hasColor: false,
95
+ hasSpeed: false,
96
+ hasHumidity: false,
97
+ hasAirQuality: false,
98
+ hasWaterLevel: false,
99
+ hasChildLock: false,
100
+ hasSwingMode: false,
101
+ };
102
+ }
75
103
  const model = this.device.deviceType.toUpperCase();
76
104
  return {
77
105
  hasBrightness: true,
@@ -96,6 +124,9 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
96
124
  throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
97
125
  }
98
126
  await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
127
+ if (this.isDimmerDevice) {
128
+ await this.refreshDimmerDetails();
129
+ }
99
130
  }
100
131
  catch (error) {
101
132
  this.handleDeviceError('set on state', error);
@@ -106,25 +137,51 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
106
137
  }
107
138
  async setBrightness(value) {
108
139
  try {
109
- const success = await this.device.setBrightness(value);
140
+ const target = Math.round(Number(value));
141
+ if (this.isDimmerDevice && target <= 0) {
142
+ const success = await this.device.turnOff();
143
+ if (!success) {
144
+ throw new Error('Failed to turn off device when setting brightness to 0');
145
+ }
146
+ await this.persistDeviceState('deviceStatus', 'off');
147
+ await this.persistDeviceState('brightness', 0);
148
+ await this.refreshDimmerDetails();
149
+ return;
150
+ }
151
+ const brightness = Math.min(100, Math.max(this.isDimmerDevice ? 1 : 0, target));
152
+ const success = await this.device.setBrightness(brightness);
110
153
  if (!success) {
111
- throw new Error(`Failed to set brightness to ${value}`);
154
+ throw new Error(`Failed to set brightness to ${brightness}`);
155
+ }
156
+ await this.persistDeviceState('brightness', brightness);
157
+ if (this.isDimmerDevice && brightness > 0) {
158
+ await this.persistDeviceState('deviceStatus', 'on');
159
+ }
160
+ if (this.isDimmerDevice) {
161
+ await this.refreshDimmerDetails();
112
162
  }
113
- await this.persistDeviceState('brightness', value);
114
163
  }
115
164
  catch (error) {
116
165
  this.handleDeviceError('set brightness', error);
117
166
  }
118
167
  }
119
168
  async getColorTemperature() {
120
- return this.device.colorTemp || DEFAULT_COLOR_TEMP;
169
+ if (this.isDimmerDevice) {
170
+ return DEFAULT_COLOR_TEMP;
171
+ }
172
+ const bulb = this.device;
173
+ return bulb.colorTemp || DEFAULT_COLOR_TEMP;
121
174
  }
122
175
  async setColorTemperature(value) {
123
176
  try {
124
- if (!this.device.setColorTemperature) {
177
+ if (this.isDimmerDevice) {
178
+ throw new Error('Device does not support color temperature');
179
+ }
180
+ const bulb = this.device;
181
+ if (!bulb.setColorTemperature) {
125
182
  throw new Error('Device does not support color temperature');
126
183
  }
127
- const success = await this.device.setColorTemperature(value);
184
+ const success = await bulb.setColorTemperature(value);
128
185
  if (!success) {
129
186
  throw new Error(`Failed to set color temperature to ${value}`);
130
187
  }
@@ -135,17 +192,29 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
135
192
  }
136
193
  }
137
194
  async getHue() {
138
- return this.device.hue || 0;
195
+ if (this.isDimmerDevice) {
196
+ return 0;
197
+ }
198
+ const bulb = this.device;
199
+ return bulb.hue || 0;
139
200
  }
140
201
  async getSaturation() {
141
- return this.device.saturation || 0;
202
+ if (this.isDimmerDevice) {
203
+ return 0;
204
+ }
205
+ const bulb = this.device;
206
+ return bulb.saturation || 0;
142
207
  }
143
208
  async setHue(value) {
144
209
  try {
145
- if (!this.device.setColor) {
210
+ if (this.isDimmerDevice) {
146
211
  throw new Error('Device does not support color');
147
212
  }
148
- const success = await this.device.setColor(value, this.device.saturation || 0);
213
+ const bulb = this.device;
214
+ if (!bulb.setColor) {
215
+ throw new Error('Device does not support color');
216
+ }
217
+ const success = await bulb.setColor(value, bulb.saturation || 0);
149
218
  if (!success) {
150
219
  throw new Error(`Failed to set hue to ${value}`);
151
220
  }
@@ -157,10 +226,14 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
157
226
  }
158
227
  async setSaturation(value) {
159
228
  try {
160
- if (!this.device.setColor) {
229
+ if (this.isDimmerDevice) {
230
+ throw new Error('Device does not support color');
231
+ }
232
+ const bulb = this.device;
233
+ if (!bulb.setColor) {
161
234
  throw new Error('Device does not support color');
162
235
  }
163
- const success = await this.device.setColor(this.device.hue || 0, value);
236
+ const success = await bulb.setColor(bulb.hue || 0, value);
164
237
  if (!success) {
165
238
  throw new Error(`Failed to set saturation to ${value}`);
166
239
  }
@@ -170,6 +243,210 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
170
243
  this.handleDeviceError('set saturation', error);
171
244
  }
172
245
  }
246
+ detectDimmer(device) {
247
+ return typeof device.rgbColorSet === 'function';
248
+ }
249
+ setupIndicatorService() {
250
+ const serviceName = `${this.device.deviceName} Indicator`;
251
+ const existing = this.accessory.getService(serviceName);
252
+ this.indicatorService = existing || this.accessory.addService(this.platform.Service.Lightbulb, serviceName, 'indicator');
253
+ const indicatorService = this.indicatorService;
254
+ if (!indicatorService) {
255
+ return;
256
+ }
257
+ this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.On, this.getIndicatorOn.bind(this), this.setIndicatorOn.bind(this));
258
+ this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.Hue, this.getIndicatorHue.bind(this), this.setIndicatorHue.bind(this));
259
+ this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.Saturation, this.getIndicatorSaturation.bind(this), this.setIndicatorSaturation.bind(this));
260
+ }
261
+ setupCharacteristicForService(service, characteristic, onGet, onSet) {
262
+ this.withService(service, () => {
263
+ this.setupCharacteristic(characteristic, onGet, onSet);
264
+ });
265
+ }
266
+ updateIndicatorCharacteristic(characteristic, value) {
267
+ if (!this.indicatorService) {
268
+ return;
269
+ }
270
+ this.withService(this.indicatorService, () => {
271
+ this.updateCharacteristicValue(characteristic, value);
272
+ });
273
+ }
274
+ withService(service, fn) {
275
+ const currentService = this.service;
276
+ this.service = service;
277
+ try {
278
+ return fn();
279
+ }
280
+ finally {
281
+ this.service = currentService;
282
+ }
283
+ }
284
+ async getIndicatorOn() {
285
+ if (!this.isDimmerDevice) {
286
+ return false;
287
+ }
288
+ const dimmer = this.device;
289
+ return dimmer.rgbLightStatus === 'on';
290
+ }
291
+ async setIndicatorOn(value) {
292
+ if (!this.isDimmerDevice) {
293
+ return;
294
+ }
295
+ const isOn = Boolean(value);
296
+ const dimmer = this.device;
297
+ const success = isOn ? await dimmer.rgbColorOn() : await dimmer.rgbColorOff();
298
+ if (!success) {
299
+ throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} indicator light`);
300
+ }
301
+ await this.refreshDimmerDetails();
302
+ }
303
+ async getIndicatorHue() {
304
+ if (!this.isDimmerDevice) {
305
+ return 0;
306
+ }
307
+ const { hue } = this.rgbToHsv(this.device.rgbLightValue.red, this.device.rgbLightValue.green, this.device.rgbLightValue.blue);
308
+ this.indicatorColorState.hue = hue;
309
+ return hue;
310
+ }
311
+ async setIndicatorHue(value) {
312
+ if (!this.isDimmerDevice) {
313
+ return;
314
+ }
315
+ this.indicatorColorState.hue = Number(value);
316
+ this.scheduleIndicatorColorUpdate();
317
+ }
318
+ async getIndicatorSaturation() {
319
+ if (!this.isDimmerDevice) {
320
+ return 0;
321
+ }
322
+ const { saturation } = this.rgbToHsv(this.device.rgbLightValue.red, this.device.rgbLightValue.green, this.device.rgbLightValue.blue);
323
+ this.indicatorColorState.saturation = saturation;
324
+ return saturation;
325
+ }
326
+ async setIndicatorSaturation(value) {
327
+ if (!this.isDimmerDevice) {
328
+ return;
329
+ }
330
+ this.indicatorColorState.saturation = Number(value);
331
+ this.scheduleIndicatorColorUpdate();
332
+ }
333
+ scheduleIndicatorColorUpdate() {
334
+ if (this.indicatorColorUpdateTimeout) {
335
+ clearTimeout(this.indicatorColorUpdateTimeout);
336
+ }
337
+ this.indicatorColorUpdateTimeout = setTimeout(() => {
338
+ void this.pushIndicatorColor().catch(error => {
339
+ void this.handleDeviceError('set indicator color', error);
340
+ });
341
+ }, 250);
342
+ }
343
+ async pushIndicatorColor() {
344
+ if (!this.isDimmerDevice) {
345
+ return;
346
+ }
347
+ const [red, green, blue] = this.hsvToRgb(this.indicatorColorState.hue, this.indicatorColorState.saturation, 100);
348
+ const dimmer = this.device;
349
+ const success = await dimmer.rgbColorSet(red, green, blue);
350
+ if (!success) {
351
+ throw new Error('Failed to update indicator color');
352
+ }
353
+ this.indicatorColorState = {
354
+ hue: this.indicatorColorState.hue,
355
+ saturation: this.indicatorColorState.saturation,
356
+ };
357
+ await this.refreshDimmerDetails();
358
+ }
359
+ hsvToRgb(h, s, v) {
360
+ let hue = h % 360;
361
+ if (hue < 0) {
362
+ hue += 360;
363
+ }
364
+ const saturation = Math.max(0, Math.min(100, s)) / 100;
365
+ const value = Math.max(0, Math.min(100, v)) / 100;
366
+ const c = value * saturation;
367
+ const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
368
+ const m = value - c;
369
+ let rPrime = 0;
370
+ let gPrime = 0;
371
+ let bPrime = 0;
372
+ if (hue < 60) {
373
+ rPrime = c;
374
+ gPrime = x;
375
+ }
376
+ else if (hue < 120) {
377
+ rPrime = x;
378
+ gPrime = c;
379
+ }
380
+ else if (hue < 180) {
381
+ gPrime = c;
382
+ bPrime = x;
383
+ }
384
+ else if (hue < 240) {
385
+ gPrime = x;
386
+ bPrime = c;
387
+ }
388
+ else if (hue < 300) {
389
+ rPrime = x;
390
+ bPrime = c;
391
+ }
392
+ else {
393
+ rPrime = c;
394
+ bPrime = x;
395
+ }
396
+ const red = Math.round((rPrime + m) * 255);
397
+ const green = Math.round((gPrime + m) * 255);
398
+ const blue = Math.round((bPrime + m) * 255);
399
+ return [red, green, blue];
400
+ }
401
+ rgbToHsv(r, g, b) {
402
+ const red = r / 255;
403
+ const green = g / 255;
404
+ const blue = b / 255;
405
+ const max = Math.max(red, green, blue);
406
+ const min = Math.min(red, green, blue);
407
+ const delta = max - min;
408
+ let hue = 0;
409
+ if (delta !== 0) {
410
+ if (max === red) {
411
+ hue = ((green - blue) / delta) % 6;
412
+ }
413
+ else if (max === green) {
414
+ hue = (blue - red) / delta + 2;
415
+ }
416
+ else {
417
+ hue = (red - green) / delta + 4;
418
+ }
419
+ hue *= 60;
420
+ if (hue < 0) {
421
+ hue += 360;
422
+ }
423
+ }
424
+ const saturation = max === 0 ? 0 : (delta / max) * 100;
425
+ const value = max * 100;
426
+ return {
427
+ hue: Math.round(hue),
428
+ saturation: Math.round(saturation),
429
+ value: Math.round(value),
430
+ };
431
+ }
432
+ async refreshDimmerDetails() {
433
+ if (!this.isDimmerDevice) {
434
+ return;
435
+ }
436
+ const dimmer = this.device;
437
+ try {
438
+ const now = Date.now();
439
+ if (now - this.lastDimmerRefresh >= LightAccessory.DIMMER_REFRESH_DEBOUNCE_MS &&
440
+ typeof dimmer.getDetails === 'function') {
441
+ await dimmer.getDetails();
442
+ this.lastDimmerRefresh = now;
443
+ }
444
+ }
445
+ catch (error) {
446
+ this.platform.log.debug(`${this.device.deviceName}: failed to refresh details after state change`, error instanceof Error ? error : new Error(String(error)));
447
+ }
448
+ }
173
449
  }
174
450
  exports.LightAccessory = LightAccessory;
451
+ LightAccessory.DIMMER_REFRESH_DEBOUNCE_MS = 2000;
175
452
  //# sourceMappingURL=light.accessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"light.accessory.js","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AAIjD,kCAAkC;AAClC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,eAAe;AAC3C,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,eAAe;AAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C,MAAa,cAAe,SAAQ,8BAAa;IAI/C,YACE,QAA0B,EAC1B,SAA4B,EAC5B,MAAkB;QAElB,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACnD,CAAC;IAES,YAAY;QACpB,kCAAkC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YACvE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE7D,kCAAkC;QAClC,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CACtB,CAAC;QAEF,+DAA+D;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAElD,IAAI,YAAY,CAAC,aAAa,EAAE;YAC9B,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;SACH;QAED,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;QAED,IAAI,YAAY,CAAC,QAAQ,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QAED,0BAA0B;QAC1B,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EACjC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IACJ,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aAC1E,QAAQ,CAAC;YACR,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEL,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EACnC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CACpC,CAAC;IACJ,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;QAEF,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,0BAA0B,CAAC,OAAY;QACrD,MAAM,YAAY,GAAG,OAMpB,CAAC;QAEF,sBAAsB;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,KAAK,IAAI,CAAC;QACpD,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC/B,QAAQ,CACT,CAAC;QAEF,iCAAiC;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,UAAU,KAAK,SAAS,EAAE;YAC5E,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EACvC,YAAY,CAAC,UAAU,CACxB,CAAC;SACH;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,EAAE;YAC1E,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAC7C,YAAY,CAAC,SAAS,CACvB,CAAC;SACH;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC9B,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAChC,YAAY,CAAC,GAAG,CACjB,CAAC;aACH;YACD,IAAI,YAAY,CAAC,UAAU,KAAK,SAAS,EAAE;gBACzC,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EACvC,YAAY,CAAC,UAAU,CACxB,CAAC;aACH;SACF;IACH,CAAC;IAES,qBAAqB;QAC7B,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,SAAS;YACrD,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAA0B;QAC5C,IAAI;YACF,MAAM,IAAI,GAAG,KAAgB,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEhF,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;aACjE;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACpE;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;SAC/C;IACH,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAA0B;QACpD,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;aACzD;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACpD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAA0B;QAC1D,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAC9D;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAe,CAAC,CAAC;YAEvE,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;aAChE;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACnD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;SACxD;IACH,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,KAA0B;QAC7C,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACxC,KAAe,EACf,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAC5B,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;aAClD;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC1C;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAA0B;QACpD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACxC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EACpB,KAAe,CAChB,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;aACzD;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACpD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SACjD;IACH,CAAC;CACF;AAhQD,wCAgQC"}
1
+ {"version":3,"file":"light.accessory.js","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5G,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aA+B1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,sBAAsB;aAC9B,GAAG,EAAE,GAAG;IAhC1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6C;IAEjF,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAGjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,GAAG;IAgH1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAsChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IA4EzB;;OAEG;YACW,kBAAkB;IAIhC;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAgFzC,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACG,eAAe;IA6LrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5G,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aA+B1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,sBAAsB;aAC9B,GAAG,EAAE,GAAG;IAhC1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6C;IAEjF,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAGjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,GAAG;IAgH1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAsChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IA4EzB;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAgFzC,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACG,eAAe;IA6LrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
package/dist/platform.js CHANGED
@@ -295,7 +295,25 @@ class TSVESyncPlatform {
295
295
  * Update device states periodically
296
296
  */
297
297
  async updateDeviceStates() {
298
- await this.discoverDevices();
298
+ if (this.refreshInProgress) {
299
+ return;
300
+ }
301
+ this.refreshInProgress = true;
302
+ try {
303
+ await this.discoverDevices();
304
+ const syncTasks = Array.from(this.deviceAccessories.values()).map(async (accessory) => {
305
+ try {
306
+ await accessory.syncDeviceState();
307
+ }
308
+ catch (error) {
309
+ this.logger.warn('Failed to sync device state during scheduled refresh', error);
310
+ }
311
+ });
312
+ await Promise.all(syncTasks);
313
+ }
314
+ finally {
315
+ this.refreshInProgress = false;
316
+ }
299
317
  }
300
318
  /**
301
319
  * Handle token updates from the library