homebridge-melcloud-control 3.8.4-beta.6 → 3.8.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/package.json +1 -1
- package/src/deviceata.js +0 -1
- package/src/deviceatw.js +70 -68
- package/src/deviceerv.js +87 -81
- package/src/melcloudata.js +1 -0
- package/src/melcloudatw.js +1 -0
- package/src/melclouderv.js +1 -0
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
|
|
4
|
+
"version": "3.8.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
package/src/deviceatw.js
CHANGED
|
@@ -91,10 +91,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
91
91
|
this.deviceData = {};
|
|
92
92
|
|
|
93
93
|
//accessory
|
|
94
|
-
this.accessory = {
|
|
95
|
-
zones: [{}, {}, {}, {}],
|
|
96
|
-
zonesSensors: [{}, {}, {}, {}]
|
|
97
|
-
};
|
|
94
|
+
this.accessory = {};
|
|
98
95
|
this.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
99
96
|
};
|
|
100
97
|
|
|
@@ -1417,29 +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
|
-
|
|
1442
|
-
|
|
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
|
+
};
|
|
1443
1444
|
|
|
1444
1445
|
//default values
|
|
1445
1446
|
let name = 'Heat Pump'
|
|
@@ -1565,7 +1566,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1565
1566
|
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, targetOperationMode)
|
|
1566
1567
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1567
1568
|
.updateCharacteristic(Characteristic.LockPhysicalControls, lockPhysicalControl)
|
|
1568
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1569
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1569
1570
|
const updateDefCool = heatCoolModes === 0 || heatCoolModes === 2 ? this.melCloudServices[i].updateCharacteristic(Characteristic.CoolingThresholdTemperature, setTemperature) : false;
|
|
1570
1571
|
const updateDefHeat = heatCoolModes === 0 || heatCoolModes === 1 ? this.melCloudServices[i].updateCharacteristic(Characteristic.HeatingThresholdTemperature, setTemperature) : false;
|
|
1571
1572
|
}
|
|
@@ -1671,24 +1672,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1671
1672
|
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, targetOperationMode)
|
|
1672
1673
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1673
1674
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1674
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1675
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1675
1676
|
}
|
|
1676
1677
|
break;
|
|
1677
1678
|
};
|
|
1678
1679
|
|
|
1679
1680
|
//add value to zones arrays
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
const setPropsMinValue = this.startPrepareAccessory ?
|
|
1690
|
-
const setPropsMaxValue = this.startPrepareAccessory ?
|
|
1691
|
-
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;
|
|
1692
1693
|
|
|
1693
1694
|
//log current state
|
|
1694
1695
|
if (!this.disableLogInfo) {
|
|
@@ -1697,32 +1698,32 @@ class DeviceAtw extends EventEmitter {
|
|
|
1697
1698
|
case caseHeatPump: //Heat Pump - HEAT, COOL, OFF
|
|
1698
1699
|
this.emit('info', `${heatPumpName}, Power: ${power ? 'ON' : 'OFF'}`)
|
|
1699
1700
|
this.emit('info', `${heatPumpName}, Operation mode: ${HeatPump.System[unitStatus]}`);
|
|
1700
|
-
this.emit('info', `${heatPumpName},'Outdoor temperature: ${roomTemperature}${
|
|
1701
|
-
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}`);
|
|
1702
1703
|
this.emit('info', `${heatPumpName}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1703
1704
|
break;
|
|
1704
1705
|
case caseZone1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1705
1706
|
operationModeText = idleZone1 ? HeatPump.ZoneOperation[6] : HeatPump.ZoneOperation[operationModeZone1];
|
|
1706
1707
|
this.emit('info', `${zone1Name}, Operation mode: ${operationModeText}`);
|
|
1707
|
-
this.emit('info', `${zone1Name}, Temperature: ${roomTemperature}${
|
|
1708
|
-
this.emit('info', `${zone1Name}, Target temperature: ${setTemperature}${
|
|
1709
|
-
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}`);
|
|
1710
1711
|
this.emit('info', `${zone1Name}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1711
1712
|
break;
|
|
1712
1713
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
1713
1714
|
operationModeText = operationMode === 1 ? HeatPump.ForceDhw[1] : HeatPump.ForceDhw[forcedHotWaterMode ? 1 : 0];
|
|
1714
1715
|
this.emit('info', `${hotWaterName}, Operation mode: ${operationModeText}`);
|
|
1715
|
-
this.emit('info', `${hotWaterName}, Temperature: ${roomTemperature}${
|
|
1716
|
-
this.emit('info', `${hotWaterName}, Target temperature: ${setTemperature}${
|
|
1717
|
-
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}`);
|
|
1718
1719
|
this.emit('info', `${hotWaterName}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1719
1720
|
break;
|
|
1720
1721
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1721
1722
|
operationModeText = idleZone2 ? HeatPump.ZoneOperation[6] : HeatPump.ZoneOperation[operationModeZone2];
|
|
1722
1723
|
this.emit('info', `${zone2Name}, Operation mode: ${operationModeText}`);
|
|
1723
|
-
this.emit('info', `${zone2Name}, Temperature: ${roomTemperature}${
|
|
1724
|
-
this.emit('info', `${zone2Name}, Target temperature: ${setTemperature}${
|
|
1725
|
-
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}`);
|
|
1726
1727
|
this.emit('info', `${zone2Name}, Lock physical controls: ${lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1727
1728
|
break;
|
|
1728
1729
|
};
|
|
@@ -1823,37 +1824,38 @@ class DeviceAtw extends EventEmitter {
|
|
|
1823
1824
|
};
|
|
1824
1825
|
|
|
1825
1826
|
//add value to sensors arrays
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1827
|
+
obj.zonesSensors[i].name = name;
|
|
1828
|
+
obj.zonesSensors[i].roomTemperature = roomTemperature;
|
|
1829
|
+
obj.zonesSensors[i].flowTemperature = flowTemperature;
|
|
1830
|
+
obj.zonesSensors[i].returnTemperature = returnTemperature;
|
|
1830
1831
|
|
|
1831
1832
|
//log current state
|
|
1832
1833
|
if (!this.disableLogInfo) {
|
|
1833
1834
|
switch (i) {
|
|
1834
1835
|
case caseHeatPumpSensor: //Heat Pump - HEAT, COOL, OFF
|
|
1835
|
-
const info = outdoorTemperature !== null ? this.emit('info', `${heatPumpName}, Outdoor temperature: ${outdoorTemperature}${
|
|
1836
|
-
const info0 = flowTemperatureHeatPump !== null ? this.emit('info', `${heatPumpName}, Flow temperature: ${flowTemperatureHeatPump}${
|
|
1837
|
-
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;
|
|
1838
1839
|
break;
|
|
1839
1840
|
case caseZone1Sensor: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1840
|
-
const info2 = roomTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Room temperature: ${roomTemperatureZone1}${
|
|
1841
|
-
const info3 = flowTemperatureZone1 !== null ? this.emit('info', `${zone1Name}, Flow temperature: ${flowTemperatureZone1}${
|
|
1842
|
-
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;
|
|
1843
1844
|
break;
|
|
1844
1845
|
case caseHotWaterSensor: //Hot Water - AUTO, HEAT NOW
|
|
1845
|
-
const info5 = tankWaterTemperature !== null ? this.emit('info', `${hotWaterName}, Temperature: ${tankWaterTemperature}${
|
|
1846
|
-
const info6 = flowTemperatureWaterTank !== null ? this.emit('info', `${hotWaterName}, Flow temperature: ${flowTemperatureWaterTank}${
|
|
1847
|
-
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;
|
|
1848
1849
|
break;
|
|
1849
1850
|
case caseZone2Sensor: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1850
|
-
const info8 = roomTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Room temperature: ${roomTemperatureZone2}${
|
|
1851
|
-
const info9 = flowTemperatureZone2 !== null ? this.emit('info', `${zone2Name}, Flow temperature: ${flowTemperatureZone2}${
|
|
1852
|
-
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;
|
|
1853
1854
|
break;
|
|
1854
1855
|
};
|
|
1855
1856
|
};
|
|
1856
1857
|
};
|
|
1858
|
+
this.accessory = obj;
|
|
1857
1859
|
|
|
1858
1860
|
//update presets state
|
|
1859
1861
|
if (this.presetsConfigured.length > 0) {
|
package/src/deviceerv.js
CHANGED
|
@@ -936,94 +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
|
-
|
|
975
|
-
|
|
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
|
+
};
|
|
976
980
|
|
|
977
981
|
//ventilation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
|
|
978
982
|
switch (this.displayMode) {
|
|
979
983
|
case 1: //Heater Cooler
|
|
980
984
|
switch (ventilationMode) {
|
|
981
985
|
case 0: //LOSSNAY
|
|
982
|
-
|
|
983
|
-
|
|
986
|
+
obj.currentOperationMode = 2; //INACTIVE, IDLE, HEATING, COOLIN
|
|
987
|
+
obj.targetOperationMode = 1; //AUTO, HEAT, COOL
|
|
984
988
|
break;
|
|
985
989
|
case 1: //BYPASS
|
|
986
|
-
|
|
987
|
-
|
|
990
|
+
obj.currentOperationMode = 3;
|
|
991
|
+
obj.targetOperationMode = 2;
|
|
988
992
|
break;
|
|
989
993
|
case 2: //AUTO
|
|
990
994
|
switch (actualVentilationMode) {
|
|
991
995
|
case 0: //LOSSNAY
|
|
992
|
-
|
|
996
|
+
obj.currentOperationMode = 2;
|
|
993
997
|
break;
|
|
994
998
|
case 1: //BYPASS
|
|
995
|
-
|
|
999
|
+
obj.currentOperationMode = 3;
|
|
996
1000
|
break;
|
|
997
1001
|
default:
|
|
998
1002
|
this.emit('warn', `Unknown actual ventilation mode: ${actualVentilationMode}`);
|
|
999
1003
|
break;
|
|
1000
1004
|
};
|
|
1001
|
-
|
|
1005
|
+
obj.targetOperationMode = 0;
|
|
1002
1006
|
break;
|
|
1003
1007
|
default:
|
|
1004
1008
|
this.emit('warn', `Unknown ventilation mode: ${ventilationMode}`);
|
|
1005
1009
|
break;
|
|
1006
1010
|
};
|
|
1007
1011
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
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]);
|
|
1012
1017
|
|
|
1013
1018
|
//fan speed mode
|
|
1014
|
-
|
|
1019
|
+
obj.fanSpeedSetPropsMaxValue = 2;
|
|
1015
1020
|
switch (numberOfFanSpeeds) {
|
|
1016
1021
|
case 2: //Fan speed mode 2
|
|
1017
|
-
|
|
1018
|
-
|
|
1022
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [3, 1, 2][setFanSpeed] : [0, 1, 2][setFanSpeed];
|
|
1023
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 3 : 2;
|
|
1019
1024
|
break;
|
|
1020
1025
|
case 3: //Fan speed mode 3
|
|
1021
|
-
this.
|
|
1022
|
-
|
|
1026
|
+
this.obj.fanSpeed = hasAutomaticFanSpeed ? [4, 1, 2, 3][setFanSpeed] : [0, 1, 2, 3][setFanSpeed];
|
|
1027
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 4 : 3;
|
|
1023
1028
|
break;
|
|
1024
1029
|
case 4: //Fan speed mode 4
|
|
1025
|
-
|
|
1026
|
-
|
|
1030
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][setFanSpeed] : [0, 1, 2, 3, 4][setFanSpeed];
|
|
1031
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 5 : 4;
|
|
1027
1032
|
break;
|
|
1028
1033
|
};
|
|
1029
1034
|
|
|
@@ -1031,12 +1036,12 @@ class DeviceErv extends EventEmitter {
|
|
|
1031
1036
|
if (this.melCloudService) {
|
|
1032
1037
|
this.melCloudService
|
|
1033
1038
|
.updateCharacteristic(Characteristic.Active, power)
|
|
1034
|
-
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState,
|
|
1035
|
-
.updateCharacteristic(Characteristic.TargetHeaterCoolerState,
|
|
1039
|
+
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
|
|
1040
|
+
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
|
|
1036
1041
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1037
|
-
.updateCharacteristic(Characteristic.RotationSpeed,
|
|
1038
|
-
.updateCharacteristic(Characteristic.LockPhysicalControls,
|
|
1039
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1042
|
+
.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed)
|
|
1043
|
+
.updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
|
|
1044
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1040
1045
|
const updateDefCool = hasCoolOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature) : false;
|
|
1041
1046
|
const updateDefHeat = hasHeatOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
|
|
1042
1047
|
};
|
|
@@ -1045,49 +1050,50 @@ class DeviceErv extends EventEmitter {
|
|
|
1045
1050
|
//operation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
|
|
1046
1051
|
switch (ventilationMode) {
|
|
1047
1052
|
case 0: //LOSSNAY
|
|
1048
|
-
|
|
1049
|
-
|
|
1053
|
+
obj.currentOperationMode = 1; //OFF, HEAT, COOL
|
|
1054
|
+
obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
|
|
1050
1055
|
break;
|
|
1051
1056
|
case 1: //BYPASS
|
|
1052
|
-
|
|
1053
|
-
|
|
1057
|
+
obj.currentOperationMode = 2;
|
|
1058
|
+
obj.targetOperationMode = 2;
|
|
1054
1059
|
break;
|
|
1055
1060
|
case 2: //AUTO
|
|
1056
1061
|
switch (actualVentilationMode) {
|
|
1057
1062
|
case 0: //LOSSNAY
|
|
1058
|
-
|
|
1063
|
+
obj.currentOperationMode = 1;
|
|
1059
1064
|
break;
|
|
1060
1065
|
case 1: //BYPASS
|
|
1061
|
-
|
|
1066
|
+
obj.currentOperationMode = 2;
|
|
1062
1067
|
break;
|
|
1063
1068
|
default:
|
|
1064
1069
|
this.emit('warn', `Unknown actual ventilation mode: ${actualVentilationMode}`);
|
|
1065
1070
|
break;
|
|
1066
1071
|
};
|
|
1067
|
-
|
|
1072
|
+
obj.targetOperationMode = 3;
|
|
1068
1073
|
break;
|
|
1069
1074
|
default:
|
|
1070
1075
|
this.emit('warn', `Unknown ventilation mode: ${ventilationMode}`);
|
|
1071
1076
|
break;
|
|
1072
1077
|
};
|
|
1073
1078
|
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
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]);
|
|
1079
1084
|
|
|
1080
1085
|
//update characteristics
|
|
1081
1086
|
if (this.melCloudService) {
|
|
1082
1087
|
this.melCloudService
|
|
1083
|
-
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState,
|
|
1084
|
-
.updateCharacteristic(Characteristic.TargetHeatingCoolingState,
|
|
1088
|
+
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
|
|
1089
|
+
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
|
|
1085
1090
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1086
1091
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1087
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1092
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1088
1093
|
};
|
|
1089
1094
|
break;
|
|
1090
1095
|
};
|
|
1096
|
+
this.accessory = obj;
|
|
1091
1097
|
|
|
1092
1098
|
//update temperature sensors
|
|
1093
1099
|
if (this.roomTemperatureSensorService) {
|
|
@@ -1186,7 +1192,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1186
1192
|
button.state = power ? (setFanSpeed === 4) : false;
|
|
1187
1193
|
break;
|
|
1188
1194
|
case 15: //PHYSICAL LOCK CONTROLS
|
|
1189
|
-
button.state = (
|
|
1195
|
+
button.state = (obj.lockPhysicalControl === 1);
|
|
1190
1196
|
break;
|
|
1191
1197
|
case 16: //ROOM TEMP HIDE
|
|
1192
1198
|
button.state = (hideRoomTemperature === true);
|
|
@@ -1216,12 +1222,12 @@ class DeviceErv extends EventEmitter {
|
|
|
1216
1222
|
this.emit('info', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
1217
1223
|
this.emit('info', `Target ventilation mode: ${Ventilation.OperationMode[ventilationMode]}`);
|
|
1218
1224
|
this.emit('info', `Current ventilation mode: ${Ventilation.OperationMode[actualVentilationMode]}`);
|
|
1219
|
-
this.emit('info', `Target temperature: ${setTemperature}${
|
|
1220
|
-
this.emit('info', `Room temperature: ${roomTemperature}${
|
|
1221
|
-
const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('info', `Supply temperature: ${roomTemperature}${
|
|
1222
|
-
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;
|
|
1223
1229
|
this.emit('info', `Fan speed mode: ${Ventilation.FanSpeed[setFanSpeed]}`);
|
|
1224
|
-
this.emit('info', `Temperature display unit: ${
|
|
1230
|
+
this.emit('info', `Temperature display unit: ${obj.temperatureUnit}`);
|
|
1225
1231
|
this.emit('info', `Core maintenance: ${Ventilation.CoreMaintenance[coreMaintenanceRequired]}`);
|
|
1226
1232
|
this.emit('info', `Filter maintenance: ${Ventilation.FilterMaintenance[filterMaintenanceRequired]}`);
|
|
1227
1233
|
const info5 = hasCO2Sensor ? this.emit('info', `CO2 detected: ${Ventilation.Co2Detected[roomCO2Detected]}`) : false;
|
package/src/melcloudata.js
CHANGED
|
@@ -336,6 +336,7 @@ class MelCloudAta extends EventEmitter {
|
|
|
336
336
|
//check state changes
|
|
337
337
|
const deviceDataHasNotChanged = JSON.stringify(deviceState) === JSON.stringify(this.deviceState);
|
|
338
338
|
if (deviceDataHasNotChanged) {
|
|
339
|
+
const debug = this.enableDebugMode ? this.emit('debug', `Device state not changed`) : false;
|
|
339
340
|
return;
|
|
340
341
|
}
|
|
341
342
|
this.deviceState = deviceState;
|
package/src/melcloudatw.js
CHANGED
|
@@ -400,6 +400,7 @@ class MelCloudAtw extends EventEmitter {
|
|
|
400
400
|
//check state changes
|
|
401
401
|
const deviceDataHasNotChanged = JSON.stringify(deviceState) === JSON.stringify(this.deviceState);
|
|
402
402
|
if (deviceDataHasNotChanged) {
|
|
403
|
+
const debug = this.enableDebugMode ? this.emit('debug', `Device state not changed`) : false;
|
|
403
404
|
return;
|
|
404
405
|
}
|
|
405
406
|
this.deviceState = deviceState;
|
package/src/melclouderv.js
CHANGED
|
@@ -324,6 +324,7 @@ class MelCloudErv extends EventEmitter {
|
|
|
324
324
|
//check state changes
|
|
325
325
|
const deviceDataHasNotChanged = JSON.stringify(deviceState) === JSON.stringify(this.deviceState);
|
|
326
326
|
if (deviceDataHasNotChanged) {
|
|
327
|
+
const debug = this.enableDebugMode ? this.emit('debug', `Device state not changed`) : false;
|
|
327
328
|
return;
|
|
328
329
|
}
|
|
329
330
|
this.deviceState = deviceState;
|