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

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.103",
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
@@ -17,6 +17,7 @@ class DeviceAta extends EventEmitter {
17
17
 
18
18
  //account config
19
19
  this.accountMelcloud = account.displayType === 'melcloud' ? true : false;
20
+ this.accountDisplayType = account.displayType;
20
21
  this.device = device;
21
22
  this.displayMode = device.displayMode;
22
23
  this.temperatureSensor = device.temperatureSensor || false;
@@ -155,67 +156,67 @@ class DeviceAta extends EventEmitter {
155
156
  case 'Power':
156
157
  deviceData.Device[key] = value;
157
158
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Power;
158
- set = await this.melCloudAta.send(deviceData, this.displayMode);
159
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
159
160
  break;
160
161
  case 'OperationMode':
161
162
  deviceData.Device[key] = value;
162
163
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.OperationModeSetTemperature;
163
- set = await this.melCloudAta.send(deviceData, this.displayMode);
164
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
164
165
  break;
165
166
  case 'SetTemperature':
166
167
  deviceData.Device[key] = value;
167
168
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
168
- set = await this.melCloudAta.send(deviceData, this.displayMode);
169
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
169
170
  break;
170
171
  case 'DefaultCoolingSetTemperature':
171
172
  deviceData.Device[key] = value;
172
173
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
173
- set = await this.melCloudAta.send(deviceData, this.displayMode);
174
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
174
175
  break;
175
176
  case 'DefaultHeatingSetTemperature':
176
177
  deviceData.Device[key] = value;
177
178
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
178
- set = await this.melCloudAta.send(deviceData, this.displayMode);
179
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
179
180
  break;
180
181
  case 'FanSpeed':
181
182
  deviceData.Device[key] = value;
182
183
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetFanSpeed;
183
- set = await this.melCloudAta.send(deviceData, this.displayMode);
184
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
184
185
  break;
185
186
  case 'VaneHorizontalDirection':
186
187
  deviceData.Device[key] = value;
187
188
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneHorizontal;
188
- set = await this.melCloudAta.send(deviceData, this.displayMode);
189
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
189
190
  break;
190
191
  case 'VaneVerticalDirection':
191
192
  deviceData.Device[key] = value;
192
193
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneVertical;
193
- set = await this.melCloudAta.send(deviceData, this.displayMode);
194
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
194
195
  break;
195
196
  case 'HideVaneControls':
196
197
  deviceData[key] = value;
197
198
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
198
- set = await this.melCloudAta.send(deviceData, this.displayMode);
199
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
199
200
  break;
200
201
  case 'HideDryModeControl':
201
202
  deviceData[key] = value;
202
203
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
203
- await this.melCloudAta.send(deviceData, this.displayMode);
204
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
204
205
  break;
205
206
  case 'ProhibitSetTemperature':
206
207
  deviceData.Device[key] = value;
207
208
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
208
- set = await this.melCloudAta.send(deviceData, this.displayMode);
209
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
209
210
  break;
210
211
  case 'ProhibitOperationMode':
211
212
  deviceData.Device[key] = value;
212
213
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
213
- await this.melCloudAta.send(deviceData, this.displayMode);
214
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
214
215
  break;
215
216
  case 'ProhibitPower':
216
217
  deviceData.Device[key] = value;
217
218
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
218
- set = await this.melCloudAta.send(deviceData, this.displayMode);
219
+ set = await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
219
220
  break;
220
221
  default:
221
222
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
@@ -291,7 +292,7 @@ class DeviceAta extends EventEmitter {
291
292
  try {
292
293
  deviceData.Device.Power = [false, true][state];
293
294
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Power;
294
- await this.melCloudAta.send(deviceData, this.displayMode);
295
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
295
296
  if (this.logInfo) this.emit('info', `Set power: ${state ? 'ON' : 'OFF'}`);
296
297
  } catch (error) {
297
298
  if (this.logWarn) this.emit('warn', `Set power error: ${error}`);
@@ -327,7 +328,7 @@ class DeviceAta extends EventEmitter {
327
328
  };
328
329
 
329
330
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.OperationModeSetTemperature;
330
- await this.melCloudAta.send(deviceData, this.displayMode);
331
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
331
332
  const operationModeText = AirConditioner.OperationMode[deviceData.Device.OperationMode];
332
333
  if (this.logInfo) this.emit('info', `Set operation mode: ${operationModeText}`);
333
334
  } catch (error) {
@@ -376,7 +377,7 @@ class DeviceAta extends EventEmitter {
376
377
  break;
377
378
  };
378
379
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetFanSpeed;
379
- await this.melCloudAta.send(deviceData, this.displayMode);
380
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
380
381
  if (this.logInfo) this.emit('info', `Set fan speed mode: ${AirConditioner.FanSpeed[fanSpeedModeText]}`);
381
382
  } catch (error) {
382
383
  if (this.logWarn) this.emit('warn', `Set fan speed mode error: ${error}`);
@@ -395,7 +396,7 @@ class DeviceAta extends EventEmitter {
395
396
  deviceData.Device.VaneHorizontal = value ? 12 : 0;
396
397
  deviceData.Device.VaneVertical = value ? 7 : 0;
397
398
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.VaneVerticalVaneHorizontal;
398
- await this.melCloudAta.send(deviceData, this.displayMode);
399
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
399
400
  if (this.logInfo) this.emit('info', `Set air direction mode: ${AirConditioner.AirDirection[value]}`);
400
401
  } catch (error) {
401
402
  if (this.logWarn) this.emit('warn', `Set vane swing mode error: ${error}`);
@@ -416,7 +417,7 @@ class DeviceAta extends EventEmitter {
416
417
  try {
417
418
  deviceData.Device.DefaultCoolingSetTemperature = value;
418
419
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
419
- await this.melCloudAta.send(deviceData, this.displayMode);
420
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
420
421
  if (this.logInfo) this.emit('info', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
421
422
  } catch (error) {
422
423
  if (this.logWarn) this.emit('warn', `Set cooling threshold temperature error: ${error}`);
@@ -437,7 +438,7 @@ class DeviceAta extends EventEmitter {
437
438
  try {
438
439
  deviceData.Device.DefaultHeatingSetTemperature = value;
439
440
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
440
- await this.melCloudAta.send(deviceData, this.displayMode);
441
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
441
442
  if (this.logInfo) this.emit('info', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
442
443
  } catch (error) {
443
444
  if (this.logWarn) this.emit('warn', `Set heating threshold temperature error: ${error}`);
@@ -456,7 +457,7 @@ class DeviceAta extends EventEmitter {
456
457
  deviceData.Device.ProhibitOperationMode = value;
457
458
  deviceData.Device.ProhibitPower = value;
458
459
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
459
- await this.melCloudAta.send(deviceData, this.displayMode);
460
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
460
461
  if (this.logInfo) this.emit('info', `Set local physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
461
462
  } catch (error) {
462
463
  if (this.logWarn) this.emit('warn', `Set lock physical controls error: ${error}`);
@@ -522,7 +523,7 @@ class DeviceAta extends EventEmitter {
522
523
  break;
523
524
  };
524
525
 
525
- await this.melCloudAta.send(deviceData, this.displayMode);
526
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
526
527
  const operationModeText = AirConditioner.OperationMode[deviceData.Device.OperationMode];
527
528
  if (this.logInfo) this.emit('info', `Set operation mode: ${operationModeText}`);
528
529
  } catch (error) {
@@ -548,7 +549,7 @@ class DeviceAta extends EventEmitter {
548
549
  try {
549
550
  deviceData.Device.SetTemperature = value;
550
551
  deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
551
- await this.melCloudAta.send(deviceData, this.displayMode);
552
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
552
553
  if (this.logInfo) this.emit('info', `Set temperature: ${value}${this.accessory.temperatureUnit}`);
553
554
  } catch (error) {
554
555
  if (this.logWarn) this.emit('warn', `Set temperature error: ${error}`);
@@ -658,7 +659,7 @@ class DeviceAta extends EventEmitter {
658
659
  break;
659
660
  };
660
661
 
661
- await this.melCloudAta.send(deviceData, this.displayMode);
662
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
662
663
  if (this.logInfo) this.emit('info', `${state ? 'Set:' : 'Unset:'} ${name}`);
663
664
  } catch (error) {
664
665
  if (this.logWarn) this.emit('warn', `Set preset error: ${error}`);
@@ -898,7 +899,7 @@ class DeviceAta extends EventEmitter {
898
899
  break;
899
900
  };
900
901
 
901
- await this.melCloudAta.send(deviceData, this.displayMode);
902
+ await this.melCloudAta.send(this.accountDisplayType, deviceData, this.displayMode);
902
903
  if (this.logInfo) this.emit('info', `${state ? `Set: ${name}` : `Unset: ${name}, Set: ${button.previousValue}`}`);
903
904
  } catch (error) {
904
905
  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;