homebridge-melcloud-control 3.3.12-beta.2 → 3.3.12-beta.21

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/index.js CHANGED
@@ -95,6 +95,7 @@ class MelCloudPlatform {
95
95
  const response = await melCloud.connect();
96
96
  const accountInfo = response.accountInfo;
97
97
  const contextKey = response.contextKey;
98
+ const useFahrenheit = response.useFahrenheit;
98
99
 
99
100
  //check devices list
100
101
  const devices = await melCloud.chackDevicesList(contextKey);
@@ -116,7 +117,7 @@ class MelCloudPlatform {
116
117
 
117
118
  const deviceName = device.name;
118
119
  const deviceTypeText = device.typeString;
119
- const airConditioner = new DeviceAta(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
120
+ const airConditioner = new DeviceAta(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
120
121
  airConditioner.on('publishAccessory', (accessory) => {
121
122
 
122
123
  //publish device
@@ -161,7 +162,7 @@ class MelCloudPlatform {
161
162
 
162
163
  const deviceName = device.name;
163
164
  const deviceTypeText = device.typeString;
164
- const heatPump = new DeviceAtw(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
165
+ const heatPump = new DeviceAtw(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
165
166
  heatPump.on('publishAccessory', (accessory) => {
166
167
 
167
168
  //publish device
@@ -206,7 +207,7 @@ class MelCloudPlatform {
206
207
 
207
208
  const deviceName = device.name;
208
209
  const deviceTypeText = device.typeString;
209
- const energyRecoveryVentilation = new DeviceErv(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
210
+ const energyRecoveryVentilation = new DeviceErv(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
210
211
  energyRecoveryVentilation.on('publishAccessory', (accessory) => {
211
212
 
212
213
  //publish device
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "3.3.12-beta.2",
4
+ "version": "3.3.12-beta.21",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
@@ -73,12 +73,6 @@
73
73
  ],
74
74
  "AirDirection": [
75
75
  "AUTO",
76
- "1",
77
- "2",
78
- "3",
79
- "4",
80
- "5",
81
- "6",
82
76
  "SWING"
83
77
  ],
84
78
  "FanSpeed": [
package/src/deviceata.js CHANGED
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
7
7
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
8
8
 
9
9
  class DeviceAta extends EventEmitter {
10
- constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval) {
10
+ constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval, useFahrenheit) {
11
11
  super();
12
12
 
13
13
  Accessory = api.platformAccessory;
@@ -96,6 +96,8 @@ class DeviceAta extends EventEmitter {
96
96
  this.accessory.currentOperationMode = 0;
97
97
  this.accessory.targetOperationMode = 0;
98
98
  this.accessory.fanSpeed = 0;
99
+ this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
100
+ this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
99
101
  };
100
102
 
101
103
  async start() {
@@ -208,9 +210,6 @@ class DeviceAta extends EventEmitter {
208
210
  this.displayDeviceInfo = false;
209
211
  })
210
212
  .on('deviceState', async (deviceData) => {
211
- //use fahrenheit
212
- const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
213
-
214
213
  //presets
215
214
  const presetsOnServer = deviceData.Presets ?? [];
216
215
 
@@ -245,10 +244,8 @@ class DeviceAta extends EventEmitter {
245
244
  const operationMode = deviceData.Device.OperationMode;
246
245
  const vaneVerticalDirection = deviceData.Device.VaneVerticalDirection;
247
246
  const vaneVerticalSwing = deviceData.Device.VaneVerticalSwing;
248
- this.emit('message', `swing v: ${vaneVerticalSwing}`);
249
247
  const vaneHorizontalDirection = deviceData.Device.VaneHorizontalDirection;
250
248
  const vaneHorizontalSwing = deviceData.Device.VaneHorizontalSwing;
251
- this.emit('message', `swing h: ${vaneHorizontalSwing}`);
252
249
  const prohibitSetTemperature = deviceData.Device.ProhibitSetTemperature ?? false;
253
250
  const prohibitOperationMode = deviceData.Device.ProhibitOperationMode ?? false;
254
251
  const prohibitPower = deviceData.Device.ProhibitPower ?? false;
@@ -256,8 +253,6 @@ class DeviceAta extends EventEmitter {
256
253
  const outdoorTemperature = deviceData.Device.OutdoorTemperature;
257
254
 
258
255
  //accessory
259
- this.accessory.useFahrenheit = useFahrenheit;
260
- this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
261
256
  this.accessory.presets = presetsOnServer;
262
257
  this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
263
258
  this.accessory.airDirectionFunction = airDirectionFunction;
@@ -295,15 +290,15 @@ class DeviceAta extends EventEmitter {
295
290
  case true:
296
291
  switch (operationMode) {
297
292
  case 1: //HEAT
298
- this.accessory.currentOperationMode = roomTemperature > setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
293
+ this.accessory.currentOperationMode = roomTemperature > setTemperature + 0.5 ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
299
294
  this.accessory.targetOperationMode = 1; //AUTO, HEAT, COOL
300
295
  break;
301
296
  case 2: //DRY
302
- this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
297
+ this.accessory.currentOperationMode = 1;
303
298
  this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
304
299
  break;
305
300
  case 3: //COOL
306
- this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
301
+ this.accessory.currentOperationMode = roomTemperature < setTemperature - 0.5 ? 1 : 3;
307
302
  this.accessory.targetOperationMode = 2;
308
303
  break;
309
304
  case 7: //FAN
@@ -311,32 +306,19 @@ class DeviceAta extends EventEmitter {
311
306
  this.accessory.targetOperationMode = this.autoDryFanMode === 3 ? 0 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : this.accessory.targetOperationMode;
312
307
  break;
313
308
  case 8: //AUTO
314
- const curentModeInAuto = roomTemperature < defaultHeatingSetTemperature ? 'HEATING' : roomTemperature > defaultCoolingSetTemperature ? 'COOLING' : '';
315
- switch (curentModeInAuto) {
316
- case 'HEATING': //HEATING
317
- const heatingToFan = roomTemperature > defaultHeatingSetTemperature + 1;
318
- this.accessory.currentOperationMode = heatingToFan ? 1 : 2;
319
- break;
320
- case 'COOLING': //COOLING
321
- const coolingToFan = roomTemperature < defaultCoolingSetTemperature - 1;
322
- this.accessory.currentOperationMode = coolingToFan ? 1 : 3;
323
- break;
324
- default: //FAN
325
- this.accessory.currentOperationMode = roomTemperature <= defaultHeatingSetTemperature ? 2 : roomTemperature >= defaultCoolingSetTemperature ? 3 : 1;
326
- break;
327
- };
309
+ this.accessory.currentOperationMode = roomTemperature < setTemperature ? 2 : roomTemperature > setTemperature ? 3 : this.accessory.currentOperationMode;
328
310
  this.accessory.targetOperationMode = 0;
329
311
  break;
330
312
  case 9: //ISEE HEAT
331
- this.accessory.currentOperationMode = roomTemperature > setTemperature ? 1 : 2
313
+ this.accessory.currentOperationMode = roomTemperature > setTemperature + 0.5 ? 1 : 2
332
314
  this.accessory.targetOperationMode = 1;
333
315
  break;
334
316
  case 10: //ISEE DRY
335
- this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
317
+ this.accessory.currentOperationMode = 1;
336
318
  this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
337
319
  break;
338
320
  case 11: //ISEE COOL;
339
- this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
321
+ this.accessory.currentOperationMode = roomTemperature < setTemperature - 0.5 ? 1 : 3;
340
322
  this.accessory.targetOperationMode = 2;
341
323
  break;
342
324
  default:
@@ -393,8 +375,8 @@ class DeviceAta extends EventEmitter {
393
375
  .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
394
376
  .updateCharacteristic(Characteristic.LockPhysicalControls, this.accessory.lockPhysicalControl)
395
377
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
396
- const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, operationMode === 8 ? defaultHeatingSetTemperature : setTemperature) : false;
397
- const updateDefCool = modelSupportsCool ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, operationMode === 8 ? defaultCoolingSetTemperature : setTemperature) : false;
378
+ const updateDefCool = modelSupportsCool ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, setTemperature) : false;
379
+ const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, this.accessory.targetOperationMode !== 1 ? 10 : setTemperature) : false;
398
380
  const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, this.accessory.fanSpeed) : false;
399
381
  const updateSM = swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode, this.accessory.swingMode) : false;
400
382
  };
@@ -406,15 +388,15 @@ class DeviceAta extends EventEmitter {
406
388
  case true:
407
389
  switch (operationMode) {
408
390
  case 1: //HEAT
409
- this.accessory.currentOperationMode = 1; //OFF, HEATING, COOLING
391
+ this.accessory.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
410
392
  this.accessory.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
411
393
  break;
412
394
  case 2: //DRY
413
- this.accessory.currentOperationMode = 2;
395
+ this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
414
396
  this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
415
397
  break;
416
398
  case 3: //COOL
417
- this.accessory.currentOperationMode = 2;
399
+ this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
418
400
  this.accessory.targetOperationMode = 2;
419
401
  break;
420
402
  case 7: //FAN
@@ -422,32 +404,31 @@ class DeviceAta extends EventEmitter {
422
404
  this.accessory.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : this.accessory.targetOperationMode;
423
405
  break;
424
406
  case 8: //AUTO
425
- const curentModeInAuto = roomTemperature < defaultHeatingSetTemperature ? 'HEATING' : roomTemperature > defaultCoolingSetTemperature ? 'COOLING' : '';
426
- switch (curentModeInAuto) {
427
- case 'HEATING': //HEATING
428
- const heatingToFan = roomTemperature > defaultHeatingSetTemperature + 1;
407
+ switch (this.accessory.currentOperationMode) {
408
+ case 2: //HEATING
409
+ const heatingToFan = roomTemperature > (defaultHeatingSetTemperature + 1);
429
410
  this.accessory.currentOperationMode = heatingToFan ? 0 : 1;
430
411
  break;
431
- case 'COOLING': //COOLING
432
- const coolingToFan = roomTemperature < defaultCoolingSetTemperature - 1;
433
- this.accessory.currentOperationMode = cooling ? 0 : 2;
412
+ case 3: //COOLING
413
+ const coolingToFan = roomTemperature < (defaultCoolingSetTemperature - 1);
414
+ this.accessory.currentOperationMode = coolingToFan ? 0 : 2;
434
415
  break;
435
416
  default: //FAN
436
- this.accessory.currentOperationMode = roomTemperature <= defaultHeatingSetTemperature ? 1 : roomTemperature >= defaultCoolingSetTemperature ? 2 : 0;
417
+ this.accessory.currentOperationMode = roomTemperature >= defaultHeatingSetTemperature && roomTemperature <= defaultCoolingSetTemperature ? 0 : roomTemperature < defaultHeatingSetTemperature ? 1 : roomTemperature > defaultCoolingSetTemperature ? 2 : this.accessory.currentOperationMode;
437
418
  break;
438
419
  };
439
420
  this.accessory.targetOperationMode = 3;
440
421
  break;
441
422
  case 9: //ISEE HEAT
442
- this.accessory.currentOperationMode = 1
423
+ this.accessory.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
443
424
  this.accessory.targetOperationMode = 1;
444
425
  break;
445
426
  case 10: //ISEE DRY
446
- this.accessory.currentOperationMode = 2;
427
+ this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
447
428
  this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
448
429
  break;
449
430
  case 11: //ISEE COOL;
450
- this.accessory.currentOperationMode = 2;
431
+ this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
451
432
  this.accessory.targetOperationMode = 2;
452
433
  break;
453
434
  default:
@@ -643,16 +624,14 @@ class DeviceAta extends EventEmitter {
643
624
  this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
644
625
  this.emit('message', `Target operation mode: ${CONSTANTS.AirConditioner.DriveMode[operationMode]}`);
645
626
  this.emit('message', `Current operation mode: ${this.displayMode === 1 ? CONSTANTS.AirConditioner.CurrentOperationModeHeatherCooler[this.accessory.currentOperationMode] : CONSTANTS.AirConditioner.CurrentOperationModeThermostat[this.accessory.currentOperationMode]}`);
646
- const info0 = operationMode !== 8 ? this.emit('message', `Target temperature: ${setTemperature}${this.accessory.temperatureUnit}`) : false;
627
+ this.emit('message', `Target temperature: ${setTemperature}${this.accessory.temperatureUnit}`);
647
628
  this.emit('message', `Current temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
648
629
  const info = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${outdoorTemperature}${this.accessory.temperatureUnit}`) : false;
649
- const info1 = operationMode === 8 && modelSupportsHeat ? this.emit('message', `Heating threshold temperature: ${defaultHeatingSetTemperature}${this.accessory.temperatureUnit}`) : false;
650
- const info2 = operationMode === 8 && modelSupportsCool ? this.emit('message', `Cooling threshold temperature: ${defaultCoolingSetTemperature}${this.accessory.temperatureUnit}`) : false;
651
630
  const info3 = modelSupportsFanSpeed ? this.emit('message', `Target fan speed: ${CONSTANTS.AirConditioner.FanSpeed[fanSpeed]}`) : false;
652
631
  const info4 = modelSupportsFanSpeed ? this.emit('message', `Current fan speed: ${CONSTANTS.AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
653
632
  const info5 = vaneHorizontalDirection !== null ? this.emit('message', `Vane horizontal: ${CONSTANTS.AirConditioner.HorizontalVane[vaneHorizontalDirection]}`) : false;
654
633
  const info6 = vaneVerticalDirection !== null ? this.emit('message', `Vane vertical: ${CONSTANTS.AirConditioner.VerticalVane[vaneVerticalDirection]}`) : false;
655
- const info7 = swingFunction ? this.emit('message', `Air direction: ${CONSTANTS.AirConditioner.AirDirection[this.accessory.swingMode ? 7 : 0]}`) : false;
634
+ const info7 = swingFunction ? this.emit('message', `Air direction: ${CONSTANTS.AirConditioner.AirDirection[this.accessory.swingMode]}`) : false;
656
635
  this.emit('message', `Temperature display unit: ${this.accessory.temperatureUnit}`);
657
636
  this.emit('message', `Lock physical controls: ${this.accessory.lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
658
637
  };
@@ -926,41 +905,32 @@ class DeviceAta extends EventEmitter {
926
905
  deviceData.Device.VaneVertical = value ? 7 : 0;
927
906
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
928
907
  await this.melCloudAta.send(deviceData);
929
- const info = this.disableLogInfo ? false : this.emit('message', `Set air direction mode: ${CONSTANTS.AirConditioner.AirDirection[value ? 7 : 0]}`);
908
+ const info = this.disableLogInfo ? false : this.emit('message', `Set air direction mode: ${CONSTANTS.AirConditioner.AirDirection[value]}`);
930
909
  } catch (error) {
931
910
  this.emit('warn', `Set vane swing mode error: ${error}`);
932
911
  };
933
912
  });
934
913
  };
935
- if (modelSupportsCool) {
936
- this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
937
- .setProps({
938
- minValue: 16,
939
- maxValue: 31,
940
- minStep: this.accessory.temperatureIncrement
941
- })
942
- .onGet(async () => {
943
- const value = this.accessory.operationMode === 8 ? this.accessory.defaultCoolingSetTemperature : this.accessory.setTemperature;
944
- return value;
945
- })
946
- .onSet(async (value) => {
947
- try {
948
- switch (this.accessory.operationMode) {
949
- case 8: //AUTO - AUTO
950
- deviceData.Device.DefaultCoolingSetTemperature = value;
951
- break;
952
- default:
953
- deviceData.Device.SetTemperature = value;
954
- break
955
- };
956
- deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
957
- await this.melCloudAta.send(deviceData);
958
- const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
959
- } catch (error) {
960
- this.emit('warn', `Set cooling threshold temperature error: ${error}`);
961
- };
962
- });
963
- };
914
+ this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
915
+ .setProps({
916
+ minValue: 16,
917
+ maxValue: 31,
918
+ minStep: this.accessory.temperatureIncrement
919
+ })
920
+ .onGet(async () => {
921
+ const value = this.accessory.setTemperature;
922
+ return value;
923
+ })
924
+ .onSet(async (value) => {
925
+ try {
926
+ deviceData.Device.SetTemperature = value;
927
+ deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
928
+ await this.melCloudAta.send(deviceData);
929
+ const info = this.disableLogInfo ? false : this.emit('message', `Set temperature: ${value}${this.accessory.temperatureUnit}`);
930
+ } catch (error) {
931
+ this.emit('warn', `Set cooling threshold temperature error: ${error}`);
932
+ };
933
+ });
964
934
  if (modelSupportsHeat) {
965
935
  this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
966
936
  .setProps({
@@ -969,23 +939,19 @@ class DeviceAta extends EventEmitter {
969
939
  minStep: this.accessory.temperatureIncrement
970
940
  })
971
941
  .onGet(async () => {
972
- const value = this.accessory.operationMode === 8 ? this.accessory.defaultHeatingSetTemperature : this.accessory.setTemperature;
942
+ const value = this.accessory.targetOperationMode !== 1 ? 10 : this.accessory.setTemperature;
973
943
  return value;
974
944
  })
975
945
  .onSet(async (value) => {
976
946
  try {
977
- switch (this.accessory.operationMode) {
978
- case 8: //AUTO - AUTO
979
- deviceData.Device.DefaultHeatingSetTemperature = value;
980
- break;
981
- default:
982
- deviceData.Device.SetTemperature = value;
983
- break
947
+ if (this.accessory.targetOperationMode !== 1) {
948
+ this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, 10)
949
+ return;
984
950
  };
985
951
 
986
952
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
987
953
  await this.melCloudAta.send(deviceData);
988
- const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
954
+ const info = this.disableLogInfo ? false : this.emit('message', `Set heat temperature: ${value}${this.accessory.temperatureUnit}`);
989
955
  } catch (error) {
990
956
  this.emit('warn', `Set heating threshold temperature error: ${error}`);
991
957
  };
@@ -1018,6 +984,7 @@ class DeviceAta extends EventEmitter {
1018
984
  try {
1019
985
  accountInfo.UseFahrenheit = [false, true][value];
1020
986
  await this.melCloud.send(accountInfo);
987
+ this.accessory.useFahrenheit = value;
1021
988
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1022
989
  } catch (error) {
1023
990
  this.emit('warn', `Set temperature display unit error: ${error}`);
@@ -1154,6 +1121,7 @@ class DeviceAta extends EventEmitter {
1154
1121
  try {
1155
1122
  accountInfo.UseFahrenheit = [false, true][value];
1156
1123
  await this.melCloud.send(accountInfo);
1124
+ this.accessory.useFahrenheit = value;
1157
1125
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1158
1126
  } catch (error) {
1159
1127
  this.emit('warn', `Set temperature display unit error: ${error}`);
package/src/deviceatw.js CHANGED
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
7
7
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
8
8
 
9
9
  class DeviceAtw extends EventEmitter {
10
- constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval) {
10
+ constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval, useFahrenheit) {
11
11
  super();
12
12
 
13
13
  Accessory = api.platformAccessory;
@@ -97,6 +97,8 @@ class DeviceAtw extends EventEmitter {
97
97
 
98
98
  //accessory
99
99
  this.accessory = { zones: [{}, {}, {}, {}] };
100
+ this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
101
+ this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
100
102
  };
101
103
 
102
104
  async start() {
@@ -211,12 +213,8 @@ class DeviceAtw extends EventEmitter {
211
213
  this.displayDeviceInfo = false;
212
214
  })
213
215
  .on('deviceState', async (deviceData) => {
214
- //use fahrenheit
215
- const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
216
-
217
216
  //presets
218
217
  const presetsOnServer = deviceData.Presets ?? [];
219
-
220
218
  //device info
221
219
  const heatPumpName = 'Heat Pump';
222
220
  const hotWaterName = 'Hot Water';
@@ -274,8 +272,6 @@ class DeviceAtw extends EventEmitter {
274
272
  const idleZone2 = deviceData.Device.IdleZone2 ?? false;
275
273
 
276
274
  //accessory
277
- this.accessory.useFahrenheit = useFahrenheit;
278
- this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit]
279
275
  this.accessory.power = power ? 1 : 0;
280
276
  this.accessory.operationMode = operationMode;
281
277
  this.accessory.operationModeZone1 = operationModeZone1;
@@ -1260,6 +1256,7 @@ class DeviceAtw extends EventEmitter {
1260
1256
  try {
1261
1257
  accountInfo.UseFahrenheit = [false, true][value];
1262
1258
  await this.melCloud.send(accountInfo);
1259
+ this.accessory.useFahrenheit = value;
1263
1260
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1264
1261
  } catch (error) {
1265
1262
  this.emit('warn', `Set temperature display unit error: ${error}`);
@@ -1552,6 +1549,7 @@ class DeviceAtw extends EventEmitter {
1552
1549
  try {
1553
1550
  accountInfo.UseFahrenheit = [false, true][value];
1554
1551
  await this.melCloud.send(accountInfo);
1552
+ this.accessory.useFahrenheit = value;
1555
1553
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1556
1554
  } catch (error) {
1557
1555
  this.emit('warn', `Set temperature display unit error: ${error}`);
package/src/deviceerv.js CHANGED
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
7
7
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
8
8
 
9
9
  class DeviceErv extends EventEmitter {
10
- constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval) {
10
+ constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval, useFahrenheit) {
11
11
  super();
12
12
 
13
13
  Accessory = api.platformAccessory;
@@ -94,6 +94,8 @@ class DeviceErv extends EventEmitter {
94
94
  this.accessory.currentOperationMode = 0;
95
95
  this.accessory.targetOperationMode = 0;
96
96
  this.accessory.fanSpeed = 0;
97
+ this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
98
+ this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
97
99
  };
98
100
 
99
101
  async start() {
@@ -205,9 +207,6 @@ class DeviceErv extends EventEmitter {
205
207
  this.displayDeviceInfo = false;
206
208
  })
207
209
  .on('deviceState', async (deviceData) => {
208
- //use fahrenheit
209
- const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
210
-
211
210
  //presets
212
211
  const presetsOnServer = deviceData.Presets ?? [];
213
212
 
@@ -254,8 +253,6 @@ class DeviceErv extends EventEmitter {
254
253
  const ventilationMode = deviceData.Device.VentilationMode;
255
254
 
256
255
  //accessory
257
- this.accessory.useFahrenheit = useFahrenheit;
258
- this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
259
256
  this.accessory.presets = presetsOnServer;
260
257
  this.accessory.hasRoomTemperature = hasRoomTemperature;
261
258
  this.accessory.hasSupplyTemperature = hasSupplyTemperature;
@@ -882,6 +879,7 @@ class DeviceErv extends EventEmitter {
882
879
  try {
883
880
  accountInfo.UseFahrenheit = [false, true][value];
884
881
  await this.melCloud.send(accountInfo);
882
+ this.accessory.useFahrenheit = value;
885
883
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
886
884
  } catch (error) {
887
885
  this.emit('warn', `Set temperature display unit error: ${error}`);
@@ -1018,6 +1016,7 @@ class DeviceErv extends EventEmitter {
1018
1016
  try {
1019
1017
  accountInfo.UseFahrenheit = [false, true][value];
1020
1018
  await this.melCloud.send(accountInfo);
1019
+ this.accessory.useFahrenheit = value;
1021
1020
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1022
1021
  } catch (error) {
1023
1022
  this.emit('warn', `Set temperature display unit error: ${error}`);
package/src/melcloud.js CHANGED
@@ -63,7 +63,6 @@ class MelCloud extends EventEmitter {
63
63
  const accountInfo = account.LoginData;
64
64
  const contextKey = accountInfo.ContextKey;
65
65
  const useFahrenheit = accountInfo.UseFahrenheit ?? false;
66
- this.useFahrenheit = useFahrenheit;
67
66
  this.contextKey = contextKey;
68
67
 
69
68
  //remove sensitive data
@@ -109,7 +108,8 @@ class MelCloud extends EventEmitter {
109
108
 
110
109
  const obj = {
111
110
  accountInfo: accountInfo,
112
- contextKey: contextKey
111
+ contextKey: contextKey,
112
+ useFahrenheit: useFahrenheit
113
113
  }
114
114
 
115
115
  return obj;
@@ -165,10 +165,6 @@ class MelCloud extends EventEmitter {
165
165
 
166
166
  //add all devices to the devices array
167
167
  devices.push(...allDevices);
168
-
169
- for (const device of devices) {
170
- device.useFahrenheit = this.useFahrenheit
171
- }
172
168
  }
173
169
 
174
170
  const devicesCount = devices.length;
@@ -55,7 +55,6 @@ class MelCloudAta extends EventEmitter {
55
55
  const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
56
56
 
57
57
  //device info
58
- const useFahrenheit = deviceData.useFahrenheit;
59
58
  const deviceId = deviceData.DeviceID;
60
59
  const deviceName = deviceData.DeviceName;
61
60
  const buildingId = deviceData.BuildingID;
@@ -310,7 +309,6 @@ class MelCloudAta extends EventEmitter {
310
309
  };
311
310
 
312
311
  const deviceState = {
313
- UseFahrenheit: useFahrenheit,
314
312
  Power: power,
315
313
  Offlin: offline,
316
314
  InStandbyMode: inStandbyMode,
@@ -333,7 +331,7 @@ class MelCloudAta extends EventEmitter {
333
331
  ProhibitSetTemperature: prohibitSetTemperature,
334
332
  ProhibitOperationMode: prohibitOperationMode,
335
333
  ProhibitPower: prohibitPower,
336
- EffectiveFlags:effectiveFlags
334
+ EffectiveFlags: effectiveFlags
337
335
  }
338
336
 
339
337
  //check state changes
@@ -416,8 +414,8 @@ class MelCloudAta extends EventEmitter {
416
414
  OperationMode: deviceData.Device.OperationMode,
417
415
  VaneHorizontal: deviceData.Device.VaneHorizontalDirection,
418
416
  VaneVertical: deviceData.Device.VaneVerticalDirection,
419
- DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
420
- DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
417
+ DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 21,
418
+ DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
421
419
  InStandbyMode: deviceData.Device.InStandbyMode,
422
420
  ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
423
421
  ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
@@ -55,7 +55,6 @@ class MelCloudAtw extends EventEmitter {
55
55
  const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
56
56
 
57
57
  //device info
58
- const useFahrenheit = deviceData.useFahrenheit;
59
58
  const deviceId = deviceData.DeviceID;
60
59
  const deviceName = deviceData.DeviceName;
61
60
  const buildingId = deviceData.BuildingID;
@@ -371,7 +370,6 @@ class MelCloudAtw extends EventEmitter {
371
370
  };
372
371
 
373
372
  const deviceState = {
374
- UseFahrenheit: useFahrenheit,
375
373
  Power: power,
376
374
  Offlin: offline,
377
375
  IdleZone1: idleZone1,
@@ -398,7 +396,7 @@ class MelCloudAtw extends EventEmitter {
398
396
  ProhibitZone1: prohibitHeatingZone1,
399
397
  ProhibitZone2: prohibitHeatingZone2,
400
398
  ProhibitHotWater: prohibitHotWater,
401
- EffectiveFlags:effectiveFlags
399
+ EffectiveFlags: effectiveFlags
402
400
  }
403
401
 
404
402
  //check state changes
@@ -55,7 +55,6 @@ class MelCloudErv extends EventEmitter {
55
55
  const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
56
56
 
57
57
  //deviceData
58
- const useFahrenheit = deviceData.useFahrenheit;
59
58
  const deviceId = deviceData.DeviceID;
60
59
  const deviceName = deviceData.DeviceName;
61
60
  const buildingId = deviceData.BuildingID;
@@ -298,7 +297,6 @@ class MelCloudErv extends EventEmitter {
298
297
  };
299
298
 
300
299
  const deviceState = {
301
- UseFahrenheit: useFahrenheit,
302
300
  Power: power,
303
301
  Offlin: offline,
304
302
  RoomTemperature: roomTemperature,