homebridge-tsvesync 1.0.55 → 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.
- package/dist/accessories/humidifier.accessory.d.ts +12 -0
- package/dist/accessories/humidifier.accessory.d.ts.map +1 -1
- package/dist/accessories/humidifier.accessory.js +130 -87
- package/dist/accessories/humidifier.accessory.js.map +1 -1
- package/dist/types/device.types.d.ts +32 -1
- package/dist/types/device.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/accessories/humidifier.accessory.ts +190 -70
- package/src/types/device.types.ts +33 -1
|
@@ -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;
|
|
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
|
|
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 =
|
|
45
|
+
const isActive = this.device.deviceStatus === 'on';
|
|
29
46
|
this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
|
|
30
|
-
// Update current state
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
55
|
-
|
|
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
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
142
|
-
|
|
146
|
+
catch (error) {
|
|
147
|
+
this.handleDeviceError('set target humidity', error);
|
|
143
148
|
}
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
148
|
-
|
|
181
|
+
catch (error) {
|
|
182
|
+
this.handleDeviceError('set mist level', error);
|
|
149
183
|
}
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
154
|
-
|
|
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":";;;AACA,qDAAiD;AAIjD,MAAa,mBAAoB,SAAQ,8BAAa;
|
|
1
|
+
{"version":3,"file":"humidifier.accessory.js","sourceRoot":"","sources":["../../src/accessories/humidifier.accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,38 @@ export interface VeSyncDeviceWithControls extends VeSyncDeviceWithPower {
|
|
|
61
61
|
}
|
|
62
62
|
export interface VeSyncAirPurifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithAirQuality, VeSyncDeviceWithControls {
|
|
63
63
|
}
|
|
64
|
-
export interface VeSyncHumidifier extends
|
|
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>;
|
|
65
96
|
}
|
|
66
97
|
export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
|
|
67
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.
|
|
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.
|
|
101
|
+
"tsvesync": "1.0.59"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/jest": "^29.5.11",
|
|
@@ -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
|
|
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
|
|
51
|
-
deviceStatus: string;
|
|
52
|
-
speed: number;
|
|
53
|
-
};
|
|
96
|
+
const humidifierDetails = this.device.details;
|
|
54
97
|
|
|
55
98
|
// Update active state
|
|
56
|
-
const isActive =
|
|
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
|
|
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
|
-
|
|
121
|
+
currentState
|
|
66
122
|
);
|
|
67
123
|
|
|
68
|
-
// Update target state (
|
|
124
|
+
// Update target state (always humidifier mode)
|
|
69
125
|
this.updateCharacteristicValue(
|
|
70
126
|
this.platform.Characteristic.TargetHumidifierDehumidifierState,
|
|
71
|
-
1 //
|
|
127
|
+
1 // 1 = HUMIDIFIER
|
|
72
128
|
);
|
|
73
129
|
|
|
74
|
-
// Update
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
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
|
-
|
|
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
|
}
|
|
@@ -73,7 +73,39 @@ export interface VeSyncDeviceWithControls extends VeSyncDeviceWithPower {
|
|
|
73
73
|
// Combined device types for specific device categories
|
|
74
74
|
export interface VeSyncAirPurifier extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithAirQuality, VeSyncDeviceWithControls {}
|
|
75
75
|
|
|
76
|
-
export interface VeSyncHumidifier extends
|
|
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
|
+
}
|
|
77
109
|
|
|
78
110
|
export interface VeSyncFan extends VeSyncDeviceWithPower, VeSyncDeviceWithSpeed, VeSyncDeviceWithRotation {
|
|
79
111
|
oscillationState: boolean;
|