homebridge-melcloud-control 3.8.3-beta.5 → 3.8.3-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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/deviceata.js +135 -174
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.3-beta.5",
4
+ "version": "3.8.3-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
@@ -364,7 +364,7 @@ class DeviceAta extends EventEmitter {
364
364
  minStep: 1
365
365
  })
366
366
  .onGet(async () => {
367
- const value = mielHvac.fanSpeed; //AUTO, 1, 2, 3, 4, 5, 6, OFF
367
+ const value = mielHvac.currentFanSpeed; //AUTO, 1, 2, 3, 4, 5, 6, OFF
368
368
  return value;
369
369
  })
370
370
  .onSet(async (value) => {
@@ -969,102 +969,63 @@ class DeviceAta extends EventEmitter {
969
969
  .on('deviceState', async (deviceData) => {
970
970
  this.deviceData = deviceData;
971
971
 
972
- //presets
973
- const presetsOnServer = deviceData.Presets ?? [];
974
-
975
- //device control
976
- const hideVaneControls = deviceData.HideVaneControls ?? false;
977
- const hideDryModeControl = deviceData.HideDryModeControl ?? false;
978
-
979
- //device info
980
- const hasAutomaticFanSpeed = deviceData.Device.HasAutomaticFanSpeed ?? false;
981
- const airDirectionFunction = deviceData.Device.AirDirectionFunction ?? false;
982
- const swingFunction = deviceData.Device.SwingFunction ?? false;
983
- const hasOutdoorTemperature = deviceData.Device.HasOutdoorTemperature ?? false;
984
- const numberOfFanSpeeds = deviceData.Device.NumberOfFanSpeeds ?? 0;
985
- const modelSupportsFanSpeed = deviceData.Device.ModelSupportsFanSpeed ?? false;
986
- const modelSupportsAuto1 = deviceData.Device.ModelSupportsAuto ?? false;
987
- const modelSupportsAuto = this.autoDryFanMode >= 1 && modelSupportsAuto1
988
- const modelSupportsHeat1 = deviceData.Device.ModelSupportsHeat ?? false;
989
- const modelSupportsHeat = this.heatDryFanMode >= 1 && modelSupportsHeat1;
990
- const modelSupportsDry = deviceData.Device.ModelSupportsDry ?? false;
991
- const modelSupportsCool = this.coolDryFanMode >= 1;
992
- const minTempHeat = 10;
993
- const maxTempHeat = 31;
994
- const minTempCoolDry = 16;
995
- const maxTempCoolDry = 31;
996
-
997
- //device state
998
- const power = deviceData.Device.Power ?? false;
999
- const inStandbyMode = deviceData.Device.InStandbyMode ?? false;
1000
- const roomTemperature = deviceData.Device.RoomTemperature;
1001
- const setTemperature = deviceData.Device.SetTemperature ?? 20;
1002
- const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature ?? 20;
1003
- const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature ?? 23;
1004
- const actualFanSpeed = deviceData.Device.ActualFanSpeed;
1005
- const automaticFanSpeed = deviceData.Device.AutomaticFanSpeed;
1006
- const fanSpeed = deviceData.Device.FanSpeed ?? 0;
1007
- const operationMode = deviceData.Device.OperationMode;
1008
- const vaneVerticalDirection = deviceData.Device.VaneVerticalDirection;
1009
- const vaneVerticalSwing = deviceData.Device.VaneVerticalSwing;
1010
- const vaneHorizontalDirection = deviceData.Device.VaneHorizontalDirection;
1011
- const vaneHorizontalSwing = deviceData.Device.VaneHorizontalSwing;
1012
- const prohibitSetTemperature = deviceData.Device.ProhibitSetTemperature ?? false;
1013
- const prohibitOperationMode = deviceData.Device.ProhibitOperationMode ?? false;
1014
- const prohibitPower = deviceData.Device.ProhibitPower ?? false;
1015
- const temperatureIncrement = deviceData.Device.TemperatureIncrement ?? 1;
1016
- const outdoorTemperature = deviceData.Device.OutdoorTemperature;
1017
-
1018
972
  //accessory
1019
973
  const obj = {
1020
- presets: presetsOnServer,
1021
- hasAutomaticFanSpeed: hasAutomaticFanSpeed,
1022
- airDirectionFunction: airDirectionFunction,
1023
- swingFunction: swingFunction,
1024
- hasOutdoorTemperature: hasOutdoorTemperature,
1025
- numberOfFanSpeeds: numberOfFanSpeeds,
1026
- modelSupportsFanSpeed: modelSupportsFanSpeed,
1027
- modelSupportsAuto: modelSupportsAuto,
1028
- modelSupportsHeat: modelSupportsHeat,
1029
- modelSupportsDry: modelSupportsDry,
1030
- modelSupportsCool: modelSupportsCool,
1031
- minTempHeat: minTempHeat,
1032
- maxTempHeat: maxTempHeat,
1033
- minTempCoolDry: minTempCoolDry,
1034
- maxTempCoolDry: maxTempCoolDry,
1035
- power: power ? 1 : 0,
1036
- inStandbyMode: inStandbyMode,
1037
- operationMode: operationMode,
974
+ presets: deviceData.Presets ?? [],
975
+ hasAutomaticFanSpeed: deviceData.Device.HasAutomaticFanSpeed ?? false,
976
+ airDirectionFunction: deviceData.Device.AirDirectionFunction ?? false,
977
+ swingFunction: deviceData.Device.SwingFunction ?? false,
978
+ hasOutdoorTemperature: deviceData.Device.HasOutdoorTemperature ?? false,
979
+ numberOfFanSpeeds: deviceData.Device.NumberOfFanSpeeds ?? 0,
980
+ modelSupportsFanSpeed: deviceData.Device.ModelSupportsFanSpeed ?? false,
981
+ modelSupportsAuto: this.autoDryFanMode >= 1 && deviceData.Device.ModelSupportsAuto,
982
+ modelSupportsHeat: this.heatDryFanMode >= 1 && deviceData.Device.ModelSupportsHeat,
983
+ modelSupportsDry: deviceData.Device.ModelSupportsDry ?? false,
984
+ modelSupportsCool: this.coolDryFanMode >= 1,
985
+ minTempHeat: 10,
986
+ maxTempHeat: 31,
987
+ minTempCoolDry: 16,
988
+ maxTempCoolDry: 31,
989
+ power: deviceData.Device.Power ?? false,
990
+ inStandbyMode: deviceData.Device.InStandbyMode ?? false,
991
+ operationMode: deviceData.Device.OperationMode,
1038
992
  currentOperationMode: 0,
1039
993
  targetOperationMode: 0,
1040
- roomTemperature: roomTemperature,
1041
- outdoorTemperature: outdoorTemperature,
1042
- setTemperature: setTemperature,
1043
- defaultHeatingSetTemperature: defaultHeatingSetTemperature,
1044
- defaultCoolingSetTemperature: defaultCoolingSetTemperature,
1045
- fanSpeed: 0,
1046
- actualFanSpeed: actualFanSpeed,
1047
- automaticFanSpeed: automaticFanSpeed,
1048
- vaneVerticalSwing: vaneVerticalSwing,
1049
- vaneHorizontalSwing: vaneHorizontalSwing,
1050
- swingMode: swingFunction && vaneHorizontalDirection === 12 && vaneVerticalDirection === 7 ? 1 : 0,
1051
- lockPhysicalControl: prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0,
994
+ roomTemperature: deviceData.Device.RoomTemperature,
995
+ outdoorTemperature: deviceData.Device.OutdoorTemperature,
996
+ setTemperature: deviceData.Device.SetTemperature ?? 20,
997
+ defaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 20,
998
+ defaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
999
+ fanSpeed: deviceData.Device.FanSpeed ?? 0,
1000
+ currentFanSpeed: 0,
1001
+ actualFanSpeed: deviceData.Device.ActualFanSpeed,
1002
+ automaticFanSpeed: deviceData.Device.AutomaticFanSpeed,
1003
+ vaneVerticalSwing: deviceData.Device.VaneVerticalSwing,
1004
+ vaneVerticalDirection: deviceData.Device.VaneVerticalDirection,
1005
+ vaneHorizontalSwing: deviceData.Device.VaneHorizontalSwing,
1006
+ vaneHorizontalDirection: deviceData.Device.VaneHorizontalDirection,
1007
+ swingMode: deviceData.Device.SwingFunction && deviceData.Device.VaneHorizontalDirection === 12 && deviceData.Device.VaneVerticalDirection === 7 ? 1 : 0,
1008
+ lockPhysicalControl: deviceData.Device.ProhibitSetTemperature && deviceData.Device.ProhibitOperationMode && deviceData.Device.ProhibitPower ? 1 : 0,
1052
1009
  useFahrenheit: this.useFahrenheit,
1053
1010
  temperatureUnit: this.useFahrenheit,
1054
- temperatureIncrement: temperatureIncrement,
1011
+ temperatureIncrement: deviceData.Device.TemperatureIncrement ?? 1,
1012
+ hideVaneControls: deviceData.HideVaneControls ?? false,
1013
+ hideDryModeControl: deviceData.HideDryModeControl ?? false,
1014
+ prohibitSetTemperature: deviceData.Device.ProhibitSetTemperature ?? false,
1015
+ prohibitOperationMode: deviceData.Device.ProhibitOperationMode ?? false,
1016
+ prohibitPower: deviceData.Device.ProhibitPower ?? false,
1055
1017
  operationModeSetPropsMinValue: 0,
1056
1018
  operationModeSetPropsMaxValue: 3,
1057
1019
  operationModeSetPropsValidValues: [0, 1, 2],
1058
1020
  fanSpeedSetPropsMaxValue: 6
1059
-
1060
1021
  };
1061
1022
 
1062
1023
  //operating mode 0, HEAT, DRY, COOL, 4, 5, 6, FAN, AUTO, ISEE HEAT, ISEE DRY, ISEE COOL
1063
1024
  switch (this.displayMode) {
1064
1025
  case 1: //Heater Cooler
1065
- switch (operationMode) {
1026
+ switch (obj.operationMode) {
1066
1027
  case 1: //HEAT
1067
- obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
1028
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
1068
1029
  obj.targetOperationMode = 1; //AUTO, HEAT, COOL
1069
1030
  break;
1070
1031
  case 2: //DRY
@@ -1072,7 +1033,7 @@ class DeviceAta extends EventEmitter {
1072
1033
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1073
1034
  break;
1074
1035
  case 3: //COOL
1075
- obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
1036
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 1 : 3;
1076
1037
  obj.targetOperationMode = 2;
1077
1038
  break;
1078
1039
  case 7: //FAN
@@ -1080,11 +1041,11 @@ class DeviceAta extends EventEmitter {
1080
1041
  obj.targetOperationMode = this.autoDryFanMode === 3 ? 0 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
1081
1042
  break;
1082
1043
  case 8: //AUTO
1083
- obj.currentOperationMode = roomTemperature > setTemperature ? 3 : roomTemperature < setTemperature ? 2 : 1;
1044
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 3 : obj.roomTemperature < obj.setTemperature ? 2 : 1;
1084
1045
  obj.targetOperationMode = 0;
1085
1046
  break;
1086
1047
  case 9: //ISEE HEAT
1087
- obj.currentOperationMode = roomTemperature > setTemperature ? 1 : 2
1048
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 1 : 2
1088
1049
  obj.targetOperationMode = 1;
1089
1050
  break;
1090
1051
  case 10: //ISEE DRY
@@ -1092,41 +1053,41 @@ class DeviceAta extends EventEmitter {
1092
1053
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1093
1054
  break;
1094
1055
  case 11: //ISEE COOL;
1095
- obj.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
1056
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 1 : 3;
1096
1057
  obj.targetOperationMode = 2;
1097
1058
  break;
1098
1059
  default:
1099
- this.emit('warn', `Unknown operating mode: ${operationMode}`);
1060
+ this.emit('warn', `Unknown operating mode: ${obj.operationMode}`);
1100
1061
  return
1101
1062
  };
1102
1063
 
1103
- obj.currentOperationMode = !power ? 0 : inStandbyMode ? 1 : obj.currentOperationMode;
1104
- obj.operationModeSetPropsMinValue = modelSupportsAuto && modelSupportsHeat ? 0 : !modelSupportsAuto && modelSupportsHeat ? 1 : modelSupportsAuto && !modelSupportsHeat ? 0 : 2;
1064
+ obj.currentOperationMode = !obj.power ? 0 : obj.inStandbyMode ? 1 : obj.currentOperationMode;
1065
+ obj.operationModeSetPropsMinValue = obj.modelSupportsAuto && obj.modelSupportsHeat ? 0 : !obj.modelSupportsAuto && obj.modelSupportsHeat ? 1 : obj.modelSupportsAuto && !obj.modelSupportsHeat ? 0 : 2;
1105
1066
  obj.operationModeSetPropsMaxValue = 2
1106
- obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : !modelSupportsAuto && modelSupportsHeat ? [1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2] : [2];
1067
+ obj.operationModeSetPropsValidValues = obj.modelSupportsAuto && obj.modelSupportsHeat ? [0, 1, 2] : !obj.modelSupportsAuto && obj.modelSupportsHeat ? [1, 2] : obj.modelSupportsAuto && !obj.modelSupportsHeat ? [0, 2] : [2];
1107
1068
 
1108
1069
  //fan speed mode
1109
- if (modelSupportsFanSpeed) {
1110
- switch (numberOfFanSpeeds) {
1070
+ if (obj.modelSupportsFanSpeed) {
1071
+ switch (obj.numberOfFanSpeeds) {
1111
1072
  case 2: //Fan speed mode 2
1112
- obj.fanSpeed = hasAutomaticFanSpeed ? [3, 1, 2][fanSpeed] : [0, 1, 2][fanSpeed];
1113
- obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 3 : 2;
1073
+ obj.currentFanSpeed = obj.hasAutomaticFanSpeed ? [3, 1, 2][obj.fanSpeed] : [0, 1, 2][obj.fanSpeed];
1074
+ obj.fanSpeedSetPropsMaxValue = obj.hasAutomaticFanSpeed ? 3 : 2;
1114
1075
  break;
1115
1076
  case 3: //Fan speed mode 3
1116
- obj.fanSpeed = hasAutomaticFanSpeed ? [4, 1, 2, 3][fanSpeed] : [0, 1, 2, 3][fanSpeed];
1117
- obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 4 : 3;
1077
+ obj.currentFanSpeed = obj.hasAutomaticFanSpeed ? [4, 1, 2, 3][obj.fanSpeed] : [0, 1, 2, 3][obj.fanSpeed];
1078
+ obj.fanSpeedSetPropsMaxValue = obj.hasAutomaticFanSpeed ? 4 : 3;
1118
1079
  break;
1119
1080
  case 4: //Fan speed mode 4
1120
- obj.fanSpeed = hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][fanSpeed] : [0, 1, 2, 3, 4][fanSpeed];
1121
- obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 5 : 4;
1081
+ obj.currentFanSpeed = obj.hasAutomaticFanSpeed ? [5, 1, 2, 3, 4][obj.fanSpeed] : [0, 1, 2, 3, 4][obj.fanSpeed];
1082
+ obj.fanSpeedSetPropsMaxValue = obj.hasAutomaticFanSpeed ? 5 : 4;
1122
1083
  break;
1123
1084
  case 5: //Fan speed mode 5
1124
- obj.fanSpeed = hasAutomaticFanSpeed ? [6, 1, 2, 3, 4, 5][fanSpeed] : [0, 1, 2, 3, 4, 5][fanSpeed];
1125
- obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 6 : 5;
1085
+ obj.currentFanSpeed = obj.hasAutomaticFanSpeed ? [6, 1, 2, 3, 4, 5][obj.fanSpeed] : [0, 1, 2, 3, 4, 5][obj.fanSpeed];
1086
+ obj.fanSpeedSetPropsMaxValue = obj.hasAutomaticFanSpeed ? 6 : 5;
1126
1087
  break;
1127
1088
  case 6: //Fan speed mode 6
1128
- obj.fanSpeed = hasAutomaticFanSpeed ? [7, 1, 2, 3, 4, 5, 6][fanSpeed] : [0, 1, 2, 3, 4, 5, 6][fanSpeed];
1129
- obj.fanSpeedSetPropsMaxValue = hasAutomaticFanSpeed ? 7 : 6;
1089
+ obj.currentFanSpeed = obj.hasAutomaticFanSpeed ? [7, 1, 2, 3, 4, 5, 6][obj.fanSpeed] : [0, 1, 2, 3, 4, 5, 6][obj.fanSpeed];
1090
+ obj.fanSpeedSetPropsMaxValue = obj.hasAutomaticFanSpeed ? 7 : 6;
1130
1091
  break;
1131
1092
  };
1132
1093
  };
@@ -1134,22 +1095,22 @@ class DeviceAta extends EventEmitter {
1134
1095
  //update characteristics
1135
1096
  if (this.melCloudService) {
1136
1097
  this.melCloudService
1137
- .updateCharacteristic(Characteristic.Active, power ? 1 : 0)
1098
+ .updateCharacteristic(Characteristic.Active, obj.power)
1138
1099
  .updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
1139
1100
  .updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
1140
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1101
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1141
1102
  .updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
1142
1103
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit)
1143
- .updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature);
1144
- const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
1145
- const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed) : false;
1146
- const updateSM = swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode, obj.swingMode) : false;
1104
+ .updateCharacteristic(Characteristic.CoolingThresholdTemperature, obj.defaultCoolingSetTemperature);
1105
+ const updateDefHeat = obj.modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, obj.defaultHeatingSetTemperature) : false;
1106
+ const updateRS = obj.modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed) : false;
1107
+ const updateSM = obj.swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode, obj.swingMode) : false;
1147
1108
  };
1148
1109
  break;
1149
1110
  case 2: //Thermostat
1150
- switch (operationMode) {
1111
+ switch (obj.operationMode) {
1151
1112
  case 1: //HEAT
1152
- obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
1113
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 0 : 1; //OFF, HEATING, COOLING
1153
1114
  obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
1154
1115
  break;
1155
1116
  case 2: //DRY
@@ -1157,7 +1118,7 @@ class DeviceAta extends EventEmitter {
1157
1118
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1158
1119
  break;
1159
1120
  case 3: //COOL
1160
- obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
1121
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 0 : 2;
1161
1122
  obj.targetOperationMode = 2;
1162
1123
  break;
1163
1124
  case 7: //FAN
@@ -1165,11 +1126,11 @@ class DeviceAta extends EventEmitter {
1165
1126
  obj.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
1166
1127
  break;
1167
1128
  case 8: //AUTO
1168
- obj.currentOperationMode = roomTemperature < setTemperature ? 1 : roomTemperature > setTemperature ? 2 : 0;
1129
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 1 : obj.roomTemperature > obj.setTemperature ? 2 : 0;
1169
1130
  obj.targetOperationMode = 3;
1170
1131
  break;
1171
1132
  case 9: //ISEE HEAT
1172
- obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
1133
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 0 : 1;
1173
1134
  obj.targetOperationMode = 1;
1174
1135
  break;
1175
1136
  case 10: //ISEE DRY
@@ -1177,27 +1138,27 @@ class DeviceAta extends EventEmitter {
1177
1138
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1178
1139
  break;
1179
1140
  case 11: //ISEE COOL;
1180
- obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
1141
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 0 : 2;
1181
1142
  obj.targetOperationMode = 2;
1182
1143
  break;
1183
1144
  default:
1184
- this.emit('warn', `Unknown operating mode: ${operationMode}`);
1145
+ this.emit('warn', `Unknown operating mode: ${obj.operationMode}`);
1185
1146
  break;
1186
1147
  };
1187
1148
 
1188
- obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
1189
- obj.targetOperationMode = !power ? 0 : obj.targetOperationMode;
1149
+ obj.currentOperationMode = !obj.power ? 0 : obj.currentOperationMode;
1150
+ obj.targetOperationMode = !obj.power ? 0 : obj.targetOperationMode;
1190
1151
  obj.operationModeSetPropsMinValue = 0
1191
- obj.operationModeSetPropsMaxValue = modelSupportsAuto && modelSupportsHeat ? 3 : !modelSupportsAuto && modelSupportsHeat ? 2 : modelSupportsAuto && !modelSupportsHeat ? 3 : 2;
1192
- obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2, 3] : !modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2, 3] : [0, 2];
1152
+ obj.operationModeSetPropsMaxValue = obj.modelSupportsAuto && obj.modelSupportsHeat ? 3 : !obj.modelSupportsAuto && obj.modelSupportsHeat ? 2 : obj.modelSupportsAuto && !obj.modelSupportsHeat ? 3 : 2;
1153
+ obj.operationModeSetPropsValidValues = obj.modelSupportsAuto && obj.modelSupportsHeat ? [0, 1, 2, 3] : !obj.modelSupportsAuto && obj.modelSupportsHeat ? [0, 1, 2] : obj.modelSupportsAuto && !obj.modelSupportsHeat ? [0, 2, 3] : [0, 2];
1193
1154
 
1194
1155
  //update characteristics
1195
1156
  if (this.melCloudServiceT) {
1196
- this.melCloudService
1157
+ this.melCloudServiceT
1197
1158
  .updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
1198
1159
  .updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
1199
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1200
- .updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
1160
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1161
+ .updateCharacteristic(Characteristic.TargetTemperature, obj.setTemperature)
1201
1162
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
1202
1163
  };
1203
1164
  break;
@@ -1207,25 +1168,25 @@ class DeviceAta extends EventEmitter {
1207
1168
 
1208
1169
  if (this.roomTemperatureSensorService) {
1209
1170
  this.roomTemperatureSensorService
1210
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1171
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1211
1172
  };
1212
1173
 
1213
1174
  if (this.outdoorTemperatureSensorService) {
1214
1175
  this.outdoorTemperatureSensorService
1215
- .updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature)
1176
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.outdoorTemperature)
1216
1177
  };
1217
1178
 
1218
1179
  //update presets state
1219
1180
  if (this.presetsConfigured.length > 0) {
1220
1181
  this.presetsConfigured.forEach((preset, i) => {
1221
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1182
+ const presetData = obj.presets.find(p => p.ID === preset.Id);
1222
1183
 
1223
- preset.state = presetData ? (presetData.Power === power
1224
- && presetData.SetTemperature === setTemperature
1225
- && presetData.OperationMode === operationMode
1226
- && presetData.VaneHorizontal === vaneHorizontalDirection
1227
- && presetData.VaneVertical === vaneVerticalDirection
1228
- && presetData.FanSpeed === fanSpeed) : false;
1184
+ preset.state = presetData ? (presetData.Power === obj.power
1185
+ && presetData.SetTemperature === obj.setTemperature
1186
+ && presetData.OperationMode === obj.operationMode
1187
+ && presetData.VaneHorizontal === obj.vaneHorizontalDirection
1188
+ && presetData.VaneVertical === obj.vaneVerticalDirection
1189
+ && presetData.FanSpeed === obj.fanSpeed) : false;
1229
1190
 
1230
1191
  if (this.presetsServices) {
1231
1192
  const characteristicType = preset.characteristicType;
@@ -1241,109 +1202,109 @@ class DeviceAta extends EventEmitter {
1241
1202
  const mode = button.mode;
1242
1203
  switch (mode) {
1243
1204
  case 0: //POWER ON,OFF
1244
- button.state = (power === true);
1205
+ button.state = (obj.power === true);
1245
1206
  break;
1246
1207
  case 1: //OPERATING MODE HEAT
1247
- button.state = power ? (operationMode === 1 || operationMode === 9) : false;
1208
+ button.state = obj.power ? (obj.operationMode === 1 || obj.operationMode === 9) : false;
1248
1209
  break;
1249
1210
  case 2: //OPERATING MODE DRY
1250
- button.state = power ? (operationMode === 2 || operationMode === 10) : false;
1211
+ button.state = obj.power ? (obj.operationMode === 2 || obj.operationMode === 10) : false;
1251
1212
  break
1252
1213
  case 3: //OPERATING MODE COOL
1253
- button.state = power ? (operationMode === 3 || operationMode === 11) : false;
1214
+ button.state = obj.power ? (obj.operationMode === 3 || obj.operationMode === 11) : false;
1254
1215
  break;
1255
1216
  case 4: //OPERATING MODE FAN
1256
- button.state = power ? (operationMode === 7) : false;
1217
+ button.state = obj.power ? (obj.operationMode === 7) : false;
1257
1218
  break;
1258
1219
  case 5: //OPERATING MODE AUTO
1259
- button.state = power ? (operationMode === 8) : false;
1220
+ button.state = obj.power ? (obj.operationMode === 8) : false;
1260
1221
  break;
1261
1222
  case 6: //OPERATING MODE PURIFY
1262
- button.state = power ? (operationMode === 12) : false;
1223
+ button.state = obj.power ? (obj.operationMode === 12) : false;
1263
1224
  break;
1264
1225
  case 7: //OPERATING MODE DRY CONTROL HIDE
1265
- button.state = power ? (hideDryModeControl === true) : false;
1226
+ button.state = obj.power ? (obj.hideDryModeControl === true) : false;
1266
1227
  break;
1267
1228
  case 10: //VANE H SWING MODE AUTO
1268
- button.state = power ? (vaneHorizontalDirection === 0) : false;
1229
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 0) : false;
1269
1230
  break;
1270
1231
  case 11: //VANE H SWING MODE 1
1271
- button.state = power ? (vaneHorizontalDirection === 1) : false;
1232
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 1) : false;
1272
1233
  break;
1273
1234
  case 12: //VANE H SWING MODE 2
1274
- button.state = power ? (vaneHorizontalDirection === 2) : false;
1235
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 2) : false;
1275
1236
  break;
1276
1237
  case 13: //VANE H SWING MODE 3
1277
- button.state = power ? (vaneHorizontalDirection === 3) : false;
1238
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 3) : false;
1278
1239
  break;
1279
1240
  case 14: //VANE H SWING MODE 4
1280
- button.state = power ? (vaneHorizontalDirection === 4) : false;
1241
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 4) : false;
1281
1242
  break;
1282
1243
  case 15: //VANE H SWING MODE 5
1283
- button.state = power ? (vaneHorizontalDirection === 5) : false;
1244
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 5) : false;
1284
1245
  break;
1285
1246
  case 16: //VANE H SWING MODE SPLIT
1286
- button.state = power ? (vaneHorizontalDirection === 8) : false;
1247
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 8) : false;
1287
1248
  break;
1288
1249
  case 17: //VANE H SWING MODE SWING
1289
- button.state = power ? (vaneHorizontalDirection === 12) : false;
1250
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 12) : false;
1290
1251
  break;
1291
1252
  case 20: //VANE V SWING MODE AUTO
1292
- button.state = power ? (vaneVerticalDirection === 0) : false;
1253
+ button.state = obj.power ? (obj.vaneVerticalDirection === 0) : false;
1293
1254
  break;
1294
1255
  case 21: //VANE V SWING MODE 1
1295
- button.state = power ? (vaneVerticalDirection === 1) : false;
1256
+ button.state = obj.power ? (obj.vaneVerticalDirection === 1) : false;
1296
1257
  break;
1297
1258
  case 22: //VANE V SWING MODE 2
1298
- button.state = power ? (vaneVerticalDirection === 2) : false;
1259
+ button.state = obj.power ? (obj.vaneVerticalDirection === 2) : false;
1299
1260
  break;
1300
1261
  case 23: //VANE V SWING MODE 3
1301
- button.state = power ? (vaneVerticalDirection === 3) : false;
1262
+ button.state = obj.power ? (obj.vaneVerticalDirection === 3) : false;
1302
1263
  break;
1303
1264
  case 24: //VANE V SWING MODE 4
1304
- button.state = power ? (vaneVerticalDirection === 4) : false;
1265
+ button.state = obj.power ? (obj.vaneVerticalDirection === 4) : false;
1305
1266
  break;
1306
1267
  case 25: //VANE V SWING MODE 5
1307
- button.state = power ? (vaneVerticalDirection === 5) : false;
1268
+ button.state = obj.power ? (obj.vaneVerticalDirection === 5) : false;
1308
1269
  break;
1309
1270
  case 26: //VANE V SWING MODE SWING
1310
- button.state = power ? (vaneVerticalDirection === 7) : false;
1271
+ button.state = obj.power ? (obj.vaneVerticalDirection === 7) : false;
1311
1272
  break;
1312
1273
  case 27: //VANE H/V CONTROLS HIDE
1313
- button.state = power ? (hideVaneControls === true) : false;
1274
+ button.state = obj.power ? (obj.hideVaneControls === true) : false;
1314
1275
  break;
1315
1276
  case 30: //FAN SPEED MODE AUTO
1316
- button.state = power ? (fanSpeed === 0) : false;
1277
+ button.state = obj.power ? (obj.fanSpeed === 0) : false;
1317
1278
  break;
1318
1279
  case 31: //FAN SPEED MODE 1
1319
- button.state = power ? (fanSpeed === 1) : false;
1280
+ button.state = obj.power ? (obj.fanSpeed === 1) : false;
1320
1281
  break;
1321
1282
  case 32: //FAN SPEED MODE 2
1322
- button.state = power ? (fanSpeed === 2) : false;
1283
+ button.state = obj.power ? (obj.fanSpeed === 2) : false;
1323
1284
  break;
1324
1285
  case 33: //FAN SPEED MODE 3
1325
- button.state = power ? (fanSpeed === 3) : false;
1286
+ button.state = obj.power ? (obj.fanSpeed === 3) : false;
1326
1287
  break;
1327
1288
  case 34: //FAN SPEED MODE 4
1328
- button.state = power ? (fanSpeed === 4) : false;
1289
+ button.state = obj.power ? (obj.fanSpeed === 4) : false;
1329
1290
  break;
1330
1291
  case 35: //FAN SPEED MODE 5
1331
- button.state = power ? (fanSpeed === 5) : false;
1292
+ button.state = obj.power ? (obj.fanSpeed === 5) : false;
1332
1293
  break;
1333
1294
  case 36: //FAN SPEED MODE 6
1334
- button.state = power ? (fanSpeed === 6) : false;
1295
+ button.state = obj.power ? (obj.fanSpeed === 6) : false;
1335
1296
  break;
1336
1297
  case 37: //PHYSICAL LOCK CONTROLS ALL
1337
1298
  button.state = (obj.lockPhysicalControl === 1);
1338
1299
  break;
1339
1300
  case 38: //PHYSICAL LOCK CONTROLS POWER
1340
- button.state = (prohibitPower === true);
1301
+ button.state = (obj.prohibitPower === true);
1341
1302
  break;
1342
1303
  case 39: //PHYSICAL LOCK CONTROLS MODE
1343
- button.state = (prohibitOperationMode === true);
1304
+ button.state = (obj.prohibitOperationMode === true);
1344
1305
  break;
1345
1306
  case 40: //PHYSICAL LOCK CONTROLS TEMP
1346
- button.state = (prohibitSetTemperature === true);
1307
+ button.state = (obj.prohibitSetTemperature === true);
1347
1308
  break;
1348
1309
  default: //Unknown button
1349
1310
  this.emit('message', `Unknown button mode: ${mode} detected`);
@@ -1361,17 +1322,17 @@ class DeviceAta extends EventEmitter {
1361
1322
 
1362
1323
  //log current state
1363
1324
  if (!this.disableLogInfo) {
1364
- this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
1365
- this.emit('message', `Target operation mode: ${AirConditioner.DriveMode[operationMode]}`);
1325
+ this.emit('message', `Power: ${obj.power ? 'ON' : 'OFF'}`);
1326
+ this.emit('message', `Target operation mode: ${AirConditioner.DriveMode[obj.operationMode]}`);
1366
1327
  this.emit('message', `Current operation mode: ${this.displayMode === 1 ? AirConditioner.CurrentOperationModeHeatherCooler[obj.currentOperationMode] : AirConditioner.CurrentOperationModeThermostat[obj.currentOperationMode]}`);
1367
- this.emit('message', `Target temperature: ${setTemperature}${obj.temperatureUnit}`);
1368
- this.emit('message', `Current temperature: ${roomTemperature}${obj.temperatureUnit}`);
1369
- const info = hasOutdoorTemperature && outdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${outdoorTemperature}${obj.temperatureUnit}`) : false;
1370
- const info3 = modelSupportsFanSpeed ? this.emit('message', `Target fan speed: ${AirConditioner.FanSpeed[fanSpeed]}`) : false;
1371
- const info4 = modelSupportsFanSpeed ? this.emit('message', `Current fan speed: ${AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
1372
- const info5 = vaneHorizontalDirection !== null ? this.emit('message', `Vane horizontal: ${AirConditioner.HorizontalVane[vaneHorizontalDirection] ?? vaneHorizontalDirection}`) : false;
1373
- const info6 = vaneVerticalDirection !== null ? this.emit('message', `Vane vertical: ${AirConditioner.VerticalVane[vaneVerticalDirection] ?? vaneVerticalDirection}`) : false;
1374
- const info7 = swingFunction ? this.emit('message', `Air direction: ${AirConditioner.AirDirection[obj.swingMode]}`) : false;
1328
+ this.emit('message', `Target temperature: ${obj.setTemperature}${obj.temperatureUnit}`);
1329
+ this.emit('message', `Current temperature: ${obj.roomTemperature}${obj.temperatureUnit}`);
1330
+ const info = obj.hasOutdoorTemperature && obj.outdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${obj.outdoorTemperature}${obj.temperatureUnit}`) : false;
1331
+ const info3 = obj.modelSupportsFanSpeed ? this.emit('message', `Target fan speed: ${AirConditioner.FanSpeed[obj.fanSpeed]}`) : false;
1332
+ const info4 = obj.modelSupportsFanSpeed ? this.emit('message', `Current fan speed: ${AirConditioner.FanSpeed[obj.actualFanSpeed]}`) : false;
1333
+ const info5 = obj.vaneHorizontalDirection !== null ? this.emit('message', `Vane horizontal: ${AirConditioner.HorizontalVane[obj.vaneHorizontalDirection] ?? obj.vaneHorizontalDirection}`) : false;
1334
+ const info6 = obj.vaneVerticalDirection !== null ? this.emit('message', `Vane vertical: ${AirConditioner.VerticalVane[obj.vaneVerticalDirection] ?? obj.vaneVerticalDirection}`) : false;
1335
+ const info7 = obj.swingFunction ? this.emit('message', `Air direction: ${AirConditioner.AirDirection[obj.swingMode]}`) : false;
1375
1336
  this.emit('message', `Temperature display unit: ${obj.temperatureUnit}`);
1376
1337
  this.emit('message', `Lock physical controls: ${obj.lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
1377
1338
  };