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 +9 -0
- package/config.schema.json +57 -12
- package/homebridge-ui/public/index.html +5 -9
- package/package.json +1 -1
- package/src/constants.js +4 -3
- package/src/deviceatw.js +306 -190
- package/src/melcloudatw.js +6 -18
- package/src/melcloudhome.js +2 -2
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
|
package/config.schema.json
CHANGED
|
@@ -1150,50 +1150,92 @@
|
|
|
1150
1150
|
"functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].displayType > 0;"
|
|
1151
1151
|
}
|
|
1152
1152
|
},
|
|
1153
|
-
"
|
|
1154
|
-
"title": "Temperature
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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 (
|
|
483
|
-
case
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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
|
|
494
|
-
|
|
495
|
-
|
|
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
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
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
|
|
514
|
-
deviceData.Device.
|
|
515
|
-
|
|
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
|
-
|
|
543
|
+
case caseZone2: //Zone 2
|
|
518
544
|
deviceData.Device.SetTemperatureZone2 = value;
|
|
519
|
-
|
|
520
|
-
break
|
|
545
|
+
break;
|
|
521
546
|
};
|
|
522
547
|
break;
|
|
523
|
-
}
|
|
548
|
+
}
|
|
524
549
|
|
|
525
|
-
if (this.logInfo && i
|
|
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 (
|
|
548
|
-
case
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
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
|
|
559
|
-
|
|
560
|
-
|
|
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
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
case
|
|
575
|
-
deviceData.Device.
|
|
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
|
|
579
|
-
deviceData.Device.
|
|
580
|
-
flag = HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
|
|
626
|
+
case caseHotWater: //Hot Water
|
|
627
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
581
628
|
break;
|
|
582
|
-
|
|
629
|
+
case caseZone2: //Zone 2
|
|
583
630
|
deviceData.Device.SetTemperatureZone2 = value;
|
|
584
|
-
|
|
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.
|
|
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 (
|
|
791
|
-
case
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
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
|
-
|
|
804
|
-
|
|
805
|
-
|
|
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
|
|
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
|
|
1697
|
-
const
|
|
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.
|
|
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
|
|
1723
|
-
const returnTemperatureHeatPump = deviceData.Device.ReturnTemperature
|
|
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
|
|
1731
|
-
const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1
|
|
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
|
|
1735
|
-
const returnTemperatureZone1 = deviceData.Device.ReturnTemperatureZone1
|
|
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
|
|
1745
|
-
const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler
|
|
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
|
|
1753
|
-
const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2
|
|
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
|
|
1757
|
-
const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2
|
|
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 =
|
|
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 (
|
|
1844
|
-
case
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
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 =
|
|
1860
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
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 =
|
|
1882
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
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 =
|
|
1895
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
1901
|
-
temperatureSetPropsMaxValue =
|
|
2006
|
+
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
2007
|
+
temperatureSetPropsMaxValue = maxSetTemperature;
|
|
1902
2008
|
break;
|
|
1903
2009
|
default:
|
|
1904
2010
|
setTemperature = setTemperatureZone2;
|
|
1905
2011
|
roomTemperature = roomTemperatureZone2;
|
|
1906
|
-
temperatureSetPropsMinValue =
|
|
1907
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
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 (
|
|
1954
|
-
case
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
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 =
|
|
1970
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
2003
|
-
temperatureSetPropsMaxValue =
|
|
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 =
|
|
2009
|
-
temperatureSetPropsMaxValue =
|
|
2124
|
+
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
2125
|
+
temperatureSetPropsMaxValue = maxSetTemperature;
|
|
2010
2126
|
break;
|
|
2011
2127
|
default:
|
|
2012
2128
|
setTemperature = setTemperatureZone2;
|
|
2013
2129
|
roomTemperature = roomTemperatureZone2;
|
|
2014
|
-
temperatureSetPropsMinValue =
|
|
2015
|
-
temperatureSetPropsMaxValue =
|
|
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 (
|
|
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.
|
|
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}`)
|
package/src/melcloudatw.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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);
|
package/src/melcloudhome.js
CHANGED
|
@@ -326,11 +326,11 @@ class MelCloudHome extends EventEmitter {
|
|
|
326
326
|
}, 30000);
|
|
327
327
|
})
|
|
328
328
|
.on('pong', () => {
|
|
329
|
-
if (this.logDebug) this.emit('debug', `
|
|
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', `
|
|
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);
|