homebridge-tsvesync 1.0.78 → 1.0.79
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/dist/accessories/fan.accessory.d.ts +0 -11
- package/dist/accessories/fan.accessory.d.ts.map +1 -1
- package/dist/accessories/fan.accessory.js +3 -146
- package/dist/accessories/fan.accessory.js.map +1 -1
- package/dist/types/device.types.d.ts +2 -12
- package/dist/types/device.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/accessories/fan.accessory.ts +5 -191
- package/src/types/device.types.ts +2 -12
- package/.claude/settings.local.json +0 -8
- package/CLAUDE.md +0 -62
|
@@ -6,10 +6,6 @@ export declare class FanAccessory extends BaseAccessory {
|
|
|
6
6
|
protected readonly device: VeSyncFan;
|
|
7
7
|
private readonly capabilities;
|
|
8
8
|
private readonly speedLevels;
|
|
9
|
-
private timerService?;
|
|
10
|
-
private displayService?;
|
|
11
|
-
private temperatureService?;
|
|
12
|
-
private humidityService?;
|
|
13
9
|
constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncFan);
|
|
14
10
|
protected setupService(): void;
|
|
15
11
|
/**
|
|
@@ -31,12 +27,5 @@ export declare class FanAccessory extends BaseAccessory {
|
|
|
31
27
|
private getModeString;
|
|
32
28
|
private getMode;
|
|
33
29
|
private setMode;
|
|
34
|
-
private getCurrentFanState;
|
|
35
|
-
private getTargetFanState;
|
|
36
|
-
private setTargetFanState;
|
|
37
|
-
private setupTimerService;
|
|
38
|
-
private setupDisplayService;
|
|
39
|
-
private setupTemperatureService;
|
|
40
|
-
private setupHumidityService;
|
|
41
30
|
}
|
|
42
31
|
//# sourceMappingURL=fan.accessory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/fan.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,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqCtE,qBAAa,YAAa,SAAQ,aAAa;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;
|
|
1
|
+
{"version":3,"file":"fan.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/fan.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,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqCtE,qBAAa,YAAa,SAAQ,aAAa;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;gBAGrC,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,SAAS;IAQnB,SAAS,CAAC,YAAY,IAAI,IAAI;IAwD9B;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YAIT,SAAS;YAiBT,sBAAsB;YAkBtB,gBAAgB;YAiBhB,oBAAoB;YAMpB,oBAAoB;YAmBpB,YAAY;YAIZ,YAAY;YAmBZ,uBAAuB;YAIvB,uBAAuB;IAmBrC,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;YASP,OAAO;YAIP,OAAO;CActB"}
|
|
@@ -47,10 +47,6 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
47
47
|
this.accessory.addService(this.platform.Service.Fanv2);
|
|
48
48
|
// Set up required characteristics
|
|
49
49
|
this.setupCharacteristic(this.platform.Characteristic.Active, this.getActive.bind(this), this.setActive.bind(this));
|
|
50
|
-
// Add CurrentFanState characteristic
|
|
51
|
-
this.setupCharacteristic(this.platform.Characteristic.CurrentFanState, this.getCurrentFanState.bind(this));
|
|
52
|
-
// Add TargetFanState characteristic
|
|
53
|
-
this.setupCharacteristic(this.platform.Characteristic.TargetFanState, this.getTargetFanState.bind(this), this.setTargetFanState.bind(this));
|
|
54
50
|
// Set up speed control
|
|
55
51
|
this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed.bind(this), this.handleSetRotationSpeed.bind(this));
|
|
56
52
|
// Set up mode control
|
|
@@ -68,13 +64,6 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
68
64
|
.onSet((value) => this.setMode(value));
|
|
69
65
|
// Add Name characteristic
|
|
70
66
|
this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
|
|
71
|
-
// Add timer service for tower fans
|
|
72
|
-
if (this.device.deviceType.startsWith('LTF-')) {
|
|
73
|
-
this.setupTimerService();
|
|
74
|
-
this.setupDisplayService();
|
|
75
|
-
this.setupTemperatureService();
|
|
76
|
-
this.setupHumidityService();
|
|
77
|
-
}
|
|
78
67
|
}
|
|
79
68
|
/**
|
|
80
69
|
* Update device states based on the latest details
|
|
@@ -85,9 +74,7 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
85
74
|
const isActive = fanDetails.deviceStatus === 'on';
|
|
86
75
|
this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
|
|
87
76
|
// Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
|
|
88
|
-
this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ?
|
|
89
|
-
// Update target fan state (MANUAL = 0, AUTO = 1)
|
|
90
|
-
this.updateCharacteristicValue(this.platform.Characteristic.TargetFanState, fanDetails.mode === 'auto' ? 1 : 0);
|
|
77
|
+
this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ? 2 : 0);
|
|
91
78
|
// Update rotation speed
|
|
92
79
|
let rotationSpeed = 0;
|
|
93
80
|
if (isActive && fanDetails.speed !== undefined) {
|
|
@@ -108,22 +95,6 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
108
95
|
if (modeService && fanDetails.mode) {
|
|
109
96
|
modeService.setCharacteristic(this.platform.Characteristic.On, this.getModeValue(fanDetails.mode));
|
|
110
97
|
}
|
|
111
|
-
// Update timer service if it exists
|
|
112
|
-
if (this.timerService && 'timer' in details) {
|
|
113
|
-
this.timerService.updateCharacteristic(this.platform.Characteristic.On, details.timer > 0);
|
|
114
|
-
}
|
|
115
|
-
// Update display service if it exists
|
|
116
|
-
if (this.displayService && 'displayState' in details) {
|
|
117
|
-
this.displayService.updateCharacteristic(this.platform.Characteristic.On, details.displayState);
|
|
118
|
-
}
|
|
119
|
-
// Update temperature sensor if it exists
|
|
120
|
-
if (this.temperatureService && 'temperature' in details) {
|
|
121
|
-
this.temperatureService.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, details.temperature / 10);
|
|
122
|
-
}
|
|
123
|
-
// Update humidity sensor if it exists
|
|
124
|
-
if (this.humidityService && 'humidity' in details) {
|
|
125
|
-
this.humidityService.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, details.humidity);
|
|
126
|
-
}
|
|
127
98
|
}
|
|
128
99
|
getDeviceCapabilities() {
|
|
129
100
|
return {
|
|
@@ -248,8 +219,7 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
248
219
|
switch (mode) {
|
|
249
220
|
case 'normal': return MODE_NORMAL;
|
|
250
221
|
case 'auto': return MODE_AUTO;
|
|
251
|
-
case 'sleep':
|
|
252
|
-
case 'advancedSleep': return MODE_SLEEP;
|
|
222
|
+
case 'sleep': return MODE_SLEEP;
|
|
253
223
|
case 'turbo': return MODE_TURBO;
|
|
254
224
|
default: return MODE_NORMAL;
|
|
255
225
|
}
|
|
@@ -257,7 +227,7 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
257
227
|
getModeString(value) {
|
|
258
228
|
switch (value) {
|
|
259
229
|
case MODE_AUTO: return 'auto';
|
|
260
|
-
case MODE_SLEEP: return '
|
|
230
|
+
case MODE_SLEEP: return 'sleep';
|
|
261
231
|
case MODE_TURBO: return 'turbo';
|
|
262
232
|
default: return 'normal';
|
|
263
233
|
}
|
|
@@ -278,119 +248,6 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
278
248
|
this.handleDeviceError('set mode', error);
|
|
279
249
|
}
|
|
280
250
|
}
|
|
281
|
-
async getCurrentFanState() {
|
|
282
|
-
// INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2
|
|
283
|
-
if (this.device.deviceStatus !== 'on') {
|
|
284
|
-
return 0; // INACTIVE
|
|
285
|
-
}
|
|
286
|
-
return this.device.speed > 0 ? 2 : 1; // BLOWING_AIR or IDLE
|
|
287
|
-
}
|
|
288
|
-
async getTargetFanState() {
|
|
289
|
-
// MANUAL = 0, AUTO = 1
|
|
290
|
-
return this.device.mode === 'auto' ? 1 : 0;
|
|
291
|
-
}
|
|
292
|
-
async setTargetFanState(value) {
|
|
293
|
-
try {
|
|
294
|
-
const targetState = value;
|
|
295
|
-
const mode = targetState === 1 ? 'auto' : 'normal';
|
|
296
|
-
const success = await this.device.setMode(mode);
|
|
297
|
-
if (!success) {
|
|
298
|
-
throw new Error(`Failed to set target fan state to ${targetState === 1 ? 'AUTO' : 'MANUAL'}`);
|
|
299
|
-
}
|
|
300
|
-
await this.persistDeviceState('mode', mode);
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
this.handleDeviceError('set target fan state', error);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
setupTimerService() {
|
|
307
|
-
this.timerService = this.accessory.getService('Timer') ||
|
|
308
|
-
this.accessory.addService(this.platform.Service.Switch, 'Timer', 'timer');
|
|
309
|
-
this.timerService.getCharacteristic(this.platform.Characteristic.On)
|
|
310
|
-
.onGet(async () => {
|
|
311
|
-
try {
|
|
312
|
-
return this.device.timer > 0;
|
|
313
|
-
}
|
|
314
|
-
catch (_a) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
})
|
|
318
|
-
.onSet(async (value) => {
|
|
319
|
-
try {
|
|
320
|
-
if (value && this.device.setTimer) {
|
|
321
|
-
// Set timer for 1 hour as default
|
|
322
|
-
await this.device.setTimer(1);
|
|
323
|
-
}
|
|
324
|
-
else if (!value && this.device.clearTimer) {
|
|
325
|
-
await this.device.clearTimer();
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
catch (error) {
|
|
329
|
-
this.handleDeviceError('set timer', error);
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
setupDisplayService() {
|
|
334
|
-
this.displayService = this.accessory.getService('Display') ||
|
|
335
|
-
this.accessory.addService(this.platform.Service.Switch, 'Display', 'display');
|
|
336
|
-
this.displayService.getCharacteristic(this.platform.Characteristic.On)
|
|
337
|
-
.onGet(async () => {
|
|
338
|
-
try {
|
|
339
|
-
return this.device.displayState || false;
|
|
340
|
-
}
|
|
341
|
-
catch (_a) {
|
|
342
|
-
return false;
|
|
343
|
-
}
|
|
344
|
-
})
|
|
345
|
-
.onSet(async (value) => {
|
|
346
|
-
try {
|
|
347
|
-
if (this.device.setDisplay) {
|
|
348
|
-
await this.device.setDisplay(value);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
catch (error) {
|
|
352
|
-
this.handleDeviceError('set display', error);
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
setupTemperatureService() {
|
|
357
|
-
if (!this.device.temperature) {
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
this.temperatureService = this.accessory.getService(this.platform.Service.TemperatureSensor) ||
|
|
361
|
-
this.accessory.addService(this.platform.Service.TemperatureSensor, 'Temperature', 'temperature');
|
|
362
|
-
this.temperatureService.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
363
|
-
.onGet(async () => {
|
|
364
|
-
try {
|
|
365
|
-
const temp = this.device.temperature;
|
|
366
|
-
// Temperature is stored in tenths of a degree
|
|
367
|
-
return temp ? temp / 10 : 20;
|
|
368
|
-
}
|
|
369
|
-
catch (_a) {
|
|
370
|
-
return 20;
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
// Link the temperature sensor to the main fan service
|
|
374
|
-
this.service.addLinkedService(this.temperatureService);
|
|
375
|
-
}
|
|
376
|
-
setupHumidityService() {
|
|
377
|
-
if (!this.device.humidity) {
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
this.humidityService = this.accessory.getService(this.platform.Service.HumiditySensor) ||
|
|
381
|
-
this.accessory.addService(this.platform.Service.HumiditySensor, 'Humidity', 'humidity');
|
|
382
|
-
this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
|
|
383
|
-
.onGet(async () => {
|
|
384
|
-
try {
|
|
385
|
-
return this.device.humidity || 50;
|
|
386
|
-
}
|
|
387
|
-
catch (_a) {
|
|
388
|
-
return 50;
|
|
389
|
-
}
|
|
390
|
-
});
|
|
391
|
-
// Link the humidity sensor to the main fan service
|
|
392
|
-
this.service.addLinkedService(this.humidityService);
|
|
393
|
-
}
|
|
394
251
|
}
|
|
395
252
|
exports.FanAccessory = FanAccessory;
|
|
396
253
|
//# sourceMappingURL=fan.accessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan.accessory.js","sourceRoot":"","sources":["../../src/accessories/fan.accessory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fan.accessory.js","sourceRoot":"","sources":["../../src/accessories/fan.accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,20 +66,10 @@ export interface VeSyncHumidifier extends VeSyncDeviceWithPower, VeSyncDeviceWit
|
|
|
66
66
|
export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
|
|
67
67
|
oscillationState: boolean;
|
|
68
68
|
childLock: boolean;
|
|
69
|
-
mode: 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
70
|
-
timer?: number;
|
|
71
|
-
displayState?: boolean;
|
|
72
|
-
temperature?: number;
|
|
73
|
-
humidity?: number;
|
|
74
|
-
thermalComfort?: string;
|
|
69
|
+
mode: 'normal' | 'auto' | 'sleep' | 'turbo';
|
|
75
70
|
setOscillation(enabled: boolean): Promise<boolean>;
|
|
76
71
|
setChildLock(enabled: boolean): Promise<boolean>;
|
|
77
|
-
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
78
|
-
setTimer?(hours: number): Promise<boolean>;
|
|
79
|
-
clearTimer?(): Promise<boolean>;
|
|
80
|
-
setDisplay?(enabled: boolean): Promise<boolean>;
|
|
81
|
-
turnOnDisplay?(): Promise<boolean>;
|
|
82
|
-
turnOffDisplay?(): Promise<boolean>;
|
|
72
|
+
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): Promise<boolean>;
|
|
83
73
|
}
|
|
84
74
|
export interface VeSyncBulb extends VeSyncDeviceWithPower, VeSyncDeviceWithBrightness, VeSyncDeviceWithColor {
|
|
85
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.types.d.ts","sourceRoot":"","sources":["../../src/types/device.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"device.types.d.ts","sourceRoot":"","sources":["../../src/types/device.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IAC/G,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA2B,SAAQ,qBAAqB;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAsB,SAAQ,0BAA0B;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,iBAAiB,EAAE,WAAW,GAAG,kBAAkB,CAAC;IACpD,oBAAoB,CAAC,SAAS,EAAE,WAAW,GAAG,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,0BAA2B,SAAQ,qBAAqB;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAGD,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,wBAAwB;CAAG;AAEhJ,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,wBAAwB;CAAG;AAE7I,MAAM,WAAW,SAAU,SAAQ,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB;IACvG,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC5C,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,UAAW,SAAQ,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB;CAAG;AAE/G,MAAM,WAAW,YAAa,SAAQ,qBAAqB;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,qBAAqB;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;CACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-tsvesync",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.79",
|
|
4
4
|
"description": "Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"axios": "^1.6.5",
|
|
99
99
|
"dotenv": "^16.3.1",
|
|
100
100
|
"js-yaml": "^4.1.0",
|
|
101
|
-
"tsvesync": "
|
|
101
|
+
"tsvesync": "1.0.79"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/jest": "^29.5.11",
|
|
@@ -42,10 +42,6 @@ export class FanAccessory extends BaseAccessory {
|
|
|
42
42
|
protected readonly device: VeSyncFan;
|
|
43
43
|
private readonly capabilities: DeviceCapabilities;
|
|
44
44
|
private readonly speedLevels: number[];
|
|
45
|
-
private timerService?: any;
|
|
46
|
-
private displayService?: any;
|
|
47
|
-
private temperatureService?: any;
|
|
48
|
-
private humidityService?: any;
|
|
49
45
|
|
|
50
46
|
constructor(
|
|
51
47
|
platform: TSVESyncPlatform,
|
|
@@ -70,19 +66,6 @@ export class FanAccessory extends BaseAccessory {
|
|
|
70
66
|
this.setActive.bind(this)
|
|
71
67
|
);
|
|
72
68
|
|
|
73
|
-
// Add CurrentFanState characteristic
|
|
74
|
-
this.setupCharacteristic(
|
|
75
|
-
this.platform.Characteristic.CurrentFanState,
|
|
76
|
-
this.getCurrentFanState.bind(this)
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
// Add TargetFanState characteristic
|
|
80
|
-
this.setupCharacteristic(
|
|
81
|
-
this.platform.Characteristic.TargetFanState,
|
|
82
|
-
this.getTargetFanState.bind(this),
|
|
83
|
-
this.setTargetFanState.bind(this)
|
|
84
|
-
);
|
|
85
|
-
|
|
86
69
|
// Set up speed control
|
|
87
70
|
this.setupCharacteristic(
|
|
88
71
|
this.platform.Characteristic.RotationSpeed,
|
|
@@ -125,14 +108,6 @@ export class FanAccessory extends BaseAccessory {
|
|
|
125
108
|
this.platform.Characteristic.Name,
|
|
126
109
|
async () => this.device.deviceName
|
|
127
110
|
);
|
|
128
|
-
|
|
129
|
-
// Add timer service for tower fans
|
|
130
|
-
if (this.device.deviceType.startsWith('LTF-')) {
|
|
131
|
-
this.setupTimerService();
|
|
132
|
-
this.setupDisplayService();
|
|
133
|
-
this.setupTemperatureService();
|
|
134
|
-
this.setupHumidityService();
|
|
135
|
-
}
|
|
136
111
|
}
|
|
137
112
|
|
|
138
113
|
/**
|
|
@@ -156,13 +131,7 @@ export class FanAccessory extends BaseAccessory {
|
|
|
156
131
|
// Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
|
|
157
132
|
this.updateCharacteristicValue(
|
|
158
133
|
this.platform.Characteristic.CurrentFanState,
|
|
159
|
-
isActive ?
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
// Update target fan state (MANUAL = 0, AUTO = 1)
|
|
163
|
-
this.updateCharacteristicValue(
|
|
164
|
-
this.platform.Characteristic.TargetFanState,
|
|
165
|
-
fanDetails.mode === 'auto' ? 1 : 0
|
|
134
|
+
isActive ? 2 : 0
|
|
166
135
|
);
|
|
167
136
|
|
|
168
137
|
// Update rotation speed
|
|
@@ -196,38 +165,6 @@ export class FanAccessory extends BaseAccessory {
|
|
|
196
165
|
this.getModeValue(fanDetails.mode)
|
|
197
166
|
);
|
|
198
167
|
}
|
|
199
|
-
|
|
200
|
-
// Update timer service if it exists
|
|
201
|
-
if (this.timerService && 'timer' in details) {
|
|
202
|
-
this.timerService.updateCharacteristic(
|
|
203
|
-
this.platform.Characteristic.On,
|
|
204
|
-
details.timer > 0
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Update display service if it exists
|
|
209
|
-
if (this.displayService && 'displayState' in details) {
|
|
210
|
-
this.displayService.updateCharacteristic(
|
|
211
|
-
this.platform.Characteristic.On,
|
|
212
|
-
details.displayState
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Update temperature sensor if it exists
|
|
217
|
-
if (this.temperatureService && 'temperature' in details) {
|
|
218
|
-
this.temperatureService.updateCharacteristic(
|
|
219
|
-
this.platform.Characteristic.CurrentTemperature,
|
|
220
|
-
details.temperature / 10
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Update humidity sensor if it exists
|
|
225
|
-
if (this.humidityService && 'humidity' in details) {
|
|
226
|
-
this.humidityService.updateCharacteristic(
|
|
227
|
-
this.platform.Characteristic.CurrentRelativeHumidity,
|
|
228
|
-
details.humidity
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
168
|
}
|
|
232
169
|
|
|
233
170
|
protected getDeviceCapabilities(): DeviceCapabilities {
|
|
@@ -371,21 +308,20 @@ export class FanAccessory extends BaseAccessory {
|
|
|
371
308
|
}
|
|
372
309
|
}
|
|
373
310
|
|
|
374
|
-
private getModeValue(mode: 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
311
|
+
private getModeValue(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): number {
|
|
375
312
|
switch (mode) {
|
|
376
313
|
case 'normal': return MODE_NORMAL;
|
|
377
314
|
case 'auto': return MODE_AUTO;
|
|
378
|
-
case 'sleep':
|
|
379
|
-
case 'advancedSleep': return MODE_SLEEP;
|
|
315
|
+
case 'sleep': return MODE_SLEEP;
|
|
380
316
|
case 'turbo': return MODE_TURBO;
|
|
381
317
|
default: return MODE_NORMAL;
|
|
382
318
|
}
|
|
383
319
|
}
|
|
384
320
|
|
|
385
|
-
private getModeString(value: number): 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
321
|
+
private getModeString(value: number): 'normal' | 'auto' | 'sleep' | 'turbo' {
|
|
386
322
|
switch (value) {
|
|
387
323
|
case MODE_AUTO: return 'auto';
|
|
388
|
-
case MODE_SLEEP: return '
|
|
324
|
+
case MODE_SLEEP: return 'sleep';
|
|
389
325
|
case MODE_TURBO: return 'turbo';
|
|
390
326
|
default: return 'normal';
|
|
391
327
|
}
|
|
@@ -409,126 +345,4 @@ export class FanAccessory extends BaseAccessory {
|
|
|
409
345
|
this.handleDeviceError('set mode', error);
|
|
410
346
|
}
|
|
411
347
|
}
|
|
412
|
-
|
|
413
|
-
private async getCurrentFanState(): Promise<CharacteristicValue> {
|
|
414
|
-
// INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2
|
|
415
|
-
if (this.device.deviceStatus !== 'on') {
|
|
416
|
-
return 0; // INACTIVE
|
|
417
|
-
}
|
|
418
|
-
return this.device.speed > 0 ? 2 : 1; // BLOWING_AIR or IDLE
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
private async getTargetFanState(): Promise<CharacteristicValue> {
|
|
422
|
-
// MANUAL = 0, AUTO = 1
|
|
423
|
-
return this.device.mode === 'auto' ? 1 : 0;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
private async setTargetFanState(value: CharacteristicValue): Promise<void> {
|
|
427
|
-
try {
|
|
428
|
-
const targetState = value as number;
|
|
429
|
-
const mode = targetState === 1 ? 'auto' : 'normal';
|
|
430
|
-
const success = await this.device.setMode(mode);
|
|
431
|
-
|
|
432
|
-
if (!success) {
|
|
433
|
-
throw new Error(`Failed to set target fan state to ${targetState === 1 ? 'AUTO' : 'MANUAL'}`);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
await this.persistDeviceState('mode', mode);
|
|
437
|
-
} catch (error) {
|
|
438
|
-
this.handleDeviceError('set target fan state', error);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
private setupTimerService(): void {
|
|
443
|
-
this.timerService = this.accessory.getService('Timer') ||
|
|
444
|
-
this.accessory.addService(this.platform.Service.Switch, 'Timer', 'timer');
|
|
445
|
-
|
|
446
|
-
this.timerService.getCharacteristic(this.platform.Characteristic.On)
|
|
447
|
-
.onGet(async () => {
|
|
448
|
-
try {
|
|
449
|
-
return (this.device as any).timer > 0;
|
|
450
|
-
} catch {
|
|
451
|
-
return false;
|
|
452
|
-
}
|
|
453
|
-
})
|
|
454
|
-
.onSet(async (value: CharacteristicValue) => {
|
|
455
|
-
try {
|
|
456
|
-
if (value && (this.device as any).setTimer) {
|
|
457
|
-
// Set timer for 1 hour as default
|
|
458
|
-
await (this.device as any).setTimer(1);
|
|
459
|
-
} else if (!value && (this.device as any).clearTimer) {
|
|
460
|
-
await (this.device as any).clearTimer();
|
|
461
|
-
}
|
|
462
|
-
} catch (error) {
|
|
463
|
-
this.handleDeviceError('set timer', error);
|
|
464
|
-
}
|
|
465
|
-
});
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
private setupDisplayService(): void {
|
|
469
|
-
this.displayService = this.accessory.getService('Display') ||
|
|
470
|
-
this.accessory.addService(this.platform.Service.Switch, 'Display', 'display');
|
|
471
|
-
|
|
472
|
-
this.displayService.getCharacteristic(this.platform.Characteristic.On)
|
|
473
|
-
.onGet(async () => {
|
|
474
|
-
try {
|
|
475
|
-
return (this.device as any).displayState || false;
|
|
476
|
-
} catch {
|
|
477
|
-
return false;
|
|
478
|
-
}
|
|
479
|
-
})
|
|
480
|
-
.onSet(async (value: CharacteristicValue) => {
|
|
481
|
-
try {
|
|
482
|
-
if ((this.device as any).setDisplay) {
|
|
483
|
-
await (this.device as any).setDisplay(value as boolean);
|
|
484
|
-
}
|
|
485
|
-
} catch (error) {
|
|
486
|
-
this.handleDeviceError('set display', error);
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
private setupTemperatureService(): void {
|
|
492
|
-
if (!(this.device as any).temperature) {
|
|
493
|
-
return;
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
this.temperatureService = this.accessory.getService(this.platform.Service.TemperatureSensor) ||
|
|
497
|
-
this.accessory.addService(this.platform.Service.TemperatureSensor, 'Temperature', 'temperature');
|
|
498
|
-
|
|
499
|
-
this.temperatureService.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
500
|
-
.onGet(async () => {
|
|
501
|
-
try {
|
|
502
|
-
const temp = (this.device as any).temperature;
|
|
503
|
-
// Temperature is stored in tenths of a degree
|
|
504
|
-
return temp ? temp / 10 : 20;
|
|
505
|
-
} catch {
|
|
506
|
-
return 20;
|
|
507
|
-
}
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
// Link the temperature sensor to the main fan service
|
|
511
|
-
this.service.addLinkedService(this.temperatureService);
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
private setupHumidityService(): void {
|
|
515
|
-
if (!(this.device as any).humidity) {
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
this.humidityService = this.accessory.getService(this.platform.Service.HumiditySensor) ||
|
|
520
|
-
this.accessory.addService(this.platform.Service.HumiditySensor, 'Humidity', 'humidity');
|
|
521
|
-
|
|
522
|
-
this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
|
|
523
|
-
.onGet(async () => {
|
|
524
|
-
try {
|
|
525
|
-
return (this.device as any).humidity || 50;
|
|
526
|
-
} catch {
|
|
527
|
-
return 50;
|
|
528
|
-
}
|
|
529
|
-
});
|
|
530
|
-
|
|
531
|
-
// Link the humidity sensor to the main fan service
|
|
532
|
-
this.service.addLinkedService(this.humidityService);
|
|
533
|
-
}
|
|
534
348
|
}
|
|
@@ -78,20 +78,10 @@ export interface VeSyncHumidifier extends VeSyncDeviceWithPower, VeSyncDeviceWit
|
|
|
78
78
|
export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
|
|
79
79
|
oscillationState: boolean;
|
|
80
80
|
childLock: boolean;
|
|
81
|
-
mode: 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
82
|
-
timer?: number;
|
|
83
|
-
displayState?: boolean;
|
|
84
|
-
temperature?: number;
|
|
85
|
-
humidity?: number;
|
|
86
|
-
thermalComfort?: string;
|
|
81
|
+
mode: 'normal' | 'auto' | 'sleep' | 'turbo';
|
|
87
82
|
setOscillation(enabled: boolean): Promise<boolean>;
|
|
88
83
|
setChildLock(enabled: boolean): Promise<boolean>;
|
|
89
|
-
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'
|
|
90
|
-
setTimer?(hours: number): Promise<boolean>;
|
|
91
|
-
clearTimer?(): Promise<boolean>;
|
|
92
|
-
setDisplay?(enabled: boolean): Promise<boolean>;
|
|
93
|
-
turnOnDisplay?(): Promise<boolean>;
|
|
94
|
-
turnOffDisplay?(): Promise<boolean>;
|
|
84
|
+
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): Promise<boolean>;
|
|
95
85
|
}
|
|
96
86
|
|
|
97
87
|
export interface VeSyncBulb extends VeSyncDeviceWithPower, VeSyncDeviceWithBrightness, VeSyncDeviceWithColor {}
|
package/CLAUDE.md
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# CLAUDE.md
|
|
2
|
-
|
|
3
|
-
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
-
|
|
5
|
-
## Commands
|
|
6
|
-
|
|
7
|
-
### Development
|
|
8
|
-
```bash
|
|
9
|
-
npm run build # Build TypeScript to JavaScript
|
|
10
|
-
npm run watch # Build, link locally, and watch for changes
|
|
11
|
-
npm run lint # Run ESLint on src/**/*.ts
|
|
12
|
-
npm run test # Run Jest tests
|
|
13
|
-
npm run test:watch # Run tests in watch mode
|
|
14
|
-
npm run test:coverage # Run tests with coverage report
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Testing Individual Tests
|
|
18
|
-
```bash
|
|
19
|
-
npm test -- --testNamePattern="test name" # Run tests matching name
|
|
20
|
-
npm test path/to/test.ts # Run specific test file
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Architecture
|
|
24
|
-
|
|
25
|
-
This is a Homebridge plugin that bridges VeSync smart home devices to Apple HomeKit. The codebase follows an object-oriented architecture with these key patterns:
|
|
26
|
-
|
|
27
|
-
### Core Components
|
|
28
|
-
|
|
29
|
-
1. **TSVESyncPlatform** (`src/platform.ts`): Main platform class implementing Homebridge's DynamicPlatformPlugin. Handles device discovery, authentication, and lifecycle management.
|
|
30
|
-
|
|
31
|
-
2. **BaseAccessory** (`src/accessories/base.accessory.ts`): Abstract base class that all device accessories extend. Provides common functionality like state management, API interactions, and HomeKit service setup.
|
|
32
|
-
|
|
33
|
-
3. **DeviceFactory** (`src/utils/device-factory.ts`): Factory pattern implementation that creates appropriate accessory instances based on device type and model.
|
|
34
|
-
|
|
35
|
-
4. **API Proxy** (`src/utils/api-proxy.ts`): Implements rate limiting and quota management for VeSync API calls to prevent hitting daily limits.
|
|
36
|
-
|
|
37
|
-
### Key Patterns
|
|
38
|
-
|
|
39
|
-
- **Inheritance**: All device accessories (air purifiers, humidifiers, outlets, etc.) extend BaseAccessory
|
|
40
|
-
- **Factory Pattern**: DeviceFactory dynamically creates accessory instances based on device type
|
|
41
|
-
- **Proxy Pattern**: API calls go through api-proxy for rate limiting and quota management
|
|
42
|
-
- **Retry Pattern**: RetryManager handles failed operations with exponential backoff
|
|
43
|
-
|
|
44
|
-
### Device Support
|
|
45
|
-
|
|
46
|
-
The plugin supports 40+ VeSync device models across categories:
|
|
47
|
-
- Air Purifiers (Levoit Core/Vital series)
|
|
48
|
-
- Humidifiers (Levoit Classic/LV600 series)
|
|
49
|
-
- Smart Outlets (Etekcity)
|
|
50
|
-
- Smart Switches
|
|
51
|
-
- Smart Bulbs
|
|
52
|
-
- Tower Fans
|
|
53
|
-
|
|
54
|
-
Each device type has its own accessory class in `src/accessories/` that maps device-specific features to appropriate HomeKit characteristics.
|
|
55
|
-
|
|
56
|
-
### API Integration
|
|
57
|
-
|
|
58
|
-
The plugin uses the unofficial `tsvesync` library to communicate with VeSync's API. Key considerations:
|
|
59
|
-
- API has daily quota limits (handled by QuotaManager)
|
|
60
|
-
- Requests are rate-limited to prevent throttling
|
|
61
|
-
- Failed requests are retried with exponential backoff
|
|
62
|
-
- Device state is cached to minimize API calls
|