homebridge-melcloud-control 3.8.4-beta.5 → 3.8.4-beta.7
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/package.json +1 -1
- package/src/deviceata.js +2 -1
- package/src/deviceatw.js +71 -68
- package/src/deviceerv.js +88 -81
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "3.8.4-beta.
|
|
4
|
+
"version": "3.8.4-beta.7",
|
|
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
|
@@ -1045,6 +1045,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1045
1045
|
swingMode: swingFunction && vaneHorizontalDirection === 12 && vaneVerticalDirection === 7 ? 1 : 0,
|
|
1046
1046
|
lockPhysicalControl: prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0,
|
|
1047
1047
|
temperatureIncrement: temperatureIncrement,
|
|
1048
|
+
useFahrenheit: this.useFahrenheit,
|
|
1048
1049
|
temperatureUnit: TemperatureDisplayUnits[this.useFahrenheit]
|
|
1049
1050
|
};
|
|
1050
1051
|
|
|
@@ -1090,6 +1091,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1090
1091
|
};
|
|
1091
1092
|
|
|
1092
1093
|
obj.currentOperationMode = !power ? 0 : inStandbyMode ? 1 : obj.currentOperationMode;
|
|
1094
|
+
obj.targetOperationMode = obj.targetOperationMode;
|
|
1093
1095
|
obj.operationModeSetPropsMinValue = modelSupportsAuto && modelSupportsHeat ? 0 : !modelSupportsAuto && modelSupportsHeat ? 1 : modelSupportsAuto && !modelSupportsHeat ? 0 : 2;
|
|
1094
1096
|
obj.operationModeSetPropsMaxValue = 2
|
|
1095
1097
|
obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : !modelSupportsAuto && modelSupportsHeat ? [1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2] : [2];
|
|
@@ -1191,7 +1193,6 @@ class DeviceAta extends EventEmitter {
|
|
|
1191
1193
|
};
|
|
1192
1194
|
break;
|
|
1193
1195
|
};
|
|
1194
|
-
|
|
1195
1196
|
this.accessory = obj;
|
|
1196
1197
|
|
|
1197
1198
|
if (this.roomTemperatureSensorService) {
|
package/src/deviceatw.js
CHANGED
|
@@ -91,11 +91,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
91
91
|
this.deviceData = {};
|
|
92
92
|
|
|
93
93
|
//accessory
|
|
94
|
-
this.accessory = {
|
|
95
|
-
|
|
96
|
-
zonesSensors: [{}, {}, {}, {}]
|
|
97
|
-
};
|
|
98
|
-
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
94
|
+
this.accessory = {};
|
|
95
|
+
this.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
99
96
|
};
|
|
100
97
|
|
|
101
98
|
async externalIntegrations() {
|
|
@@ -1417,28 +1414,33 @@ class DeviceAtw extends EventEmitter {
|
|
|
1417
1414
|
const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
|
|
1418
1415
|
|
|
1419
1416
|
//accessory
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1417
|
+
const obj = {
|
|
1418
|
+
presets: presetsOnServer,
|
|
1419
|
+
power: power ? 1 : 0,
|
|
1420
|
+
unitStatus: unitStatus,
|
|
1421
|
+
idleZone1: idleZone1,
|
|
1422
|
+
idleZone2: idleZone2,
|
|
1423
|
+
temperatureIncrement: temperatureIncrement,
|
|
1424
|
+
hasHeatPump: hasHeatPump,
|
|
1425
|
+
hasZone1: hasZone1,
|
|
1426
|
+
hasHotWaterTank: hasHotWaterTank,
|
|
1427
|
+
hasZone2: hasZone2,
|
|
1428
|
+
heatCoolModes: heatCoolModes,
|
|
1429
|
+
caseHeatPump: caseHeatPump,
|
|
1430
|
+
caseZone1: caseZone1,
|
|
1431
|
+
caseHotWater: caseHotWater,
|
|
1432
|
+
caseZone2: caseZone2,
|
|
1433
|
+
zonesCount: zonesCount,
|
|
1434
|
+
caseHeatPumpSensor: caseHeatPumpSensor,
|
|
1435
|
+
caseZone1Sensor: caseZone1Sensor,
|
|
1436
|
+
caseHotWaterSensor: caseHotWaterSensor,
|
|
1437
|
+
caseZone2Sensor: caseZone2Sensor,
|
|
1438
|
+
sensorsCount: zonesSensorsCount,
|
|
1439
|
+
useFahrenheit: this.useFahrenheit,
|
|
1440
|
+
temperatureUnit: TemperatureDisplayUnits[this.useFahrenheit],
|
|
1441
|
+
zones: [{}, {}, {}, {}],
|
|
1442
|
+
zonesSensors: [{}, {}, {}, {}]
|
|
1443
|
+
};
|
|
1442
1444
|
|
|
1443
1445
|
//default values
|
|
1444
1446
|
let name = 'Heat Pump'
|
|
@@ -1564,7 +1566,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1564
1566
|
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, targetOperationMode)
|
|
1565
1567
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1566
1568
|
.updateCharacteristic(Characteristic.LockPhysicalControls, lockPhysicalControl)
|
|
1567
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1569
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1568
1570
|
const updateDefCool = heatCoolModes === 0 || heatCoolModes === 2 ? this.melCloudServices[i].updateCharacteristic(Characteristic.CoolingThresholdTemperature, setTemperature) : false;
|
|
1569
1571
|
const updateDefHeat = heatCoolModes === 0 || heatCoolModes === 1 ? this.melCloudServices[i].updateCharacteristic(Characteristic.HeatingThresholdTemperature, setTemperature) : false;
|
|
1570
1572
|
}
|
|
@@ -1670,24 +1672,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1670
1672
|
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, targetOperationMode)
|
|
1671
1673
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1672
1674
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1673
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1675
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1674
1676
|
}
|
|
1675
1677
|
break;
|
|
1676
1678
|
};
|
|
1677
1679
|
|
|
1678
1680
|
//add value to zones arrays
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
const setPropsMinValue = this.startPrepareAccessory ?
|
|
1689
|
-
const setPropsMaxValue = this.startPrepareAccessory ?
|
|
1690
|
-
const setPropsValidValues = this.startPrepareAccessory ?
|
|
1681
|
+
obj.zones[i].name = name;
|
|
1682
|
+
obj.zones[i].operationMode = operationModeZone;
|
|
1683
|
+
obj.zones[i].currentOperationMode = currentOperationMode;
|
|
1684
|
+
obj.zones[i].targetOperationMode = targetOperationMode;
|
|
1685
|
+
obj.zones[i].roomTemperature = roomTemperature;
|
|
1686
|
+
obj.zones[i].setTemperature = setTemperature;
|
|
1687
|
+
obj.zones[i].lockPhysicalControl = lockPhysicalControl;
|
|
1688
|
+
obj.zones[i].temperaturesSetPropsMinValue = temperatureSetPropsMinValue;
|
|
1689
|
+
obj.zones[i].temperaturesSetPropsMaxValue = temperatureSetPropsMaxValue;
|
|
1690
|
+
const setPropsMinValue = this.startPrepareAccessory ? obj.zones[i].operationModesSetPropsMinValue = operationModeSetPropsMinValue : false;
|
|
1691
|
+
const setPropsMaxValue = this.startPrepareAccessory ? obj.zones[i].operationModesSetPropsMaxValue = operationModeSetPropsMaxValue : false;
|
|
1692
|
+
const setPropsValidValues = this.startPrepareAccessory ? obj.zones[i].operationModesSetPropsValidValues = operationModeSetPropsValidValues : false;
|
|
1691
1693
|
|
|
1692
1694
|
//log current state
|
|
1693
1695
|
if (!this.disableLogInfo) {
|
|
@@ -1696,32 +1698,32 @@ class DeviceAtw extends EventEmitter {
|
|
|
1696
1698
|
case caseHeatPump: //Heat Pump - HEAT, COOL, OFF
|
|
1697
1699
|
this.emit('info', `${heatPumpName}, Power: ${power ? 'ON' : 'OFF'}`)
|
|
1698
1700
|
this.emit('info', `${heatPumpName}, Operation mode: ${HeatPump.System[unitStatus]}`);
|
|
1699
|
-
this.emit('info', `${heatPumpName},'Outdoor temperature: ${roomTemperature}${
|
|
1700
|
-
this.emit('info', `${heatPumpName}, Temperature display unit: ${
|
|
1701
|
+
this.emit('info', `${heatPumpName},'Outdoor temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1702
|
+
this.emit('info', `${heatPumpName}, Temperature display unit: ${obj.temperatureUnit}`);
|
|
1701
1703
|
this.emit('info', `${heatPumpName}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1702
1704
|
break;
|
|
1703
1705
|
case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1704
1706
|
operationModeText = idleZone1 ? HeatPump.ZoneOperation[6] : HeatPump.ZoneOperation[operationModeZone1];
|
|
1705
1707
|
this.emit('info', `${zone1Name}, Operation mode: ${operationModeText}`);
|
|
1706
|
-
this.emit('info', `${zone1Name}, Temperature: ${roomTemperature}${
|
|
1707
|
-
this.emit('info', `${zone1Name}, Target temperature: ${setTemperature}${
|
|
1708
|
-
this.emit('info', `${zone1Name}, Temperature display unit: ${
|
|
1708
|
+
this.emit('info', `${zone1Name}, Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1709
|
+
this.emit('info', `${zone1Name}, Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
1710
|
+
this.emit('info', `${zone1Name}, Temperature display unit: ${obj.temperatureUnit}`);
|
|
1709
1711
|
this.emit('info', `${zone1Name}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1710
1712
|
break;
|
|
1711
1713
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
1712
1714
|
operationModeText = operationMode === 1 ? HeatPump.ForceDhw[1] : HeatPump.ForceDhw[forcedHotWaterMode ? 1 : 0];
|
|
1713
1715
|
this.emit('info', `${hotWaterName}, Operation mode: ${operationModeText}`);
|
|
1714
|
-
this.emit('info', `${hotWaterName}, Temperature: ${roomTemperature}${
|
|
1715
|
-
this.emit('info', `${hotWaterName}, Target temperature: ${setTemperature}${
|
|
1716
|
-
this.emit('info', `${hotWaterName}, Temperature display unit: ${
|
|
1716
|
+
this.emit('info', `${hotWaterName}, Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1717
|
+
this.emit('info', `${hotWaterName}, Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
1718
|
+
this.emit('info', `${hotWaterName}, Temperature display unit: ${obj.temperatureUnit}`);
|
|
1717
1719
|
this.emit('info', `${hotWaterName}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1718
1720
|
break;
|
|
1719
1721
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1720
1722
|
operationModeText = idleZone2 ? HeatPump.ZoneOperation[6] : HeatPump.ZoneOperation[operationModeZone2];
|
|
1721
1723
|
this.emit('info', `${zone2Name}, Operation mode: ${operationModeText}`);
|
|
1722
|
-
this.emit('info', `${zone2Name}, Temperature: ${roomTemperature}${
|
|
1723
|
-
this.emit('info', `${zone2Name}, Target temperature: ${setTemperature}${
|
|
1724
|
-
this.emit('info', `${zone2Name}, Temperature display unit: ${
|
|
1724
|
+
this.emit('info', `${zone2Name}, Temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1725
|
+
this.emit('info', `${zone2Name}, Target temperature: ${setTemperature}${obj.temperatureUnit}`)
|
|
1726
|
+
this.emit('info', `${zone2Name}, Temperature display unit: ${obj.temperatureUnit}`);
|
|
1725
1727
|
this.emit('info', `${zone2Name}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1726
1728
|
break;
|
|
1727
1729
|
};
|
|
@@ -1822,37 +1824,38 @@ class DeviceAtw extends EventEmitter {
|
|
|
1822
1824
|
};
|
|
1823
1825
|
|
|
1824
1826
|
//add value to sensors arrays
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1827
|
+
obj.zonesSensors[i].name = name;
|
|
1828
|
+
obj.zonesSensors[i].roomTemperature = roomTemperature;
|
|
1829
|
+
obj.zonesSensors[i].flowTemperature = flowTemperature;
|
|
1830
|
+
obj.zonesSensors[i].returnTemperature = returnTemperature;
|
|
1829
1831
|
|
|
1830
1832
|
//log current state
|
|
1831
1833
|
if (!this.disableLogInfo) {
|
|
1832
1834
|
switch (i) {
|
|
1833
1835
|
case caseHeatPumpSensor: //Heat Pump - HEAT, COOL, OFF
|
|
1834
|
-
const info = outdoorTemperature !== null ? this.emit('info', `${heatPumpName}, Outdoor temperature: ${outdoorTemperature}${
|
|
1835
|
-
const info0 = flowTemperatureHeatPump !== null ? this.emit('info', `${heatPumpName}, Flow temperature: ${flowTemperatureHeatPump}${
|
|
1836
|
-
const info1 = returnTemperatureHeatPump !== null ? this.emit('info', `${heatPumpName}, Return temperature: ${returnTemperatureHeatPump}${
|
|
1836
|
+
const info = outdoorTemperature !== null ? this.emit('info', `${heatPumpName}, Outdoor temperature: ${outdoorTemperature}${obj.temperatureUnit}`) : false;
|
|
1837
|
+
const info0 = flowTemperatureHeatPump !== null ? this.emit('info', `${heatPumpName}, Flow temperature: ${flowTemperatureHeatPump}${obj.temperatureUnit}`) : false;
|
|
1838
|
+
const info1 = returnTemperatureHeatPump !== null ? this.emit('info', `${heatPumpName}, Return temperature: ${returnTemperatureHeatPump}${obj.temperatureUnit}`) : false;
|
|
1837
1839
|
break;
|
|
1838
1840
|
case caseZone1Sensor: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1839
|
-
const info2 = roomTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Room temperature: ${roomTemperatureZone1}${
|
|
1840
|
-
const info3 = flowTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Flow temperature: ${flowTemperatureZone1}${
|
|
1841
|
-
const info4 = returnTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Return temperature: ${returnTemperatureZone1}${
|
|
1841
|
+
const info2 = roomTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Room temperature: ${roomTemperatureZone1}${obj.temperatureUnit}`) : false;
|
|
1842
|
+
const info3 = flowTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Flow temperature: ${flowTemperatureZone1}${obj.temperatureUnit}`) : false;
|
|
1843
|
+
const info4 = returnTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Return temperature: ${returnTemperatureZone1}${obj.temperatureUnit}`) : false;
|
|
1842
1844
|
break;
|
|
1843
1845
|
case caseHotWaterSensor: //Hot Water - AUTO, HEAT NOW
|
|
1844
|
-
const info5 = tankWaterTemperature !== null ? this.emit('info', `${hotWaterName}, Temperature: ${tankWaterTemperature}${
|
|
1845
|
-
const info6 = flowTemperatureWaterTank !== null ? this.emit('info', `${hotWaterName}, Flow temperature: ${flowTemperatureWaterTank}${
|
|
1846
|
-
const info7 = returnTemperatureWaterTank !== null ? this.emit('info', `${hotWaterName}, Return temperature: ${returnTemperatureWaterTank}${
|
|
1846
|
+
const info5 = tankWaterTemperature !== null ? this.emit('info', `${hotWaterName}, Temperature: ${tankWaterTemperature}${obj.temperatureUnit}`) : false;
|
|
1847
|
+
const info6 = flowTemperatureWaterTank !== null ? this.emit('info', `${hotWaterName}, Flow temperature: ${flowTemperatureWaterTank}${obj.temperatureUnit}`) : false;
|
|
1848
|
+
const info7 = returnTemperatureWaterTank !== null ? this.emit('info', `${hotWaterName}, Return temperature: ${returnTemperatureWaterTank}${obj.temperatureUnit}`) : false;
|
|
1847
1849
|
break;
|
|
1848
1850
|
case caseZone2Sensor: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1849
|
-
const info8 = roomTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Room temperature: ${roomTemperatureZone2}${
|
|
1850
|
-
const info9 = flowTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Flow temperature: ${flowTemperatureZone2}${
|
|
1851
|
-
const info10 = returnTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Return temperature: ${returnTemperatureZone2}${
|
|
1851
|
+
const info8 = roomTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Room temperature: ${roomTemperatureZone2}${obj.temperatureUnit}`) : false;
|
|
1852
|
+
const info9 = flowTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Flow temperature: ${flowTemperatureZone2}${obj.temperatureUnit}`) : false;
|
|
1853
|
+
const info10 = returnTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Return temperature: ${returnTemperatureZone2}${obj.temperatureUnit}`) : false;
|
|
1852
1854
|
break;
|
|
1853
1855
|
};
|
|
1854
1856
|
};
|
|
1855
1857
|
};
|
|
1858
|
+
this.accessory = obj;
|
|
1856
1859
|
|
|
1857
1860
|
//update presets state
|
|
1858
1861
|
if (this.presetsConfigured.length > 0) {
|
package/src/deviceerv.js
CHANGED
|
@@ -85,7 +85,7 @@ class DeviceErv extends EventEmitter {
|
|
|
85
85
|
|
|
86
86
|
//accessory
|
|
87
87
|
this.accessory = {};
|
|
88
|
-
this.
|
|
88
|
+
this.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
async externalIntegrations() {
|
|
@@ -936,93 +936,99 @@ class DeviceErv extends EventEmitter {
|
|
|
936
936
|
const ventilationMode = deviceData.Device.VentilationMode;
|
|
937
937
|
|
|
938
938
|
//accessory
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
939
|
+
const obj = {
|
|
940
|
+
presets: presetsOnServer,
|
|
941
|
+
hasRoomTemperature: hasRoomTemperature,
|
|
942
|
+
hasSupplyTemperature: hasSupplyTemperature,
|
|
943
|
+
hasOutdoorTemperature: hasOutdoorTemperature,
|
|
944
|
+
hasCoolOperationMode: hasCoolOperationMode,
|
|
945
|
+
hasHeatOperationMode: hasHeatOperationMode,
|
|
946
|
+
hasCO2Sensor: hasCO2Sensor,
|
|
947
|
+
roomCO2Level: roomCO2Level,
|
|
948
|
+
roomCO2Detected: roomCO2Detected,
|
|
949
|
+
hasPM25Sensor: hasPM25Sensor,
|
|
950
|
+
pM25SensorStatus: pM25SensorStatus,
|
|
951
|
+
pM25Level: pM25Level,
|
|
952
|
+
pM25AirQuality: pM25AirQuality,
|
|
953
|
+
hasAutoVentilationMode: hasAutoVentilationMode,
|
|
954
|
+
hasBypassVentilationMode: hasBypassVentilationMode,
|
|
955
|
+
hasAutomaticFanSpeed: hasAutomaticFanSpeed,
|
|
956
|
+
coreMaintenanceRequired: coreMaintenanceRequired,
|
|
957
|
+
filterMaintenanceRequired: filterMaintenanceRequired,
|
|
958
|
+
actualVentilationMode: actualVentilationMode,
|
|
959
|
+
numberOfFanSpeeds: numberOfFanSpeeds,
|
|
960
|
+
power: power ? 1 : 0,
|
|
961
|
+
operationMode: operationMode,
|
|
962
|
+
currentOperationMode: 0,
|
|
963
|
+
targetOperationMode: 0,
|
|
964
|
+
ventilationMode: ventilationMode,
|
|
965
|
+
roomTemperature: roomTemperature,
|
|
966
|
+
supplyTemperature: supplyTemperature,
|
|
967
|
+
outdoorTemperature: outdoorTemperature,
|
|
968
|
+
setTemperature: setTemperature,
|
|
969
|
+
defaultHeatingSetTemperature: defaultHeatingSetTemperature,
|
|
970
|
+
defaultCoolingSetTemperature: defaultCoolingSetTemperature,
|
|
971
|
+
lockPhysicalControl: 0,
|
|
972
|
+
temperatureIncrement: temperatureIncrement,
|
|
973
|
+
minTempHeat: minTempHeat,
|
|
974
|
+
temperatureIncrement: maxTempHeat,
|
|
975
|
+
minTempCoolDry: minTempCoolDry,
|
|
976
|
+
maxTempCoolDry: maxTempCoolDry,
|
|
977
|
+
useFahrenheit: this.useFahrenheit,
|
|
978
|
+
temperatureUnit: TemperatureDisplayUnits[this.useFahrenheit]
|
|
979
|
+
};
|
|
975
980
|
|
|
976
981
|
//ventilation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
|
|
977
982
|
switch (this.displayMode) {
|
|
978
983
|
case 1: //Heater Cooler
|
|
979
984
|
switch (ventilationMode) {
|
|
980
985
|
case 0: //LOSSNAY
|
|
981
|
-
|
|
982
|
-
|
|
986
|
+
obj.currentOperationMode = 2; //INACTIVE, IDLE, HEATING, COOLIN
|
|
987
|
+
obj.targetOperationMode = 1; //AUTO, HEAT, COOL
|
|
983
988
|
break;
|
|
984
989
|
case 1: //BYPASS
|
|
985
|
-
|
|
986
|
-
|
|
990
|
+
obj.currentOperationMode = 3;
|
|
991
|
+
obj.targetOperationMode = 2;
|
|
987
992
|
break;
|
|
988
993
|
case 2: //AUTO
|
|
989
994
|
switch (actualVentilationMode) {
|
|
990
995
|
case 0: //LOSSNAY
|
|
991
|
-
|
|
996
|
+
obj.currentOperationMode = 2;
|
|
992
997
|
break;
|
|
993
998
|
case 1: //BYPASS
|
|
994
|
-
|
|
999
|
+
obj.currentOperationMode = 3;
|
|
995
1000
|
break;
|
|
996
1001
|
default:
|
|
997
1002
|
this.emit('warn', `Unknown actual ventilation mode: ${actualVentilationMode}`);
|
|
998
1003
|
break;
|
|
999
1004
|
};
|
|
1000
|
-
|
|
1005
|
+
obj.targetOperationMode = 0;
|
|
1001
1006
|
break;
|
|
1002
1007
|
default:
|
|
1003
1008
|
this.emit('warn', `Unknown ventilation mode: ${ventilationMode}`);
|
|
1004
1009
|
break;
|
|
1005
1010
|
};
|
|
1006
1011
|
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1012
|
+
obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
|
|
1013
|
+
obj.targetOperationMode = obj.targetOperationMode;
|
|
1014
|
+
obj.operationModeSetPropsMinValue = hasAutoVentilationMode ? 0 : 1;
|
|
1015
|
+
obj.operationModeSetPropsMaxValue = hasAutoVentilationMode ? 2 : 2;
|
|
1016
|
+
obj.operationModeSetPropsValidValues = hasAutoVentilationMode ? (hasBypassVentilationMode ? [0, 1, 2] : [0, 2]) : (hasBypassVentilationMode ? [1, 2] : [2]);
|
|
1011
1017
|
|
|
1012
1018
|
//fan speed mode
|
|
1013
|
-
|
|
1019
|
+
obj.fanSpeedSetPropsMaxValue = 2;
|
|
1014
1020
|
switch (numberOfFanSpeeds) {
|
|
1015
1021
|
case 2: //Fan speed mode 2
|
|
1016
|
-
|
|
1017
|
-
|
|
1022
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [3, 1, 2][setFanSpeed] : [0, 1, 2][setFanSpeed];
|
|
1023
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 3 : 2;
|
|
1018
1024
|
break;
|
|
1019
1025
|
case 3: //Fan speed mode 3
|
|
1020
|
-
this.
|
|
1021
|
-
|
|
1026
|
+
this.obj.fanSpeed = hasAutomaticFanSpeed ? [4, 1, 2, 3][setFanSpeed] : [0, 1, 2, 3][setFanSpeed];
|
|
1027
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 4 : 3;
|
|
1022
1028
|
break;
|
|
1023
1029
|
case 4: //Fan speed mode 4
|
|
1024
|
-
|
|
1025
|
-
|
|
1030
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][setFanSpeed] : [0, 1, 2, 3, 4][setFanSpeed];
|
|
1031
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 5 : 4;
|
|
1026
1032
|
break;
|
|
1027
1033
|
};
|
|
1028
1034
|
|
|
@@ -1030,12 +1036,12 @@ class DeviceErv extends EventEmitter {
|
|
|
1030
1036
|
if (this.melCloudService) {
|
|
1031
1037
|
this.melCloudService
|
|
1032
1038
|
.updateCharacteristic(Characteristic.Active, power)
|
|
1033
|
-
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState,
|
|
1034
|
-
.updateCharacteristic(Characteristic.TargetHeaterCoolerState,
|
|
1039
|
+
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
|
|
1040
|
+
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
|
|
1035
1041
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1036
|
-
.updateCharacteristic(Characteristic.RotationSpeed,
|
|
1037
|
-
.updateCharacteristic(Characteristic.LockPhysicalControls,
|
|
1038
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1042
|
+
.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed)
|
|
1043
|
+
.updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
|
|
1044
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1039
1045
|
const updateDefCool = hasCoolOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature) : false;
|
|
1040
1046
|
const updateDefHeat = hasHeatOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
|
|
1041
1047
|
};
|
|
@@ -1044,49 +1050,50 @@ class DeviceErv extends EventEmitter {
|
|
|
1044
1050
|
//operation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
|
|
1045
1051
|
switch (ventilationMode) {
|
|
1046
1052
|
case 0: //LOSSNAY
|
|
1047
|
-
|
|
1048
|
-
|
|
1053
|
+
obj.currentOperationMode = 1; //OFF, HEAT, COOL
|
|
1054
|
+
obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
|
|
1049
1055
|
break;
|
|
1050
1056
|
case 1: //BYPASS
|
|
1051
|
-
|
|
1052
|
-
|
|
1057
|
+
obj.currentOperationMode = 2;
|
|
1058
|
+
obj.targetOperationMode = 2;
|
|
1053
1059
|
break;
|
|
1054
1060
|
case 2: //AUTO
|
|
1055
1061
|
switch (actualVentilationMode) {
|
|
1056
1062
|
case 0: //LOSSNAY
|
|
1057
|
-
|
|
1063
|
+
obj.currentOperationMode = 1;
|
|
1058
1064
|
break;
|
|
1059
1065
|
case 1: //BYPASS
|
|
1060
|
-
|
|
1066
|
+
obj.currentOperationMode = 2;
|
|
1061
1067
|
break;
|
|
1062
1068
|
default:
|
|
1063
1069
|
this.emit('warn', `Unknown actual ventilation mode: ${actualVentilationMode}`);
|
|
1064
1070
|
break;
|
|
1065
1071
|
};
|
|
1066
|
-
|
|
1072
|
+
obj.targetOperationMode = 3;
|
|
1067
1073
|
break;
|
|
1068
1074
|
default:
|
|
1069
1075
|
this.emit('warn', `Unknown ventilation mode: ${ventilationMode}`);
|
|
1070
1076
|
break;
|
|
1071
1077
|
};
|
|
1072
1078
|
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1079
|
+
obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
|
|
1080
|
+
obj.targetOperationMode = !power ? 0 : obj.targetOperationMode;
|
|
1081
|
+
obj.operationModeSetPropsMinValue = hasAutoVentilationMode ? 0 : 0;
|
|
1082
|
+
obj.operationModeSetPropsMaxValue = hasAutoVentilationMode ? 3 : 2;
|
|
1083
|
+
obj.operationModeSetPropsValidValues = hasAutoVentilationMode ? (hasBypassVentilationMode ? [0, 1, 2, 3] : [0, 2, 3]) : (hasBypassVentilationMode ? [0, 1, 2] : [0, 2]);
|
|
1078
1084
|
|
|
1079
1085
|
//update characteristics
|
|
1080
1086
|
if (this.melCloudService) {
|
|
1081
1087
|
this.melCloudService
|
|
1082
|
-
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState,
|
|
1083
|
-
.updateCharacteristic(Characteristic.TargetHeatingCoolingState,
|
|
1088
|
+
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
|
|
1089
|
+
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
|
|
1084
1090
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1085
1091
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1086
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1092
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1087
1093
|
};
|
|
1088
1094
|
break;
|
|
1089
1095
|
};
|
|
1096
|
+
this.accessory = obj;
|
|
1090
1097
|
|
|
1091
1098
|
//update temperature sensors
|
|
1092
1099
|
if (this.roomTemperatureSensorService) {
|
|
@@ -1185,7 +1192,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1185
1192
|
button.state = power ? (setFanSpeed === 4) : false;
|
|
1186
1193
|
break;
|
|
1187
1194
|
case 15: //PHYSICAL LOCK CONTROLS
|
|
1188
|
-
button.state = (
|
|
1195
|
+
button.state = (obj.lockPhysicalControl === 1);
|
|
1189
1196
|
break;
|
|
1190
1197
|
case 16: //ROOM TEMP HIDE
|
|
1191
1198
|
button.state = (hideRoomTemperature === true);
|
|
@@ -1215,12 +1222,12 @@ class DeviceErv extends EventEmitter {
|
|
|
1215
1222
|
this.emit('info', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
1216
1223
|
this.emit('info', `Target ventilation mode: ${Ventilation.OperationMode[ventilationMode]}`);
|
|
1217
1224
|
this.emit('info', `Current ventilation mode: ${Ventilation.OperationMode[actualVentilationMode]}`);
|
|
1218
|
-
this.emit('info', `Target temperature: ${setTemperature}${
|
|
1219
|
-
this.emit('info', `Room temperature: ${roomTemperature}${
|
|
1220
|
-
const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('info', `Supply temperature: ${roomTemperature}${
|
|
1221
|
-
const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('info', `Outdoor temperature: ${roomTemperature}${
|
|
1225
|
+
this.emit('info', `Target temperature: ${setTemperature}${obj.temperatureUnit}`);
|
|
1226
|
+
this.emit('info', `Room temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1227
|
+
const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('info', `Supply temperature: ${roomTemperature}${obj.temperatureUnit}`) : false;
|
|
1228
|
+
const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('info', `Outdoor temperature: ${roomTemperature}${obj.temperatureUnit}`) : false;
|
|
1222
1229
|
this.emit('info', `Fan speed mode: ${Ventilation.FanSpeed[setFanSpeed]}`);
|
|
1223
|
-
this.emit('info', `Temperature display unit: ${
|
|
1230
|
+
this.emit('info', `Temperature display unit: ${obj.temperatureUnit}`);
|
|
1224
1231
|
this.emit('info', `Core maintenance: ${Ventilation.CoreMaintenance[coreMaintenanceRequired]}`);
|
|
1225
1232
|
this.emit('info', `Filter maintenance: ${Ventilation.FilterMaintenance[filterMaintenanceRequired]}`);
|
|
1226
1233
|
const info5 = hasCO2Sensor ? this.emit('info', `CO2 detected: ${Ventilation.Co2Detected[roomCO2Detected]}`) : false;
|