homebridge-melcloud-control 3.8.3-beta.6 → 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 +136 -179
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.6",
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,67 +1053,64 @@ 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
  };
1133
1094
 
1134
- //add obj to mielHvac
1135
- this.mielHvac = obj;
1136
-
1137
1095
  //update characteristics
1138
1096
  if (this.melCloudService) {
1139
1097
  this.melCloudService
1140
- .updateCharacteristic(Characteristic.Active, power ? 1 : 0)
1098
+ .updateCharacteristic(Characteristic.Active, obj.power)
1141
1099
  .updateCharacteristic(Characteristic.CurrentHeaterCoolerState, obj.currentOperationMode)
1142
1100
  .updateCharacteristic(Characteristic.TargetHeaterCoolerState, obj.targetOperationMode)
1143
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1101
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1144
1102
  .updateCharacteristic(Characteristic.LockPhysicalControls, obj.lockPhysicalControl)
1145
1103
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit)
1146
- .updateCharacteristic(Characteristic.CoolingThresholdTemperature, defaultCoolingSetTemperature);
1147
- const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, defaultHeatingSetTemperature) : false;
1148
- const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, obj.fanSpeed) : false;
1149
- 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;
1150
1108
  };
1151
1109
  break;
1152
1110
  case 2: //Thermostat
1153
- switch (operationMode) {
1111
+ switch (obj.operationMode) {
1154
1112
  case 1: //HEAT
1155
- obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
1113
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 0 : 1; //OFF, HEATING, COOLING
1156
1114
  obj.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
1157
1115
  break;
1158
1116
  case 2: //DRY
@@ -1160,7 +1118,7 @@ class DeviceAta extends EventEmitter {
1160
1118
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1161
1119
  break;
1162
1120
  case 3: //COOL
1163
- obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
1121
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 0 : 2;
1164
1122
  obj.targetOperationMode = 2;
1165
1123
  break;
1166
1124
  case 7: //FAN
@@ -1168,11 +1126,11 @@ class DeviceAta extends EventEmitter {
1168
1126
  obj.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : obj.targetOperationMode ?? 0;
1169
1127
  break;
1170
1128
  case 8: //AUTO
1171
- obj.currentOperationMode = roomTemperature < setTemperature ? 1 : roomTemperature > setTemperature ? 2 : 0;
1129
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 1 : obj.roomTemperature > obj.setTemperature ? 2 : 0;
1172
1130
  obj.targetOperationMode = 3;
1173
1131
  break;
1174
1132
  case 9: //ISEE HEAT
1175
- obj.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
1133
+ obj.currentOperationMode = obj.roomTemperature > obj.setTemperature ? 0 : 1;
1176
1134
  obj.targetOperationMode = 1;
1177
1135
  break;
1178
1136
  case 10: //ISEE DRY
@@ -1180,56 +1138,55 @@ class DeviceAta extends EventEmitter {
1180
1138
  obj.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : obj.targetOperationMode ?? 0;
1181
1139
  break;
1182
1140
  case 11: //ISEE COOL;
1183
- obj.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
1141
+ obj.currentOperationMode = obj.roomTemperature < obj.setTemperature ? 0 : 2;
1184
1142
  obj.targetOperationMode = 2;
1185
1143
  break;
1186
1144
  default:
1187
- this.emit('warn', `Unknown operating mode: ${operationMode}`);
1145
+ this.emit('warn', `Unknown operating mode: ${obj.operationMode}`);
1188
1146
  break;
1189
1147
  };
1190
1148
 
1191
- obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
1192
- obj.targetOperationMode = !power ? 0 : obj.targetOperationMode;
1149
+ obj.currentOperationMode = !obj.power ? 0 : obj.currentOperationMode;
1150
+ obj.targetOperationMode = !obj.power ? 0 : obj.targetOperationMode;
1193
1151
  obj.operationModeSetPropsMinValue = 0
1194
- obj.operationModeSetPropsMaxValue = modelSupportsAuto && modelSupportsHeat ? 3 : !modelSupportsAuto && modelSupportsHeat ? 2 : modelSupportsAuto && !modelSupportsHeat ? 3 : 2;
1195
- obj.operationModeSetPropsValidValues = modelSupportsAuto && modelSupportsHeat ? [0, 1, 2, 3] : !modelSupportsAuto && modelSupportsHeat ? [0, 1, 2] : modelSupportsAuto && !modelSupportsHeat ? [0, 2, 3] : [0, 2];
1196
-
1197
- //add obj to mielHvac
1198
- this.mielHvac = obj;
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];
1199
1154
 
1200
1155
  //update characteristics
1201
1156
  if (this.melCloudServiceT) {
1202
1157
  this.melCloudServiceT
1203
1158
  .updateCharacteristic(Characteristic.CurrentHeatingCoolingState, obj.currentOperationMode)
1204
1159
  .updateCharacteristic(Characteristic.TargetHeatingCoolingState, obj.targetOperationMode)
1205
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1206
- .updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
1160
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1161
+ .updateCharacteristic(Characteristic.TargetTemperature, obj.setTemperature)
1207
1162
  .updateCharacteristic(Characteristic.TemperatureDisplayUnits, obj.useFahrenheit);
1208
1163
  };
1209
1164
  break;
1210
1165
  };
1166
+ //add obj to mielHvac
1167
+ this.mielHvac = obj;
1211
1168
 
1212
1169
  if (this.roomTemperatureSensorService) {
1213
1170
  this.roomTemperatureSensorService
1214
- .updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
1171
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.roomTemperature)
1215
1172
  };
1216
1173
 
1217
1174
  if (this.outdoorTemperatureSensorService) {
1218
1175
  this.outdoorTemperatureSensorService
1219
- .updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature)
1176
+ .updateCharacteristic(Characteristic.CurrentTemperature, obj.outdoorTemperature)
1220
1177
  };
1221
1178
 
1222
1179
  //update presets state
1223
1180
  if (this.presetsConfigured.length > 0) {
1224
1181
  this.presetsConfigured.forEach((preset, i) => {
1225
- const presetData = presetsOnServer.find(p => p.ID === preset.Id);
1182
+ const presetData = obj.presets.find(p => p.ID === preset.Id);
1226
1183
 
1227
- preset.state = presetData ? (presetData.Power === power
1228
- && presetData.SetTemperature === setTemperature
1229
- && presetData.OperationMode === operationMode
1230
- && presetData.VaneHorizontal === vaneHorizontalDirection
1231
- && presetData.VaneVertical === vaneVerticalDirection
1232
- && 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;
1233
1190
 
1234
1191
  if (this.presetsServices) {
1235
1192
  const characteristicType = preset.characteristicType;
@@ -1245,109 +1202,109 @@ class DeviceAta extends EventEmitter {
1245
1202
  const mode = button.mode;
1246
1203
  switch (mode) {
1247
1204
  case 0: //POWER ON,OFF
1248
- button.state = (power === true);
1205
+ button.state = (obj.power === true);
1249
1206
  break;
1250
1207
  case 1: //OPERATING MODE HEAT
1251
- button.state = power ? (operationMode === 1 || operationMode === 9) : false;
1208
+ button.state = obj.power ? (obj.operationMode === 1 || obj.operationMode === 9) : false;
1252
1209
  break;
1253
1210
  case 2: //OPERATING MODE DRY
1254
- button.state = power ? (operationMode === 2 || operationMode === 10) : false;
1211
+ button.state = obj.power ? (obj.operationMode === 2 || obj.operationMode === 10) : false;
1255
1212
  break
1256
1213
  case 3: //OPERATING MODE COOL
1257
- button.state = power ? (operationMode === 3 || operationMode === 11) : false;
1214
+ button.state = obj.power ? (obj.operationMode === 3 || obj.operationMode === 11) : false;
1258
1215
  break;
1259
1216
  case 4: //OPERATING MODE FAN
1260
- button.state = power ? (operationMode === 7) : false;
1217
+ button.state = obj.power ? (obj.operationMode === 7) : false;
1261
1218
  break;
1262
1219
  case 5: //OPERATING MODE AUTO
1263
- button.state = power ? (operationMode === 8) : false;
1220
+ button.state = obj.power ? (obj.operationMode === 8) : false;
1264
1221
  break;
1265
1222
  case 6: //OPERATING MODE PURIFY
1266
- button.state = power ? (operationMode === 12) : false;
1223
+ button.state = obj.power ? (obj.operationMode === 12) : false;
1267
1224
  break;
1268
1225
  case 7: //OPERATING MODE DRY CONTROL HIDE
1269
- button.state = power ? (hideDryModeControl === true) : false;
1226
+ button.state = obj.power ? (obj.hideDryModeControl === true) : false;
1270
1227
  break;
1271
1228
  case 10: //VANE H SWING MODE AUTO
1272
- button.state = power ? (vaneHorizontalDirection === 0) : false;
1229
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 0) : false;
1273
1230
  break;
1274
1231
  case 11: //VANE H SWING MODE 1
1275
- button.state = power ? (vaneHorizontalDirection === 1) : false;
1232
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 1) : false;
1276
1233
  break;
1277
1234
  case 12: //VANE H SWING MODE 2
1278
- button.state = power ? (vaneHorizontalDirection === 2) : false;
1235
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 2) : false;
1279
1236
  break;
1280
1237
  case 13: //VANE H SWING MODE 3
1281
- button.state = power ? (vaneHorizontalDirection === 3) : false;
1238
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 3) : false;
1282
1239
  break;
1283
1240
  case 14: //VANE H SWING MODE 4
1284
- button.state = power ? (vaneHorizontalDirection === 4) : false;
1241
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 4) : false;
1285
1242
  break;
1286
1243
  case 15: //VANE H SWING MODE 5
1287
- button.state = power ? (vaneHorizontalDirection === 5) : false;
1244
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 5) : false;
1288
1245
  break;
1289
1246
  case 16: //VANE H SWING MODE SPLIT
1290
- button.state = power ? (vaneHorizontalDirection === 8) : false;
1247
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 8) : false;
1291
1248
  break;
1292
1249
  case 17: //VANE H SWING MODE SWING
1293
- button.state = power ? (vaneHorizontalDirection === 12) : false;
1250
+ button.state = obj.power ? (obj.vaneHorizontalDirection === 12) : false;
1294
1251
  break;
1295
1252
  case 20: //VANE V SWING MODE AUTO
1296
- button.state = power ? (vaneVerticalDirection === 0) : false;
1253
+ button.state = obj.power ? (obj.vaneVerticalDirection === 0) : false;
1297
1254
  break;
1298
1255
  case 21: //VANE V SWING MODE 1
1299
- button.state = power ? (vaneVerticalDirection === 1) : false;
1256
+ button.state = obj.power ? (obj.vaneVerticalDirection === 1) : false;
1300
1257
  break;
1301
1258
  case 22: //VANE V SWING MODE 2
1302
- button.state = power ? (vaneVerticalDirection === 2) : false;
1259
+ button.state = obj.power ? (obj.vaneVerticalDirection === 2) : false;
1303
1260
  break;
1304
1261
  case 23: //VANE V SWING MODE 3
1305
- button.state = power ? (vaneVerticalDirection === 3) : false;
1262
+ button.state = obj.power ? (obj.vaneVerticalDirection === 3) : false;
1306
1263
  break;
1307
1264
  case 24: //VANE V SWING MODE 4
1308
- button.state = power ? (vaneVerticalDirection === 4) : false;
1265
+ button.state = obj.power ? (obj.vaneVerticalDirection === 4) : false;
1309
1266
  break;
1310
1267
  case 25: //VANE V SWING MODE 5
1311
- button.state = power ? (vaneVerticalDirection === 5) : false;
1268
+ button.state = obj.power ? (obj.vaneVerticalDirection === 5) : false;
1312
1269
  break;
1313
1270
  case 26: //VANE V SWING MODE SWING
1314
- button.state = power ? (vaneVerticalDirection === 7) : false;
1271
+ button.state = obj.power ? (obj.vaneVerticalDirection === 7) : false;
1315
1272
  break;
1316
1273
  case 27: //VANE H/V CONTROLS HIDE
1317
- button.state = power ? (hideVaneControls === true) : false;
1274
+ button.state = obj.power ? (obj.hideVaneControls === true) : false;
1318
1275
  break;
1319
1276
  case 30: //FAN SPEED MODE AUTO
1320
- button.state = power ? (fanSpeed === 0) : false;
1277
+ button.state = obj.power ? (obj.fanSpeed === 0) : false;
1321
1278
  break;
1322
1279
  case 31: //FAN SPEED MODE 1
1323
- button.state = power ? (fanSpeed === 1) : false;
1280
+ button.state = obj.power ? (obj.fanSpeed === 1) : false;
1324
1281
  break;
1325
1282
  case 32: //FAN SPEED MODE 2
1326
- button.state = power ? (fanSpeed === 2) : false;
1283
+ button.state = obj.power ? (obj.fanSpeed === 2) : false;
1327
1284
  break;
1328
1285
  case 33: //FAN SPEED MODE 3
1329
- button.state = power ? (fanSpeed === 3) : false;
1286
+ button.state = obj.power ? (obj.fanSpeed === 3) : false;
1330
1287
  break;
1331
1288
  case 34: //FAN SPEED MODE 4
1332
- button.state = power ? (fanSpeed === 4) : false;
1289
+ button.state = obj.power ? (obj.fanSpeed === 4) : false;
1333
1290
  break;
1334
1291
  case 35: //FAN SPEED MODE 5
1335
- button.state = power ? (fanSpeed === 5) : false;
1292
+ button.state = obj.power ? (obj.fanSpeed === 5) : false;
1336
1293
  break;
1337
1294
  case 36: //FAN SPEED MODE 6
1338
- button.state = power ? (fanSpeed === 6) : false;
1295
+ button.state = obj.power ? (obj.fanSpeed === 6) : false;
1339
1296
  break;
1340
1297
  case 37: //PHYSICAL LOCK CONTROLS ALL
1341
1298
  button.state = (obj.lockPhysicalControl === 1);
1342
1299
  break;
1343
1300
  case 38: //PHYSICAL LOCK CONTROLS POWER
1344
- button.state = (prohibitPower === true);
1301
+ button.state = (obj.prohibitPower === true);
1345
1302
  break;
1346
1303
  case 39: //PHYSICAL LOCK CONTROLS MODE
1347
- button.state = (prohibitOperationMode === true);
1304
+ button.state = (obj.prohibitOperationMode === true);
1348
1305
  break;
1349
1306
  case 40: //PHYSICAL LOCK CONTROLS TEMP
1350
- button.state = (prohibitSetTemperature === true);
1307
+ button.state = (obj.prohibitSetTemperature === true);
1351
1308
  break;
1352
1309
  default: //Unknown button
1353
1310
  this.emit('message', `Unknown button mode: ${mode} detected`);
@@ -1365,17 +1322,17 @@ class DeviceAta extends EventEmitter {
1365
1322
 
1366
1323
  //log current state
1367
1324
  if (!this.disableLogInfo) {
1368
- this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
1369
- 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]}`);
1370
1327
  this.emit('message', `Current operation mode: ${this.displayMode === 1 ? AirConditioner.CurrentOperationModeHeatherCooler[obj.currentOperationMode] : AirConditioner.CurrentOperationModeThermostat[obj.currentOperationMode]}`);
1371
- this.emit('message', `Target temperature: ${setTemperature}${obj.temperatureUnit}`);
1372
- this.emit('message', `Current temperature: ${roomTemperature}${obj.temperatureUnit}`);
1373
- const info = hasOutdoorTemperature && outdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${outdoorTemperature}${obj.temperatureUnit}`) : false;
1374
- const info3 = modelSupportsFanSpeed ? this.emit('message', `Target fan speed: ${AirConditioner.FanSpeed[fanSpeed]}`) : false;
1375
- const info4 = modelSupportsFanSpeed ? this.emit('message', `Current fan speed: ${AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
1376
- const info5 = vaneHorizontalDirection !== null ? this.emit('message', `Vane horizontal: ${AirConditioner.HorizontalVane[vaneHorizontalDirection] ?? vaneHorizontalDirection}`) : false;
1377
- const info6 = vaneVerticalDirection !== null ? this.emit('message', `Vane vertical: ${AirConditioner.VerticalVane[vaneVerticalDirection] ?? vaneVerticalDirection}`) : false;
1378
- 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;
1379
1336
  this.emit('message', `Temperature display unit: ${obj.temperatureUnit}`);
1380
1337
  this.emit('message', `Lock physical controls: ${obj.lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
1381
1338
  };