homebridge-tsvesync 1.6.0 → 1.7.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.
Files changed (53) hide show
  1. package/.github/workflows/ci.yml +24 -1
  2. package/CHANGELOG.md +24 -0
  3. package/README.md +9 -1
  4. package/dist/accessories/air-purifier.accessory.js +1 -1
  5. package/dist/accessories/air-purifier.accessory.js.map +1 -1
  6. package/dist/accessories/air-quality-sensor.accessory.js +1 -1
  7. package/dist/accessories/air-quality-sensor.accessory.js.map +1 -1
  8. package/dist/accessories/base.accessory.d.ts +5 -0
  9. package/dist/accessories/base.accessory.d.ts.map +1 -1
  10. package/dist/accessories/base.accessory.js +8 -0
  11. package/dist/accessories/base.accessory.js.map +1 -1
  12. package/dist/accessories/fan.accessory.d.ts +20 -20
  13. package/dist/accessories/fan.accessory.d.ts.map +1 -1
  14. package/dist/accessories/fan.accessory.js +191 -241
  15. package/dist/accessories/fan.accessory.js.map +1 -1
  16. package/dist/accessories/humidifier.accessory.js +3 -3
  17. package/dist/accessories/humidifier.accessory.js.map +1 -1
  18. package/dist/accessories/light.accessory.js +1 -1
  19. package/dist/accessories/light.accessory.js.map +1 -1
  20. package/dist/accessories/outlet.accessory.js +1 -1
  21. package/dist/accessories/outlet.accessory.js.map +1 -1
  22. package/dist/accessories/switch.accessory.js +1 -1
  23. package/dist/accessories/switch.accessory.js.map +1 -1
  24. package/dist/platform.d.ts +8 -0
  25. package/dist/platform.d.ts.map +1 -1
  26. package/dist/platform.js +22 -2
  27. package/dist/platform.js.map +1 -1
  28. package/dist/types/device.types.d.ts +14 -2
  29. package/dist/types/device.types.d.ts.map +1 -1
  30. package/dist/utils/api-proxy.d.ts.map +1 -1
  31. package/dist/utils/api-proxy.js +13 -1
  32. package/dist/utils/api-proxy.js.map +1 -1
  33. package/dist/utils/sanitize-name.d.ts +21 -0
  34. package/dist/utils/sanitize-name.d.ts.map +1 -0
  35. package/dist/utils/sanitize-name.js +37 -0
  36. package/dist/utils/sanitize-name.js.map +1 -0
  37. package/package.json +4 -3
  38. package/scripts/tower-fan-smoke.cjs +81 -0
  39. package/src/__tests__/accessory-name-sanitize.test.ts +279 -0
  40. package/src/__tests__/devices/fan.test.ts +280 -175
  41. package/src/__tests__/utils/sanitize-name.test.ts +56 -0
  42. package/src/accessories/air-purifier.accessory.ts +1 -1
  43. package/src/accessories/air-quality-sensor.accessory.ts +1 -1
  44. package/src/accessories/base.accessory.ts +9 -0
  45. package/src/accessories/fan.accessory.ts +184 -314
  46. package/src/accessories/humidifier.accessory.ts +3 -3
  47. package/src/accessories/light.accessory.ts +1 -1
  48. package/src/accessories/outlet.accessory.ts +1 -1
  49. package/src/accessories/switch.accessory.ts +1 -1
  50. package/src/platform.ts +24 -2
  51. package/src/types/device.types.ts +14 -2
  52. package/src/utils/api-proxy.ts +13 -2
  53. package/src/utils/sanitize-name.ts +35 -0
@@ -2,273 +2,223 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FanAccessory = void 0;
4
4
  const base_accessory_1 = require("./base.accessory");
5
- // Constants for fan direction
6
- const CLOCKWISE = 1;
7
- const COUNTER_CLOCKWISE = 0;
8
- // Constants for fan modes
9
- const MODE_NORMAL = 0;
10
- const MODE_AUTO = 1;
11
- const MODE_SLEEP = 2;
12
- const MODE_TURBO = 3;
13
- // Fan speed levels for different device types
14
- const FAN_SPEED_LEVELS = {
15
- 'LTF-F422S-KEU': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
16
- 'LTF-F422S-WUSR': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
17
- 'LTF-F422_WJP': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
18
- 'LTF-F422S-WUS': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
19
- 'Core200S': [1, 2, 3],
20
- 'Core300S': [1, 2, 3, 4],
21
- 'Core400S': [1, 2, 3, 4],
22
- 'Core600S': [1, 2, 3, 4],
23
- 'LAP-C201S-AUSR': [1, 2, 3],
24
- 'LAP-C202S-WUSR': [1, 2, 3],
25
- 'LAP-C301S-WJP': [1, 2, 3, 4],
26
- 'LAP-C302S-WUSB': [1, 2, 3, 4],
27
- 'LAP-C301S-WAAA': [1, 2, 3, 4],
28
- 'LAP-C401S-WJP': [1, 2, 3, 4],
29
- 'LAP-C401S-WUSR': [1, 2, 3, 4],
30
- 'LAP-C401S-WAAA': [1, 2, 3, 4],
31
- 'LAP-C601S-WUS': [1, 2, 3, 4],
32
- 'LAP-C601S-WUSR': [1, 2, 3, 4],
33
- 'LAP-C601S-WEU': [1, 2, 3, 4],
34
- 'LV-PUR131S': [1, 2, 3],
35
- 'LV-RH131S': [1, 2, 3]
36
- };
5
+ const MODES = [
6
+ // Reuse the old Fan Mode service identity so existing automations survive.
7
+ { mode: 'turbo', name: 'Turbo Mode', subtype: 'fan-mode' },
8
+ { mode: 'auto', name: 'Auto Mode', subtype: 'auto-mode' },
9
+ { mode: 'sleep', name: 'Sleep Mode', subtype: 'sleep-mode' },
10
+ ];
37
11
  class FanAccessory extends base_accessory_1.BaseAccessory {
38
12
  constructor(platform, accessory, device) {
39
13
  super(platform, accessory, device);
14
+ this.writeChain = Promise.resolve();
15
+ this.pendingWrite = null;
16
+ this.pendingPromise = null;
40
17
  this.device = device;
41
- this.capabilities = this.getDeviceCapabilities();
42
- this.speedLevels = FAN_SPEED_LEVELS[this.device.deviceType] || [1, 2, 3, 4];
43
18
  }
44
- setupService() {
45
- // Get or create the fan service
46
- this.service = this.accessory.getService(this.platform.Service.Fanv2) ||
47
- this.accessory.addService(this.platform.Service.Fanv2);
48
- // Set up required characteristics
49
- this.setupCharacteristic(this.platform.Characteristic.Active, this.getActive.bind(this), this.setActive.bind(this));
50
- // Set up speed control
51
- this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed.bind(this), this.handleSetRotationSpeed.bind(this));
52
- // Set up mode control
53
- this.setupCharacteristic(this.platform.Characteristic.SwingMode, this.getSwingMode.bind(this), this.setSwingMode.bind(this));
54
- // Set up rotation direction
55
- this.setupCharacteristic(this.platform.Characteristic.RotationDirection, this.getRotationDirection.bind(this), this.setRotationDirection.bind(this));
56
- // Set up child lock for devices that support it. LTF tower fans do not -
57
- // their API neither reports nor accepts child lock, so the profile no
58
- // longer advertises the feature.
59
- this.setupChildLock();
60
- // Add mode control service
61
- const modeService = this.accessory.getService('Fan Mode') ||
62
- this.accessory.addService(this.platform.Service.Switch, 'Fan Mode', 'fan-mode');
63
- // Set up mode characteristics
64
- modeService.getCharacteristic(this.platform.Characteristic.On)
65
- .onGet(() => this.getMode())
66
- .onSet((value) => this.setMode(value));
67
- // Add Name characteristic
68
- this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
69
- }
70
- /**
71
- * Update device states based on the latest details
72
- */
73
- async updateDeviceSpecificStates(details) {
74
- const fanDetails = details;
75
- // Update active state
76
- const isActive = fanDetails.deviceStatus === 'on';
77
- this.updateCharacteristicValue(this.platform.Characteristic.Active, isActive ? 1 : 0);
78
- // Update current state (INACTIVE = 0, IDLE = 1, BLOWING_AIR = 2)
79
- this.updateCharacteristicValue(this.platform.Characteristic.CurrentFanState, isActive ? 2 : 0);
80
- // Update rotation speed
81
- let rotationSpeed = 0;
82
- if (isActive && fanDetails.speed !== undefined) {
83
- const speedIndex = this.speedLevels.indexOf(fanDetails.speed);
84
- if (speedIndex !== -1) {
85
- const maxLevel = this.speedLevels.length;
86
- const levelSize = 100 / maxLevel;
87
- rotationSpeed = Math.round((speedIndex + 1) * levelSize);
88
- }
89
- }
90
- this.updateCharacteristicValue(this.platform.Characteristic.RotationSpeed, rotationSpeed);
91
- // Update oscillation status
92
- if ('oscillationState' in fanDetails) {
93
- this.updateCharacteristicValue(this.platform.Characteristic.SwingMode, fanDetails.oscillationState ? 1 : 0);
94
- }
95
- // Update mode
96
- const modeService = this.accessory.getService('Fan Mode');
97
- if (modeService && fanDetails.mode) {
98
- modeService.setCharacteristic(this.platform.Characteristic.On, this.getModeValue(fanDetails.mode));
99
- }
19
+ get maxSpeed() {
20
+ var _a, _b, _c;
21
+ return (_c = (_b = (_a = this.device).getMaxFanSpeed) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : (this.device.deviceType.startsWith('LTF-F422') ? 12 : 4);
100
22
  }
101
- getDeviceCapabilities() {
102
- return {
103
- hasBrightness: false,
104
- hasColorTemp: false,
105
- hasColor: false,
106
- hasSpeed: true,
107
- hasHumidity: false,
108
- hasAirQuality: false,
109
- hasWaterLevel: false,
110
- hasChildLock: true,
111
- hasSwingMode: true,
112
- };
23
+ get currentMode() {
24
+ return this.device.mode === 'advancedSleep' ? 'sleep' : this.device.mode || 'normal';
113
25
  }
114
- async getActive() {
115
- return this.device.deviceStatus === 'on' ? 1 : 0;
26
+ get oscillationEnabled() {
27
+ var _a;
28
+ return (_a = this.device.oscillationEnabled) !== null && _a !== void 0 ? _a : this.device.oscillationState;
116
29
  }
117
- async setActive(value) {
118
- try {
119
- const isOn = value === 1;
120
- const success = isOn ? await this.device.turnOn() : await this.device.turnOff();
121
- if (!success) {
122
- throw new Error(`Failed to turn ${isOn ? 'on' : 'off'} device`);
123
- }
124
- // Update device state and characteristics
125
- await this.updateDeviceSpecificStates(this.device);
126
- await this.persistDeviceState('deviceStatus', isOn ? 'on' : 'off');
127
- }
128
- catch (error) {
129
- this.handleDeviceError('set active state', error);
130
- }
30
+ supports(feature) {
31
+ var _a, _b, _c;
32
+ return (_c = (_b = (_a = this.device).hasFeature) === null || _b === void 0 ? void 0 : _b.call(_a, feature)) !== null && _c !== void 0 ? _c : this.device.deviceType.startsWith('LTF-F422');
131
33
  }
132
- async handleSetRotationSpeed(value) {
133
- const percentage = value;
134
- if (percentage === 0) {
135
- // Turn off the device instead of setting speed to 0
136
- await this.device.turnOff();
137
- return;
138
- }
139
- // Convert HomeKit percentage to device speed level
140
- const maxLevel = this.speedLevels.length;
141
- const levelSize = 100 / maxLevel;
142
- const levelIndex = Math.min(Math.floor(percentage / levelSize), maxLevel - 1);
143
- const speed = this.speedLevels[levelIndex];
144
- await this.device.changeFanSpeed(speed);
34
+ supportsMode(mode) {
35
+ var _a, _b, _c;
36
+ return (_c = (_b = (_a = this.device).getSupportedModes) === null || _b === void 0 ? void 0 : _b.call(_a).includes(mode)) !== null && _c !== void 0 ? _c : true;
145
37
  }
146
- async getRotationSpeed() {
147
- if (this.device.speed === undefined || this.device.speed === null) {
148
- return 0;
149
- }
150
- // Convert device speed to HomeKit percentage
151
- const currentSpeed = this.device.speed;
152
- const speedIndex = this.speedLevels.indexOf(currentSpeed);
153
- if (speedIndex === -1) {
154
- return 0;
155
- }
156
- const maxLevel = this.speedLevels.length;
157
- const levelSize = 100 / maxLevel;
158
- return Math.round((speedIndex + 1) * levelSize);
38
+ findSwitch(name, subtype) {
39
+ return this.accessory.getServiceById(this.platform.Service.Switch, subtype) ||
40
+ this.accessory.getService(name) ||
41
+ (subtype === 'fan-mode' ? this.accessory.getService('Fan Mode') : undefined);
159
42
  }
160
- async getRotationDirection() {
161
- return 'oscillation' in this.device && this.device.oscillation
162
- ? CLOCKWISE
163
- : COUNTER_CLOCKWISE;
43
+ setupSwitch(name, subtype, get, set) {
44
+ const service = this.findSwitch(name, subtype) || this.accessory.addService(this.platform.Service.Switch, name, subtype);
45
+ service.displayName = name;
46
+ service.setCharacteristic(this.platform.Characteristic.Name, name);
47
+ this.setupCharacteristic(this.platform.Characteristic.On, get, set, undefined, service);
48
+ return service;
164
49
  }
165
- async setRotationDirection(value) {
166
- try {
167
- if (!('setOscillation' in this.device)) {
168
- throw new Error('Device does not support oscillation');
169
- }
170
- // Map CLOCKWISE to oscillation ON, COUNTER_CLOCKWISE to oscillation OFF
171
- const shouldOscillate = value === CLOCKWISE;
172
- const success = await this.device.setOscillation(shouldOscillate);
173
- if (!success) {
174
- throw new Error(`Failed to ${shouldOscillate ? 'enable' : 'disable'} oscillation`);
50
+ setupService() {
51
+ this.service = this.accessory.getService(this.platform.Service.Fanv2) || this.accessory.addService(this.platform.Service.Fanv2);
52
+ this.setupCharacteristic(this.platform.Characteristic.Active, async () => this.device.deviceStatus === 'on' ? 1 : 0, value => this.queueWrite('active', Number(value)));
53
+ this.setupCharacteristic(this.platform.Characteristic.RotationSpeed, async () => this.rotationSpeed, value => this.queueWrite('speed', Number(value)), { minValue: 0, maxValue: 100, minStep: 1 });
54
+ this.setupCharacteristic(this.platform.Characteristic.SwingMode, async () => Number(this.oscillationEnabled), value => this.setOscillation(Number(value) === 1));
55
+ // Legacy clients used direction to toggle oscillation. Keep both controls in sync.
56
+ this.setupCharacteristic(this.platform.Characteristic.RotationDirection, async () => this.oscillationEnabled ? this.platform.Characteristic.RotationDirection.CLOCKWISE : this.platform.Characteristic.RotationDirection.COUNTER_CLOCKWISE, value => this.setOscillation(value === this.platform.Characteristic.RotationDirection.CLOCKWISE));
57
+ this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.sanitizedDeviceName);
58
+ this.setupChildLock();
59
+ for (const { mode, name, subtype } of MODES) {
60
+ if (!this.supportsMode(mode))
61
+ continue;
62
+ this.setupSwitch(name, subtype, async () => this.device.deviceStatus === 'on' && this.currentMode === mode, value => this.queueWrite('modes', { [mode]: Boolean(value) }));
63
+ }
64
+ if (this.supports('display') && this.device.setDisplay) {
65
+ // Old cached Lightbulb/brightness controls cannot represent a binary display.
66
+ for (const service of [...this.accessory.services]) {
67
+ if (service.UUID === this.platform.Service.Lightbulb.UUID &&
68
+ (service.subtype === 'display' || /^(display|night light)$/i.test(service.displayName))) {
69
+ this.accessory.removeService(service);
70
+ }
175
71
  }
72
+ this.setupSwitch('Display', 'display', async () => Boolean(this.device.displayEnabled), value => this.enqueue(async () => {
73
+ this.requireSuccess(await this.device.setDisplay(Boolean(value)), 'set display');
74
+ }));
75
+ }
76
+ if (this.supports('timer') && this.device.setTimer && this.device.clearTimer) {
77
+ const timer = this.setupSwitch('Timer', 'timer', async () => { var _a; return ((_a = this.device.timerRemaining) !== null && _a !== void 0 ? _a : 0) > 0; }, value => this.enqueue(async () => {
78
+ this.requireSuccess(value ? await this.device.setTimer(this.timerDuration / 3600) : await this.device.clearTimer(), 'set timer');
79
+ }));
80
+ timer.addOptionalCharacteristic(this.platform.Characteristic.SetDuration);
81
+ timer.addOptionalCharacteristic(this.platform.Characteristic.RemainingDuration);
82
+ timer.getCharacteristic(this.platform.Characteristic.SetDuration).updateValue(this.timerDuration);
83
+ // Home shows the on/off switch; controllers such as Eve can also set the duration.
84
+ this.setupCharacteristic(this.platform.Characteristic.SetDuration, async () => this.timerDuration, value => this.enqueue(async () => {
85
+ var _a;
86
+ const seconds = Number(value);
87
+ if (!Number.isInteger(seconds) || seconds < 60 || seconds > 43200)
88
+ throw new Error('Timer duration must be 60–43200 seconds');
89
+ if (((_a = this.device.timerRemaining) !== null && _a !== void 0 ? _a : 0) > 0)
90
+ this.requireSuccess(await this.device.setTimer(seconds / 3600), 'set timer duration');
91
+ this.accessory.context.fanTimerDuration = seconds;
92
+ }), { minValue: 60, maxValue: 43200, minStep: 1 }, timer);
93
+ this.setupCharacteristic(this.platform.Characteristic.RemainingDuration, async () => { var _a; return (_a = this.device.timerRemaining) !== null && _a !== void 0 ? _a : 0; }, undefined, { minValue: 0, maxValue: 43200, minStep: 1 }, timer);
94
+ }
95
+ if (this.supports('temperature') && 'temperatureCelsius' in this.device) {
96
+ const temperature = this.accessory.getService(this.platform.Service.TemperatureSensor) ||
97
+ this.accessory.addService(this.platform.Service.TemperatureSensor, 'Temperature', 'temperature');
98
+ this.setupCharacteristic(this.platform.Characteristic.CurrentTemperature, async () => {
99
+ const value = this.currentTemperature;
100
+ if (value === undefined)
101
+ throw new Error('Temperature is not available');
102
+ return value;
103
+ }, undefined, { minValue: -50, maxValue: 100, minStep: 0.1 }, temperature);
104
+ }
105
+ }
106
+ get timerDuration() {
107
+ const value = this.accessory.context.fanTimerDuration;
108
+ return Number.isInteger(value) && value >= 60 && value <= 43200 ? value : 3600;
109
+ }
110
+ get currentTemperature() {
111
+ const value = this.device.temperatureCelsius;
112
+ return value !== undefined && Number.isFinite(value) && value >= -50 && value <= 100 ? value : undefined;
113
+ }
114
+ get rotationSpeed() {
115
+ var _a;
116
+ return this.device.deviceStatus === 'on' ? Math.round(Math.max(0, Math.min(this.maxSpeed, (_a = this.device.speed) !== null && _a !== void 0 ? _a : 0)) / this.maxSpeed * 100) : 0;
117
+ }
118
+ async updateDeviceSpecificStates(_details) {
119
+ var _a, _b, _c, _d, _e;
120
+ const c = this.platform.Characteristic;
121
+ this.updateCharacteristicValue(c.Active, this.device.deviceStatus === 'on' ? 1 : 0);
122
+ this.updateCharacteristicValue(c.CurrentFanState, this.device.deviceStatus === 'on' ? 2 : 0);
123
+ this.updateCharacteristicValue(c.RotationSpeed, this.rotationSpeed);
124
+ this.updateCharacteristicValue(c.SwingMode, Number(this.oscillationEnabled));
125
+ this.updateCharacteristicValue(c.RotationDirection, this.oscillationEnabled ? c.RotationDirection.CLOCKWISE : c.RotationDirection.COUNTER_CLOCKWISE);
126
+ if (this.supportsChildLock())
127
+ this.updateCharacteristicValue(c.LockPhysicalControls, this.device.childLock ? 1 : 0);
128
+ for (const { mode, name, subtype } of MODES) {
129
+ (_a = this.findSwitch(name, subtype)) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(c.On, this.device.deviceStatus === 'on' && this.currentMode === mode);
130
+ }
131
+ (_b = this.findSwitch('Display', 'display')) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(c.On, Boolean(this.device.displayEnabled));
132
+ const timer = this.findSwitch('Timer', 'timer');
133
+ timer === null || timer === void 0 ? void 0 : timer.updateCharacteristic(c.On, ((_c = this.device.timerRemaining) !== null && _c !== void 0 ? _c : 0) > 0);
134
+ timer === null || timer === void 0 ? void 0 : timer.updateCharacteristic(c.RemainingDuration, (_d = this.device.timerRemaining) !== null && _d !== void 0 ? _d : 0);
135
+ const temperature = this.currentTemperature;
136
+ if (temperature !== undefined) {
137
+ (_e = this.accessory.getService(this.platform.Service.TemperatureSensor)) === null || _e === void 0 ? void 0 : _e.updateCharacteristic(c.CurrentTemperature, temperature);
176
138
  }
177
- catch (error) {
178
- this.handleDeviceError('set rotation direction', error);
179
- throw error;
180
- }
181
- }
182
- async getSwingMode() {
183
- return this.device.oscillationState ? 1 : 0;
184
139
  }
185
- async setSwingMode(value) {
186
- try {
187
- if (!this.device.setOscillation) {
188
- throw new Error('Device does not support oscillation');
140
+ getDeviceCapabilities() {
141
+ return { hasBrightness: false, hasColorTemp: false, hasColor: false, hasSpeed: true, hasHumidity: false,
142
+ hasAirQuality: false, hasWaterLevel: false, hasChildLock: this.supportsChildLock(), hasSwingMode: true };
143
+ }
144
+ requireSuccess(success, action) {
145
+ if (!success)
146
+ throw new Error(`Failed to ${action}`);
147
+ }
148
+ enqueue(action) {
149
+ const write = this.writeChain.catch(() => undefined).then(async () => {
150
+ try {
151
+ await action();
152
+ await this.updateDeviceSpecificStates(this.device);
153
+ this.cacheDeviceDetails(this.device);
154
+ await this.persistDeviceState('mode', this.currentMode);
189
155
  }
190
- const enabled = value === 1;
191
- const success = await this.device.setOscillation(enabled);
192
- if (!success) {
193
- throw new Error(`Failed to ${enabled ? 'enable' : 'disable'} oscillation`);
156
+ catch (error) {
157
+ await this.handleDeviceError('set fan state', error);
158
+ throw error;
194
159
  }
195
- await this.persistDeviceState('oscillationState', enabled);
160
+ });
161
+ this.writeChain = write;
162
+ return write;
163
+ }
164
+ /** Coalesce scene writes so an explicit mode/on is not undone by a 0% slider. */
165
+ queueWrite(key, value) {
166
+ if (!this.pendingWrite)
167
+ this.pendingWrite = {};
168
+ if (key === 'modes') {
169
+ this.pendingWrite.modes = { ...this.pendingWrite.modes, ...value };
170
+ }
171
+ else {
172
+ this.pendingWrite[key] = value;
173
+ }
174
+ if (!this.pendingPromise) {
175
+ this.pendingPromise = new Promise((resolve, reject) => {
176
+ setTimeout(() => {
177
+ var _a;
178
+ const batch = (_a = this.pendingWrite) !== null && _a !== void 0 ? _a : {};
179
+ this.pendingWrite = null;
180
+ this.pendingPromise = null;
181
+ this.enqueue(() => this.applyWrite(batch)).then(resolve, reject);
182
+ }, 50);
183
+ });
184
+ }
185
+ return this.pendingPromise;
186
+ }
187
+ async applyWrite({ active, speed, modes }) {
188
+ var _a;
189
+ const enabledMode = Object.keys(modes !== null && modes !== void 0 ? modes : {}).reverse().find(mode => modes[mode]);
190
+ if (active === 0 || (speed === 0 && active !== 1 && !enabledMode)) {
191
+ this.requireSuccess(await this.device.turnOff(), 'turn off fan');
192
+ return;
196
193
  }
197
- catch (error) {
198
- this.handleDeviceError('set oscillation', error);
194
+ const selectedMode = (_a = enabledMode !== null && enabledMode !== void 0 ? enabledMode : ((modes === null || modes === void 0 ? void 0 : modes[this.currentMode]) === false ? 'normal' : undefined)) !== null && _a !== void 0 ? _a : (speed !== undefined && speed > 0 ? 'normal' : undefined);
195
+ const shouldPowerOn = active === 1 || enabledMode !== undefined || (speed !== undefined && speed > 0);
196
+ if (shouldPowerOn && this.device.deviceStatus !== 'on')
197
+ this.requireSuccess(await this.device.turnOn(), 'turn on fan');
198
+ if (selectedMode && selectedMode !== this.currentMode)
199
+ this.requireSuccess(await this.device.setMode(selectedMode), `set ${selectedMode} mode`);
200
+ if (speed !== undefined && speed > 0 && !enabledMode) {
201
+ const level = Math.max(1, Math.min(this.maxSpeed, Math.round(speed / 100 * this.maxSpeed)));
202
+ this.requireSuccess(await this.device.changeFanSpeed(level), 'set fan speed');
199
203
  }
200
204
  }
205
+ setOscillation(enabled) {
206
+ return this.enqueue(async () => this.requireSuccess(await this.device.setOscillation(enabled), 'set oscillation'));
207
+ }
201
208
  supportsChildLock() {
202
- const device = this.device;
203
- if (typeof device.setChildLock !== 'function') {
204
- return false;
205
- }
206
- // Older tsvesync versions have no hasFeature; fall back to the setter
207
- return typeof device.hasFeature === 'function' ? device.hasFeature('child_lock') : true;
209
+ var _a, _b, _c;
210
+ return typeof this.device.setChildLock === 'function' && ((_c = (_b = (_a = this.device).hasFeature) === null || _b === void 0 ? void 0 : _b.call(_a, 'child_lock')) !== null && _c !== void 0 ? _c : true);
208
211
  }
209
212
  setupChildLock() {
210
- const lockCharacteristic = this.platform.Characteristic.LockPhysicalControls;
213
+ const characteristic = this.platform.Characteristic.LockPhysicalControls;
211
214
  if (!this.supportsChildLock()) {
212
- // Drop a stale characteristic left behind by an older cached accessory
213
- if (typeof this.service.testCharacteristic === 'function' &&
214
- this.service.testCharacteristic(lockCharacteristic)) {
215
- this.service.removeCharacteristic(this.service.getCharacteristic(lockCharacteristic));
216
- }
215
+ if (this.service.testCharacteristic(characteristic))
216
+ this.service.removeCharacteristic(this.service.getCharacteristic(characteristic));
217
217
  return;
218
218
  }
219
- this.setupCharacteristic(lockCharacteristic, this.getLockPhysicalControls.bind(this), this.setLockPhysicalControls.bind(this));
220
- }
221
- async getLockPhysicalControls() {
222
- return this.device.childLock ? 1 : 0;
223
- }
224
- async setLockPhysicalControls(value) {
225
- try {
226
- if (!this.device.setChildLock) {
227
- throw new Error('Device does not support child lock');
228
- }
229
- const enabled = value === 1;
230
- const success = await this.device.setChildLock(enabled);
231
- if (!success) {
232
- throw new Error(`Failed to ${enabled ? 'enable' : 'disable'} child lock`);
233
- }
234
- await this.persistDeviceState('child_lock', enabled);
235
- }
236
- catch (error) {
237
- this.handleDeviceError('set child lock', error);
238
- }
239
- }
240
- getModeValue(mode) {
241
- switch (mode) {
242
- case 'normal': return MODE_NORMAL;
243
- case 'auto': return MODE_AUTO;
244
- case 'sleep': return MODE_SLEEP;
245
- case 'turbo': return MODE_TURBO;
246
- default: return MODE_NORMAL;
247
- }
248
- }
249
- getModeString(value) {
250
- switch (value) {
251
- case MODE_AUTO: return 'auto';
252
- case MODE_SLEEP: return 'sleep';
253
- case MODE_TURBO: return 'turbo';
254
- default: return 'normal';
255
- }
256
- }
257
- async getMode() {
258
- return this.getModeValue(this.device.mode || 'normal');
259
- }
260
- async setMode(value) {
261
- try {
262
- const mode = this.getModeString(value);
263
- const success = await this.device.setMode(mode);
264
- if (!success) {
265
- throw new Error(`Failed to set mode to ${mode}`);
266
- }
267
- await this.persistDeviceState('mode', mode);
268
- }
269
- catch (error) {
270
- this.handleDeviceError('set mode', error);
271
- }
219
+ this.setupCharacteristic(characteristic, async () => this.device.childLock ? 1 : 0, value => this.enqueue(async () => {
220
+ this.requireSuccess(await this.device.setChildLock(Number(value) === 1), 'set child lock');
221
+ }));
272
222
  }
273
223
  }
274
224
  exports.FanAccessory = FanAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"fan.accessory.js","sourceRoot":"","sources":["../../src/accessories/fan.accessory.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AAIjD,8BAA8B;AAC9B,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,0BAA0B;AAC1B,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,8CAA8C;AAC9C,MAAM,gBAAgB,GAAgC;IACpD,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxD,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACzD,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACvD,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACvB,CAAC;AAEF,MAAa,YAAa,SAAQ,8BAAa;IAK7C,YACE,QAA0B,EAC1B,SAA4B,EAC5B,MAAiB;QAEjB,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAES,YAAY;QACpB,gCAAgC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEzD,kCAAkC;QAClC,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1B,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,sBAAsB;QACtB,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7B,CAAC;QAEF,4BAA4B;QAC5B,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;QAEF,yEAAyE;QACzE,sEAAsE;QACtE,iCAAiC;QACjC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,2BAA2B;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAElF,8BAA8B;QAC9B,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAC3D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aAC3B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzC,0BAA0B;QAC1B,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EACjC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,0BAA0B,CAAC,OAAY;QACrD,MAAM,UAAU,GAAG,OAKlB,CAAC;QAEF,sBAAsB;QACtB,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,KAAK,IAAI,CAAC;QAClD,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EACnC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjB,CAAC;QAEF,iEAAiE;QACjE,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAC5C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjB,CAAC;QAEF,wBAAwB;QACxB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,QAAQ,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;gBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzC,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACjC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;aAC1D;SACF;QACD,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAC1C,aAAa,CACd,CAAC;QAEF,4BAA4B;QAC5B,IAAI,kBAAkB,IAAI,UAAU,EAAE;YACpC,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EACtC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpC,CAAC;SACH;QAED,cAAc;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,WAAW,IAAI,UAAU,CAAC,IAAI,EAAE;YAClC,WAAW,CAAC,iBAAiB,CAC3B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC/B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CACnC,CAAC;SACH;IACH,CAAC;IAES,qBAAqB;QAC7B,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAA0B;QAChD,IAAI;YACF,MAAM,IAAI,GAAG,KAAe,KAAK,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEhF,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;aACjE;YAED,0CAA0C;YAC1C,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACpE;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;SACnD;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,KAA0B;QAC7D,MAAM,UAAU,GAAG,KAAe,CAAC;QAEnC,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,oDAAoD;YACpD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO;SACR;QAED,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;YACjE,OAAO,CAAC,CAAC;SACV;QAED,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YACrB,OAAO,CAAC,CAAC;SACV;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,OAAO,aAAa,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAC5D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,iBAAiB,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAA0B;QAC3D,IAAI;YACF,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;gBACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;YAED,wEAAwE;YACxE,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,MAAc,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAE3E,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,aAAa,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC;aACpF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAA0B;QACnD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;gBAC/B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;YAED,MAAM,OAAO,GAAG,KAAe,KAAK,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE1D,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC;aAC5E;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;SAClD;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAA+D,CAAC;QACpF,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;YAC7C,OAAO,KAAK,CAAC;SACd;QACD,sEAAsE;QACtE,OAAO,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,CAAC;IAEO,cAAc;QACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;QAE7E,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,uEAAuE;YACvE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,UAAU;gBACrD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE;gBACvD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;aACvF;YACD,OAAO;SACR;QAED,IAAI,CAAC,mBAAmB,CACtB,kBAAkB,EAClB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EACvC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACxC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,KAA0B;QAC9D,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACvD;YAED,MAAM,OAAO,GAAG,KAAe,KAAK,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC;aAC3E;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SACtD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,YAAY,CAAC,IAA2C;QAC9D,QAAQ,IAAI,EAAE;YACZ,KAAK,QAAQ,CAAC,CAAC,OAAO,WAAW,CAAC;YAClC,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC;YAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;YAChC,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC;SAC7B;IACH,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,QAAQ,KAAK,EAAE;YACb,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC;YAC9B,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC;YAChC,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;SAC1B;IACH,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAA0B;QAC9C,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;aAClD;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC3C;IACH,CAAC;CACF;AA7UD,oCA6UC"}
1
+ {"version":3,"file":"fan.accessory.js","sourceRoot":"","sources":["../../src/accessories/fan.accessory.ts"],"names":[],"mappings":"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"}
@@ -230,7 +230,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
230
230
  });
231
231
  }
232
232
  // Add Name characteristic
233
- this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.device.deviceName);
233
+ this.setupCharacteristic(this.platform.Characteristic.Name, async () => this.sanitizedDeviceName);
234
234
  // CurrentRelativeHumidity getter
235
235
  if (this.capabilities && this.capabilities.hasHumidity) {
236
236
  this.service
@@ -289,7 +289,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
289
289
  minStep: 0.1
290
290
  }, this.temperatureService);
291
291
  // Set name for the temperature sensor
292
- this.setupCharacteristic(this.platform.Characteristic.Name, async () => `${this.device.deviceName} Temperature`, undefined, undefined, this.temperatureService);
292
+ this.setupCharacteristic(this.platform.Characteristic.Name, async () => `${this.sanitizedDeviceName} Temperature`, undefined, undefined, this.temperatureService);
293
293
  }
294
294
  /**
295
295
  * Get temperature for Superior6000S
@@ -315,7 +315,7 @@ class HumidifierAccessory extends base_accessory_1.BaseAccessory {
315
315
  // Set up filter life level characteristic
316
316
  this.setupCharacteristic(this.platform.Characteristic.FilterLifeLevel, this.getFilterLifeLevel.bind(this), undefined, undefined, this.filterService);
317
317
  // Set name for the filter service
318
- this.setupCharacteristic(this.platform.Characteristic.Name, async () => `${this.device.deviceName} Filter`, undefined, undefined, this.filterService);
318
+ this.setupCharacteristic(this.platform.Characteristic.Name, async () => `${this.sanitizedDeviceName} Filter`, undefined, undefined, this.filterService);
319
319
  }
320
320
  /**
321
321
  * Get filter change indication for Superior6000S