homebridge-midea-platform 1.2.0-beta.2 → 1.2.0-beta.4

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 (89) hide show
  1. package/.husky/pre-commit +0 -0
  2. package/AC_ori.lua +5140 -0
  3. package/config.schema.json +14 -2
  4. package/dist/accessory/AccessoryFactory.d.ts +13 -12
  5. package/dist/accessory/AccessoryFactory.d.ts.map +1 -1
  6. package/dist/accessory/AccessoryFactory.js +37 -31
  7. package/dist/accessory/AccessoryFactory.js.map +1 -1
  8. package/dist/accessory/AirConditionerAccessory.d.ts +98 -92
  9. package/dist/accessory/AirConditionerAccessory.d.ts.map +1 -1
  10. package/dist/accessory/AirConditionerAccessory.js +662 -607
  11. package/dist/accessory/AirConditionerAccessory.js.map +1 -1
  12. package/dist/accessory/BaseAccessory.d.ts +11 -11
  13. package/dist/accessory/BaseAccessory.js +21 -21
  14. package/dist/accessory/DehumidifierAccessory.d.ts +45 -45
  15. package/dist/accessory/DehumidifierAccessory.js +344 -344
  16. package/dist/accessory/DishwasherAccessory.d.ts +30 -30
  17. package/dist/accessory/DishwasherAccessory.js +63 -63
  18. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts +44 -44
  19. package/dist/accessory/ElectricWaterHeaterAccessory.js +176 -176
  20. package/dist/accessory/FanAccessory.d.ts +39 -39
  21. package/dist/accessory/FanAccessory.js +123 -123
  22. package/dist/accessory/FrontLoadWasherAccessory.d.ts +30 -30
  23. package/dist/accessory/FrontLoadWasherAccessory.js +66 -66
  24. package/dist/accessory/GasWaterHeaterAccessory.d.ts +51 -51
  25. package/dist/accessory/GasWaterHeaterAccessory.js +216 -216
  26. package/dist/core/MideaCloud.d.ts +35 -35
  27. package/dist/core/MideaCloud.js +350 -350
  28. package/dist/core/MideaConstants.d.ts +50 -50
  29. package/dist/core/MideaConstants.js +58 -58
  30. package/dist/core/MideaDevice.d.ts +76 -76
  31. package/dist/core/MideaDevice.js +409 -409
  32. package/dist/core/MideaDiscover.d.ts +35 -35
  33. package/dist/core/MideaDiscover.js +212 -212
  34. package/dist/core/MideaMessage.d.ts +75 -75
  35. package/dist/core/MideaMessage.js +184 -184
  36. package/dist/core/MideaPacketBuilder.d.ts +10 -10
  37. package/dist/core/MideaPacketBuilder.js +60 -60
  38. package/dist/core/MideaSecurity.d.ts +63 -63
  39. package/dist/core/MideaSecurity.js +251 -251
  40. package/dist/core/MideaUtils.d.ts +32 -32
  41. package/dist/core/MideaUtils.js +181 -181
  42. package/dist/devices/DeviceFactory.d.ts +13 -13
  43. package/dist/devices/DeviceFactory.d.ts.map +1 -1
  44. package/dist/devices/DeviceFactory.js +37 -36
  45. package/dist/devices/DeviceFactory.js.map +1 -1
  46. package/dist/devices/a1/MideaA1Device.d.ts +76 -76
  47. package/dist/devices/a1/MideaA1Device.js +145 -145
  48. package/dist/devices/a1/MideaA1Message.d.ts +40 -40
  49. package/dist/devices/a1/MideaA1Message.js +198 -198
  50. package/dist/devices/ac/MideaACDevice.d.ts +106 -104
  51. package/dist/devices/ac/MideaACDevice.d.ts.map +1 -1
  52. package/dist/devices/ac/MideaACDevice.js +400 -384
  53. package/dist/devices/ac/MideaACDevice.js.map +1 -1
  54. package/dist/devices/ac/MideaACMessage.d.ts +95 -94
  55. package/dist/devices/ac/MideaACMessage.d.ts.map +1 -1
  56. package/dist/devices/ac/MideaACMessage.js +619 -611
  57. package/dist/devices/ac/MideaACMessage.js.map +1 -1
  58. package/dist/devices/db/MideaDBDevice.d.ts +29 -29
  59. package/dist/devices/db/MideaDBDevice.js +100 -100
  60. package/dist/devices/db/MideaDBMessage.d.ts +32 -32
  61. package/dist/devices/db/MideaDBMessage.js +101 -101
  62. package/dist/devices/e1/MideaE1Device.d.ts +56 -56
  63. package/dist/devices/e1/MideaE1Device.js +128 -128
  64. package/dist/devices/e1/MideaE1Message.d.ts +28 -28
  65. package/dist/devices/e1/MideaE1Message.js +107 -107
  66. package/dist/devices/e2/MideaE2Device.d.ts +44 -44
  67. package/dist/devices/e2/MideaE2Device.js +129 -129
  68. package/dist/devices/e2/MideaE2Message.d.ts +33 -33
  69. package/dist/devices/e2/MideaE2Message.js +132 -132
  70. package/dist/devices/e3/MideaE3Device.d.ts +43 -43
  71. package/dist/devices/e3/MideaE3Device.js +137 -137
  72. package/dist/devices/e3/MideaE3Message.d.ts +51 -51
  73. package/dist/devices/e3/MideaE3Message.js +136 -136
  74. package/dist/devices/fa/MideaFADevice.d.ts +36 -36
  75. package/dist/devices/fa/MideaFADevice.js +106 -106
  76. package/dist/devices/fa/MideaFAMessage.d.ts +38 -38
  77. package/dist/devices/fa/MideaFAMessage.js +98 -98
  78. package/dist/index.d.ts +6 -6
  79. package/dist/index.js +6 -6
  80. package/dist/platform.d.ts +60 -60
  81. package/dist/platform.js +212 -212
  82. package/dist/platformUtils.d.ts +108 -106
  83. package/dist/platformUtils.d.ts.map +1 -1
  84. package/dist/platformUtils.js +103 -101
  85. package/dist/platformUtils.js.map +1 -1
  86. package/dist/settings.d.ts +8 -8
  87. package/dist/settings.js +11 -11
  88. package/docs/ac.md +6 -0
  89. package/package.json +1 -1
@@ -1,608 +1,663 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
7
- const platformUtils_1 = require("../platformUtils");
8
- class AirConditionerAccessory extends BaseAccessory_1.default {
9
- /*********************************************************************
10
- * Constructor registers all the service types with Homebridge, registers
11
- * a callback function with the MideaDevice class, and requests device status.
12
- */
13
- constructor(platform, accessory, device, configDev) {
14
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
15
- super(platform, accessory, device, configDev);
16
- this.device = device;
17
- this.configDev = configDev;
18
- this.service =
19
- this.accessory.getService(this.platform.Service.HeaterCooler) || this.accessory.addService(this.platform.Service.HeaterCooler);
20
- this.service.setCharacteristic(this.platform.Characteristic.Name, this.device.name);
21
- this.service.getCharacteristic(this.platform.Characteristic.Active).onGet(this.getActive.bind(this)).onSet(this.setActive.bind(this));
22
- this.service
23
- .getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
24
- .onGet(this.getTemperatureDisplayUnits.bind(this))
25
- .onSet(this.setTemperatureDisplayUnits.bind(this));
26
- this.service
27
- .getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
28
- .onGet(this.getCurrentHeaterCoolerState.bind(this));
29
- this.service
30
- .getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
31
- .onGet(this.getTargetHeaterCoolerState.bind(this))
32
- .onSet(this.setTargetHeaterCoolerState.bind(this))
33
- .setProps({
34
- validValues: this.configDev.AC_options.heatingCapable
35
- ? [
36
- this.platform.Characteristic.TargetHeaterCoolerState.AUTO,
37
- this.platform.Characteristic.TargetHeaterCoolerState.HEAT,
38
- this.platform.Characteristic.TargetHeaterCoolerState.COOL,
39
- ]
40
- : [this.platform.Characteristic.TargetHeaterCoolerState.AUTO, this.platform.Characteristic.TargetHeaterCoolerState.COOL],
41
- });
42
- this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature).onGet(this.getCurrentTemperature.bind(this));
43
- this.service
44
- .getCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature)
45
- .onGet(this.getTargetTemperature.bind(this))
46
- .onSet(this.setTargetTemperature.bind(this))
47
- .setProps({
48
- minValue: this.configDev.AC_options.minTemp,
49
- maxValue: this.configDev.AC_options.maxTemp,
50
- minStep: this.configDev.AC_options.tempStep,
51
- });
52
- this.service
53
- .getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
54
- .onGet(this.getTargetTemperature.bind(this))
55
- .onSet(this.setTargetTemperature.bind(this))
56
- .setProps({
57
- minValue: this.configDev.AC_options.minTemp,
58
- maxValue: this.configDev.AC_options.maxTemp,
59
- minStep: this.configDev.AC_options.tempStep,
60
- });
61
- this.service
62
- .getCharacteristic(this.platform.Characteristic.RotationSpeed)
63
- .onGet(this.getRotationSpeed.bind(this))
64
- .onSet(this.setRotationSpeed.bind(this));
65
- // Swing modes
66
- if (this.configDev.AC_options.swing.mode !== platformUtils_1.SwingMode.NONE) {
67
- this.service
68
- .getCharacteristic(this.platform.Characteristic.SwingMode)
69
- .onGet(this.getSwingMode.bind(this))
70
- .onSet(this.setSwingMode.bind(this));
71
- }
72
- // Outdoor temperature sensor
73
- this.outDoorTemperatureService = this.accessory.getServiceById(this.platform.Service.TemperatureSensor, 'Outdoor');
74
- if (this.configDev.AC_options.outDoorTemp) {
75
- (_a = this.outDoorTemperatureService) !== null && _a !== void 0 ? _a : (this.outDoorTemperatureService = this.accessory.addService(this.platform.Service.TemperatureSensor, `${this.device.name} Outdoor`, 'Outdoor'));
76
- this.outDoorTemperatureService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Outdoor`);
77
- this.outDoorTemperatureService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Outdoor`);
78
- this.outDoorTemperatureService
79
- .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
80
- .onGet(this.getOutdoorTemperature.bind(this));
81
- this.outDoorTemperatureService
82
- .getCharacteristic(this.platform.Characteristic.StatusFault)
83
- .onGet(() => this.device.attributes.OUTDOOR_TEMPERATURE === undefined
84
- ? this.platform.Characteristic.StatusFault.GENERAL_FAULT
85
- : this.platform.Characteristic.StatusFault.NO_FAULT);
86
- }
87
- else if (this.outDoorTemperatureService) {
88
- this.accessory.removeService(this.outDoorTemperatureService);
89
- }
90
- // Fan-only mode switch
91
- this.fanOnlyService = this.accessory.getServiceById(this.platform.Service.Switch, 'FanOnly');
92
- if (this.configDev.AC_options.fanOnlyModeSwitch) {
93
- (_b = this.fanOnlyService) !== null && _b !== void 0 ? _b : (this.fanOnlyService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} FanOnly`, 'FanOnly'));
94
- this.fanOnlyService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Fan-only Mode`);
95
- this.fanOnlyService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Fan-only Mode`);
96
- this.fanOnlyService
97
- .getCharacteristic(this.platform.Characteristic.On)
98
- .onGet(this.getFanOnlyMode.bind(this))
99
- .onSet(this.setFanOnlyMode.bind(this));
100
- }
101
- else if (this.fanOnlyService) {
102
- this.accessory.removeService(this.fanOnlyService);
103
- }
104
- // Fan accessory
105
- this.fanService = this.accessory.getServiceById(this.platform.Service.Fanv2, 'Fan');
106
- if (this.configDev.AC_options.fanAccessory) {
107
- (_c = this.fanService) !== null && _c !== void 0 ? _c : (this.fanService = this.accessory.addService(this.platform.Service.Fanv2, `${this.device.name} Fan`, 'Fan'));
108
- this.fanService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Fan`);
109
- this.fanService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Fan`);
110
- this.fanService
111
- .getCharacteristic(this.platform.Characteristic.Active)
112
- .onGet(this.getActive.bind(this))
113
- .onSet(this.setActive.bind(this));
114
- this.fanService
115
- .getCharacteristic(this.platform.Characteristic.RotationSpeed)
116
- .onGet(this.getRotationSpeed.bind(this))
117
- .onSet(this.setRotationSpeed.bind(this));
118
- this.fanService
119
- .getCharacteristic(this.platform.Characteristic.TargetFanState)
120
- .onGet(this.getFanState.bind(this))
121
- .onSet(this.setFanState.bind(this));
122
- this.fanService
123
- .getCharacteristic(this.platform.Characteristic.SwingMode)
124
- .onGet(this.getSwingMode.bind(this))
125
- .onSet(this.setSwingMode.bind(this));
126
- }
127
- else if (this.fanService) {
128
- this.accessory.removeService(this.fanService);
129
- }
130
- // Display switch
131
- this.displayService = this.accessory.getServiceById(this.platform.Service.Switch, 'Display');
132
- if (this.configDev.AC_options.displaySwitch.flag) {
133
- this.device.set_alternate_switch_display(this.configDev.AC_options.displaySwitch.command);
134
- (_d = this.displayService) !== null && _d !== void 0 ? _d : (this.displayService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Display`, 'Display'));
135
- this.displayService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Display`);
136
- this.displayService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Display`);
137
- this.displayService
138
- .getCharacteristic(this.platform.Characteristic.On)
139
- .onGet(this.getDisplayActive.bind(this))
140
- .onSet(this.setDisplayActive.bind(this));
141
- }
142
- else if (this.displayService) {
143
- this.accessory.removeService(this.displayService);
144
- }
145
- // Eco mode switch
146
- this.ecoModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'EcoMode');
147
- if (this.configDev.AC_options.ecoSwitch) {
148
- (_e = this.ecoModeService) !== null && _e !== void 0 ? _e : (this.ecoModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Eco`, 'EcoMode'));
149
- this.ecoModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Eco`);
150
- this.ecoModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Eco`);
151
- this.ecoModeService
152
- .getCharacteristic(this.platform.Characteristic.On)
153
- .onGet(this.getEcoMode.bind(this))
154
- .onSet(this.setEcoMode.bind(this));
155
- }
156
- else if (this.ecoModeService) {
157
- this.accessory.removeService(this.ecoModeService);
158
- }
159
- // Breeze away switch
160
- this.breezeAwayService = this.accessory.getServiceById(this.platform.Service.Switch, 'BreezeAway');
161
- if (this.configDev.AC_options.breezeAwaySwitch) {
162
- (_f = this.breezeAwayService) !== null && _f !== void 0 ? _f : (this.breezeAwayService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Breeze`, 'BreezeAway'));
163
- this.breezeAwayService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Breeze`);
164
- this.breezeAwayService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Breeze`);
165
- this.breezeAwayService
166
- .getCharacteristic(this.platform.Characteristic.On)
167
- .onGet(this.getBreezeAway.bind(this))
168
- .onSet(this.setBreezeAway.bind(this));
169
- }
170
- else if (this.breezeAwayService) {
171
- this.accessory.removeService(this.breezeAwayService);
172
- }
173
- // Dry mode switch
174
- this.dryModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'DryMode');
175
- if (this.configDev.AC_options.dryModeSwitch) {
176
- (_g = this.dryModeService) !== null && _g !== void 0 ? _g : (this.dryModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Dry`, 'DryMode'));
177
- this.dryModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Dry`);
178
- this.dryModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Dry`);
179
- this.dryModeService
180
- .getCharacteristic(this.platform.Characteristic.On)
181
- .onGet(this.getDryMode.bind(this))
182
- .onSet(this.setDryMode.bind(this));
183
- }
184
- else if (this.dryModeService) {
185
- this.accessory.removeService(this.dryModeService);
186
- }
187
- this.boostModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'BoostMode');
188
- if (this.configDev.AC_options.boostModeSwitch) {
189
- (_h = this.boostModeService) !== null && _h !== void 0 ? _h : (this.boostModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Boost`, 'BoostMode'));
190
- this.boostModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Boost`);
191
- this.boostModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Boost`);
192
- this.boostModeService
193
- .getCharacteristic(this.platform.Characteristic.On)
194
- .onGet(this.getBoostMode.bind(this))
195
- .onSet(this.setBoostMode.bind(this));
196
- }
197
- else if (this.boostModeService) {
198
- this.accessory.removeService(this.boostModeService);
199
- }
200
- // Aux switch
201
- this.auxService = this.accessory.getServiceById(this.platform.Service.Switch, 'Aux');
202
- if (this.configDev.AC_options.auxHeatingSwitches) {
203
- (_j = this.auxService) !== null && _j !== void 0 ? _j : (this.auxService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Aux`, 'Aux'));
204
- this.auxService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Aux`);
205
- this.auxService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Aux`);
206
- this.auxService.getCharacteristic(this.platform.Characteristic.On).onGet(this.getAux.bind(this)).onSet(this.setAux.bind(this));
207
- }
208
- else if (this.auxService) {
209
- this.accessory.removeService(this.auxService);
210
- }
211
- // Aux+Heat switch
212
- this.auxHeatingService = this.accessory.getServiceById(this.platform.Service.Switch, 'AuxHeating');
213
- if (this.configDev.AC_options.auxHeatingSwitches) {
214
- (_k = this.auxHeatingService) !== null && _k !== void 0 ? _k : (this.auxHeatingService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Aux+Heat`, 'AuxHeating'));
215
- this.auxHeatingService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Aux+Heat`);
216
- this.auxHeatingService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Aux+Heat`);
217
- this.auxHeatingService
218
- .getCharacteristic(this.platform.Characteristic.On)
219
- .onGet(this.getAuxHeating.bind(this))
220
- .onSet(this.setAuxHeating.bind(this));
221
- }
222
- else if (this.auxHeatingService) {
223
- this.accessory.removeService(this.auxHeatingService);
224
- }
225
- this.selfCleanService = this.accessory.getServiceById(this.platform.Service.Switch, 'SelfClean');
226
- if (this.configDev.AC_options.selfCleanSwitch) {
227
- (_l = this.selfCleanService) !== null && _l !== void 0 ? _l : (this.selfCleanService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} SelfClean`, 'SelfClean'));
228
- this.selfCleanService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} SelfClean`);
229
- this.selfCleanService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} SelfClean`);
230
- this.selfCleanService
231
- .getCharacteristic(this.platform.Characteristic.On)
232
- .onGet(this.getSelfCleanState.bind(this))
233
- .onSet(this.setSelfCleanState.bind(this));
234
- }
235
- else if (this.selfCleanService) {
236
- this.accessory.removeService(this.selfCleanService);
237
- }
238
- const swingProps = this.configDev.AC_options.swing;
239
- this.swingAngleMainControl =
240
- swingProps.mode === platformUtils_1.SwingMode.VERTICAL || (swingProps.mode === platformUtils_1.SwingMode.BOTH && swingProps.angleMainControl === platformUtils_1.SwingAngle.VERTICAL)
241
- ? platformUtils_1.SwingAngle.VERTICAL
242
- : platformUtils_1.SwingAngle.HORIZONTAL;
243
- // Swing angle accessory
244
- this.swingAngleService = this.accessory.getServiceById(this.platform.Service.WindowCovering, 'SwingAngle');
245
- if (swingProps.mode !== platformUtils_1.SwingMode.NONE && swingProps.angleAccessory) {
246
- (_m = this.swingAngleService) !== null && _m !== void 0 ? _m : (this.swingAngleService = this.accessory.addService(this.platform.Service.WindowCovering, `${this.device.name} Swing`, 'SwingAngle'));
247
- this.swingAngleService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Swing`);
248
- this.swingAngleService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Swing`);
249
- this.swingAngleService
250
- .getCharacteristic(this.platform.Characteristic.CurrentPosition)
251
- .onGet(this.getSwingAngleCurrentPosition.bind(this));
252
- this.swingAngleService
253
- .getCharacteristic(this.platform.Characteristic.TargetPosition)
254
- .onGet(this.getSwingAngleTargetPosition.bind(this))
255
- .onSet(this.setSwingAngleTargetPosition.bind(this));
256
- this.swingAngleService
257
- .getCharacteristic(this.platform.Characteristic.PositionState)
258
- .onGet(this.getSwingAnglePositionState.bind(this));
259
- if (swingProps.mode === platformUtils_1.SwingMode.BOTH) {
260
- this.swingAngleService
261
- .getCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle)
262
- .onGet(this.getSwingAngleCurrentHorizontalTiltAngle.bind(this));
263
- this.swingAngleService
264
- .getCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle)
265
- .onGet(this.getSwingAngleTargetHorizontalTiltAngle.bind(this))
266
- .onSet(this.setSwingAngleTargetHorizontalTiltAngle.bind(this));
267
- this.swingAngleService
268
- .getCharacteristic(this.platform.Characteristic.CurrentVerticalTiltAngle)
269
- .onGet(this.getSwingAngleCurrentVerticalTiltAngle.bind(this));
270
- this.swingAngleService
271
- .getCharacteristic(this.platform.Characteristic.TargetVerticalTiltAngle)
272
- .onGet(this.getSwingAngleTargetVerticalTiltAngle.bind(this))
273
- .onSet(this.setSwingAngleTargetVerticalTiltAngle.bind(this));
274
- }
275
- }
276
- // Misc
277
- this.device.attributes.PROMPT_TONE = this.configDev.AC_options.audioFeedback;
278
- this.device.attributes.TEMP_FAHRENHEIT = this.configDev.AC_options.fahrenheit;
279
- }
280
- /*********************************************************************
281
- * Callback function called by MideaDevice whenever there is a change to
282
- * any attribute value.
283
- */
284
- async updateCharacteristics(attributes) {
285
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
286
- for (const [k, v] of Object.entries(attributes)) {
287
- this.platform.log.debug(`[${this.device.name}] Set attribute ${k} to: ${v}`);
288
- let updateState = false;
289
- switch (k.toLowerCase()) {
290
- case 'power':
291
- updateState = true;
292
- break;
293
- case 'temp_fahrenheit':
294
- this.service.updateCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits, this.getTemperatureDisplayUnits());
295
- break;
296
- case 'screen_display':
297
- case 'screen_display_new':
298
- (_a = this.displayService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.On, this.getDisplayActive());
299
- break;
300
- case 'target_temperature':
301
- // If MODE is 4 then device is heating. Therefore target temperature value must be heating target? Right?
302
- if (this.device.attributes.MODE === 4) {
303
- this.service.updateCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature, this.getTargetTemperature());
304
- }
305
- else {
306
- this.service.updateCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature, this.getTargetTemperature());
307
- }
308
- updateState = true;
309
- break;
310
- case 'indoor_temperature':
311
- this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getCurrentTemperature());
312
- break;
313
- case 'outdoor_temperature':
314
- (_b = this.outDoorTemperatureService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getOutdoorTemperature());
315
- break;
316
- case 'fan_speed':
317
- updateState = true;
318
- break;
319
- case 'fan_auto':
320
- (_c = this.fanService) === null || _c === void 0 ? void 0 : _c.updateCharacteristic(this.platform.Characteristic.TargetFanState, this.getFanState());
321
- break;
322
- case 'swing_vertical':
323
- case 'swing_horizontal':
324
- this.service.updateCharacteristic(this.platform.Characteristic.SwingMode, this.getSwingMode());
325
- break;
326
- case 'mode':
327
- updateState = true;
328
- break;
329
- case 'eco_mode':
330
- (_d = this.ecoModeService) === null || _d === void 0 ? void 0 : _d.updateCharacteristic(this.platform.Characteristic.On, this.getEcoMode());
331
- break;
332
- case 'indirect_wind':
333
- (_e = this.breezeAwayService) === null || _e === void 0 ? void 0 : _e.updateCharacteristic(this.platform.Characteristic.On, this.getBreezeAway());
334
- break;
335
- case 'aux_heating':
336
- (_f = this.auxHeatingService) === null || _f === void 0 ? void 0 : _f.updateCharacteristic(this.platform.Characteristic.On, this.getAuxHeating());
337
- break;
338
- case 'smart_eye':
339
- (_g = this.auxService) === null || _g === void 0 ? void 0 : _g.updateCharacteristic(this.platform.Characteristic.On, this.getAux());
340
- break;
341
- case 'wind_swing_lr_angle':
342
- case 'wind_swing_ud_angle':
343
- (_h = this.swingAngleService) === null || _h === void 0 ? void 0 : _h.updateCharacteristic(this.platform.Characteristic.CurrentPosition, this.getSwingAngleCurrentPosition());
344
- (_j = this.swingAngleService) === null || _j === void 0 ? void 0 : _j.updateCharacteristic(this.platform.Characteristic.TargetPosition, this.getSwingAngleTargetPosition());
345
- if (this.configDev.AC_options.swing.mode === platformUtils_1.SwingMode.BOTH) {
346
- (_k = this.swingAngleService) === null || _k === void 0 ? void 0 : _k.updateCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle, this.getSwingAngleCurrentHorizontalTiltAngle());
347
- (_l = this.swingAngleService) === null || _l === void 0 ? void 0 : _l.updateCharacteristic(this.platform.Characteristic.CurrentVerticalTiltAngle, this.getSwingAngleCurrentVerticalTiltAngle());
348
- (_m = this.swingAngleService) === null || _m === void 0 ? void 0 : _m.updateCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle, this.getSwingAngleTargetHorizontalTiltAngle());
349
- (_o = this.swingAngleService) === null || _o === void 0 ? void 0 : _o.updateCharacteristic(this.platform.Characteristic.TargetVerticalTiltAngle, this.getSwingAngleTargetVerticalTiltAngle());
350
- }
351
- break;
352
- case 'self_clean':
353
- updateState = true;
354
- (_p = this.selfCleanService) === null || _p === void 0 ? void 0 : _p.updateCharacteristic(this.platform.Characteristic.On, this.getSelfCleanState());
355
- break;
356
- default:
357
- this.platform.log.debug(`[${this.device.name}] Attempt to set unsupported attribute ${k} to ${v}`);
358
- }
359
- if (updateState) {
360
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
361
- this.service.updateCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState, this.getTargetHeaterCoolerState());
362
- this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState, this.getCurrentHeaterCoolerState());
363
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed());
364
- (_q = this.fanOnlyService) === null || _q === void 0 ? void 0 : _q.updateCharacteristic(this.platform.Characteristic.On, this.getFanOnlyMode());
365
- (_r = this.fanService) === null || _r === void 0 ? void 0 : _r.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
366
- (_s = this.fanService) === null || _s === void 0 ? void 0 : _s.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed());
367
- (_t = this.dryModeService) === null || _t === void 0 ? void 0 : _t.updateCharacteristic(this.platform.Characteristic.On, this.getDryMode());
368
- (_u = this.displayService) === null || _u === void 0 ? void 0 : _u.updateCharacteristic(this.platform.Characteristic.On, this.getDisplayActive());
369
- (_v = this.ecoModeService) === null || _v === void 0 ? void 0 : _v.updateCharacteristic(this.platform.Characteristic.On, this.getEcoMode());
370
- (_w = this.breezeAwayService) === null || _w === void 0 ? void 0 : _w.updateCharacteristic(this.platform.Characteristic.On, this.getBreezeAway());
371
- (_x = this.auxService) === null || _x === void 0 ? void 0 : _x.updateCharacteristic(this.platform.Characteristic.On, this.getAux());
372
- (_y = this.auxHeatingService) === null || _y === void 0 ? void 0 : _y.updateCharacteristic(this.platform.Characteristic.On, this.getAuxHeating());
373
- }
374
- }
375
- }
376
- /*********************************************************************
377
- * Callback functions for each Homebridge/HomeKit service
378
- *
379
- */
380
- getActive() {
381
- // Show as inactive if device is off
382
- return this.device.attributes.POWER ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
383
- }
384
- async setActive(value) {
385
- var _a;
386
- await this.device.set_attribute({ POWER: !!value });
387
- this.device.attributes.SCREEN_DISPLAY = !!value;
388
- (_a = this.displayService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.On, !!value);
389
- }
390
- getTemperatureDisplayUnits() {
391
- return this.device.attributes.TEMP_FAHRENHEIT
392
- ? this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT
393
- : this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS;
394
- }
395
- async setTemperatureDisplayUnits(value) {
396
- await this.device.set_attribute({ TEMP_FAHRENHEIT: value === this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT });
397
- }
398
- getCurrentHeaterCoolerState() {
399
- var _a;
400
- if (this.device.attributes.POWER && this.device.attributes.MODE > 0 && this.device.attributes.MODE < 5) {
401
- if (this.device.attributes.TARGET_TEMPERATURE < ((_a = this.device.attributes.INDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : 0)) {
402
- if ([1, 2].includes(this.device.attributes.MODE)) {
403
- return this.platform.Characteristic.CurrentHeaterCoolerState.COOLING;
404
- }
405
- else {
406
- return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
407
- }
408
- }
409
- else if (this.device.attributes.TARGET_TEMPERATURE === this.device.attributes.INDOOR_TEMPERATURE) {
410
- return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
411
- }
412
- else {
413
- if (this.device.attributes.MODE === 4) {
414
- return this.platform.Characteristic.CurrentHeaterCoolerState.HEATING;
415
- }
416
- else {
417
- return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
418
- }
419
- }
420
- }
421
- else {
422
- return this.platform.Characteristic.CurrentHeaterCoolerState.INACTIVE;
423
- }
424
- }
425
- getTargetHeaterCoolerState() {
426
- if (this.device.attributes.MODE === 2) {
427
- return this.platform.Characteristic.TargetHeaterCoolerState.COOL;
428
- }
429
- else if (this.device.attributes.MODE === 4) {
430
- return this.platform.Characteristic.TargetHeaterCoolerState.HEAT;
431
- }
432
- else {
433
- return this.platform.Characteristic.TargetHeaterCoolerState.AUTO;
434
- }
435
- }
436
- async setTargetHeaterCoolerState(value) {
437
- switch (value) {
438
- case this.platform.Characteristic.TargetHeaterCoolerState.AUTO:
439
- await this.device.set_attribute({ POWER: true, MODE: 1 });
440
- break;
441
- case this.platform.Characteristic.TargetHeaterCoolerState.COOL:
442
- await this.device.set_attribute({ POWER: true, MODE: 2 });
443
- break;
444
- case this.platform.Characteristic.TargetHeaterCoolerState.HEAT:
445
- await this.device.set_attribute({ POWER: true, MODE: 4 });
446
- break;
447
- }
448
- }
449
- getCurrentTemperature() {
450
- var _a;
451
- return (_a = this.device.attributes.INDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : this.configDev.AC_options.minTemp;
452
- }
453
- getTargetTemperature() {
454
- return Math.max(this.configDev.AC_options.minTemp, Math.min(this.configDev.AC_options.maxTemp, this.device.attributes.TARGET_TEMPERATURE));
455
- }
456
- getFanOnlyMode() {
457
- return this.device.attributes.POWER === true && this.device.attributes.MODE === 5;
458
- }
459
- async setFanOnlyMode(value) {
460
- if (value) {
461
- await this.device.set_attribute({ POWER: true, MODE: 5 });
462
- }
463
- else {
464
- await this.device.set_attribute({ POWER: false, MODE: 0 });
465
- }
466
- }
467
- getFanState() {
468
- return this.device.attributes.FAN_AUTO;
469
- }
470
- async setFanState(value) {
471
- await this.device.set_fan_auto(value === this.platform.Characteristic.TargetFanState.AUTO);
472
- }
473
- async setTargetTemperature(value) {
474
- value = Math.max(this.configDev.AC_options.minTemp, Math.min(this.configDev.AC_options.maxTemp, value));
475
- await this.device.set_target_temperature(value);
476
- }
477
- getSwingMode() {
478
- return this.device.attributes.SWING_HORIZONTAL || this.device.attributes.SWING_VERTICAL
479
- ? this.platform.Characteristic.SwingMode.SWING_ENABLED
480
- : this.platform.Characteristic.SwingMode.SWING_DISABLED;
481
- }
482
- async setSwingMode(value) {
483
- switch (value) {
484
- case this.platform.Characteristic.SwingMode.SWING_ENABLED:
485
- await this.device.set_swing([platformUtils_1.SwingMode.HORIZONTAL, platformUtils_1.SwingMode.BOTH].includes(this.configDev.AC_options.swing.mode), [platformUtils_1.SwingMode.VERTICAL, platformUtils_1.SwingMode.BOTH].includes(this.configDev.AC_options.swing.mode));
486
- break;
487
- case this.platform.Characteristic.SwingMode.SWING_DISABLED:
488
- await this.device.set_swing(false, false);
489
- break;
490
- }
491
- }
492
- getRotationSpeed() {
493
- var _a;
494
- return Math.min(100, (_a = this.device.attributes.FAN_SPEED) !== null && _a !== void 0 ? _a : 0);
495
- }
496
- async setRotationSpeed(value) {
497
- await this.device.set_attribute({ FAN_SPEED: value });
498
- }
499
- getOutdoorTemperature() {
500
- var _a;
501
- return (_a = this.device.attributes.OUTDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : -270;
502
- }
503
- getDisplayActive() {
504
- return this.device.attributes.SCREEN_DISPLAY === true;
505
- }
506
- async setDisplayActive(value) {
507
- if (this.device.attributes.POWER) {
508
- await this.device.set_attribute({ SCREEN_DISPLAY: !!value });
509
- }
510
- }
511
- getEcoMode() {
512
- return this.device.attributes.POWER === true && this.device.attributes.ECO_MODE;
513
- }
514
- async setEcoMode(value) {
515
- await this.device.set_attribute({ ECO_MODE: !!value });
516
- }
517
- getBreezeAway() {
518
- return this.device.attributes.POWER === true && this.device.attributes.INDIRECT_WIND;
519
- }
520
- async setBreezeAway(value) {
521
- await this.device.set_attribute({ INDIRECT_WIND: !!value });
522
- }
523
- getDryMode() {
524
- return this.device.attributes.POWER === true && this.device.attributes.MODE === 3;
525
- }
526
- async setDryMode(value) {
527
- if (value) {
528
- await this.device.set_attribute({ POWER: true, MODE: 3 });
529
- }
530
- else {
531
- await this.device.set_attribute({ POWER: false, MODE: 0 });
532
- }
533
- }
534
- getBoostMode() {
535
- return this.device.attributes.POWER === true && this.device.attributes.BOOST_MODE;
536
- }
537
- async setBoostMode(value) {
538
- if (value) {
539
- await this.device.set_attribute({ POWER: true, BOOST_MODE: true });
540
- }
541
- else {
542
- await this.device.set_attribute({ BOOST_MODE: false });
543
- }
544
- }
545
- getAux() {
546
- return this.device.attributes.POWER === true && this.device.attributes.SMART_EYE === true;
547
- }
548
- async setAux(value) {
549
- if (value) {
550
- await this.device.set_attribute({ SMART_EYE: true });
551
- }
552
- else {
553
- await this.device.set_attribute({ SMART_EYE: false });
554
- }
555
- }
556
- getAuxHeating() {
557
- return this.device.attributes.POWER === true && this.device.attributes.AUX_HEATING === true;
558
- }
559
- async setAuxHeating(value) {
560
- if (value) {
561
- await this.device.set_attribute({ AUX_HEATING: true });
562
- }
563
- else {
564
- await this.device.set_attribute({ AUX_HEATING: false });
565
- }
566
- }
567
- getSelfCleanState() {
568
- return this.device.attributes.SELF_CLEAN === true;
569
- }
570
- async setSelfCleanState(value) {
571
- await this.device.set_self_clean(value === true);
572
- }
573
- getSwingAngleCurrentPosition() {
574
- const value = this.swingAngleMainControl === platformUtils_1.SwingAngle.VERTICAL
575
- ? this.device.attributes.WIND_SWING_UD_ANGLE
576
- : this.device.attributes.WIND_SWING_LR_ANGLE;
577
- return value === 1 ? 0 : value;
578
- }
579
- getSwingAngleTargetPosition() {
580
- return this.getSwingAngleCurrentPosition();
581
- }
582
- async setSwingAngleTargetPosition(value) {
583
- await this.device.set_swing_angle(this.swingAngleMainControl, Math.max(1, value));
584
- }
585
- getSwingAnglePositionState() {
586
- return this.platform.Characteristic.PositionState.STOPPED;
587
- }
588
- getSwingAngleCurrentHorizontalTiltAngle() {
589
- return this.device.attributes.WIND_SWING_LR_ANGLE === 1 ? 0 : this.device.attributes.WIND_SWING_LR_ANGLE;
590
- }
591
- getSwingAngleTargetHorizontalTiltAngle() {
592
- return this.getSwingAngleCurrentHorizontalTiltAngle();
593
- }
594
- async setSwingAngleTargetHorizontalTiltAngle(value) {
595
- await this.device.set_swing_angle(platformUtils_1.SwingAngle.HORIZONTAL, Math.max(1, value));
596
- }
597
- getSwingAngleCurrentVerticalTiltAngle() {
598
- return this.device.attributes.WIND_SWING_UD_ANGLE === 1 ? 0 : this.device.attributes.WIND_SWING_UD_ANGLE;
599
- }
600
- getSwingAngleTargetVerticalTiltAngle() {
601
- return this.getSwingAngleCurrentVerticalTiltAngle();
602
- }
603
- async setSwingAngleTargetVerticalTiltAngle(value) {
604
- await this.device.set_swing_angle(platformUtils_1.SwingAngle.VERTICAL, Math.max(1, value));
605
- }
606
- }
607
- exports.default = AirConditionerAccessory;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
7
+ const platformUtils_1 = require("../platformUtils");
8
+ class AirConditionerAccessory extends BaseAccessory_1.default {
9
+ /*********************************************************************
10
+ * Constructor registers all the service types with Homebridge, registers
11
+ * a callback function with the MideaDevice class, and requests device status.
12
+ */
13
+ constructor(platform, accessory, device, configDev) {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
15
+ super(platform, accessory, device, configDev);
16
+ this.device = device;
17
+ this.configDev = configDev;
18
+ this.service =
19
+ this.accessory.getService(this.platform.Service.HeaterCooler) || this.accessory.addService(this.platform.Service.HeaterCooler);
20
+ this.service.setCharacteristic(this.platform.Characteristic.Name, this.device.name);
21
+ this.service.getCharacteristic(this.platform.Characteristic.Active).onGet(this.getActive.bind(this)).onSet(this.setActive.bind(this));
22
+ this.service
23
+ .getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
24
+ .onGet(this.getTemperatureDisplayUnits.bind(this))
25
+ .onSet(this.setTemperatureDisplayUnits.bind(this));
26
+ this.service
27
+ .getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
28
+ .onGet(this.getCurrentHeaterCoolerState.bind(this));
29
+ this.service
30
+ .getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
31
+ .onGet(this.getTargetHeaterCoolerState.bind(this))
32
+ .onSet(this.setTargetHeaterCoolerState.bind(this))
33
+ .setProps({
34
+ validValues: this.configDev.AC_options.heatingCapable
35
+ ? [
36
+ this.platform.Characteristic.TargetHeaterCoolerState.AUTO,
37
+ this.platform.Characteristic.TargetHeaterCoolerState.HEAT,
38
+ this.platform.Characteristic.TargetHeaterCoolerState.COOL,
39
+ ]
40
+ : [this.platform.Characteristic.TargetHeaterCoolerState.AUTO, this.platform.Characteristic.TargetHeaterCoolerState.COOL],
41
+ });
42
+ this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature).onGet(this.getCurrentTemperature.bind(this));
43
+ this.service
44
+ .getCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature)
45
+ .onGet(this.getTargetTemperature.bind(this))
46
+ .onSet(this.setTargetTemperature.bind(this))
47
+ .setProps({
48
+ minValue: this.configDev.AC_options.minTemp,
49
+ maxValue: this.configDev.AC_options.maxTemp,
50
+ minStep: this.configDev.AC_options.tempStep,
51
+ });
52
+ this.service
53
+ .getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
54
+ .onGet(this.getTargetTemperature.bind(this))
55
+ .onSet(this.setTargetTemperature.bind(this))
56
+ .setProps({
57
+ minValue: this.configDev.AC_options.minTemp,
58
+ maxValue: this.configDev.AC_options.maxTemp,
59
+ minStep: this.configDev.AC_options.tempStep,
60
+ });
61
+ this.service
62
+ .getCharacteristic(this.platform.Characteristic.RotationSpeed)
63
+ .onGet(this.getRotationSpeed.bind(this))
64
+ .onSet(this.setRotationSpeed.bind(this));
65
+ // Swing modes
66
+ if (this.configDev.AC_options.swing.mode !== platformUtils_1.SwingMode.NONE) {
67
+ this.service
68
+ .getCharacteristic(this.platform.Characteristic.SwingMode)
69
+ .onGet(this.getSwingMode.bind(this))
70
+ .onSet(this.setSwingMode.bind(this));
71
+ }
72
+ // Outdoor temperature sensor
73
+ this.outDoorTemperatureService = this.accessory.getServiceById(this.platform.Service.TemperatureSensor, 'Outdoor');
74
+ if (this.configDev.AC_options.outDoorTemp) {
75
+ (_a = this.outDoorTemperatureService) !== null && _a !== void 0 ? _a : (this.outDoorTemperatureService = this.accessory.addService(this.platform.Service.TemperatureSensor, `${this.device.name} Outdoor`, 'Outdoor'));
76
+ this.outDoorTemperatureService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Outdoor`);
77
+ this.outDoorTemperatureService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Outdoor`);
78
+ this.outDoorTemperatureService
79
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
80
+ .onGet(this.getOutdoorTemperature.bind(this));
81
+ this.outDoorTemperatureService
82
+ .getCharacteristic(this.platform.Characteristic.StatusFault)
83
+ .onGet(() => this.device.attributes.OUTDOOR_TEMPERATURE === undefined
84
+ ? this.platform.Characteristic.StatusFault.GENERAL_FAULT
85
+ : this.platform.Characteristic.StatusFault.NO_FAULT);
86
+ }
87
+ else if (this.outDoorTemperatureService) {
88
+ this.accessory.removeService(this.outDoorTemperatureService);
89
+ }
90
+ // Fan-only mode switch
91
+ this.fanOnlyService = this.accessory.getServiceById(this.platform.Service.Switch, 'FanOnly');
92
+ if (this.configDev.AC_options.fanOnlyModeSwitch) {
93
+ (_b = this.fanOnlyService) !== null && _b !== void 0 ? _b : (this.fanOnlyService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} FanOnly`, 'FanOnly'));
94
+ this.fanOnlyService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Fan-only Mode`);
95
+ this.fanOnlyService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Fan-only Mode`);
96
+ this.fanOnlyService
97
+ .getCharacteristic(this.platform.Characteristic.On)
98
+ .onGet(this.getFanOnlyMode.bind(this))
99
+ .onSet(this.setFanOnlyMode.bind(this));
100
+ }
101
+ else if (this.fanOnlyService) {
102
+ this.accessory.removeService(this.fanOnlyService);
103
+ }
104
+ // Fan accessory
105
+ this.fanService = this.accessory.getServiceById(this.platform.Service.Fanv2, 'Fan');
106
+ if (this.configDev.AC_options.fanAccessory) {
107
+ (_c = this.fanService) !== null && _c !== void 0 ? _c : (this.fanService = this.accessory.addService(this.platform.Service.Fanv2, `${this.device.name} Fan`, 'Fan'));
108
+ this.fanService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Fan`);
109
+ this.fanService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Fan`);
110
+ this.fanService
111
+ .getCharacteristic(this.platform.Characteristic.Active)
112
+ .onGet(this.getActive.bind(this))
113
+ .onSet(this.setActive.bind(this));
114
+ this.fanService
115
+ .getCharacteristic(this.platform.Characteristic.RotationSpeed)
116
+ .onGet(this.getRotationSpeed.bind(this))
117
+ .onSet(this.setRotationSpeed.bind(this));
118
+ this.fanService
119
+ .getCharacteristic(this.platform.Characteristic.TargetFanState)
120
+ .onGet(this.getFanState.bind(this))
121
+ .onSet(this.setFanState.bind(this));
122
+ this.fanService
123
+ .getCharacteristic(this.platform.Characteristic.SwingMode)
124
+ .onGet(this.getSwingMode.bind(this))
125
+ .onSet(this.setSwingMode.bind(this));
126
+ }
127
+ else if (this.fanService) {
128
+ this.accessory.removeService(this.fanService);
129
+ }
130
+ // Display switch
131
+ this.displayService = this.accessory.getServiceById(this.platform.Service.Switch, 'Display');
132
+ if (this.configDev.AC_options.displaySwitch.flag) {
133
+ this.device.set_alternate_switch_display(this.configDev.AC_options.displaySwitch.command);
134
+ (_d = this.displayService) !== null && _d !== void 0 ? _d : (this.displayService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Display`, 'Display'));
135
+ this.displayService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Display`);
136
+ this.displayService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Display`);
137
+ this.displayService
138
+ .getCharacteristic(this.platform.Characteristic.On)
139
+ .onGet(this.getDisplayActive.bind(this))
140
+ .onSet(this.setDisplayActive.bind(this));
141
+ }
142
+ else if (this.displayService) {
143
+ this.accessory.removeService(this.displayService);
144
+ }
145
+ // Eco mode switch
146
+ this.ecoModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'EcoMode');
147
+ if (this.configDev.AC_options.ecoSwitch) {
148
+ (_e = this.ecoModeService) !== null && _e !== void 0 ? _e : (this.ecoModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Eco`, 'EcoMode'));
149
+ this.ecoModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Eco`);
150
+ this.ecoModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Eco`);
151
+ this.ecoModeService
152
+ .getCharacteristic(this.platform.Characteristic.On)
153
+ .onGet(this.getEcoMode.bind(this))
154
+ .onSet(this.setEcoMode.bind(this));
155
+ }
156
+ else if (this.ecoModeService) {
157
+ this.accessory.removeService(this.ecoModeService);
158
+ }
159
+ // Breeze away switch
160
+ this.breezeAwayService = this.accessory.getServiceById(this.platform.Service.Switch, 'BreezeAway');
161
+ if (this.configDev.AC_options.breezeAwaySwitch) {
162
+ (_f = this.breezeAwayService) !== null && _f !== void 0 ? _f : (this.breezeAwayService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Breeze`, 'BreezeAway'));
163
+ this.breezeAwayService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Breeze`);
164
+ this.breezeAwayService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Breeze`);
165
+ this.breezeAwayService
166
+ .getCharacteristic(this.platform.Characteristic.On)
167
+ .onGet(this.getBreezeAway.bind(this))
168
+ .onSet(this.setBreezeAway.bind(this));
169
+ }
170
+ else if (this.breezeAwayService) {
171
+ this.accessory.removeService(this.breezeAwayService);
172
+ }
173
+ // Dry mode switch
174
+ this.dryModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'DryMode');
175
+ if (this.configDev.AC_options.dryModeSwitch) {
176
+ (_g = this.dryModeService) !== null && _g !== void 0 ? _g : (this.dryModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Dry`, 'DryMode'));
177
+ this.dryModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Dry`);
178
+ this.dryModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Dry`);
179
+ this.dryModeService
180
+ .getCharacteristic(this.platform.Characteristic.On)
181
+ .onGet(this.getDryMode.bind(this))
182
+ .onSet(this.setDryMode.bind(this));
183
+ }
184
+ else if (this.dryModeService) {
185
+ this.accessory.removeService(this.dryModeService);
186
+ }
187
+ this.boostModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'BoostMode');
188
+ if (this.configDev.AC_options.boostModeSwitch) {
189
+ (_h = this.boostModeService) !== null && _h !== void 0 ? _h : (this.boostModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Boost`, 'BoostMode'));
190
+ this.boostModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Boost`);
191
+ this.boostModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Boost`);
192
+ this.boostModeService
193
+ .getCharacteristic(this.platform.Characteristic.On)
194
+ .onGet(this.getBoostMode.bind(this))
195
+ .onSet(this.setBoostMode.bind(this));
196
+ }
197
+ else if (this.boostModeService) {
198
+ this.accessory.removeService(this.boostModeService);
199
+ }
200
+ // Aux switch
201
+ this.auxService = this.accessory.getServiceById(this.platform.Service.Switch, 'Aux');
202
+ if (this.configDev.AC_options.auxHeatingSwitches) {
203
+ (_j = this.auxService) !== null && _j !== void 0 ? _j : (this.auxService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Aux`, 'Aux'));
204
+ this.auxService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Aux`);
205
+ this.auxService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Aux`);
206
+ this.auxService.getCharacteristic(this.platform.Characteristic.On).onGet(this.getAux.bind(this)).onSet(this.setAux.bind(this));
207
+ }
208
+ else if (this.auxService) {
209
+ this.accessory.removeService(this.auxService);
210
+ }
211
+ // Aux+Heat switch
212
+ this.auxHeatingService = this.accessory.getServiceById(this.platform.Service.Switch, 'AuxHeating');
213
+ if (this.configDev.AC_options.auxHeatingSwitches) {
214
+ (_k = this.auxHeatingService) !== null && _k !== void 0 ? _k : (this.auxHeatingService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Aux+Heat`, 'AuxHeating'));
215
+ this.auxHeatingService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Aux+Heat`);
216
+ this.auxHeatingService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Aux+Heat`);
217
+ this.auxHeatingService
218
+ .getCharacteristic(this.platform.Characteristic.On)
219
+ .onGet(this.getAuxHeating.bind(this))
220
+ .onSet(this.setAuxHeating.bind(this));
221
+ }
222
+ else if (this.auxHeatingService) {
223
+ this.accessory.removeService(this.auxHeatingService);
224
+ }
225
+ // Self-cleaning switch
226
+ this.selfCleanService = this.accessory.getServiceById(this.platform.Service.Switch, 'SelfClean');
227
+ if (this.configDev.AC_options.selfCleanSwitch) {
228
+ (_l = this.selfCleanService) !== null && _l !== void 0 ? _l : (this.selfCleanService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Self-cleaning`, 'SelfClean'));
229
+ this.selfCleanService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Self-cleaning`);
230
+ this.selfCleanService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Self-cleaning`);
231
+ this.selfCleanService
232
+ .getCharacteristic(this.platform.Characteristic.On)
233
+ .onGet(this.getSelfCleanState.bind(this))
234
+ .onSet(this.setSelfCleanState.bind(this));
235
+ }
236
+ else if (this.selfCleanService) {
237
+ this.accessory.removeService(this.selfCleanService);
238
+ }
239
+ // ION switch
240
+ this.ionService = this.accessory.getServiceById(this.platform.Service.Switch, 'ION');
241
+ if (this.configDev.AC_options.ionSwitch) {
242
+ (_m = this.ionService) !== null && _m !== void 0 ? _m : (this.ionService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} ION`, 'ION'));
243
+ this.ionService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} ION`);
244
+ this.ionService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} ION`);
245
+ this.ionService
246
+ .getCharacteristic(this.platform.Characteristic.On)
247
+ .onGet(this.getIonState.bind(this))
248
+ .onSet(this.setIonState.bind(this));
249
+ }
250
+ else if (this.ionService) {
251
+ this.accessory.removeService(this.ionService);
252
+ }
253
+ // Rate select slider
254
+ this.rateSelectService = this.accessory.getServiceById(this.platform.Service.Lightbulb, 'Gear');
255
+ if (this.configDev.AC_options.rateSelector) {
256
+ (_o = this.rateSelectService) !== null && _o !== void 0 ? _o : (this.rateSelectService = this.accessory.addService(this.platform.Service.Lightbulb, `${this.device.name} Gear`, 'Gear'));
257
+ this.rateSelectService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Gear`);
258
+ this.rateSelectService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Gear`);
259
+ this.rateSelectService
260
+ .getCharacteristic(this.platform.Characteristic.On)
261
+ .onGet(this.getActive.bind(this))
262
+ .onSet(this.setActive.bind(this));
263
+ this.rateSelectService
264
+ .getCharacteristic(this.platform.Characteristic.Brightness)
265
+ .setProps({
266
+ validValues: [0, 50, 75, 100],
267
+ })
268
+ .onGet(this.getRateSelect.bind(this))
269
+ .onSet(this.setRateSelect.bind(this));
270
+ }
271
+ else if (this.rateSelectService) {
272
+ this.accessory.removeService(this.rateSelectService);
273
+ }
274
+ const swingProps = this.configDev.AC_options.swing;
275
+ this.swingAngleMainControl =
276
+ swingProps.mode === platformUtils_1.SwingMode.VERTICAL || (swingProps.mode === platformUtils_1.SwingMode.BOTH && swingProps.angleMainControl === platformUtils_1.SwingAngle.VERTICAL)
277
+ ? platformUtils_1.SwingAngle.VERTICAL
278
+ : platformUtils_1.SwingAngle.HORIZONTAL;
279
+ // Swing angle accessory
280
+ this.swingAngleService = this.accessory.getServiceById(this.platform.Service.WindowCovering, 'SwingAngle');
281
+ if (swingProps.mode !== platformUtils_1.SwingMode.NONE && swingProps.angleAccessory) {
282
+ (_p = this.swingAngleService) !== null && _p !== void 0 ? _p : (this.swingAngleService = this.accessory.addService(this.platform.Service.WindowCovering, `${this.device.name} Swing`, 'SwingAngle'));
283
+ this.swingAngleService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Swing`);
284
+ this.swingAngleService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Swing`);
285
+ this.swingAngleService
286
+ .getCharacteristic(this.platform.Characteristic.CurrentPosition)
287
+ .onGet(this.getSwingAngleCurrentPosition.bind(this));
288
+ this.swingAngleService
289
+ .getCharacteristic(this.platform.Characteristic.TargetPosition)
290
+ .onGet(this.getSwingAngleTargetPosition.bind(this))
291
+ .onSet(this.setSwingAngleTargetPosition.bind(this));
292
+ this.swingAngleService
293
+ .getCharacteristic(this.platform.Characteristic.PositionState)
294
+ .onGet(this.getSwingAnglePositionState.bind(this));
295
+ if (swingProps.mode === platformUtils_1.SwingMode.BOTH) {
296
+ this.swingAngleService
297
+ .getCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle)
298
+ .onGet(this.getSwingAngleCurrentHorizontalTiltAngle.bind(this));
299
+ this.swingAngleService
300
+ .getCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle)
301
+ .onGet(this.getSwingAngleTargetHorizontalTiltAngle.bind(this))
302
+ .onSet(this.setSwingAngleTargetHorizontalTiltAngle.bind(this));
303
+ this.swingAngleService
304
+ .getCharacteristic(this.platform.Characteristic.CurrentVerticalTiltAngle)
305
+ .onGet(this.getSwingAngleCurrentVerticalTiltAngle.bind(this));
306
+ this.swingAngleService
307
+ .getCharacteristic(this.platform.Characteristic.TargetVerticalTiltAngle)
308
+ .onGet(this.getSwingAngleTargetVerticalTiltAngle.bind(this))
309
+ .onSet(this.setSwingAngleTargetVerticalTiltAngle.bind(this));
310
+ }
311
+ }
312
+ // Misc
313
+ this.device.attributes.PROMPT_TONE = this.configDev.AC_options.audioFeedback;
314
+ this.device.attributes.TEMP_FAHRENHEIT = this.configDev.AC_options.fahrenheit;
315
+ }
316
+ /*********************************************************************
317
+ * Callback function called by MideaDevice whenever there is a change to
318
+ * any attribute value.
319
+ */
320
+ async updateCharacteristics(attributes) {
321
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
322
+ for (const [k, v] of Object.entries(attributes)) {
323
+ this.platform.log.debug(`[${this.device.name}] Set attribute ${k} to: ${v}`);
324
+ let updateState = false;
325
+ switch (k.toLowerCase()) {
326
+ case 'power':
327
+ updateState = true;
328
+ break;
329
+ case 'temp_fahrenheit':
330
+ this.service.updateCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits, this.getTemperatureDisplayUnits());
331
+ break;
332
+ case 'screen_display':
333
+ case 'screen_display_new':
334
+ (_a = this.displayService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.On, this.getDisplayActive());
335
+ break;
336
+ case 'target_temperature':
337
+ // If MODE is 4 then device is heating. Therefore target temperature value must be heating target? Right?
338
+ if (this.device.attributes.MODE === 4) {
339
+ this.service.updateCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature, this.getTargetTemperature());
340
+ }
341
+ else {
342
+ this.service.updateCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature, this.getTargetTemperature());
343
+ }
344
+ updateState = true;
345
+ break;
346
+ case 'indoor_temperature':
347
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getCurrentTemperature());
348
+ break;
349
+ case 'outdoor_temperature':
350
+ (_b = this.outDoorTemperatureService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getOutdoorTemperature());
351
+ break;
352
+ case 'fan_speed':
353
+ updateState = true;
354
+ break;
355
+ case 'fan_auto':
356
+ (_c = this.fanService) === null || _c === void 0 ? void 0 : _c.updateCharacteristic(this.platform.Characteristic.TargetFanState, this.getFanState());
357
+ break;
358
+ case 'swing_vertical':
359
+ case 'swing_horizontal':
360
+ this.service.updateCharacteristic(this.platform.Characteristic.SwingMode, this.getSwingMode());
361
+ break;
362
+ case 'mode':
363
+ updateState = true;
364
+ break;
365
+ case 'eco_mode':
366
+ (_d = this.ecoModeService) === null || _d === void 0 ? void 0 : _d.updateCharacteristic(this.platform.Characteristic.On, this.getEcoMode());
367
+ break;
368
+ case 'indirect_wind':
369
+ (_e = this.breezeAwayService) === null || _e === void 0 ? void 0 : _e.updateCharacteristic(this.platform.Characteristic.On, this.getBreezeAway());
370
+ break;
371
+ case 'aux_heating':
372
+ (_f = this.auxHeatingService) === null || _f === void 0 ? void 0 : _f.updateCharacteristic(this.platform.Characteristic.On, this.getAuxHeating());
373
+ break;
374
+ case 'smart_eye':
375
+ (_g = this.auxService) === null || _g === void 0 ? void 0 : _g.updateCharacteristic(this.platform.Characteristic.On, this.getAux());
376
+ break;
377
+ case 'wind_swing_lr_angle':
378
+ case 'wind_swing_ud_angle':
379
+ (_h = this.swingAngleService) === null || _h === void 0 ? void 0 : _h.updateCharacteristic(this.platform.Characteristic.CurrentPosition, this.getSwingAngleCurrentPosition());
380
+ (_j = this.swingAngleService) === null || _j === void 0 ? void 0 : _j.updateCharacteristic(this.platform.Characteristic.TargetPosition, this.getSwingAngleTargetPosition());
381
+ if (this.configDev.AC_options.swing.mode === platformUtils_1.SwingMode.BOTH) {
382
+ (_k = this.swingAngleService) === null || _k === void 0 ? void 0 : _k.updateCharacteristic(this.platform.Characteristic.CurrentHorizontalTiltAngle, this.getSwingAngleCurrentHorizontalTiltAngle());
383
+ (_l = this.swingAngleService) === null || _l === void 0 ? void 0 : _l.updateCharacteristic(this.platform.Characteristic.CurrentVerticalTiltAngle, this.getSwingAngleCurrentVerticalTiltAngle());
384
+ (_m = this.swingAngleService) === null || _m === void 0 ? void 0 : _m.updateCharacteristic(this.platform.Characteristic.TargetHorizontalTiltAngle, this.getSwingAngleTargetHorizontalTiltAngle());
385
+ (_o = this.swingAngleService) === null || _o === void 0 ? void 0 : _o.updateCharacteristic(this.platform.Characteristic.TargetVerticalTiltAngle, this.getSwingAngleTargetVerticalTiltAngle());
386
+ }
387
+ break;
388
+ case 'self_clean':
389
+ updateState = true;
390
+ (_p = this.selfCleanService) === null || _p === void 0 ? void 0 : _p.updateCharacteristic(this.platform.Characteristic.On, this.getSelfCleanState());
391
+ break;
392
+ case 'ion':
393
+ (_q = this.ionService) === null || _q === void 0 ? void 0 : _q.updateCharacteristic(this.platform.Characteristic.On, this.getIonState());
394
+ break;
395
+ case 'rate_select':
396
+ (_r = this.rateSelectService) === null || _r === void 0 ? void 0 : _r.updateCharacteristic(this.platform.Characteristic.Brightness, this.getRateSelect());
397
+ break;
398
+ default:
399
+ this.platform.log.debug(`[${this.device.name}] Attempt to set unsupported attribute ${k} to ${v}`);
400
+ }
401
+ if (updateState) {
402
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
403
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState, this.getTargetHeaterCoolerState());
404
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState, this.getCurrentHeaterCoolerState());
405
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed());
406
+ (_s = this.fanOnlyService) === null || _s === void 0 ? void 0 : _s.updateCharacteristic(this.platform.Characteristic.On, this.getFanOnlyMode());
407
+ (_t = this.fanService) === null || _t === void 0 ? void 0 : _t.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
408
+ (_u = this.fanService) === null || _u === void 0 ? void 0 : _u.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed());
409
+ (_v = this.dryModeService) === null || _v === void 0 ? void 0 : _v.updateCharacteristic(this.platform.Characteristic.On, this.getDryMode());
410
+ (_w = this.displayService) === null || _w === void 0 ? void 0 : _w.updateCharacteristic(this.platform.Characteristic.On, this.getDisplayActive());
411
+ (_x = this.ecoModeService) === null || _x === void 0 ? void 0 : _x.updateCharacteristic(this.platform.Characteristic.On, this.getEcoMode());
412
+ (_y = this.breezeAwayService) === null || _y === void 0 ? void 0 : _y.updateCharacteristic(this.platform.Characteristic.On, this.getBreezeAway());
413
+ (_z = this.auxService) === null || _z === void 0 ? void 0 : _z.updateCharacteristic(this.platform.Characteristic.On, this.getAux());
414
+ (_0 = this.auxHeatingService) === null || _0 === void 0 ? void 0 : _0.updateCharacteristic(this.platform.Characteristic.On, this.getAuxHeating());
415
+ }
416
+ }
417
+ }
418
+ /*********************************************************************
419
+ * Callback functions for each Homebridge/HomeKit service
420
+ *
421
+ */
422
+ getActive() {
423
+ // Show as inactive if device is off
424
+ return this.device.attributes.POWER ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
425
+ }
426
+ async setActive(value) {
427
+ var _a;
428
+ await this.device.set_attribute({ POWER: !!value });
429
+ this.device.attributes.SCREEN_DISPLAY = !!value;
430
+ (_a = this.displayService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.On, !!value);
431
+ }
432
+ getTemperatureDisplayUnits() {
433
+ return this.device.attributes.TEMP_FAHRENHEIT
434
+ ? this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT
435
+ : this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS;
436
+ }
437
+ async setTemperatureDisplayUnits(value) {
438
+ await this.device.set_attribute({ TEMP_FAHRENHEIT: value === this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT });
439
+ }
440
+ getCurrentHeaterCoolerState() {
441
+ var _a;
442
+ if (this.device.attributes.POWER && this.device.attributes.MODE > 0 && this.device.attributes.MODE < 5) {
443
+ if (this.device.attributes.TARGET_TEMPERATURE < ((_a = this.device.attributes.INDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : 0)) {
444
+ if ([1, 2].includes(this.device.attributes.MODE)) {
445
+ return this.platform.Characteristic.CurrentHeaterCoolerState.COOLING;
446
+ }
447
+ else {
448
+ return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
449
+ }
450
+ }
451
+ else if (this.device.attributes.TARGET_TEMPERATURE === this.device.attributes.INDOOR_TEMPERATURE) {
452
+ return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
453
+ }
454
+ else {
455
+ if (this.device.attributes.MODE === 4) {
456
+ return this.platform.Characteristic.CurrentHeaterCoolerState.HEATING;
457
+ }
458
+ else {
459
+ return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
460
+ }
461
+ }
462
+ }
463
+ else {
464
+ return this.platform.Characteristic.CurrentHeaterCoolerState.INACTIVE;
465
+ }
466
+ }
467
+ getTargetHeaterCoolerState() {
468
+ if (this.device.attributes.MODE === 2) {
469
+ return this.platform.Characteristic.TargetHeaterCoolerState.COOL;
470
+ }
471
+ else if (this.device.attributes.MODE === 4) {
472
+ return this.platform.Characteristic.TargetHeaterCoolerState.HEAT;
473
+ }
474
+ else {
475
+ return this.platform.Characteristic.TargetHeaterCoolerState.AUTO;
476
+ }
477
+ }
478
+ async setTargetHeaterCoolerState(value) {
479
+ switch (value) {
480
+ case this.platform.Characteristic.TargetHeaterCoolerState.AUTO:
481
+ await this.device.set_attribute({ POWER: true, MODE: 1 });
482
+ break;
483
+ case this.platform.Characteristic.TargetHeaterCoolerState.COOL:
484
+ await this.device.set_attribute({ POWER: true, MODE: 2 });
485
+ break;
486
+ case this.platform.Characteristic.TargetHeaterCoolerState.HEAT:
487
+ await this.device.set_attribute({ POWER: true, MODE: 4 });
488
+ break;
489
+ }
490
+ }
491
+ getCurrentTemperature() {
492
+ var _a;
493
+ return (_a = this.device.attributes.INDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : this.configDev.AC_options.minTemp;
494
+ }
495
+ getTargetTemperature() {
496
+ return Math.max(this.configDev.AC_options.minTemp, Math.min(this.configDev.AC_options.maxTemp, this.device.attributes.TARGET_TEMPERATURE));
497
+ }
498
+ getFanOnlyMode() {
499
+ return this.device.attributes.POWER === true && this.device.attributes.MODE === 5;
500
+ }
501
+ async setFanOnlyMode(value) {
502
+ if (value) {
503
+ await this.device.set_attribute({ POWER: true, MODE: 5 });
504
+ }
505
+ else {
506
+ await this.device.set_attribute({ POWER: false, MODE: 0 });
507
+ }
508
+ }
509
+ getFanState() {
510
+ return this.device.attributes.FAN_AUTO;
511
+ }
512
+ async setFanState(value) {
513
+ await this.device.set_fan_auto(value === this.platform.Characteristic.TargetFanState.AUTO);
514
+ }
515
+ async setTargetTemperature(value) {
516
+ value = Math.max(this.configDev.AC_options.minTemp, Math.min(this.configDev.AC_options.maxTemp, value));
517
+ await this.device.set_target_temperature(value);
518
+ }
519
+ getSwingMode() {
520
+ return this.device.attributes.SWING_HORIZONTAL || this.device.attributes.SWING_VERTICAL
521
+ ? this.platform.Characteristic.SwingMode.SWING_ENABLED
522
+ : this.platform.Characteristic.SwingMode.SWING_DISABLED;
523
+ }
524
+ async setSwingMode(value) {
525
+ switch (value) {
526
+ case this.platform.Characteristic.SwingMode.SWING_ENABLED:
527
+ await this.device.set_swing([platformUtils_1.SwingMode.HORIZONTAL, platformUtils_1.SwingMode.BOTH].includes(this.configDev.AC_options.swing.mode), [platformUtils_1.SwingMode.VERTICAL, platformUtils_1.SwingMode.BOTH].includes(this.configDev.AC_options.swing.mode));
528
+ break;
529
+ case this.platform.Characteristic.SwingMode.SWING_DISABLED:
530
+ await this.device.set_swing(false, false);
531
+ break;
532
+ }
533
+ }
534
+ getRotationSpeed() {
535
+ var _a;
536
+ return Math.min(100, (_a = this.device.attributes.FAN_SPEED) !== null && _a !== void 0 ? _a : 0);
537
+ }
538
+ async setRotationSpeed(value) {
539
+ await this.device.set_attribute({ FAN_SPEED: value });
540
+ }
541
+ getOutdoorTemperature() {
542
+ var _a;
543
+ return (_a = this.device.attributes.OUTDOOR_TEMPERATURE) !== null && _a !== void 0 ? _a : -270;
544
+ }
545
+ getDisplayActive() {
546
+ return this.device.attributes.SCREEN_DISPLAY === true;
547
+ }
548
+ async setDisplayActive(value) {
549
+ if (this.device.attributes.POWER) {
550
+ await this.device.set_attribute({ SCREEN_DISPLAY: !!value });
551
+ }
552
+ }
553
+ getEcoMode() {
554
+ return this.device.attributes.POWER === true && this.device.attributes.ECO_MODE;
555
+ }
556
+ async setEcoMode(value) {
557
+ await this.device.set_attribute({ ECO_MODE: !!value });
558
+ }
559
+ getBreezeAway() {
560
+ return this.device.attributes.POWER === true && this.device.attributes.INDIRECT_WIND;
561
+ }
562
+ async setBreezeAway(value) {
563
+ await this.device.set_attribute({ INDIRECT_WIND: !!value });
564
+ }
565
+ getDryMode() {
566
+ return this.device.attributes.POWER === true && this.device.attributes.MODE === 3;
567
+ }
568
+ async setDryMode(value) {
569
+ if (value) {
570
+ await this.device.set_attribute({ POWER: true, MODE: 3 });
571
+ }
572
+ else {
573
+ await this.device.set_attribute({ POWER: false, MODE: 0 });
574
+ }
575
+ }
576
+ getBoostMode() {
577
+ return this.device.attributes.POWER === true && this.device.attributes.BOOST_MODE;
578
+ }
579
+ async setBoostMode(value) {
580
+ if (value) {
581
+ await this.device.set_attribute({ POWER: true, BOOST_MODE: true });
582
+ }
583
+ else {
584
+ await this.device.set_attribute({ BOOST_MODE: false });
585
+ }
586
+ }
587
+ getAux() {
588
+ return this.device.attributes.POWER === true && this.device.attributes.SMART_EYE === true;
589
+ }
590
+ async setAux(value) {
591
+ if (value) {
592
+ await this.device.set_attribute({ SMART_EYE: true });
593
+ }
594
+ else {
595
+ await this.device.set_attribute({ SMART_EYE: false });
596
+ }
597
+ }
598
+ getAuxHeating() {
599
+ return this.device.attributes.POWER === true && this.device.attributes.AUX_HEATING === true;
600
+ }
601
+ async setAuxHeating(value) {
602
+ if (value) {
603
+ await this.device.set_attribute({ AUX_HEATING: true });
604
+ }
605
+ else {
606
+ await this.device.set_attribute({ AUX_HEATING: false });
607
+ }
608
+ }
609
+ getSelfCleanState() {
610
+ return this.device.attributes.SELF_CLEAN === true;
611
+ }
612
+ async setSelfCleanState(value) {
613
+ await this.device.set_self_clean(value === true);
614
+ }
615
+ getIonState() {
616
+ return this.device.attributes.POWER === true && this.device.attributes.ION === true;
617
+ }
618
+ async setIonState(value) {
619
+ await this.device.set_ion(value === true);
620
+ }
621
+ getRateSelect() {
622
+ var _a;
623
+ return (_a = this.device.attributes.RATE_SELECT) !== null && _a !== void 0 ? _a : 100;
624
+ }
625
+ async setRateSelect(value) {
626
+ await this.device.set_rate_select(value);
627
+ }
628
+ getSwingAngleCurrentPosition() {
629
+ const value = this.swingAngleMainControl === platformUtils_1.SwingAngle.VERTICAL
630
+ ? this.device.attributes.WIND_SWING_UD_ANGLE
631
+ : this.device.attributes.WIND_SWING_LR_ANGLE;
632
+ return value === 1 ? 0 : value;
633
+ }
634
+ getSwingAngleTargetPosition() {
635
+ return this.getSwingAngleCurrentPosition();
636
+ }
637
+ async setSwingAngleTargetPosition(value) {
638
+ await this.device.set_swing_angle(this.swingAngleMainControl, Math.max(1, value));
639
+ }
640
+ getSwingAnglePositionState() {
641
+ return this.platform.Characteristic.PositionState.STOPPED;
642
+ }
643
+ getSwingAngleCurrentHorizontalTiltAngle() {
644
+ return this.device.attributes.WIND_SWING_LR_ANGLE === 1 ? 0 : this.device.attributes.WIND_SWING_LR_ANGLE;
645
+ }
646
+ getSwingAngleTargetHorizontalTiltAngle() {
647
+ return this.getSwingAngleCurrentHorizontalTiltAngle();
648
+ }
649
+ async setSwingAngleTargetHorizontalTiltAngle(value) {
650
+ await this.device.set_swing_angle(platformUtils_1.SwingAngle.HORIZONTAL, Math.max(1, value));
651
+ }
652
+ getSwingAngleCurrentVerticalTiltAngle() {
653
+ return this.device.attributes.WIND_SWING_UD_ANGLE === 1 ? 0 : this.device.attributes.WIND_SWING_UD_ANGLE;
654
+ }
655
+ getSwingAngleTargetVerticalTiltAngle() {
656
+ return this.getSwingAngleCurrentVerticalTiltAngle();
657
+ }
658
+ async setSwingAngleTargetVerticalTiltAngle(value) {
659
+ await this.device.set_swing_angle(platformUtils_1.SwingAngle.VERTICAL, Math.max(1, value));
660
+ }
661
+ }
662
+ exports.default = AirConditionerAccessory;
608
663
  //# sourceMappingURL=AirConditionerAccessory.js.map