homebridge-tsvesync 1.0.54 → 1.0.59

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.
@@ -5,6 +5,7 @@ import { DeviceCapabilities, VeSyncFan } from '../types/device.types';
5
5
  export declare class FanAccessory extends BaseAccessory {
6
6
  protected readonly device: VeSyncFan;
7
7
  private readonly capabilities;
8
+ private readonly speedLevels;
8
9
  constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncFan);
9
10
  protected setupService(): void;
10
11
  /**
@@ -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;AAYtE,qBAAa,YAAa,SAAQ,aAAa;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAGhD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,SAAS;IAOnB,SAAS,CAAC,YAAY,IAAI,IAAI;IAwD9B;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YAIT,SAAS;YAiBT,sBAAsB;YAwCtB,gBAAgB;YAwBhB,oBAAoB;YAMpB,oBAAoB;YAmBpB,YAAY;YAIZ,YAAY;YAmBZ,uBAAuB;YAIvB,uBAAuB;IAmBrC,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;YASP,OAAO;YAIP,OAAO;CActB"}
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"}
@@ -10,11 +10,36 @@ const MODE_NORMAL = 0;
10
10
  const MODE_AUTO = 1;
11
11
  const MODE_SLEEP = 2;
12
12
  const MODE_TURBO = 3;
13
+ // Fan speed levels for different device types
14
+ const FAN_SPEED_LEVELS = {
15
+ 'LTF-F422S-KEU': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
16
+ 'LTF-F422S-WUSR': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
17
+ 'LTF-F422_WJP': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
18
+ 'LTF-F422S-WUS': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
19
+ 'Core200S': [1, 2, 3],
20
+ 'Core300S': [1, 2, 3, 4],
21
+ 'Core400S': [1, 2, 3, 4],
22
+ 'Core600S': [1, 2, 3, 4],
23
+ 'LAP-C201S-AUSR': [1, 2, 3],
24
+ 'LAP-C202S-WUSR': [1, 2, 3],
25
+ 'LAP-C301S-WJP': [1, 2, 3, 4],
26
+ 'LAP-C302S-WUSB': [1, 2, 3, 4],
27
+ 'LAP-C301S-WAAA': [1, 2, 3, 4],
28
+ 'LAP-C401S-WJP': [1, 2, 3, 4],
29
+ 'LAP-C401S-WUSR': [1, 2, 3, 4],
30
+ 'LAP-C401S-WAAA': [1, 2, 3, 4],
31
+ 'LAP-C601S-WUS': [1, 2, 3, 4],
32
+ 'LAP-C601S-WUSR': [1, 2, 3, 4],
33
+ 'LAP-C601S-WEU': [1, 2, 3, 4],
34
+ 'LV-PUR131S': [1, 2, 3],
35
+ 'LV-RH131S': [1, 2, 3]
36
+ };
13
37
  class FanAccessory extends base_accessory_1.BaseAccessory {
14
38
  constructor(platform, accessory, device) {
15
39
  super(platform, accessory, device);
16
40
  this.device = device;
17
41
  this.capabilities = this.getDeviceCapabilities();
42
+ this.speedLevels = FAN_SPEED_LEVELS[this.device.deviceType] || [1, 2, 3, 4];
18
43
  }
19
44
  setupService() {
20
45
  // Get or create the fan service
@@ -50,46 +75,14 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
50
75
  this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
51
76
  // Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
52
77
  this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ? 2 : 0);
53
- // Update rotation speed - convert device speed (1-5) to HomeKit percentage (0-100)
78
+ // Update rotation speed
54
79
  let rotationSpeed = 0;
55
80
  if (isActive && fanDetails.speed !== undefined) {
56
- switch (fanDetails.speed) {
57
- case 1:
58
- rotationSpeed = 8;
59
- break; // 8%
60
- case 2:
61
- rotationSpeed = 17;
62
- break; // 17%
63
- case 3:
64
- rotationSpeed = 25;
65
- break; // 25%
66
- case 4:
67
- rotationSpeed = 33;
68
- break; // 33%
69
- case 5:
70
- rotationSpeed = 42;
71
- break; // 42%
72
- case 6:
73
- rotationSpeed = 50;
74
- break; // 50%
75
- case 7:
76
- rotationSpeed = 58;
77
- break; // 58%
78
- case 8:
79
- rotationSpeed = 67;
80
- break; // 67%
81
- case 9:
82
- rotationSpeed = 75;
83
- break; // 75%
84
- case 10:
85
- rotationSpeed = 83;
86
- break; // 83%
87
- case 11:
88
- rotationSpeed = 92;
89
- break; // 92%
90
- case 12:
91
- rotationSpeed = 100;
92
- break; // 100%
81
+ const speedIndex = this.speedLevels.indexOf(fanDetails.speed);
82
+ if (speedIndex !== -1) {
83
+ const maxLevel = this.speedLevels.length;
84
+ const levelSize = 100 / maxLevel;
85
+ rotationSpeed = Math.round((speedIndex + 1) * levelSize);
93
86
  }
94
87
  }
95
88
  this.updateCharacteristicValue(this.platform.Characteristic.RotationSpeed, rotationSpeed);
@@ -141,67 +134,26 @@ class FanAccessory extends base_accessory_1.BaseAccessory {
141
134
  await this.device.turnOff();
142
135
  return;
143
136
  }
144
- // Convert HomeKit percentage (0-100) to device speed (1-5)
145
- let speed;
146
- if (percentage <= 8) {
147
- speed = 1; // Speed 1 (8%)
148
- }
149
- else if (percentage <= 17) {
150
- speed = 2; // Speed 2 (17%)
151
- }
152
- else if (percentage <= 25) {
153
- speed = 3; // Speed 3 (25%)
154
- }
155
- else if (percentage <= 33) {
156
- speed = 4; // Speed 4 (33%)
157
- }
158
- else if (percentage <= 42) {
159
- speed = 5; // Speed 5 (42%)
160
- }
161
- else if (percentage <= 50) {
162
- speed = 6; // Speed 6 (50%)
163
- }
164
- else if (percentage <= 58) {
165
- speed = 7; // Speed 7 (58%)
166
- }
167
- else if (percentage <= 67) {
168
- speed = 8; // Speed 8 (67%)
169
- }
170
- else if (percentage <= 75) {
171
- speed = 9; // Speed 9 (75%)
172
- }
173
- else if (percentage <= 83) {
174
- speed = 10; // Speed 10 (83%)
175
- }
176
- else if (percentage <= 92) {
177
- speed = 11; // Speed 11 (92%)
178
- }
179
- else {
180
- speed = 12; // Speed 12 (100%)
181
- }
137
+ // Convert HomeKit percentage to device speed level
138
+ const maxLevel = this.speedLevels.length;
139
+ const levelSize = 100 / maxLevel;
140
+ const levelIndex = Math.min(Math.floor(percentage / levelSize), maxLevel - 1);
141
+ const speed = this.speedLevels[levelIndex];
182
142
  await this.device.changeFanSpeed(speed);
183
143
  }
184
144
  async getRotationSpeed() {
185
145
  if (this.device.speed === undefined || this.device.speed === null) {
186
146
  return 0;
187
147
  }
188
- // Convert device speed (1-5) to HomeKit percentage (0-100)
189
- switch (this.device.speed) {
190
- case 0: return 0; // 0 (Off)
191
- case 1: return 8; // 1 (8%)
192
- case 2: return 17; // 2 (17%)
193
- case 3: return 25; // 3 (25%)
194
- case 4: return 33; // 4 (33%)
195
- case 5: return 42; // 5 (42%)
196
- case 6: return 50; // 6 (50%)
197
- case 7: return 58; // 7 (58%)
198
- case 8: return 67; // 8 (67%)
199
- case 9: return 75; // 9 (75%)
200
- case 10: return 83; // 10 (83%)
201
- case 11: return 92; // 11 (92%)
202
- case 12: return 100; // 12 (100%)
203
- default: return 0; // Off
148
+ // Convert device speed to HomeKit percentage
149
+ const currentSpeed = this.device.speed;
150
+ const speedIndex = this.speedLevels.indexOf(currentSpeed);
151
+ if (speedIndex === -1) {
152
+ return 0;
204
153
  }
154
+ const maxLevel = this.speedLevels.length;
155
+ const levelSize = 100 / maxLevel;
156
+ return Math.round((speedIndex + 1) * levelSize);
205
157
  }
206
158
  async getRotationDirection() {
207
159
  return 'oscillation' in this.device && this.device.oscillation
@@ -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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"}
@@ -5,6 +5,7 @@ import { DeviceCapabilities, VeSyncHumidifier } from '../types/device.types';
5
5
  export declare class HumidifierAccessory extends BaseAccessory {
6
6
  protected readonly device: VeSyncHumidifier;
7
7
  private readonly capabilities;
8
+ private readonly mistLevels;
8
9
  constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncHumidifier);
9
10
  protected setupService(): void;
10
11
  /**
@@ -14,7 +15,18 @@ export declare class HumidifierAccessory extends BaseAccessory {
14
15
  protected getDeviceCapabilities(): DeviceCapabilities;
15
16
  private getActive;
16
17
  private setActive;
18
+ private getCurrentState;
19
+ private getTargetState;
20
+ private setTargetState;
21
+ private getCurrentHumidity;
22
+ private getTargetHumidity;
23
+ private setTargetHumidity;
24
+ private getWaterLevel;
25
+ private convertMistLevelToPercentage;
26
+ private convertPercentageToMistLevel;
17
27
  private getRotationSpeed;
18
28
  private handleSetRotationSpeed;
29
+ private getLockPhysicalControls;
30
+ private setLockPhysicalControls;
19
31
  }
20
32
  //# sourceMappingURL=humidifier.accessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"humidifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/humidifier.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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAGhD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IAO1B,SAAS,CAAC,YAAY,IAAI,IAAI;IA0B9B;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YAIT,SAAS;YAiBT,gBAAgB;YAqBhB,sBAAsB;CAiCrC"}
1
+ {"version":3,"file":"humidifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/humidifier.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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAGpC,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IAW1B,SAAS,CAAC,YAAY,IAAI,IAAI;IAmE9B;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAyEvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YAIT,SAAS;YAeT,eAAe;YAWf,cAAc;YAId,cAAc;YAId,kBAAkB;YAIlB,iBAAiB;YAIjB,iBAAiB;YAiBjB,aAAa;IAI3B,OAAO,CAAC,4BAA4B;IAKpC,OAAO,CAAC,4BAA4B;YAMtB,gBAAgB;YAIhB,sBAAsB;YAsBtB,uBAAuB;YAIvB,uBAAuB;CActC"}
@@ -7,6 +7,9 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
7
7
  super(platform, accessory, device);
8
8
  this.device = device;
9
9
  this.capabilities = this.getDeviceCapabilities();
10
+ // Get mist levels from device config
11
+ const config = device.details.configuration;
12
+ this.mistLevels = (config === null || config === void 0 ? void 0 : config.levels) || [1, 2, 3, 4, 5, 6, 7, 8, 9];
10
13
  }
11
14
  setupService() {
12
15
  // Get or create the humidifier service
@@ -14,8 +17,22 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
14
17
  this.accessory.addService(this.platform.Service.HumidifierDehumidifier);
15
18
  // Set up required characteristics
16
19
  this.setupCharacteristic(this.platform.Characteristic.Active, this.getActive.bind(this), this.setActive.bind(this));
17
- // Set up speed control
20
+ // Set up current and target state
21
+ this.setupCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, this.getCurrentState.bind(this));
22
+ this.setupCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState, this.getTargetState.bind(this), this.setTargetState.bind(this));
23
+ // Set up humidity control
24
+ this.setupCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, this.getCurrentHumidity.bind(this));
25
+ this.setupCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, this.getTargetHumidity.bind(this), this.setTargetHumidity.bind(this));
26
+ // Set up water level if supported
27
+ if (this.capabilities.hasWaterLevel) {
28
+ this.setupCharacteristic(this.platform.Characteristic.WaterLevel, this.getWaterLevel.bind(this));
29
+ }
30
+ // Set up speed control (maps to mist level)
18
31
  this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed.bind(this), this.handleSetRotationSpeed.bind(this));
32
+ // Set up child lock if supported
33
+ if (this.capabilities.hasChildLock) {
34
+ this.setupCharacteristic(this.platform.Characteristic.LockPhysicalControls, this.getLockPhysicalControls.bind(this), this.setLockPhysicalControls.bind(this));
35
+ }
19
36
  // Add Name characteristic
20
37
  this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
21
38
  }
@@ -23,49 +40,45 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
23
40
  * Update device states based on the latest details
24
41
  */
25
42
  async updateDeviceSpecificStates(details) {
26
- const humidifierDetails = details;
43
+ const humidifierDetails = this.device.details;
27
44
  // Update active state
28
- const isActive = humidifierDetails.deviceStatus === 'on';
45
+ const isActive = this.device.deviceStatus === 'on';
29
46
  this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
30
- // Update current state (INACTIVE = 0, IDLE = 1, HUMIDIFYING = 2, DEHUMIDIFYING = 3)
31
- this.updateCharacteristicValue(this.platform.Characteristic.CurrentHumidifierDehumidifierState, isActive ? 2 : 0);
32
- // Update target state (HUMIDIFIER = 1, DEHUMIDIFIER = 2, AUTO = 0)
33
- this.updateCharacteristicValue(this.platform.Characteristic.TargetHumidifierDehumidifierState, 1 // Always humidifier mode
34
- );
35
- // Update rotation speed - convert device speed (1-9) to HomeKit percentage (0-100)
36
- let rotationSpeed = 0;
37
- if (isActive && humidifierDetails.speed !== undefined) {
38
- switch (humidifierDetails.speed) {
39
- case 1:
40
- rotationSpeed = 11;
41
- break;
42
- case 2:
43
- rotationSpeed = 22;
44
- break;
45
- case 3:
46
- rotationSpeed = 33;
47
- break;
48
- case 4:
49
- rotationSpeed = 44;
50
- break;
51
- case 5:
52
- rotationSpeed = 55;
47
+ // Update current state based on device state
48
+ let currentState = 0; // INACTIVE
49
+ if (isActive) {
50
+ switch (this.device.currentState) {
51
+ case 'idle':
52
+ currentState = 1; // IDLE
53
53
  break;
54
- case 6:
55
- rotationSpeed = 66;
56
- break;
57
- case 7:
58
- rotationSpeed = 77;
59
- break;
60
- case 8:
61
- rotationSpeed = 88;
62
- break;
63
- case 9:
64
- rotationSpeed = 100;
54
+ case 'humidifying':
55
+ currentState = 2; // HUMIDIFYING
65
56
  break;
57
+ default:
58
+ currentState = 0; // INACTIVE
66
59
  }
67
60
  }
61
+ this.updateCharacteristicValue(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
62
+ // Update target state (always humidifier mode)
63
+ this.updateCharacteristicValue(this.platform.Characteristic.TargetHumidifierDehumidifierState, 1 // 1 = HUMIDIFIER
64
+ );
65
+ // Update current humidity
66
+ this.updateCharacteristicValue(this.platform.Characteristic.CurrentRelativeHumidity, humidifierDetails.humidity);
67
+ // Update target humidity
68
+ if (humidifierDetails.targetHumidity !== undefined) {
69
+ this.updateCharacteristicValue(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, humidifierDetails.targetHumidity);
70
+ }
71
+ // Update water level if available
72
+ if (this.capabilities.hasWaterLevel) {
73
+ this.updateCharacteristicValue(this.platform.Characteristic.WaterLevel, this.device.waterLevel);
74
+ }
75
+ // Update rotation speed (mist level)
76
+ const rotationSpeed = this.convertMistLevelToPercentage(humidifierDetails.mist_level);
68
77
  this.updateCharacteristicValue(this.platform.Characteristic.RotationSpeed, rotationSpeed);
78
+ // Update child lock if available
79
+ if (this.capabilities.hasChildLock && humidifierDetails.child_lock !== undefined) {
80
+ this.updateCharacteristicValue(this.platform.Characteristic.LockPhysicalControls, humidifierDetails.child_lock ? 1 : 0);
81
+ }
69
82
  }
70
83
  getDeviceCapabilities() {
71
84
  return {
@@ -90,70 +103,100 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
90
103
  if (!success) {
91
104
  throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
92
105
  }
93
- // Update device state and characteristics
94
- await this.updateDeviceSpecificStates(this.device);
95
106
  await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
96
107
  }
97
108
  catch (error) {
98
109
  this.handleDeviceError('set active state', error);
99
110
  }
100
111
  }
101
- async getRotationSpeed() {
102
- if (this.device.speed === undefined || this.device.speed === null) {
103
- return 0;
104
- }
105
- // Convert device speed (1-9) to HomeKit percentage (0-100)
106
- switch (this.device.speed) {
107
- case 0: return 0; // Off
108
- case 1: return 11;
109
- case 2: return 22;
110
- case 3: return 33;
111
- case 4: return 44;
112
- case 5: return 55;
113
- case 6: return 66;
114
- case 7: return 77;
115
- case 8: return 88;
116
- case 9: return 100;
117
- default: return 0;
112
+ async getCurrentState() {
113
+ switch (this.device.currentState) {
114
+ case 'idle':
115
+ return 1; // IDLE
116
+ case 'humidifying':
117
+ return 2; // HUMIDIFYING
118
+ default:
119
+ return 0; // INACTIVE
118
120
  }
119
121
  }
120
- async handleSetRotationSpeed(value) {
121
- const percentage = value;
122
- if (percentage === 0) {
123
- // Turn off the device instead of setting speed to 0
124
- await this.device.turnOff();
125
- return;
126
- }
127
- // Convert HomeKit percentage (0-100) to device speed (1-9)
128
- let speed;
129
- if (percentage <= 11) {
130
- speed = 1;
131
- }
132
- else if (percentage <= 22) {
133
- speed = 2;
134
- }
135
- else if (percentage <= 33) {
136
- speed = 3;
137
- }
138
- else if (percentage <= 44) {
139
- speed = 4;
122
+ async getTargetState() {
123
+ return 1; // Always HUMIDIFIER mode
124
+ }
125
+ async setTargetState(value) {
126
+ // No-op as we only support humidifier mode
127
+ }
128
+ async getCurrentHumidity() {
129
+ return this.device.humidity;
130
+ }
131
+ async getTargetHumidity() {
132
+ var _a;
133
+ return (_a = this.device.details.targetHumidity) !== null && _a !== void 0 ? _a : 45; // Default to 45% if not set
134
+ }
135
+ async setTargetHumidity(value) {
136
+ try {
137
+ const humidity = value;
138
+ // VeSync humidifiers accept range 30-80%
139
+ const clampedHumidity = Math.max(30, Math.min(80, humidity));
140
+ const success = await this.device.setHumidity(clampedHumidity);
141
+ if (!success) {
142
+ throw new Error(`Failed to set target humidity to ${clampedHumidity}`);
143
+ }
144
+ await this.persistDeviceState('targetHumidity', clampedHumidity);
140
145
  }
141
- else if (percentage <= 55) {
142
- speed = 5;
146
+ catch (error) {
147
+ this.handleDeviceError('set target humidity', error);
143
148
  }
144
- else if (percentage <= 66) {
145
- speed = 6;
149
+ }
150
+ async getWaterLevel() {
151
+ return this.device.waterLevel;
152
+ }
153
+ convertMistLevelToPercentage(level) {
154
+ if (!level)
155
+ return 0;
156
+ return Math.round((level / this.mistLevels.length) * 100);
157
+ }
158
+ convertPercentageToMistLevel(percentage) {
159
+ if (percentage === 0)
160
+ return 0;
161
+ const level = Math.ceil((percentage / 100) * this.mistLevels.length);
162
+ return Math.min(level, this.mistLevels.length);
163
+ }
164
+ async getRotationSpeed() {
165
+ return this.convertMistLevelToPercentage(this.device.details.mist_level);
166
+ }
167
+ async handleSetRotationSpeed(value) {
168
+ try {
169
+ const percentage = value;
170
+ if (percentage === 0) {
171
+ await this.device.turnOff();
172
+ return;
173
+ }
174
+ const mistLevel = this.convertPercentageToMistLevel(percentage);
175
+ const success = await this.device.setMistLevel(mistLevel);
176
+ if (!success) {
177
+ throw new Error(`Failed to set mist level to ${mistLevel}`);
178
+ }
179
+ await this.persistDeviceState('mist_level', mistLevel);
146
180
  }
147
- else if (percentage <= 77) {
148
- speed = 7;
181
+ catch (error) {
182
+ this.handleDeviceError('set mist level', error);
149
183
  }
150
- else if (percentage <= 88) {
151
- speed = 8;
184
+ }
185
+ async getLockPhysicalControls() {
186
+ return this.device.details.child_lock ? 1 : 0;
187
+ }
188
+ async setLockPhysicalControls(value) {
189
+ try {
190
+ const enabled = value === 1;
191
+ const success = await this.device.setChildLock(enabled);
192
+ if (!success) {
193
+ throw new Error(`Failed to ${enabled ? 'enable' : 'disable'} child lock`);
194
+ }
195
+ await this.persistDeviceState('child_lock', enabled);
152
196
  }
153
- else {
154
- speed = 9;
197
+ catch (error) {
198
+ this.handleDeviceError('set child lock', error);
155
199
  }
156
- await this.device.changeFanSpeed(speed);
157
200
  }
158
201
  }
159
202
  exports.HumidifierAccessory = HumidifierAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"humidifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/humidifier.accessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"humidifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/humidifier.accessory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import { VeSyncBaseDevice } from 'tsvesync';
2
+ export interface FanConfig {
3
+ module: 'VeSyncAirBypass' | 'VeSyncHumidifier' | 'VeSyncWarmHumidifier' | 'VeSyncTowerFan' | 'VeSyncAirBaseV2';
4
+ features: string[];
5
+ levels?: number[];
6
+ }
2
7
  export interface DeviceCapabilities {
3
8
  hasBrightness: boolean;
4
9
  hasColorTemp: boolean;
@@ -56,7 +61,38 @@ export interface VeSyncDeviceWithControls extends VeSyncDeviceWithPower {
56
61
  }
57
62
  export interface VeSyncAirPurifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithAirQuality, VeSyncDeviceWithControls {
58
63
  }
59
- export interface VeSyncHumidifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithHumidity, VeSyncDeviceWithControls {
64
+ export interface VeSyncHumidifier extends VeSyncBaseDevice {
65
+ deviceType: string;
66
+ deviceStatus: string;
67
+ humidity: number;
68
+ details: {
69
+ mode: string;
70
+ humidity: number;
71
+ mist_level: number;
72
+ mist_virtual_level: number;
73
+ water_lacks: boolean;
74
+ water_level: number;
75
+ water_tank_lifted: boolean;
76
+ humidity_high: boolean;
77
+ display: boolean;
78
+ automatic_stop: boolean;
79
+ oscillation_enabled: boolean;
80
+ configuration: Record<string, any>;
81
+ connection_status: string | null;
82
+ targetHumidity?: number;
83
+ child_lock?: boolean;
84
+ };
85
+ currentState: string;
86
+ waterLevel: number;
87
+ waterTankLifted: boolean;
88
+ oscillationEnabled: boolean;
89
+ turnOn(): Promise<boolean>;
90
+ turnOff(): Promise<boolean>;
91
+ setMistLevel(level: number): Promise<boolean>;
92
+ setHumidity(humidity: number): Promise<boolean>;
93
+ setMode(mode: string): Promise<boolean>;
94
+ setDisplay(enabled: boolean): Promise<boolean>;
95
+ setChildLock(enabled: boolean): Promise<boolean>;
60
96
  }
61
97
  export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
62
98
  oscillationState: boolean;
@@ -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.54",
3
+ "version": "1.0.59",
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.49"
101
+ "tsvesync": "1.0.59"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@types/jest": "^29.5.11",
@@ -13,9 +13,35 @@ const MODE_AUTO = 1;
13
13
  const MODE_SLEEP = 2;
14
14
  const MODE_TURBO = 3;
15
15
 
16
+ // Fan speed levels for different device types
17
+ const FAN_SPEED_LEVELS: { [key: string]: number[] } = {
18
+ 'LTF-F422S-KEU': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
19
+ 'LTF-F422S-WUSR': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
20
+ 'LTF-F422_WJP': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
21
+ 'LTF-F422S-WUS': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
22
+ 'Core200S': [1, 2, 3],
23
+ 'Core300S': [1, 2, 3, 4],
24
+ 'Core400S': [1, 2, 3, 4],
25
+ 'Core600S': [1, 2, 3, 4],
26
+ 'LAP-C201S-AUSR': [1, 2, 3],
27
+ 'LAP-C202S-WUSR': [1, 2, 3],
28
+ 'LAP-C301S-WJP': [1, 2, 3, 4],
29
+ 'LAP-C302S-WUSB': [1, 2, 3, 4],
30
+ 'LAP-C301S-WAAA': [1, 2, 3, 4],
31
+ 'LAP-C401S-WJP': [1, 2, 3, 4],
32
+ 'LAP-C401S-WUSR': [1, 2, 3, 4],
33
+ 'LAP-C401S-WAAA': [1, 2, 3, 4],
34
+ 'LAP-C601S-WUS': [1, 2, 3, 4],
35
+ 'LAP-C601S-WUSR': [1, 2, 3, 4],
36
+ 'LAP-C601S-WEU': [1, 2, 3, 4],
37
+ 'LV-PUR131S': [1, 2, 3],
38
+ 'LV-RH131S': [1, 2, 3]
39
+ };
40
+
16
41
  export class FanAccessory extends BaseAccessory {
17
42
  protected readonly device: VeSyncFan;
18
43
  private readonly capabilities: DeviceCapabilities;
44
+ private readonly speedLevels: number[];
19
45
 
20
46
  constructor(
21
47
  platform: TSVESyncPlatform,
@@ -25,6 +51,7 @@ export class FanAccessory extends BaseAccessory {
25
51
  super(platform, accessory, device);
26
52
  this.device = device;
27
53
  this.capabilities = this.getDeviceCapabilities();
54
+ this.speedLevels = FAN_SPEED_LEVELS[this.device.deviceType] || [1, 2, 3, 4];
28
55
  }
29
56
 
30
57
  protected setupService(): void {
@@ -107,22 +134,14 @@ export class FanAccessory extends BaseAccessory {
107
134
  isActive ? 2 : 0
108
135
  );
109
136
 
110
- // Update rotation speed - convert device speed (1-5) to HomeKit percentage (0-100)
137
+ // Update rotation speed
111
138
  let rotationSpeed = 0;
112
139
  if (isActive && fanDetails.speed !== undefined) {
113
- switch (fanDetails.speed) {
114
- case 1: rotationSpeed = 8; break; // 8%
115
- case 2: rotationSpeed = 17; break; // 17%
116
- case 3: rotationSpeed = 25; break; // 25%
117
- case 4: rotationSpeed = 33; break; // 33%
118
- case 5: rotationSpeed = 42; break; // 42%
119
- case 6: rotationSpeed = 50; break; // 50%
120
- case 7: rotationSpeed = 58; break; // 58%
121
- case 8: rotationSpeed = 67; break; // 67%
122
- case 9: rotationSpeed = 75; break; // 75%
123
- case 10: rotationSpeed = 83; break; // 83%
124
- case 11: rotationSpeed = 92; break; // 92%
125
- case 12: rotationSpeed = 100; break; // 100%
140
+ const speedIndex = this.speedLevels.indexOf(fanDetails.speed);
141
+ if (speedIndex !== -1) {
142
+ const maxLevel = this.speedLevels.length;
143
+ const levelSize = 100 / maxLevel;
144
+ rotationSpeed = Math.round((speedIndex + 1) * levelSize);
126
145
  }
127
146
  }
128
147
  this.updateCharacteristicValue(
@@ -192,33 +211,11 @@ export class FanAccessory extends BaseAccessory {
192
211
  return;
193
212
  }
194
213
 
195
- // Convert HomeKit percentage (0-100) to device speed (1-5)
196
- let speed: number;
197
- if (percentage <= 8) {
198
- speed = 1; // Speed 1 (8%)
199
- } else if (percentage <= 17) {
200
- speed = 2; // Speed 2 (17%)
201
- } else if (percentage <= 25) {
202
- speed = 3; // Speed 3 (25%)
203
- } else if (percentage <= 33) {
204
- speed = 4; // Speed 4 (33%)
205
- } else if (percentage <= 42) {
206
- speed = 5; // Speed 5 (42%)
207
- } else if (percentage <= 50) {
208
- speed = 6; // Speed 6 (50%)
209
- } else if (percentage <= 58) {
210
- speed = 7; // Speed 7 (58%)
211
- } else if (percentage <= 67) {
212
- speed = 8; // Speed 8 (67%)
213
- } else if (percentage <= 75) {
214
- speed = 9; // Speed 9 (75%)
215
- } else if (percentage <= 83) {
216
- speed = 10; // Speed 10 (83%)
217
- } else if (percentage <= 92) {
218
- speed = 11; // Speed 11 (92%)
219
- } else {
220
- speed = 12; // Speed 12 (100%)
221
- }
214
+ // Convert HomeKit percentage to device speed level
215
+ const maxLevel = this.speedLevels.length;
216
+ const levelSize = 100 / maxLevel;
217
+ const levelIndex = Math.min(Math.floor(percentage / levelSize), maxLevel - 1);
218
+ const speed = this.speedLevels[levelIndex];
222
219
 
223
220
  await this.device.changeFanSpeed(speed);
224
221
  }
@@ -228,23 +225,16 @@ export class FanAccessory extends BaseAccessory {
228
225
  return 0;
229
226
  }
230
227
 
231
- // Convert device speed (1-5) to HomeKit percentage (0-100)
232
- switch (this.device.speed) {
233
- case 0: return 0; // 0 (Off)
234
- case 1: return 8; // 1 (8%)
235
- case 2: return 17; // 2 (17%)
236
- case 3: return 25; // 3 (25%)
237
- case 4: return 33; // 4 (33%)
238
- case 5: return 42; // 5 (42%)
239
- case 6: return 50; // 6 (50%)
240
- case 7: return 58; // 7 (58%)
241
- case 8: return 67; // 8 (67%)
242
- case 9: return 75; // 9 (75%)
243
- case 10: return 83; // 10 (83%)
244
- case 11: return 92; // 11 (92%)
245
- case 12: return 100; // 12 (100%)
246
- default: return 0; // Off
228
+ // Convert device speed to HomeKit percentage
229
+ const currentSpeed = this.device.speed;
230
+ const speedIndex = this.speedLevels.indexOf(currentSpeed);
231
+ if (speedIndex === -1) {
232
+ return 0;
247
233
  }
234
+
235
+ const maxLevel = this.speedLevels.length;
236
+ const levelSize = 100 / maxLevel;
237
+ return Math.round((speedIndex + 1) * levelSize);
248
238
  }
249
239
 
250
240
  private async getRotationDirection(): Promise<CharacteristicValue> {
@@ -6,6 +6,7 @@ import { DeviceCapabilities, VeSyncHumidifier } from '../types/device.types';
6
6
  export class HumidifierAccessory extends BaseAccessory {
7
7
  protected readonly device: VeSyncHumidifier;
8
8
  private readonly capabilities: DeviceCapabilities;
9
+ private readonly mistLevels: number[];
9
10
 
10
11
  constructor(
11
12
  platform: TSVESyncPlatform,
@@ -15,6 +16,10 @@ export class HumidifierAccessory extends BaseAccessory {
15
16
  super(platform, accessory, device);
16
17
  this.device = device;
17
18
  this.capabilities = this.getDeviceCapabilities();
19
+
20
+ // Get mist levels from device config
21
+ const config = device.details.configuration;
22
+ this.mistLevels = config?.levels || [1, 2, 3, 4, 5, 6, 7, 8, 9];
18
23
  }
19
24
 
20
25
  protected setupService(): void {
@@ -29,13 +34,54 @@ export class HumidifierAccessory extends BaseAccessory {
29
34
  this.setActive.bind(this)
30
35
  );
31
36
 
32
- // Set up speed control
37
+ // Set up current and target state
38
+ this.setupCharacteristic(
39
+ this.platform.Characteristic.CurrentHumidifierDehumidifierState,
40
+ this.getCurrentState.bind(this)
41
+ );
42
+
43
+ this.setupCharacteristic(
44
+ this.platform.Characteristic.TargetHumidifierDehumidifierState,
45
+ this.getTargetState.bind(this),
46
+ this.setTargetState.bind(this)
47
+ );
48
+
49
+ // Set up humidity control
50
+ this.setupCharacteristic(
51
+ this.platform.Characteristic.CurrentRelativeHumidity,
52
+ this.getCurrentHumidity.bind(this)
53
+ );
54
+
55
+ this.setupCharacteristic(
56
+ this.platform.Characteristic.RelativeHumidityHumidifierThreshold,
57
+ this.getTargetHumidity.bind(this),
58
+ this.setTargetHumidity.bind(this)
59
+ );
60
+
61
+ // Set up water level if supported
62
+ if (this.capabilities.hasWaterLevel) {
63
+ this.setupCharacteristic(
64
+ this.platform.Characteristic.WaterLevel,
65
+ this.getWaterLevel.bind(this)
66
+ );
67
+ }
68
+
69
+ // Set up speed control (maps to mist level)
33
70
  this.setupCharacteristic(
34
71
  this.platform.Characteristic.RotationSpeed,
35
72
  this.getRotationSpeed.bind(this),
36
73
  this.handleSetRotationSpeed.bind(this)
37
74
  );
38
75
 
76
+ // Set up child lock if supported
77
+ if (this.capabilities.hasChildLock) {
78
+ this.setupCharacteristic(
79
+ this.platform.Characteristic.LockPhysicalControls,
80
+ this.getLockPhysicalControls.bind(this),
81
+ this.setLockPhysicalControls.bind(this)
82
+ );
83
+ }
84
+
39
85
  // Add Name characteristic
40
86
  this.setupCharacteristic(
41
87
  this.platform.Characteristic.Name,
@@ -47,49 +93,76 @@ export class HumidifierAccessory extends BaseAccessory {
47
93
  * Update device states based on the latest details
48
94
  */
49
95
  protected async updateDeviceSpecificStates(details: any): Promise<void> {
50
- const humidifierDetails = details as {
51
- deviceStatus: string;
52
- speed: number;
53
- };
96
+ const humidifierDetails = this.device.details;
54
97
 
55
98
  // Update active state
56
- const isActive = humidifierDetails.deviceStatus === 'on';
99
+ const isActive = this.device.deviceStatus === 'on';
57
100
  this.updateCharacteristicValue(
58
101
  this.platform.Characteristic.Active,
59
102
  isActive ? 1 : 0
60
103
  );
61
104
 
62
- // Update current state (INACTIVE = 0, IDLE = 1, HUMIDIFYING = 2, DEHUMIDIFYING = 3)
105
+ // Update current state based on device state
106
+ let currentState = 0; // INACTIVE
107
+ if (isActive) {
108
+ switch (this.device.currentState) {
109
+ case 'idle':
110
+ currentState = 1; // IDLE
111
+ break;
112
+ case 'humidifying':
113
+ currentState = 2; // HUMIDIFYING
114
+ break;
115
+ default:
116
+ currentState = 0; // INACTIVE
117
+ }
118
+ }
63
119
  this.updateCharacteristicValue(
64
120
  this.platform.Characteristic.CurrentHumidifierDehumidifierState,
65
- isActive ? 2 : 0
121
+ currentState
66
122
  );
67
123
 
68
- // Update target state (HUMIDIFIER = 1, DEHUMIDIFIER = 2, AUTO = 0)
124
+ // Update target state (always humidifier mode)
69
125
  this.updateCharacteristicValue(
70
126
  this.platform.Characteristic.TargetHumidifierDehumidifierState,
71
- 1 // Always humidifier mode
127
+ 1 // 1 = HUMIDIFIER
72
128
  );
73
129
 
74
- // Update rotation speed - convert device speed (1-9) to HomeKit percentage (0-100)
75
- let rotationSpeed = 0;
76
- if (isActive && humidifierDetails.speed !== undefined) {
77
- switch (humidifierDetails.speed) {
78
- case 1: rotationSpeed = 11; break;
79
- case 2: rotationSpeed = 22; break;
80
- case 3: rotationSpeed = 33; break;
81
- case 4: rotationSpeed = 44; break;
82
- case 5: rotationSpeed = 55; break;
83
- case 6: rotationSpeed = 66; break;
84
- case 7: rotationSpeed = 77; break;
85
- case 8: rotationSpeed = 88; break;
86
- case 9: rotationSpeed = 100; break;
87
- }
130
+ // Update current humidity
131
+ this.updateCharacteristicValue(
132
+ this.platform.Characteristic.CurrentRelativeHumidity,
133
+ humidifierDetails.humidity
134
+ );
135
+
136
+ // Update target humidity
137
+ if (humidifierDetails.targetHumidity !== undefined) {
138
+ this.updateCharacteristicValue(
139
+ this.platform.Characteristic.RelativeHumidityHumidifierThreshold,
140
+ humidifierDetails.targetHumidity
141
+ );
88
142
  }
143
+
144
+ // Update water level if available
145
+ if (this.capabilities.hasWaterLevel) {
146
+ this.updateCharacteristicValue(
147
+ this.platform.Characteristic.WaterLevel,
148
+ this.device.waterLevel
149
+ );
150
+ }
151
+
152
+ // Update rotation speed (mist level)
153
+ const rotationSpeed = this.convertMistLevelToPercentage(humidifierDetails.mist_level);
89
154
  this.updateCharacteristicValue(
90
155
  this.platform.Characteristic.RotationSpeed,
91
156
  rotationSpeed
92
157
  );
158
+
159
+ // Update child lock if available
160
+ if (this.capabilities.hasChildLock && humidifierDetails.child_lock !== undefined) {
161
+ this.updateCharacteristicValue(
162
+ this.platform.Characteristic.LockPhysicalControls,
163
+ humidifierDetails.child_lock ? 1 : 0
164
+ );
165
+ }
93
166
  }
94
167
 
95
168
  protected getDeviceCapabilities(): DeviceCapabilities {
@@ -119,66 +192,113 @@ export class HumidifierAccessory extends BaseAccessory {
119
192
  throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
120
193
  }
121
194
 
122
- // Update device state and characteristics
123
- await this.updateDeviceSpecificStates(this.device);
124
195
  await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
125
196
  } catch (error) {
126
197
  this.handleDeviceError('set active state', error);
127
198
  }
128
199
  }
129
200
 
130
- private async getRotationSpeed(): Promise<CharacteristicValue> {
131
- if (this.device.speed === undefined || this.device.speed === null) {
132
- return 0;
201
+ private async getCurrentState(): Promise<CharacteristicValue> {
202
+ switch (this.device.currentState) {
203
+ case 'idle':
204
+ return 1; // IDLE
205
+ case 'humidifying':
206
+ return 2; // HUMIDIFYING
207
+ default:
208
+ return 0; // INACTIVE
133
209
  }
210
+ }
211
+
212
+ private async getTargetState(): Promise<CharacteristicValue> {
213
+ return 1; // Always HUMIDIFIER mode
214
+ }
215
+
216
+ private async setTargetState(value: CharacteristicValue): Promise<void> {
217
+ // No-op as we only support humidifier mode
218
+ }
219
+
220
+ private async getCurrentHumidity(): Promise<CharacteristicValue> {
221
+ return this.device.humidity;
222
+ }
223
+
224
+ private async getTargetHumidity(): Promise<CharacteristicValue> {
225
+ return this.device.details.targetHumidity ?? 45; // Default to 45% if not set
226
+ }
134
227
 
135
- // Convert device speed (1-9) to HomeKit percentage (0-100)
136
- switch (this.device.speed) {
137
- case 0: return 0; // Off
138
- case 1: return 11;
139
- case 2: return 22;
140
- case 3: return 33;
141
- case 4: return 44;
142
- case 5: return 55;
143
- case 6: return 66;
144
- case 7: return 77;
145
- case 8: return 88;
146
- case 9: return 100;
147
- default: return 0;
228
+ private async setTargetHumidity(value: CharacteristicValue): Promise<void> {
229
+ try {
230
+ const humidity = value as number;
231
+ // VeSync humidifiers accept range 30-80%
232
+ const clampedHumidity = Math.max(30, Math.min(80, humidity));
233
+
234
+ const success = await this.device.setHumidity(clampedHumidity);
235
+ if (!success) {
236
+ throw new Error(`Failed to set target humidity to ${clampedHumidity}`);
237
+ }
238
+
239
+ await this.persistDeviceState('targetHumidity', clampedHumidity);
240
+ } catch (error) {
241
+ this.handleDeviceError('set target humidity', error);
148
242
  }
149
243
  }
150
244
 
245
+ private async getWaterLevel(): Promise<CharacteristicValue> {
246
+ return this.device.waterLevel;
247
+ }
248
+
249
+ private convertMistLevelToPercentage(level: number): number {
250
+ if (!level) return 0;
251
+ return Math.round((level / this.mistLevels.length) * 100);
252
+ }
253
+
254
+ private convertPercentageToMistLevel(percentage: number): number {
255
+ if (percentage === 0) return 0;
256
+ const level = Math.ceil((percentage / 100) * this.mistLevels.length);
257
+ return Math.min(level, this.mistLevels.length);
258
+ }
259
+
260
+ private async getRotationSpeed(): Promise<CharacteristicValue> {
261
+ return this.convertMistLevelToPercentage(this.device.details.mist_level);
262
+ }
263
+
151
264
  private async handleSetRotationSpeed(value: CharacteristicValue): Promise<void> {
152
- const percentage = value as number;
153
-
154
- if (percentage === 0) {
155
- // Turn off the device instead of setting speed to 0
156
- await this.device.turnOff();
157
- return;
158
- }
265
+ try {
266
+ const percentage = value as number;
267
+
268
+ if (percentage === 0) {
269
+ await this.device.turnOff();
270
+ return;
271
+ }
159
272
 
160
- // Convert HomeKit percentage (0-100) to device speed (1-9)
161
- let speed: number;
162
- if (percentage <= 11) {
163
- speed = 1;
164
- } else if (percentage <= 22) {
165
- speed = 2;
166
- } else if (percentage <= 33) {
167
- speed = 3;
168
- } else if (percentage <= 44) {
169
- speed = 4;
170
- } else if (percentage <= 55) {
171
- speed = 5;
172
- } else if (percentage <= 66) {
173
- speed = 6;
174
- } else if (percentage <= 77) {
175
- speed = 7;
176
- } else if (percentage <= 88) {
177
- speed = 8;
178
- } else {
179
- speed = 9;
273
+ const mistLevel = this.convertPercentageToMistLevel(percentage);
274
+ const success = await this.device.setMistLevel(mistLevel);
275
+
276
+ if (!success) {
277
+ throw new Error(`Failed to set mist level to ${mistLevel}`);
278
+ }
279
+
280
+ await this.persistDeviceState('mist_level', mistLevel);
281
+ } catch (error) {
282
+ this.handleDeviceError('set mist level', error);
180
283
  }
284
+ }
181
285
 
182
- await this.device.changeFanSpeed(speed);
286
+ private async getLockPhysicalControls(): Promise<CharacteristicValue> {
287
+ return this.device.details.child_lock ? 1 : 0;
288
+ }
289
+
290
+ private async setLockPhysicalControls(value: CharacteristicValue): Promise<void> {
291
+ try {
292
+ const enabled = value as number === 1;
293
+ const success = await this.device.setChildLock(enabled);
294
+
295
+ if (!success) {
296
+ throw new Error(`Failed to ${enabled ? 'enable' : 'disable'} child lock`);
297
+ }
298
+
299
+ await this.persistDeviceState('child_lock', enabled);
300
+ } catch (error) {
301
+ this.handleDeviceError('set child lock', error);
302
+ }
183
303
  }
184
304
  }
@@ -1,5 +1,11 @@
1
1
  import { VeSyncBaseDevice } from 'tsvesync';
2
2
 
3
+ export interface FanConfig {
4
+ module: 'VeSyncAirBypass' | 'VeSyncHumidifier' | 'VeSyncWarmHumidifier' | 'VeSyncTowerFan' | 'VeSyncAirBaseV2';
5
+ features: string[];
6
+ levels?: number[];
7
+ }
8
+
3
9
  export interface DeviceCapabilities {
4
10
  hasBrightness: boolean;
5
11
  hasColorTemp: boolean;
@@ -67,7 +73,39 @@ export interface VeSyncDeviceWithControls extends VeSyncDeviceWithPower {
67
73
  // Combined device types for specific device categories
68
74
  export interface VeSyncAirPurifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithAirQuality, VeSyncDeviceWithControls {}
69
75
 
70
- export interface VeSyncHumidifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithHumidity, VeSyncDeviceWithControls {}
76
+ export interface VeSyncHumidifier extends VeSyncBaseDevice {
77
+ deviceType: string;
78
+ deviceStatus: string;
79
+ humidity: number;
80
+ details: {
81
+ mode: string;
82
+ humidity: number;
83
+ mist_level: number;
84
+ mist_virtual_level: number;
85
+ water_lacks: boolean;
86
+ water_level: number;
87
+ water_tank_lifted: boolean;
88
+ humidity_high: boolean;
89
+ display: boolean;
90
+ automatic_stop: boolean;
91
+ oscillation_enabled: boolean;
92
+ configuration: Record<string, any>;
93
+ connection_status: string | null;
94
+ targetHumidity?: number;
95
+ child_lock?: boolean;
96
+ };
97
+ currentState: string;
98
+ waterLevel: number;
99
+ waterTankLifted: boolean;
100
+ oscillationEnabled: boolean;
101
+ turnOn(): Promise<boolean>;
102
+ turnOff(): Promise<boolean>;
103
+ setMistLevel(level: number): Promise<boolean>;
104
+ setHumidity(humidity: number): Promise<boolean>;
105
+ setMode(mode: string): Promise<boolean>;
106
+ setDisplay(enabled: boolean): Promise<boolean>;
107
+ setChildLock(enabled: boolean): Promise<boolean>;
108
+ }
71
109
 
72
110
  export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
73
111
  oscillationState: boolean;