homebridge-melcloud-control 4.7.3-beta.0 → 4.7.3-beta.10

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
@@ -24,6 +24,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
24
24
  - For plugin < v4.6.0 use Homebridge UI <= v5.5.0
25
25
  - For plugin >= v4.6.0 use Homebridge UI >= v5.13.0
26
26
 
27
+ # [4.7.3] - (29.01.2026)
28
+
29
+ ## Changes
30
+
31
+ - fix ATW set temperature for Z1 and Z2
32
+ - fix ATW zone operatin mode
33
+ - other fixes for ATW
34
+ - cleanup
35
+
27
36
  # [4.7.2] - (29.01.2026)
28
37
 
29
38
  ## Changes
@@ -1150,50 +1150,92 @@
1150
1150
  "functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].displayType > 0;"
1151
1151
  }
1152
1152
  },
1153
- "temperatureSensor": {
1154
- "title": "Temperature Sensor Room",
1153
+ "temperatureRoomSensor": {
1154
+ "title": "Temperature Outdoor",
1155
1155
  "type": "boolean",
1156
- "description": "This enable extra temperature sensor to use with HomeKit automations."
1156
+ "description": "This enable extra Outdoor temperature sensor to use with HomeKit automations.",
1157
+ "condition": {
1158
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1159
+ }
1157
1160
  },
1158
1161
  "temperatureFlowSensor": {
1159
1162
  "title": "Temperature Sensor Flow",
1160
1163
  "type": "boolean",
1161
- "description": "This enable extra Flow temperature sensor to use with HomeKit automations."
1164
+ "description": "This enable extra Flow temperature sensor to use with HomeKit automations.",
1165
+ "condition": {
1166
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1167
+ }
1162
1168
  },
1163
1169
  "temperatureReturnSensor": {
1164
1170
  "title": "Temperature Sensor Return",
1165
1171
  "type": "boolean",
1166
- "description": "This enable extra Return temperature sensor to use with HomeKit automations."
1172
+ "description": "This enable extra Return temperature sensor to use with HomeKit automations.",
1173
+ "condition": {
1174
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1175
+ }
1176
+ },
1177
+ "temperatureRoomZone1Sensor": {
1178
+ "title": "Temperature Sensor Room Zone 1",
1179
+ "type": "boolean",
1180
+ "description": "This enable extra Room Zone 1 temperature sensor to use with HomeKit automations."
1167
1181
  },
1168
1182
  "temperatureFlowZone1Sensor": {
1169
1183
  "title": "Temperature Sensor Flow Zone 1",
1170
1184
  "type": "boolean",
1171
- "description": "This enable extra Flow Zone 1 temperature sensor to use with HomeKit automations."
1185
+ "description": "This enable extra Flow Zone 1 temperature sensor to use with HomeKit automations.",
1186
+ "condition": {
1187
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1188
+ }
1172
1189
  },
1173
1190
  "temperatureReturnZone1Sensor": {
1174
1191
  "title": "Temperature Sensor Return Zone 1",
1175
1192
  "type": "boolean",
1176
- "description": "This enable extra Return Zone 1 temperature sensor to use with HomeKit automations."
1193
+ "description": "This enable extra Return Zone 1 temperature sensor to use with HomeKit automations.",
1194
+ "condition": {
1195
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1196
+ }
1197
+ },
1198
+ "temperatureWaterTankSensor": {
1199
+ "title": "Temperature Sensor Water Tank",
1200
+ "type": "boolean",
1201
+ "description": "This enable extra Water Tank temperature sensor to use with HomeKit automations."
1177
1202
  },
1178
1203
  "temperatureFlowWaterTankSensor": {
1179
1204
  "title": "Temperature Sensor Flow Water Tank",
1180
1205
  "type": "boolean",
1181
- "description": "This enable extra Flow Water Tank temperature sensor to use with HomeKit automations."
1206
+ "description": "This enable extra Flow Water Tank temperature sensor to use with HomeKit automations.",
1207
+ "condition": {
1208
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1209
+ }
1182
1210
  },
1183
1211
  "temperatureReturnWaterTankSensor": {
1184
1212
  "title": "Temperature Sensor Return Water Tank",
1185
1213
  "type": "boolean",
1186
- "description": "This enable extra Return Water Tank temperature sensor to use with HomeKit automations."
1214
+ "description": "This enable extra Return Water Tank temperature sensor to use with HomeKit automations.",
1215
+ "condition": {
1216
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1217
+ }
1218
+ },
1219
+ "temperatureRoomZone2Sensor": {
1220
+ "title": "Temperature Sensor Room Zone 2",
1221
+ "type": "boolean",
1222
+ "description": "This enable extra Room Zone 2 temperature sensor to use with HomeKit automations."
1187
1223
  },
1188
1224
  "temperatureFlowZone2Sensor": {
1189
1225
  "title": "Temperature Sensor Flow Zone 2",
1190
1226
  "type": "boolean",
1191
- "description": "This enable extra Flow Zone 2 temperature sensor to use with HomeKit automations."
1227
+ "description": "This enable extra Flow Zone 2 temperature sensor to use with HomeKit automations.",
1228
+ "condition": {
1229
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1230
+ }
1192
1231
  },
1193
1232
  "temperatureReturnZone2Sensor": {
1194
1233
  "title": "Temperature Sensor Return Zone 2",
1195
1234
  "type": "boolean",
1196
- "description": "This enable extra Return Zone 2 temperature sensor to use with HomeKit automations."
1235
+ "description": "This enable extra Return Zone 2 temperature sensor to use with HomeKit automations.",
1236
+ "condition": {
1237
+ "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
1238
+ }
1197
1239
  },
1198
1240
  "inStandbySensor": {
1199
1241
  "title": "In Standby",
@@ -2614,8 +2656,8 @@
2614
2656
  {
2615
2657
  "title": "Sensors",
2616
2658
  "items": [
2617
- "accounts[].ataDevices[].temperatureSensor",
2618
2659
  "accounts[].ataDevices[].temperatureOutdoorSensor",
2660
+ "accounts[].ataDevices[].temperatureRoomSensor",
2619
2661
  "accounts[].ataDevices[].inStandbySensor",
2620
2662
  "accounts[].ataDevices[].connectSensor",
2621
2663
  "accounts[].ataDevices[].errorSensor"
@@ -2778,10 +2820,13 @@
2778
2820
  "accounts[].atwDevices[].temperatureSensor",
2779
2821
  "accounts[].atwDevices[].temperatureFlowSensor",
2780
2822
  "accounts[].atwDevices[].temperatureReturnSensor",
2823
+ "accounts[].atwDevices[].temperatureRoomZone1Sensor",
2781
2824
  "accounts[].atwDevices[].temperatureFlowZone1Sensor",
2782
2825
  "accounts[].atwDevices[].temperatureReturnZone1Sensor",
2826
+ "accounts[].atwDevices[].temperatureWaterTankSensor",
2783
2827
  "accounts[].atwDevices[].temperatureFlowWaterTankSensor",
2784
2828
  "accounts[].atwDevices[].temperatureReturnWaterTankSensor",
2829
+ "accounts[].atwDevices[].temperatureRoomZone2Sensor",
2785
2830
  "accounts[].atwDevices[].temperatureFlowZone2Sensor",
2786
2831
  "accounts[].atwDevices[].temperatureReturnZone2Sensor",
2787
2832
  "accounts[].atwDevices[].inStandbySensor",
@@ -117,6 +117,8 @@
117
117
 
118
118
  // Tworzenie przycisków
119
119
  accounts.forEach((account, i) => {
120
+ this.account = account;
121
+
120
122
  const button = document.createElement("button");
121
123
  button.type = "button";
122
124
  button.id = `button${i}`;
@@ -142,9 +144,7 @@
142
144
  formElements.language.value = account.language || '0';
143
145
  formElements.accountType.value = account.type || 'disabled';
144
146
  formElements.logIn.disabled = !(account.name && account.user && account.passwd && account.language && account.type !== 'disabled');
145
- formElements.configButton.disabled = !(account.ataDevices.length > 0 || account.atwDevices.length > 0 || account.ervDevices.length > 0);
146
-
147
- this.account = account;
147
+ formElements.configButton.disabled = !((account.ataDevices?.length ?? 0) > 0 || (account.atwDevices?.length ?? 0) > 0 || (account.ervDevices?.length ?? 0) > 0);
148
148
  });
149
149
  });
150
150
 
@@ -160,7 +160,7 @@
160
160
  account.language = formElements.language.value;
161
161
  account.type = formElements.accountType.value;
162
162
  formElements.logIn.disabled = !(account.name && account.user && account.passwd && account.language && account.type !== 'disabled');
163
- formElements.configButton.disabled = !(account.ataDevices.length > 0 || account.atwDevices.length > 0 || account.ervDevices.length > 0);
163
+ formElements.configButton.disabled = !((account.ataDevices?.length ?? 0) > 0 || (account.atwDevices?.length ?? 0) > 0 || (account.ervDevices?.length ?? 0) > 0);
164
164
 
165
165
  await homebridge.updatePluginConfig(pluginConfig);
166
166
  await homebridge.savePluginConfig();
@@ -270,11 +270,7 @@
270
270
  account.ervDevices = account.ervDevices ?? [];
271
271
 
272
272
  // Prepare MELCloud data
273
- const newInMelCloud = {
274
- ata: [], ataPresets: [], ataSchedules: [], ataScenes: [],
275
- atw: [], atwPresets: [], atwSchedules: [], atwScenes: [],
276
- erv: [], ervPresets: [], ervSchedules: [], ervScenes: []
277
- };
273
+ const newInMelCloud = { ata: [], ataPresets: [], ataSchedules: [], ataScenes: [], atw: [], atwPresets: [], atwSchedules: [], atwScenes: [], erv: [], ervPresets: [], ervSchedules: [], ervScenes: [] };
278
274
  const devicesInMelCloudByType = { ata: [], atw: [], erv: [] };
279
275
  const scenesInMelCloud = response.Scenes ?? [];
280
276
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.7.3-beta.0",
4
+ "version": "4.7.3-beta.10",
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
@@ -116,15 +116,16 @@ export const HeatPump = {
116
116
  OperationModeMapStringToEnum: { "Idle": 0, "HotWater": 1, "Heating": 2, "Cooling": 3, "HotWaterStorage": 4, "FreezeStat": 5, "Legionella": 6, "HeatEco": 7, "Mode1": 8, "Mode2": 9, "Mode3": 10, "HeatUp": 11 },
117
117
  OperationModeMapEnumToString: { 0: "Idle", 1: "HotWater", 2: "Heating", 3: "Cooling", 4: "HotWaterStorage", 5: "FreezeStat", 6: "Legionella", 7: "HeatEco", 8: "Mode1", 9: "Mode2", 10: "Mode3", 11: "HeatUp" },
118
118
  OperationModeMapEnumToStringInfo: { 0: "Idle", 1: "Hot Water", 2: "Heating", 3: "Cooling", 4: "Hot Water Storage", 5: "Freeze Stat", 6: "Legionella", 7: "Heat Eco", 8: "Mode 1", 9: "Mode 2", 10: "Mode 3", 11: "Heat Up" },
119
+ OperationModeZoneMapStringToEnum: { "HeatThermostat": 0, "HeatFlowTemperature": 1, "HeatCurve": 2, "CoolThermostat": 3, "CoolFlowTemperature": 4, "FloorDryUp": 5, "Idle": 6 },
120
+ OperationModeZoneMapEnumToString: { 0: "HeatThermostat", 1: "HeatFlowTemperature", 2: "HeatCurve", 3: "CoolThermostat", 4: "CoolFlowTemperature", 5: "FloorDryUp", 6: "Idle" },
121
+ OperationModeZoneMapEnumToStringInfo: { 0: "Heat Thermostat", 1: "Heat Flow Temperature", 2: "Heat Curve", 3: "Cool Thermostat", 4: "Cool Flow Temperature", 5: "Floor Dry Up", 6: "Idle" },
119
122
  OperationModeDhwMapStringToEnum: { "Normal": 0, "Eco": 1 },
120
123
  OperationModeDhwMapEnumToString: { 0: "Normal", 1: "Eco" },
121
124
  ForceDhwMapStringToEnum: { "Normal": 0, "HeatNow": 1 },
122
125
  ForceDhwMapEnumToString: { 0: "Normal", 1: "HeatNow" },
126
+ ForceDhwMapEnumToStringInfo: { 0: "Normal", 1: "Heat Now" },
123
127
  HolidayMapStringToEnum: { "Normal": 0, "Holiday": 1 },
124
128
  HolidayMapEnumToString: { 0: "Normal", 1: "Holiday" },
125
- OperationModeZoneMapStringToEnum: { "HeatThermostat": 0, "HeatFlowTemperature": 1, "HeatCurve": 2, "CoolThermostat": 3, "CoolFlowTemperature": 4, "FloorDryUp": 5, "Idle": 6 },
126
- OperationModeZoneMapEnumToString: { 0: "HeatThermostat", 1: "HeatFlowTemperature", 2: "HeatCurve", 3: "CoolThermostat", 4: "CoolFlowTemperature", 5: "FloorDryUp", 6: "Idle" },
127
- OperationModeZoneMapEnumToStringInfo: { 0: "Heat Thermostat", 1: "Heat Flow Temperature", 2: "Heat Curve", 3: "Cool Thermostat", 4: "Cool Flow Temperature", 5: "Floor Dry Up", 6: "Idle" },
128
129
  EffectiveFlags: {
129
130
  Power: 1,
130
131
  OperationMode: 2,
package/src/deviceatw.js CHANGED
@@ -34,13 +34,16 @@ class DeviceAtw extends EventEmitter {
34
34
  this.deviceTypeString = DeviceType[device.type];
35
35
  this.displayType = device.displayType;
36
36
  this.hideZone = device.hideZone;
37
- this.temperatureSensor = device.temperatureSensor || false;
37
+ this.temperatureRoomSensor = device.temperatureRoomSensor || false;
38
38
  this.temperatureFlowSensor = device.temperatureFlowSensor || false;
39
39
  this.temperatureReturnSensor = device.temperatureReturnSensor || false;
40
+ this.temperatureRoomZone1Sensor = device.temperatureRoomZone1Sensor || false;
40
41
  this.temperatureFlowZone1Sensor = device.temperatureFlowZone1Sensor || false;
41
42
  this.temperatureReturnZone1Sensor = device.temperatureReturnZone1Sensor || false;
43
+ this.temperatureWaterTankSensor = device.temperatureWaterTankSensor || false;
42
44
  this.temperatureFlowWaterTankSensor = device.temperatureFlowWaterTankSensor || false;
43
45
  this.temperatureReturnWaterTankSensor = device.temperatureReturnWaterTankSensor || false;
46
+ this.temperatureRoomZone2Sensor = device.temperatureRoomZone2Sensor || false;
44
47
  this.temperatureFlowZone2Sensor = device.temperatureFlowZone2Sensor || false;
45
48
  this.temperatureReturnZone2Sensor = device.temperatureReturnZone2Sensor || false;
46
49
  this.inStandbySensor = device.inStandbySensor || false;
@@ -294,6 +297,7 @@ class DeviceAtw extends EventEmitter {
294
297
  //prepare accessory
295
298
  async prepareAccessory() {
296
299
  try {
300
+ const accountTypeMelcloud = this.accountType === 'melcloud';
297
301
  const deviceData = this.deviceData;
298
302
  const deviceId = this.deviceId;
299
303
  const deviceTypeString = this.deviceTypeString;
@@ -354,7 +358,7 @@ class DeviceAtw extends EventEmitter {
354
358
  case 0: //Heat Pump
355
359
  deviceData.Device.Power = state ? true : false;
356
360
  if (this.logInfo) this.emit('info', `${zoneName}, Set power: ${state ? 'On' : 'Off'}`);
357
- await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, HeatPump.EffectiveFlags.Power);
361
+ await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, HeatPump.EffectiveFlags.Power, null);
358
362
  break;
359
363
  };
360
364
  } catch (error) {
@@ -432,7 +436,7 @@ class DeviceAtw extends EventEmitter {
432
436
  flag = HeatPump.EffectiveFlags.ForcedHotWaterMode;
433
437
  break
434
438
  };
435
- operationModeText = deviceData.Device.OperationMode === 1 ? HeatPump.ForceDhwMapEnumToString[1] : HeatPump.ForceDhwMapEnumToString[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
439
+ operationModeText = deviceData.Device.OperationMode === 1 ? HeatPump.ForceDhwMapEnumToStringInfo[1] : HeatPump.ForceDhwMapEnumToStringInfo[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
436
440
  break;
437
441
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
438
442
  switch (value) {
@@ -454,7 +458,7 @@ class DeviceAtw extends EventEmitter {
454
458
  };
455
459
 
456
460
  if (this.logInfo) this.emit('info', `${zoneName}, Set operation mode: ${operationModeText}`);
457
- await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
461
+ await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
458
462
  } catch (error) {
459
463
  if (this.logWarn) this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
460
464
  };
@@ -479,51 +483,72 @@ class DeviceAtw extends EventEmitter {
479
483
  .onSet(async (value) => {
480
484
  try {
481
485
  let flag = null;
482
- switch (i) {
483
- case caseHeatPump: //Heat Pump
484
- //deviceData.Device.SetTemperatureZone1 = value;
485
- //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
486
- break;
487
- case caseZone1: //Zone 1
488
- switch (zone.operationMode) {
489
- case 1: //HEAT FLOW
490
- deviceData.Device.SetHeatFlowTemperatureZone1 = value;
491
- flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
486
+ switch (accountTypeMelcloud) {
487
+ case true: //Melcloud
488
+ switch (i) {
489
+ case caseHeatPump: //Heat Pump
490
+ //deviceData.Device.SetTemperatureZone1 = value;
491
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
492
492
  break;
493
- case 4: //COOL FLOW
494
- deviceData.Device.SetCoolFlowTemperatureZone1 = value;
495
- flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
493
+ case caseZone1: //Zone 1
494
+ switch (zone.operationMode) {
495
+ case 1: //HEAT FLOW
496
+ deviceData.Device.SetHeatFlowTemperatureZone1 = value;
497
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
498
+ break;
499
+ case 4: //COOL FLOW
500
+ deviceData.Device.SetCoolFlowTemperatureZone1 = value;
501
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
502
+ break;
503
+ default:
504
+ deviceData.Device.SetTemperatureZone1 = value;
505
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
506
+ break
507
+ };
508
+ break;
509
+ case caseHotWater: //Hot Water
510
+ deviceData.Device.SetTankWaterTemperature = value;
511
+ flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
512
+ break;
513
+ case caseZone2: //Zone 2
514
+ switch (zone.operationMode) {
515
+ case 1: //HEAT FLOW
516
+ deviceData.Device.SetHeatFlowTemperatureZone2 = value;
517
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
518
+ break;
519
+ case 4: //COOL FLOW
520
+ deviceData.Device.SetCoolFlowTemperatureZone2 = value;
521
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
522
+ break;
523
+ default:
524
+ deviceData.Device.SetTemperatureZone2 = value;
525
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
526
+ break
527
+ };
496
528
  break;
497
- default:
498
- deviceData.Device.SetTemperatureZone1 = value;
499
- flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
500
- break
501
529
  };
502
530
  break;
503
- case caseHotWater: //Hot Water
504
- deviceData.Device.SetTankWaterTemperature = value;
505
- flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
506
- break;
507
- case caseZone2: //Zone 2
508
- switch (zone.operationMode) {
509
- case 1: //HEAT FLOW
510
- deviceData.Device.SetHeatFlowTemperatureZone2 = value;
511
- flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
531
+ default:
532
+ switch (i) {
533
+ case caseHeatPump: //Heat Pump
534
+ //deviceData.Device.SetTemperatureZone1 = value;
535
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
512
536
  break;
513
- case 4: //COOL FLOW
514
- deviceData.Device.SetCoolFlowTemperatureZone2 = value;
515
- flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
537
+ case caseZone1: //Zone 1
538
+ deviceData.Device.SetTemperatureZone1 = value;
539
+ break;
540
+ case caseHotWater: //Hot Water
541
+ deviceData.Device.SetTankWaterTemperature = value;
516
542
  break;
517
- default:
543
+ case caseZone2: //Zone 2
518
544
  deviceData.Device.SetTemperatureZone2 = value;
519
- flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
520
- break
545
+ break;
521
546
  };
522
547
  break;
523
- };
548
+ }
524
549
 
525
- if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
526
- if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
550
+ if (this.logInfo && i > 0) this.emit('info', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
551
+ if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
527
552
  } catch (error) {
528
553
  if (this.logWarn) this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
529
554
  };
@@ -544,51 +569,72 @@ class DeviceAtw extends EventEmitter {
544
569
  .onSet(async (value) => {
545
570
  try {
546
571
  let flag = null;
547
- switch (i) {
548
- case caseHeatPump: //Heat Pump
549
- //deviceData.Device.SetTemperatureZone1 = value;
550
- //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
551
- break;
552
- case caseZone1: //Zone 1
553
- switch (zone.operationMode) {
554
- case 1: //HEAT FLOW
555
- deviceData.Device.SetHeatFlowTemperatureZone1 = value;
556
- flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
572
+ switch (accountTypeMelcloud) {
573
+ case true: //Melcloud
574
+ switch (i) {
575
+ case caseHeatPump: //Heat Pump
576
+ //deviceData.Device.SetTemperatureZone1 = value;
577
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
557
578
  break;
558
- case 4: //COOL FLOW
559
- deviceData.Device.SetCoolFlowTemperatureZone1 = value;
560
- flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
579
+ case caseZone1: //Zone 1
580
+ switch (zone.operationMode) {
581
+ case 1: //HEAT FLOW
582
+ deviceData.Device.SetHeatFlowTemperatureZone1 = value;
583
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
584
+ break;
585
+ case 4: //COOL FLOW
586
+ deviceData.Device.SetCoolFlowTemperatureZone1 = value;
587
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
588
+ break;
589
+ default:
590
+ deviceData.Device.SetTemperatureZone1 = value;
591
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
592
+ break
593
+ };
594
+ break;
595
+ case caseHotWater: //Hot Water
596
+ deviceData.Device.SetTankWaterTemperature = value;
597
+ flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
598
+ break;
599
+ case caseZone2: //Zone 2
600
+ switch (zone.operationMode) {
601
+ case 1: //HEAT FLOW
602
+ deviceData.Device.SetHeatFlowTemperatureZone2 = value;
603
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
604
+ break;
605
+ case 4: //COOL FLOW
606
+ deviceData.Device.SetCoolFlowTemperatureZone2 = value;
607
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
608
+ break;
609
+ default:
610
+ deviceData.Device.SetTemperatureZone2 = value;
611
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
612
+ break
613
+ };
561
614
  break;
562
- default:
563
- deviceData.Device.SetTemperatureZone1 = value;
564
- flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
565
- break
566
615
  };
567
616
  break;
568
- case caseHotWater: //Hot Water
569
- deviceData.Device.SetTankWaterTemperature = value;
570
- flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
571
- break;
572
- case caseZone2: //Zone 2
573
- switch (zone.operationMode) {
574
- case 1: //HEAT FLOW
575
- deviceData.Device.SetHeatFlowTemperatureZone2 = value;
576
- flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
617
+ default:
618
+ switch (i) {
619
+ case caseHeatPump: //Heat Pump
620
+ //deviceData.Device.SetTemperatureZone1 = value;
621
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
622
+ break;
623
+ case caseZone1: //Zone 1
624
+ deviceData.Device.SetTemperatureZone1 = value;
577
625
  break;
578
- case 4: //COOL FLOW
579
- deviceData.Device.SetCoolFlowTemperatureZone2 = value;
580
- flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
626
+ case caseHotWater: //Hot Water
627
+ deviceData.Device.SetTankWaterTemperature = value;
581
628
  break;
582
- default:
629
+ case caseZone2: //Zone 2
583
630
  deviceData.Device.SetTemperatureZone2 = value;
584
- flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
585
- break
631
+ break;
586
632
  };
587
633
  break;
588
- };
634
+ }
589
635
 
590
636
  if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
591
- if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
637
+ if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
592
638
  } catch (error) {
593
639
  if (this.logWarn) this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
594
640
  };
@@ -604,29 +650,31 @@ class DeviceAtw extends EventEmitter {
604
650
 
605
651
  try {
606
652
  value = value ? true : false;
653
+ let flag = null;
654
+
607
655
  switch (i) {
608
656
  case caseHeatPump: //Heat Pump
609
657
  deviceData.Device.ProhibitZone1 = value;
610
658
  deviceData.Device.ProhibitHotWater = value;
611
659
  deviceData.Device.ProhibitZone2 = value;
612
- HeatPump.EffectiveFlags.ProhibitHeatingZone1 + HeatPump.EffectiveFlags.ProhibitHotWater + HeatPump.EffectiveFlags.ProhibitHeatingZone2;
660
+ flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1 + HeatPump.EffectiveFlags.ProhibitHotWater + HeatPump.EffectiveFlags.ProhibitHeatingZone2;
613
661
  break;
614
662
  case caseZone1: //Zone 1
615
663
  deviceData.Device.ProhibitZone1 = value;
616
- HeatPump.EffectiveFlags.ProhibitHeatingZone1;
664
+ flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1;
617
665
  break;
618
666
  case caseHotWater: //Hot Water
619
667
  deviceData.Device.ProhibitHotWater = value;
620
- HeatPump.EffectiveFlags.ProhibitHotWater;
668
+ flag = HeatPump.EffectiveFlags.ProhibitHotWater;
621
669
  break;
622
670
  case caseZone2: //Zone 2
623
671
  deviceData.Device.ProhibitZone2 = value;
624
- HeatPump.EffectiveFlags.ProhibitHeatingZone2;
672
+ flag = HeatPump.EffectiveFlags.ProhibitHeatingZone2;
625
673
  break;
626
674
  };
627
675
 
628
676
  if (this.logInfo) this.emit('info', `${zoneName}, Set lock physical controls: ${value ? 'Lock' : 'Unlock'}`);
629
- await this.melCloudAtw.send(this.accountType, this.displayType, deviceData);
677
+ await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
630
678
  } catch (error) {
631
679
  if (this.logWarn) this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
632
680
  };
@@ -738,7 +786,7 @@ class DeviceAtw extends EventEmitter {
738
786
  flag = HeatPump.EffectiveFlags.ForcedHotWaterMode;
739
787
  break;
740
788
  };
741
- operationModeText = deviceData.Device.OperationMode === 1 ? HeatPump.ForceDhwMapEnumToString[1] : HeatPump.ForceDhwMapEnumToString[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
789
+ operationModeText = deviceData.Device.OperationMode === 1 ? HeatPump.ForceDhwMapEnumToStringInfo[1] : HeatPump.ForceDhwMapEnumToStringInfo[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
742
790
  break;
743
791
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
744
792
  switch (value) {
@@ -764,7 +812,7 @@ class DeviceAtw extends EventEmitter {
764
812
  };
765
813
 
766
814
  if (this.logInfo) this.emit('info', `${zoneName}, Set operation mode: ${operationModeText}`);
767
- await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
815
+ await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
768
816
  } catch (error) {
769
817
  if (this.logWarn) this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
770
818
  };
@@ -787,27 +835,72 @@ class DeviceAtw extends EventEmitter {
787
835
  .onSet(async (value) => {
788
836
  try {
789
837
  let flag = null;
790
- switch (i) {
791
- case caseHeatPump: //Heat Pump
792
- //deviceData.Device.SetTemperatureZone1 = value;
793
- //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
794
- break;
795
- case caseZone1: //Zone 1
796
- deviceData.Device.SetTemperatureZone1 = value;
797
- flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
798
- break;
799
- case caseHotWater: //Hot Water
800
- deviceData.Device.SetTankWaterTemperature = value;
801
- flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
838
+ switch (accountTypeMelcloud) {
839
+ case true: //Melcloud
840
+ switch (i) {
841
+ case caseHeatPump: //Heat Pump
842
+ //deviceData.Device.SetTemperatureZone1 = value;
843
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
844
+ break;
845
+ case caseZone1: //Zone 1
846
+ switch (zone.operationMode) {
847
+ case 1: //HEAT FLOW
848
+ deviceData.Device.SetHeatFlowTemperatureZone1 = value;
849
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
850
+ break;
851
+ case 4: //COOL FLOW
852
+ deviceData.Device.SetCoolFlowTemperatureZone1 = value;
853
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
854
+ break;
855
+ default:
856
+ deviceData.Device.SetTemperatureZone1 = value;
857
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone1;
858
+ break
859
+ };
860
+ break;
861
+ case caseHotWater: //Hot Water
862
+ deviceData.Device.SetTankWaterTemperature = value;
863
+ flag = HeatPump.EffectiveFlags.SetTankWaterTemperature;
864
+ break;
865
+ case caseZone2: //Zone 2
866
+ switch (zone.operationMode) {
867
+ case 1: //HEAT FLOW
868
+ deviceData.Device.SetHeatFlowTemperatureZone2 = value;
869
+ flag = HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
870
+ break;
871
+ case 4: //COOL FLOW
872
+ deviceData.Device.SetCoolFlowTemperatureZone2 = value;
873
+ flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
874
+ break;
875
+ default:
876
+ deviceData.Device.SetTemperatureZone2 = value;
877
+ flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
878
+ break
879
+ };
880
+ break;
881
+ };
802
882
  break;
803
- case caseZone2: //Zone 2
804
- deviceData.Device.SetTemperatureZone2 = value;
805
- flag = HeatPump.EffectiveFlags.SetTemperatureZone2;
883
+ default:
884
+ switch (i) {
885
+ case caseHeatPump: //Heat Pump
886
+ //deviceData.Device.SetTemperatureZone1 = value;
887
+ //flag = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
888
+ break;
889
+ case caseZone1: //Zone 1
890
+ deviceData.Device.SetTemperatureZone1 = value;
891
+ break;
892
+ case caseHotWater: //Hot Water
893
+ deviceData.Device.SetTankWaterTemperature = value;
894
+ break;
895
+ case caseZone2: //Zone 2
896
+ deviceData.Device.SetTemperatureZone2 = value;
897
+ break;
898
+ };
806
899
  break;
807
- };
900
+ }
808
901
 
809
- if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
810
- if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
902
+ if (this.logInfo && i > 0) this.emit('info', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
903
+ if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag, null);
811
904
  } catch (error) {
812
905
  if (this.logWarn) this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
813
906
  };
@@ -843,7 +936,7 @@ class DeviceAtw extends EventEmitter {
843
936
  const serviceName = `${deviceTypeString} ${accessoryName}: ${zoneName}`;
844
937
  switch (i) {
845
938
  case caseHeatPumpSensor: //Heat Pump
846
- if (zone.roomTemperature !== null) {
939
+ if (zone.roomTemperature !== null && this.temperatureRoomSensor) {
847
940
  if (this.logDebug) this.emit('debug', `${zoneName}, Prepare temperature sensor service`);
848
941
  this.roomTemperatureSensorService = new Service.TemperatureSensor(`${serviceName}`, `roomTemperatureSensorService${deviceId}`);
849
942
  this.roomTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -856,7 +949,7 @@ class DeviceAtw extends EventEmitter {
856
949
  accessory.addService(this.roomTemperatureSensorService);
857
950
  };
858
951
 
859
- if (zone.flowTemperature !== null) {
952
+ if (zone.flowTemperature !== null && this.temperatureFlowSensor) {
860
953
  if (this.logDebug) this.emit('debug', `Prepare flow temperature sensor service`);
861
954
  this.flowTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `flowTemperatureSensorService${deviceId}`);
862
955
  this.flowTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -870,7 +963,7 @@ class DeviceAtw extends EventEmitter {
870
963
 
871
964
  };
872
965
 
873
- if (zone.returnTemperature !== null) {
966
+ if (zone.returnTemperature !== null && this.temperatureReturnSensor) {
874
967
  if (this.logDebug) this.emit('debug', `Prepare return temperature sensor service`);
875
968
  this.returnTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Return`, `returnTemperatureSensorService${deviceId}`);
876
969
  this.returnTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -884,7 +977,7 @@ class DeviceAtw extends EventEmitter {
884
977
  };
885
978
  break;
886
979
  case caseZone1Sensor: //Zone 1
887
- if (zone.roomTemperature !== null) {
980
+ if (zone.roomTemperature !== null && this.temperatureRoomZone1Sensor) {
888
981
  if (this.logDebug) this.emit('debug', `${zoneName}, Prepare temperature sensor service`);
889
982
  this.roomTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName}`, `roomTemperatureZone1SensorService${deviceId}`);
890
983
  this.roomTemperatureZone1SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -897,7 +990,7 @@ class DeviceAtw extends EventEmitter {
897
990
  accessory.addService(this.roomTemperatureZone1SensorService);
898
991
  };
899
992
 
900
- if (zone.flowTemperature !== null) {
993
+ if (zone.flowTemperature !== null && this.temperatureFlowZone1Sensor) {
901
994
  if (this.logDebug) this.emit('debug', `Prepare flow temperature zone 1 sensor service`);
902
995
  this.flowTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `flowTemperatureZone1SensorService${deviceId}`);
903
996
  this.flowTemperatureZone1SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -910,7 +1003,7 @@ class DeviceAtw extends EventEmitter {
910
1003
  accessory.addService(this.flowTemperatureZone1SensorService);
911
1004
  };
912
1005
 
913
- if (zone.returnTemperature !== null) {
1006
+ if (zone.returnTemperature !== null && this.temperatureReturnZone1Sensor) {
914
1007
  if (this.logDebug) this.emit('debug', `Prepare return temperature zone 1 sensor service`);
915
1008
  this.returnTemperatureZone1SensorService = new Service.TemperatureSensor(`${serviceName} Return`, `returnTemperatureZone1SensorService${deviceId}`);
916
1009
  this.returnTemperatureZone1SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -924,7 +1017,7 @@ class DeviceAtw extends EventEmitter {
924
1017
  };
925
1018
  break;
926
1019
  case caseHotWaterSensor: //Hot Water
927
- if (zone.roomTemperature !== null) {
1020
+ if (zone.roomTemperature !== null && this.temperatureWaterTankSensor) {
928
1021
  if (this.logDebug) this.emit('debug', `${zoneName}, Prepare temperature sensor service`);
929
1022
  this.roomTemperatureWaterTankSensorService = new Service.TemperatureSensor(`${serviceName}`, `roomTemperatureWaterTankSensorService${deviceId}`);
930
1023
  this.roomTemperatureWaterTankSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -937,7 +1030,7 @@ class DeviceAtw extends EventEmitter {
937
1030
  accessory.addService(this.roomTemperatureWaterTankSensorService);
938
1031
  };
939
1032
 
940
- if (zone.flowTemperature !== null) {
1033
+ if (zone.flowTemperature !== null && this.temperatureFlowWaterTankSensor) {
941
1034
  if (this.logDebug) this.emit('debug', `Prepare flow temperature water tank sensor service`);
942
1035
  this.flowTemperatureWaterTankSensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `flowTemperatureWaterTankSensorService${deviceId}`);
943
1036
  this.flowTemperatureWaterTankSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -950,7 +1043,7 @@ class DeviceAtw extends EventEmitter {
950
1043
  accessory.addService(this.flowTemperatureWaterTankSensorService);
951
1044
  };
952
1045
 
953
- if (zone.returnTemperature !== null) {
1046
+ if (zone.returnTemperature !== null && this.temperatureReturnWaterTankSensor) {
954
1047
  if (this.logDebug) this.emit('debug', `Prepare return temperature water tank sensor service`);
955
1048
  this.returnTemperatureWaterTankSensorService = new Service.TemperatureSensor(`${serviceName} Return`, `returnTemperatureWaterTankSensorService${deviceId}`);
956
1049
  this.returnTemperatureWaterTankSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -964,7 +1057,7 @@ class DeviceAtw extends EventEmitter {
964
1057
  };
965
1058
  break;
966
1059
  case caseZone2Sensor: //Zone 2
967
- if (zone.roomTemperature !== null) {
1060
+ if (zone.roomTemperature !== null && this.temperatureRoomZone2Sensor) {
968
1061
  if (this.logDebug) this.emit('debug', `${zoneName}, Prepare temperature sensor service`);
969
1062
  this.roomTemperatureZone2SensorService = new Service.TemperatureSensor(`${serviceName}`, `roomTemperatureZone2SensorService${deviceId}`);
970
1063
  this.roomTemperatureZone2SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -977,7 +1070,7 @@ class DeviceAtw extends EventEmitter {
977
1070
  accessory.addService(this.roomTemperatureZone2SensorService);
978
1071
  };
979
1072
 
980
- if (zone.flowTemperature !== null) {
1073
+ if (zone.flowTemperature !== null && this.temperatureFlowZone2Sensor) {
981
1074
  if (this.logDebug) this.emit('debug', `Prepare flow temperature zone 2 sensor service`);
982
1075
  this.flowTemperatureZone2SensorService = new Service.TemperatureSensor(`${serviceName} Flow`, `flowTemperatureZone2SensorService${deviceId}`);
983
1076
  this.flowTemperatureZone2SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -990,7 +1083,7 @@ class DeviceAtw extends EventEmitter {
990
1083
  accessory.addService(this.flowTemperatureZone2SensorService);
991
1084
  };
992
1085
 
993
- if (zone.returnTemperature !== null) {
1086
+ if (zone.returnTemperature !== null && this.temperatureReturnZone2Sensor) {
994
1087
  if (this.logDebug) this.emit('debug', `Prepare return temperature zone 2 sensor service`);
995
1088
  this.returnTemperatureZone2SensorService = new Service.TemperatureSensor(`${serviceName} Return`, `returnTemperatureZone2SensorService${deviceId}`);
996
1089
  this.returnTemperatureZone2SensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
@@ -1691,10 +1784,13 @@ class DeviceAtw extends EventEmitter {
1691
1784
  const canCool = deviceData.Device[supportCoolKey] ?? false;
1692
1785
  const heatCoolModes = canHeat && canCool ? 0 : canHeat ? 1 : canCool ? 2 : 3;
1693
1786
  const temperatureIncrement = deviceData.Device[tempStepKey] ?? 1;
1787
+ const minSetHeatFlowTemperature = accountTypeMelcloud ? 25 : 10
1788
+ const maxSetHeatFlowTemperature = accountTypeMelcloud ? 60 : 30;
1789
+ const minSetCoolFlowTemperature = 16
1694
1790
  const minSetTemperature = deviceData.Device.MinSetTemperature ?? 10;
1695
1791
  const maxSetTemperature = deviceData.Device.MaxSetTemperature ?? 30;
1696
- const minTankTemperature = deviceData.Device.MinTankTemperature ?? 40;
1697
- const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 60;
1792
+ const minSetTankTemperature = deviceData.Device.MinTankTemperature ?? 40;
1793
+ const maxSetTankTemperature = deviceData.Device.MaxTankTemperature ?? 60;
1698
1794
 
1699
1795
  //zones
1700
1796
  let currentZoneCase = 0;
@@ -1706,10 +1802,10 @@ class DeviceAtw extends EventEmitter {
1706
1802
 
1707
1803
  //zones sensors
1708
1804
  let currentZoneSensorCase = 0;
1709
- const caseHeatPumpSensor = this.temperatureSensor || this.temperatureFlowSensor || this.temperatureReturnSensor ? currentZoneSensorCase++ : -1;
1710
- const caseZone1Sensor = this.temperatureFlowZone1Sensor || this.temperatureReturnZone1Sensor ? currentZoneSensorCase++ : -1;
1711
- const caseHotWaterSensor = (this.temperatureFlowWaterTankSensor || this.temperatureReturnWaterTankSensor) && deviceData.Device.HasHotWaterTank ? currentZoneSensorCase++ : -1;
1712
- const caseZone2Sensor = (this.temperatureFlowZone2Sensor || this.temperatureReturnZone2Sensor) && deviceData.Device.HasZone2 !== false && deviceData.Device.HasZone2 !== null ? currentZoneSensorCase++ : -1;
1805
+ const caseHeatPumpSensor = this.temperatureRoomSensor || this.temperatureFlowSensor || this.temperatureReturnSensor ? currentZoneSensorCase++ : -1;
1806
+ const caseZone1Sensor = this.temperatureRoomZone1Sensor || this.temperatureFlowZone1Sensor || this.temperatureReturnZone1Sensor ? currentZoneSensorCase++ : -1;
1807
+ const caseHotWaterSensor = (this.temperatureWaterTankSensor || this.temperatureFlowWaterTankSensor || this.temperatureReturnWaterTankSensor) && deviceData.Device.HasHotWaterTank ? currentZoneSensorCase++ : -1;
1808
+ const caseZone2Sensor = (this.temperatureRoomZone2Sensor || this.temperatureFlowZone2Sensor || this.temperatureReturnZone2Sensor) && deviceData.Device.HasZone2 !== false && deviceData.Device.HasZone2 !== null ? currentZoneSensorCase++ : -1;
1713
1809
  const zonesSensorsCount = currentZoneSensorCase;
1714
1810
 
1715
1811
  //heat pump
@@ -1719,20 +1815,20 @@ class DeviceAtw extends EventEmitter {
1719
1815
  const unitStatus = deviceData.Device.UnitStatus ?? power; // fallback to power melcloud home
1720
1816
  const operationMode = deviceData.Device.OperationMode;
1721
1817
  const outdoorTemperature = deviceData.Device.OutdoorTemperature ?? deviceData.Device.RoomTemperatureZone1; // fallback to room temperature zone 1 melcloud home
1722
- const flowTemperatureHeatPump = deviceData.Device.FlowTemperature ?? null; // only sensor
1723
- const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature ?? null; // only sensor
1818
+ const flowTemperatureHeatPump = deviceData.Device.FlowTemperature;
1819
+ const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature;
1724
1820
 
1725
1821
  //zone 1
1726
1822
  const zone1Name = deviceData.Zone1Name ?? 'Zone 1';
1727
1823
  const roomTemperatureZone1 = deviceData.Device.RoomTemperatureZone1;
1728
1824
  const operationModeZone1 = deviceData.Device.OperationModeZone1;
1729
1825
  const setTemperatureZone1 = deviceData.Device.SetTemperatureZone1;
1730
- const setHeatFlowTemperatureZone1 = deviceData.Device.SetHeatFlowTemperatureZone1 ?? setTemperatureZone1;
1731
- const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1 ?? setTemperatureZone1;
1826
+ const setHeatFlowTemperatureZone1 = deviceData.Device.SetHeatFlowTemperatureZone1;
1827
+ const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1;
1732
1828
  const prohibitZone1 = deviceData.Device.ProhibitZone1 ?? false;
1733
1829
  const idleZone1 = deviceData.Device.IdleZone1 ?? false;
1734
- const flowTemperatureZone1 = deviceData.Device.FlowTemperatureZone1 ?? roomTemperatureZone1; // fallback to room temperature melcloud home
1735
- const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1 ?? null; // only sensor
1830
+ const flowTemperatureZone1 = deviceData.Device.FlowTemperatureZone1;
1831
+ const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1;
1736
1832
 
1737
1833
  //hot water
1738
1834
  const hotWaterName = 'Hot Water';
@@ -1741,20 +1837,20 @@ class DeviceAtw extends EventEmitter {
1741
1837
  const forcedHotWaterMode = deviceData.Device.ForcedHotWaterMode ? 1 : 0;
1742
1838
  const ecoHotWater = deviceData.Device.EcoHotWater ?? false;
1743
1839
  const prohibitHotWater = deviceData.Device.ProhibitHotWater ?? false;
1744
- const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler ?? null; // only sensor
1745
- const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler ?? null; // only sensor
1840
+ const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler;
1841
+ const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
1746
1842
 
1747
1843
  //zone 2
1748
1844
  const zone2Name = deviceData.Zone2Name ?? 'Zone 2';
1749
1845
  const roomTemperatureZone2 = deviceData.Device.RoomTemperatureZone2;
1750
1846
  const operationModeZone2 = deviceData.Device.OperationModeZone2;
1751
1847
  const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
1752
- const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2 ?? setTemperatureZone2;
1753
- const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2 ?? setTemperatureZone2;
1848
+ const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
1849
+ const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
1754
1850
  const prohibitZone2 = deviceData.Device.ProhibitZone2 ?? false;
1755
1851
  const idleZone2 = deviceData.Device.IdleZone2 ?? false;
1756
- const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2 ?? roomTemperatureZone2; // fallback to room temperature melcloud home
1757
- const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2 ?? null; // only sensor
1852
+ const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2;
1853
+ const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
1758
1854
 
1759
1855
  //device
1760
1856
  const isConnected = accountTypeMelcloud ? !deviceData.Device[connectKey] : deviceData.Device[connectKey];
@@ -1836,30 +1932,40 @@ class DeviceAtw extends EventEmitter {
1836
1932
  break;
1837
1933
  case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1838
1934
  name = zone1Name;
1839
- operationModeZone = operationMode;
1935
+ operationModeZone = operationModeZone1;
1840
1936
  currentOperationMode = !power ? 0 : (idleZone1 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone1]); //INACTIVE, IDLE, HEATING, COOLING
1841
1937
  targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone1]; //AUTO, HEAT, COOL
1842
1938
 
1843
- switch (operationModeZone1) {
1844
- case 1: //HEAT FLOW
1845
- setTemperature = setHeatFlowTemperatureZone1;
1846
- roomTemperature = flowTemperatureZone1;
1847
- temperatureSetPropsMinValue = 25;
1848
- temperatureSetPropsMaxValue = 60;
1849
- break;
1850
- case 4: //COOL FLOW
1851
- setTemperature = setCoolFlowTemperatureZone1;
1852
- roomTemperature = flowTemperatureZone1;
1853
- temperatureSetPropsMinValue = 16;
1854
- temperatureSetPropsMaxValue = 31;
1939
+ switch (accountTypeMelcloud) {
1940
+ case true: //Melcloud
1941
+ switch (operationModeZone1) {
1942
+ case 1: //HEAT FLOW
1943
+ setTemperature = setHeatFlowTemperatureZone1;
1944
+ roomTemperature = flowTemperatureZone1;
1945
+ temperatureSetPropsMinValue = minSetHeatFlowTemperature;
1946
+ temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
1947
+ break;
1948
+ case 4: //COOL FLOW
1949
+ setTemperature = setCoolFlowTemperatureZone1;
1950
+ roomTemperature = flowTemperatureZone1;
1951
+ temperatureSetPropsMinValue = minSetCoolFlowTemperature;
1952
+ temperatureSetPropsMaxValue = maxSetTemperature;
1953
+ break;
1954
+ default:
1955
+ setTemperature = setTemperatureZone1;
1956
+ roomTemperature = roomTemperatureZone1;
1957
+ temperatureSetPropsMinValue = minSetTemperature;
1958
+ temperatureSetPropsMaxValue = maxSetTemperature;
1959
+ break
1960
+ };
1855
1961
  break;
1856
- default:
1962
+ default: //Melcloud Home
1857
1963
  setTemperature = setTemperatureZone1;
1858
1964
  roomTemperature = roomTemperatureZone1;
1859
- temperatureSetPropsMinValue = 10;
1860
- temperatureSetPropsMaxValue = 31;
1861
- break
1862
- };
1965
+ temperatureSetPropsMinValue = minSetTemperature;
1966
+ temperatureSetPropsMaxValue = maxSetTemperature;
1967
+ break;
1968
+ }
1863
1969
 
1864
1970
  lockPhysicalControl = prohibitZone1 ? 1 : 0;
1865
1971
  operationModeSetPropsMinValue = [0, 0, 1, 0][heatCoolModes];
@@ -1868,7 +1974,7 @@ class DeviceAtw extends EventEmitter {
1868
1974
  break;
1869
1975
  case caseHotWater: //Hot Water - NORMAL, HEAT NOW
1870
1976
  name = hotWaterName;
1871
- operationModeZone = operationMode;
1977
+ operationModeZone = forcedHotWaterMode;
1872
1978
  currentOperationMode = !power ? 0 : (operationMode === 1 ? 2 : [1, 2][forcedHotWaterMode]); //INACTIVE, IDLE, HEATING, COOLING
1873
1979
  targetOperationMode = [0, 1][forcedHotWaterMode] //AUTO, HEAT, COOL
1874
1980
  roomTemperature = tankWaterTemperature;
@@ -1878,12 +1984,12 @@ class DeviceAtw extends EventEmitter {
1878
1984
  operationModeSetPropsMinValue = 0;
1879
1985
  operationModeSetPropsMaxValue = 1;
1880
1986
  operationModeSetPropsValidValues = [0, 1];
1881
- temperatureSetPropsMinValue = minTankTemperature;
1882
- temperatureSetPropsMaxValue = maxTankTemperature;
1987
+ temperatureSetPropsMinValue = minSetTankTemperature;
1988
+ temperatureSetPropsMaxValue = maxSetTankTemperature;
1883
1989
  break;
1884
1990
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1885
1991
  name = zone2Name;
1886
- operationModeZone = operationMode;
1992
+ operationModeZone = operationModeZone2;
1887
1993
  currentOperationMode = !power ? 0 : (idleZone2 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone2]); //INACTIVE, IDLE, HEATING, COOLING
1888
1994
  targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone2]; //AUTO, HEAT, COOL
1889
1995
 
@@ -1891,20 +1997,20 @@ class DeviceAtw extends EventEmitter {
1891
1997
  case 1: //HEAT FLOW
1892
1998
  setTemperature = setHeatFlowTemperatureZone2;
1893
1999
  roomTemperature = flowTemperatureZone2;
1894
- temperatureSetPropsMinValue = 25;
1895
- temperatureSetPropsMaxValue = 60;
2000
+ temperatureSetPropsMinValue = minSetHeatFlowTemperature;
2001
+ temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
1896
2002
  break;
1897
2003
  case 4: //COOL FLOW
1898
2004
  setTemperature = setCoolFlowTemperatureZone2;
1899
2005
  roomTemperature = flowTemperatureZone2;
1900
- temperatureSetPropsMinValue = 16;
1901
- temperatureSetPropsMaxValue = 31;
2006
+ temperatureSetPropsMinValue = minSetCoolFlowTemperature;
2007
+ temperatureSetPropsMaxValue = maxSetTemperature;
1902
2008
  break;
1903
2009
  default:
1904
2010
  setTemperature = setTemperatureZone2;
1905
2011
  roomTemperature = roomTemperatureZone2;
1906
- temperatureSetPropsMinValue = 10;
1907
- temperatureSetPropsMaxValue = 31;
2012
+ temperatureSetPropsMinValue = minSetTemperature;
2013
+ temperatureSetPropsMaxValue = maxSetTemperature;
1908
2014
  break
1909
2015
  };
1910
2016
 
@@ -1946,30 +2052,40 @@ class DeviceAtw extends EventEmitter {
1946
2052
  break;
1947
2053
  case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1948
2054
  name = zone1Name;
1949
- operationModeZone = operationMode;
2055
+ operationModeZone = operationModeZone1;
1950
2056
  currentOperationMode = !power ? 0 : idleZone1 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone1]; //OFF, HEAT, COOL
1951
2057
  targetOperationMode = [1, 2, 3, 1, 2, 1][operationModeZone1]; //OFF, HEAT, COOL, AUTO
1952
2058
 
1953
- switch (operationModeZone1) {
1954
- case 1: //HEAT FLOW
1955
- setTemperature = setHeatFlowTemperatureZone1;
1956
- roomTemperature = flowTemperatureZone1;
1957
- temperatureSetPropsMinValue = 25;
1958
- temperatureSetPropsMaxValue = 60;
1959
- break;
1960
- case 4: //COOL FLOW
1961
- setTemperature = setCoolFlowTemperatureZone1;
1962
- roomTemperature = flowTemperatureZone1;
1963
- temperatureSetPropsMinValue = 16;
1964
- temperatureSetPropsMaxValue = 31;
2059
+ switch (accountTypeMelcloud) {
2060
+ case true: //Melcloud
2061
+ switch (operationModeZone1) {
2062
+ case 1: //HEAT FLOW
2063
+ setTemperature = setHeatFlowTemperatureZone1;
2064
+ roomTemperature = flowTemperatureZone1;
2065
+ temperatureSetPropsMinValue = minSetHeatFlowTemperature;
2066
+ temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
2067
+ break;
2068
+ case 4: //COOL FLOW
2069
+ setTemperature = setCoolFlowTemperatureZone1;
2070
+ roomTemperature = flowTemperatureZone1;
2071
+ temperatureSetPropsMinValue = minSetCoolFlowTemperature;
2072
+ temperatureSetPropsMaxValue = maxSetTemperature;
2073
+ break;
2074
+ default:
2075
+ setTemperature = setTemperatureZone1;
2076
+ roomTemperature = roomTemperatureZone1;
2077
+ temperatureSetPropsMinValue = minSetTemperature;
2078
+ temperatureSetPropsMaxValue = maxSetTemperature;
2079
+ break
2080
+ };
1965
2081
  break;
1966
- default:
2082
+ default: //Melcloud Home
1967
2083
  setTemperature = setTemperatureZone1;
1968
2084
  roomTemperature = roomTemperatureZone1;
1969
- temperatureSetPropsMinValue = 10;
1970
- temperatureSetPropsMaxValue = 31;
1971
- break
1972
- };
2085
+ temperatureSetPropsMinValue = minSetTemperature;
2086
+ temperatureSetPropsMaxValue = maxSetTemperature;
2087
+ break;
2088
+ }
1973
2089
 
1974
2090
  operationModeSetPropsMinValue = [1, 1, 1, 0][heatCoolModes];
1975
2091
  operationModeSetPropsMaxValue = [3, 3, 2, 0][heatCoolModes];
@@ -1977,7 +2093,7 @@ class DeviceAtw extends EventEmitter {
1977
2093
  break;
1978
2094
  case caseHotWater: //Hot Water - NORMAL, HEAT NOW
1979
2095
  name = hotWaterName;
1980
- operationModeZone = operationMode;
2096
+ operationModeZone = forcedHotWaterMode;
1981
2097
  currentOperationMode = !power ? 0 : (operationMode === 1 ? 1 : [0, 1][forcedHotWaterMode]); //OFF, HEAT, COOL
1982
2098
  targetOperationMode = [3, 1][forcedHotWaterMode] //OFF, HEAT, COOL, AUTO
1983
2099
  roomTemperature = tankWaterTemperature;
@@ -1991,7 +2107,7 @@ class DeviceAtw extends EventEmitter {
1991
2107
  break;
1992
2108
  case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
1993
2109
  name = zone2Name;
1994
- operationModeZone = operationMode;
2110
+ operationModeZone = operationModeZone2;
1995
2111
  currentOperationMode = !power ? 0 : (idleZone2 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone2]); //OFF, HEAT, COOL
1996
2112
  targetOperationMode = [1, 2, 3, 1, 2, 1][operationModeZone2]; //OFF, HEAT, COOL, AUTO
1997
2113
 
@@ -1999,20 +2115,20 @@ class DeviceAtw extends EventEmitter {
1999
2115
  case 1: //HEAT FLOW
2000
2116
  setTemperature = setHeatFlowTemperatureZone2;
2001
2117
  roomTemperature = flowTemperatureZone2;
2002
- temperatureSetPropsMinValue = 25;
2003
- temperatureSetPropsMaxValue = 60;
2118
+ temperatureSetPropsMinValue = minSetHeatFlowTemperature;
2119
+ temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
2004
2120
  break;
2005
2121
  case 4: //COOL FLOW
2006
2122
  setTemperature = setCoolFlowTemperatureZone2;
2007
2123
  roomTemperature = flowTemperatureZone2;
2008
- temperatureSetPropsMinValue = 16;
2009
- temperatureSetPropsMaxValue = 31;
2124
+ temperatureSetPropsMinValue = minSetCoolFlowTemperature;
2125
+ temperatureSetPropsMaxValue = maxSetTemperature;
2010
2126
  break;
2011
2127
  default:
2012
2128
  setTemperature = setTemperatureZone2;
2013
2129
  roomTemperature = roomTemperatureZone2;
2014
- temperatureSetPropsMinValue = 10;
2015
- temperatureSetPropsMaxValue = 31;
2130
+ temperatureSetPropsMinValue = minSetTemperature;
2131
+ temperatureSetPropsMaxValue = maxSetTemperature;
2016
2132
  break
2017
2133
  };
2018
2134
 
@@ -2033,12 +2149,6 @@ class DeviceAtw extends EventEmitter {
2033
2149
  break;
2034
2150
  };
2035
2151
 
2036
- //update services
2037
- for (const { type, value } of characteristics) {
2038
- if (!this.functions.isValidValue(value)) continue;
2039
- this.melCloudServices?.[i]?.updateCharacteristic(type, value);
2040
- }
2041
-
2042
2152
  //add every zone to array
2043
2153
  const zone = {
2044
2154
  name: name,
@@ -2056,6 +2166,12 @@ class DeviceAtw extends EventEmitter {
2056
2166
  };
2057
2167
  obj.zones.push(zone);
2058
2168
 
2169
+ //update services
2170
+ for (const { type, value } of characteristics) {
2171
+ if (!this.functions.isValidValue(value)) continue;
2172
+ this.melCloudServices?.[i]?.updateCharacteristic(type, value);
2173
+ }
2174
+
2059
2175
  //log current state
2060
2176
  if (this.logInfo) {
2061
2177
  let operationModeText = '';
@@ -2067,7 +2183,7 @@ class DeviceAtw extends EventEmitter {
2067
2183
  this.emit('info', `${name} Outdoor temperature: ${roomTemperature}${obj.temperatureUnit}`);
2068
2184
  this.emit('info', `${name} Temperature display unit: ${obj.temperatureUnit}`);
2069
2185
  this.emit('info', `${name} Lock physical controls: ${lockPhysicalControl ? 'Locked' : 'Unlocked'}`);
2070
- if (this.accountType === 'melcloudhome') this.emit('info', `Signal strength: ${deviceData.Rssi}dBm`);
2186
+ if (!accountTypeMelcloud) this.emit('info', `Signal strength: ${deviceData.Rssi}dBm`);
2071
2187
  break;
2072
2188
  case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
2073
2189
  operationModeText = idleZone1 ? HeatPump.OperationModeZoneMapEnumToStringInfo[6] : HeatPump.OperationModeZoneMapEnumToStringInfo[operationModeZone1];
@@ -2078,7 +2194,7 @@ class DeviceAtw extends EventEmitter {
2078
2194
  this.emit('info', `${name} Lock physical controls: ${lockPhysicalControl ? 'Locked' : 'Unlocked'}`);
2079
2195
  break;
2080
2196
  case caseHotWater: //Hot Water - AUTO, HEAT NOW
2081
- operationModeText = operationMode === 1 ? HeatPump.ForceDhwMapEnumToString[1] : HeatPump.ForceDhwMapEnumToString[forcedHotWaterMode ? 1 : 0];
2197
+ operationModeText = operationMode === 1 ? HeatPump.ForceDhwMapEnumToStringInfo[1] : HeatPump.ForceDhwMapEnumToStringInfo[forcedHotWaterMode ? 1 : 0];
2082
2198
  this.emit('info', `${name} Operation mode: ${operationModeText}`);
2083
2199
  this.emit('info', `${name} Temperature: ${roomTemperature}${obj.temperatureUnit}`);
2084
2200
  this.emit('info', `${name} Target temperature: ${setTemperature}${obj.temperatureUnit}`)
@@ -193,20 +193,6 @@ class MelCloudAtw extends EventEmitter {
193
193
 
194
194
  async send(accountType, displayType, deviceData, flag, flagData) {
195
195
  try {
196
-
197
- //prevent to set out of range temp
198
- const minTempZones = 10;
199
- const maxTempZones = 30;
200
- const minTankTemperature = deviceData.Device.MinTankTemperature ?? 40;
201
- const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 60;
202
-
203
- deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone1;
204
- deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 > maxTempZones ? maxTempZones : deviceData.Device.SetTemperatureZone1;
205
- deviceData.Device.SetTemperatureZone2 = deviceData.Device.SetTemperatureZone2 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone2;
206
- deviceData.Device.SetTemperatureZone2 = deviceData.Device.SetTemperatureZone2 > maxTempZones ? maxTempZones : deviceData.Device.SetTemperatureZone2;
207
- deviceData.Device.SetTankWaterTemperature = deviceData.Device.SetTankWaterTemperature < minTankTemperature ? minTankTemperature : deviceData.Device.SetTankWaterTemperature;
208
- deviceData.Device.SetTankWaterTemperature = deviceData.Device.SetTankWaterTemperature > maxTankTemperature ? maxTankTemperature : deviceData.Device.SetTankWaterTemperature;
209
-
210
196
  let method = null
211
197
  let payload = {};
212
198
  let path = '';
@@ -294,13 +280,15 @@ class MelCloudAtw extends EventEmitter {
294
280
  default:
295
281
  payload = {
296
282
  power: deviceData.Device.Power,
297
- setTemperatureZone1: deviceData.Device.SetTemperatureZone1,
298
- setTemperatureZone2: deviceData.Device.SetTemperatureZone2,
283
+ inStandbyMode: deviceData.Device.InStandbyMode,
299
284
  operationMode: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationMode],
300
285
  operationModeZone1: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationModeZone1],
301
- operationModeZone2: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationModeZone2],
286
+ setTemperatureZone1: deviceData.Device.SetTemperatureZone1,
287
+ prohibitHotWater: deviceData.Device.ProhibitHotWater,
302
288
  setTankWaterTemperature: deviceData.Device.SetTankWaterTemperature,
303
- forcedHotWaterMode: deviceData.Device.ForcedHotWaterMode
289
+ forcedHotWaterMode: deviceData.Device.ForcedHotWaterMode,
290
+ operationModeZone2: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationModeZone2],
291
+ setTemperatureZone2: deviceData.Device.SetTemperatureZone2
304
292
  };
305
293
  method = 'PUT';
306
294
  path = ApiUrls.Home.Put.Atw.replace('deviceid', deviceData.DeviceID);
@@ -326,11 +326,11 @@ class MelCloudHome extends EventEmitter {
326
326
  }, 30000);
327
327
  })
328
328
  .on('pong', () => {
329
- if (this.logDebug) this.emit('debug', `Socket received heartbeat`);
329
+ if (this.logDebug) this.emit('debug', `Web socket received heartbeat`);
330
330
  })
331
331
  .on('message', (message) => {
332
332
  const parsedMessage = JSON.parse(message);
333
- if (this.logDebug) this.emit('debug', `Incoming message: ${JSON.stringify(parsedMessage, null, 2)}`);
333
+ if (this.logDebug) this.emit('debug', `Web socket incoming message: ${JSON.stringify(parsedMessage, null, 2)}`);
334
334
  if (parsedMessage.message === 'Forbidden') return;
335
335
 
336
336
  this.emit('webSocket', parsedMessage);