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 +32 -0
- package/dist/accessories/light.accessory.d.ts +26 -4
- package/dist/accessories/light.accessory.d.ts.map +1 -1
- package/dist/accessories/light.accessory.js +292 -15
- 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 +417 -36
- 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,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,
|
|
4
|
+
import { DeviceCapabilities, VeSyncLightDevice } from '../types/device.types';
|
|
5
5
|
export declare class LightAccessory extends BaseAccessory {
|
|
6
|
-
protected readonly device:
|
|
7
|
-
private
|
|
8
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 ${
|
|
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
|
-
|
|
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 (
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
210
|
+
if (this.isDimmerDevice) {
|
|
146
211
|
throw new Error('Device does not support color');
|
|
147
212
|
}
|
|
148
|
-
const
|
|
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 (
|
|
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
|
|
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":"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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
|