homebridge-tsvesync 1.0.69 → 1.0.71

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/.clinerules CHANGED
@@ -39,6 +39,15 @@
39
39
  - Redact sensitive information in logs
40
40
  - Include operation context in log messages
41
41
 
42
+ ### File Editing Practices
43
+ - Always commit working code before making significant changes
44
+ - Make small, incremental changes rather than large rewrites
45
+ - Initialize all properties in constructors with default values
46
+ - Be cautious when modifying interface definitions
47
+ - Validate type casting with explicit checks
48
+ - Use version control for recovery if files become corrupted
49
+ - See memory-bank/file-editing-guidelines.md for detailed guidelines
50
+
42
51
  ## Implementation Patterns
43
52
 
44
53
  ### Device Handling
@@ -133,3 +142,4 @@
133
142
  - State synchronization delays during high activity
134
143
  - Token refresh failures during network interruptions
135
144
  - Mapping complex device modes to HomeKit characteristics
145
+ - File corruption during complex edits (see file-editing-guidelines.md)
@@ -5,6 +5,7 @@ import { DeviceCapabilities, VeSyncAirPurifier } from '../types/device.types';
5
5
  export declare class AirPurifierAccessory extends BaseAccessory {
6
6
  private readonly capabilities;
7
7
  protected readonly device: VeSyncAirPurifier;
8
+ private isLVSeries;
8
9
  constructor(platform: TSVESyncPlatform, accessory: PlatformAccessory, device: VeSyncAirPurifier);
9
10
  /**
10
11
  * Set up the air purifier service
@@ -18,6 +19,14 @@ export declare class AirPurifierAccessory extends BaseAccessory {
18
19
  * Update device states based on the latest details
19
20
  */
20
21
  protected updateDeviceSpecificStates(details: any): Promise<void>;
22
+ /**
23
+ * Get target state (AUTO = 0, MANUAL = 1)
24
+ */
25
+ private getTargetState;
26
+ /**
27
+ * Set target state (AUTO = 0, MANUAL = 1)
28
+ */
29
+ private setTargetState;
21
30
  /**
22
31
  * Handle set rotation speed
23
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"air-purifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/air-purifier.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,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAG3C,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,iBAAiB;IAO3B;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA0B9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAcrD;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BvE;;OAEG;YACW,sBAAsB;YA0BtB,SAAS;YAIT,SAAS;YAiBT,gBAAgB;CAgB/B"}
1
+ {"version":3,"file":"air-purifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/air-purifier.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,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA0B9E,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC7C,OAAO,CAAC,UAAU,CAAU;gBAG1B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,iBAAiB;IAe3B;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAiC9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAcrD;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDvE;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,cAAc;IAmC5B;;OAEG;YACW,sBAAsB;YAyEtB,SAAS;YAIT,SAAS;YAmBT,gBAAgB;CA6B/B"}
@@ -4,9 +4,16 @@ exports.AirPurifierAccessory = void 0;
4
4
  const base_accessory_1 = require("./base.accessory");
5
5
  class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
6
6
  constructor(platform, accessory, device) {
7
+ var _a;
7
8
  super(platform, accessory, device);
8
9
  this.device = device;
9
10
  this.capabilities = this.getDeviceCapabilities();
11
+ // Detect if this is an LV-series device (LV-PUR131S or LV-RH131S)
12
+ const extendedDevice = this.device;
13
+ this.isLVSeries = ((_a = extendedDevice.deviceType) === null || _a === void 0 ? void 0 : _a.startsWith('LV-')) || false;
14
+ if (this.isLVSeries) {
15
+ this.platform.log.debug(`Detected LV-series device: ${this.device.deviceName} (${extendedDevice.deviceType})`);
16
+ }
10
17
  }
11
18
  /**
12
19
  * Set up the air purifier service
@@ -17,6 +24,8 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
17
24
  this.accessory.addService(this.platform.Service.AirPurifier);
18
25
  // Set up required characteristics
19
26
  this.setupCharacteristic(this.platform.Characteristic.Active, this.getActive.bind(this), this.setActive.bind(this));
27
+ // Set up target state characteristic for mode mapping
28
+ this.setupCharacteristic(this.platform.Characteristic.TargetAirPurifierState, this.getTargetState.bind(this), this.setTargetState.bind(this));
20
29
  // Set up speed control
21
30
  this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed.bind(this), this.handleSetRotationSpeed.bind(this));
22
31
  // Add Name characteristic
@@ -47,60 +56,175 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
47
56
  this.service.updateCharacteristic(this.platform.Characteristic.Active, isOn ? 1 : 0);
48
57
  // Update current state (INACTIVE = 0, IDLE = 1, PURIFYING_AIR = 2)
49
58
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentAirPurifierState, isOn ? 2 : 0);
59
+ // Get the extended device to access mode information
60
+ const extendedDevice = this.device;
50
61
  // Update target state (AUTO = 0, MANUAL = 1)
51
- this.service.updateCharacteristic(this.platform.Characteristic.TargetAirPurifierState, 1 // Always manual since we don't have auto mode info
52
- );
53
- // Update rotation speed - convert device speed (1-5) to HomeKit percentage (0-100)
62
+ // If mode is available, use it to determine target state
63
+ let targetState = 1; // Default to MANUAL
64
+ if (extendedDevice.mode) {
65
+ targetState = extendedDevice.mode === 'auto' ? 0 : 1;
66
+ }
67
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetAirPurifierState, targetState);
68
+ // Update rotation speed
54
69
  let rotationSpeed = 0;
55
70
  if (isOn && details.speed !== undefined) {
56
- switch (details.speed) {
57
- case 1:
58
- rotationSpeed = 20;
59
- break; // Sleep
60
- case 2:
61
- rotationSpeed = 40;
62
- break; // Low
63
- case 3:
64
- rotationSpeed = 60;
65
- break; // Medium
66
- case 4:
67
- rotationSpeed = 80;
68
- break; // High
69
- case 5:
70
- rotationSpeed = 100;
71
- break; // Turbo
71
+ if (this.isLVSeries) {
72
+ // For LV-series devices, speed is limited to 1-3
73
+ // Convert device speed (1-3) to HomeKit percentage (0-100)
74
+ switch (details.speed) {
75
+ case 1:
76
+ rotationSpeed = 33;
77
+ break; // Low
78
+ case 2:
79
+ rotationSpeed = 66;
80
+ break; // Medium
81
+ case 3:
82
+ rotationSpeed = 100;
83
+ break; // High
84
+ }
85
+ }
86
+ else {
87
+ // For standard devices, speed can be 1-5
88
+ // Convert device speed (1-5) to HomeKit percentage (0-100)
89
+ switch (details.speed) {
90
+ case 1:
91
+ rotationSpeed = 20;
92
+ break; // Sleep
93
+ case 2:
94
+ rotationSpeed = 40;
95
+ break; // Low
96
+ case 3:
97
+ rotationSpeed = 60;
98
+ break; // Medium
99
+ case 4:
100
+ rotationSpeed = 80;
101
+ break; // High
102
+ case 5:
103
+ rotationSpeed = 100;
104
+ break; // Turbo
105
+ }
72
106
  }
73
107
  }
74
108
  this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
75
109
  }
76
110
  /**
77
- * Handle set rotation speed
111
+ * Get target state (AUTO = 0, MANUAL = 1)
78
112
  */
79
- async handleSetRotationSpeed(value) {
80
- const percentage = value;
81
- if (percentage === 0) {
82
- // Turn off the device instead of setting speed to 0
83
- await this.device.turnOff();
84
- return;
85
- }
86
- // Convert HomeKit percentage (0-100) to device speed (1-5)
87
- let speed;
88
- if (percentage <= 20) {
89
- speed = 1; // Sleep
90
- }
91
- else if (percentage <= 40) {
92
- speed = 2; // Low
113
+ async getTargetState() {
114
+ const extendedDevice = this.device;
115
+ return extendedDevice.mode === 'auto' ? 0 : 1;
116
+ }
117
+ /**
118
+ * Set target state (AUTO = 0, MANUAL = 1)
119
+ */
120
+ async setTargetState(value) {
121
+ try {
122
+ const targetState = value;
123
+ const extendedDevice = this.device;
124
+ // Map HomeKit target states to device modes
125
+ const mode = targetState === 0 ? 'auto' : 'manual';
126
+ this.platform.log.debug(`Setting mode to ${mode} for device: ${this.device.deviceName}`);
127
+ let success = false;
128
+ // Use the appropriate method to set the mode
129
+ if (targetState === 0 && typeof extendedDevice.autoMode === 'function') {
130
+ success = await extendedDevice.autoMode();
131
+ }
132
+ else if (targetState === 1 && typeof extendedDevice.manualMode === 'function') {
133
+ success = await extendedDevice.manualMode();
134
+ }
135
+ else if (typeof extendedDevice.setMode === 'function') {
136
+ success = await extendedDevice.setMode(mode);
137
+ }
138
+ else if (typeof this.device.setMode === 'function') {
139
+ success = await this.device.setMode(mode);
140
+ }
141
+ else {
142
+ throw new Error('Device API does not support mode setting operations');
143
+ }
144
+ if (!success) {
145
+ throw new Error(`Failed to set mode to ${mode}`);
146
+ }
147
+ // Update device state and characteristics
148
+ await this.updateDeviceSpecificStates(this.device);
93
149
  }
94
- else if (percentage <= 60) {
95
- speed = 3; // Medium
150
+ catch (error) {
151
+ this.handleDeviceError('set target state', error);
96
152
  }
97
- else if (percentage <= 80) {
98
- speed = 4; // High
153
+ }
154
+ /**
155
+ * Handle set rotation speed
156
+ */
157
+ async handleSetRotationSpeed(value) {
158
+ try {
159
+ const percentage = value;
160
+ this.platform.log.debug(`Setting rotation speed to ${percentage}% for device: ${this.device.deviceName}`);
161
+ if (percentage === 0) {
162
+ // Turn off the device instead of setting speed to 0
163
+ this.platform.log.debug(`Turning off device ${this.device.deviceName} due to 0% rotation speed`);
164
+ const success = await this.device.turnOff();
165
+ if (!success) {
166
+ throw new Error('Failed to turn off device');
167
+ }
168
+ return;
169
+ }
170
+ const extendedDevice = this.device;
171
+ // For LV-series devices, ensure the device is in manual mode before changing fan speed
172
+ if (this.isLVSeries && extendedDevice.mode !== 'manual') {
173
+ this.platform.log.debug(`Setting device to manual mode before changing fan speed: ${this.device.deviceName}`);
174
+ // Use the appropriate method to set manual mode
175
+ if (typeof extendedDevice.manualMode === 'function') {
176
+ const modeSuccess = await extendedDevice.manualMode();
177
+ this.platform.log.debug(`Set manual mode result: ${modeSuccess ? 'success' : 'failed'}`);
178
+ }
179
+ else if (typeof extendedDevice.setMode === 'function') {
180
+ const modeSuccess = await extendedDevice.setMode('manual');
181
+ this.platform.log.debug(`Set manual mode result: ${modeSuccess ? 'success' : 'failed'}`);
182
+ }
183
+ }
184
+ let speed;
185
+ if (this.isLVSeries) {
186
+ // For LV-series devices, speed is limited to 1-3
187
+ // Convert HomeKit percentage (0-100) to device speed (1-3)
188
+ if (percentage <= 33) {
189
+ speed = 1; // Low
190
+ }
191
+ else if (percentage <= 66) {
192
+ speed = 2; // Medium
193
+ }
194
+ else {
195
+ speed = 3; // High
196
+ }
197
+ }
198
+ else {
199
+ // For standard devices, speed can be 1-5
200
+ // Convert HomeKit percentage (0-100) to device speed (1-5)
201
+ if (percentage <= 20) {
202
+ speed = 1; // Sleep
203
+ }
204
+ else if (percentage <= 40) {
205
+ speed = 2; // Low
206
+ }
207
+ else if (percentage <= 60) {
208
+ speed = 3; // Medium
209
+ }
210
+ else if (percentage <= 80) {
211
+ speed = 4; // High
212
+ }
213
+ else {
214
+ speed = 5; // Turbo
215
+ }
216
+ }
217
+ this.platform.log.debug(`Setting fan speed to ${speed} for device: ${this.device.deviceName}`);
218
+ const success = await this.device.changeFanSpeed(speed);
219
+ if (!success) {
220
+ throw new Error(`Failed to set speed to ${speed}`);
221
+ }
222
+ // Update device state and characteristics
223
+ await this.updateDeviceSpecificStates(this.device);
99
224
  }
100
- else {
101
- speed = 5; // Turbo
225
+ catch (error) {
226
+ this.handleDeviceError('set rotation speed', error);
102
227
  }
103
- await this.device.changeFanSpeed(speed);
104
228
  }
105
229
  async getActive() {
106
230
  return this.device.deviceStatus === 'on' ? 1 : 0;
@@ -108,6 +232,7 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
108
232
  async setActive(value) {
109
233
  try {
110
234
  const isOn = value === 1;
235
+ this.platform.log.debug(`Setting device ${this.device.deviceName} to ${isOn ? 'on' : 'off'}`);
111
236
  const success = isOn ? await this.device.turnOn() : await this.device.turnOff();
112
237
  if (!success) {
113
238
  throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
@@ -124,15 +249,29 @@ class AirPurifierAccessory extends base_accessory_1.BaseAccessory {
124
249
  if (this.device.speed === undefined || this.device.speed === null) {
125
250
  return 0;
126
251
  }
127
- // Convert device speed (1-5) to HomeKit percentage (0-100)
128
- switch (this.device.speed) {
129
- case 0: return 0; // Off
130
- case 1: return 20; // Sleep
131
- case 2: return 40; // Low
132
- case 3: return 60; // Medium
133
- case 4: return 80; // High
134
- case 5: return 100; // Turbo
135
- default: return 0;
252
+ if (this.isLVSeries) {
253
+ // For LV-series devices, speed is limited to 1-3
254
+ // Convert device speed (1-3) to HomeKit percentage (0-100)
255
+ switch (this.device.speed) {
256
+ case 0: return 0; // Off
257
+ case 1: return 33; // Low
258
+ case 2: return 66; // Medium
259
+ case 3: return 100; // High
260
+ default: return 0;
261
+ }
262
+ }
263
+ else {
264
+ // For standard devices, speed can be 1-5
265
+ // Convert device speed (1-5) to HomeKit percentage (0-100)
266
+ switch (this.device.speed) {
267
+ case 0: return 0; // Off
268
+ case 1: return 20; // Sleep
269
+ case 2: return 40; // Low
270
+ case 3: return 60; // Medium
271
+ case 4: return 80; // High
272
+ case 5: return 100; // Turbo
273
+ default: return 0;
274
+ }
136
275
  }
137
276
  }
138
277
  }
@@ -1 +1 @@
1
- {"version":3,"file":"air-purifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"air-purifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/air-purifier.accessory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"humidifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/humidifier.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAsD7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAC,CAAU;gBAG7B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IA0B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B,SAAS,CAAC,YAAY,IAAI,IAAI;IA0F9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;YACW,eAAe;IAO7B;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,uBAAuB;IAMrC;;OAEG;YACW,uBAAuB;IAmBrC;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA4LvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YA4BT,SAAS;YA4HT,gBAAgB;YAqBhB,cAAc;YAmId,sBAAsB;IA0EpC;;OAEG;IACH;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,iBAAiB;IA4D/B,OAAO,CAAC,gCAAgC;CAWzC"}
1
+ {"version":3,"file":"humidifier.accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/humidifier.accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAuD7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAC,CAAU;gBAG7B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IA0B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B,SAAS,CAAC,YAAY,IAAI,IAAI;IAqH9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;YACW,eAAe;IAO7B;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,uBAAuB;IAMrC;;OAEG;YACW,uBAAuB;IAmBrC;;OAEG;cACa,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA8NvE,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YA4BT,SAAS;YAqJT,gBAAgB;YAqBhB,cAAc;YA4Jd,sBAAsB;IA0EpC;;OAEG;IACH;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,iBAAiB;IAkE/B,OAAO,CAAC,gCAAgC;CAWzC"}
@@ -43,6 +43,12 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
43
43
  // Get or create the humidifier service
44
44
  this.service = this.accessory.getService(this.platform.Service.HumidifierDehumidifier) ||
45
45
  this.accessory.addService(this.platform.Service.HumidifierDehumidifier);
46
+ // Initialize all characteristics with explicit values
47
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, 40);
48
+ this.service.updateCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, 60);
49
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, 1);
50
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState, 1);
51
+ this.platform.log.debug('Initialized humidifier characteristics with explicit values');
46
52
  // Set up required characteristics
47
53
  this.setupCharacteristic(this.platform.Characteristic.Active, this.getActive.bind(this), this.setActive.bind(this));
48
54
  // Set up target state characteristic for mode mapping
@@ -72,8 +78,25 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
72
78
  if (!this.service.testCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold)) {
73
79
  this.service.addCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold);
74
80
  }
81
+ // Configure the target humidity characteristic with proper properties
82
+ const targetHumidityChar = this.service.getCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold);
83
+ targetHumidityChar.setProps({
84
+ minValue: 30,
85
+ maxValue: 80,
86
+ minStep: 1
87
+ });
88
+ // Set an initial value to ensure the characteristic is not blank
89
+ targetHumidityChar.updateValue(45);
90
+ this.platform.log.debug(`Configured RelativeHumidityHumidifierThreshold characteristic with initial value 45%`);
75
91
  // Set up handlers for target humidity
76
92
  this.setupCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, this.getTargetHumidity.bind(this), this.setTargetHumidity.bind(this));
93
+ // Immediately get and set the actual target humidity to ensure it's displayed correctly
94
+ this.getTargetHumidity().then(targetHumidity => {
95
+ this.platform.log.debug(`Initial target humidity value: ${targetHumidity}%`);
96
+ targetHumidityChar.updateValue(targetHumidity);
97
+ }).catch(error => {
98
+ this.platform.log.warn(`Failed to get initial target humidity: ${error}`);
99
+ });
77
100
  }
78
101
  // Add Water Level characteristic if supported (mapping inferred from water_lacks/water_tank_lifted)
79
102
  if (this.capabilities && this.capabilities.hasWaterLevel) {
@@ -167,7 +190,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
167
190
  * Update device states based on the latest details
168
191
  */
169
192
  async updateDeviceSpecificStates(details) {
170
- var _a, _b;
193
+ var _a, _b, _c, _d, _e, _f;
171
194
  // Log the relevant details for debugging without using JSON.stringify on the entire object
172
195
  this.platform.log.debug(`Updating device states for ${this.device.deviceName}`);
173
196
  // Cast to extended device type
@@ -206,14 +229,32 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
206
229
  // Mapping:
207
230
  // - If not active -> INACTIVE (0)
208
231
  // - If active and mode is 'manual' -> HUMIDIFYING (2)
209
- // - If active and mode is 'auto' or 'sleep' -> IDLE (1)
232
+ // - If active and mode is 'auto' or 'sleep' -> Check if we need to be humidifying
210
233
  let currentState = 0; // Default to INACTIVE
211
234
  if (isActive) {
212
235
  if (extendedDevice.mode === 'manual') {
213
- currentState = 2; // HUMIDIFYING
236
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
214
237
  }
215
238
  else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
216
- currentState = 1; // IDLE
239
+ // Get current humidity reading (actual humidity in the room)
240
+ const currentHumidity = extendedDevice.currentHumidity !== undefined ?
241
+ extendedDevice.currentHumidity :
242
+ ((_a = extendedDevice.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
243
+ 0;
244
+ // Get target humidity (humidity setting)
245
+ const targetHumidity = extendedDevice.humidity ||
246
+ ((_b = extendedDevice.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
247
+ ((_c = extendedDevice.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
248
+ 45; // Default to 45% if not available
249
+ // In auto mode, check if we need to be humidifying
250
+ if (currentHumidity < targetHumidity) {
251
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
252
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
253
+ }
254
+ else {
255
+ currentState = 1; // IDLE - will show "Set to X%"
256
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
257
+ }
217
258
  }
218
259
  }
219
260
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
@@ -303,12 +344,21 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
303
344
  this.platform.log.debug(`Setting rotation speed to ${rotationSpeed}% for device: ${this.device.deviceName}`);
304
345
  this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
305
346
  // Update relative humidity if supported
306
- if (this.capabilities && this.capabilities.hasHumidity && extendedDevice.humidity !== undefined) {
307
- this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, extendedDevice.humidity);
308
- // Update target humidity if available
309
- const targetHumidity = ((_a = extendedDevice.configuration) === null || _a === void 0 ? void 0 : _a.auto_target_humidity) ||
310
- ((_b = extendedDevice.details) === null || _b === void 0 ? void 0 : _b.target_humidity) ||
311
- extendedDevice.targetHumidity ||
347
+ if (this.capabilities && this.capabilities.hasHumidity) {
348
+ // Get current humidity reading (actual humidity in the room)
349
+ const currentHumidity = extendedDevice.currentHumidity !== undefined ?
350
+ extendedDevice.currentHumidity :
351
+ ((_d = extendedDevice.details) === null || _d === void 0 ? void 0 : _d.current_humidity) ||
352
+ 0;
353
+ // Update current humidity characteristic if we have a valid reading
354
+ if (currentHumidity > 0) {
355
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, currentHumidity);
356
+ }
357
+ // Get target humidity (humidity setting)
358
+ // According to API docs, humidifier.humidity returns auto_target_humidity from configuration
359
+ const targetHumidity = extendedDevice.humidity ||
360
+ ((_e = extendedDevice.configuration) === null || _e === void 0 ? void 0 : _e.auto_target_humidity) ||
361
+ ((_f = extendedDevice.details) === null || _f === void 0 ? void 0 : _f.target_humidity) ||
312
362
  45; // Default to 45% if not available
313
363
  if (this.service.testCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold)) {
314
364
  this.service.updateCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, targetHumidity);
@@ -322,9 +372,12 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
322
372
  const waterTankLifted = (details === null || details === void 0 ? void 0 : details.water_tank_lifted) ||
323
373
  (extendedDevice.details && extendedDevice.details.water_tank_lifted);
324
374
  const waterLow = waterLacks || waterTankLifted;
375
+ // Note: VeSync devices only support a boolean water_lacks property, not a percentage water level
376
+ // We map this to 0% or 100% for HomeKit's WaterLevel characteristic
325
377
  if (this.service.getCharacteristic(this.platform.Characteristic.WaterLevel)) {
326
378
  // Map water level as 0 for low water, 100 for sufficient water
327
379
  this.service.updateCharacteristic(this.platform.Characteristic.WaterLevel, waterLow ? 0 : 100);
380
+ this.platform.log.debug(`Water level for ${this.device.deviceName}: ${waterLow ? 'Low (0%)' : 'OK (100%)'}`);
328
381
  }
329
382
  }
330
383
  // Update night light characteristics for Humid200300S devices
@@ -375,6 +428,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
375
428
  return isActive ? 1 : 0;
376
429
  }
377
430
  async setActive(value) {
431
+ var _a, _b, _c;
378
432
  try {
379
433
  const isOn = value === 1;
380
434
  this.platform.log.debug(`Setting device ${this.device.deviceName} to ${isOn ? 'on' : 'off'}`);
@@ -455,9 +509,33 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
455
509
  // Always update HomeKit with the actual device state, not the requested state
456
510
  this.service.updateCharacteristic(this.platform.Characteristic.Active, actuallyOn ? 1 : 0);
457
511
  // Update current state based on the actual state and mode
458
- const currentState = actuallyOn ?
459
- (extendedDevice.mode === 'manual' ? 2 : 1) : // 2 = HUMIDIFYING, 1 = IDLE
460
- 0; // 0 = INACTIVE
512
+ let currentState = 0; // Default to INACTIVE
513
+ if (actuallyOn) {
514
+ if (extendedDevice.mode === 'manual') {
515
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
516
+ }
517
+ else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
518
+ // Get current humidity reading (actual humidity in the room)
519
+ const currentHumidity = extendedDevice.currentHumidity !== undefined ?
520
+ extendedDevice.currentHumidity :
521
+ ((_a = extendedDevice.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
522
+ 0;
523
+ // Get target humidity (humidity setting)
524
+ const targetHumidity = extendedDevice.humidity ||
525
+ ((_b = extendedDevice.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
526
+ ((_c = extendedDevice.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
527
+ 45; // Default to 45% if not available
528
+ // In auto mode, check if we need to be humidifying
529
+ if (currentHumidity < targetHumidity) {
530
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
531
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
532
+ }
533
+ else {
534
+ currentState = 1; // IDLE - will show "Set to X%"
535
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
536
+ }
537
+ }
538
+ }
461
539
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
462
540
  // Update device state and characteristics
463
541
  await this.updateDeviceSpecificStates(this.device);
@@ -487,6 +565,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
487
565
  }
488
566
  }
489
567
  async setTargetState(value) {
568
+ var _a, _b, _c;
490
569
  try {
491
570
  // HomeKit Target State: 0 = HUMIDIFIER_OR_DEHUMIDIFIER (Auto), 1 = HUMIDIFIER, 2 = DEHUMIDIFIER
492
571
  this.platform.log.debug(`Setting target state to ${value} for device: ${this.device.deviceName}`);
@@ -584,9 +663,33 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
584
663
  const targetState = actualMode === 'auto' ? 0 : 1;
585
664
  this.updateCharacteristicValue(this.platform.Characteristic.TargetHumidifierDehumidifierState, targetState);
586
665
  // Update current state based on the active state and mode
587
- const currentState = this.device.deviceStatus === 'on' ?
588
- (actualMode === 'manual' ? 2 : 1) : // 2 = HUMIDIFYING, 1 = IDLE
589
- 0; // 0 = INACTIVE
666
+ let currentState = 0; // Default to INACTIVE
667
+ if (this.device.deviceStatus === 'on') {
668
+ if (actualMode === 'manual') {
669
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
670
+ }
671
+ else if (actualMode === 'auto' || actualMode === 'sleep') {
672
+ // Get current humidity reading (actual humidity in the room)
673
+ const currentHumidity = device.currentHumidity !== undefined ?
674
+ device.currentHumidity :
675
+ ((_a = device.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
676
+ 0;
677
+ // Get target humidity (humidity setting)
678
+ const targetHumidity = device.humidity ||
679
+ ((_b = device.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
680
+ ((_c = device.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
681
+ 45; // Default to 45% if not available
682
+ // In auto mode, check if we need to be humidifying
683
+ if (currentHumidity < targetHumidity) {
684
+ currentState = 2; // HUMIDIFYING - will show "Rising to X%"
685
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
686
+ }
687
+ else {
688
+ currentState = 1; // IDLE - will show "Set to X%"
689
+ this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
690
+ }
691
+ }
692
+ }
590
693
  this.updateCharacteristicValue(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
591
694
  // Update device state and characteristics
592
695
  await this.updateDeviceSpecificStates(this.device);
@@ -679,7 +782,11 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
679
782
  */
680
783
  async getTargetHumidity() {
681
784
  const extendedDevice = this.device;
682
- // First check configuration for auto_target_humidity
785
+ // According to API docs, humidifier.humidity returns auto_target_humidity from configuration
786
+ if (typeof extendedDevice.humidity !== 'undefined') {
787
+ return extendedDevice.humidity;
788
+ }
789
+ // Fall back to configuration for auto_target_humidity
683
790
  if (extendedDevice.configuration && typeof extendedDevice.configuration.auto_target_humidity !== 'undefined') {
684
791
  return extendedDevice.configuration.auto_target_humidity;
685
792
  }
@@ -687,10 +794,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
687
794
  if (extendedDevice.details && typeof extendedDevice.details.target_humidity !== 'undefined') {
688
795
  return extendedDevice.details.target_humidity;
689
796
  }
690
- // Try to get target humidity from device property
691
- if (typeof extendedDevice.targetHumidity !== 'undefined') {
692
- return extendedDevice.targetHumidity;
693
- }
694
797
  // Default to 45% if no target humidity is available
695
798
  return 45;
696
799
  }