homebridge-melcloud-control 3.8.4-beta.3 → 3.8.4-beta.5
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 +91 -61
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.5",
|
|
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
|
@@ -86,7 +86,7 @@ class DeviceAta extends EventEmitter {
|
|
|
86
86
|
|
|
87
87
|
//accessory
|
|
88
88
|
this.accessory = {};
|
|
89
|
-
this.
|
|
89
|
+
this.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
90
90
|
};
|
|
91
91
|
|
|
92
92
|
async externalIntegrations() {
|
|
@@ -1012,7 +1012,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1012
1012
|
const outdoorTemperature = deviceData.Device.OutdoorTemperature;
|
|
1013
1013
|
|
|
1014
1014
|
//accessory
|
|
1015
|
-
|
|
1015
|
+
const obj = {
|
|
1016
1016
|
presets: presetsOnServer,
|
|
1017
1017
|
hasAutomaticFanSpeed: hasAutomaticFanSpeed,
|
|
1018
1018
|
airDirectionFunction: airDirectionFunction,
|
|
@@ -1031,6 +1031,8 @@ class DeviceAta extends EventEmitter {
|
|
|
1031
1031
|
power: power ? 1 : 0,
|
|
1032
1032
|
inStandbyMode: inStandbyMode,
|
|
1033
1033
|
operationMode: operationMode,
|
|
1034
|
+
currentOperationMode: 0,
|
|
1035
|
+
targetOperationMode: 0,
|
|
1034
1036
|
roomTemperature: roomTemperature,
|
|
1035
1037
|
outdoorTemperature: outdoorTemperature,
|
|
1036
1038
|
setTemperature: setTemperature,
|
|
@@ -1043,7 +1045,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1043
1045
|
swingMode: swingFunction && vaneHorizontalDirection === 12 && vaneVerticalDirection === 7 ? 1 : 0,
|
|
1044
1046
|
lockPhysicalControl: prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0,
|
|
1045
1047
|
temperatureIncrement: temperatureIncrement,
|
|
1046
|
-
temperatureUnit: TemperatureDisplayUnits[this.
|
|
1048
|
+
temperatureUnit: TemperatureDisplayUnits[this.useFahrenheit]
|
|
1047
1049
|
};
|
|
1048
1050
|
|
|
1049
1051
|
//operating mode 0, HEAT, DRY, COOL, 4, 5, 6, FAN, AUTO, ISEE HEAT, ISEE DRY, ISEE COOL
|
|
@@ -1051,119 +1053,147 @@ class DeviceAta extends EventEmitter {
|
|
|
1051
1053
|
case 1: //Heater Cooler
|
|
1052
1054
|
switch (operationMode) {
|
|
1053
1055
|
case 1: //HEAT
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
|
|
1057
|
+
obj.targetOperationMode = 1; //AUTO, HEAT, COOL
|
|
1056
1058
|
break;
|
|
1057
1059
|
case 2: //DRY
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
+
obj.currentOperationMode = 1;
|
|
1061
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1060
1062
|
break;
|
|
1061
1063
|
case 3: //COOL
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
1065
|
+
obj.targetOperationMode = 2;
|
|
1064
1066
|
break;
|
|
1065
1067
|
case 7: //FAN
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
+
obj.currentOperationMode = 1;
|
|
1069
|
+
obj.targetOperationMode = this.autoDryFanMode === 3 ? 0 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
|
|
1068
1070
|
break;
|
|
1069
1071
|
case 8: //AUTO
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 3 : roomTemperature < setTemperature ? 2 : 1;
|
|
1073
|
+
obj.targetOperationMode = 0;
|
|
1072
1074
|
break;
|
|
1073
1075
|
case 9: //ISEE HEAT
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2
|
|
1077
|
+
obj.targetOperationMode = 1;
|
|
1076
1078
|
break;
|
|
1077
1079
|
case 10: //ISEE DRY
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
+
obj.currentOperationMode = 1;
|
|
1081
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1080
1082
|
break;
|
|
1081
1083
|
case 11: //ISEE COOL;
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
1085
|
+
obj.targetOperationMode = 2;
|
|
1084
1086
|
break;
|
|
1085
1087
|
default:
|
|
1086
1088
|
this.emit('warn', `Unknown operating mode: ${operationMode}`);
|
|
1087
1089
|
return
|
|
1088
1090
|
};
|
|
1089
1091
|
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1092
|
+
obj.currentOperationMode = !power ? 0 : inStandbyMode ? 1 : obj.currentOperationMode;
|
|
1093
|
+
obj.operationModeSetPropsMinValue = modelSupportsAuto && modelSupportsHeat ? 0 : !modelSupportsAuto && modelSupportsHeat ? 1 : modelSupportsAuto && !modelSupportsHeat ? 0 : 2;
|
|
1094
|
+
obj.operationModeSetPropsMaxValue = 2
|
|
1095
|
+
obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : !modelSupportsAuto && modelSupportsHeat ? [1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2] : [2];
|
|
1096
|
+
|
|
1097
|
+
//fan speed mode
|
|
1098
|
+
if (modelSupportsFanSpeed) {
|
|
1099
|
+
switch (numberOfFanSpeeds) {
|
|
1100
|
+
case 2: //Fan speed mode 2
|
|
1101
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [3, 1, 2][fanSpeed] : [0, 1, 2][fanSpeed];
|
|
1102
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 3 : 2;
|
|
1103
|
+
break;
|
|
1104
|
+
case 3: //Fan speed mode 3
|
|
1105
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [4, 1, 2, 3][fanSpeed] : [0, 1, 2, 3][fanSpeed];
|
|
1106
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 4 : 3;
|
|
1107
|
+
break;
|
|
1108
|
+
case 4: //Fan speed mode 4
|
|
1109
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][fanSpeed] : [0, 1, 2, 3, 4][fanSpeed];
|
|
1110
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 5 : 4;
|
|
1111
|
+
break;
|
|
1112
|
+
case 5: //Fan speed mode 5
|
|
1113
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [6, 1, 2, 3, 4, 5][fanSpeed] : [0, 1, 2, 3, 4, 5][fanSpeed];
|
|
1114
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 6 : 5;
|
|
1115
|
+
break;
|
|
1116
|
+
case 6: //Fan speed mode 6
|
|
1117
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [7, 1, 2, 3, 4, 5, 6][fanSpeed] : [0, 1, 2, 3, 4, 5, 6][fanSpeed];
|
|
1118
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 7 : 6;
|
|
1119
|
+
break;
|
|
1120
|
+
};
|
|
1121
|
+
};
|
|
1094
1122
|
|
|
1095
1123
|
//update characteristics
|
|
1096
1124
|
if (this.melCloudService) {
|
|
1097
1125
|
this.melCloudService
|
|
1098
1126
|
.updateCharacteristic(Characteristic.Active, power ? 1 : 0)
|
|
1099
|
-
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState,
|
|
1100
|
-
.updateCharacteristic(Characteristic.TargetHeaterCoolerState,
|
|
1127
|
+
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
|
|
1128
|
+
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
|
|
1101
1129
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1102
|
-
.updateCharacteristic(Characteristic.LockPhysicalControls,
|
|
1103
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1130
|
+
.updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
|
|
1131
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit)
|
|
1104
1132
|
.updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature);
|
|
1105
1133
|
const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
|
|
1106
|
-
const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed,
|
|
1107
|
-
const updateSM = swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode,
|
|
1134
|
+
const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed) : false;
|
|
1135
|
+
const updateSM = swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode, obj.swingMode) : false;
|
|
1108
1136
|
};
|
|
1109
1137
|
break;
|
|
1110
1138
|
case 2: //Thermostat
|
|
1111
1139
|
switch (operationMode) {
|
|
1112
1140
|
case 1: //HEAT
|
|
1113
|
-
|
|
1114
|
-
|
|
1141
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
|
|
1142
|
+
obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
|
|
1115
1143
|
break;
|
|
1116
1144
|
case 2: //DRY
|
|
1117
|
-
|
|
1118
|
-
|
|
1145
|
+
obj.currentOperationMode = 0;
|
|
1146
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1119
1147
|
break;
|
|
1120
1148
|
case 3: //COOL
|
|
1121
|
-
|
|
1122
|
-
|
|
1149
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
1150
|
+
obj.targetOperationMode = 2;
|
|
1123
1151
|
break;
|
|
1124
1152
|
case 7: //FAN
|
|
1125
|
-
|
|
1126
|
-
|
|
1153
|
+
obj.currentOperationMode = 0;
|
|
1154
|
+
obj.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
|
|
1127
1155
|
break;
|
|
1128
1156
|
case 8: //AUTO
|
|
1129
|
-
|
|
1130
|
-
|
|
1157
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : roomTemperature > setTemperature ? 2 : 0;
|
|
1158
|
+
obj.targetOperationMode = 3;
|
|
1131
1159
|
break;
|
|
1132
1160
|
case 9: //ISEE HEAT
|
|
1133
|
-
|
|
1134
|
-
|
|
1161
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
|
|
1162
|
+
obj.targetOperationMode = 1;
|
|
1135
1163
|
break;
|
|
1136
1164
|
case 10: //ISEE DRY
|
|
1137
|
-
|
|
1138
|
-
|
|
1165
|
+
obj.currentOperationMode = 0;
|
|
1166
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1139
1167
|
break;
|
|
1140
1168
|
case 11: //ISEE COOL;
|
|
1141
|
-
|
|
1142
|
-
|
|
1169
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
1170
|
+
obj.targetOperationMode = 2;
|
|
1143
1171
|
break;
|
|
1144
1172
|
default:
|
|
1145
1173
|
this.emit('warn', `Unknown operating mode: ${operationMode}`);
|
|
1146
1174
|
break;
|
|
1147
1175
|
};
|
|
1148
1176
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1177
|
+
obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
|
|
1178
|
+
obj.targetOperationMode = !power ? 0 : obj.targetOperationMode;
|
|
1179
|
+
obj.operationModeSetPropsMinValue = 0
|
|
1180
|
+
obj.operationModeSetPropsMaxValue = modelSupportsAuto && modelSupportsHeat ? 3 : !modelSupportsAuto && modelSupportsHeat ? 2 : modelSupportsAuto && !modelSupportsHeat ? 3 : 2;
|
|
1181
|
+
obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2, 3] : !modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2, 3] : [0, 2];
|
|
1154
1182
|
|
|
1155
1183
|
//update characteristics
|
|
1156
1184
|
if (this.melCloudService) {
|
|
1157
1185
|
this.melCloudService
|
|
1158
|
-
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState,
|
|
1159
|
-
.updateCharacteristic(Characteristic.TargetHeatingCoolingState,
|
|
1186
|
+
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
|
|
1187
|
+
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
|
|
1160
1188
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1161
1189
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1162
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1190
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1163
1191
|
};
|
|
1164
1192
|
break;
|
|
1165
1193
|
};
|
|
1166
1194
|
|
|
1195
|
+
this.accessory = obj;
|
|
1196
|
+
|
|
1167
1197
|
if (this.roomTemperatureSensorService) {
|
|
1168
1198
|
this.roomTemperatureSensorService
|
|
1169
1199
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
@@ -1293,7 +1323,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1293
1323
|
button.state = power ? (fanSpeed === 6) : false;
|
|
1294
1324
|
break;
|
|
1295
1325
|
case 37: //PHYSICAL LOCK CONTROLS ALL
|
|
1296
|
-
button.state = (
|
|
1326
|
+
button.state = (obj.lockPhysicalControl === 1);
|
|
1297
1327
|
break;
|
|
1298
1328
|
case 38: //PHYSICAL LOCK CONTROLS POWER
|
|
1299
1329
|
button.state = (prohibitPower === true);
|
|
@@ -1322,17 +1352,17 @@ class DeviceAta extends EventEmitter {
|
|
|
1322
1352
|
if (!this.disableLogInfo) {
|
|
1323
1353
|
this.emit('info', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
1324
1354
|
this.emit('info', `Target operation mode: ${AirConditioner.DriveMode[operationMode]}`);
|
|
1325
|
-
this.emit('info', `Current operation mode: ${this.displayMode === 1 ? AirConditioner.CurrentOperationModeHeatherCooler[
|
|
1326
|
-
this.emit('info', `Target temperature: ${setTemperature}${
|
|
1327
|
-
this.emit('info', `Current temperature: ${roomTemperature}${
|
|
1328
|
-
const info = hasOutdoorTemperature && outdoorTemperature !== null ? this.emit('info', `Outdoor temperature: ${outdoorTemperature}${
|
|
1355
|
+
this.emit('info', `Current operation mode: ${this.displayMode === 1 ? AirConditioner.CurrentOperationModeHeatherCooler[obj.currentOperationMode] : AirConditioner.CurrentOperationModeThermostat[obj.currentOperationMode]}`);
|
|
1356
|
+
this.emit('info', `Target temperature: ${setTemperature}${obj.temperatureUnit}`);
|
|
1357
|
+
this.emit('info', `Current temperature: ${roomTemperature}${obj.temperatureUnit}`);
|
|
1358
|
+
const info = hasOutdoorTemperature && outdoorTemperature !== null ? this.emit('info', `Outdoor temperature: ${outdoorTemperature}${obj.temperatureUnit}`) : false;
|
|
1329
1359
|
const info3 = modelSupportsFanSpeed ? this.emit('info', `Target fan speed: ${AirConditioner.FanSpeed[fanSpeed]}`) : false;
|
|
1330
1360
|
const info4 = modelSupportsFanSpeed ? this.emit('info', `Current fan speed: ${AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
|
|
1331
1361
|
const info5 = vaneHorizontalDirection !== null ? this.emit('info', `Vane horizontal: ${AirConditioner.HorizontalVane[vaneHorizontalDirection] ?? vaneHorizontalDirection}`) : false;
|
|
1332
1362
|
const info6 = vaneVerticalDirection !== null ? this.emit('info', `Vane vertical: ${AirConditioner.VerticalVane[vaneVerticalDirection] ?? vaneVerticalDirection}`) : false;
|
|
1333
|
-
const info7 = swingFunction ? this.emit('info', `Air direction: ${AirConditioner.AirDirection[
|
|
1334
|
-
this.emit('info', `Temperature display unit: ${
|
|
1335
|
-
this.emit('info', `Lock physical controls: ${
|
|
1363
|
+
const info7 = swingFunction ? this.emit('info', `Air direction: ${AirConditioner.AirDirection[obj.swingMode]}`) : false;
|
|
1364
|
+
this.emit('info', `Temperature display unit: ${obj.temperatureUnit}`);
|
|
1365
|
+
this.emit('info', `Lock physical controls: ${obj.lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
1336
1366
|
};
|
|
1337
1367
|
|
|
1338
1368
|
//prepare accessory
|