homebridge-tsvesync 1.3.3 → 1.3.4
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 +13 -0
- package/dist/accessories/light.accessory.d.ts +25 -3
- package/dist/accessories/light.accessory.d.ts.map +1 -1
- package/dist/accessories/light.accessory.js +290 -14
- package/dist/accessories/light.accessory.js.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +19 -1
- package/dist/platform.js.map +1 -1
- package/dist/types/device.types.d.ts +16 -0
- package/dist/types/device.types.d.ts.map +1 -1
- package/dist/utils/device-factory.d.ts +1 -0
- package/dist/utils/device-factory.d.ts.map +1 -1
- package/dist/utils/device-factory.js +10 -2
- package/dist/utils/device-factory.js.map +1 -1
- package/package.json +2 -2
- package/src/accessories/light.accessory.ts +415 -34
- package/src/platform.ts +21 -1
- package/src/types/device.types.ts +18 -0
- package/src/utils/device-factory.ts +16 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.4 (2025-09-18)
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **🕹️ ESWD16 Dimming in HomeKit**: ESWD16 dimmer switches now register as HomeKit `Lightbulb` accessories with native On/Off and Brightness control.
|
|
7
|
+
- **🌈 Indicator Ring Control**: Introduced a dedicated "Indicator" light service for the ESWD16 locator ring, including Hue/Saturation control powered by automatic HSV→RGB conversion.
|
|
8
|
+
|
|
9
|
+
### Improved
|
|
10
|
+
- **🔄 State Synchronization**: On/Off and brightness updates now refresh ESWD16 cloud state immediately, keeping HomeKit characteristics accurate even when VeSync lags.
|
|
11
|
+
- **🛡️ Polling Guardrails**: Background discovery is now serialized and paired with UUID-stable Air Quality accessories, preventing duplicate registrations and overlapping sync loops.
|
|
12
|
+
|
|
13
|
+
### Dependencies
|
|
14
|
+
- **📦 tsvesync**: Upgraded to 1.3.4 to stay aligned with the latest ESWD16 API surfaces.
|
|
15
|
+
|
|
3
16
|
## 1.3.3 (2025-01-05)
|
|
4
17
|
|
|
5
18
|
### 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,
|
|
4
|
+
import { DeviceCapabilities, VeSyncLightDevice } from '../types/device.types';
|
|
5
5
|
export declare class LightAccessory extends BaseAccessory {
|
|
6
|
-
protected readonly device:
|
|
6
|
+
protected readonly device: VeSyncLightDevice;
|
|
7
7
|
private readonly capabilities;
|
|
8
|
-
|
|
8
|
+
private readonly 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,
|
|
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,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,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;IAQ3B,SAAS,CAAC,YAAY,IAAI,IAAI;IA0C9B,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,7 +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.indicatorColorState = { hue: 0, saturation: 0 };
|
|
13
|
+
this.lastDimmerRefresh = 0;
|
|
12
14
|
this.device = device;
|
|
15
|
+
this.isDimmerDevice = this.detectDimmer(device);
|
|
13
16
|
this.capabilities = this.getDeviceCapabilities();
|
|
14
17
|
}
|
|
15
18
|
setupService() {
|
|
@@ -19,7 +22,7 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
19
22
|
// Set up required characteristics
|
|
20
23
|
this.setupCharacteristic(this.platform.Characteristic.On, this.getOn.bind(this), this.setOn.bind(this));
|
|
21
24
|
// Set up optional characteristics based on device capabilities
|
|
22
|
-
const capabilities = this.
|
|
25
|
+
const capabilities = this.capabilities;
|
|
23
26
|
if (capabilities.hasBrightness) {
|
|
24
27
|
this.setupCharacteristic(this.platform.Characteristic.Brightness, this.getBrightness.bind(this), this.setBrightness.bind(this));
|
|
25
28
|
}
|
|
@@ -31,6 +34,9 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
31
34
|
}
|
|
32
35
|
// Add Name characteristic
|
|
33
36
|
this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
|
|
37
|
+
if (this.isDimmerDevice) {
|
|
38
|
+
this.setupIndicatorService();
|
|
39
|
+
}
|
|
34
40
|
}
|
|
35
41
|
setupColorTemperature() {
|
|
36
42
|
this.service.getCharacteristic(this.platform.Characteristic.ColorTemperature)
|
|
@@ -69,9 +75,30 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
69
75
|
this.updateCharacteristicValue(this.platform.Characteristic.Saturation, lightDetails.saturation);
|
|
70
76
|
}
|
|
71
77
|
}
|
|
78
|
+
if (this.isDimmerDevice && this.indicatorService) {
|
|
79
|
+
const dimmer = lightDetails;
|
|
80
|
+
const isRgbOn = dimmer.rgbLightStatus === 'on';
|
|
81
|
+
this.updateIndicatorCharacteristic(this.platform.Characteristic.On, isRgbOn);
|
|
82
|
+
const { hue, saturation } = this.rgbToHsv(dimmer.rgbLightValue.red, dimmer.rgbLightValue.green, dimmer.rgbLightValue.blue);
|
|
83
|
+
this.indicatorColorState = { hue, saturation };
|
|
84
|
+
this.updateIndicatorCharacteristic(this.platform.Characteristic.Hue, hue);
|
|
85
|
+
this.updateIndicatorCharacteristic(this.platform.Characteristic.Saturation, saturation);
|
|
86
|
+
}
|
|
72
87
|
}
|
|
73
88
|
getDeviceCapabilities() {
|
|
74
|
-
|
|
89
|
+
if (this.isDimmerDevice) {
|
|
90
|
+
return {
|
|
91
|
+
hasBrightness: true,
|
|
92
|
+
hasColorTemp: false,
|
|
93
|
+
hasColor: false,
|
|
94
|
+
hasSpeed: false,
|
|
95
|
+
hasHumidity: false,
|
|
96
|
+
hasAirQuality: false,
|
|
97
|
+
hasWaterLevel: false,
|
|
98
|
+
hasChildLock: false,
|
|
99
|
+
hasSwingMode: false,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
75
102
|
const model = this.device.deviceType.toUpperCase();
|
|
76
103
|
return {
|
|
77
104
|
hasBrightness: true,
|
|
@@ -96,6 +123,9 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
96
123
|
throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
|
|
97
124
|
}
|
|
98
125
|
await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
|
|
126
|
+
if (this.isDimmerDevice) {
|
|
127
|
+
await this.refreshDimmerDetails();
|
|
128
|
+
}
|
|
99
129
|
}
|
|
100
130
|
catch (error) {
|
|
101
131
|
this.handleDeviceError('set on state', error);
|
|
@@ -106,25 +136,51 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
106
136
|
}
|
|
107
137
|
async setBrightness(value) {
|
|
108
138
|
try {
|
|
109
|
-
const
|
|
139
|
+
const target = Math.round(Number(value));
|
|
140
|
+
if (this.isDimmerDevice && target <= 0) {
|
|
141
|
+
const success = await this.device.turnOff();
|
|
142
|
+
if (!success) {
|
|
143
|
+
throw new Error('Failed to turn off device when setting brightness to 0');
|
|
144
|
+
}
|
|
145
|
+
await this.persistDeviceState('deviceStatus', 'off');
|
|
146
|
+
await this.persistDeviceState('brightness', 0);
|
|
147
|
+
await this.refreshDimmerDetails();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const brightness = Math.min(100, Math.max(this.isDimmerDevice ? 1 : 0, target));
|
|
151
|
+
const success = await this.device.setBrightness(brightness);
|
|
110
152
|
if (!success) {
|
|
111
|
-
throw new Error(`Failed to set brightness to ${
|
|
153
|
+
throw new Error(`Failed to set brightness to ${brightness}`);
|
|
154
|
+
}
|
|
155
|
+
await this.persistDeviceState('brightness', brightness);
|
|
156
|
+
if (this.isDimmerDevice && brightness > 0) {
|
|
157
|
+
await this.persistDeviceState('deviceStatus', 'on');
|
|
158
|
+
}
|
|
159
|
+
if (this.isDimmerDevice) {
|
|
160
|
+
await this.refreshDimmerDetails();
|
|
112
161
|
}
|
|
113
|
-
await this.persistDeviceState('brightness', value);
|
|
114
162
|
}
|
|
115
163
|
catch (error) {
|
|
116
164
|
this.handleDeviceError('set brightness', error);
|
|
117
165
|
}
|
|
118
166
|
}
|
|
119
167
|
async getColorTemperature() {
|
|
120
|
-
|
|
168
|
+
if (this.isDimmerDevice) {
|
|
169
|
+
return DEFAULT_COLOR_TEMP;
|
|
170
|
+
}
|
|
171
|
+
const bulb = this.device;
|
|
172
|
+
return bulb.colorTemp || DEFAULT_COLOR_TEMP;
|
|
121
173
|
}
|
|
122
174
|
async setColorTemperature(value) {
|
|
123
175
|
try {
|
|
124
|
-
if (
|
|
176
|
+
if (this.isDimmerDevice) {
|
|
177
|
+
throw new Error('Device does not support color temperature');
|
|
178
|
+
}
|
|
179
|
+
const bulb = this.device;
|
|
180
|
+
if (!bulb.setColorTemperature) {
|
|
125
181
|
throw new Error('Device does not support color temperature');
|
|
126
182
|
}
|
|
127
|
-
const success = await
|
|
183
|
+
const success = await bulb.setColorTemperature(value);
|
|
128
184
|
if (!success) {
|
|
129
185
|
throw new Error(`Failed to set color temperature to ${value}`);
|
|
130
186
|
}
|
|
@@ -135,17 +191,29 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
135
191
|
}
|
|
136
192
|
}
|
|
137
193
|
async getHue() {
|
|
138
|
-
|
|
194
|
+
if (this.isDimmerDevice) {
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
const bulb = this.device;
|
|
198
|
+
return bulb.hue || 0;
|
|
139
199
|
}
|
|
140
200
|
async getSaturation() {
|
|
141
|
-
|
|
201
|
+
if (this.isDimmerDevice) {
|
|
202
|
+
return 0;
|
|
203
|
+
}
|
|
204
|
+
const bulb = this.device;
|
|
205
|
+
return bulb.saturation || 0;
|
|
142
206
|
}
|
|
143
207
|
async setHue(value) {
|
|
144
208
|
try {
|
|
145
|
-
if (
|
|
209
|
+
if (this.isDimmerDevice) {
|
|
210
|
+
throw new Error('Device does not support color');
|
|
211
|
+
}
|
|
212
|
+
const bulb = this.device;
|
|
213
|
+
if (!bulb.setColor) {
|
|
146
214
|
throw new Error('Device does not support color');
|
|
147
215
|
}
|
|
148
|
-
const success = await
|
|
216
|
+
const success = await bulb.setColor(value, bulb.saturation || 0);
|
|
149
217
|
if (!success) {
|
|
150
218
|
throw new Error(`Failed to set hue to ${value}`);
|
|
151
219
|
}
|
|
@@ -157,10 +225,14 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
157
225
|
}
|
|
158
226
|
async setSaturation(value) {
|
|
159
227
|
try {
|
|
160
|
-
if (
|
|
228
|
+
if (this.isDimmerDevice) {
|
|
161
229
|
throw new Error('Device does not support color');
|
|
162
230
|
}
|
|
163
|
-
const
|
|
231
|
+
const bulb = this.device;
|
|
232
|
+
if (!bulb.setColor) {
|
|
233
|
+
throw new Error('Device does not support color');
|
|
234
|
+
}
|
|
235
|
+
const success = await bulb.setColor(bulb.hue || 0, value);
|
|
164
236
|
if (!success) {
|
|
165
237
|
throw new Error(`Failed to set saturation to ${value}`);
|
|
166
238
|
}
|
|
@@ -170,6 +242,210 @@ class LightAccessory extends base_accessory_1.BaseAccessory {
|
|
|
170
242
|
this.handleDeviceError('set saturation', error);
|
|
171
243
|
}
|
|
172
244
|
}
|
|
245
|
+
detectDimmer(device) {
|
|
246
|
+
return typeof device.rgbColorSet === 'function';
|
|
247
|
+
}
|
|
248
|
+
setupIndicatorService() {
|
|
249
|
+
const serviceName = `${this.device.deviceName} Indicator`;
|
|
250
|
+
const existing = this.accessory.getService(serviceName);
|
|
251
|
+
this.indicatorService = existing || this.accessory.addService(this.platform.Service.Lightbulb, serviceName, 'indicator');
|
|
252
|
+
const indicatorService = this.indicatorService;
|
|
253
|
+
if (!indicatorService) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.On, this.getIndicatorOn.bind(this), this.setIndicatorOn.bind(this));
|
|
257
|
+
this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.Hue, this.getIndicatorHue.bind(this), this.setIndicatorHue.bind(this));
|
|
258
|
+
this.setupCharacteristicForService(indicatorService, this.platform.Characteristic.Saturation, this.getIndicatorSaturation.bind(this), this.setIndicatorSaturation.bind(this));
|
|
259
|
+
}
|
|
260
|
+
setupCharacteristicForService(service, characteristic, onGet, onSet) {
|
|
261
|
+
this.withService(service, () => {
|
|
262
|
+
this.setupCharacteristic(characteristic, onGet, onSet);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
updateIndicatorCharacteristic(characteristic, value) {
|
|
266
|
+
if (!this.indicatorService) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.withService(this.indicatorService, () => {
|
|
270
|
+
this.updateCharacteristicValue(characteristic, value);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
withService(service, fn) {
|
|
274
|
+
const currentService = this.service;
|
|
275
|
+
this.service = service;
|
|
276
|
+
try {
|
|
277
|
+
return fn();
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
this.service = currentService;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async getIndicatorOn() {
|
|
284
|
+
if (!this.isDimmerDevice) {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
const dimmer = this.device;
|
|
288
|
+
return dimmer.rgbLightStatus === 'on';
|
|
289
|
+
}
|
|
290
|
+
async setIndicatorOn(value) {
|
|
291
|
+
if (!this.isDimmerDevice) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const isOn = Boolean(value);
|
|
295
|
+
const dimmer = this.device;
|
|
296
|
+
const success = isOn ? await dimmer.rgbColorOn() : await dimmer.rgbColorOff();
|
|
297
|
+
if (!success) {
|
|
298
|
+
throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} indicator light`);
|
|
299
|
+
}
|
|
300
|
+
await this.refreshDimmerDetails();
|
|
301
|
+
}
|
|
302
|
+
async getIndicatorHue() {
|
|
303
|
+
if (!this.isDimmerDevice) {
|
|
304
|
+
return 0;
|
|
305
|
+
}
|
|
306
|
+
const { hue } = this.rgbToHsv(this.device.rgbLightValue.red, this.device.rgbLightValue.green, this.device.rgbLightValue.blue);
|
|
307
|
+
this.indicatorColorState.hue = hue;
|
|
308
|
+
return hue;
|
|
309
|
+
}
|
|
310
|
+
async setIndicatorHue(value) {
|
|
311
|
+
if (!this.isDimmerDevice) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
this.indicatorColorState.hue = Number(value);
|
|
315
|
+
this.scheduleIndicatorColorUpdate();
|
|
316
|
+
}
|
|
317
|
+
async getIndicatorSaturation() {
|
|
318
|
+
if (!this.isDimmerDevice) {
|
|
319
|
+
return 0;
|
|
320
|
+
}
|
|
321
|
+
const { saturation } = this.rgbToHsv(this.device.rgbLightValue.red, this.device.rgbLightValue.green, this.device.rgbLightValue.blue);
|
|
322
|
+
this.indicatorColorState.saturation = saturation;
|
|
323
|
+
return saturation;
|
|
324
|
+
}
|
|
325
|
+
async setIndicatorSaturation(value) {
|
|
326
|
+
if (!this.isDimmerDevice) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
this.indicatorColorState.saturation = Number(value);
|
|
330
|
+
this.scheduleIndicatorColorUpdate();
|
|
331
|
+
}
|
|
332
|
+
scheduleIndicatorColorUpdate() {
|
|
333
|
+
if (this.indicatorColorUpdateTimeout) {
|
|
334
|
+
clearTimeout(this.indicatorColorUpdateTimeout);
|
|
335
|
+
}
|
|
336
|
+
this.indicatorColorUpdateTimeout = setTimeout(() => {
|
|
337
|
+
void this.pushIndicatorColor().catch(error => {
|
|
338
|
+
void this.handleDeviceError('set indicator color', error);
|
|
339
|
+
});
|
|
340
|
+
}, 250);
|
|
341
|
+
}
|
|
342
|
+
async pushIndicatorColor() {
|
|
343
|
+
if (!this.isDimmerDevice) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const [red, green, blue] = this.hsvToRgb(this.indicatorColorState.hue, this.indicatorColorState.saturation, 100);
|
|
347
|
+
const dimmer = this.device;
|
|
348
|
+
const success = await dimmer.rgbColorSet(red, green, blue);
|
|
349
|
+
if (!success) {
|
|
350
|
+
throw new Error('Failed to update indicator color');
|
|
351
|
+
}
|
|
352
|
+
this.indicatorColorState = {
|
|
353
|
+
hue: this.indicatorColorState.hue,
|
|
354
|
+
saturation: this.indicatorColorState.saturation,
|
|
355
|
+
};
|
|
356
|
+
await this.refreshDimmerDetails();
|
|
357
|
+
}
|
|
358
|
+
hsvToRgb(h, s, v) {
|
|
359
|
+
let hue = h % 360;
|
|
360
|
+
if (hue < 0) {
|
|
361
|
+
hue += 360;
|
|
362
|
+
}
|
|
363
|
+
const saturation = Math.max(0, Math.min(100, s)) / 100;
|
|
364
|
+
const value = Math.max(0, Math.min(100, v)) / 100;
|
|
365
|
+
const c = value * saturation;
|
|
366
|
+
const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
|
|
367
|
+
const m = value - c;
|
|
368
|
+
let rPrime = 0;
|
|
369
|
+
let gPrime = 0;
|
|
370
|
+
let bPrime = 0;
|
|
371
|
+
if (hue < 60) {
|
|
372
|
+
rPrime = c;
|
|
373
|
+
gPrime = x;
|
|
374
|
+
}
|
|
375
|
+
else if (hue < 120) {
|
|
376
|
+
rPrime = x;
|
|
377
|
+
gPrime = c;
|
|
378
|
+
}
|
|
379
|
+
else if (hue < 180) {
|
|
380
|
+
gPrime = c;
|
|
381
|
+
bPrime = x;
|
|
382
|
+
}
|
|
383
|
+
else if (hue < 240) {
|
|
384
|
+
gPrime = x;
|
|
385
|
+
bPrime = c;
|
|
386
|
+
}
|
|
387
|
+
else if (hue < 300) {
|
|
388
|
+
rPrime = x;
|
|
389
|
+
bPrime = c;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
rPrime = c;
|
|
393
|
+
bPrime = x;
|
|
394
|
+
}
|
|
395
|
+
const red = Math.round((rPrime + m) * 255);
|
|
396
|
+
const green = Math.round((gPrime + m) * 255);
|
|
397
|
+
const blue = Math.round((bPrime + m) * 255);
|
|
398
|
+
return [red, green, blue];
|
|
399
|
+
}
|
|
400
|
+
rgbToHsv(r, g, b) {
|
|
401
|
+
const red = r / 255;
|
|
402
|
+
const green = g / 255;
|
|
403
|
+
const blue = b / 255;
|
|
404
|
+
const max = Math.max(red, green, blue);
|
|
405
|
+
const min = Math.min(red, green, blue);
|
|
406
|
+
const delta = max - min;
|
|
407
|
+
let hue = 0;
|
|
408
|
+
if (delta !== 0) {
|
|
409
|
+
if (max === red) {
|
|
410
|
+
hue = ((green - blue) / delta) % 6;
|
|
411
|
+
}
|
|
412
|
+
else if (max === green) {
|
|
413
|
+
hue = (blue - red) / delta + 2;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
hue = (red - green) / delta + 4;
|
|
417
|
+
}
|
|
418
|
+
hue *= 60;
|
|
419
|
+
if (hue < 0) {
|
|
420
|
+
hue += 360;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
const saturation = max === 0 ? 0 : (delta / max) * 100;
|
|
424
|
+
const value = max * 100;
|
|
425
|
+
return {
|
|
426
|
+
hue: Math.round(hue),
|
|
427
|
+
saturation: Math.round(saturation),
|
|
428
|
+
value: Math.round(value),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
async refreshDimmerDetails() {
|
|
432
|
+
if (!this.isDimmerDevice) {
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
const dimmer = this.device;
|
|
436
|
+
try {
|
|
437
|
+
const now = Date.now();
|
|
438
|
+
if (now - this.lastDimmerRefresh >= LightAccessory.DIMMER_REFRESH_DEBOUNCE_MS &&
|
|
439
|
+
typeof dimmer.getDetails === 'function') {
|
|
440
|
+
await dimmer.getDetails();
|
|
441
|
+
this.lastDimmerRefresh = now;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
this.platform.log.debug(`${this.device.deviceName}: failed to refresh details after state change`, error instanceof Error ? error : new Error(String(error)));
|
|
446
|
+
}
|
|
447
|
+
}
|
|
173
448
|
}
|
|
174
449
|
exports.LightAccessory = LightAccessory;
|
|
450
|
+
LightAccessory.DIMMER_REFRESH_DEBOUNCE_MS = 2000;
|
|
175
451
|
//# sourceMappingURL=light.accessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light.accessory.js","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"light.accessory.js","sourceRoot":"","sources":["../../src/accessories/light.accessory.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|