homebridge-melcloud-control 4.0.0-beta.101 → 4.0.0-beta.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  [![GitHub pull requests](https://img.shields.io/github/issues-pr/grzegorz914/homebridge-melcloud-control.svg)](https://github.com/grzegorz914/homebridge-melcloud-control/pulls)
14
14
  [![GitHub issues](https://img.shields.io/github/issues/grzegorz914/homebridge-melcloud-control.svg)](https://github.com/grzegorz914/homebridge-melcloud-control/issues)
15
15
 
16
- Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation Lossnay, manufactured by Mistsubishi and connected to MELCloud.
16
+ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation Lossnay, manufactured by Mistsubishi and connected to MELCloud or MELCloud Home.
17
17
 
18
18
  </span>
19
19
 
@@ -21,14 +21,14 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
21
21
 
22
22
  | Package | Installation | Role | Required |
23
23
  | --- | --- | --- | --- |
24
- | [Homebridge v2.0](https://github.com/homebridge/homebridge) | [Homebridge Wiki](https://github.com/homebridge/homebridge/wiki) | HomeKit Bridge | Required ab v3.0.0 |
25
- | [Config UI X](https://github.com/homebridge/homebridge-config-ui-x) | [Config UI X Wiki](https://github.com/homebridge/homebridge-config-ui-x/wiki) | Homebridge Web User Interface | Required ab v3.0.0|
24
+ | [Homebridge](https://github.com/homebridge/homebridge) | [Homebridge Wiki](https://github.com/homebridge/homebridge/wiki) | HomeKit Bridge | Required |
25
+ | [Homebridge UI](https://github.com/homebridge/homebridge-config-ui-x) | [Config UI X Wiki](https://github.com/homebridge/homebridge-config-ui-x/wiki) | Homebridge Web User Interface | Required |
26
26
  | [MELCloud](https://github.com/grzegorz914/homebridge-melcloud-control) | [Plug-In Wiki](https://github.com/grzegorz914/homebridge-melcloud-control/wiki) | Homebridge Plug-In | Required |
27
27
 
28
28
  ### About The Plugin
29
29
 
30
30
  * All devices are detected automatically.
31
- * Control devices over MELCloud server.
31
+ * Control devices over MELCloud and MELCloud Home.
32
32
  * Support multiple accounts, buildings, floors, areas.
33
33
  * Support temperature display units `Celsius/Fahrenheit`.
34
34
  * Support assing inividual operating mode for `Heat/Cool/Auto`.
@@ -187,7 +187,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
187
187
  ### Configuration
188
188
 
189
189
  * Run this plugin as a [Child Bridge](https://github.com/homebridge/homebridge/wiki/Child-Bridges) (Highly Recommended), this prevent crash Homebridge if plugin crashes.
190
- * Install and use [Homebridge Config UI X](https://github.com/homebridge/homebridge-config-ui-x/wiki) to configure this plugin, required for version v3 and above.
190
+ * Install and use [Homebridge UI](https://github.com/homebridge/homebridge-config-ui-x/wiki) to configure this plugin, required for version v3 and above.
191
191
  * The `sample-config.json` can be edited and used as an alternative.
192
192
 
193
193
  <p align="center">
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.0.0-beta.101",
4
+ "version": "4.0.0-beta.102",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
package/src/constants.js CHANGED
@@ -18,7 +18,6 @@ export const ApiUrls = {
18
18
  };
19
19
 
20
20
  export const ApiUrlsHome = {
21
- LoginUrl: "https://live-melcloudhome.auth.eu-west-1.amazoncognito.com/login?client_id=3g4d5l5kivuqi7oia68gib7uso&redirect_uri=https%3A%2F%2Fauth.melcloudhome.com%2Fsignin-oidc-meu&response_type=code&scope=openid%20profile&response_mode=form_post",
22
21
  BaseURL: 'https://melcloudhome.com',
23
22
  GetUserContext: "/api/user/context",
24
23
  SetAta: "/api/ataunit/deviceid",
package/src/deviceata.js CHANGED
@@ -155,67 +155,67 @@ class DeviceAta extends EventEmitter {
155
155
  case 'Power':
156
156
  deviceData.Device[key] = value;
157
157
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Power;
158
- set = await this.melCloudAta.send(deviceData, this.displayMode);
158
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
159
159
  break;
160
160
  case 'OperationMode':
161
161
  deviceData.Device[key] = value;
162
162
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.OperationModeSetTemperature;
163
- set = await this.melCloudAta.send(deviceData, this.displayMode);
163
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
164
164
  break;
165
165
  case 'SetTemperature':
166
166
  deviceData.Device[key] = value;
167
167
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
168
- set = await this.melCloudAta.send(deviceData, this.displayMode);
168
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
169
169
  break;
170
170
  case 'DefaultCoolingSetTemperature':
171
171
  deviceData.Device[key] = value;
172
172
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
173
- set = await this.melCloudAta.send(deviceData, this.displayMode);
173
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
174
174
  break;
175
175
  case 'DefaultHeatingSetTemperature':
176
176
  deviceData.Device[key] = value;
177
177
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
178
- set = await this.melCloudAta.send(deviceData, this.displayMode);
178
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
179
179
  break;
180
180
  case 'FanSpeed':
181
181
  deviceData.Device[key] = value;
182
182
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetFanSpeed;
183
- set = await this.melCloudAta.send(deviceData, this.displayMode);
183
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
184
184
  break;
185
185
  case 'VaneHorizontalDirection':
186
186
  deviceData.Device[key] = value;
187
187
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneHorizontal;
188
- set = await this.melCloudAta.send(deviceData, this.displayMode);
188
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
189
189
  break;
190
190
  case 'VaneVerticalDirection':
191
191
  deviceData.Device[key] = value;
192
192
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneVertical;
193
- set = await this.melCloudAta.send(deviceData, this.displayMode);
193
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
194
194
  break;
195
195
  case 'HideVaneControls':
196
196
  deviceData[key] = value;
197
197
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
198
- set = await this.melCloudAta.send(deviceData, this.displayMode);
198
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
199
199
  break;
200
200
  case 'HideDryModeControl':
201
201
  deviceData[key] = value;
202
202
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
203
- await this.melCloudAta.send(deviceData, this.displayMode);
203
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
204
204
  break;
205
205
  case 'ProhibitSetTemperature':
206
206
  deviceData.Device[key] = value;
207
207
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
208
- set = await this.melCloudAta.send(deviceData, this.displayMode);
208
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
209
209
  break;
210
210
  case 'ProhibitOperationMode':
211
211
  deviceData.Device[key] = value;
212
212
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
213
- await this.melCloudAta.send(deviceData, this.displayMode);
213
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
214
214
  break;
215
215
  case 'ProhibitPower':
216
216
  deviceData.Device[key] = value;
217
217
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
218
- set = await this.melCloudAta.send(deviceData, this.displayMode);
218
+ set = await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
219
219
  break;
220
220
  default:
221
221
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
@@ -291,7 +291,7 @@ class DeviceAta extends EventEmitter {
291
291
  try {
292
292
  deviceData.Device.Power = [false, true][state];
293
293
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Power;
294
- await this.melCloudAta.send(deviceData, this.displayMode);
294
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
295
295
  if (this.logInfo) this.emit('info', `Set power: ${state ? 'ON' : 'OFF'}`);
296
296
  } catch (error) {
297
297
  if (this.logWarn) this.emit('warn', `Set power error: ${error}`);
@@ -327,7 +327,7 @@ class DeviceAta extends EventEmitter {
327
327
  };
328
328
 
329
329
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.OperationModeSetTemperature;
330
- await this.melCloudAta.send(deviceData, this.displayMode);
330
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
331
331
  const operationModeText = AirConditioner.OperationMode[deviceData.Device.OperationMode];
332
332
  if (this.logInfo) this.emit('info', `Set operation mode: ${operationModeText}`);
333
333
  } catch (error) {
@@ -376,7 +376,7 @@ class DeviceAta extends EventEmitter {
376
376
  break;
377
377
  };
378
378
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetFanSpeed;
379
- await this.melCloudAta.send(deviceData, this.displayMode);
379
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
380
380
  if (this.logInfo) this.emit('info', `Set fan speed mode: ${AirConditioner.FanSpeed[fanSpeedModeText]}`);
381
381
  } catch (error) {
382
382
  if (this.logWarn) this.emit('warn', `Set fan speed mode error: ${error}`);
@@ -395,7 +395,7 @@ class DeviceAta extends EventEmitter {
395
395
  deviceData.Device.VaneHorizontal = value ? 12 : 0;
396
396
  deviceData.Device.VaneVertical = value ? 7 : 0;
397
397
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneVerticalVaneHorizontal;
398
- await this.melCloudAta.send(deviceData, this.displayMode);
398
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
399
399
  if (this.logInfo) this.emit('info', `Set air direction mode: ${AirConditioner.AirDirection[value]}`);
400
400
  } catch (error) {
401
401
  if (this.logWarn) this.emit('warn', `Set vane swing mode error: ${error}`);
@@ -416,7 +416,7 @@ class DeviceAta extends EventEmitter {
416
416
  try {
417
417
  deviceData.Device.DefaultCoolingSetTemperature = value;
418
418
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
419
- await this.melCloudAta.send(deviceData, this.displayMode);
419
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
420
420
  if (this.logInfo) this.emit('info', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
421
421
  } catch (error) {
422
422
  if (this.logWarn) this.emit('warn', `Set cooling threshold temperature error: ${error}`);
@@ -437,7 +437,7 @@ class DeviceAta extends EventEmitter {
437
437
  try {
438
438
  deviceData.Device.DefaultHeatingSetTemperature = value;
439
439
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
440
- await this.melCloudAta.send(deviceData, this.displayMode);
440
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
441
441
  if (this.logInfo) this.emit('info', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
442
442
  } catch (error) {
443
443
  if (this.logWarn) this.emit('warn', `Set heating threshold temperature error: ${error}`);
@@ -456,7 +456,7 @@ class DeviceAta extends EventEmitter {
456
456
  deviceData.Device.ProhibitOperationMode = value;
457
457
  deviceData.Device.ProhibitPower = value;
458
458
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
459
- await this.melCloudAta.send(deviceData, this.displayMode);
459
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
460
460
  if (this.logInfo) this.emit('info', `Set local physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
461
461
  } catch (error) {
462
462
  if (this.logWarn) this.emit('warn', `Set lock physical controls error: ${error}`);
@@ -522,7 +522,7 @@ class DeviceAta extends EventEmitter {
522
522
  break;
523
523
  };
524
524
 
525
- await this.melCloudAta.send(deviceData, this.displayMode);
525
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
526
526
  const operationModeText = AirConditioner.OperationMode[deviceData.Device.OperationMode];
527
527
  if (this.logInfo) this.emit('info', `Set operation mode: ${operationModeText}`);
528
528
  } catch (error) {
@@ -548,7 +548,7 @@ class DeviceAta extends EventEmitter {
548
548
  try {
549
549
  deviceData.Device.SetTemperature = value;
550
550
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
551
- await this.melCloudAta.send(deviceData, this.displayMode);
551
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
552
552
  if (this.logInfo) this.emit('info', `Set temperature: ${value}${this.accessory.temperatureUnit}`);
553
553
  } catch (error) {
554
554
  if (this.logWarn) this.emit('warn', `Set temperature error: ${error}`);
@@ -658,7 +658,7 @@ class DeviceAta extends EventEmitter {
658
658
  break;
659
659
  };
660
660
 
661
- await this.melCloudAta.send(deviceData, this.displayMode);
661
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
662
662
  if (this.logInfo) this.emit('info', `${state ? 'Set:' : 'Unset:'} ${name}`);
663
663
  } catch (error) {
664
664
  if (this.logWarn) this.emit('warn', `Set preset error: ${error}`);
@@ -898,7 +898,7 @@ class DeviceAta extends EventEmitter {
898
898
  break;
899
899
  };
900
900
 
901
- await this.melCloudAta.send(deviceData, this.displayMode);
901
+ await this.melCloudAta.send(this.displayType, deviceData, this.displayMode);
902
902
  if (this.logInfo) this.emit('info', `${state ? `Set: ${name}` : `Unset: ${name}, Set: ${button.previousValue}`}`);
903
903
  } catch (error) {
904
904
  if (this.logWarn) this.emit('warn', `Set button error: ${error}`);
@@ -3,7 +3,7 @@ import axios from 'axios';
3
3
  import EventEmitter from 'events';
4
4
  import ImpulseGenerator from './impulsegenerator.js';
5
5
  import Functions from './functions.js';
6
- import { ApiUrls } from './constants.js';
6
+ import { ApiUrls, ApiUrlsHome } from './constants.js';
7
7
 
8
8
  class MelCloudAta extends EventEmitter {
9
9
  constructor(device, contextKey, devicesFile) {
@@ -18,19 +18,44 @@ class MelCloudAta extends EventEmitter {
18
18
  //set default values
19
19
  this.deviceState = {};
20
20
 
21
+ this.axiosDefaults = {
22
+ timeout: 25000,
23
+ maxContentLength: 100000000,
24
+ maxBodyLength: 1000000000,
25
+ httpsAgent: new Agent({
26
+ keepAlive: false,
27
+ rejectUnauthorized: false
28
+ })
29
+ };
30
+
21
31
  this.axiosInstancePost = axios.create({
22
32
  method: 'POST',
23
33
  baseURL: ApiUrls.BaseURL,
24
- timeout: 25000,
25
34
  headers: {
26
35
  'X-MitsContextKey': contextKey,
27
36
  'content-type': 'application/json'
28
37
  },
29
38
  withCredentials: true,
30
- httpsAgent: new Agent({
31
- keepAlive: false,
32
- rejectUnauthorized: false
33
- })
39
+ ...this.axiosDefaults
40
+ });
41
+
42
+ this.axiosInstancePut = axios.create({
43
+ method: 'PUT',
44
+ baseURL: ApiUrlsHome.BaseURL,
45
+ headers: {
46
+ 'Accept': '*/*',
47
+ 'Accept-Language': 'en-US,en;q=0.9',
48
+ 'Cookie': contextKey,
49
+ 'User-Agent': 'homebridge-melcloud-control/4.0.0',
50
+ 'DNT': '1',
51
+ 'Origin': 'https://melcloudhome.com',
52
+ 'Referer': 'https://melcloudhome.com/dashboard',
53
+ 'Sec-Fetch-Dest': 'empty',
54
+ 'Sec-Fetch-Mode': 'cors',
55
+ 'Sec-Fetch-Site': 'same-origin',
56
+ 'X-CSRF': '1'
57
+ },
58
+ ...this.axiosDefaults
34
59
  });
35
60
 
36
61
  //lock flags
@@ -206,76 +231,138 @@ class MelCloudAta extends EventEmitter {
206
231
  };
207
232
  };
208
233
 
209
- async send(deviceData, displayMode) {
210
- try {
211
- //set target temp based on display mode and operation mode
212
- switch (displayMode) {
213
- case 1: //Heather/Cooler
214
- switch (deviceData.Device.OperationMode) {
215
- case 1: //HEAT
216
- deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
217
- break;
218
- case 2: //DRY
219
- deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
220
- break;
221
- case 3: //COOL
222
- deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
223
- break;
224
- case 7: //FAN
234
+ updateData(deviceData) {
235
+ setTimeout(() => {
236
+ this.emit('deviceState', deviceData);
237
+ }, 500);
238
+ }
239
+
240
+ async send(displayType, deviceData, displayMode) {
241
+ switch (displayType) {
242
+ case "melcloud":
243
+ try {
244
+ //set target temp based on display mode and operation mode
245
+ switch (displayMode) {
246
+ case 1: //Heather/Cooler
247
+ switch (deviceData.Device.OperationMode) {
248
+ case 1: //HEAT
249
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
250
+ break;
251
+ case 2: //DRY
252
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
253
+ break;
254
+ case 3: //COOL
255
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
256
+ break;
257
+ case 7: //FAN
258
+ deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
259
+ break;
260
+ case 8: //AUTO
261
+ const setTemperature = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
262
+ deviceData.Device.SetTemperature = setTemperature;
263
+ break;
264
+ case 9: //HISEE HEAT
265
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
266
+ break;
267
+ case 10: //ISEE DRY
268
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
269
+ break;
270
+ case 11: //ISEE COOL
271
+ deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
272
+ break;
273
+ };
274
+ case 2: //Thermostat
225
275
  deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
226
276
  break;
227
- case 8: //AUTO
228
- const setTemperature = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
229
- deviceData.Device.SetTemperature = setTemperature;
230
- break;
231
- case 9: //HISEE HEAT
232
- deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
233
- break;
234
- case 10: //ISEE DRY
235
- deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
236
- break;
237
- case 11: //ISEE COOL
238
- deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
239
- break;
240
277
  };
241
- case 2: //Thermostat
242
- deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
243
- break;
244
- };
245
278
 
246
- const payload = {
247
- data: {
248
- DeviceID: deviceData.Device.DeviceID,
249
- EffectiveFlags: deviceData.Device.EffectiveFlags,
250
- Power: deviceData.Device.Power,
251
- SetTemperature: deviceData.Device.SetTemperature,
252
- SetFanSpeed: deviceData.Device.FanSpeed,
253
- OperationMode: deviceData.Device.OperationMode,
254
- VaneHorizontal: deviceData.Device.VaneHorizontalDirection,
255
- VaneVertical: deviceData.Device.VaneVerticalDirection,
256
- DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
257
- DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
258
- ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
259
- ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
260
- ProhibitPower: deviceData.Device.ProhibitPower,
261
- HideVaneControls: deviceData.HideVaneControls,
262
- HideDryModeControl: deviceData.HideDryModeControl,
263
- HasPendingCommand: true
264
- }
265
- }
279
+ const payload = {
280
+ data: {
281
+ DeviceID: deviceData.Device.DeviceID,
282
+ EffectiveFlags: deviceData.Device.EffectiveFlags,
283
+ Power: deviceData.Device.Power,
284
+ SetTemperature: deviceData.Device.SetTemperature,
285
+ SetFanSpeed: deviceData.Device.FanSpeed,
286
+ OperationMode: deviceData.Device.OperationMode,
287
+ VaneHorizontal: deviceData.Device.VaneHorizontalDirection,
288
+ VaneVertical: deviceData.Device.VaneVerticalDirection,
289
+ DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
290
+ DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
291
+ ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
292
+ ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
293
+ ProhibitPower: deviceData.Device.ProhibitPower,
294
+ HideVaneControls: deviceData.HideVaneControls,
295
+ HideDryModeControl: deviceData.HideDryModeControl,
296
+ HasPendingCommand: true
297
+ }
298
+ }
266
299
 
267
- await this.axiosInstancePost(ApiUrls.SetAta, payload);
268
- this.updateData(deviceData);
269
- return true;
270
- } catch (error) {
271
- throw new Error(`Send data error: ${error}`);
272
- };
273
- };
300
+ await this.axiosInstancePost(ApiUrls.SetAta, payload);
301
+ this.updateData(deviceData);
302
+ return true;
303
+ } catch (error) {
304
+ throw new Error(`Send data error: ${error}`);
305
+ };
306
+ case "melcloudhome":
307
+ try {
308
+ //set target temp based on display mode and operation mode
309
+ switch (displayMode) {
310
+ case 1: //Heather/Cooler
311
+ switch (deviceData.Device.OperationMode) {
312
+ case 1: //HEAT
313
+ setTemperature = deviceData.Device.DefaultHeatingSetTemperature;
314
+ break;
315
+ case 2: //DRY
316
+ setTemperature = deviceData.Device.DefaultCoolingSetTemperature;
317
+ break;
318
+ case 3: //COOL
319
+ setTemperature = deviceData.Device.DefaultCoolingSetTemperature;
320
+ break;
321
+ case 7: //FAN
322
+ setTemperature = deviceData.Device.SetTemperature;
323
+ break;
324
+ case 8: //AUTO
325
+ const setTemperature = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
326
+ setTemperature = setTemperature;
327
+ break;
328
+ case 9: //HISEE HEAT
329
+ setTemperature = deviceData.Device.DefaultHeatingSetTemperature;
330
+ break;
331
+ case 10: //ISEE DRY
332
+ setTemperature = deviceData.Device.DefaultCoolingSetTemperature;
333
+ break;
334
+ case 11: //ISEE COOL
335
+ setTemperature = deviceData.Device.DefaultCoolingSetTemperature;
336
+ break;
337
+ };
338
+ case 2: //Thermostat
339
+ setTemperature = deviceData.Device.SetTemperature;
340
+ break;
341
+ };
274
342
 
275
- updateData(deviceData) {
276
- setTimeout(() => {
277
- this.emit('deviceState', deviceData);
278
- }, 500);
343
+ const payload = {
344
+ data: {
345
+ power: deviceData.Device.Power,
346
+ setTemperature: deviceData.Device.SetTemperature,
347
+ setFanSpeed: deviceData.Device.FanSpeed,
348
+ operationMode: deviceData.Device.OperationMode,
349
+ vaneHorizontalDirection: deviceData.Device.VaneHorizontalDirection,
350
+ vaneVerticalDirection: deviceData.Device.VaneVerticalDirection,
351
+ temperatureIncrementOverride: null,
352
+ inStandbyMode: null,
353
+ }
354
+ }
355
+
356
+ const path = ApiUrlsHome.SetAta.replace('deviceid', deviceData.DeviceID);
357
+ await this.axiosInstancePut(path, payload);
358
+ this.updateData(deviceData);
359
+ return true;
360
+ } catch (error) {
361
+ throw new Error(`Send data error: ${error}`);
362
+ };
363
+ default:
364
+ return;
365
+ }
279
366
  }
280
367
  };
281
368
  export default MelCloudAta;