homebridge-melcloud-control 3.8.4-beta.4 → 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 +73 -71
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,
|
|
@@ -1045,7 +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
|
-
temperatureUnit: TemperatureDisplayUnits[this.
|
|
1048
|
+
temperatureUnit: TemperatureDisplayUnits[this.useFahrenheit]
|
|
1049
1049
|
};
|
|
1050
1050
|
|
|
1051
1051
|
//operating mode 0, HEAT, DRY, COOL, 4, 5, 6, FAN, AUTO, ISEE HEAT, ISEE DRY, ISEE COOL
|
|
@@ -1053,69 +1053,69 @@ class DeviceAta extends EventEmitter {
|
|
|
1053
1053
|
case 1: //Heater Cooler
|
|
1054
1054
|
switch (operationMode) {
|
|
1055
1055
|
case 1: //HEAT
|
|
1056
|
-
|
|
1057
|
-
|
|
1056
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
|
|
1057
|
+
obj.targetOperationMode = 1; //AUTO, HEAT, COOL
|
|
1058
1058
|
break;
|
|
1059
1059
|
case 2: //DRY
|
|
1060
|
-
|
|
1061
|
-
|
|
1060
|
+
obj.currentOperationMode = 1;
|
|
1061
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1062
1062
|
break;
|
|
1063
1063
|
case 3: //COOL
|
|
1064
|
-
|
|
1065
|
-
|
|
1064
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
1065
|
+
obj.targetOperationMode = 2;
|
|
1066
1066
|
break;
|
|
1067
1067
|
case 7: //FAN
|
|
1068
|
-
|
|
1069
|
-
|
|
1068
|
+
obj.currentOperationMode = 1;
|
|
1069
|
+
obj.targetOperationMode = this.autoDryFanMode === 3 ? 0 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
|
|
1070
1070
|
break;
|
|
1071
1071
|
case 8: //AUTO
|
|
1072
|
-
|
|
1073
|
-
|
|
1072
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 3 : roomTemperature < setTemperature ? 2 : 1;
|
|
1073
|
+
obj.targetOperationMode = 0;
|
|
1074
1074
|
break;
|
|
1075
1075
|
case 9: //ISEE HEAT
|
|
1076
|
-
|
|
1077
|
-
|
|
1076
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2
|
|
1077
|
+
obj.targetOperationMode = 1;
|
|
1078
1078
|
break;
|
|
1079
1079
|
case 10: //ISEE DRY
|
|
1080
|
-
|
|
1081
|
-
|
|
1080
|
+
obj.currentOperationMode = 1;
|
|
1081
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1082
1082
|
break;
|
|
1083
1083
|
case 11: //ISEE COOL;
|
|
1084
|
-
|
|
1085
|
-
|
|
1084
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
1085
|
+
obj.targetOperationMode = 2;
|
|
1086
1086
|
break;
|
|
1087
1087
|
default:
|
|
1088
1088
|
this.emit('warn', `Unknown operating mode: ${operationMode}`);
|
|
1089
1089
|
return
|
|
1090
1090
|
};
|
|
1091
1091
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
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
1096
|
|
|
1097
1097
|
//fan speed mode
|
|
1098
1098
|
if (modelSupportsFanSpeed) {
|
|
1099
1099
|
switch (numberOfFanSpeeds) {
|
|
1100
1100
|
case 2: //Fan speed mode 2
|
|
1101
|
-
|
|
1102
|
-
|
|
1101
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [3, 1, 2][fanSpeed] : [0, 1, 2][fanSpeed];
|
|
1102
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 3 : 2;
|
|
1103
1103
|
break;
|
|
1104
1104
|
case 3: //Fan speed mode 3
|
|
1105
|
-
|
|
1106
|
-
|
|
1105
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [4, 1, 2, 3][fanSpeed] : [0, 1, 2, 3][fanSpeed];
|
|
1106
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 4 : 3;
|
|
1107
1107
|
break;
|
|
1108
1108
|
case 4: //Fan speed mode 4
|
|
1109
|
-
|
|
1110
|
-
|
|
1109
|
+
obj.fanSpeed = hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][fanSpeed] : [0, 1, 2, 3, 4][fanSpeed];
|
|
1110
|
+
obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 5 : 4;
|
|
1111
1111
|
break;
|
|
1112
1112
|
case 5: //Fan speed mode 5
|
|
1113
|
-
|
|
1114
|
-
|
|
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
1115
|
break;
|
|
1116
1116
|
case 6: //Fan speed mode 6
|
|
1117
|
-
|
|
1118
|
-
|
|
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
1119
|
break;
|
|
1120
1120
|
};
|
|
1121
1121
|
};
|
|
@@ -1124,74 +1124,76 @@ class DeviceAta extends EventEmitter {
|
|
|
1124
1124
|
if (this.melCloudService) {
|
|
1125
1125
|
this.melCloudService
|
|
1126
1126
|
.updateCharacteristic(Characteristic.Active, power ? 1 : 0)
|
|
1127
|
-
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState,
|
|
1128
|
-
.updateCharacteristic(Characteristic.TargetHeaterCoolerState,
|
|
1127
|
+
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
|
|
1128
|
+
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
|
|
1129
1129
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1130
|
-
.updateCharacteristic(Characteristic.LockPhysicalControls,
|
|
1131
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1130
|
+
.updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
|
|
1131
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit)
|
|
1132
1132
|
.updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature);
|
|
1133
1133
|
const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
|
|
1134
|
-
const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed,
|
|
1135
|
-
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;
|
|
1136
1136
|
};
|
|
1137
1137
|
break;
|
|
1138
1138
|
case 2: //Thermostat
|
|
1139
1139
|
switch (operationMode) {
|
|
1140
1140
|
case 1: //HEAT
|
|
1141
|
-
|
|
1142
|
-
|
|
1141
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
|
|
1142
|
+
obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
|
|
1143
1143
|
break;
|
|
1144
1144
|
case 2: //DRY
|
|
1145
|
-
|
|
1146
|
-
|
|
1145
|
+
obj.currentOperationMode = 0;
|
|
1146
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1147
1147
|
break;
|
|
1148
1148
|
case 3: //COOL
|
|
1149
|
-
|
|
1150
|
-
|
|
1149
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
1150
|
+
obj.targetOperationMode = 2;
|
|
1151
1151
|
break;
|
|
1152
1152
|
case 7: //FAN
|
|
1153
|
-
|
|
1154
|
-
|
|
1153
|
+
obj.currentOperationMode = 0;
|
|
1154
|
+
obj.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
|
|
1155
1155
|
break;
|
|
1156
1156
|
case 8: //AUTO
|
|
1157
|
-
|
|
1158
|
-
|
|
1157
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 1 : roomTemperature > setTemperature ? 2 : 0;
|
|
1158
|
+
obj.targetOperationMode = 3;
|
|
1159
1159
|
break;
|
|
1160
1160
|
case 9: //ISEE HEAT
|
|
1161
|
-
|
|
1162
|
-
|
|
1161
|
+
obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
|
|
1162
|
+
obj.targetOperationMode = 1;
|
|
1163
1163
|
break;
|
|
1164
1164
|
case 10: //ISEE DRY
|
|
1165
|
-
|
|
1166
|
-
|
|
1165
|
+
obj.currentOperationMode = 0;
|
|
1166
|
+
obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
|
|
1167
1167
|
break;
|
|
1168
1168
|
case 11: //ISEE COOL;
|
|
1169
|
-
|
|
1170
|
-
|
|
1169
|
+
obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
1170
|
+
obj.targetOperationMode = 2;
|
|
1171
1171
|
break;
|
|
1172
1172
|
default:
|
|
1173
1173
|
this.emit('warn', `Unknown operating mode: ${operationMode}`);
|
|
1174
1174
|
break;
|
|
1175
1175
|
};
|
|
1176
1176
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
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];
|
|
1182
1182
|
|
|
1183
1183
|
//update characteristics
|
|
1184
1184
|
if (this.melCloudService) {
|
|
1185
1185
|
this.melCloudService
|
|
1186
|
-
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState,
|
|
1187
|
-
.updateCharacteristic(Characteristic.TargetHeatingCoolingState,
|
|
1186
|
+
.updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
|
|
1187
|
+
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
|
|
1188
1188
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
1189
1189
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
1190
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits,
|
|
1190
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
|
|
1191
1191
|
};
|
|
1192
1192
|
break;
|
|
1193
1193
|
};
|
|
1194
1194
|
|
|
1195
|
+
this.accessory = obj;
|
|
1196
|
+
|
|
1195
1197
|
if (this.roomTemperatureSensorService) {
|
|
1196
1198
|
this.roomTemperatureSensorService
|
|
1197
1199
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
@@ -1321,7 +1323,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1321
1323
|
button.state = power ? (fanSpeed === 6) : false;
|
|
1322
1324
|
break;
|
|
1323
1325
|
case 37: //PHYSICAL LOCK CONTROLS ALL
|
|
1324
|
-
button.state = (
|
|
1326
|
+
button.state = (obj.lockPhysicalControl === 1);
|
|
1325
1327
|
break;
|
|
1326
1328
|
case 38: //PHYSICAL LOCK CONTROLS POWER
|
|
1327
1329
|
button.state = (prohibitPower === true);
|
|
@@ -1350,17 +1352,17 @@ class DeviceAta extends EventEmitter {
|
|
|
1350
1352
|
if (!this.disableLogInfo) {
|
|
1351
1353
|
this.emit('info', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
1352
1354
|
this.emit('info', `Target operation mode: ${AirConditioner.DriveMode[operationMode]}`);
|
|
1353
|
-
this.emit('info', `Current operation mode: ${this.displayMode === 1 ? AirConditioner.CurrentOperationModeHeatherCooler[
|
|
1354
|
-
this.emit('info', `Target temperature: ${setTemperature}${
|
|
1355
|
-
this.emit('info', `Current temperature: ${roomTemperature}${
|
|
1356
|
-
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;
|
|
1357
1359
|
const info3 = modelSupportsFanSpeed ? this.emit('info', `Target fan speed: ${AirConditioner.FanSpeed[fanSpeed]}`) : false;
|
|
1358
1360
|
const info4 = modelSupportsFanSpeed ? this.emit('info', `Current fan speed: ${AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
|
|
1359
1361
|
const info5 = vaneHorizontalDirection !== null ? this.emit('info', `Vane horizontal: ${AirConditioner.HorizontalVane[vaneHorizontalDirection] ?? vaneHorizontalDirection}`) : false;
|
|
1360
1362
|
const info6 = vaneVerticalDirection !== null ? this.emit('info', `Vane vertical: ${AirConditioner.VerticalVane[vaneVerticalDirection] ?? vaneVerticalDirection}`) : false;
|
|
1361
|
-
const info7 = swingFunction ? this.emit('info', `Air direction: ${AirConditioner.AirDirection[
|
|
1362
|
-
this.emit('info', `Temperature display unit: ${
|
|
1363
|
-
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'}`);
|
|
1364
1366
|
};
|
|
1365
1367
|
|
|
1366
1368
|
//prepare accessory
|