homebridge-tsvesync 1.0.76 → 1.0.78
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/.claude/settings.local.json +8 -0
- package/CLAUDE.md +62 -0
- package/dist/accessories/fan.accessory.d.ts +11 -0
- package/dist/accessories/fan.accessory.d.ts.map +1 -1
- package/dist/accessories/fan.accessory.js +146 -3
- package/dist/accessories/fan.accessory.js.map +1 -1
- package/dist/types/device.types.d.ts +12 -2
- package/dist/types/device.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/accessories/fan.accessory.ts +191 -5
- package/src/types/device.types.ts +12 -2
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
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
|
|
@@ -6,6 +6,10 @@ 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?;
|
|
9
13
|
constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncFan);
|
|
10
14
|
protected setupService(): void;
|
|
11
15
|
/**
|
|
@@ -27,5 +31,12 @@ export declare class FanAccessory extends BaseAccessory {
|
|
|
27
31
|
private getModeString;
|
|
28
32
|
private getMode;
|
|
29
33
|
private setMode;
|
|
34
|
+
private getCurrentFanState;
|
|
35
|
+
private getTargetFanState;
|
|
36
|
+
private setTargetFanState;
|
|
37
|
+
private setupTimerService;
|
|
38
|
+
private setupDisplayService;
|
|
39
|
+
private setupTemperatureService;
|
|
40
|
+
private setupHumidityService;
|
|
30
41
|
}
|
|
31
42
|
//# 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;IACvC,OAAO,CAAC,YAAY,CAAC,CAAM;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAM;IACjC,OAAO,CAAC,eAAe,CAAC,CAAM;gBAG5B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,SAAS;IAQnB,SAAS,CAAC,YAAY,IAAI,IAAI;IA6E9B;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA4FvE,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;IAWpB,OAAO,CAAC,aAAa;YASP,OAAO;YAIP,OAAO;YAeP,kBAAkB;YAQlB,iBAAiB;YAKjB,iBAAiB;IAgB/B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,oBAAoB;CAoB7B"}
|
|
@@ -47,6 +47,10 @@ 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));
|
|
50
54
|
// Set up speed control
|
|
51
55
|
this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed.bind(this), this.handleSetRotationSpeed.bind(this));
|
|
52
56
|
// Set up mode control
|
|
@@ -64,6 +68,13 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
64
68
|
.onSet((value) => this.setMode(value));
|
|
65
69
|
// Add Name characteristic
|
|
66
70
|
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
|
+
}
|
|
67
78
|
}
|
|
68
79
|
/**
|
|
69
80
|
* Update device states based on the latest details
|
|
@@ -74,7 +85,9 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
74
85
|
const isActive = fanDetails.deviceStatus === 'on';
|
|
75
86
|
this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
|
|
76
87
|
// Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
|
|
77
|
-
this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ? 2 : 0);
|
|
88
|
+
this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ? (fanDetails.speed > 0 ? 2 : 1) : 0);
|
|
89
|
+
// Update target fan state (MANUAL = 0, AUTO = 1)
|
|
90
|
+
this.updateCharacteristicValue(this.platform.Characteristic.TargetFanState, fanDetails.mode === 'auto' ? 1 : 0);
|
|
78
91
|
// Update rotation speed
|
|
79
92
|
let rotationSpeed = 0;
|
|
80
93
|
if (isActive && fanDetails.speed !== undefined) {
|
|
@@ -95,6 +108,22 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
95
108
|
if (modeService && fanDetails.mode) {
|
|
96
109
|
modeService.setCharacteristic(this.platform.Characteristic.On, this.getModeValue(fanDetails.mode));
|
|
97
110
|
}
|
|
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
|
+
}
|
|
98
127
|
}
|
|
99
128
|
getDeviceCapabilities() {
|
|
100
129
|
return {
|
|
@@ -219,7 +248,8 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
219
248
|
switch (mode) {
|
|
220
249
|
case 'normal': return MODE_NORMAL;
|
|
221
250
|
case 'auto': return MODE_AUTO;
|
|
222
|
-
case 'sleep':
|
|
251
|
+
case 'sleep':
|
|
252
|
+
case 'advancedSleep': return MODE_SLEEP;
|
|
223
253
|
case 'turbo': return MODE_TURBO;
|
|
224
254
|
default: return MODE_NORMAL;
|
|
225
255
|
}
|
|
@@ -227,7 +257,7 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
227
257
|
getModeString(value) {
|
|
228
258
|
switch (value) {
|
|
229
259
|
case MODE_AUTO: return 'auto';
|
|
230
|
-
case MODE_SLEEP: return '
|
|
260
|
+
case MODE_SLEEP: return 'advancedSleep'; // Tower fans use advancedSleep
|
|
231
261
|
case MODE_TURBO: return 'turbo';
|
|
232
262
|
default: return 'normal';
|
|
233
263
|
}
|
|
@@ -248,6 +278,119 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
|
|
|
248
278
|
this.handleDeviceError('set mode', error);
|
|
249
279
|
}
|
|
250
280
|
}
|
|
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
|
+
}
|
|
251
394
|
}
|
|
252
395
|
exports.FanAccessory = FanAccessory;
|
|
253
396
|
//# 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,10 +66,20 @@ 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';
|
|
69
|
+
mode: 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep';
|
|
70
|
+
timer?: number;
|
|
71
|
+
displayState?: boolean;
|
|
72
|
+
temperature?: number;
|
|
73
|
+
humidity?: number;
|
|
74
|
+
thermalComfort?: string;
|
|
70
75
|
setOscillation(enabled: boolean): Promise<boolean>;
|
|
71
76
|
setChildLock(enabled: boolean): Promise<boolean>;
|
|
72
|
-
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): Promise<boolean>;
|
|
77
|
+
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep'): Promise<boolean>;
|
|
78
|
+
setTimer?(hours: number): Promise<boolean>;
|
|
79
|
+
clearTimer?(): Promise<boolean>;
|
|
80
|
+
setDisplay?(enabled: boolean): Promise<boolean>;
|
|
81
|
+
turnOnDisplay?(): Promise<boolean>;
|
|
82
|
+
turnOffDisplay?(): Promise<boolean>;
|
|
73
83
|
}
|
|
74
84
|
export interface VeSyncBulb extends VeSyncDeviceWithPower, VeSyncDeviceWithBrightness, VeSyncDeviceWithColor {
|
|
75
85
|
}
|
|
@@ -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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-tsvesync",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.78",
|
|
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": "1.0.
|
|
101
|
+
"tsvesync": "^1.0.78"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/jest": "^29.5.11",
|
|
@@ -42,6 +42,10 @@ 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;
|
|
45
49
|
|
|
46
50
|
constructor(
|
|
47
51
|
platform: TSVESyncPlatform,
|
|
@@ -66,6 +70,19 @@ export class FanAccessory extends BaseAccessory {
|
|
|
66
70
|
this.setActive.bind(this)
|
|
67
71
|
);
|
|
68
72
|
|
|
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
|
+
|
|
69
86
|
// Set up speed control
|
|
70
87
|
this.setupCharacteristic(
|
|
71
88
|
this.platform.Characteristic.RotationSpeed,
|
|
@@ -108,6 +125,14 @@ export class FanAccessory extends BaseAccessory {
|
|
|
108
125
|
this.platform.Characteristic.Name,
|
|
109
126
|
async () => this.device.deviceName
|
|
110
127
|
);
|
|
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
|
+
}
|
|
111
136
|
}
|
|
112
137
|
|
|
113
138
|
/**
|
|
@@ -131,7 +156,13 @@ export class FanAccessory extends BaseAccessory {
|
|
|
131
156
|
// Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
|
|
132
157
|
this.updateCharacteristicValue(
|
|
133
158
|
this.platform.Characteristic.CurrentFanState,
|
|
134
|
-
isActive ? 2 : 0
|
|
159
|
+
isActive ? (fanDetails.speed > 0 ? 2 : 1) : 0
|
|
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
|
|
135
166
|
);
|
|
136
167
|
|
|
137
168
|
// Update rotation speed
|
|
@@ -165,6 +196,38 @@ export class FanAccessory extends BaseAccessory {
|
|
|
165
196
|
this.getModeValue(fanDetails.mode)
|
|
166
197
|
);
|
|
167
198
|
}
|
|
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
|
+
}
|
|
168
231
|
}
|
|
169
232
|
|
|
170
233
|
protected getDeviceCapabilities(): DeviceCapabilities {
|
|
@@ -308,20 +371,21 @@ export class FanAccessory extends BaseAccessory {
|
|
|
308
371
|
}
|
|
309
372
|
}
|
|
310
373
|
|
|
311
|
-
private getModeValue(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): number {
|
|
374
|
+
private getModeValue(mode: 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep'): number {
|
|
312
375
|
switch (mode) {
|
|
313
376
|
case 'normal': return MODE_NORMAL;
|
|
314
377
|
case 'auto': return MODE_AUTO;
|
|
315
|
-
case 'sleep':
|
|
378
|
+
case 'sleep':
|
|
379
|
+
case 'advancedSleep': return MODE_SLEEP;
|
|
316
380
|
case 'turbo': return MODE_TURBO;
|
|
317
381
|
default: return MODE_NORMAL;
|
|
318
382
|
}
|
|
319
383
|
}
|
|
320
384
|
|
|
321
|
-
private getModeString(value: number): 'normal' | 'auto' | 'sleep' | 'turbo' {
|
|
385
|
+
private getModeString(value: number): 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep' {
|
|
322
386
|
switch (value) {
|
|
323
387
|
case MODE_AUTO: return 'auto';
|
|
324
|
-
case MODE_SLEEP: return '
|
|
388
|
+
case MODE_SLEEP: return 'advancedSleep'; // Tower fans use advancedSleep
|
|
325
389
|
case MODE_TURBO: return 'turbo';
|
|
326
390
|
default: return 'normal';
|
|
327
391
|
}
|
|
@@ -345,4 +409,126 @@ export class FanAccessory extends BaseAccessory {
|
|
|
345
409
|
this.handleDeviceError('set mode', error);
|
|
346
410
|
}
|
|
347
411
|
}
|
|
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
|
+
}
|
|
348
534
|
}
|
|
@@ -78,10 +78,20 @@ 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';
|
|
81
|
+
mode: 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep';
|
|
82
|
+
timer?: number;
|
|
83
|
+
displayState?: boolean;
|
|
84
|
+
temperature?: number;
|
|
85
|
+
humidity?: number;
|
|
86
|
+
thermalComfort?: string;
|
|
82
87
|
setOscillation(enabled: boolean): Promise<boolean>;
|
|
83
88
|
setChildLock(enabled: boolean): Promise<boolean>;
|
|
84
|
-
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo'): Promise<boolean>;
|
|
89
|
+
setMode(mode: 'normal' | 'auto' | 'sleep' | 'turbo' | 'advancedSleep'): Promise<boolean>;
|
|
90
|
+
setTimer?(hours: number): Promise<boolean>;
|
|
91
|
+
clearTimer?(): Promise<boolean>;
|
|
92
|
+
setDisplay?(enabled: boolean): Promise<boolean>;
|
|
93
|
+
turnOnDisplay?(): Promise<boolean>;
|
|
94
|
+
turnOffDisplay?(): Promise<boolean>;
|
|
85
95
|
}
|
|
86
96
|
|
|
87
97
|
export interface VeSyncBulb extends VeSyncDeviceWithPower, VeSyncDeviceWithBrightness, VeSyncDeviceWithColor {}
|