homebridge-tsvesync 1.3.12 → 1.4.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"base.accessory.js","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.accessory.js","sourceRoot":"","sources":["../../src/accessories/base.accessory.ts"],"names":[],"mappings":"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"}
@@ -62,10 +62,16 @@ export interface VeSyncDeviceWithHumidity extends VeSyncDeviceWithPower {
62
62
  }
63
63
  export interface VeSyncDeviceWithAirQuality extends VeSyncDeviceWithPower {
64
64
  airQuality: number;
65
+ airQualityLevel?: number;
66
+ airQualityLabel?: string;
65
67
  pm25?: number;
66
68
  filterLife: number;
67
69
  mode: string;
68
70
  setMode(mode: string): Promise<boolean>;
71
+ getNormalizedAirQuality?(): {
72
+ level: number;
73
+ label: string;
74
+ };
69
75
  }
70
76
  export interface VeSyncDeviceWithControls extends VeSyncDeviceWithPower {
71
77
  childLock?: 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.3.12",
3
+ "version": "1.4.0",
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.3.12"
101
+ "tsvesync": "1.4.0"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@types/jest": "^29.5.11",
@@ -195,7 +195,7 @@ describe('AirPurifierAccessory Integration Tests', () => {
195
195
  const filterChange = await (airPurifier as any).getFilterChangeIndication();
196
196
  const filterLife = await (airPurifier as any).getFilterLifeLevel();
197
197
 
198
- expect(airQuality).toBe(5); // POOR
198
+ expect(airQuality).toBe(4); // INFERIOR
199
199
  expect(pm25Density).toBe(180);
200
200
  expect(filterChange).toBe(1); // CHANGE_FILTER
201
201
  expect(filterLife).toBe(5);
@@ -463,4 +463,4 @@ describe('AirPurifierAccessory Integration Tests', () => {
463
463
  expect(duration).toBeLessThan(1000); // Less than 1 second
464
464
  });
465
465
  });
466
- });
466
+ });
@@ -9,8 +9,7 @@ describe('Air Quality Methods', () => {
9
9
  if (pm25 <= 12) return 1; // EXCELLENT
10
10
  if (pm25 <= 35) return 2; // GOOD
11
11
  if (pm25 <= 55) return 3; // FAIR
12
- if (pm25 <= 150) return 4; // INFERIOR
13
- return 5; // POOR
12
+ return 4; // INFERIOR (VeSync exposes four levels)
14
13
  };
15
14
 
16
15
  it('should convert PM2.5 values to correct HomeKit air quality levels', () => {
@@ -23,8 +22,8 @@ describe('Air Quality Methods', () => {
23
22
  { pm25: 55, expected: 3, quality: 'FAIR' },
24
23
  { pm25: 56, expected: 4, quality: 'INFERIOR' },
25
24
  { pm25: 150, expected: 4, quality: 'INFERIOR' },
26
- { pm25: 151, expected: 5, quality: 'POOR' },
27
- { pm25: 300, expected: 5, quality: 'POOR' },
25
+ { pm25: 151, expected: 4, quality: 'INFERIOR' },
26
+ { pm25: 300, expected: 4, quality: 'INFERIOR' },
28
27
  ];
29
28
 
30
29
  testCases.forEach(({ pm25, expected, quality }) => {
@@ -36,7 +35,7 @@ describe('Air Quality Methods', () => {
36
35
  it('should handle edge cases', () => {
37
36
  expect(convertPM25ToHomeKit(12.5)).toBe(2); // Just above EXCELLENT boundary
38
37
  expect(convertPM25ToHomeKit(35.5)).toBe(3); // Just above GOOD boundary
39
- expect(convertPM25ToHomeKit(999)).toBe(5); // Extreme value
38
+ expect(convertPM25ToHomeKit(999)).toBe(4); // Extreme value capped at INFERIOR
40
39
  });
41
40
 
42
41
  it('should handle zero and negative values', () => {
@@ -236,10 +235,9 @@ describe('Air Quality Methods', () => {
236
235
  };
237
236
 
238
237
  return {
239
- homeKitAirQuality: extracted.pm25 <= 12 ? 1 :
240
- extracted.pm25 <= 35 ? 2 :
241
- extracted.pm25 <= 55 ? 3 :
242
- extracted.pm25 <= 150 ? 4 : 5,
238
+ homeKitAirQuality: extracted.pm25 <= 12 ? 1 :
239
+ extracted.pm25 <= 35 ? 2 :
240
+ extracted.pm25 <= 55 ? 3 : 4,
243
241
  pm25Density: Math.min(1000, Math.max(0, Math.round(extracted.pm25))),
244
242
  pm10Density: Math.min(1000, Math.max(0, Math.round(extracted.pm10))),
245
243
  filterChangeNeeded: extracted.filterLife < 10,
@@ -274,7 +272,7 @@ describe('Air Quality Methods', () => {
274
272
 
275
273
  const result = processDeviceData(deviceData);
276
274
 
277
- expect(result.homeKitAirQuality).toBe(5); // POOR
275
+ expect(result.homeKitAirQuality).toBe(4); // INFERIOR
278
276
  expect(result.pm25Density).toBe(180);
279
277
  expect(result.pm10Density).toBe(220);
280
278
  expect(result.filterChangeNeeded).toBe(true);
@@ -305,10 +303,10 @@ describe('Air Quality Methods', () => {
305
303
 
306
304
  const result = processDeviceData(deviceData);
307
305
 
308
- expect(result.homeKitAirQuality).toBe(5); // POOR
306
+ expect(result.homeKitAirQuality).toBe(4); // INFERIOR
309
307
  expect(result.pm25Density).toBe(999);
310
308
  expect(result.pm10Density).toBe(1000); // Clamped
311
309
  expect(result.filterLifeLevel).toBe(100); // Clamped
312
310
  });
313
311
  });
314
- });
312
+ });
@@ -0,0 +1,231 @@
1
+ import { API, Logger } from 'homebridge';
2
+ import { TSVESyncPlatform } from '../../platform';
3
+ import { VeSync } from 'tsvesync';
4
+ import { AirQualitySensorAccessory } from '../../accessories/air-quality-sensor.accessory';
5
+ import { createMockLogger, createMockVeSync } from '../utils/test-helpers';
6
+
7
+ interface MockAirQualityDevice {
8
+ deviceName: string;
9
+ deviceType: string;
10
+ cid: string;
11
+ uuid: string;
12
+ deviceStatus: string;
13
+ airQualityValue: number;
14
+ details: Record<string, any>;
15
+ getDetails: jest.Mock;
16
+ getNormalizedAirQuality?: jest.Mock;
17
+ airQualityLevel?: number;
18
+ airQualityLabel?: string;
19
+ }
20
+
21
+ describe('AirQualitySensorAccessory', () => {
22
+ let mockAPI: jest.Mocked<API>;
23
+ let platform: TSVESyncPlatform;
24
+ let logger: jest.Mocked<Logger>;
25
+ let api: jest.Mocked<VeSync>;
26
+
27
+ const AirQualityEnum = {
28
+ UNKNOWN: 0,
29
+ EXCELLENT: 1,
30
+ GOOD: 2,
31
+ FAIR: 3,
32
+ INFERIOR: 4,
33
+ POOR: 5,
34
+ } as const;
35
+
36
+ const ServiceEnum = {
37
+ AirQualitySensor: 'AirQualitySensor',
38
+ AccessoryInformation: 'AccessoryInformation',
39
+ } as const;
40
+
41
+ const createDevice = (overrides: Partial<MockAirQualityDevice> = {}): MockAirQualityDevice => ({
42
+ deviceName: overrides.deviceName || 'Dining Room AQ',
43
+ deviceType: overrides.deviceType || 'Core300S',
44
+ cid: overrides.cid || 'cid-123',
45
+ uuid: overrides.uuid || 'uuid-123',
46
+ deviceStatus: overrides.deviceStatus || 'on',
47
+ airQualityValue: overrides.airQualityValue ?? 18,
48
+ details: overrides.details || {
49
+ air_quality_value: overrides.airQualityValue ?? 18,
50
+ air_quality_level: overrides.airQualityLevel,
51
+ air_quality: overrides.airQualityLabel ?? 'good',
52
+ pm10: 22,
53
+ },
54
+ getDetails: overrides.getDetails || jest.fn().mockResolvedValue(true),
55
+ getNormalizedAirQuality: overrides.getNormalizedAirQuality,
56
+ airQualityLevel: overrides.airQualityLevel,
57
+ airQualityLabel: overrides.airQualityLabel,
58
+ });
59
+
60
+ const buildAccessory = (device: MockAirQualityDevice) => {
61
+ const airQualityService = {
62
+ getCharacteristic: jest.fn().mockImplementation((characteristic) => {
63
+ if (characteristic === AirQualityEnum) {
64
+ return {
65
+ setProps: jest.fn().mockReturnThis(),
66
+ onGet: jest.fn().mockReturnThis(),
67
+ updateValue: jest.fn().mockReturnThis(),
68
+ };
69
+ }
70
+ return {
71
+ onGet: jest.fn().mockReturnThis(),
72
+ updateValue: jest.fn().mockReturnThis(),
73
+ setProps: jest.fn().mockReturnThis(),
74
+ };
75
+ }),
76
+ setCharacteristic: jest.fn().mockReturnThis(),
77
+ updateCharacteristic: jest.fn().mockReturnThis(),
78
+ } as any;
79
+
80
+ const infoService = {
81
+ setCharacteristic: jest.fn().mockReturnThis(),
82
+ } as any;
83
+
84
+ const accessory = {
85
+ getService: jest.fn((service) => {
86
+ if (service === ServiceEnum.AccessoryInformation) return infoService;
87
+ if (service === ServiceEnum.AirQualitySensor) return null;
88
+ return null;
89
+ }),
90
+ addService: jest.fn((service) => {
91
+ if (service === ServiceEnum.AirQualitySensor) {
92
+ return airQualityService;
93
+ }
94
+ return airQualityService;
95
+ }),
96
+ } as any;
97
+
98
+ const accessoryInstance = new AirQualitySensorAccessory(platform, accessory, device as any);
99
+
100
+ return {
101
+ accessoryInstance,
102
+ airQualityService,
103
+ infoService,
104
+ accessory,
105
+ };
106
+ };
107
+
108
+ beforeEach(() => {
109
+ logger = createMockLogger();
110
+ api = createMockVeSync();
111
+
112
+ mockAPI = {
113
+ hap: {
114
+ Characteristic: {
115
+ AirQuality: AirQualityEnum,
116
+ PM2_5Density: 'PM2_5Density',
117
+ PM10Density: 'PM10Density',
118
+ Manufacturer: 'Manufacturer',
119
+ Model: 'Model',
120
+ SerialNumber: 'SerialNumber',
121
+ Name: 'Name',
122
+ },
123
+ Service: ServiceEnum,
124
+ uuid: {
125
+ generate: jest.fn(),
126
+ },
127
+ },
128
+ platformAccessory: jest.fn(),
129
+ } as unknown as jest.Mocked<API>;
130
+
131
+ platform = new TSVESyncPlatform(logger, { debug: false, retry: { maxRetries: 3 } } as any, mockAPI);
132
+ (platform as any).api = api;
133
+ });
134
+
135
+ it('configures AirQuality characteristic to expose VeSync levels', () => {
136
+ const device = createDevice({
137
+ getNormalizedAirQuality: jest.fn().mockReturnValue({ level: 2, label: 'good' }),
138
+ airQualityLevel: 2,
139
+ airQualityLabel: 'good',
140
+ });
141
+
142
+ const { airQualityService } = buildAccessory(device);
143
+
144
+ expect(airQualityService.getCharacteristic).toHaveBeenCalledWith(AirQualityEnum);
145
+ const setter = airQualityService.getCharacteristic.mock.results[0].value.setProps;
146
+ expect(setter).toHaveBeenCalledWith({
147
+ validValues: [
148
+ AirQualityEnum.UNKNOWN,
149
+ AirQualityEnum.EXCELLENT,
150
+ AirQualityEnum.GOOD,
151
+ AirQualityEnum.FAIR,
152
+ AirQualityEnum.INFERIOR,
153
+ ],
154
+ });
155
+ });
156
+
157
+ it('returns normalized air quality levels when provided by the device', async () => {
158
+ const device = createDevice({
159
+ getNormalizedAirQuality: jest.fn().mockReturnValue({ level: 3, label: 'moderate' }),
160
+ airQualityValue: 42,
161
+ });
162
+
163
+ const { accessoryInstance } = buildAccessory(device);
164
+
165
+ const value = await (accessoryInstance as any).getAirQuality();
166
+ expect(value).toBe(AirQualityEnum.FAIR);
167
+ expect(device.getNormalizedAirQuality).toHaveBeenCalled();
168
+ });
169
+
170
+ it('falls back to direct level properties when normalized metadata is unavailable', async () => {
171
+ const device = createDevice({
172
+ getNormalizedAirQuality: undefined,
173
+ airQualityLevel: 4,
174
+ details: {
175
+ air_quality_level: 4,
176
+ air_quality_value: 80,
177
+ },
178
+ airQualityValue: 80,
179
+ });
180
+
181
+ const { accessoryInstance } = buildAccessory(device);
182
+
183
+ const value = await (accessoryInstance as any).getAirQuality();
184
+ expect(value).toBe(AirQualityEnum.INFERIOR);
185
+ });
186
+
187
+ it('falls back to PM2.5 heuristic when no level information is available', async () => {
188
+ const device = createDevice({
189
+ getNormalizedAirQuality: undefined,
190
+ airQualityLevel: undefined,
191
+ details: {
192
+ air_quality_value: 120,
193
+ },
194
+ airQualityValue: 120,
195
+ });
196
+
197
+ const { accessoryInstance } = buildAccessory(device);
198
+
199
+ const value = await (accessoryInstance as any).getAirQuality();
200
+ expect(value).toBe(AirQualityEnum.INFERIOR);
201
+ });
202
+
203
+ it('clamps PM2.5 density to HomeKit-supported range', async () => {
204
+ const device = createDevice({
205
+ airQualityValue: 1450,
206
+ details: {
207
+ air_quality_value: 1450,
208
+ },
209
+ });
210
+
211
+ const { accessoryInstance } = buildAccessory(device);
212
+
213
+ const density = await (accessoryInstance as any).getPM25Density();
214
+ expect(density).toBe(1000);
215
+ });
216
+
217
+ it('updates characteristics during refresh cycle', async () => {
218
+ const device = createDevice({
219
+ airQualityValue: 24,
220
+ getNormalizedAirQuality: jest.fn().mockReturnValue({ level: 2, label: 'good' }),
221
+ });
222
+
223
+ const { accessoryInstance, airQualityService } = buildAccessory(device);
224
+
225
+ await (accessoryInstance as any).updateCharacteristics();
226
+
227
+ expect(device.getDetails).toHaveBeenCalled();
228
+ expect(airQualityService.updateCharacteristic).toHaveBeenCalledWith(AirQualityEnum, AirQualityEnum.GOOD);
229
+ expect(airQualityService.updateCharacteristic).toHaveBeenCalledWith('PM2_5Density', 24);
230
+ });
231
+ });
@@ -0,0 +1,260 @@
1
+ import { API, Logger } from 'homebridge';
2
+ import { AirPurifierAccessory } from '../../accessories/air-purifier.accessory';
3
+ import { TSVESyncPlatform } from '../../platform';
4
+ import { createMockLogger, createMockVeSync } from '../utils/test-helpers';
5
+
6
+ describe('Everest Air purifier mode handling', () => {
7
+ let platform: TSVESyncPlatform;
8
+ let logger: jest.Mocked<Logger>;
9
+ let api: ReturnType<typeof createMockVeSync>;
10
+ let mockAccessory: any;
11
+ let service: any;
12
+ let airQualityService: any;
13
+ let filterService: any;
14
+ let accessoryInfoService: any;
15
+ let mockDevice: any;
16
+ let accessory: AirPurifierAccessory;
17
+
18
+ beforeEach(() => {
19
+ logger = createMockLogger();
20
+ api = createMockVeSync();
21
+
22
+ const Characteristic = {
23
+ RotationSpeed: 'RotationSpeed',
24
+ TargetAirPurifierState: 'TargetAirPurifierState',
25
+ CurrentAirPurifierState: 'CurrentAirPurifierState',
26
+ Active: 'Active',
27
+ FilterChangeIndication: 'FilterChangeIndication',
28
+ FilterLifeLevel: 'FilterLifeLevel',
29
+ AirQuality: 'AirQuality',
30
+ PM2_5Density: 'PM2_5Density',
31
+ Name: 'Name',
32
+ } as any;
33
+
34
+ const Service = {
35
+ AirPurifier: 'AirPurifier',
36
+ AirQualitySensor: 'AirQualitySensor',
37
+ FilterMaintenance: 'FilterMaintenance',
38
+ AccessoryInformation: 'AccessoryInformation',
39
+ } as any;
40
+
41
+ const mockAPI = {
42
+ hap: {
43
+ Service,
44
+ Characteristic,
45
+ uuid: {
46
+ generate: jest.fn(),
47
+ },
48
+ },
49
+ platformAccessory: jest.fn(),
50
+ } as unknown as jest.Mocked<API>;
51
+
52
+ platform = new TSVESyncPlatform(logger, {} as any, mockAPI);
53
+ (platform as any).api = api;
54
+
55
+ const characteristicStub = {
56
+ onSet: jest.fn().mockReturnThis(),
57
+ onGet: jest.fn().mockReturnThis(),
58
+ updateValue: jest.fn().mockReturnThis(),
59
+ setProps: jest.fn().mockReturnThis(),
60
+ };
61
+
62
+ const createService = () => ({
63
+ getCharacteristic: jest.fn().mockReturnValue(characteristicStub),
64
+ setCharacteristic: jest.fn().mockReturnThis(),
65
+ updateCharacteristic: jest.fn().mockReturnThis(),
66
+ addCharacteristic: jest.fn().mockReturnValue(characteristicStub),
67
+ removeCharacteristic: jest.fn(),
68
+ testCharacteristic: jest.fn().mockReturnValue(false),
69
+ });
70
+
71
+ service = createService();
72
+ airQualityService = createService();
73
+ filterService = createService();
74
+ accessoryInfoService = {
75
+ setCharacteristic: jest.fn().mockReturnThis(),
76
+ };
77
+
78
+ mockAccessory = {
79
+ getService: jest.fn((svc: any) => {
80
+ if (svc === platform.Service.AirPurifier) return service;
81
+ if (svc === platform.Service.AirQualitySensor) return null;
82
+ if (svc === platform.Service.FilterMaintenance) return null;
83
+ if (svc === platform.Service.AccessoryInformation) return accessoryInfoService;
84
+ return null;
85
+ }),
86
+ addService: jest.fn((svc: any) => {
87
+ if (svc === platform.Service.AirPurifier) return service;
88
+ if (svc === platform.Service.AirQualitySensor) return airQualityService;
89
+ if (svc === platform.Service.FilterMaintenance) return filterService;
90
+ return service;
91
+ }),
92
+ removeService: jest.fn(),
93
+ };
94
+
95
+ mockDevice = {
96
+ deviceName: 'Everest Test',
97
+ deviceType: 'LAP-EL551S-AUS',
98
+ cid: 'cid',
99
+ uuid: 'uuid',
100
+ deviceStatus: 'on',
101
+ speed: 2,
102
+ mode: 'manual',
103
+ airQualityValue: 12,
104
+ filterLife: 90,
105
+ details: {
106
+ mode: 'manual',
107
+ speed: 2,
108
+ manualSpeedLevel: 2,
109
+ air_quality_value: 12,
110
+ air_quality: 3,
111
+ filter_life: 90,
112
+ },
113
+ hasFeature: jest.fn((feature: string) => [
114
+ 'sleep_mode',
115
+ 'turbo_mode',
116
+ 'fan_speed',
117
+ 'auto_mode',
118
+ 'air_quality',
119
+ 'filter_life',
120
+ ].includes(feature)),
121
+ getSupportedModes: jest.fn().mockReturnValue(['sleep', 'manual', 'auto', 'turbo']),
122
+ getSupportedAutoPreferences: jest.fn().mockReturnValue(['default', 'efficient', 'quiet']),
123
+ getMaxFanSpeed: jest.fn().mockReturnValue(3),
124
+ getDetails: jest.fn().mockResolvedValue(true),
125
+ turnOn: jest.fn().mockResolvedValue(true),
126
+ turnOff: jest.fn().mockResolvedValue(true),
127
+ changeFanSpeed: jest.fn().mockImplementation(async (value: number) => {
128
+ mockDevice.speed = value;
129
+ mockDevice.mode = 'manual';
130
+ mockDevice.details.speed = value;
131
+ mockDevice.details.manualSpeedLevel = value;
132
+ return true;
133
+ }),
134
+ sleepMode: jest.fn().mockImplementation(async () => {
135
+ mockDevice.mode = 'sleep';
136
+ mockDevice.speed = 0;
137
+ mockDevice.details.mode = 'sleep';
138
+ mockDevice.details.speed = 0;
139
+ return true;
140
+ }),
141
+ turboMode: jest.fn().mockImplementation(async () => {
142
+ mockDevice.mode = 'turbo';
143
+ mockDevice.speed = 3;
144
+ mockDevice.details.mode = 'turbo';
145
+ mockDevice.details.speed = 3;
146
+ return true;
147
+ }),
148
+ manualMode: jest.fn().mockImplementation(async () => {
149
+ mockDevice.mode = 'manual';
150
+ mockDevice.details.mode = 'manual';
151
+ return true;
152
+ }),
153
+ autoMode: jest.fn().mockResolvedValue(true),
154
+ setMode: jest.fn().mockImplementation(async (mode: string) => {
155
+ mockDevice.mode = mode;
156
+ mockDevice.details.mode = mode;
157
+ return true;
158
+ }),
159
+ getNormalizedAirQuality: jest.fn().mockReturnValue({ level: 2, label: 'good' }),
160
+ };
161
+
162
+ accessory = new AirPurifierAccessory(platform, mockAccessory, mockDevice);
163
+ service.updateCharacteristic.mockClear();
164
+ mockDevice.sleepMode.mockClear();
165
+ mockDevice.turboMode.mockClear();
166
+ mockDevice.changeFanSpeed.mockClear();
167
+ });
168
+
169
+ it('maps first notch to sleep mode for Everest', async () => {
170
+ await (accessory as any).setRotationSpeed(20);
171
+ expect(mockDevice.sleepMode).toHaveBeenCalledTimes(1);
172
+ expect(service.updateCharacteristic).toHaveBeenCalledWith(
173
+ platform.Characteristic.RotationSpeed,
174
+ 20,
175
+ );
176
+ });
177
+
178
+ it('maps highest notch to turbo mode when supported', async () => {
179
+ await (accessory as any).setRotationSpeed(100);
180
+ expect(mockDevice.turboMode).toHaveBeenCalledTimes(1);
181
+ expect(service.updateCharacteristic.mock.calls).toContainEqual([
182
+ platform.Characteristic.RotationSpeed,
183
+ 100,
184
+ ]);
185
+ });
186
+
187
+ it('maps manual notches to discrete fan speeds', async () => {
188
+ await (accessory as any).setRotationSpeed(80); // Manual level 3
189
+ expect(mockDevice.changeFanSpeed).toHaveBeenCalledWith(3);
190
+
191
+ service.updateCharacteristic.mockClear();
192
+ mockDevice.changeFanSpeed.mockClear();
193
+
194
+ await (accessory as any).setRotationSpeed(60); // Manual level 2
195
+ expect(mockDevice.changeFanSpeed).toHaveBeenCalledWith(2);
196
+ });
197
+
198
+ it('reports turbo rotation speed as 100%', async () => {
199
+ mockDevice.mode = 'turbo';
200
+ mockDevice.speed = 3;
201
+ const rotation = await (accessory as any).getRotationSpeed();
202
+ expect(rotation).toBe(100);
203
+ });
204
+
205
+ it('keeps rotation speed at 100% after turbo state updates', async () => {
206
+ mockDevice.mode = 'turbo';
207
+ mockDevice.speed = 0;
208
+ mockDevice.details.mode = 'turbo';
209
+ mockDevice.details.speed = 0;
210
+ await (accessory as any).updateDeviceSpecificStates({
211
+ mode: 'turbo',
212
+ speed: 0,
213
+ enabled: true,
214
+ deviceStatus: 'on',
215
+ });
216
+ expect(service.updateCharacteristic).toHaveBeenCalledWith(
217
+ platform.Characteristic.RotationSpeed,
218
+ 100,
219
+ );
220
+ });
221
+
222
+ it('treats auto sentinel speed as 0% and sets target to auto', async () => {
223
+ service.updateCharacteristic.mockClear();
224
+ mockDevice.mode = 'auto';
225
+ mockDevice.speed = 0;
226
+ mockDevice.details.mode = 'auto';
227
+ mockDevice.details.speed = 0;
228
+
229
+ await (accessory as any).updateDeviceSpecificStates({
230
+ mode: 'auto',
231
+ speed: 0,
232
+ enabled: true,
233
+ deviceStatus: 'on',
234
+ });
235
+
236
+ expect(service.updateCharacteristic.mock.calls).toContainEqual([
237
+ platform.Characteristic.TargetAirPurifierState,
238
+ 1,
239
+ ]);
240
+ expect(service.updateCharacteristic.mock.calls).toContainEqual([
241
+ platform.Characteristic.RotationSpeed,
242
+ 0,
243
+ ]);
244
+ });
245
+
246
+ it('logs an error when turbo mode fails and leaves rotation speed unchanged', async () => {
247
+ service.updateCharacteristic.mockClear();
248
+ logger.error.mockClear();
249
+ mockDevice.turboMode.mockResolvedValue(false);
250
+
251
+ await (accessory as any).setRotationSpeed(100);
252
+
253
+ expect(mockDevice.turboMode).toHaveBeenCalledTimes(1);
254
+ expect(service.updateCharacteristic.mock.calls).not.toContainEqual([
255
+ platform.Characteristic.RotationSpeed,
256
+ 100,
257
+ ]);
258
+ expect(logger.error).toHaveBeenCalled();
259
+ });
260
+ });