homebridge-melcloud-control 3.3.4 → 3.3.8

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/src/deviceerv.js CHANGED
@@ -34,7 +34,6 @@ class DeviceErv extends EventEmitter {
34
34
  this.deviceTypeText = deviceTypeText;
35
35
  this.devicesFile = devicesFile;
36
36
  this.refreshInterval = refreshInterval;
37
- this.useFahrenheit = useFahrenheit;
38
37
  this.startPrepareAccessory = true;
39
38
  this.displayDeviceInfo = true;
40
39
 
@@ -95,6 +94,8 @@ class DeviceErv extends EventEmitter {
95
94
  this.accessory.currentOperationMode = 0;
96
95
  this.accessory.targetOperationMode = 0;
97
96
  this.accessory.fanSpeed = 0;
97
+ this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
98
+ this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
98
99
  };
99
100
 
100
101
  async start() {
@@ -207,7 +208,6 @@ class DeviceErv extends EventEmitter {
207
208
  })
208
209
  .on('deviceState', async (deviceData) => {
209
210
  //device info
210
- const displayMode = this.displayMode;
211
211
  const hasCoolOperationMode = deviceData.Device.HasCoolOperationMode ?? false;
212
212
  const hasHeatOperationMode = deviceData.Device.HasHeatOperationMode ?? false;
213
213
  const hasAutoOperationMode = deviceData.Device.HasAutoOperationMode ?? false;
@@ -234,13 +234,13 @@ class DeviceErv extends EventEmitter {
234
234
  const presetsOnServer = deviceData.Presets ?? [];
235
235
 
236
236
  //device state
237
- const power = deviceData.Device.Power;
238
- const offline = deviceData.Device.Offline;
237
+ const power = deviceData.Device.Power ?? false;
239
238
  const roomTemperature = deviceData.Device.RoomTemperature;
240
239
  const supplyTemperature = deviceData.Device.SupplyTemperature;
241
240
  const outdoorTemperature = deviceData.Device.OutdoorTemperature;
242
241
  const nightPurgeMode = deviceData.Device.NightPurgeMode;
243
242
  const setTemperature = deviceData.Device.SetTemperature;
243
+ const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
244
244
  const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
245
245
  const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
246
246
  const setFanSpeed = deviceData.Device.SetFanSpeed;
@@ -249,50 +249,41 @@ class DeviceErv extends EventEmitter {
249
249
  const hideRoomTemperature = deviceData.Device.HideRoomTemperature;
250
250
  const hideSupplyTemperature = deviceData.Device.HideSupplyTemperature;
251
251
  const hideOutdoorTemperature = deviceData.Device.HideOutdoorTemperature;
252
- const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.useFahrenheit];
253
-
254
- //set temperature
255
- const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
256
252
 
257
253
  //accessory
258
- this.accessory.presetsOnServer = presetsOnServer;
259
- this.accessory.power = power ? 1 : 0;
260
- this.accessory.offline = offline ?? false;
261
- this.accessory.roomTemperature = roomTemperature;
262
- this.accessory.outdoorTemperature = outdoorTemperature;
263
- this.accessory.supplyTemperature = supplyTemperature;
264
- this.accessory.setTemperature = targetTemperature;
265
- this.accessory.defaultHeatingSetTemperature = defaultHeatingSetTemperature;
266
- this.accessory.defaultCoolingSetTemperature = defaultCoolingSetTemperature;
267
- this.accessory.setFanSpeed = setFanSpeed;
268
- this.accessory.lockPhysicalControl = 0;
269
- this.accessory.temperatureIncrement = temperatureIncrement;
270
- this.accessory.useFahrenheit = this.useFahrenheit;
271
- this.accessory.temperatureUnit = temperatureUnit;
272
- this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
254
+ this.accessory.hasRoomTemperature = hasRoomTemperature;
255
+ this.accessory.hasSupplyTemperature = hasSupplyTemperature;
273
256
  this.accessory.hasOutdoorTemperature = hasOutdoorTemperature;
274
- this.accessory.numberOfFanSpeeds = numberOfFanSpeeds;
275
257
  this.accessory.hasCoolOperationMode = hasCoolOperationMode;
276
258
  this.accessory.hasHeatOperationMode = hasHeatOperationMode;
277
- this.accessory.hasAutoOperationMode = hasAutoOperationMode;
278
- this.accessory.hasRoomTemperature = hasRoomTemperature;
279
- this.accessory.hasSupplyTemperature = hasSupplyTemperature;
280
259
  this.accessory.hasCO2Sensor = hasCO2Sensor;
281
- this.accessory.roomCO2Level = roomCO2Level;
282
- this.accessory.roomCO2Detected = roomCO2Detected;
283
260
  this.accessory.hasPM25Sensor = hasPM25Sensor;
284
- this.accessory.pM25SensorStatus = pM25SensorStatus;
285
- this.accessory.pM25Level = pM25Level;
286
- this.accessory.pM25AirQuality = pM25AirQuality;
287
261
  this.accessory.hasAutoVentilationMode = hasAutoVentilationMode;
288
262
  this.accessory.hasBypassVentilationMode = hasBypassVentilationMode;
289
- this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
290
263
  this.accessory.coreMaintenanceRequired = coreMaintenanceRequired;
291
264
  this.accessory.filterMaintenanceRequired = filterMaintenanceRequired;
292
- this.accessory.actualVentilationMode = actualVentilationMode;
265
+ this.accessory.roomCO2Detected = roomCO2Detected;
266
+ this.accessory.roomCO2Level = roomCO2Level;
267
+ this.accessory.pM25AirQuality = pM25AirQuality;
268
+ this.accessory.pM25Level = pM25Level;
269
+ this.accessory.numberOfFanSpeeds = numberOfFanSpeeds;
270
+
271
+ this.accessory.presets = presetsOnServer;
272
+
273
+ this.accessory.power = power ? 1 : 0;
274
+ this.accessory.operationMode = operationMode;
275
+ this.accessory.ventilationMode = ventilationMode;
276
+ this.accessory.roomTemperature = roomTemperature;
277
+ this.accessory.supplyTemperature = supplyTemperature;
278
+ this.accessory.outdoorTemperature = outdoorTemperature;
279
+ this.accessory.setTemperature = targetTemperature;
280
+ this.accessory.defaultHeatingSetTemperature = defaultHeatingSetTemperature;
281
+ this.accessory.defaultCoolingSetTemperature = defaultCoolingSetTemperature;
282
+ this.accessory.lockPhysicalControl = 0;
283
+ this.accessory.temperatureIncrement = temperatureIncrement;
293
284
 
294
285
  //operation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
295
- switch (displayMode) {
286
+ switch (this.displayMode) {
296
287
  case 1: //Heater Cooler
297
288
  switch (power) {
298
289
  case true:
@@ -353,15 +344,15 @@ class DeviceErv extends EventEmitter {
353
344
  //update characteristics
354
345
  if (this.melCloudService) {
355
346
  this.melCloudService
356
- .updateCharacteristic(Characteristic.Active, this.accessory.power)
347
+ .updateCharacteristic(Characteristic.Active, power)
357
348
  .updateCharacteristic(Characteristic.CurrentHeaterCoolerState, this.accessory.currentOperationMode)
358
349
  .updateCharacteristic(Characteristic.TargetHeaterCoolerState, this.accessory.targetOperationMode)
359
350
  .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
360
351
  .updateCharacteristic(Characteristic.RotationSpeed, this.accessory.fanSpeed)
361
352
  .updateCharacteristic(Characteristic.LockPhysicalControls, this.accessory.lockPhysicalControl)
362
353
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
363
- const updateDefHeat = hasAutoVentilationMode && hasHeatOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
364
- const updateDefCool = hasAutoVentilationMode && hasCoolOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature) : false;
354
+ const updateDefHeat = hasHeatOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, ventilationMode === 2 ? defaultHeatingSetTemperature : setTemperature) : false;
355
+ const updateDefCool = hasCoolOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, ventilationMode === 2 ? defaultCoolingSetTemperature : setTemperature) : false;
365
356
  };
366
357
  break;
367
358
  case 2: //Thermostat
@@ -546,15 +537,16 @@ class DeviceErv extends EventEmitter {
546
537
  //log current state
547
538
  if (!this.disableLogInfo) {
548
539
  this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
549
- this.emit('message', `Operation mode: ${CONSTANTS.Ventilation.OperationMode[ventilationMode]}`);
550
- this.emit('message', `Room temperature: ${roomTemperature}${temperatureUnit}`);
551
- const info = hasCoolOperationMode || hasHeatOperationMode ? this.emit('message', `Target temperature: ${targetTemperature}${temperatureUnit}`) : false;
552
- const info1 = hasSupplyTemperature && this.accessory.supplyTemperature !== null ? this.emit('message', `Supply temperature: ${roomTemperature}${temperatureUnit}`) : false;
553
- const info2 = hasOutdoorTemperature && this.accessory.outdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${roomTemperature}${temperatureUnit}`) : false;
554
- const info3 = hasAutoVentilationMode && hasHeatOperationMode ? this.emit('message', `Heating threshold temperature: ${defaultHeatingSetTemperature}${temperatureUnit}`) : false;
555
- const info4 = hasAutoVentilationMode && hasCoolOperationMode ? this.emit('message', `Cooling threshold temperature: ${defaultCoolingSetTemperature}${temperatureUnit}`) : false;
540
+ this.emit('message', `Target ventilation mode: ${CONSTANTS.Ventilation.OperationMode[ventilationMode]}`);
541
+ this.emit('message', `Current entilation mode: ${CONSTANTS.Ventilation.OperationMode[actualVentilationMode]}`);
542
+ this.emit('message', `Room temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
543
+ const info = hasCoolOperationMode || hasHeatOperationMode ? this.emit('message', `Target temperature: ${targetTemperature}${this.accessory.temperatureUnit}`) : false;
544
+ const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('message', `Supply temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
545
+ const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
546
+ const info3 = ventilationMode === 2 && hasHeatOperationMode ? this.emit('message', `Heating threshold temperature: ${defaultHeatingSetTemperature}${this.accessory.temperatureUnit}`) : false;
547
+ const info4 = ventilationMode === 2 && hasCoolOperationMode ? this.emit('message', `Cooling threshold temperature: ${defaultCoolingSetTemperature}${this.accessory.temperatureUnit}`) : false;
556
548
  this.emit('message', `Fan speed mode: ${CONSTANTS.Ventilation.FanSpeed[setFanSpeed]}`);
557
- this.emit('message', `Temperature display unit: ${temperatureUnit}`);
549
+ this.emit('message', `Temperature display unit: ${this.accessory.temperatureUnit}`);
558
550
  this.emit('message', `Core maintenance: ${CONSTANTS.Ventilation.CoreMaintenance[coreMaintenanceRequired]}`);
559
551
  this.emit('message', `Filter maintenance: ${CONSTANTS.Ventilation.FilterMaintenance[filterMaintenanceRequired]}`);
560
552
  const info5 = hasCO2Sensor ? this.emit('message', `CO2 detected: ${CONSTANTS.Ventilation.Co2Detected[roomCO2Detected]}`) : false;
@@ -563,7 +555,6 @@ class DeviceErv extends EventEmitter {
563
555
  const info8 = hasPM25Sensor ? this.emit('message', `PM2.5 level: ${pM25Level} µg/m`) : false;
564
556
  };
565
557
 
566
- //start prepare accessory
567
558
  //start prepare accessory
568
559
  if (!this.startPrepareAccessory) {
569
560
  return;
@@ -674,6 +665,17 @@ class DeviceErv extends EventEmitter {
674
665
  //prepare accessory
675
666
  async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
676
667
  try {
668
+ const hasRoomTemperature = this.accessory.hasRoomTemperature;
669
+ const hasSupplyTemperature = this.accessory.hasSupplyTemperature;
670
+ const hasOutdoorTemperature = this.accessory.hasOutdoorTemperature;
671
+ const hasCoolOperationMode = this.accessory.hasCoolOperationMode;
672
+ const hasHeatOperationMode = this.accessory.hasHeatOperationMode;
673
+ const hasCO2Sensor = this.accessory.hasCO2Sensor;
674
+ const hasPM25Sensor = this.accessory.hasPM25Sensor;
675
+ const hasAutoVentilationMode = this.accessory.hasAutoVentilationMode;
676
+ const hasBypassVentilationMode = this.accessory.hasBypassVentilationMode;
677
+ const presetsOnServer = deviceData.Presets;
678
+
677
679
  //accessory
678
680
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
679
681
  const accessoryName = deviceName;
@@ -689,21 +691,9 @@ class DeviceErv extends EventEmitter {
689
691
  .setCharacteristic(Characteristic.SerialNumber, this.serialNumber)
690
692
  .setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
691
693
 
692
- //melcloud services
693
- const displayMode = this.displayMode;
694
- const presetsOnServer = this.accessory.presetsOnServer;
695
- const temperatureSensor = this.temperatureSensor;
696
- const temperatureSensorOutdoor = this.temperatureSensorOutdoor;
697
- const temperatureSensorSupply = this.temperatureSensorSupply;
698
- const hasCoolOperationMode = this.accessory.hasCoolOperationMode;
699
- const hasHeatOperationMode = this.accessory.hasHeatOperationMode;
700
- const hasCO2Sensor = this.accessory.hasCO2Sensor;
701
- const hasPM25Sensor = this.accessory.hasPM25Sensor;
702
- const hasAutoVentilationMode = this.accessory.hasAutoVentilationMode;
703
- const hasBypassVentilationMode = this.accessory.hasBypassVentilationMode;
694
+ //services
704
695
  const serviceName = `${deviceTypeText} ${accessoryName}`;
705
-
706
- switch (displayMode) {
696
+ switch (this.displayMode) {
707
697
  case 1: //Heater Cooler
708
698
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare heather/cooler service`) : false;
709
699
  this.melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId}`);
@@ -742,18 +732,16 @@ class DeviceErv extends EventEmitter {
742
732
  switch (value) {
743
733
  case 0: //AUTO - AUTO
744
734
  deviceData.Device.VentilationMode = hasAutoVentilationMode ? 2 : 0;
745
- deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
746
735
  break;
747
736
  case 1: //HEAT - LOSSNAY
748
737
  deviceData.Device.VentilationMode = 0;
749
- deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
750
738
  break;
751
739
  case 2: //COOL - BYPASS
752
740
  deviceData.Device.VentilationMode = hasBypassVentilationMode ? 1 : 0;
753
- deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
754
741
  break;
755
742
  };
756
743
 
744
+ deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
757
745
  await this.melCloudErv.send(deviceData);
758
746
  const operationModeText = CONSTANTS.Ventilation.VentilationMode[deviceData.Device.VentilationMode];
759
747
  const info = this.disableLogInfo ? false : this.emit('message', `Set operation mode: ${operationModeText}`);
@@ -779,7 +767,7 @@ class DeviceErv extends EventEmitter {
779
767
  .onSet(async (value) => {
780
768
  try {
781
769
  let fanSpeedModeText = 0; //AUTO, 1, 2, 3, 4, OFF
782
- switch (ataNumberOfFanSpeeds) {
770
+ switch (this.accessory.numberOfFanSpeeds) {
783
771
  case 2: //Fan speed mode 2
784
772
  deviceData.Device.SetFanSpeed = ataHasAutomaticFanSpeed ? [0, 1, 2, 0][value] : [1, 1, 2][value];
785
773
  fanSpeedModeText = ataHasAutomaticFanSpeed ? [5, 1, 2, 0][value] : [5, 1, 2][value];
@@ -801,49 +789,63 @@ class DeviceErv extends EventEmitter {
801
789
  this.emit('warn', `Set fan speed mode error: ${error}`);
802
790
  };
803
791
  });
804
- //device can heat
805
- if (hasAutoVentilationMode && hasHeatOperationMode) {
806
- this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
792
+ //device can cool
793
+ if (hasAutoVentilationMode && hasCoolOperationMode) {
794
+ this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
807
795
  .setProps({
808
- minValue: 10,
796
+ minValue: 16,
809
797
  maxValue: 31,
810
798
  minStep: this.accessory.temperatureIncrement
811
799
  })
812
800
  .onGet(async () => {
813
- const value = this.accessory.defaultHeatingSetTemperature;
801
+ const value = this.accessorydefaultCoolingSetTemperature;
814
802
  return value;
815
803
  })
816
804
  .onSet(async (value) => {
817
805
  try {
818
- deviceData.Device.DefaultHeatingSetTemperature = value;
806
+ switch (this.accessory.ventilationMode) {
807
+ case 2: //AUTO - AUTO
808
+ deviceData.Device.DefaultCoolingSetTemperature = value;
809
+ break;
810
+ default:
811
+ deviceData.Device.SetTemperature = value;
812
+ break
813
+ };
819
814
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
820
815
  await this.melCloudErv.send(deviceData);
821
- const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
816
+ const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
822
817
  } catch (error) {
823
- this.emit('warn', `Set heating threshold temperature error: ${error}`);
818
+ this.emit('warn', `Set cooling threshold temperature error: ${error}`);
824
819
  };
825
820
  });
826
821
  };
827
- //device can cool
828
- if (hasAutoVentilationMode && hasCoolOperationMode) {
829
- this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
822
+ //device can heat
823
+ if (hasAutoVentilationMode && hasHeatOperationMode) {
824
+ this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
830
825
  .setProps({
831
- minValue: 16,
826
+ minValue: 10,
832
827
  maxValue: 31,
833
828
  minStep: this.accessory.temperatureIncrement
834
829
  })
835
830
  .onGet(async () => {
836
- const value = this.accessory.defaultCoolingSetTemperature;
831
+ const value = this.accessory.defaultHeatingSetTemperature;
837
832
  return value;
838
833
  })
839
834
  .onSet(async (value) => {
840
835
  try {
841
- deviceData.Device.DefaultCoolingSetTemperature = value;
836
+ switch (this.accessory.ventilationMode) {
837
+ case 2: //AUTO - AUTO
838
+ deviceData.Device.DefaultHeatingSetTemperature = value;
839
+ break;
840
+ default:
841
+ deviceData.Device.SetTemperature = value;
842
+ break
843
+ };
842
844
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
843
845
  await this.melCloudErv.send(deviceData);
844
- const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
846
+ const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
845
847
  } catch (error) {
846
- this.emit('warn', `Set cooling threshold temperature error: ${error}`);
848
+ this.emit('warn', `Set heating threshold temperature error: ${error}`);
847
849
  };
848
850
  });
849
851
  };
@@ -871,7 +873,7 @@ class DeviceErv extends EventEmitter {
871
873
  })
872
874
  .onSet(async (value) => {
873
875
  try {
874
- accountInfo.UseFahrenheit = value ? true : false;
876
+ accountInfo.UseFahrenheit = [false, true][value];
875
877
  await this.melCloud.send(accountInfo);
876
878
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
877
879
  } catch (error) {
@@ -954,51 +956,51 @@ class DeviceErv extends EventEmitter {
954
956
  this.emit('warn', `Set temperature error: ${error}`);
955
957
  };
956
958
  });
957
- //device can heat
958
- if (hasAutoVentilationMode && hasHeatOperationMode) {
959
- this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
960
- .setProps({
961
- minValue: 10,
962
- maxValue: 31,
963
- minStep: this.accessory.temperatureIncrement
964
- })
965
- .onGet(async () => {
966
- const value = this.accessory.defaultHeatingSetTemperature;
967
- return value;
968
- })
969
- .onSet(async (value) => {
970
- try {
971
- deviceData.Device.DefaultHeatingSetTemperature = value;
972
- deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
973
- await this.melCloudErv.send(deviceData);
974
- const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
975
- } catch (error) {
976
- this.emit('warn', `Set heating threshold temperature error: ${error}`);
977
- };
978
- });
979
- };
980
- //device can cool
981
- if (hasAutoVentilationMode && hasCoolOperationMode) {
982
- this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
983
- .setProps({
984
- minValue: 16,
985
- maxValue: 31,
986
- minStep: this.accessory.temperatureIncrement
987
- })
988
- .onGet(async () => {
989
- const value = this.accessory.defaultCoolingSetTemperature;
990
- return value;
991
- })
992
- .onSet(async (value) => {
993
- try {
994
- deviceData.Device.DefaultCoolingSetTemperature = value;
995
- deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
996
- await this.melCloudErv.send(deviceData);
997
- const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
998
- } catch (error) {
999
- this.emit('warn', `Set cooling threshold temperature error: ${error}`);
1000
- };
1001
- });
959
+ if (hasAutoVentilationMode) {
960
+ if (hasHeatOperationMode) {
961
+ this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
962
+ .setProps({
963
+ minValue: 10,
964
+ maxValue: 31,
965
+ minStep: this.accessory.temperatureIncrement
966
+ })
967
+ .onGet(async () => {
968
+ const value = this.accessory.defaultHeatingSetTemperature;
969
+ return value;
970
+ })
971
+ .onSet(async (value) => {
972
+ try {
973
+ deviceData.Device.DefaultHeatingSetTemperature = value;
974
+ deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
975
+ await this.melCloudErv.send(deviceData);
976
+ const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
977
+ } catch (error) {
978
+ this.emit('warn', `Set heating threshold temperature error: ${error}`);
979
+ };
980
+ });
981
+ };
982
+ if (hasCoolOperationMode) {
983
+ this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
984
+ .setProps({
985
+ minValue: 16,
986
+ maxValue: 31,
987
+ minStep: this.accessory.temperatureIncrement
988
+ })
989
+ .onGet(async () => {
990
+ const value = this.accessory.defaultCoolingSetTemperature;
991
+ return value;
992
+ })
993
+ .onSet(async (value) => {
994
+ try {
995
+ deviceData.Device.DefaultCoolingSetTemperature = value;
996
+ deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
997
+ await this.melCloudErv.send(deviceData);
998
+ const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
999
+ } catch (error) {
1000
+ this.emit('warn', `Set cooling threshold temperature error: ${error}`);
1001
+ };
1002
+ });
1003
+ };
1002
1004
  };
1003
1005
  this.melCloudService.getCharacteristic(Characteristic.TemperatureDisplayUnits)
1004
1006
  .onGet(async () => {
@@ -1007,7 +1009,7 @@ class DeviceErv extends EventEmitter {
1007
1009
  })
1008
1010
  .onSet(async (value) => {
1009
1011
  try {
1010
- accountInfo.UseFahrenheit = value ? true : false;
1012
+ accountInfo.UseFahrenheit = [false, true][value];
1011
1013
  await this.melCloud.send(accountInfo);
1012
1014
  const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
1013
1015
  } catch (error) {
@@ -1019,7 +1021,7 @@ class DeviceErv extends EventEmitter {
1019
1021
  };
1020
1022
 
1021
1023
  //temperature sensor service room
1022
- if (temperatureSensor && this.accessory.hasRoomTemperature && this.accessory.roomTemperature !== null) {
1024
+ if (this.temperatureSensor && hasRoomTemperature && this.accessory.roomTemperature !== null) {
1023
1025
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare room temperature sensor service`) : false;
1024
1026
  this.roomTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Room`, `Room Temperature Sensor ${deviceId}`);
1025
1027
  this.roomTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -1038,7 +1040,7 @@ class DeviceErv extends EventEmitter {
1038
1040
  };
1039
1041
 
1040
1042
  //temperature sensor service supply
1041
- if (temperatureSensorSupply && this.accessory.hasSupplyTemperature && this.accessory.supplyTemperature !== null) {
1043
+ if (this.temperatureSensorSupply && hasSupplyTemperature && this.accessory.supplyTemperature !== null) {
1042
1044
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare supply temperature sensor service`) : false;
1043
1045
  this.supplyTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Supply`, `Supply Temperature Sensor ${deviceId}`);
1044
1046
  this.supplyTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -1057,7 +1059,7 @@ class DeviceErv extends EventEmitter {
1057
1059
  };
1058
1060
 
1059
1061
  //temperature sensor service outdoor
1060
- if (temperatureSensorOutdoor && this.accessory.hasOutdoorTemperature && this.accessory.outdoorTemperature !== null) {
1062
+ if (this.temperatureSensorOutdoor && hasOutdoorTemperature && this.accessory.outdoorTemperature !== null) {
1061
1063
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare outdoor temperature sensor service`) : false;
1062
1064
  this.outdoorTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Outdoor`, `Outdoor Temperature Sensor ${deviceId}`);
1063
1065
  this.outdoorTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
package/src/melcloud.js CHANGED
@@ -62,7 +62,7 @@ class MelCloud extends EventEmitter {
62
62
  const account = accountData.data;
63
63
  const accountInfo = account.LoginData;
64
64
  const contextKey = accountInfo.ContextKey;
65
- const useFahrenheit = accountInfo.UseFahrenheit ? 1 : 0;
65
+ const useFahrenheit = accountInfo.UseFahrenheit ?? false;
66
66
  this.contextKey = contextKey;
67
67
 
68
68
  //remove sensitive data
@@ -200,7 +200,7 @@ class MelCloud extends EventEmitter {
200
200
  };
201
201
 
202
202
  await this.axiosInstancePost(CONSTANTS.ApiUrls.UpdateApplicationOptions, options);
203
- await this.saveData(this.accountInfoFile, accountInfo);
203
+ await this.saveData(this.accountFile, accountInfo);
204
204
  return true;
205
205
  } catch (error) {
206
206
  throw new Error(error.message ?? error);
@@ -405,8 +405,8 @@ class MelCloudAta extends EventEmitter {
405
405
  VaneVertical: deviceData.Device.VaneVerticalDirection,
406
406
  HideVaneControls: deviceData.Device.HideVaneControls,
407
407
  HideDryModeControl: deviceData.Device.HideDryModeControl,
408
- DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 21,
409
- DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
408
+ DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
409
+ DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
410
410
  InStandbyMode: deviceData.Device.InStandbyMode,
411
411
  ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
412
412
  ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
@@ -431,10 +431,11 @@ class MelCloudAtw extends EventEmitter {
431
431
  async send(deviceData) {
432
432
  try {
433
433
  //prevent to set out of range temp
434
- const minTempZones = 10;
435
- const maxTempZones = 31;
434
+ const minTempZones = 0;
435
+ const maxTempZones = 60;
436
436
  const minTempWaterTank = 16;
437
437
  const maxTempWaterTank = deviceData.Device.MaxTankTemperature ?? 70;
438
+
438
439
  deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone1;
439
440
  deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 > maxTempZones ? maxTempZones : deviceData.Device.SetTemperatureZone1;
440
441
  deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone2 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone2;