homebridge-melcloud-control 4.7.3-beta.9 → 4.7.4
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 +11 -1
- package/config.schema.json +15 -6
- package/homebridge-ui/public/index.html +1 -3
- package/package.json +1 -1
- package/src/deviceata.js +24 -21
- package/src/deviceatw.js +188 -101
- package/src/deviceerv.js +10 -5
- package/src/melcloudatw.js +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -24,13 +24,23 @@ 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.4] - (29.01.2026)
|
|
28
|
+
|
|
29
|
+
## Changes
|
|
30
|
+
|
|
31
|
+
- fix ATW Zone 2
|
|
32
|
+
- cleanup
|
|
33
|
+
|
|
27
34
|
# [4.7.3] - (29.01.2026)
|
|
28
35
|
|
|
29
36
|
## Changes
|
|
30
37
|
|
|
38
|
+
- fix [#235](https://github.com/grzegorz914/homebridge-melcloud-control/issues/235)
|
|
39
|
+
- fix 2 [#233](https://github.com/grzegorz914/homebridge-melcloud-control/issues/233)
|
|
31
40
|
- fix ATW set temperature for Z1 and Z2
|
|
32
41
|
- fix ATW zone operatin mode
|
|
33
|
-
-
|
|
42
|
+
- config schema updated
|
|
43
|
+
- other fixes for ATA, ATW, ERV
|
|
34
44
|
- cleanup
|
|
35
45
|
|
|
36
46
|
# [4.7.2] - (29.01.2026)
|
package/config.schema.json
CHANGED
|
@@ -362,7 +362,7 @@
|
|
|
362
362
|
}
|
|
363
363
|
]
|
|
364
364
|
},
|
|
365
|
-
"
|
|
365
|
+
"temperatureRoomSensor": {
|
|
366
366
|
"title": "Room",
|
|
367
367
|
"type": "boolean",
|
|
368
368
|
"description": "This enable extra room temperature sensor to use with HomeKit automations."
|
|
@@ -1150,14 +1150,22 @@
|
|
|
1150
1150
|
"functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].displayType > 0;"
|
|
1151
1151
|
}
|
|
1152
1152
|
},
|
|
1153
|
-
"
|
|
1154
|
-
"title": "Temperature Outdoor",
|
|
1153
|
+
"temperatureOutdoorSensor": {
|
|
1154
|
+
"title": "Temperature Sensor Outdoor",
|
|
1155
1155
|
"type": "boolean",
|
|
1156
1156
|
"description": "This enable extra Outdoor temperature sensor to use with HomeKit automations.",
|
|
1157
1157
|
"condition": {
|
|
1158
1158
|
"functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
|
|
1159
1159
|
}
|
|
1160
1160
|
},
|
|
1161
|
+
"temperatureRoomSensor": {
|
|
1162
|
+
"title": "Temperature Room",
|
|
1163
|
+
"type": "boolean",
|
|
1164
|
+
"description": "This enable extra Room temperature sensor to use with HomeKit automations.",
|
|
1165
|
+
"condition": {
|
|
1166
|
+
"functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloud';"
|
|
1167
|
+
}
|
|
1168
|
+
},
|
|
1161
1169
|
"temperatureFlowSensor": {
|
|
1162
1170
|
"title": "Temperature Sensor Flow",
|
|
1163
1171
|
"type": "boolean",
|
|
@@ -1821,7 +1829,7 @@
|
|
|
1821
1829
|
}
|
|
1822
1830
|
]
|
|
1823
1831
|
},
|
|
1824
|
-
"
|
|
1832
|
+
"temperatureRoomSensor": {
|
|
1825
1833
|
"title": "Temperature Sensor Room",
|
|
1826
1834
|
"type": "boolean",
|
|
1827
1835
|
"description": "This enable extra temperature sensor to use with HomeKit automations."
|
|
@@ -2817,7 +2825,8 @@
|
|
|
2817
2825
|
{
|
|
2818
2826
|
"title": "Sensors",
|
|
2819
2827
|
"items": [
|
|
2820
|
-
"accounts[].atwDevices[].
|
|
2828
|
+
"accounts[].atwDevices[].temperatureOutdoorSensor",
|
|
2829
|
+
"accounts[].atwDevices[].temperatureRoomSensor",
|
|
2821
2830
|
"accounts[].atwDevices[].temperatureFlowSensor",
|
|
2822
2831
|
"accounts[].atwDevices[].temperatureReturnSensor",
|
|
2823
2832
|
"accounts[].atwDevices[].temperatureRoomZone1Sensor",
|
|
@@ -2986,8 +2995,8 @@
|
|
|
2986
2995
|
{
|
|
2987
2996
|
"title": "Sensors",
|
|
2988
2997
|
"items": [
|
|
2989
|
-
"accounts[].ervDevices[].temperatureSensor",
|
|
2990
2998
|
"accounts[].ervDevices[].temperatureOutdoorSensor",
|
|
2999
|
+
"accounts[].ervDevices[].temperatureRoomSensor",
|
|
2991
3000
|
"accounts[].ervDevices[].temperatureSensorSupply",
|
|
2992
3001
|
"accounts[].ervDevices[].inStandbySensor",
|
|
2993
3002
|
"accounts[].ervDevices[].connectSensor",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
// Tworzenie przycisków
|
|
119
119
|
accounts.forEach((account, i) => {
|
|
120
120
|
this.account = account;
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
const button = document.createElement("button");
|
|
123
123
|
button.type = "button";
|
|
124
124
|
button.id = `button${i}`;
|
|
@@ -145,8 +145,6 @@
|
|
|
145
145
|
formElements.accountType.value = account.type || 'disabled';
|
|
146
146
|
formElements.logIn.disabled = !(account.name && account.user && account.passwd && account.language && account.type !== 'disabled');
|
|
147
147
|
formElements.configButton.disabled = !((account.ataDevices?.length ?? 0) > 0 || (account.atwDevices?.length ?? 0) > 0 || (account.ervDevices?.length ?? 0) > 0);
|
|
148
|
-
|
|
149
|
-
this.account = account;
|
|
150
148
|
});
|
|
151
149
|
});
|
|
152
150
|
|
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.
|
|
4
|
+
"version": "4.7.4",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -36,7 +36,7 @@ class DeviceAta extends EventEmitter {
|
|
|
36
36
|
this.heatDryFanMode = device.heatDryFanMode || 1; //NONE, HEAT, DRY, FAN
|
|
37
37
|
this.coolDryFanMode = device.coolDryFanMode || 1; //NONE, COOL, DRY, FAN
|
|
38
38
|
this.autoDryFanMode = device.autoDryFanMode || 1; //NONE, AUTO, DRY, FAN
|
|
39
|
-
this.
|
|
39
|
+
this.temperatureRoomSensor = device.temperatureRoomSensor || false;
|
|
40
40
|
this.temperatureOutdoorSensor = device.temperatureOutdoorSensor || false;
|
|
41
41
|
this.inStandbySensor = device.inStandbySensor || false;
|
|
42
42
|
this.connectSensor = device.connectSensor || false;
|
|
@@ -449,8 +449,8 @@ class DeviceAta extends EventEmitter {
|
|
|
449
449
|
};
|
|
450
450
|
melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature) // 16 - 31
|
|
451
451
|
.setProps({
|
|
452
|
-
minValue: this.accessory.
|
|
453
|
-
maxValue: this.accessory.
|
|
452
|
+
minValue: this.accessory.minSetCoolDryAutoRoomTemperature,
|
|
453
|
+
maxValue: this.accessory.maxSetHeatCoolDryAutoRoomTemperature,
|
|
454
454
|
minStep: this.accessory.temperatureStep
|
|
455
455
|
})
|
|
456
456
|
.onGet(async () => {
|
|
@@ -470,8 +470,8 @@ class DeviceAta extends EventEmitter {
|
|
|
470
470
|
if (supportsHeat) {
|
|
471
471
|
melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature) // 10 - 31
|
|
472
472
|
.setProps({
|
|
473
|
-
minValue: this.accessory.
|
|
474
|
-
maxValue: this.accessory.
|
|
473
|
+
minValue: this.accessory.minSetHeatRoomTemperature,
|
|
474
|
+
maxValue: this.accessory.maxSetHeatCoolDryAutoRoomTemperature,
|
|
475
475
|
minStep: this.accessory.temperatureStep
|
|
476
476
|
})
|
|
477
477
|
.onGet(async () => {
|
|
@@ -584,8 +584,8 @@ class DeviceAta extends EventEmitter {
|
|
|
584
584
|
});
|
|
585
585
|
melCloudServiceT.getCharacteristic(Characteristic.TargetTemperature)
|
|
586
586
|
.setProps({
|
|
587
|
-
minValue: this.accessory.
|
|
588
|
-
maxValue: this.accessory.
|
|
587
|
+
minValue: this.accessory.minSetCoolDryAutoRoomTemperature,
|
|
588
|
+
maxValue: this.accessory.maxSetHeatCoolDryAutoRoomTemperature,
|
|
589
589
|
minStep: this.accessory.temperatureStep
|
|
590
590
|
})
|
|
591
591
|
.onGet(async () => {
|
|
@@ -594,8 +594,8 @@ class DeviceAta extends EventEmitter {
|
|
|
594
594
|
})
|
|
595
595
|
.onSet(async (value) => {
|
|
596
596
|
try {
|
|
597
|
-
if (deviceData.Device.OperationMode === 1 && value < this.accessory.
|
|
598
|
-
value = this.accessory.
|
|
597
|
+
if (deviceData.Device.OperationMode === 1 && value < this.accessory.minSetHeatRoomTemperature) {
|
|
598
|
+
value = this.accessory.minSetHeatRoomTemperature;
|
|
599
599
|
} else if (value < 16) {
|
|
600
600
|
value = 16;
|
|
601
601
|
}
|
|
@@ -630,7 +630,7 @@ class DeviceAta extends EventEmitter {
|
|
|
630
630
|
};
|
|
631
631
|
|
|
632
632
|
//temperature sensor services
|
|
633
|
-
if (this.
|
|
633
|
+
if (this.temperatureRoomSensor && this.accessory.roomTemperature !== null) {
|
|
634
634
|
if (this.logDebug) this.emit('debug', `Prepare room temperature sensor service`);
|
|
635
635
|
this.roomTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Room`, `roomTemperatureSensorService${deviceId}`);
|
|
636
636
|
this.roomTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1538,10 +1538,9 @@ class DeviceAta extends EventEmitter {
|
|
|
1538
1538
|
const supportsCool1 = deviceData.Device[supportCoolKey];
|
|
1539
1539
|
const supportsCool = this.coolDryFanMode >= 1;
|
|
1540
1540
|
const numberOfFanSpeeds = deviceData.Device.NumberOfFanSpeeds;
|
|
1541
|
-
const
|
|
1542
|
-
const
|
|
1543
|
-
const
|
|
1544
|
-
const maxTempCoolDryAuto = deviceData.Device.MaxTempAutomatic ?? 31;
|
|
1541
|
+
const minSetHeatRoomTemperature = 10;
|
|
1542
|
+
const maxSetHeatCoolDryAutoRoomTemperature = 31;
|
|
1543
|
+
const minSetCoolDryAutoRoomTemperature = accountTypeMelcloud ? 4 : deviceData.Device.MinTempAutomatic ?? 16;
|
|
1545
1544
|
|
|
1546
1545
|
//device state
|
|
1547
1546
|
const power = deviceData.Device.Power ?? false;
|
|
@@ -1588,10 +1587,9 @@ class DeviceAta extends EventEmitter {
|
|
|
1588
1587
|
supportsDry: supportsDry,
|
|
1589
1588
|
supportsCool: supportsCool,
|
|
1590
1589
|
supportsStanbyMode: supportsStanbyMode,
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
maxTempCoolDryAuto: maxTempCoolDryAuto,
|
|
1590
|
+
minSetHeatRoomTemperature: minSetHeatRoomTemperature,
|
|
1591
|
+
maxSetHeatCoolDryAutoRoomTemperature: maxSetHeatCoolDryAutoRoomTemperature,
|
|
1592
|
+
minSetCoolDryAutoRoomTemperature: minSetCoolDryAutoRoomTemperature,
|
|
1595
1593
|
power: power,
|
|
1596
1594
|
inStandbyMode: inStandbyMode,
|
|
1597
1595
|
operationMode: operationMode,
|
|
@@ -1877,7 +1875,11 @@ class DeviceAta extends EventEmitter {
|
|
|
1877
1875
|
//buttons
|
|
1878
1876
|
if (this.buttons.length > 0) {
|
|
1879
1877
|
this.buttons.forEach((button, i) => {
|
|
1880
|
-
|
|
1878
|
+
// helper function to update sensor characteristics
|
|
1879
|
+
const updateSensorCharacteristics = (service, characteristic, value) => {
|
|
1880
|
+
if (this.functions.isValidValue(value)) service?.[i]?.updateCharacteristic(characteristic, value);
|
|
1881
|
+
};
|
|
1882
|
+
|
|
1881
1883
|
const mode = button.mode;
|
|
1882
1884
|
switch (mode) {
|
|
1883
1885
|
case 0: //POWER ON,OFF
|
|
@@ -1991,10 +1993,11 @@ class DeviceAta extends EventEmitter {
|
|
|
1991
1993
|
};
|
|
1992
1994
|
|
|
1993
1995
|
//control
|
|
1994
|
-
if (button.displayType > 3) this.buttonControlServices
|
|
1996
|
+
if (button.displayType > 3) updateSensorCharacteristics(this.buttonControlServices, Characteristic.On, button.state);
|
|
1995
1997
|
|
|
1996
1998
|
//sensor
|
|
1997
|
-
|
|
1999
|
+
const characteristicType = button.characteristicType;
|
|
2000
|
+
if (button.displayType < 7) updateSensorCharacteristics(this.buttonControlSensorServices, characteristicType, button.state);
|
|
1998
2001
|
});
|
|
1999
2002
|
}
|
|
2000
2003
|
|
package/src/deviceatw.js
CHANGED
|
@@ -34,6 +34,7 @@ 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.temperatureOutdoorSensor = device.temperatureOutdoorSensor || false;
|
|
37
38
|
this.temperatureRoomSensor = device.temperatureRoomSensor || false;
|
|
38
39
|
this.temperatureFlowSensor = device.temperatureFlowSensor || false;
|
|
39
40
|
this.temperatureReturnSensor = device.temperatureReturnSensor || false;
|
|
@@ -319,6 +320,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
319
320
|
const caseHotWaterSensor = this.accessory.caseHotWaterSensor;
|
|
320
321
|
const caseZone2Sensor = this.accessory.caseZone2Sensor;
|
|
321
322
|
|
|
323
|
+
const supportsOutdoorTemperature = this.accessory.supportsOutdoorTemperature;
|
|
324
|
+
|
|
322
325
|
//accessory
|
|
323
326
|
if (this.logDebug) this.emit('debug', `Prepare accessory`);
|
|
324
327
|
const accessoryName = deviceName;
|
|
@@ -1100,6 +1103,20 @@ class DeviceAtw extends EventEmitter {
|
|
|
1100
1103
|
});
|
|
1101
1104
|
}
|
|
1102
1105
|
|
|
1106
|
+
//outdoor temperature
|
|
1107
|
+
if (this.temperatureOutdoorSensor && supportsOutdoorTemperature && this.accessory.outdoorTemperature !== null) {
|
|
1108
|
+
if (this.logDebug) this.emit('debug', `Prepare outdoor temperature sensor service`);
|
|
1109
|
+
this.outdoorTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Outdoor`, `outdoorTemperatureSensorService${deviceId}`);
|
|
1110
|
+
this.outdoorTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
1111
|
+
this.outdoorTemperatureSensorService.setCharacteristic(Characteristic.ConfiguredName, `${accessoryName} Outdoor`);
|
|
1112
|
+
this.outdoorTemperatureSensorService.getCharacteristic(Characteristic.CurrentTemperature)
|
|
1113
|
+
.onGet(async () => {
|
|
1114
|
+
const state = this.accessory.outdoorTemperature;
|
|
1115
|
+
return state;
|
|
1116
|
+
})
|
|
1117
|
+
accessory.addService(this.outdoorTemperatureSensorService);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1103
1120
|
//in standby sensor
|
|
1104
1121
|
if (this.inStandbySensor && this.accessory.inStandbyMode !== null) {
|
|
1105
1122
|
if (this.logDebug) this.emit('debug', `Prepare in standby mode service`);
|
|
@@ -1775,21 +1792,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1775
1792
|
const holidayMode = deviceData.HolidayMode ?? {};
|
|
1776
1793
|
|
|
1777
1794
|
//device info
|
|
1778
|
-
const
|
|
1795
|
+
const supportsStandbyMode = deviceData.Device[supportStandbyKey];
|
|
1779
1796
|
const supportsHeatPump = ![1, 2, 3, 4, 5, 6, 7, 15].includes(this.hideZone);
|
|
1780
1797
|
const supportsZone1 = ![2, 3, 4, 8, 9, 10, 11, 15].includes(this.hideZone);
|
|
1781
1798
|
const supportsHotWaterTank = ![3, 5, 6, 9, 10, 12, 13, 15].includes(this.hideZone) && deviceData.Device[supportHotWaterKey];
|
|
1782
|
-
const supportsZone2 = ![4, 6, 7, 10, 11, 13, 14, 15].includes(this.hideZone) && deviceData.Device.HasZone2
|
|
1783
|
-
const
|
|
1784
|
-
const
|
|
1785
|
-
const
|
|
1799
|
+
const supportsZone2 = ![4, 6, 7, 10, 11, 13, 14, 15].includes(this.hideZone) && deviceData.Device.HasZone2 === true;
|
|
1800
|
+
const supportsHeat = deviceData.Device[supportHeatKey] ?? true;
|
|
1801
|
+
const supportsCool = deviceData.Device[supportCoolKey] ?? false;
|
|
1802
|
+
const supportsOutdoorTemperature = deviceData.Device.HasOutdoorTemperature;
|
|
1803
|
+
const heatCoolModes = supportsHeat && supportsCool ? 0 : supportsHeat ? 1 : supportsCool ? 2 : 3;
|
|
1786
1804
|
const temperatureIncrement = deviceData.Device[tempStepKey] ?? 1;
|
|
1787
|
-
const minSetHeatFlowTemperature =
|
|
1788
|
-
const maxSetHeatFlowTemperature =
|
|
1805
|
+
const minSetHeatFlowTemperature = 25;
|
|
1806
|
+
const maxSetHeatFlowTemperature = 60;
|
|
1789
1807
|
const minSetCoolFlowTemperature = 16
|
|
1790
|
-
const
|
|
1791
|
-
const
|
|
1792
|
-
const
|
|
1808
|
+
const maxSetCoolFlowTemperature = 30;
|
|
1809
|
+
const minSetHeatRoomTemperature = 10;
|
|
1810
|
+
const minSetCoolRoomTemperature = 16;
|
|
1811
|
+
const maxSetHeatCoolRoomTemperature = 30;
|
|
1812
|
+
const minSetTankTemperature = 10;
|
|
1793
1813
|
const maxSetTankTemperature = deviceData.Device.MaxTankTemperature ?? 60;
|
|
1794
1814
|
|
|
1795
1815
|
//zones
|
|
@@ -1832,11 +1852,11 @@ class DeviceAtw extends EventEmitter {
|
|
|
1832
1852
|
|
|
1833
1853
|
//hot water
|
|
1834
1854
|
const hotWaterName = 'Hot Water';
|
|
1835
|
-
const tankWaterTemperature = deviceData.Device.TankWaterTemperature
|
|
1836
|
-
const setTankWaterTemperature = deviceData.Device.SetTankWaterTemperature
|
|
1855
|
+
const tankWaterTemperature = deviceData.Device.TankWaterTemperature;
|
|
1856
|
+
const setTankWaterTemperature = deviceData.Device.SetTankWaterTemperature;
|
|
1837
1857
|
const forcedHotWaterMode = deviceData.Device.ForcedHotWaterMode ? 1 : 0;
|
|
1838
|
-
const ecoHotWater = deviceData.Device.EcoHotWater
|
|
1839
|
-
const prohibitHotWater = deviceData.Device.ProhibitHotWater
|
|
1858
|
+
const ecoHotWater = deviceData.Device.EcoHotWater;
|
|
1859
|
+
const prohibitHotWater = deviceData.Device.ProhibitHotWater;
|
|
1840
1860
|
const flowTemperatureWaterTank = deviceData.Device.FlowTemperatureBoiler;
|
|
1841
1861
|
const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
|
|
1842
1862
|
|
|
@@ -1847,8 +1867,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1847
1867
|
const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
|
|
1848
1868
|
const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
|
|
1849
1869
|
const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
|
|
1850
|
-
const prohibitZone2 = deviceData.Device.ProhibitZone2
|
|
1851
|
-
const idleZone2 = deviceData.Device.IdleZone2
|
|
1870
|
+
const prohibitZone2 = deviceData.Device.ProhibitZone2;
|
|
1871
|
+
const idleZone2 = deviceData.Device.IdleZone2;
|
|
1852
1872
|
const flowTemperatureZone2 = deviceData.Device.FlowTemperatureZone2;
|
|
1853
1873
|
const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
|
|
1854
1874
|
|
|
@@ -1875,7 +1895,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1875
1895
|
supportsHotWaterTank: supportsHotWaterTank,
|
|
1876
1896
|
supportsZone2: supportsZone2,
|
|
1877
1897
|
heatCoolModes: heatCoolModes,
|
|
1878
|
-
|
|
1898
|
+
supportsStandbyMode: supportsStandbyMode,
|
|
1899
|
+
supportsOutdoorTemperature: supportsOutdoorTemperature,
|
|
1879
1900
|
caseHeatPump: caseHeatPump,
|
|
1880
1901
|
caseZone1: caseZone1,
|
|
1881
1902
|
caseHotWater: caseHotWater,
|
|
@@ -1894,6 +1915,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1894
1915
|
zonesSensors: []
|
|
1895
1916
|
};
|
|
1896
1917
|
|
|
1918
|
+
//zones
|
|
1897
1919
|
for (let i = 0; i < zonesCount; i++) {
|
|
1898
1920
|
//characteristics array
|
|
1899
1921
|
const characteristics = [];
|
|
@@ -1949,22 +1971,35 @@ class DeviceAtw extends EventEmitter {
|
|
|
1949
1971
|
setTemperature = setCoolFlowTemperatureZone1;
|
|
1950
1972
|
roomTemperature = flowTemperatureZone1;
|
|
1951
1973
|
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
1952
|
-
temperatureSetPropsMaxValue =
|
|
1974
|
+
temperatureSetPropsMaxValue = maxSetCoolFlowTemperature;
|
|
1953
1975
|
break;
|
|
1954
1976
|
default:
|
|
1955
1977
|
setTemperature = setTemperatureZone1;
|
|
1956
1978
|
roomTemperature = roomTemperatureZone1;
|
|
1957
|
-
temperatureSetPropsMinValue =
|
|
1958
|
-
temperatureSetPropsMaxValue =
|
|
1979
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
1980
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
1959
1981
|
break
|
|
1960
1982
|
};
|
|
1961
1983
|
break;
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1984
|
+
case false: //Melcloud Home
|
|
1985
|
+
switch (operationModeZone1) {
|
|
1986
|
+
case 3: //COOL THERMOSTAT
|
|
1987
|
+
setTemperature = setTemperatureZone1;
|
|
1988
|
+
roomTemperature = roomTemperatureZone1;
|
|
1989
|
+
temperatureSetPropsMinValue = minSetCoolRoomTemperature;
|
|
1990
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
1991
|
+
break;
|
|
1992
|
+
default:
|
|
1993
|
+
setTemperature = setTemperatureZone1;
|
|
1994
|
+
roomTemperature = roomTemperatureZone1;
|
|
1995
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
1996
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
1997
|
+
break
|
|
1998
|
+
};
|
|
1967
1999
|
break;
|
|
2000
|
+
default:
|
|
2001
|
+
if (this.logWarn) this.emit('warn', `${name}, Received unknown operation mode: ${operationModeZone1}`);
|
|
2002
|
+
return;
|
|
1968
2003
|
}
|
|
1969
2004
|
|
|
1970
2005
|
lockPhysicalControl = prohibitZone1 ? 1 : 0;
|
|
@@ -1993,32 +2028,58 @@ class DeviceAtw extends EventEmitter {
|
|
|
1993
2028
|
currentOperationMode = !power ? 0 : (idleZone2 ? 1 : [2, 2, 2, 3, 3, 2][operationModeZone2]); //INACTIVE, IDLE, HEATING, COOLING
|
|
1994
2029
|
targetOperationMode = [1, 2, 0, 1, 2, 1][operationModeZone2]; //AUTO, HEAT, COOL
|
|
1995
2030
|
|
|
1996
|
-
switch (
|
|
1997
|
-
case
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2031
|
+
switch (accountTypeMelcloud) {
|
|
2032
|
+
case true: //Melcloud
|
|
2033
|
+
switch (operationModeZone2) {
|
|
2034
|
+
case 1: //HEAT FLOW
|
|
2035
|
+
setTemperature = setHeatFlowTemperatureZone2;
|
|
2036
|
+
roomTemperature = flowTemperatureZone2;
|
|
2037
|
+
temperatureSetPropsMinValue = minSetHeatFlowTemperature;
|
|
2038
|
+
temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
|
|
2039
|
+
break;
|
|
2040
|
+
case 4: //COOL FLOW
|
|
2041
|
+
setTemperature = setCoolFlowTemperatureZone2;
|
|
2042
|
+
roomTemperature = flowTemperatureZone2;
|
|
2043
|
+
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
2044
|
+
temperatureSetPropsMaxValue = maxSetCoolFlowTemperature;
|
|
2045
|
+
break;
|
|
2046
|
+
default:
|
|
2047
|
+
setTemperature = setTemperatureZone2;
|
|
2048
|
+
roomTemperature = roomTemperatureZone2;
|
|
2049
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2050
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2051
|
+
break
|
|
2052
|
+
};
|
|
2002
2053
|
break;
|
|
2003
|
-
case
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2054
|
+
case false: //Melcloud Home
|
|
2055
|
+
switch (operationModeZone2) {
|
|
2056
|
+
case 3: //COOL THERMOSTAT
|
|
2057
|
+
setTemperature = setTemperatureZone2;
|
|
2058
|
+
roomTemperature = roomTemperatureZone2;
|
|
2059
|
+
temperatureSetPropsMinValue = minSetCoolRoomTemperature;
|
|
2060
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2061
|
+
break;
|
|
2062
|
+
default:
|
|
2063
|
+
setTemperature = setTemperatureZone2;
|
|
2064
|
+
roomTemperature = roomTemperatureZone2;
|
|
2065
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2066
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2067
|
+
break
|
|
2068
|
+
};
|
|
2008
2069
|
break;
|
|
2009
2070
|
default:
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
temperatureSetPropsMaxValue = maxSetTemperature;
|
|
2014
|
-
break
|
|
2015
|
-
};
|
|
2071
|
+
if (this.logWarn) this.emit('warn', `${name}, Received unknown operation mode: ${operationModeZone2}`);
|
|
2072
|
+
return;
|
|
2073
|
+
}
|
|
2016
2074
|
|
|
2017
2075
|
lockPhysicalControl = prohibitZone2 ? 1 : 0;
|
|
2018
2076
|
operationModeSetPropsMinValue = [0, 0, 1, 0][heatCoolModes];
|
|
2019
2077
|
operationModeSetPropsMaxValue = [2, 2, 2, 0][heatCoolModes];
|
|
2020
2078
|
operationModeSetPropsValidValues = [[0, 1, 2], [0, 1, 2], [1, 2], [0]][heatCoolModes];
|
|
2021
2079
|
break;
|
|
2080
|
+
default:
|
|
2081
|
+
if (this.logWarn) this.emit('warn', `Received unknwn zone: ${i}`);
|
|
2082
|
+
return;
|
|
2022
2083
|
};
|
|
2023
2084
|
|
|
2024
2085
|
//create characteristics
|
|
@@ -2047,8 +2108,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
2047
2108
|
operationModeSetPropsMinValue = [0, 0, 0, 0][heatCoolModes];
|
|
2048
2109
|
operationModeSetPropsMaxValue = [2, 1, 2, 0][heatCoolModes];
|
|
2049
2110
|
operationModeSetPropsValidValues = [[0, 1, 2], [0, 1], [0, 2], [0]][heatCoolModes];
|
|
2050
|
-
temperatureSetPropsMinValue =
|
|
2051
|
-
temperatureSetPropsMaxValue =
|
|
2111
|
+
temperatureSetPropsMinValue = -35;
|
|
2112
|
+
temperatureSetPropsMaxValue = 100;
|
|
2052
2113
|
break;
|
|
2053
2114
|
case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2054
2115
|
name = zone1Name;
|
|
@@ -2069,22 +2130,35 @@ class DeviceAtw extends EventEmitter {
|
|
|
2069
2130
|
setTemperature = setCoolFlowTemperatureZone1;
|
|
2070
2131
|
roomTemperature = flowTemperatureZone1;
|
|
2071
2132
|
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
2072
|
-
temperatureSetPropsMaxValue =
|
|
2133
|
+
temperatureSetPropsMaxValue = maxSetCoolFlowTemperature;
|
|
2073
2134
|
break;
|
|
2074
2135
|
default:
|
|
2075
2136
|
setTemperature = setTemperatureZone1;
|
|
2076
2137
|
roomTemperature = roomTemperatureZone1;
|
|
2077
|
-
temperatureSetPropsMinValue =
|
|
2078
|
-
temperatureSetPropsMaxValue =
|
|
2138
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2139
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2079
2140
|
break
|
|
2080
2141
|
};
|
|
2081
2142
|
break;
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2143
|
+
case false: //Melcloud Home
|
|
2144
|
+
switch (operationModeZone1) {
|
|
2145
|
+
case 3: //COOL THERMOSTAT
|
|
2146
|
+
setTemperature = setTemperatureZone1;
|
|
2147
|
+
roomTemperature = roomTemperatureZone1;
|
|
2148
|
+
temperatureSetPropsMinValue = minSetCoolRoomTemperature;
|
|
2149
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2150
|
+
break;
|
|
2151
|
+
default:
|
|
2152
|
+
setTemperature = setTemperatureZone1;
|
|
2153
|
+
roomTemperature = roomTemperatureZone1;
|
|
2154
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2155
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2156
|
+
break
|
|
2157
|
+
};
|
|
2087
2158
|
break;
|
|
2159
|
+
default:
|
|
2160
|
+
if (this.logWarn) this.emit('warn', `${name}, Received unknown operation mode: ${operationModeZone1}`);
|
|
2161
|
+
return;
|
|
2088
2162
|
}
|
|
2089
2163
|
|
|
2090
2164
|
operationModeSetPropsMinValue = [1, 1, 1, 0][heatCoolModes];
|
|
@@ -2102,8 +2176,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
2102
2176
|
operationModeSetPropsMinValue = 1;
|
|
2103
2177
|
operationModeSetPropsMaxValue = 3;
|
|
2104
2178
|
operationModeSetPropsValidValues = [1, 3];
|
|
2105
|
-
temperatureSetPropsMinValue =
|
|
2106
|
-
temperatureSetPropsMaxValue =
|
|
2179
|
+
temperatureSetPropsMinValue = minSetTankTemperature;
|
|
2180
|
+
temperatureSetPropsMaxValue = maxSetTankTemperature;
|
|
2107
2181
|
break;
|
|
2108
2182
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2109
2183
|
name = zone2Name;
|
|
@@ -2111,31 +2185,57 @@ class DeviceAtw extends EventEmitter {
|
|
|
2111
2185
|
currentOperationMode = !power ? 0 : (idleZone2 ? 0 : [1, 1, 1, 2, 2, 1][operationModeZone2]); //OFF, HEAT, COOL
|
|
2112
2186
|
targetOperationMode = [1, 2, 3, 1, 2, 1][operationModeZone2]; //OFF, HEAT, COOL, AUTO
|
|
2113
2187
|
|
|
2114
|
-
switch (
|
|
2115
|
-
case
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2188
|
+
switch (accountTypeMelcloud) {
|
|
2189
|
+
case true: //Melcloud
|
|
2190
|
+
switch (operationModeZone2) {
|
|
2191
|
+
case 1: //HEAT FLOW
|
|
2192
|
+
setTemperature = setHeatFlowTemperatureZone2;
|
|
2193
|
+
roomTemperature = flowTemperatureZone2;
|
|
2194
|
+
temperatureSetPropsMinValue = minSetHeatFlowTemperature;
|
|
2195
|
+
temperatureSetPropsMaxValue = maxSetHeatFlowTemperature;
|
|
2196
|
+
break;
|
|
2197
|
+
case 4: //COOL FLOW
|
|
2198
|
+
setTemperature = setCoolFlowTemperatureZone2;
|
|
2199
|
+
roomTemperature = flowTemperatureZone2;
|
|
2200
|
+
temperatureSetPropsMinValue = minSetCoolFlowTemperature;
|
|
2201
|
+
temperatureSetPropsMaxValue = maxSetCoolFlowTemperature;
|
|
2202
|
+
break;
|
|
2203
|
+
default:
|
|
2204
|
+
setTemperature = setTemperatureZone2;
|
|
2205
|
+
roomTemperature = roomTemperatureZone2;
|
|
2206
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2207
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2208
|
+
break
|
|
2209
|
+
};
|
|
2120
2210
|
break;
|
|
2121
|
-
case
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2211
|
+
case false: //Melcloud Home
|
|
2212
|
+
switch (operationModeZone2) {
|
|
2213
|
+
case 3: //COOL THERMOSTAT
|
|
2214
|
+
setTemperature = setTemperatureZone2;
|
|
2215
|
+
roomTemperature = roomTemperatureZone2;
|
|
2216
|
+
temperatureSetPropsMinValue = minSetCoolRoomTemperature;
|
|
2217
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2218
|
+
break;
|
|
2219
|
+
default:
|
|
2220
|
+
setTemperature = setTemperatureZone2;
|
|
2221
|
+
roomTemperature = roomTemperatureZone2;
|
|
2222
|
+
temperatureSetPropsMinValue = minSetHeatRoomTemperature;
|
|
2223
|
+
temperatureSetPropsMaxValue = maxSetHeatCoolRoomTemperature;
|
|
2224
|
+
break
|
|
2225
|
+
};
|
|
2126
2226
|
break;
|
|
2127
2227
|
default:
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
temperatureSetPropsMaxValue = maxSetTemperature;
|
|
2132
|
-
break
|
|
2133
|
-
};
|
|
2228
|
+
if (this.logWarn) this.emit('warn', `${name}, Received unknown operation mode: ${operationModeZone2}`);
|
|
2229
|
+
return;
|
|
2230
|
+
}
|
|
2134
2231
|
|
|
2135
2232
|
operationModeSetPropsMinValue = [1, 1, 1, 0][heatCoolModes];
|
|
2136
2233
|
operationModeSetPropsMaxValue = [3, 3, 2, 0][heatCoolModes];
|
|
2137
2234
|
operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
|
|
2138
2235
|
break;
|
|
2236
|
+
default:
|
|
2237
|
+
if (this.logWarn) this.emit('warn', `Received unknwn zone: ${i}`);
|
|
2238
|
+
return;
|
|
2139
2239
|
};
|
|
2140
2240
|
|
|
2141
2241
|
//create characteristics
|
|
@@ -2179,14 +2279,14 @@ class DeviceAtw extends EventEmitter {
|
|
|
2179
2279
|
case caseHeatPump: //Heat Pump - HEAT, COOL, OFF
|
|
2180
2280
|
this.emit('info', `${name} Power: ${power ? 'On' : 'Off'}`)
|
|
2181
2281
|
this.emit('info', `${name} System status: ${HeatPump.SystemMapEnumToStringInfo[unitStatus]}`);
|
|
2182
|
-
this.emit('info', `${name} Operation mode: ${HeatPump.OperationModeMapEnumToStringInfo[
|
|
2282
|
+
this.emit('info', `${name} Operation mode: ${HeatPump.OperationModeMapEnumToStringInfo[operationModeZone]}`);
|
|
2183
2283
|
this.emit('info', `${name} Outdoor temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
2184
2284
|
this.emit('info', `${name} Temperature display unit: ${obj.temperatureUnit}`);
|
|
2185
2285
|
this.emit('info', `${name} Lock physical controls: ${lockPhysicalControl ? 'Locked' : 'Unlocked'}`);
|
|
2186
2286
|
if (!accountTypeMelcloud) this.emit('info', `Signal strength: ${deviceData.Rssi}dBm`);
|
|
2187
2287
|
break;
|
|
2188
2288
|
case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2189
|
-
operationModeText = idleZone1 ? HeatPump.OperationModeZoneMapEnumToStringInfo[6] : HeatPump.OperationModeZoneMapEnumToStringInfo[
|
|
2289
|
+
operationModeText = idleZone1 ? HeatPump.OperationModeZoneMapEnumToStringInfo[6] : HeatPump.OperationModeZoneMapEnumToStringInfo[operationModeZone];
|
|
2190
2290
|
this.emit('info', `${name} Operation mode: ${operationModeText}`);
|
|
2191
2291
|
this.emit('info', `${name} Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
2192
2292
|
this.emit('info', `${name} Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
@@ -2194,7 +2294,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
2194
2294
|
this.emit('info', `${name} Lock physical controls: ${lockPhysicalControl ? 'Locked' : 'Unlocked'}`);
|
|
2195
2295
|
break;
|
|
2196
2296
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
2197
|
-
operationModeText = operationMode === 1 ? HeatPump.ForceDhwMapEnumToStringInfo[1] : HeatPump.ForceDhwMapEnumToStringInfo[
|
|
2297
|
+
operationModeText = operationMode === 1 ? HeatPump.ForceDhwMapEnumToStringInfo[1] : HeatPump.ForceDhwMapEnumToStringInfo[operationModeZone ? 1 : 0];
|
|
2198
2298
|
this.emit('info', `${name} Operation mode: ${operationModeText}`);
|
|
2199
2299
|
this.emit('info', `${name} Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
2200
2300
|
this.emit('info', `${name} Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
@@ -2202,7 +2302,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
2202
2302
|
this.emit('info', `${name} Lock physical controls: ${lockPhysicalControl ? 'Locked' : 'Unlocked'}`);
|
|
2203
2303
|
break;
|
|
2204
2304
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2205
|
-
operationModeText = idleZone2 ? HeatPump.OperationModeZoneMapEnumToStringInfo[6] : HeatPump.OperationModeZoneMapEnumToStringInfo[
|
|
2305
|
+
operationModeText = idleZone2 ? HeatPump.OperationModeZoneMapEnumToStringInfo[6] : HeatPump.OperationModeZoneMapEnumToStringInfo[operationModeZone];
|
|
2206
2306
|
this.emit('info', `${name} Operation mode: ${operationModeText}`);
|
|
2207
2307
|
this.emit('info', `${name} Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
2208
2308
|
this.emit('info', `${name} Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
@@ -2213,7 +2313,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
2213
2313
|
}
|
|
2214
2314
|
}
|
|
2215
2315
|
|
|
2216
|
-
//
|
|
2316
|
+
//zones sensors
|
|
2217
2317
|
for (let i = 0; i < zonesSensorsCount; i++) {
|
|
2218
2318
|
|
|
2219
2319
|
// helper function to update sensor characteristics
|
|
@@ -2281,33 +2381,15 @@ class DeviceAtw extends EventEmitter {
|
|
|
2281
2381
|
|
|
2282
2382
|
//log current state
|
|
2283
2383
|
if (this.logInfo) {
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
if (flowTemperatureHeatPump !== null) this.emit('info', `${heatPumpName}, Flow temperature: ${flowTemperatureHeatPump}${obj.temperatureUnit}`);
|
|
2288
|
-
if (returnTemperatureHeatPump !== null) this.emit('info', `${heatPumpName}, Return temperature: ${returnTemperatureHeatPump}${obj.temperatureUnit}`);
|
|
2289
|
-
break;
|
|
2290
|
-
case caseZone1Sensor: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2291
|
-
if (roomTemperatureZone1 !== null) this.emit('info', `${zone1Name}, Room temperature: ${roomTemperatureZone1}${obj.temperatureUnit}`);
|
|
2292
|
-
if (flowTemperatureZone1 !== null) this.emit('info', `${zone1Name}, Flow temperature: ${flowTemperatureZone1}${obj.temperatureUnit}`);
|
|
2293
|
-
if (returnTemperatureZone1 !== null) this.emit('info', `${zone1Name}, Return temperature: ${returnTemperatureZone1}${obj.temperatureUnit}`);
|
|
2294
|
-
break;
|
|
2295
|
-
case caseHotWaterSensor: //Hot Water - AUTO, HEAT NOW
|
|
2296
|
-
if (tankWaterTemperature !== null) this.emit('info', `${hotWaterName}, Temperature: ${tankWaterTemperature}${obj.temperatureUnit}`);
|
|
2297
|
-
if (flowTemperatureWaterTank !== null) this.emit('info', `${hotWaterName}, Flow temperature: ${flowTemperatureWaterTank}${obj.temperatureUnit}`);
|
|
2298
|
-
if (returnTemperatureWaterTank !== null) this.emit('info', `${hotWaterName}, Return temperature: ${returnTemperatureWaterTank}${obj.temperatureUnit}`);
|
|
2299
|
-
break;
|
|
2300
|
-
case caseZone2Sensor: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
2301
|
-
if (roomTemperatureZone2 !== null) this.emit('info', `${zone2Name}, Room temperature: ${roomTemperatureZone2}${obj.temperatureUnit}`);
|
|
2302
|
-
if (flowTemperatureZone2 !== null) this.emit('info', `${zone2Name}, Flow temperature: ${flowTemperatureZone2}${obj.temperatureUnit}`);
|
|
2303
|
-
if (returnTemperatureZone2 !== null) this.emit('info', `${zone2Name}, Return temperature: ${returnTemperatureZone2}${obj.temperatureUnit}`);
|
|
2304
|
-
break;
|
|
2305
|
-
};
|
|
2384
|
+
if (roomTemperature !== null) this.emit('info', `${name}, Outdoor temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
2385
|
+
if (flowTemperature !== null) this.emit('info', `${name}, Flow temperature: ${flowTemperature}${obj.temperatureUnit}`);
|
|
2386
|
+
if (returnTemperature !== null) this.emit('info', `${name}, Return temperature: ${returnTemperature}${obj.temperatureUnit}`);
|
|
2306
2387
|
};
|
|
2307
2388
|
}
|
|
2308
2389
|
this.accessory = obj;
|
|
2309
2390
|
|
|
2310
2391
|
//other sensors
|
|
2392
|
+
this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
|
|
2311
2393
|
this.inStandbyService?.updateCharacteristic(Characteristic.ContactSensorState, inStandbyMode);
|
|
2312
2394
|
this.connectService?.updateCharacteristic(Characteristic.ContactSensorState, isConnected);
|
|
2313
2395
|
this.errorService?.updateCharacteristic(Characteristic.ContactSensorState, isInError);
|
|
@@ -2400,7 +2482,11 @@ class DeviceAtw extends EventEmitter {
|
|
|
2400
2482
|
//buttons
|
|
2401
2483
|
if (this.buttons.length > 0) {
|
|
2402
2484
|
this.buttons.forEach((button, i) => {
|
|
2403
|
-
|
|
2485
|
+
// helper function to update sensor characteristics
|
|
2486
|
+
const updateSensorCharacteristics = (service, characteristic, value) => {
|
|
2487
|
+
if (this.functions.isValidValue(value)) service?.[i]?.updateCharacteristic(characteristic, value);
|
|
2488
|
+
};
|
|
2489
|
+
|
|
2404
2490
|
const mode = button.mode;
|
|
2405
2491
|
switch (mode) {
|
|
2406
2492
|
case 0: //POWER ON,OFF
|
|
@@ -2478,10 +2564,11 @@ class DeviceAtw extends EventEmitter {
|
|
|
2478
2564
|
};
|
|
2479
2565
|
|
|
2480
2566
|
//control
|
|
2481
|
-
if (button.displayType > 3) this.buttonControlServices
|
|
2567
|
+
if (button.displayType > 3) updateSensorCharacteristics(this.buttonControlServices, Characteristic.On, button.state);
|
|
2482
2568
|
|
|
2483
2569
|
//sensor
|
|
2484
|
-
|
|
2570
|
+
const characteristicType = button.characteristicType;
|
|
2571
|
+
if (button.displayType < 7) updateSensorCharacteristics(this.buttonControlSensorServices, characteristicType, button.state);
|
|
2485
2572
|
});
|
|
2486
2573
|
}
|
|
2487
2574
|
})
|
package/src/deviceerv.js
CHANGED
|
@@ -33,7 +33,7 @@ class DeviceErv extends EventEmitter {
|
|
|
33
33
|
this.deviceName = device.name;
|
|
34
34
|
this.deviceTypeString = DeviceType[device.type];
|
|
35
35
|
this.displayType = device.displayType;
|
|
36
|
-
this.
|
|
36
|
+
this.temperatureRoomSensor = device.temperatureRoomSensor || false;
|
|
37
37
|
this.temperatureOutdoorSensor = device.temperatureOutdoorSensor || false;
|
|
38
38
|
this.temperatureSupplySensor = device.temperatureSupplySensor || false;
|
|
39
39
|
this.inStandbySensor = device.inStandbySensor || false;
|
|
@@ -557,7 +557,7 @@ class DeviceErv extends EventEmitter {
|
|
|
557
557
|
};
|
|
558
558
|
|
|
559
559
|
//temperature sensor service room
|
|
560
|
-
if (this.
|
|
560
|
+
if (this.temperatureRoomSensor && supportsRoomTemperature && this.accessory.roomTemperature !== null) {
|
|
561
561
|
if (this.logDebug) this.emit('debug', `Prepare room temperature sensor service`);
|
|
562
562
|
this.roomTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Room`, `roomTemperatureSensorService${deviceId}`);
|
|
563
563
|
this.roomTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1483,7 +1483,11 @@ class DeviceErv extends EventEmitter {
|
|
|
1483
1483
|
//buttons
|
|
1484
1484
|
if (this.buttons.length > 0) {
|
|
1485
1485
|
this.buttons.forEach((button, i) => {
|
|
1486
|
-
|
|
1486
|
+
// helper function to update sensor characteristics
|
|
1487
|
+
const updateSensorCharacteristics = (service, characteristic, value) => {
|
|
1488
|
+
if (this.functions.isValidValue(value)) service?.[i]?.updateCharacteristic(characteristic, value);
|
|
1489
|
+
};
|
|
1490
|
+
|
|
1487
1491
|
const mode = button.mode;
|
|
1488
1492
|
switch (mode) {
|
|
1489
1493
|
case 0: //POWER ON,OFF
|
|
@@ -1534,10 +1538,11 @@ class DeviceErv extends EventEmitter {
|
|
|
1534
1538
|
};
|
|
1535
1539
|
|
|
1536
1540
|
//control
|
|
1537
|
-
if (button.displayType > 3) this.buttonControlServices
|
|
1541
|
+
if (button.displayType > 3) updateSensorCharacteristics(this.buttonControlServices, Characteristic.On, button.state);
|
|
1538
1542
|
|
|
1539
1543
|
//sensor
|
|
1540
|
-
|
|
1544
|
+
const characteristicType = button.characteristicType;
|
|
1545
|
+
if (button.displayType < 7) updateSensorCharacteristics(this.buttonControlSensorServices, characteristicType, button.state);
|
|
1541
1546
|
});
|
|
1542
1547
|
}
|
|
1543
1548
|
|
package/src/melcloudatw.js
CHANGED
|
@@ -212,22 +212,22 @@ class MelCloudAtw extends EventEmitter {
|
|
|
212
212
|
DeviceID: deviceData.Device.DeviceID,
|
|
213
213
|
EffectiveFlags: deviceData.Device.EffectiveFlags,
|
|
214
214
|
Power: deviceData.Device.Power,
|
|
215
|
-
SetTemperatureZone1: deviceData.Device.SetTemperatureZone1,
|
|
216
|
-
SetTemperatureZone2: deviceData.Device.SetTemperatureZone2,
|
|
217
215
|
OperationMode: deviceData.Device.OperationMode,
|
|
218
216
|
OperationModeZone1: deviceData.Device.OperationModeZone1,
|
|
219
|
-
|
|
217
|
+
SetTemperatureZone1: deviceData.Device.SetTemperatureZone1,
|
|
220
218
|
SetHeatFlowTemperatureZone1: deviceData.Device.SetHeatFlowTemperatureZone1,
|
|
221
|
-
SetHeatFlowTemperatureZone2: deviceData.Device.SetHeatFlowTemperatureZone2,
|
|
222
219
|
SetCoolFlowTemperatureZone1: deviceData.Device.SetCoolFlowTemperatureZone1,
|
|
223
|
-
|
|
220
|
+
ProhibitZone1: deviceData.Device.ProhibitHeatingZone1,
|
|
224
221
|
SetTankWaterTemperature: deviceData.Device.SetTankWaterTemperature,
|
|
225
222
|
ForcedHotWaterMode: deviceData.Device.ForcedHotWaterMode,
|
|
226
223
|
EcoHotWater: deviceData.Device.EcoHotWater,
|
|
227
|
-
HolidayMode: deviceData.Device.HolidayMode,
|
|
228
|
-
ProhibitZone1: deviceData.Device.ProhibitHeatingZone1,
|
|
229
|
-
ProhibitZone2: deviceData.Device.ProhibitHeatingZone2,
|
|
230
224
|
ProhibitHotWater: deviceData.Device.ProhibitHotWater,
|
|
225
|
+
OperationModeZone2: deviceData.Device.OperationModeZone2,
|
|
226
|
+
SetTemperatureZone2: deviceData.Device.SetTemperatureZone2,
|
|
227
|
+
SetHeatFlowTemperatureZone2: deviceData.Device.SetHeatFlowTemperatureZone2,
|
|
228
|
+
SetCoolFlowTemperatureZone2: deviceData.Device.SetCoolFlowTemperatureZone2,
|
|
229
|
+
ProhibitZone2: deviceData.Device.ProhibitHeatingZone2,
|
|
230
|
+
HolidayMode: deviceData.Device.HolidayMode,
|
|
231
231
|
HasPendingCommand: true
|
|
232
232
|
}
|
|
233
233
|
path = ApiUrls.Post.Atw;
|
|
@@ -284,9 +284,9 @@ class MelCloudAtw extends EventEmitter {
|
|
|
284
284
|
operationMode: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationMode],
|
|
285
285
|
operationModeZone1: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationModeZone1],
|
|
286
286
|
setTemperatureZone1: deviceData.Device.SetTemperatureZone1,
|
|
287
|
-
prohibitHotWater: deviceData.Device.ProhibitHotWater,
|
|
288
287
|
setTankWaterTemperature: deviceData.Device.SetTankWaterTemperature,
|
|
289
288
|
forcedHotWaterMode: deviceData.Device.ForcedHotWaterMode,
|
|
289
|
+
prohibitHotWater: deviceData.Device.ProhibitHotWater,
|
|
290
290
|
operationModeZone2: HeatPump.OperationModeMapEnumToString[deviceData.Device.OperationModeZone2],
|
|
291
291
|
setTemperatureZone2: deviceData.Device.SetTemperatureZone2
|
|
292
292
|
};
|