homebridge-melcloud-control 3.3.13 → 3.3.15-beta.0

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/CHANGELOG.md CHANGED
@@ -16,12 +16,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
16
16
  - do not configure it manually, always using Config UI X
17
17
  - required Homebridge v2.0.0 and above
18
18
 
19
+ ## [3.3.14] - (21.09.2024)
20
+
21
+ ## Changes
22
+
23
+ - code improvements
24
+ - cleanup
25
+
19
26
  ## [3.3.13] - (20.09.2024)
20
27
 
21
28
  ## Changes
22
29
 
23
30
  - fix [#166](https://github.com/grzegorz914/homebridge-melcloud-control/issues/166)
24
- - redme update with explanation of AUTO mode in Heather/Cooler and Thermostat mode
31
+ - readme update with explanation of AUTO mode in Heather/Cooler and Thermostat mode
25
32
  - cleanup
26
33
 
27
34
  ## [3.3.5] - (15.09.2024)
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.13",
4
+ "version": "3.3.15-beta.0",
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/deviceata.js CHANGED
@@ -239,9 +239,9 @@ class DeviceAta extends EventEmitter {
239
239
  const power = deviceData.Device.Power ?? false;
240
240
  const inStandbyMode = deviceData.Device.InStandbyMode ?? false;
241
241
  const roomTemperature = deviceData.Device.RoomTemperature;
242
- const setTemperature = deviceData.Device.SetTemperature;
243
- const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
244
- const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
242
+ const setTemperature = deviceData.Device.SetTemperature ?? 20;
243
+ const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature ?? 20;
244
+ const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature ?? 23;
245
245
  const actualFanSpeed = deviceData.Device.ActualFanSpeed;
246
246
  const automaticFanSpeed = deviceData.Device.AutomaticFanSpeed;
247
247
  const fanSpeed = deviceData.Device.FanSpeed;
@@ -750,6 +750,7 @@ class DeviceAta extends EventEmitter {
750
750
  //prepare accessory
751
751
  async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
752
752
  try {
753
+ const presetsOnServer = this.accessory.presets;
753
754
  const modelSupportsHeat = this.accessory.modelSupportsHeat;
754
755
  const modelSupportsDry = this.accessory.modelSupportsDry;
755
756
  const modelSupportsCool = this.accessory.modelSupportsCool;
@@ -759,7 +760,6 @@ class DeviceAta extends EventEmitter {
759
760
  const hasOutdoorTemperature = this.accessory.hasOutdoorTemperature;
760
761
  const numberOfFanSpeeds = this.accessory.numberOfFanSpeeds;
761
762
  const swingFunction = this.accessory.swingFunction;
762
- const presetsOnServer = this.accessory.presets;
763
763
  const autoDryFanMode = [this.accessory.operationMode, 8, modelSupportsDry ? 2 : 8, 7][this.autoDryFanMode]; //NONE, AUTO - 8, DRY - 2, FAN - 7
764
764
  const heatDryFanMode = [this.accessory.operationMode, 1, modelSupportsDry ? 2 : 1, 7][this.heatDryFanMode]; //NONE, HEAT - 1, DRY - 2, FAN - 7
765
765
  const coolDryFanMode = [this.accessory.operationMode, 3, modelSupportsDry ? 2 : 3, 7][this.coolDryFanMode]; //NONE, COOL - 3, DRY - 2, FAN - 7
@@ -913,7 +913,7 @@ class DeviceAta extends EventEmitter {
913
913
  minStep: this.accessory.temperatureIncrement
914
914
  })
915
915
  .onGet(async () => {
916
- const value = this.accessory.defaultCoolingSetTemperature;
916
+ const value = this.accessory.operationMode === 8 ? this.accessory.defaultCoolingSetTemperature : this.accessory.setTemperature;
917
917
  return value;
918
918
  })
919
919
  .onSet(async (value) => {
@@ -934,7 +934,7 @@ class DeviceAta extends EventEmitter {
934
934
  minStep: this.accessory.temperatureIncrement
935
935
  })
936
936
  .onGet(async () => {
937
- const value = this.accessory.defaultHeatingSetTemperature;
937
+ const value = this.accessory.operationMode === 8 ? this.accessory.defaultHeatingSetTemperature : this.accessory.setTemperature;
938
938
  return value;
939
939
  })
940
940
  .onSet(async (value) => {
package/src/deviceatw.js CHANGED
@@ -215,11 +215,8 @@ class DeviceAtw extends EventEmitter {
215
215
  .on('deviceState', async (deviceData) => {
216
216
  //presets
217
217
  const presetsOnServer = deviceData.Presets ?? [];
218
+
218
219
  //device info
219
- const heatPumpName = 'Heat Pump';
220
- const hotWaterName = 'Hot Water';
221
- const zone1Name = deviceData.Zone1Name ?? 'Zone 1';
222
- const zone2Name = deviceData.Zone2Name ?? 'Zone 2';
223
220
  const hasHotWaterTank = deviceData.Device.HasHotWaterTank ?? false;
224
221
  const hasZone2 = deviceData.Device.HasZone2 ?? false;
225
222
  const canHeat = deviceData.Device.CanHeat ?? false;
@@ -228,15 +225,7 @@ class DeviceAtw extends EventEmitter {
228
225
  const temperatureIncrement = deviceData.Device.TemperatureIncrement ?? 1;
229
226
  const minSetTemperature = deviceData.Device.MinSetTemperature ?? 10;
230
227
  const maxSetTemperature = deviceData.Device.MaxSetTemperature ?? 30;
231
- const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 70;
232
- const flowTemperatureHeatPump = deviceData.Device.FlowTemperature;
233
- const flowTemperatureZone1 = deviceData.Device.FlowTemperatureZone1;
234
- const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2;
235
- const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler;
236
- const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature;
237
- const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1;
238
- const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
239
- const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
228
+ const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 70
240
229
 
241
230
  //zones
242
231
  const hotWater = hasHotWaterTank ? 1 : 0;
@@ -245,37 +234,53 @@ class DeviceAtw extends EventEmitter {
245
234
  const caseHotWater = hasHotWaterTank ? 2 : -1;
246
235
  const caseZone2 = hasZone2 ? hasHotWaterTank ? 3 : 2 : -1;
247
236
 
248
- //device state
237
+ //heat pump
238
+ const heatPumpName = 'Heat Pump';
249
239
  const power = deviceData.Device.Power ?? false;
250
- const setTemperatureZone1 = deviceData.Device.SetTemperatureZone1;
251
- const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
252
- const roomTemperatureZone1 = deviceData.Device.RoomTemperatureZone1;
253
- const roomTemperatureZone2 = deviceData.Device.RoomTemperatureZone2;
240
+ const unitStatus = deviceData.Device.UnitStatus ?? 0;
254
241
  const operationMode = deviceData.Device.OperationMode;
242
+ const outdoorTemperature = deviceData.Device.OutdoorTemperature;
243
+ const holidayMode = deviceData.Device.HolidayMode ?? false;
244
+ const flowTemperatureHeatPump = deviceData.Device.FlowTemperature;
245
+ const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature;
246
+
247
+ //zone 1
248
+ const zone1Name = deviceData.Zone1Name ?? 'Zone 1';
249
+ const roomTemperatureZone1 = deviceData.Device.RoomTemperatureZone1;
255
250
  const operationModeZone1 = deviceData.Device.OperationModeZone1;
256
- const operationModeZone2 = deviceData.Device.OperationModeZone2;
251
+ const setTemperatureZone1 = deviceData.Device.SetTemperatureZone1;
257
252
  const setHeatFlowTemperatureZone1 = deviceData.Device.SetHeatFlowTemperatureZone1;
258
- const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
259
253
  const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1;
260
- const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
254
+ const prohibitZone1 = deviceData.Device.ProhibitZone1 ?? false;
255
+ const idleZone1 = deviceData.Device.IdleZone1 ?? false;
256
+ const flowTemperatureZone1 = deviceData.Device.FlowTemperatureZone1;
257
+ const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1;
258
+
259
+ //hot water
260
+ const hotWaterName = 'Hot Water';
261
261
  const tankWaterTemperature = deviceData.Device.TankWaterTemperature;
262
262
  const setTankWaterTemperature = deviceData.Device.SetTankWaterTemperature;
263
263
  const forcedHotWaterMode = deviceData.Device.ForcedHotWaterMode ? 1 : 0;
264
- const unitStatus = deviceData.Device.UnitStatus ?? 0;
265
- const outdoorTemperature = deviceData.Device.OutdoorTemperature;
266
264
  const ecoHotWater = deviceData.Device.EcoHotWater ?? false;
267
- const holidayMode = deviceData.Device.HolidayMode ?? false;
268
- const prohibitZone1 = deviceData.Device.ProhibitZone1 ?? false;
269
- const prohibitZone2 = deviceData.Device.ProhibitZone2 ?? false;
270
265
  const prohibitHotWater = deviceData.Device.ProhibitHotWater ?? false;
271
- const idleZone1 = deviceData.Device.IdleZone1 ?? false;
266
+ const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler;
267
+ const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
268
+
269
+ //zone 2
270
+ const zone2Name = deviceData.Zone2Name ?? 'Zone 2';
271
+ const roomTemperatureZone2 = deviceData.Device.RoomTemperatureZone2;
272
+ const operationModeZone2 = deviceData.Device.OperationModeZone2;
273
+ const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
274
+ const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
275
+ const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
276
+ const prohibitZone2 = deviceData.Device.ProhibitZone2 ?? false;
272
277
  const idleZone2 = deviceData.Device.IdleZone2 ?? false;
278
+ const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2;
279
+ const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
273
280
 
274
281
  //accessory
282
+ this.accessory.presets = presetsOnServer;
275
283
  this.accessory.power = power ? 1 : 0;
276
- this.accessory.operationMode = operationMode;
277
- this.accessory.operationModeZone1 = operationModeZone1;
278
- this.accessory.roomTemperatureZone2 = roomTemperatureZone2;
279
284
  this.accessory.unitStatus = unitStatus;
280
285
  this.accessory.idleZone1 = idleZone1;
281
286
  this.accessory.idleZone2 = idleZone2;
@@ -286,10 +291,10 @@ class DeviceAtw extends EventEmitter {
286
291
  this.accessory.heatCoolModes = heatCoolModes;
287
292
  this.accessory.caseHotWater = caseHotWater;
288
293
  this.accessory.caseZone2 = caseZone2;
289
- this.accessory.presetsOnServer = presetsOnServer;
290
294
 
291
295
  //default values
292
296
  let name = 'Heat Pump'
297
+ let operationModeZone = 0;
293
298
  let currentOperationMode = 0;
294
299
  let targetOperationMode = 0;
295
300
  let roomTemperature = 20;
@@ -309,6 +314,7 @@ class DeviceAtw extends EventEmitter {
309
314
  switch (i) {
310
315
  case 0: //Heat Pump Operation Mode - IDLE, HOT WATER, HEATING ZONES, COOLING, HOT WATER STORAGE, FREEZE STAT, LEGIONELLA, HEATING ECO, MODE 1, MODE 2, MODE 3, HEATING UP /// Unit Status - HEAT, COOL
311
316
  name = heatPumpName;
317
+ operationModeZone = operationMode;
312
318
  currentOperationMode = !power ? 0 : [1, 2, 2, 3, 2, 1, 1, 2, 1, 1, 1, 2][operationMode]; //INACTIVE, IDLE, HEATING, COOLING
313
319
  targetOperationMode = [1, 2][unitStatus]; //AUTO, HEAT, COOL
314
320
  roomTemperature = outdoorTemperature;
@@ -325,6 +331,7 @@ class DeviceAtw extends EventEmitter {
325
331
  break;
326
332
  case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
327
333
  name = zone1Name;
334
+ operationModeZone = operationMode;
328
335
  currentOperationMode = !power ? 0 : idleZone1 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone1]; //INACTIVE, IDLE, HEATING, COOLING
329
336
  targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone1]; //AUTO, HEAT, COOL
330
337
 
@@ -359,6 +366,7 @@ class DeviceAtw extends EventEmitter {
359
366
  break;
360
367
  case caseHotWater: //Hot Water - NORMAL, HEAT NOW
361
368
  name = hotWaterName;
369
+ operationModeZone = operationMode;
362
370
  currentOperationMode = !power ? 0 : operationMode === 1 ? 2 : [1, 2][forcedHotWaterMode]; //INACTIVE, IDLE, HEATING, COOLING
363
371
  targetOperationMode = [0, 1][forcedHotWaterMode] //AUTO, HEAT, COOL
364
372
  roomTemperature = tankWaterTemperature;
@@ -375,6 +383,7 @@ class DeviceAtw extends EventEmitter {
375
383
  break;
376
384
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
377
385
  name = zone2Name;
386
+ operationModeZone = operationMode;
378
387
  currentOperationMode = !power ? 0 : idleZone2 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone2]; //INACTIVE, IDLE, HEATING, COOLING
379
388
  targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone2]; //AUTO, HEAT, COOL
380
389
 
@@ -428,6 +437,8 @@ class DeviceAtw extends EventEmitter {
428
437
  case 2: //Thermostat
429
438
  switch (i) {
430
439
  case 0: //Heat Pump Operation Mode - IDLE, HOT WATER, HEATING ZONES, COOLING, HOT WATER STORAGE, FREEZE STAT, LEGIONELLA, HEATING ECO, MODE 1, MODE 2, MODE 3, HEATING UP /// Unit Status - HEAT, COOL
440
+ name = heatPumpName;
441
+ operationModeZone = operationMode;
431
442
  currentOperationMode = !power ? 0 : [0, 1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 1][operationMode]; //OFF, HEAT, COOL
432
443
  targetOperationMode = !power ? 0 : [1, 2][unitStatus]; //OFF, HEAT, COOL, AUTO
433
444
  roomTemperature = outdoorTemperature;
@@ -438,9 +449,10 @@ class DeviceAtw extends EventEmitter {
438
449
  operationModeSetPropsValidValues = [[0, 1, 2], [0, 1], [0, 2], [0]][heatCoolModes];
439
450
  temperatureSetPropsMinValue = 10;
440
451
  temperatureSetPropsMaxValue = 70;
441
- this.accessory.zones[i].name = heatPumpName;
442
452
  break;
443
- case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
453
+ case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
454
+ name = zone1Name;
455
+ operationModeZone = operationMode;
444
456
  currentOperationMode = !power ? 0 : idleZone1 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone1]; //OFF, HEAT, COOL
445
457
  targetOperationMode = [1, 2, 3, 1, 2, 1][operationModeZone1]; //OFF, HEAT, COOL, AUTO
446
458
 
@@ -468,9 +480,10 @@ class DeviceAtw extends EventEmitter {
468
480
  operationModeSetPropsMinValue = [1, 1, 1, 0][heatCoolModes];
469
481
  operationModeSetPropsMaxValue = [3, 3, 2, 0][heatCoolModes];
470
482
  operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
471
- this.accessory.zones[i].name = heatPumpName;
472
483
  break;
473
484
  case caseHotWater: //Hot Water - NORMAL, HEAT NOW
485
+ name = hotWaterName;
486
+ operationModeZone = operationMode;
474
487
  currentOperationMode = !power ? 0 : operationMode === 1 ? 1 : [0, 1][forcedHotWaterMode]; //OFF, HEAT, COOL
475
488
  targetOperationMode = [3, 1][forcedHotWaterMode] //OFF, HEAT, COOL, AUTO
476
489
  roomTemperature = tankWaterTemperature;
@@ -481,9 +494,10 @@ class DeviceAtw extends EventEmitter {
481
494
  operationModeSetPropsValidValues = [1, 3];
482
495
  temperatureSetPropsMinValue = 0;
483
496
  temperatureSetPropsMaxValue = 60;
484
- this.accessory.zones[i].name = heatPumpName;
485
497
  break;
486
498
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
499
+ name = zone2Name;
500
+ operationModeZone = operationMode;
487
501
  currentOperationMode = !power ? 0 : idleZone2 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone2]; //OFF, HEAT, COOL
488
502
  targetOperationMode = [1, 2, 3, 1, 2, 1][operationModeZone2]; //OFF, HEAT, COOL, AUTO
489
503
 
@@ -511,7 +525,6 @@ class DeviceAtw extends EventEmitter {
511
525
  operationModeSetPropsMinValue = [1, 1, 1, 0][heatCoolModes];
512
526
  operationModeSetPropsMaxValue = [3, 3, 2, 0][heatCoolModes];
513
527
  operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
514
- this.accessory.zones[i].name = heatPumpName;
515
528
  break;
516
529
  default: //unknown zone detected
517
530
  this.emit('message', `Unknown zone: ${i} detected.`);
@@ -532,6 +545,7 @@ class DeviceAtw extends EventEmitter {
532
545
 
533
546
  //push value to arrays
534
547
  this.accessory.zones[i].name = name;
548
+ this.accessory.zones[i].operationMode = operationModeZone;
535
549
  this.accessory.zones[i].currentOperationMode = currentOperationMode;
536
550
  this.accessory.zones[i].targetOperationMode = targetOperationMode;
537
551
  this.accessory.zones[i].roomTemperature = roomTemperature;
@@ -919,11 +933,11 @@ class DeviceAtw extends EventEmitter {
919
933
  //prepare accessory
920
934
  async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
921
935
  try {
936
+ const presetsOnServer = this.accessory.presets;
922
937
  const zonesCount = this.accessory.zonesCount;
923
938
  const caseHotWater = this.accessory.caseHotWater;
924
939
  const caseZone2 = this.accessory.caseZone2;
925
940
  const heatCoolModes = this.accessory.heatCoolModes;
926
- const presetsOnServer = this.accessory.presetsOnServer;
927
941
  const temperatureSensor = this.temperatureSensor;
928
942
  const temperatureSensorFlow = this.temperatureSensorFlow;
929
943
  const temperatureSensorReturn = this.temperatureSensorReturn;
@@ -1104,7 +1118,7 @@ class DeviceAtw extends EventEmitter {
1104
1118
  //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1105
1119
  break;
1106
1120
  case 1: //Zone 1
1107
- switch (this.accessory.operationModeZone1) {
1121
+ switch (this.accessory.zones[i].operationMode) {
1108
1122
  case 1: //HEAT FLOW
1109
1123
  deviceData.Device.SetHeatFlowTemperatureZone1 = value;
1110
1124
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
@@ -1124,7 +1138,7 @@ class DeviceAtw extends EventEmitter {
1124
1138
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1125
1139
  break;
1126
1140
  case caseZone2: //Zone 2
1127
- switch (this.accessory.operationModeZone2) {
1141
+ switch (this.accessory.zones[i].operationMode) {
1128
1142
  case 1: //HEAT FLOW
1129
1143
  deviceData.Device.SetHeatFlowTemperatureZone2 = value;
1130
1144
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
@@ -1168,7 +1182,7 @@ class DeviceAtw extends EventEmitter {
1168
1182
  //deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
1169
1183
  break;
1170
1184
  case 1: //Zone 1
1171
- switch (this.accessory.operationModeZone1) {
1185
+ switch (this.accessory.zones[i].operationMode) {
1172
1186
  case 1: //HEAT FLOW
1173
1187
  deviceData.Device.SetHeatFlowTemperatureZone1 = value;
1174
1188
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
@@ -1188,7 +1202,7 @@ class DeviceAtw extends EventEmitter {
1188
1202
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
1189
1203
  break;
1190
1204
  case caseZone2: //Zone 2
1191
- switch (this.accessory.operationModeZone2) {
1205
+ switch (this.accessory.zones[i].operationMode) {
1192
1206
  case 1: //HEAT FLOW
1193
1207
  deviceData.Device.SetHeatFlowTemperatureZone2 = value;
1194
1208
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
package/src/deviceerv.js CHANGED
@@ -248,10 +248,9 @@ class DeviceErv extends EventEmitter {
248
248
  const supplyTemperature = deviceData.Device.SupplyTemperature;
249
249
  const outdoorTemperature = deviceData.Device.OutdoorTemperature;
250
250
  const nightPurgeMode = deviceData.Device.NightPurgeMode;
251
- const setTemperature = deviceData.Device.SetTemperature;
252
- const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
253
- const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
254
- const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
251
+ const setTemperature = deviceData.Device.SetTemperature ?? 20;
252
+ const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature ?? 20;
253
+ const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature ?? 23;
255
254
  const setFanSpeed = deviceData.Device.SetFanSpeed;
256
255
  const operationMode = deviceData.Device.OperationMode;
257
256
  const ventilationMode = deviceData.Device.VentilationMode;
@@ -283,7 +282,7 @@ class DeviceErv extends EventEmitter {
283
282
  this.accessory.roomTemperature = roomTemperature;
284
283
  this.accessory.supplyTemperature = supplyTemperature;
285
284
  this.accessory.outdoorTemperature = outdoorTemperature;
286
- this.accessory.setTemperature = targetTemperature;
285
+ this.accessory.setTemperature = setTemperature;
287
286
  this.accessory.defaultHeatingSetTemperature = defaultHeatingSetTemperature;
288
287
  this.accessory.defaultCoolingSetTemperature = defaultCoolingSetTemperature;
289
288
  this.accessory.lockPhysicalControl = 0;
@@ -413,7 +412,7 @@ class DeviceErv extends EventEmitter {
413
412
  .updateCharacteristic(Characteristic.CurrentHeatingCoolingState, this.accessory.currentOperationMode)
414
413
  .updateCharacteristic(Characteristic.TargetHeatingCoolingState, this.accessory.targetOperationMode)
415
414
  .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
416
- .updateCharacteristic(Characteristic.TargetTemperature, targetTemperature)
415
+ .updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
417
416
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
418
417
  };
419
418
  break;
@@ -468,7 +467,7 @@ class DeviceErv extends EventEmitter {
468
467
  const presetData = presetsOnServer.find(p => p.ID === preset.Id);
469
468
 
470
469
  preset.state = presetData ? (presetData.Power === power
471
- && presetData.SetTemperature === targetTemperature
470
+ && presetData.SetTemperature === setTemperature
472
471
  && presetData.OperationMode === operationMode
473
472
  && presetData.VentilationMode === ventilationMode
474
473
  && presetData.FanSpeed === setFanSpeed) : false;
@@ -548,7 +547,7 @@ class DeviceErv extends EventEmitter {
548
547
  this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
549
548
  this.emit('message', `Target ventilation mode: ${CONSTANTS.Ventilation.OperationMode[ventilationMode]}`);
550
549
  this.emit('message', `Current ventilation mode: ${CONSTANTS.Ventilation.OperationMode[actualVentilationMode]}`);
551
- this.emit('message', `Target temperature: ${targetTemperature}${this.accessory.temperatureUnit}`);
550
+ this.emit('message', `Target temperature: ${setTemperature}${this.accessory.temperatureUnit}`);
552
551
  this.emit('message', `Room temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
553
552
  const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('message', `Supply temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
554
553
  const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
@@ -672,7 +671,7 @@ class DeviceErv extends EventEmitter {
672
671
  //prepare accessory
673
672
  async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
674
673
  try {
675
- const presetsOnServer = deviceData.Presets;
674
+ const presetsOnServer = this.accessory.presets;
676
675
  const hasRoomTemperature = this.accessory.hasRoomTemperature;
677
676
  const hasSupplyTemperature = this.accessory.hasSupplyTemperature;
678
677
  const hasOutdoorTemperature = this.accessory.hasOutdoorTemperature;
@@ -806,7 +805,7 @@ class DeviceErv extends EventEmitter {
806
805
  minStep: this.accessory.temperatureIncrement
807
806
  })
808
807
  .onGet(async () => {
809
- const value = this.accessory.setTemperature;
808
+ const value = this.accessory.ventilationMode === 2 ? this.accessory.defaultHeatingSetTemperature : this.accessory.setTemperature;
810
809
  return value;
811
810
  })
812
811
  .onSet(async (value) => {
@@ -829,7 +828,7 @@ class DeviceErv extends EventEmitter {
829
828
  minStep: this.accessory.temperatureIncrement
830
829
  })
831
830
  .onGet(async () => {
832
- const value = this.accessory.targetOperationMode !== 1 ? 10 : this.accessory.setTemperature;
831
+ const value = this.accessory.ventilationMode === 2 ? this.accessory.defaultHeatingSetTemperature : this.accessory.setTemperature;
833
832
  return value;
834
833
  })
835
834
  .onSet(async (value) => {
@@ -369,37 +369,37 @@ class MelCloudAta extends EventEmitter {
369
369
 
370
370
  async send(deviceData, displayMode) {
371
371
  try {
372
- //set target temp based on current mode
372
+ //set target temp based on display mode and operation mode
373
373
  switch (displayMode) {
374
- case 1:
375
- switch (deviceData.Device.OperationMode) {//operating mode 0, HEAT, DRY, COOL, 4, 5, 6, FAN, AUTO, ISEE HEAT, ISEE DRY, ISEE COOL
376
- case 1:
374
+ case 1: //Heather/Cooler
375
+ switch (deviceData.Device.OperationMode) {
376
+ case 1: //HEAT
377
377
  deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
378
378
  break;
379
- case 2:
379
+ case 2: //DRY
380
380
  deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
381
381
  break;
382
- case 3:
382
+ case 3: //COOL
383
383
  deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
384
384
  break;
385
- case 7:
386
- deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
385
+ case 7: //FAN
386
+ deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
387
387
  break;
388
- case 8:
389
- const setTemp = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
390
- deviceData.Device.SetTemperature = setTemp;
388
+ case 8: //AUTO
389
+ const setTemperature = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
390
+ deviceData.Device.SetTemperature = setTemperature;
391
391
  break;
392
- case 9:
392
+ case 9: //HISEE HEAT
393
393
  deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
394
394
  break;
395
- case 10:
395
+ case 10: //ISEE DRY
396
396
  deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
397
397
  break;
398
- case 11:
398
+ case 11: //ISEE COOL
399
399
  deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
400
400
  break;
401
401
  };
402
- case 2:
402
+ case 2: //Thermostat
403
403
  deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
404
404
  break;
405
405
  };
@@ -414,8 +414,8 @@ class MelCloudAta extends EventEmitter {
414
414
  OperationMode: deviceData.Device.OperationMode,
415
415
  VaneHorizontal: deviceData.Device.VaneHorizontalDirection,
416
416
  VaneVertical: deviceData.Device.VaneVerticalDirection,
417
- DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 21,
418
- DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
417
+ DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
418
+ DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
419
419
  InStandbyMode: deviceData.Device.InStandbyMode,
420
420
  ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
421
421
  ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
@@ -356,22 +356,22 @@ class MelCloudErv extends EventEmitter {
356
356
  }
357
357
  async send(deviceData, displayMode) {
358
358
  try {
359
- //set target temp based on current mode
359
+ //set target temp based on display mode and ventilation mode
360
360
  switch (displayMode) {
361
- case 1:
362
- switch (deviceData.Device.VentilationMode) {//LOSNAY, BYPASS, AUTO
363
- case 0:
361
+ case 1: //Heather/Cooler
362
+ switch (deviceData.Device.VentilationMode) {
363
+ case 0: //LOSNAY
364
364
  deviceData.Device.SetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
365
365
  break;
366
- case 1:
366
+ case 1: //BYPASS
367
367
  deviceData.Device.SetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
368
368
  break;
369
- case 2:
370
- const setTemp = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
371
- deviceData.Device.SetTemperature = setTemp;
369
+ case 2: //AUTO
370
+ const setTemperature = (deviceData.Device.DefaultCoolingSetTemperature + deviceData.Device.DefaultHeatingSetTemperature) / 2;
371
+ deviceData.Device.SetTemperature = setTemperature;
372
372
  break;
373
373
  };
374
- case 2:
374
+ case 2: //Thermostat
375
375
  deviceData.Device.SetTemperature = deviceData.Device.SetTemperature;
376
376
  break;
377
377
  };
@@ -389,8 +389,8 @@ class MelCloudErv extends EventEmitter {
389
389
  SetFanSpeed: deviceData.Device.SetFanSpeed,
390
390
  OperationMode: deviceData.Device.OperationMode,
391
391
  VentilationMode: deviceData.Device.VentilationMode,
392
- DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
393
- DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 21,
392
+ DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
393
+ DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
394
394
  HideRoomTemperature: deviceData.Device.HideRoomTemperature,
395
395
  HideSupplyTemperature: deviceData.Device.HideSupplyTemperature,
396
396
  HideOutdoorTemperature: deviceData.Device.HideOutdoorTemperature,