homebridge-tsvesync 1.4.7 โ 1.4.8
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/AGENTS.md +31 -0
- package/CHANGELOG.md +11 -0
- package/dist/accessories/humidifier.accessory.d.ts +1 -0
- package/dist/accessories/humidifier.accessory.d.ts.map +1 -1
- package/dist/accessories/humidifier.accessory.js +19 -155
- package/dist/accessories/humidifier.accessory.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/accessories/humidifier-write-consistency.test.ts +316 -0
- package/src/accessories/humidifier.accessory.ts +64 -231
package/AGENTS.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Homebridge TSVeSync Agent Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- `homebridge-tsvesync` is the Homebridge/HomeKit layer on top of `tsvesync`.
|
|
5
|
+
- Source of truth is `src/`; `dist/` is generated output and should not be edited directly.
|
|
6
|
+
- Device capability changes should usually be validated in `tsvesync` first, then surfaced here through accessory/service mapping.
|
|
7
|
+
|
|
8
|
+
## Where To Look
|
|
9
|
+
- `package.json`: plugin metadata, version, scripts
|
|
10
|
+
- `src/platform.ts`: platform lifecycle and accessory registration
|
|
11
|
+
- `src/accessories/*.ts`: HomeKit service/characteristic mappings
|
|
12
|
+
- `src/utils/device-factory.ts`: model-to-accessory routing
|
|
13
|
+
- `src/types/*.ts`: device and library typing glue
|
|
14
|
+
- `src/settings.ts`: plugin configuration
|
|
15
|
+
- `src/__tests__/**`: Jest coverage for platform, accessories, and device behaviors
|
|
16
|
+
|
|
17
|
+
## Working Rules
|
|
18
|
+
- Never edit `dist/` by hand.
|
|
19
|
+
- Keep package version aligned with `tsvesync`.
|
|
20
|
+
- If a feature does not exist correctly in `tsvesync`, fix or model it there before papering over it in Homebridge.
|
|
21
|
+
- HomeKit responsiveness matters: characteristic updates, service choice, and accessory categories should match Home app behavior, not just compile.
|
|
22
|
+
- When adding a new feature or device, update the accessory mapping, device factory, types, and tests together.
|
|
23
|
+
|
|
24
|
+
## Validation
|
|
25
|
+
- Run `npm run build`.
|
|
26
|
+
- Run `npm test` for behavior changes.
|
|
27
|
+
- For HomeKit-specific issues, inspect the exact accessory/service mapping and use targeted tests rather than broad guesswork.
|
|
28
|
+
|
|
29
|
+
## Release Notes
|
|
30
|
+
- This repo normally ships with `tsvesync` on the same version.
|
|
31
|
+
- Coordinate changelog and release prep across both repos.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.4.8 (2026-03-27)
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **๐ง Dual 200S Write Consistency**: Humidifier writes now follow the same optimistic HomeKit update pattern as the air purifier accessory, so successful power and auto-mode commands no longer log false "did not change to desired state/mode" warnings or bounce the Home app back to stale values while VeSync catches up.
|
|
7
|
+
|
|
8
|
+
### Tests
|
|
9
|
+
- **๐งช Humidifier Regression Coverage**: Added targeted stale-refresh tests for Dual 200S power and auto-mode writes to lock in the eventual-consistency behavior reported in issue #31.
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
- **๐ฆ tsvesync**: Updated to 1.4.8 for version sync (no functional changes).
|
|
13
|
+
|
|
3
14
|
## 1.4.7 (2026-02-02)
|
|
4
15
|
|
|
5
16
|
### Fixed
|
|
@@ -74,6 +74,7 @@ export declare class HumidifierAccessory extends BaseAccessory {
|
|
|
74
74
|
* Update device states based on the latest details
|
|
75
75
|
*/
|
|
76
76
|
protected updateDeviceSpecificStates(details: any): Promise<void>;
|
|
77
|
+
private applyDeviceStatesToHomeKit;
|
|
77
78
|
protected getDeviceCapabilities(): DeviceCapabilities;
|
|
78
79
|
private getActive;
|
|
79
80
|
private setActive;
|
|
@@ -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;AA6E7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAqB;IAGzC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,eAAe,CAAU;IAGjC,OAAO,CAAC,YAAY,CAAC,CAAU;IAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,aAAa,CAAC,CAAU;gBAG9B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IAsC1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B,SAAS,CAAC,YAAY,IAAI,IAAI;IA2H9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;YACW,cAAc;IAW5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmC1B;;OAEG;YACW,yBAAyB;IAYvC;;OAEG;YACW,kBAAkB;IAYhC;;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;
|
|
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;AA6E7E,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAqB;IAGzC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,eAAe,CAAU;IAGjC,OAAO,CAAC,YAAY,CAAC,CAAU;IAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,aAAa,CAAC,CAAU;gBAG9B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,gBAAgB;IAsC1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B,SAAS,CAAC,YAAY,IAAI,IAAI;IA2H9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;YACW,cAAc;IAW5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmC1B;;OAEG;YACW,yBAAyB;IAYvC;;OAEG;YACW,kBAAkB;IAYhC;;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;IAsCvE,OAAO,CAAC,0BAA0B;IA6KlC,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;YAcvC,SAAS;YA4BT,SAAS;YAwFT,gBAAgB;YAqBhB,cAAc;YA4Fd,sBAAsB;IAmFpC;;OAEG;IACH;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,iBAAiB;IAkE/B,OAAO,CAAC,gCAAgC;CAWzC"}
|
|
@@ -346,7 +346,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
346
346
|
* Update device states based on the latest details
|
|
347
347
|
*/
|
|
348
348
|
async updateDeviceSpecificStates(details) {
|
|
349
|
-
var _a, _b, _c, _d, _e, _f;
|
|
350
349
|
// Log the relevant details for debugging without using JSON.stringify on the entire object
|
|
351
350
|
this.platform.log.debug(`Updating device states for ${this.device.deviceName}`);
|
|
352
351
|
// Cast to extended device type
|
|
@@ -374,65 +373,45 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
374
373
|
catch (error) {
|
|
375
374
|
this.platform.log.warn(`Failed to refresh device details: ${error}`);
|
|
376
375
|
}
|
|
377
|
-
|
|
378
|
-
|
|
376
|
+
this.applyDeviceStatesToHomeKit(details);
|
|
377
|
+
}
|
|
378
|
+
applyDeviceStatesToHomeKit(details) {
|
|
379
|
+
var _a, _b, _c, _d, _e, _f;
|
|
380
|
+
const extendedDevice = this.device;
|
|
379
381
|
const isActive = this.device.deviceStatus === 'on';
|
|
380
382
|
this.platform.log.debug(`Device ${this.device.deviceName} active state: ${isActive}, Status: ${this.device.deviceStatus}`);
|
|
381
|
-
// Update active state - this is critical for HomeKit to show the correct state
|
|
382
383
|
this.service.updateCharacteristic(this.platform.Characteristic.Active, isActive ? 1 : 0);
|
|
383
|
-
|
|
384
|
-
// HomeKit states: 0 = INACTIVE, 1 = IDLE, 2 = HUMIDIFYING, 3 = DEHUMIDIFYING
|
|
385
|
-
// Mapping:
|
|
386
|
-
// - If not active -> INACTIVE (0)
|
|
387
|
-
// - If active and mode is 'manual' -> HUMIDIFYING (2)
|
|
388
|
-
// - If active and mode is 'auto' or 'sleep' -> Check if we need to be humidifying
|
|
389
|
-
let currentState = 0; // Default to INACTIVE
|
|
384
|
+
let currentState = 0;
|
|
390
385
|
if (isActive) {
|
|
391
386
|
if (extendedDevice.mode === 'manual') {
|
|
392
|
-
currentState = 2;
|
|
387
|
+
currentState = 2;
|
|
393
388
|
}
|
|
394
389
|
else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
|
|
395
|
-
// Get current humidity reading (actual humidity in the room)
|
|
396
390
|
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
397
391
|
extendedDevice.currentHumidity :
|
|
398
392
|
((_a = extendedDevice.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
|
|
399
393
|
0;
|
|
400
|
-
// Get target humidity (humidity setting)
|
|
401
394
|
const targetHumidity = extendedDevice.humidity ||
|
|
402
395
|
((_b = extendedDevice.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
|
|
403
396
|
((_c = extendedDevice.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
|
|
404
|
-
45;
|
|
405
|
-
// In auto mode, check if we need to be humidifying
|
|
397
|
+
45;
|
|
406
398
|
if (currentHumidity < targetHumidity) {
|
|
407
|
-
currentState = 2;
|
|
399
|
+
currentState = 2;
|
|
408
400
|
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
409
401
|
}
|
|
410
402
|
else {
|
|
411
|
-
currentState = 1;
|
|
403
|
+
currentState = 1;
|
|
412
404
|
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
413
405
|
}
|
|
414
406
|
}
|
|
415
407
|
}
|
|
416
408
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
|
|
417
|
-
|
|
418
|
-
// HomeKit Target State: 0 = HUMIDIFIER_OR_DEHUMIDIFIER (Auto), 1 = HUMIDIFIER, 2 = DEHUMIDIFIER
|
|
419
|
-
// Mapping:
|
|
420
|
-
// - 'auto' -> HUMIDIFIER_OR_DEHUMIDIFIER (0)
|
|
421
|
-
// - 'manual' -> HUMIDIFIER (1)
|
|
422
|
-
// - 'sleep' -> HUMIDIFIER (1) (no direct mapping, default to HUMIDIFIER)
|
|
423
|
-
let targetState = 1; // Default to HUMIDIFIER
|
|
424
|
-
if (extendedDevice.mode === 'auto') {
|
|
425
|
-
targetState = 0; // HUMIDIFIER_OR_DEHUMIDIFIER
|
|
426
|
-
}
|
|
427
|
-
this.service.updateCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState, targetState);
|
|
428
|
-
// Update rotation speed - convert device speed (1-9) to HomeKit percentage (0-100)
|
|
409
|
+
this.service.updateCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState, extendedDevice.mode === 'auto' ? 0 : 1);
|
|
429
410
|
let rotationSpeed = 0;
|
|
430
|
-
// For Humid200300S devices, use mistLevel if available
|
|
431
411
|
if (isActive) {
|
|
432
412
|
if (this.isHumid200300S && extendedDevice.mistLevel !== undefined) {
|
|
433
413
|
const mistLevel = extendedDevice.mistLevel;
|
|
434
414
|
this.platform.log.debug(`Device ${this.device.deviceName} mist level: ${mistLevel}`);
|
|
435
|
-
// Convert mist level (1-9) to HomeKit percentage (0-100)
|
|
436
415
|
switch (mistLevel) {
|
|
437
416
|
case 1:
|
|
438
417
|
rotationSpeed = 11;
|
|
@@ -464,7 +443,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
464
443
|
}
|
|
465
444
|
}
|
|
466
445
|
else if (this.device.speed !== undefined) {
|
|
467
|
-
// Use speed for other humidifier types
|
|
468
446
|
this.platform.log.debug(`Device ${this.device.deviceName} speed: ${this.device.speed}`);
|
|
469
447
|
switch (this.device.speed) {
|
|
470
448
|
case 1:
|
|
@@ -499,67 +477,51 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
499
477
|
}
|
|
500
478
|
this.platform.log.debug(`Setting rotation speed to ${rotationSpeed}% for device: ${this.device.deviceName}`);
|
|
501
479
|
this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
|
|
502
|
-
// Update relative humidity if supported
|
|
503
480
|
if (this.capabilities && this.capabilities.hasHumidity) {
|
|
504
|
-
// Get current humidity reading (actual humidity in the room)
|
|
505
481
|
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
506
482
|
extendedDevice.currentHumidity :
|
|
507
483
|
((_d = extendedDevice.details) === null || _d === void 0 ? void 0 : _d.current_humidity) ||
|
|
508
484
|
0;
|
|
509
|
-
// Update current humidity characteristic if we have a valid reading
|
|
510
485
|
if (currentHumidity > 0) {
|
|
511
486
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, currentHumidity);
|
|
512
487
|
}
|
|
513
|
-
// Get target humidity (humidity setting)
|
|
514
|
-
// According to API docs, humidifier.humidity returns auto_target_humidity from configuration
|
|
515
488
|
const targetHumidity = extendedDevice.humidity ||
|
|
516
489
|
((_e = extendedDevice.configuration) === null || _e === void 0 ? void 0 : _e.auto_target_humidity) ||
|
|
517
490
|
((_f = extendedDevice.details) === null || _f === void 0 ? void 0 : _f.target_humidity) ||
|
|
518
|
-
45;
|
|
491
|
+
45;
|
|
519
492
|
if (this.service.testCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold)) {
|
|
520
493
|
this.service.updateCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold, targetHumidity);
|
|
521
494
|
}
|
|
522
495
|
}
|
|
523
|
-
// Update water level if supported (inferred from water_lacks/water_tank_lifted)
|
|
524
496
|
if (this.capabilities && this.capabilities.hasWaterLevel) {
|
|
525
|
-
// Check for water_lacks or water_tank_lifted in details or device.details
|
|
526
497
|
const waterLacks = (details === null || details === void 0 ? void 0 : details.water_lacks) ||
|
|
527
498
|
(extendedDevice.details && extendedDevice.details.water_lacks);
|
|
528
499
|
const waterTankLifted = (details === null || details === void 0 ? void 0 : details.water_tank_lifted) ||
|
|
529
500
|
(extendedDevice.details && extendedDevice.details.water_tank_lifted);
|
|
530
501
|
const waterLow = waterLacks || waterTankLifted;
|
|
531
|
-
// Note: VeSync devices only support a boolean water_lacks property, not a percentage water level
|
|
532
|
-
// We map this to 0% or 100% for HomeKit's WaterLevel characteristic
|
|
533
502
|
if (this.service.getCharacteristic(this.platform.Characteristic.WaterLevel)) {
|
|
534
|
-
// Map water level as 0 for low water, 100 for sufficient water
|
|
535
503
|
this.service.updateCharacteristic(this.platform.Characteristic.WaterLevel, waterLow ? 0 : 100);
|
|
536
504
|
this.platform.log.debug(`Water level for ${this.device.deviceName}: ${waterLow ? 'Low (0%)' : 'OK (100%)'}`);
|
|
537
505
|
}
|
|
538
506
|
}
|
|
539
|
-
// Update night light characteristics for devices that support it
|
|
540
507
|
if ((this.isHumid200300S || this.isHumid1000S) && this.lightService) {
|
|
541
508
|
const brightness = extendedDevice.nightLightBrightness ||
|
|
542
509
|
(extendedDevice.details && extendedDevice.details.night_light_brightness) || 0;
|
|
543
|
-
// Update on/off state
|
|
544
510
|
this.lightService.updateCharacteristic(this.platform.Characteristic.On, brightness > 0);
|
|
545
|
-
// Update brightness
|
|
546
511
|
this.lightService.updateCharacteristic(this.platform.Characteristic.Brightness, brightness);
|
|
547
512
|
}
|
|
548
|
-
// Update temperature for Superior6000S
|
|
549
513
|
if (this.isSuperior6000S && this.temperatureService) {
|
|
550
514
|
const temperature = extendedDevice.temperature ||
|
|
551
515
|
(extendedDevice.details && extendedDevice.details.temperature) ||
|
|
552
|
-
20;
|
|
516
|
+
20;
|
|
553
517
|
this.temperatureService.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, temperature);
|
|
554
518
|
}
|
|
555
|
-
// Update filter life for Superior6000S
|
|
556
519
|
if (this.isSuperior6000S && this.filterService) {
|
|
557
520
|
const filterLife = extendedDevice.filterLifePercentage ||
|
|
558
521
|
(extendedDevice.details && extendedDevice.details.filter_life) ||
|
|
559
|
-
100;
|
|
522
|
+
100;
|
|
560
523
|
this.filterService.updateCharacteristic(this.platform.Characteristic.FilterLifeLevel, filterLife);
|
|
561
|
-
this.filterService.updateCharacteristic(this.platform.Characteristic.FilterChangeIndication, filterLife < 10 ? 1 : 0
|
|
562
|
-
);
|
|
524
|
+
this.filterService.updateCharacteristic(this.platform.Characteristic.FilterChangeIndication, filterLife < 10 ? 1 : 0);
|
|
563
525
|
}
|
|
564
526
|
}
|
|
565
527
|
getDeviceCapabilities() {
|
|
@@ -600,7 +562,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
600
562
|
return isActive ? 1 : 0;
|
|
601
563
|
}
|
|
602
564
|
async setActive(value) {
|
|
603
|
-
var _a, _b, _c;
|
|
604
565
|
try {
|
|
605
566
|
const isOn = value === 1;
|
|
606
567
|
this.platform.log.debug(`Setting device ${this.device.deviceName} to ${isOn ? 'on' : 'off'}`);
|
|
@@ -662,57 +623,10 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
662
623
|
success = await this.device.turnOff();
|
|
663
624
|
}
|
|
664
625
|
if (!success) {
|
|
665
|
-
|
|
666
|
-
}
|
|
667
|
-
// Refresh device details to get the latest state
|
|
668
|
-
if (typeof extendedDevice.getDetails === 'function') {
|
|
669
|
-
await extendedDevice.getDetails();
|
|
670
|
-
this.platform.log.debug(`Device ${this.device.deviceName} status after setting: ` +
|
|
671
|
-
`Status: ${this.device.deviceStatus}, ` +
|
|
672
|
-
`Mode: ${extendedDevice.mode}, ` +
|
|
673
|
-
`Speed: ${this.device.speed}, ` +
|
|
674
|
-
`MistLevel: ${extendedDevice.mistLevel}`);
|
|
675
|
-
}
|
|
676
|
-
// Verify the device is actually in the desired state
|
|
677
|
-
const actuallyOn = this.device.deviceStatus === 'on';
|
|
678
|
-
if (actuallyOn !== isOn) {
|
|
679
|
-
this.platform.log.warn(`Device ${this.device.deviceName} did not change to desired state. ` +
|
|
680
|
-
`Wanted: ${isOn ? 'on' : 'off'}, Actual: ${actuallyOn ? 'on' : 'off'}`);
|
|
681
|
-
}
|
|
682
|
-
// Always update HomeKit with the actual device state, not the requested state
|
|
683
|
-
this.service.updateCharacteristic(this.platform.Characteristic.Active, actuallyOn ? 1 : 0);
|
|
684
|
-
// Update current state based on the actual state and mode
|
|
685
|
-
let currentState = 0; // Default to INACTIVE
|
|
686
|
-
if (actuallyOn) {
|
|
687
|
-
if (extendedDevice.mode === 'manual') {
|
|
688
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
689
|
-
}
|
|
690
|
-
else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
|
|
691
|
-
// Get current humidity reading (actual humidity in the room)
|
|
692
|
-
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
693
|
-
extendedDevice.currentHumidity :
|
|
694
|
-
((_a = extendedDevice.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
|
|
695
|
-
0;
|
|
696
|
-
// Get target humidity (humidity setting)
|
|
697
|
-
const targetHumidity = extendedDevice.humidity ||
|
|
698
|
-
((_b = extendedDevice.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
|
|
699
|
-
((_c = extendedDevice.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
|
|
700
|
-
45; // Default to 45% if not available
|
|
701
|
-
// In auto mode, check if we need to be humidifying
|
|
702
|
-
if (currentHumidity < targetHumidity) {
|
|
703
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
704
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
705
|
-
}
|
|
706
|
-
else {
|
|
707
|
-
currentState = 1; // IDLE - will show "Set to X%"
|
|
708
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
709
|
-
}
|
|
710
|
-
}
|
|
626
|
+
throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
|
|
711
627
|
}
|
|
712
|
-
this.
|
|
713
|
-
|
|
714
|
-
await this.updateDeviceSpecificStates(this.device);
|
|
715
|
-
await this.persistDeviceState('deviceStatus', actuallyOn ? 'on' : 'off');
|
|
628
|
+
this.applyDeviceStatesToHomeKit(this.device);
|
|
629
|
+
await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
|
|
716
630
|
}
|
|
717
631
|
catch (error) {
|
|
718
632
|
this.handleDeviceError('set active state', error);
|
|
@@ -738,7 +652,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
738
652
|
}
|
|
739
653
|
}
|
|
740
654
|
async setTargetState(value) {
|
|
741
|
-
var _a, _b, _c;
|
|
742
655
|
try {
|
|
743
656
|
// HomeKit Target State: 0 = HUMIDIFIER_OR_DEHUMIDIFIER (Auto), 1 = HUMIDIFIER, 2 = DEHUMIDIFIER
|
|
744
657
|
this.platform.log.debug(`Setting target state to ${value} for device: ${this.device.deviceName}`);
|
|
@@ -750,11 +663,6 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
750
663
|
if (!turnOnSuccess) {
|
|
751
664
|
throw new Error('Failed to turn on device before changing mode');
|
|
752
665
|
}
|
|
753
|
-
// Refresh device details after turning on
|
|
754
|
-
if (typeof device.getDetails === 'function') {
|
|
755
|
-
await device.getDetails();
|
|
756
|
-
this.platform.log.debug(`Device status after turning on: ${this.device.deviceStatus}`);
|
|
757
|
-
}
|
|
758
666
|
}
|
|
759
667
|
// Map HomeKit target states to device modes
|
|
760
668
|
let mode = 'manual'; // Default to manual mode
|
|
@@ -821,51 +729,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
|
|
|
821
729
|
if (!success) {
|
|
822
730
|
throw new Error(`Failed to set device mode to ${mode}`);
|
|
823
731
|
}
|
|
824
|
-
|
|
825
|
-
if (typeof device.getDetails === 'function') {
|
|
826
|
-
await device.getDetails();
|
|
827
|
-
this.platform.log.debug(`Device ${this.device.deviceName} mode after setting: ${device.mode}`);
|
|
828
|
-
}
|
|
829
|
-
// Verify the device is actually in the desired mode
|
|
830
|
-
const actualMode = device.mode;
|
|
831
|
-
if (actualMode !== mode) {
|
|
832
|
-
this.platform.log.warn(`Device ${this.device.deviceName} did not change to desired mode. ` +
|
|
833
|
-
`Wanted: ${mode}, Actual: ${actualMode}`);
|
|
834
|
-
}
|
|
835
|
-
// Update the target state based on the actual mode
|
|
836
|
-
const targetState = actualMode === 'auto' ? 0 : 1;
|
|
837
|
-
this.updateCharacteristicValue(this.platform.Characteristic.TargetHumidifierDehumidifierState, targetState);
|
|
838
|
-
// Update current state based on the active state and mode
|
|
839
|
-
let currentState = 0; // Default to INACTIVE
|
|
840
|
-
if (this.device.deviceStatus === 'on') {
|
|
841
|
-
if (actualMode === 'manual') {
|
|
842
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
843
|
-
}
|
|
844
|
-
else if (actualMode === 'auto' || actualMode === 'sleep') {
|
|
845
|
-
// Get current humidity reading (actual humidity in the room)
|
|
846
|
-
const currentHumidity = device.currentHumidity !== undefined ?
|
|
847
|
-
device.currentHumidity :
|
|
848
|
-
((_a = device.details) === null || _a === void 0 ? void 0 : _a.current_humidity) ||
|
|
849
|
-
0;
|
|
850
|
-
// Get target humidity (humidity setting)
|
|
851
|
-
const targetHumidity = device.humidity ||
|
|
852
|
-
((_b = device.configuration) === null || _b === void 0 ? void 0 : _b.auto_target_humidity) ||
|
|
853
|
-
((_c = device.details) === null || _c === void 0 ? void 0 : _c.target_humidity) ||
|
|
854
|
-
45; // Default to 45% if not available
|
|
855
|
-
// In auto mode, check if we need to be humidifying
|
|
856
|
-
if (currentHumidity < targetHumidity) {
|
|
857
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
858
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
859
|
-
}
|
|
860
|
-
else {
|
|
861
|
-
currentState = 1; // IDLE - will show "Set to X%"
|
|
862
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
this.updateCharacteristicValue(this.platform.Characteristic.CurrentHumidifierDehumidifierState, currentState);
|
|
867
|
-
// Update device state and characteristics
|
|
868
|
-
await this.updateDeviceSpecificStates(this.device);
|
|
732
|
+
this.applyDeviceStatesToHomeKit(this.device);
|
|
869
733
|
}
|
|
870
734
|
catch (error) {
|
|
871
735
|
this.handleDeviceError('set target state', error);
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-tsvesync",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.8",
|
|
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.4.
|
|
101
|
+
"tsvesync": "1.4.8"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/jest": "^29.5.11",
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { Logger, PlatformAccessory } from 'homebridge';
|
|
2
|
+
import { HumidifierAccessory } from '../../accessories/humidifier.accessory';
|
|
3
|
+
import { TSVESyncPlatform } from '../../platform';
|
|
4
|
+
import { createMockLogger } from '../utils/test-helpers';
|
|
5
|
+
|
|
6
|
+
type CharacteristicStub = {
|
|
7
|
+
onSet: jest.Mock;
|
|
8
|
+
onGet: jest.Mock;
|
|
9
|
+
updateValue: jest.Mock;
|
|
10
|
+
setProps: jest.Mock;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const createCharacteristic = (name: string) => ({ name });
|
|
14
|
+
|
|
15
|
+
const createCharacteristicStub = (): CharacteristicStub => ({
|
|
16
|
+
onSet: jest.fn().mockReturnThis(),
|
|
17
|
+
onGet: jest.fn().mockReturnThis(),
|
|
18
|
+
updateValue: jest.fn().mockReturnThis(),
|
|
19
|
+
setProps: jest.fn().mockReturnThis(),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const createMockService = () => {
|
|
23
|
+
const characteristicStubs = new Map<any, CharacteristicStub>();
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
getCharacteristic: jest.fn((characteristic: any) => {
|
|
27
|
+
if (!characteristicStubs.has(characteristic)) {
|
|
28
|
+
characteristicStubs.set(characteristic, createCharacteristicStub());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return characteristicStubs.get(characteristic);
|
|
32
|
+
}),
|
|
33
|
+
setCharacteristic: jest.fn().mockReturnThis(),
|
|
34
|
+
updateCharacteristic: jest.fn().mockReturnThis(),
|
|
35
|
+
addCharacteristic: jest.fn((characteristic: any) => {
|
|
36
|
+
if (!characteristicStubs.has(characteristic)) {
|
|
37
|
+
characteristicStubs.set(characteristic, createCharacteristicStub());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return characteristicStubs.get(characteristic);
|
|
41
|
+
}),
|
|
42
|
+
removeCharacteristic: jest.fn().mockReturnThis(),
|
|
43
|
+
testCharacteristic: jest.fn().mockReturnValue(true),
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const createMockPlatform = (logger: jest.Mocked<Logger>) => {
|
|
48
|
+
const Characteristic = {
|
|
49
|
+
Active: createCharacteristic('Active'),
|
|
50
|
+
Brightness: createCharacteristic('Brightness'),
|
|
51
|
+
CurrentHumidifierDehumidifierState: createCharacteristic('CurrentHumidifierDehumidifierState'),
|
|
52
|
+
CurrentRelativeHumidity: createCharacteristic('CurrentRelativeHumidity'),
|
|
53
|
+
LockPhysicalControls: createCharacteristic('LockPhysicalControls'),
|
|
54
|
+
Manufacturer: createCharacteristic('Manufacturer'),
|
|
55
|
+
Model: createCharacteristic('Model'),
|
|
56
|
+
Name: createCharacteristic('Name'),
|
|
57
|
+
On: createCharacteristic('On'),
|
|
58
|
+
RelativeHumidityHumidifierThreshold: createCharacteristic('RelativeHumidityHumidifierThreshold'),
|
|
59
|
+
RotationSpeed: createCharacteristic('RotationSpeed'),
|
|
60
|
+
SerialNumber: createCharacteristic('SerialNumber'),
|
|
61
|
+
TargetHumidifierDehumidifierState: createCharacteristic('TargetHumidifierDehumidifierState'),
|
|
62
|
+
WaterLevel: createCharacteristic('WaterLevel'),
|
|
63
|
+
} as const;
|
|
64
|
+
|
|
65
|
+
const Service = {
|
|
66
|
+
AccessoryInformation: 'AccessoryInformation',
|
|
67
|
+
HumidifierDehumidifier: 'HumidifierDehumidifier',
|
|
68
|
+
Lightbulb: 'Lightbulb',
|
|
69
|
+
} as const;
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
log: logger,
|
|
73
|
+
Service,
|
|
74
|
+
Characteristic,
|
|
75
|
+
api: {
|
|
76
|
+
updatePlatformAccessories: jest.fn(),
|
|
77
|
+
},
|
|
78
|
+
config: {
|
|
79
|
+
debug: true,
|
|
80
|
+
retry: {
|
|
81
|
+
maxRetries: 3,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
} as unknown as jest.Mocked<TSVESyncPlatform>;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const createMockAccessory = (platform: jest.Mocked<TSVESyncPlatform>) => {
|
|
88
|
+
const humidifierService = createMockService();
|
|
89
|
+
const lightService = createMockService();
|
|
90
|
+
const accessoryInformationService = {
|
|
91
|
+
setCharacteristic: jest.fn().mockReturnThis(),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const accessory = {
|
|
95
|
+
context: {
|
|
96
|
+
device: {
|
|
97
|
+
details: {},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
displayName: 'Test Humidifier',
|
|
101
|
+
getService: jest.fn((service: any) => {
|
|
102
|
+
if (service === platform.Service.AccessoryInformation) {
|
|
103
|
+
return accessoryInformationService;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (service === platform.Service.HumidifierDehumidifier) {
|
|
107
|
+
return humidifierService;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (service === 'Night Light') {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return null;
|
|
115
|
+
}),
|
|
116
|
+
addService: jest.fn((service: any) => {
|
|
117
|
+
if (service === platform.Service.HumidifierDehumidifier) {
|
|
118
|
+
return humidifierService;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (service === platform.Service.Lightbulb) {
|
|
122
|
+
return lightService;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return humidifierService;
|
|
126
|
+
}),
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
accessory: accessory as unknown as jest.Mocked<PlatformAccessory>,
|
|
131
|
+
accessoryInformationService,
|
|
132
|
+
humidifierService,
|
|
133
|
+
lightService,
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const createMockHumidifier = (options?: {
|
|
138
|
+
deviceStatus?: 'on' | 'off';
|
|
139
|
+
mode?: 'auto' | 'manual';
|
|
140
|
+
staleRefresh?: (state: {
|
|
141
|
+
currentHumidity: number;
|
|
142
|
+
deviceStatus: 'on' | 'off';
|
|
143
|
+
mistLevel: number;
|
|
144
|
+
mode: 'auto' | 'manual';
|
|
145
|
+
targetHumidity: number;
|
|
146
|
+
}) => void;
|
|
147
|
+
}) => {
|
|
148
|
+
const state = {
|
|
149
|
+
currentHumidity: 40,
|
|
150
|
+
deviceStatus: options?.deviceStatus ?? 'off',
|
|
151
|
+
mistLevel: 2,
|
|
152
|
+
mode: options?.mode ?? 'manual',
|
|
153
|
+
targetHumidity: 55,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const syncState = () => {
|
|
157
|
+
mockDevice.currentHumidity = state.currentHumidity;
|
|
158
|
+
mockDevice.deviceStatus = state.deviceStatus;
|
|
159
|
+
mockDevice.details = {
|
|
160
|
+
...mockDevice.details,
|
|
161
|
+
current_humidity: state.currentHumidity,
|
|
162
|
+
mode: state.mode,
|
|
163
|
+
target_humidity: state.targetHumidity,
|
|
164
|
+
water_lacks: false,
|
|
165
|
+
water_tank_lifted: false,
|
|
166
|
+
};
|
|
167
|
+
mockDevice.humidity = state.targetHumidity;
|
|
168
|
+
mockDevice.mistLevel = state.mistLevel;
|
|
169
|
+
mockDevice.mode = state.mode;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const mockDevice = {
|
|
173
|
+
cid: 'cid',
|
|
174
|
+
configModule: 'Humidifier',
|
|
175
|
+
connectionStatus: 'online',
|
|
176
|
+
currentHumidity: state.currentHumidity,
|
|
177
|
+
deviceName: 'Dual 200S',
|
|
178
|
+
deviceRegion: 'US',
|
|
179
|
+
deviceStatus: state.deviceStatus,
|
|
180
|
+
deviceType: 'Dual200S',
|
|
181
|
+
details: {
|
|
182
|
+
current_humidity: state.currentHumidity,
|
|
183
|
+
mode: state.mode,
|
|
184
|
+
target_humidity: state.targetHumidity,
|
|
185
|
+
water_lacks: false,
|
|
186
|
+
water_tank_lifted: false,
|
|
187
|
+
},
|
|
188
|
+
hasFeature: jest.fn().mockReturnValue(false),
|
|
189
|
+
humidity: state.targetHumidity,
|
|
190
|
+
macId: '00:11:22:33:44:55',
|
|
191
|
+
mistLevel: state.mistLevel,
|
|
192
|
+
mode: state.mode,
|
|
193
|
+
speed: 0,
|
|
194
|
+
turnOn: jest.fn().mockImplementation(async () => {
|
|
195
|
+
state.deviceStatus = 'on';
|
|
196
|
+
syncState();
|
|
197
|
+
return true;
|
|
198
|
+
}),
|
|
199
|
+
turnOff: jest.fn().mockImplementation(async () => {
|
|
200
|
+
state.deviceStatus = 'off';
|
|
201
|
+
syncState();
|
|
202
|
+
return true;
|
|
203
|
+
}),
|
|
204
|
+
setAutoMode: jest.fn().mockImplementation(async () => {
|
|
205
|
+
state.deviceStatus = 'on';
|
|
206
|
+
state.mode = 'auto';
|
|
207
|
+
syncState();
|
|
208
|
+
return true;
|
|
209
|
+
}),
|
|
210
|
+
setManualMode: jest.fn().mockImplementation(async () => {
|
|
211
|
+
state.deviceStatus = 'on';
|
|
212
|
+
state.mode = 'manual';
|
|
213
|
+
syncState();
|
|
214
|
+
return true;
|
|
215
|
+
}),
|
|
216
|
+
setMode: jest.fn().mockImplementation(async (mode: 'auto' | 'manual') => {
|
|
217
|
+
state.deviceStatus = 'on';
|
|
218
|
+
state.mode = mode;
|
|
219
|
+
syncState();
|
|
220
|
+
return true;
|
|
221
|
+
}),
|
|
222
|
+
uuid: 'uuid',
|
|
223
|
+
getDetails: jest.fn().mockImplementation(async () => {
|
|
224
|
+
if (options?.staleRefresh) {
|
|
225
|
+
options.staleRefresh(state);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
syncState();
|
|
229
|
+
return true;
|
|
230
|
+
}),
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
syncState();
|
|
234
|
+
|
|
235
|
+
return mockDevice;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
describe('HumidifierAccessory write consistency', () => {
|
|
239
|
+
let logger: jest.Mocked<Logger>;
|
|
240
|
+
let platform: jest.Mocked<TSVESyncPlatform>;
|
|
241
|
+
|
|
242
|
+
beforeEach(() => {
|
|
243
|
+
logger = createMockLogger();
|
|
244
|
+
platform = createMockPlatform(logger);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it('keeps HomeKit on when the first Dual200S refresh is stale after turning on', async () => {
|
|
248
|
+
const { accessory, humidifierService } = createMockAccessory(platform);
|
|
249
|
+
const device = createMockHumidifier({
|
|
250
|
+
deviceStatus: 'off',
|
|
251
|
+
mode: 'manual',
|
|
252
|
+
staleRefresh: (state) => {
|
|
253
|
+
state.deviceStatus = 'off';
|
|
254
|
+
state.mode = 'manual';
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
const humidifier = new HumidifierAccessory(platform, accessory, device as any);
|
|
259
|
+
humidifierService.updateCharacteristic.mockClear();
|
|
260
|
+
logger.warn.mockClear();
|
|
261
|
+
|
|
262
|
+
await (humidifier as any).setActive(1);
|
|
263
|
+
|
|
264
|
+
expect(device.turnOn).toHaveBeenCalledTimes(1);
|
|
265
|
+
expect(humidifierService.updateCharacteristic.mock.calls).toContainEqual([
|
|
266
|
+
platform.Characteristic.Active,
|
|
267
|
+
1,
|
|
268
|
+
]);
|
|
269
|
+
expect(humidifierService.updateCharacteristic.mock.calls).toContainEqual([
|
|
270
|
+
platform.Characteristic.CurrentHumidifierDehumidifierState,
|
|
271
|
+
2,
|
|
272
|
+
]);
|
|
273
|
+
expect(humidifierService.updateCharacteristic.mock.calls).not.toContainEqual([
|
|
274
|
+
platform.Characteristic.Active,
|
|
275
|
+
0,
|
|
276
|
+
]);
|
|
277
|
+
expect(logger.warn).not.toHaveBeenCalledWith(
|
|
278
|
+
expect.stringContaining('did not change to desired state'),
|
|
279
|
+
);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('keeps HomeKit in auto mode when the first Dual200S refresh is stale after setting mode', async () => {
|
|
283
|
+
const { accessory, humidifierService } = createMockAccessory(platform);
|
|
284
|
+
const device = createMockHumidifier({
|
|
285
|
+
deviceStatus: 'on',
|
|
286
|
+
mode: 'manual',
|
|
287
|
+
staleRefresh: (state) => {
|
|
288
|
+
state.deviceStatus = 'on';
|
|
289
|
+
state.mode = 'manual';
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
const humidifier = new HumidifierAccessory(platform, accessory, device as any);
|
|
294
|
+
humidifierService.updateCharacteristic.mockClear();
|
|
295
|
+
logger.warn.mockClear();
|
|
296
|
+
|
|
297
|
+
await (humidifier as any).setTargetState(0);
|
|
298
|
+
|
|
299
|
+
expect(device.setAutoMode).toHaveBeenCalledTimes(1);
|
|
300
|
+
expect(humidifierService.updateCharacteristic.mock.calls).toContainEqual([
|
|
301
|
+
platform.Characteristic.TargetHumidifierDehumidifierState,
|
|
302
|
+
0,
|
|
303
|
+
]);
|
|
304
|
+
expect(humidifierService.updateCharacteristic.mock.calls).toContainEqual([
|
|
305
|
+
platform.Characteristic.CurrentHumidifierDehumidifierState,
|
|
306
|
+
2,
|
|
307
|
+
]);
|
|
308
|
+
expect(humidifierService.updateCharacteristic.mock.calls).not.toContainEqual([
|
|
309
|
+
platform.Characteristic.TargetHumidifierDehumidifierState,
|
|
310
|
+
1,
|
|
311
|
+
]);
|
|
312
|
+
expect(logger.warn).not.toHaveBeenCalledWith(
|
|
313
|
+
expect.stringContaining('did not change to desired mode'),
|
|
314
|
+
);
|
|
315
|
+
});
|
|
316
|
+
});
|
|
@@ -604,84 +604,62 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
604
604
|
this.platform.log.warn(`Failed to refresh device details: ${error}`);
|
|
605
605
|
}
|
|
606
606
|
|
|
607
|
-
|
|
608
|
-
|
|
607
|
+
this.applyDeviceStatesToHomeKit(details);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
private applyDeviceStatesToHomeKit(details: any): void {
|
|
611
|
+
const extendedDevice = this.device as ExtendedVeSyncHumidifier;
|
|
609
612
|
const isActive = this.device.deviceStatus === 'on';
|
|
610
613
|
this.platform.log.debug(`Device ${this.device.deviceName} active state: ${isActive}, Status: ${this.device.deviceStatus}`);
|
|
611
|
-
|
|
612
|
-
// Update active state - this is critical for HomeKit to show the correct state
|
|
614
|
+
|
|
613
615
|
this.service.updateCharacteristic(
|
|
614
616
|
this.platform.Characteristic.Active,
|
|
615
617
|
isActive ? 1 : 0
|
|
616
618
|
);
|
|
617
619
|
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
// Mapping:
|
|
621
|
-
// - If not active -> INACTIVE (0)
|
|
622
|
-
// - If active and mode is 'manual' -> HUMIDIFYING (2)
|
|
623
|
-
// - If active and mode is 'auto' or 'sleep' -> Check if we need to be humidifying
|
|
624
|
-
let currentState = 0; // Default to INACTIVE
|
|
625
|
-
|
|
620
|
+
let currentState = 0;
|
|
621
|
+
|
|
626
622
|
if (isActive) {
|
|
627
623
|
if (extendedDevice.mode === 'manual') {
|
|
628
|
-
currentState = 2;
|
|
624
|
+
currentState = 2;
|
|
629
625
|
} else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
45; // Default to 45% if not available
|
|
641
|
-
|
|
642
|
-
// In auto mode, check if we need to be humidifying
|
|
626
|
+
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
627
|
+
extendedDevice.currentHumidity :
|
|
628
|
+
extendedDevice.details?.current_humidity ||
|
|
629
|
+
0;
|
|
630
|
+
|
|
631
|
+
const targetHumidity = extendedDevice.humidity ||
|
|
632
|
+
extendedDevice.configuration?.auto_target_humidity ||
|
|
633
|
+
extendedDevice.details?.target_humidity ||
|
|
634
|
+
45;
|
|
635
|
+
|
|
643
636
|
if (currentHumidity < targetHumidity) {
|
|
644
|
-
currentState = 2;
|
|
637
|
+
currentState = 2;
|
|
645
638
|
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
646
639
|
} else {
|
|
647
|
-
currentState = 1;
|
|
640
|
+
currentState = 1;
|
|
648
641
|
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
649
642
|
}
|
|
650
643
|
}
|
|
651
644
|
}
|
|
652
|
-
|
|
645
|
+
|
|
653
646
|
this.service.updateCharacteristic(
|
|
654
647
|
this.platform.Characteristic.CurrentHumidifierDehumidifierState,
|
|
655
648
|
currentState
|
|
656
649
|
);
|
|
657
650
|
|
|
658
|
-
// Update target state based on device mode
|
|
659
|
-
// HomeKit Target State: 0 = HUMIDIFIER_OR_DEHUMIDIFIER (Auto), 1 = HUMIDIFIER, 2 = DEHUMIDIFIER
|
|
660
|
-
// Mapping:
|
|
661
|
-
// - 'auto' -> HUMIDIFIER_OR_DEHUMIDIFIER (0)
|
|
662
|
-
// - 'manual' -> HUMIDIFIER (1)
|
|
663
|
-
// - 'sleep' -> HUMIDIFIER (1) (no direct mapping, default to HUMIDIFIER)
|
|
664
|
-
let targetState = 1; // Default to HUMIDIFIER
|
|
665
|
-
|
|
666
|
-
if (extendedDevice.mode === 'auto') {
|
|
667
|
-
targetState = 0; // HUMIDIFIER_OR_DEHUMIDIFIER
|
|
668
|
-
}
|
|
669
|
-
|
|
670
651
|
this.service.updateCharacteristic(
|
|
671
652
|
this.platform.Characteristic.TargetHumidifierDehumidifierState,
|
|
672
|
-
|
|
653
|
+
extendedDevice.mode === 'auto' ? 0 : 1
|
|
673
654
|
);
|
|
674
655
|
|
|
675
|
-
// Update rotation speed - convert device speed (1-9) to HomeKit percentage (0-100)
|
|
676
656
|
let rotationSpeed = 0;
|
|
677
|
-
|
|
678
|
-
// For Humid200300S devices, use mistLevel if available
|
|
657
|
+
|
|
679
658
|
if (isActive) {
|
|
680
659
|
if (this.isHumid200300S && extendedDevice.mistLevel !== undefined) {
|
|
681
660
|
const mistLevel = extendedDevice.mistLevel;
|
|
682
661
|
this.platform.log.debug(`Device ${this.device.deviceName} mist level: ${mistLevel}`);
|
|
683
|
-
|
|
684
|
-
// Convert mist level (1-9) to HomeKit percentage (0-100)
|
|
662
|
+
|
|
685
663
|
switch (mistLevel) {
|
|
686
664
|
case 1: rotationSpeed = 11; break;
|
|
687
665
|
case 2: rotationSpeed = 22; break;
|
|
@@ -694,7 +672,6 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
694
672
|
case 9: rotationSpeed = 100; break;
|
|
695
673
|
}
|
|
696
674
|
} else if (this.device.speed !== undefined) {
|
|
697
|
-
// Use speed for other humidifier types
|
|
698
675
|
this.platform.log.debug(`Device ${this.device.deviceName} speed: ${this.device.speed}`);
|
|
699
676
|
switch (this.device.speed) {
|
|
700
677
|
case 1: rotationSpeed = 11; break;
|
|
@@ -709,38 +686,31 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
709
686
|
}
|
|
710
687
|
}
|
|
711
688
|
}
|
|
712
|
-
|
|
689
|
+
|
|
713
690
|
this.platform.log.debug(`Setting rotation speed to ${rotationSpeed}% for device: ${this.device.deviceName}`);
|
|
714
691
|
this.service.updateCharacteristic(
|
|
715
692
|
this.platform.Characteristic.RotationSpeed,
|
|
716
693
|
rotationSpeed
|
|
717
694
|
);
|
|
718
695
|
|
|
719
|
-
// Update relative humidity if supported
|
|
720
696
|
if (this.capabilities && this.capabilities.hasHumidity) {
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
// Update current humidity characteristic if we have a valid reading
|
|
697
|
+
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
698
|
+
extendedDevice.currentHumidity :
|
|
699
|
+
extendedDevice.details?.current_humidity ||
|
|
700
|
+
0;
|
|
701
|
+
|
|
729
702
|
if (currentHumidity > 0) {
|
|
730
703
|
this.service.updateCharacteristic(
|
|
731
704
|
this.platform.Characteristic.CurrentRelativeHumidity,
|
|
732
705
|
currentHumidity
|
|
733
706
|
);
|
|
734
707
|
}
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
45; // Default to 45% if not available
|
|
742
|
-
|
|
743
|
-
|
|
708
|
+
|
|
709
|
+
const targetHumidity = extendedDevice.humidity ||
|
|
710
|
+
extendedDevice.configuration?.auto_target_humidity ||
|
|
711
|
+
extendedDevice.details?.target_humidity ||
|
|
712
|
+
45;
|
|
713
|
+
|
|
744
714
|
if (this.service.testCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold)) {
|
|
745
715
|
this.service.updateCharacteristic(
|
|
746
716
|
this.platform.Characteristic.RelativeHumidityHumidifierThreshold,
|
|
@@ -749,21 +719,16 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
749
719
|
}
|
|
750
720
|
}
|
|
751
721
|
|
|
752
|
-
// Update water level if supported (inferred from water_lacks/water_tank_lifted)
|
|
753
722
|
if (this.capabilities && this.capabilities.hasWaterLevel) {
|
|
754
|
-
|
|
755
|
-
const waterLacks = details?.water_lacks ||
|
|
723
|
+
const waterLacks = details?.water_lacks ||
|
|
756
724
|
(extendedDevice.details && extendedDevice.details.water_lacks);
|
|
757
|
-
|
|
758
|
-
const waterTankLifted = details?.water_tank_lifted ||
|
|
725
|
+
|
|
726
|
+
const waterTankLifted = details?.water_tank_lifted ||
|
|
759
727
|
(extendedDevice.details && extendedDevice.details.water_tank_lifted);
|
|
760
|
-
|
|
728
|
+
|
|
761
729
|
const waterLow = waterLacks || waterTankLifted;
|
|
762
|
-
|
|
763
|
-
// Note: VeSync devices only support a boolean water_lacks property, not a percentage water level
|
|
764
|
-
// We map this to 0% or 100% for HomeKit's WaterLevel characteristic
|
|
730
|
+
|
|
765
731
|
if (this.service.getCharacteristic(this.platform.Characteristic.WaterLevel)) {
|
|
766
|
-
// Map water level as 0 for low water, 100 for sufficient water
|
|
767
732
|
this.service.updateCharacteristic(
|
|
768
733
|
this.platform.Characteristic.WaterLevel,
|
|
769
734
|
waterLow ? 0 : 100
|
|
@@ -771,51 +736,46 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
771
736
|
this.platform.log.debug(`Water level for ${this.device.deviceName}: ${waterLow ? 'Low (0%)' : 'OK (100%)'}`);
|
|
772
737
|
}
|
|
773
738
|
}
|
|
774
|
-
|
|
775
|
-
// Update night light characteristics for devices that support it
|
|
739
|
+
|
|
776
740
|
if ((this.isHumid200300S || this.isHumid1000S) && this.lightService) {
|
|
777
|
-
const brightness = extendedDevice.nightLightBrightness ||
|
|
741
|
+
const brightness = extendedDevice.nightLightBrightness ||
|
|
778
742
|
(extendedDevice.details && extendedDevice.details.night_light_brightness) || 0;
|
|
779
|
-
|
|
780
|
-
// Update on/off state
|
|
743
|
+
|
|
781
744
|
this.lightService.updateCharacteristic(
|
|
782
745
|
this.platform.Characteristic.On,
|
|
783
746
|
brightness > 0
|
|
784
747
|
);
|
|
785
|
-
|
|
786
|
-
// Update brightness
|
|
748
|
+
|
|
787
749
|
this.lightService.updateCharacteristic(
|
|
788
750
|
this.platform.Characteristic.Brightness,
|
|
789
751
|
brightness
|
|
790
752
|
);
|
|
791
753
|
}
|
|
792
|
-
|
|
793
|
-
// Update temperature for Superior6000S
|
|
754
|
+
|
|
794
755
|
if (this.isSuperior6000S && this.temperatureService) {
|
|
795
|
-
const temperature = extendedDevice.temperature ||
|
|
796
|
-
(extendedDevice.details && extendedDevice.details.temperature) ||
|
|
797
|
-
20;
|
|
798
|
-
|
|
756
|
+
const temperature = extendedDevice.temperature ||
|
|
757
|
+
(extendedDevice.details && extendedDevice.details.temperature) ||
|
|
758
|
+
20;
|
|
759
|
+
|
|
799
760
|
this.temperatureService.updateCharacteristic(
|
|
800
761
|
this.platform.Characteristic.CurrentTemperature,
|
|
801
762
|
temperature
|
|
802
763
|
);
|
|
803
764
|
}
|
|
804
|
-
|
|
805
|
-
// Update filter life for Superior6000S
|
|
765
|
+
|
|
806
766
|
if (this.isSuperior6000S && this.filterService) {
|
|
807
|
-
const filterLife = extendedDevice.filterLifePercentage ||
|
|
808
|
-
(extendedDevice.details && extendedDevice.details.filter_life) ||
|
|
809
|
-
100;
|
|
810
|
-
|
|
767
|
+
const filterLife = extendedDevice.filterLifePercentage ||
|
|
768
|
+
(extendedDevice.details && extendedDevice.details.filter_life) ||
|
|
769
|
+
100;
|
|
770
|
+
|
|
811
771
|
this.filterService.updateCharacteristic(
|
|
812
772
|
this.platform.Characteristic.FilterLifeLevel,
|
|
813
773
|
filterLife
|
|
814
774
|
);
|
|
815
|
-
|
|
775
|
+
|
|
816
776
|
this.filterService.updateCharacteristic(
|
|
817
777
|
this.platform.Characteristic.FilterChangeIndication,
|
|
818
|
-
filterLife < 10 ? 1 : 0
|
|
778
|
+
filterLife < 10 ? 1 : 0
|
|
819
779
|
);
|
|
820
780
|
}
|
|
821
781
|
}
|
|
@@ -940,74 +900,11 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
940
900
|
}
|
|
941
901
|
|
|
942
902
|
if (!success) {
|
|
943
|
-
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
// Refresh device details to get the latest state
|
|
947
|
-
if (typeof extendedDevice.getDetails === 'function') {
|
|
948
|
-
await extendedDevice.getDetails();
|
|
949
|
-
this.platform.log.debug(
|
|
950
|
-
`Device ${this.device.deviceName} status after setting: ` +
|
|
951
|
-
`Status: ${this.device.deviceStatus}, ` +
|
|
952
|
-
`Mode: ${extendedDevice.mode}, ` +
|
|
953
|
-
`Speed: ${this.device.speed}, ` +
|
|
954
|
-
`MistLevel: ${extendedDevice.mistLevel}`
|
|
955
|
-
);
|
|
956
|
-
}
|
|
957
|
-
|
|
958
|
-
// Verify the device is actually in the desired state
|
|
959
|
-
const actuallyOn = this.device.deviceStatus === 'on';
|
|
960
|
-
if (actuallyOn !== isOn) {
|
|
961
|
-
this.platform.log.warn(
|
|
962
|
-
`Device ${this.device.deviceName} did not change to desired state. ` +
|
|
963
|
-
`Wanted: ${isOn ? 'on' : 'off'}, Actual: ${actuallyOn ? 'on' : 'off'}`
|
|
964
|
-
);
|
|
903
|
+
throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
|
|
965
904
|
}
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
this.
|
|
969
|
-
this.platform.Characteristic.Active,
|
|
970
|
-
actuallyOn ? 1 : 0
|
|
971
|
-
);
|
|
972
|
-
|
|
973
|
-
// Update current state based on the actual state and mode
|
|
974
|
-
let currentState = 0; // Default to INACTIVE
|
|
975
|
-
|
|
976
|
-
if (actuallyOn) {
|
|
977
|
-
if (extendedDevice.mode === 'manual') {
|
|
978
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
979
|
-
} else if (extendedDevice.mode === 'auto' || extendedDevice.mode === 'sleep') {
|
|
980
|
-
// Get current humidity reading (actual humidity in the room)
|
|
981
|
-
const currentHumidity = extendedDevice.currentHumidity !== undefined ?
|
|
982
|
-
extendedDevice.currentHumidity :
|
|
983
|
-
extendedDevice.details?.current_humidity ||
|
|
984
|
-
0;
|
|
985
|
-
|
|
986
|
-
// Get target humidity (humidity setting)
|
|
987
|
-
const targetHumidity = extendedDevice.humidity ||
|
|
988
|
-
extendedDevice.configuration?.auto_target_humidity ||
|
|
989
|
-
extendedDevice.details?.target_humidity ||
|
|
990
|
-
45; // Default to 45% if not available
|
|
991
|
-
|
|
992
|
-
// In auto mode, check if we need to be humidifying
|
|
993
|
-
if (currentHumidity < targetHumidity) {
|
|
994
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
995
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
996
|
-
} else {
|
|
997
|
-
currentState = 1; // IDLE - will show "Set to X%"
|
|
998
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
this.service.updateCharacteristic(
|
|
1004
|
-
this.platform.Characteristic.CurrentHumidifierDehumidifierState,
|
|
1005
|
-
currentState
|
|
1006
|
-
);
|
|
1007
|
-
|
|
1008
|
-
// Update device state and characteristics
|
|
1009
|
-
await this.updateDeviceSpecificStates(this.device);
|
|
1010
|
-
await this.persistDeviceState('deviceStatus', actuallyOn ? 'on' : 'off');
|
|
905
|
+
|
|
906
|
+
this.applyDeviceStatesToHomeKit(this.device);
|
|
907
|
+
await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
|
|
1011
908
|
} catch (error) {
|
|
1012
909
|
this.handleDeviceError('set active state', error);
|
|
1013
910
|
}
|
|
@@ -1048,12 +945,6 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
1048
945
|
if (!turnOnSuccess) {
|
|
1049
946
|
throw new Error('Failed to turn on device before changing mode');
|
|
1050
947
|
}
|
|
1051
|
-
|
|
1052
|
-
// Refresh device details after turning on
|
|
1053
|
-
if (typeof device.getDetails === 'function') {
|
|
1054
|
-
await device.getDetails();
|
|
1055
|
-
this.platform.log.debug(`Device status after turning on: ${this.device.deviceStatus}`);
|
|
1056
|
-
}
|
|
1057
948
|
}
|
|
1058
949
|
|
|
1059
950
|
// Map HomeKit target states to device modes
|
|
@@ -1125,66 +1016,8 @@ export class HumidifierAccessory extends BaseAccessory {
|
|
|
1125
1016
|
if (!success) {
|
|
1126
1017
|
throw new Error(`Failed to set device mode to ${mode}`);
|
|
1127
1018
|
}
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
if (typeof device.getDetails === 'function') {
|
|
1131
|
-
await device.getDetails();
|
|
1132
|
-
this.platform.log.debug(`Device ${this.device.deviceName} mode after setting: ${device.mode}`);
|
|
1133
|
-
}
|
|
1134
|
-
|
|
1135
|
-
// Verify the device is actually in the desired mode
|
|
1136
|
-
const actualMode = device.mode;
|
|
1137
|
-
if (actualMode !== mode) {
|
|
1138
|
-
this.platform.log.warn(
|
|
1139
|
-
`Device ${this.device.deviceName} did not change to desired mode. ` +
|
|
1140
|
-
`Wanted: ${mode}, Actual: ${actualMode}`
|
|
1141
|
-
);
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
// Update the target state based on the actual mode
|
|
1145
|
-
const targetState = actualMode === 'auto' ? 0 : 1;
|
|
1146
|
-
this.updateCharacteristicValue(
|
|
1147
|
-
this.platform.Characteristic.TargetHumidifierDehumidifierState,
|
|
1148
|
-
targetState
|
|
1149
|
-
);
|
|
1150
|
-
|
|
1151
|
-
// Update current state based on the active state and mode
|
|
1152
|
-
let currentState = 0; // Default to INACTIVE
|
|
1153
|
-
|
|
1154
|
-
if (this.device.deviceStatus === 'on') {
|
|
1155
|
-
if (actualMode === 'manual') {
|
|
1156
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
1157
|
-
} else if (actualMode === 'auto' || actualMode === 'sleep') {
|
|
1158
|
-
// Get current humidity reading (actual humidity in the room)
|
|
1159
|
-
const currentHumidity = device.currentHumidity !== undefined ?
|
|
1160
|
-
device.currentHumidity :
|
|
1161
|
-
device.details?.current_humidity ||
|
|
1162
|
-
0;
|
|
1163
|
-
|
|
1164
|
-
// Get target humidity (humidity setting)
|
|
1165
|
-
const targetHumidity = device.humidity ||
|
|
1166
|
-
device.configuration?.auto_target_humidity ||
|
|
1167
|
-
device.details?.target_humidity ||
|
|
1168
|
-
45; // Default to 45% if not available
|
|
1169
|
-
|
|
1170
|
-
// In auto mode, check if we need to be humidifying
|
|
1171
|
-
if (currentHumidity < targetHumidity) {
|
|
1172
|
-
currentState = 2; // HUMIDIFYING - will show "Rising to X%"
|
|
1173
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% is below target ${targetHumidity}%, setting state to HUMIDIFYING`);
|
|
1174
|
-
} else {
|
|
1175
|
-
currentState = 1; // IDLE - will show "Set to X%"
|
|
1176
|
-
this.platform.log.debug(`Auto mode: Current humidity ${currentHumidity}% has reached target ${targetHumidity}%, setting state to IDLE`);
|
|
1177
|
-
}
|
|
1178
|
-
}
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
this.updateCharacteristicValue(
|
|
1182
|
-
this.platform.Characteristic.CurrentHumidifierDehumidifierState,
|
|
1183
|
-
currentState
|
|
1184
|
-
);
|
|
1185
|
-
|
|
1186
|
-
// Update device state and characteristics
|
|
1187
|
-
await this.updateDeviceSpecificStates(this.device);
|
|
1019
|
+
|
|
1020
|
+
this.applyDeviceStatesToHomeKit(this.device);
|
|
1188
1021
|
} catch (error) {
|
|
1189
1022
|
this.handleDeviceError('set target state', error);
|
|
1190
1023
|
}
|