homebridge-melcloud-control 3.1.18 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +4 -4
- package/package.json +1 -1
- package/src/deviceata.js +74 -40
- package/src/deviceatw.js +48 -22
- package/src/deviceerv.js +38 -33
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
16
16
|
- do not configure it manually, always using Config UI X
|
|
17
17
|
- required Homebridge v2.0.0 and above
|
|
18
18
|
|
|
19
|
+
## [3.2.0] - (11.09.2024)
|
|
20
|
+
|
|
21
|
+
## Changes
|
|
22
|
+
|
|
23
|
+
- added possibility to set previous value for buttons [#154](https://github.com/grzegorz914/homebridge-melcloud-control/issues/154)
|
|
24
|
+
- move some message to warning
|
|
25
|
+
- presets previous settings apply improvement
|
|
26
|
+
- cleanup
|
|
27
|
+
|
|
19
28
|
## [3.1.11] - (09.09.2024)
|
|
20
29
|
|
|
21
30
|
## Changes
|
package/README.md
CHANGED
|
@@ -30,9 +30,9 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
30
30
|
* All devices are detected automatically.
|
|
31
31
|
* Support multiple MELCloud accounts, buildings, floors, areas.
|
|
32
32
|
* Support temperature display units `Celsius/Fahrenheit`.
|
|
33
|
-
* Support control device `Presets`.
|
|
34
33
|
* Support assing inividual operating mode for `Heat/Cool/Auto`.
|
|
35
|
-
* Support direct
|
|
34
|
+
* Support direct `Presets` control using extra `Buttons`, switch it to `OFF` restore previous device state.
|
|
35
|
+
* Support direct `Functions` control using extra `Buttons`, switch it to `OFF` restore previous device state.
|
|
36
36
|
* Support detect all device states using extra `Sensors`.
|
|
37
37
|
* Support automations, shortcuts and Siri.
|
|
38
38
|
* Support external integrations, [RESTFul](https://github.com/grzegorz914/homebridge-melcloud-control?tab=readme-ov-file#restful-integration), [MQTT](https://github.com/grzegorz914/homebridge-melcloud-control?tab=readme-ov-file#mqtt-integration).
|
|
@@ -275,7 +275,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
275
275
|
| | `http//ip:port` | `ProhibitOperationMode` | `true`, `false` | boolean | Lock set operating mode. |
|
|
276
276
|
| | `http//ip:port` | `ProhibitPower` | `true`, `false` | boolean | Lock set power. |
|
|
277
277
|
| | `http//ip:port` | `OperationMode` | `1 - Heat`, `2 - Dry`, `3 - Cool`, `7 - Fan`, `8 - Auto` | integer | Operating mode. |
|
|
278
|
-
| | `http//ip:port` | `
|
|
278
|
+
| | `http//ip:port` | `FanSpeed` | `0 - Auto`, `1`, `2`, `3`, `4`, `5`, `6` | integer | Fan speed. |
|
|
279
279
|
| | `http//ip:port` | `VaneHorizontalDirection` | `0`, `1`, `2`, `3`, `4`, `5`, `8 - Split`, `12 - Swing` | integer | Vane H mode. |
|
|
280
280
|
| | `http//ip:port` | `VaneVerticalDirection` | `0`, `1`, `2`, `3`, `4`, `5`, `7 - Swing` | integer | Vane V mode. |
|
|
281
281
|
| | `http//ip:port` | `SetTemperature` | `0.0` | float | Room temperature. |
|
|
@@ -330,7 +330,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
330
330
|
| | `Set` | `ProhibitOperationMode` | `true`, `false` | boolean | Lock set operating mode. |
|
|
331
331
|
| | `Set` | `ProhibitPower` | `true`, `false` | boolean | Lock set power. |
|
|
332
332
|
| | `Set` | `OperationMode` | `1 - Heat`, `2 - Dry`, `3 - Cool`, `7 - Fan`, `8 - Auto` | integer | Operating mode. |
|
|
333
|
-
| | `Set` | `
|
|
333
|
+
| | `Set` | `FanSpeed` | `0 - Auto`, `1`, `2`, `3`, `4`, `5`, `6` | integer | Fan speed. |
|
|
334
334
|
| | `Set` | `VaneHorizontalDirection` | `0`, `1`, `2`, `3`, `4`, `5`, `8 - Split`, `12 - Swing` | integer | Vane H mode. |
|
|
335
335
|
| | `Set` | `VaneVerticalDirection` | `0`, `1`, `2`, `3`, `4`, `5`, `7 - Swing` | integer | Vane V mode. |
|
|
336
336
|
| | `Set` | `SetTemperature` | `0.0` | float | Room temperature. |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.2.4",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -62,9 +62,10 @@ class DeviceAta extends EventEmitter {
|
|
|
62
62
|
preset.serviceType = presetyServiceType;
|
|
63
63
|
preset.characteristicType = presetCharacteristicType;
|
|
64
64
|
preset.state = false;
|
|
65
|
+
preset.previousSettings = {};
|
|
65
66
|
this.presetsConfigured.push(preset);
|
|
66
67
|
} else {
|
|
67
|
-
const log = presetDisplayType === 0 ? false : this.emit('
|
|
68
|
+
const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}.`);
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
71
|
this.presetsConfiguredCount = this.presetsConfigured.length || 0;
|
|
@@ -83,9 +84,10 @@ class DeviceAta extends EventEmitter {
|
|
|
83
84
|
button.serviceType = buttonServiceType;
|
|
84
85
|
button.characteristicType = buttonCharacteristicType;
|
|
85
86
|
button.state = false;
|
|
87
|
+
button.previousValue = 0;
|
|
86
88
|
this.buttonsConfigured.push(button);
|
|
87
89
|
} else {
|
|
88
|
-
const log = buttonDisplayType === 0 ? false : this.emit('
|
|
90
|
+
const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
|
|
89
91
|
};
|
|
90
92
|
}
|
|
91
93
|
this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
|
|
@@ -237,7 +239,7 @@ class DeviceAta extends EventEmitter {
|
|
|
237
239
|
const fanSpeed = deviceData.Device.FanSpeed;
|
|
238
240
|
const operationMode = deviceData.Device.OperationMode;
|
|
239
241
|
const vaneHorizontalDirection = deviceData.Device.VaneHorizontalDirection;
|
|
240
|
-
const
|
|
242
|
+
const vaneVerticalDirection = deviceData.Device.VaneVerticalDirection;
|
|
241
243
|
const hideVaneControls = deviceData.Device.HideVaneControls;
|
|
242
244
|
const hideDryModeControl = deviceData.Device.HideDryModeControl;
|
|
243
245
|
const prohibitSetTemperature = deviceData.Device.ProhibitSetTemperature ?? false;
|
|
@@ -253,8 +255,8 @@ class DeviceAta extends EventEmitter {
|
|
|
253
255
|
this.accessory.setTemperature = setTemperature;
|
|
254
256
|
this.accessory.fanSpeed = fanSpeed;
|
|
255
257
|
this.accessory.vaneHorizontal = vaneHorizontalDirection;
|
|
256
|
-
this.accessory.vaneVertical =
|
|
257
|
-
this.accessory.swingMode = swingFunction && vaneHorizontalDirection === 12 &&
|
|
258
|
+
this.accessory.vaneVertical = vaneVerticalDirection;
|
|
259
|
+
this.accessory.swingMode = swingFunction && vaneHorizontalDirection === 12 && vaneVerticalDirection === 7 ? 1 : 0;
|
|
258
260
|
this.accessory.lockPhysicalControl = prohibitSetTemperature && prohibitOperationMode && prohibitPower ? 1 : 0;
|
|
259
261
|
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
260
262
|
this.accessory.useFahrenheit = this.useFahrenheit;
|
|
@@ -679,7 +681,7 @@ class DeviceAta extends EventEmitter {
|
|
|
679
681
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
|
|
680
682
|
set = await this.melCloudAta.send(deviceData);
|
|
681
683
|
break;
|
|
682
|
-
case '
|
|
684
|
+
case 'FanSpeed':
|
|
683
685
|
deviceData.Device[key] = value;
|
|
684
686
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
685
687
|
set = await this.melCloudAta.send(deviceData);
|
|
@@ -1097,7 +1099,6 @@ class DeviceAta extends EventEmitter {
|
|
|
1097
1099
|
if (this.presetsConfiguredCount > 0) {
|
|
1098
1100
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
|
|
1099
1101
|
this.presetsServices = [];
|
|
1100
|
-
const previousPresets = [];
|
|
1101
1102
|
|
|
1102
1103
|
for (let i = 0; i < this.presetsConfiguredCount; i++) {
|
|
1103
1104
|
const preset = this.presetsConfigured[i];
|
|
@@ -1124,7 +1125,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1124
1125
|
try {
|
|
1125
1126
|
switch (state) {
|
|
1126
1127
|
case true:
|
|
1127
|
-
|
|
1128
|
+
preset.previousSettings = deviceData.Device;
|
|
1128
1129
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
1129
1130
|
deviceData.Device.Power = presetData.Power;
|
|
1130
1131
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
@@ -1134,17 +1135,22 @@ class DeviceAta extends EventEmitter {
|
|
|
1134
1135
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1135
1136
|
break;
|
|
1136
1137
|
case false:
|
|
1137
|
-
deviceData.Device =
|
|
1138
|
+
deviceData.Device.SetTemperature = preset.previousSettings.SetTemperature;
|
|
1139
|
+
deviceData.Device.Power = preset.previousSettings.Power;
|
|
1140
|
+
deviceData.Device.OperationMode = preset.previousSettings.OperationMode;
|
|
1141
|
+
deviceData.Device.VaneHorizontalDirection = preset.previousSettings.VaneHorizontalDirection;
|
|
1142
|
+
deviceData.Device.VaneVerticalDirection = preset.previousSettings.VaneVerticalDirection;
|
|
1143
|
+
deviceData.Device.FanSpeed = preset.previousSettings.FanSpeed;
|
|
1144
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1138
1145
|
break;
|
|
1139
1146
|
};
|
|
1140
1147
|
|
|
1141
1148
|
await this.melCloudAta.send(deviceData);
|
|
1142
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1149
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${presetName}`);
|
|
1143
1150
|
} catch (error) {
|
|
1144
1151
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1145
1152
|
};
|
|
1146
1153
|
});
|
|
1147
|
-
previousPresets.push(deviceData.Device);
|
|
1148
1154
|
this.presetsServices.push(presetService);
|
|
1149
1155
|
accessory.addService(presetService);
|
|
1150
1156
|
};
|
|
@@ -1186,149 +1192,177 @@ class DeviceAta extends EventEmitter {
|
|
|
1186
1192
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1187
1193
|
break;
|
|
1188
1194
|
case 1: //OPERATING MODE HEAT
|
|
1195
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1189
1196
|
deviceData.Device.Power = true;
|
|
1190
|
-
deviceData.Device.OperationMode = 1;
|
|
1197
|
+
deviceData.Device.OperationMode = state ? 1 : button.previousValue;
|
|
1191
1198
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1192
1199
|
break;
|
|
1193
1200
|
case 2: //OPERATING MODE DRY
|
|
1201
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1194
1202
|
deviceData.Device.Power = true;
|
|
1195
|
-
deviceData.Device.OperationMode = 2;
|
|
1203
|
+
deviceData.Device.OperationMode = state ? 2 : button.previousValue;
|
|
1196
1204
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1197
1205
|
break
|
|
1198
1206
|
case 3: //OPERATING MODE COOL
|
|
1207
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1199
1208
|
deviceData.Device.Power = true;
|
|
1200
|
-
deviceData.Device.OperationMode = 3;
|
|
1209
|
+
deviceData.Device.OperationMode = state ? 3 : button.previousValue;
|
|
1201
1210
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1202
1211
|
break;
|
|
1203
1212
|
case 4: //OPERATING MODE FAN
|
|
1213
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1204
1214
|
deviceData.Device.Power = true;
|
|
1205
|
-
deviceData.Device.OperationMode = 7;
|
|
1215
|
+
deviceData.Device.OperationMode = state ? 7 : button.previousValue;
|
|
1206
1216
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1207
1217
|
break;
|
|
1208
1218
|
case 5: //OPERATING MODE AUTO
|
|
1219
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1209
1220
|
deviceData.Device.Power = true;
|
|
1210
|
-
deviceData.Device.OperationMode = 8;
|
|
1221
|
+
deviceData.Device.OperationMode = state ? 8 : button.previousValue;
|
|
1211
1222
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1212
1223
|
break;
|
|
1213
1224
|
case 6: //OPERATING MODE PURIFY
|
|
1225
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
|
|
1214
1226
|
deviceData.Device.Power = true;
|
|
1215
|
-
deviceData.Device.OperationMode = 9;
|
|
1227
|
+
deviceData.Device.OperationMode = state ? 9 : button.previousValue;
|
|
1216
1228
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1217
1229
|
break;
|
|
1218
1230
|
case 7: //OPERATING MODE DRY CONTROL HIDE
|
|
1219
1231
|
deviceData.Device.HideDryModeControl = state;
|
|
1220
1232
|
break;
|
|
1221
1233
|
case 10: //VANE H SWING MODE AUTO
|
|
1234
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1222
1235
|
deviceData.Device.Power = true;
|
|
1223
|
-
deviceData.Device.VaneHorizontalDirection = 0;
|
|
1236
|
+
deviceData.Device.VaneHorizontalDirection = state ? 0 : button.previousValue;
|
|
1224
1237
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1225
1238
|
break;
|
|
1226
1239
|
case 11: //VANE H SWING MODE 1
|
|
1240
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1227
1241
|
deviceData.Device.Power = true;
|
|
1228
|
-
deviceData.Device.VaneHorizontalDirection = 1;
|
|
1242
|
+
deviceData.Device.VaneHorizontalDirection = state ? 1 : button.previousValue;
|
|
1229
1243
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1230
1244
|
break;
|
|
1231
1245
|
case 12: //VANE H SWING MODE 2
|
|
1246
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1232
1247
|
deviceData.Device.Power = true;
|
|
1233
|
-
deviceData.Device.VaneHorizontalDirection = 2;
|
|
1248
|
+
deviceData.Device.VaneHorizontalDirection = state ? 2 : button.previousValue;
|
|
1234
1249
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1235
1250
|
break;
|
|
1236
1251
|
case 13: //VANE H SWING MODE 3
|
|
1252
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1237
1253
|
deviceData.Device.Power = true;
|
|
1238
|
-
deviceData.Device.VaneHorizontalDirection = 3;
|
|
1254
|
+
deviceData.Device.VaneHorizontalDirection = state ? 3 : button.previousValue;
|
|
1239
1255
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1240
1256
|
break;
|
|
1241
1257
|
case 14: //VANE H SWING MODE 4
|
|
1258
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1242
1259
|
deviceData.Device.Power = true;
|
|
1243
|
-
deviceData.Device.VaneHorizontalDirection = 4;
|
|
1260
|
+
deviceData.Device.VaneHorizontalDirection = state ? 4 : button.previousValue;
|
|
1244
1261
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1245
1262
|
break;
|
|
1246
1263
|
case 15: //VANE H SWING MODE 5
|
|
1264
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1247
1265
|
deviceData.Device.Power = true;
|
|
1248
|
-
deviceData.Device.VaneHorizontalDirection = 5;
|
|
1266
|
+
deviceData.Device.VaneHorizontalDirection = state ? 5 : button.previousValue;
|
|
1249
1267
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1250
1268
|
break;
|
|
1251
1269
|
case 16: //VANE H SWING MODE SPLIT
|
|
1270
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1252
1271
|
deviceData.Device.Power = true;
|
|
1253
|
-
deviceData.Device.VaneHorizontalDirection = 8;
|
|
1272
|
+
deviceData.Device.VaneHorizontalDirection = state ? 8 : button.previousValue;
|
|
1254
1273
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1255
1274
|
break;
|
|
1256
1275
|
case 17: //VANE H SWING MODE SWING
|
|
1276
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
|
|
1257
1277
|
deviceData.Device.Power = true;
|
|
1258
|
-
deviceData.Device.VaneHorizontalDirection = 12;
|
|
1278
|
+
deviceData.Device.VaneHorizontalDirection = state ? 12 : button.previousValue;
|
|
1259
1279
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1260
1280
|
break;
|
|
1261
1281
|
case 20: //VANE V SWING MODE AUTO
|
|
1282
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1262
1283
|
deviceData.Device.Power = true;
|
|
1263
|
-
deviceData.Device.VaneVerticalDirection = 0;
|
|
1284
|
+
deviceData.Device.VaneVerticalDirection = state ? 0 : button.previousValue;
|
|
1264
1285
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1265
1286
|
break;
|
|
1266
1287
|
case 21: //VANE V SWING MODE 1
|
|
1288
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1267
1289
|
deviceData.Device.Power = true;
|
|
1268
|
-
deviceData.Device.VaneVerticalDirection = 1;
|
|
1290
|
+
deviceData.Device.VaneVerticalDirection = state ? 1 : button.previousValue;
|
|
1269
1291
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1270
1292
|
break;
|
|
1271
1293
|
case 22: //VANE V SWING MODE 2
|
|
1294
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1272
1295
|
deviceData.Device.Power = true;
|
|
1273
|
-
deviceData.Device.VaneVerticalDirection = 2;
|
|
1296
|
+
deviceData.Device.VaneVerticalDirection = state ? 2 : button.previousValue;
|
|
1274
1297
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1275
1298
|
break;
|
|
1276
1299
|
case 23: //VANE V SWING MODE 3
|
|
1300
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1277
1301
|
deviceData.Device.Power = true;
|
|
1278
|
-
deviceData.Device.VaneVerticalDirection = 3;
|
|
1302
|
+
deviceData.Device.VaneVerticalDirection = state ? 3 : button.previousValue;
|
|
1279
1303
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1280
1304
|
break;
|
|
1281
1305
|
case 24: //VANE V SWING MODE 4
|
|
1306
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1282
1307
|
deviceData.Device.Power = true;
|
|
1283
|
-
deviceData.Device.VaneVerticalDirection = 4;
|
|
1308
|
+
deviceData.Device.VaneVerticalDirection = state ? 4 : button.previousValue;
|
|
1284
1309
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1285
1310
|
break;
|
|
1286
1311
|
case 25: //VANE V SWING MODE 5
|
|
1312
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1287
1313
|
deviceData.Device.Power = true;
|
|
1288
|
-
deviceData.Device.VaneVerticalDirection = 5;
|
|
1314
|
+
deviceData.Device.VaneVerticalDirection = state ? 5 : button.previousValue;
|
|
1289
1315
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1290
1316
|
break;
|
|
1291
1317
|
case 26: //VANE V SWING MODE SWING
|
|
1318
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
|
|
1292
1319
|
deviceData.Device.Power = true;
|
|
1293
|
-
deviceData.Device.VaneVerticalDirection = 7;
|
|
1320
|
+
deviceData.Device.VaneVerticalDirection = state ? 7 : button.previousValue;
|
|
1294
1321
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1295
1322
|
break;
|
|
1296
1323
|
case 27: //VANE H/V CONTROLS HIDE
|
|
1297
1324
|
deviceData.Device.HideVaneControls = state;
|
|
1298
1325
|
break;
|
|
1299
1326
|
case 30: //FAN SPEED MODE AUTO
|
|
1327
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1300
1328
|
deviceData.Device.Power = true;
|
|
1301
|
-
deviceData.Device.FanSpeed = 0;
|
|
1329
|
+
deviceData.Device.FanSpeed = state ? 0 : button.previousValue;
|
|
1302
1330
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1303
1331
|
break;
|
|
1304
1332
|
case 31: //FAN SPEED MODE 1
|
|
1333
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1305
1334
|
deviceData.Device.Power = true;
|
|
1306
|
-
deviceData.Device.FanSpeed = 1;
|
|
1335
|
+
deviceData.Device.FanSpeed = state ? 1 : button.previousValue;
|
|
1307
1336
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1308
1337
|
break;
|
|
1309
1338
|
case 32: //FAN SPEED MODE 2
|
|
1339
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1310
1340
|
deviceData.Device.Power = true;
|
|
1311
|
-
deviceData.Device.FanSpeed = 2;
|
|
1341
|
+
deviceData.Device.FanSpeed = state ? 2 : button.previousValue;
|
|
1312
1342
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1313
1343
|
break;
|
|
1314
1344
|
case 33: //FAN SPEED MODE 3
|
|
1345
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1315
1346
|
deviceData.Device.Power = true;
|
|
1316
|
-
deviceData.Device.FanSpeed = 3;
|
|
1347
|
+
deviceData.Device.FanSpeed = state ? 3 : button.previousValue;
|
|
1317
1348
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1318
1349
|
break;
|
|
1319
1350
|
case 34: //FAN MODE 4
|
|
1351
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1320
1352
|
deviceData.Device.Power = true;
|
|
1321
|
-
deviceData.Device.FanSpeed = 4;
|
|
1353
|
+
deviceData.Device.FanSpeed = state ? 4 : button.previousValue;
|
|
1322
1354
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1323
1355
|
break;
|
|
1324
1356
|
case 35: //FAN SPEED MODE 5
|
|
1357
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1325
1358
|
deviceData.Device.Power = true;
|
|
1326
|
-
deviceData.Device.FanSpeed = 5;
|
|
1359
|
+
deviceData.Device.FanSpeed = state ? 5 : button.previousValue;
|
|
1327
1360
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1328
1361
|
break;
|
|
1329
1362
|
case 36: //FAN SPEED MODE 6
|
|
1363
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
|
|
1330
1364
|
deviceData.Device.Power = true;
|
|
1331
|
-
deviceData.Device.FanSpeed = 6;
|
|
1365
|
+
deviceData.Device.FanSpeed = state ? 6 : button.previousValue;
|
|
1332
1366
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1333
1367
|
break;
|
|
1334
1368
|
case 37: //PHYSICAL LOCK CONTROLS
|
|
@@ -1355,7 +1389,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1355
1389
|
};
|
|
1356
1390
|
|
|
1357
1391
|
await this.melCloudAta.send(deviceData);
|
|
1358
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1392
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set: ' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
|
|
1359
1393
|
} catch (error) {
|
|
1360
1394
|
this.emit('warn', `Set button error: ${error}`);
|
|
1361
1395
|
};
|
package/src/deviceatw.js
CHANGED
|
@@ -66,9 +66,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
66
66
|
preset.serviceType = presetyServiceType;
|
|
67
67
|
preset.characteristicType = presetCharacteristicType;
|
|
68
68
|
preset.state = false;
|
|
69
|
+
preset.previousSettings = {};
|
|
69
70
|
this.presetsConfigured.push(preset);
|
|
70
71
|
} else {
|
|
71
|
-
const log = presetDisplayType === 0 ? false : this.emit('
|
|
72
|
+
const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}.`);
|
|
72
73
|
};
|
|
73
74
|
}
|
|
74
75
|
this.presetsConfiguredCount = this.presetsConfigured.length || 0;
|
|
@@ -87,9 +88,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
87
88
|
button.serviceType = buttonServiceType;
|
|
88
89
|
button.characteristicType = buttonCharacteristicType;
|
|
89
90
|
button.state = false;
|
|
91
|
+
button.previousValue = 0;
|
|
90
92
|
this.buttonsConfigured.push(button);
|
|
91
93
|
} else {
|
|
92
|
-
const log = buttonDisplayType === 0 ? false : this.emit('
|
|
94
|
+
const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
|
|
93
95
|
};
|
|
94
96
|
}
|
|
95
97
|
this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
|
|
@@ -1563,7 +1565,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
1563
1565
|
if (this.presetsConfiguredCount > 0) {
|
|
1564
1566
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
|
|
1565
1567
|
this.presetsServices = [];
|
|
1566
|
-
const previousPresets = [];
|
|
1567
1568
|
|
|
1568
1569
|
for (let i = 0; i < this.presetsConfiguredCount; i++) {
|
|
1569
1570
|
const preset = this.presetsConfigured[i];
|
|
@@ -1590,7 +1591,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1590
1591
|
try {
|
|
1591
1592
|
switch (state) {
|
|
1592
1593
|
case true:
|
|
1593
|
-
|
|
1594
|
+
preset.previousSettings = deviceData.Device;
|
|
1594
1595
|
deviceData.Device.Power = presetData.Power;
|
|
1595
1596
|
deviceData.Device.EcoHotWater = presetData.EcoHotWater;
|
|
1596
1597
|
deviceData.Device.OperationModeZone1 = presetData.OperationModeZone1;
|
|
@@ -1606,17 +1607,28 @@ class DeviceAtw extends EventEmitter {
|
|
|
1606
1607
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1607
1608
|
break;
|
|
1608
1609
|
case false:
|
|
1609
|
-
deviceData.Device =
|
|
1610
|
+
deviceData.Device.Power = preset.previousSettings.Power;
|
|
1611
|
+
deviceData.Device.EcoHotWater = preset.previousSettings.EcoHotWater;
|
|
1612
|
+
deviceData.Device.OperationModeZone1 = preset.previousSettings.OperationModeZone1;
|
|
1613
|
+
deviceData.Device.OperationModeZone2 = preset.previousSettings.OperationModeZone2;
|
|
1614
|
+
deviceData.Device.SetTankWaterTemperature = preset.previousSettings.SetTankWaterTemperature;
|
|
1615
|
+
deviceData.Device.SetTemperatureZone1 = preset.previousSettings.SetTemperatureZone1;
|
|
1616
|
+
deviceData.Device.SetTemperatureZone2 = preset.previousSettings.SetTemperatureZone2;
|
|
1617
|
+
deviceData.Device.ForcedHotWaterMode = preset.previousSettings.ForcedHotWaterMode;
|
|
1618
|
+
deviceData.Device.SetHeatFlowTemperatureZone1 = preset.previousSettings.SetHeatFlowTemperatureZone1;
|
|
1619
|
+
deviceData.Device.SetHeatFlowTemperatureZone2 = preset.previousSettings.SetHeatFlowTemperatureZone2;
|
|
1620
|
+
deviceData.Device.SetCoolFlowTemperatureZone1 = preset.previousSettings.SetCoolFlowTemperatureZone1;
|
|
1621
|
+
deviceData.Device.SetCoolFlowTemperatureZone2 = preset.previousSettings.SetCoolFlowTemperatureZone2;
|
|
1622
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1610
1623
|
break;
|
|
1611
1624
|
};
|
|
1612
1625
|
|
|
1613
1626
|
await this.melCloudAtw.send(deviceData);
|
|
1614
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1627
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${presetName}`);
|
|
1615
1628
|
} catch (error) {
|
|
1616
1629
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1617
1630
|
};
|
|
1618
1631
|
});
|
|
1619
|
-
previousPresets.push(deviceData.Device);
|
|
1620
1632
|
this.presetsServices.push(presetService);
|
|
1621
1633
|
accessory.addService(presetService);
|
|
1622
1634
|
};
|
|
@@ -1662,13 +1674,15 @@ class DeviceAtw extends EventEmitter {
|
|
|
1662
1674
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1663
1675
|
break;
|
|
1664
1676
|
case 1: //HEAT PUMP HEAT
|
|
1677
|
+
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue;
|
|
1665
1678
|
deviceData.Device.Power = true;
|
|
1666
|
-
deviceData.Device.UnitStatus = 0;
|
|
1679
|
+
deviceData.Device.UnitStatus = state ? 0 : button.previousValue;
|
|
1667
1680
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1668
1681
|
break;
|
|
1669
1682
|
case 2: //COOL
|
|
1683
|
+
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue;
|
|
1670
1684
|
deviceData.Device.Power = true;
|
|
1671
|
-
deviceData.Device.UnitStatus = 1;
|
|
1685
|
+
deviceData.Device.UnitStatus = state ? 1 : button.previousValue;
|
|
1672
1686
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1673
1687
|
break;
|
|
1674
1688
|
case 3: //HOLIDAY
|
|
@@ -1682,33 +1696,39 @@ class DeviceAtw extends EventEmitter {
|
|
|
1682
1696
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1683
1697
|
break;
|
|
1684
1698
|
case 20: //ZONE 1 HEAT THERMOSTAT
|
|
1699
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1685
1700
|
deviceData.Device.Power = true;
|
|
1686
|
-
deviceData.Device.OperationModeZone1 = 0;
|
|
1701
|
+
deviceData.Device.OperationModeZone1 = state ? 0 : button.previousValue;
|
|
1687
1702
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1688
1703
|
break;
|
|
1689
1704
|
case 21: //HEAT FLOW
|
|
1705
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1690
1706
|
deviceData.Device.Power = true;
|
|
1691
|
-
deviceData.Device.OperationModeZone1 = 1;
|
|
1707
|
+
deviceData.Device.OperationModeZone1 = state ? 1 : button.previousValue;
|
|
1692
1708
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1693
1709
|
break;
|
|
1694
1710
|
case 22: //HEAT CURVE
|
|
1711
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1695
1712
|
deviceData.Device.Power = true;
|
|
1696
|
-
deviceData.Device.OperationModeZone1 = 2;
|
|
1713
|
+
deviceData.Device.OperationModeZone1 = state ? 2 : button.previousValue;
|
|
1697
1714
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1698
1715
|
break;
|
|
1699
1716
|
case 23: //COOL THERMOSTAT
|
|
1717
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1700
1718
|
deviceData.Device.Power = true;
|
|
1701
|
-
deviceData.Device.OperationModeZone1 = 3;
|
|
1719
|
+
deviceData.Device.OperationModeZone1 = state ? 3 : button.previousValue;
|
|
1702
1720
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1703
1721
|
break;
|
|
1704
1722
|
case 24: //COOL FLOW
|
|
1723
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1705
1724
|
deviceData.Device.Power = true;
|
|
1706
|
-
deviceData.Device.OperationModeZone1 = 4;
|
|
1725
|
+
deviceData.Device.OperationModeZone1 = state ? 4 : button.previousValue;
|
|
1707
1726
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1708
1727
|
break;
|
|
1709
1728
|
case 25: //FLOOR DRY UP
|
|
1729
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
|
|
1710
1730
|
deviceData.Device.Power = true;
|
|
1711
|
-
deviceData.Device.OperationModeZone1 = 5;
|
|
1731
|
+
deviceData.Device.OperationModeZone1 = state ? 5 : button.previousValue;
|
|
1712
1732
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1713
1733
|
break;
|
|
1714
1734
|
case 30: //PHYSICAL LOCK CONTROL
|
|
@@ -1730,33 +1750,39 @@ class DeviceAtw extends EventEmitter {
|
|
|
1730
1750
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1731
1751
|
break;
|
|
1732
1752
|
case 60: //ZONE 2 HEAT THERMOSTAT
|
|
1753
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1733
1754
|
deviceData.Device.Power = true;
|
|
1734
|
-
deviceData.Device.OperationModeZone2 = 0;
|
|
1755
|
+
deviceData.Device.OperationModeZone2 = state ? 0 : button.previousValue;
|
|
1735
1756
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1736
1757
|
break;
|
|
1737
1758
|
case 61: // HEAT FLOW
|
|
1759
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1738
1760
|
deviceData.Device.Power = true;
|
|
1739
|
-
deviceData.Device.OperationModeZone2 = 1;
|
|
1761
|
+
deviceData.Device.OperationModeZone2 = state ? 1 : button.previousValue;
|
|
1740
1762
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1741
1763
|
break;
|
|
1742
1764
|
case 62: //HEAT CURVE
|
|
1765
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1743
1766
|
deviceData.Device.Power = true;
|
|
1744
|
-
deviceData.Device.OperationModeZone2 = 2;
|
|
1767
|
+
deviceData.Device.OperationModeZone2 = state ? 2 : button.previousValue;
|
|
1745
1768
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1746
1769
|
break;
|
|
1747
1770
|
case 63: //COOL THERMOSTAT
|
|
1771
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1748
1772
|
deviceData.Device.Power = true;
|
|
1749
|
-
deviceData.Device.OperationModeZone2 = 3;
|
|
1773
|
+
deviceData.Device.OperationModeZone2 = state ? 3 : button.previousValue;
|
|
1750
1774
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1751
1775
|
break;
|
|
1752
1776
|
case 64: //COOL FLOW
|
|
1777
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1753
1778
|
deviceData.Device.Power = true;
|
|
1754
|
-
deviceData.Device.OperationModeZone2 = 4;
|
|
1779
|
+
deviceData.Device.OperationModeZone2 = state ? 4 : button.previousValue;
|
|
1755
1780
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1756
1781
|
break;
|
|
1757
1782
|
case 65: //FLOOR DRY UP
|
|
1783
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
|
|
1758
1784
|
deviceData.Device.Power = true;
|
|
1759
|
-
deviceData.Device.OperationModeZone2 = 5;
|
|
1785
|
+
deviceData.Device.OperationModeZone2 = state ? 5 : button.previousValue;
|
|
1760
1786
|
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1761
1787
|
break;
|
|
1762
1788
|
case 70: //PHYSICAL LOCK CONTROL
|
|
@@ -1769,7 +1795,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1769
1795
|
};
|
|
1770
1796
|
|
|
1771
1797
|
await this.melCloudAtw.send(deviceData);
|
|
1772
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1798
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
|
|
1773
1799
|
} catch (error) {
|
|
1774
1800
|
this.emit('warn', `Set button error: ${error}`);
|
|
1775
1801
|
};
|
package/src/deviceerv.js
CHANGED
|
@@ -60,9 +60,10 @@ class DeviceErv extends EventEmitter {
|
|
|
60
60
|
preset.serviceType = presetyServiceType;
|
|
61
61
|
preset.characteristicType = presetCharacteristicType;
|
|
62
62
|
preset.state = false;
|
|
63
|
+
preset.previousSettings = {};
|
|
63
64
|
this.presetsConfigured.push(preset);
|
|
64
65
|
} else {
|
|
65
|
-
const log = presetDisplayType === 0 ? false : this.emit('
|
|
66
|
+
const log = presetDisplayType === 0 ? false : this.emit('warn', `Preset Name: ${preset ? preset : 'Missing'}.`);
|
|
66
67
|
};
|
|
67
68
|
}
|
|
68
69
|
this.presetsConfiguredCount = this.presetsConfigured.length || 0;
|
|
@@ -81,9 +82,10 @@ class DeviceErv extends EventEmitter {
|
|
|
81
82
|
button.serviceType = buttonServiceType;
|
|
82
83
|
button.characteristicType = buttonCharacteristicType;
|
|
83
84
|
button.state = false;
|
|
85
|
+
button.previousValue = 0;
|
|
84
86
|
this.buttonsConfigured.push(button);
|
|
85
87
|
} else {
|
|
86
|
-
const log = buttonDisplayType === 0 ? false : this.emit('
|
|
88
|
+
const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
|
|
87
89
|
};
|
|
88
90
|
}
|
|
89
91
|
this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
|
|
@@ -702,7 +704,7 @@ class DeviceErv extends EventEmitter {
|
|
|
702
704
|
switch (displayMode) {
|
|
703
705
|
case 1: //Heater Cooler
|
|
704
706
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare heather/cooler service`) : false;
|
|
705
|
-
this.melCloudService =
|
|
707
|
+
this.melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId}`);
|
|
706
708
|
this.melCloudService.getCharacteristic(Characteristic.Active)
|
|
707
709
|
.onGet(async () => {
|
|
708
710
|
const state = this.accessory.power;
|
|
@@ -757,6 +759,11 @@ class DeviceErv extends EventEmitter {
|
|
|
757
759
|
this.emit('warn', `Set operation mode error: ${error}`);
|
|
758
760
|
};
|
|
759
761
|
});
|
|
762
|
+
this.melCloudService.getCharacteristic(Characteristic.CurrentTemperature)
|
|
763
|
+
.onGet(async () => {
|
|
764
|
+
const value = this.accessory.roomTemperature;
|
|
765
|
+
return value;
|
|
766
|
+
});
|
|
760
767
|
this.melCloudService.getCharacteristic(Characteristic.RotationSpeed)
|
|
761
768
|
.setProps({
|
|
762
769
|
minValue: 0,
|
|
@@ -792,16 +799,6 @@ class DeviceErv extends EventEmitter {
|
|
|
792
799
|
this.emit('warn', `Set fan speed mode error: ${error}`);
|
|
793
800
|
};
|
|
794
801
|
});
|
|
795
|
-
this.melCloudService.getCharacteristic(Characteristic.CurrentTemperature)
|
|
796
|
-
.setProps({
|
|
797
|
-
minValue: -35,
|
|
798
|
-
maxValue: 150,
|
|
799
|
-
minStep: 0.5
|
|
800
|
-
})
|
|
801
|
-
.onGet(async () => {
|
|
802
|
-
const value = this.accessory.roomTemperature;
|
|
803
|
-
return value;
|
|
804
|
-
});
|
|
805
802
|
//device can heat
|
|
806
803
|
if (hasHeatOperationMode) {
|
|
807
804
|
this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
|
|
@@ -879,10 +876,11 @@ class DeviceErv extends EventEmitter {
|
|
|
879
876
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
880
877
|
};
|
|
881
878
|
});
|
|
879
|
+
accessory.addService(this.melCloudService);
|
|
882
880
|
break;
|
|
883
881
|
case 2: //Thermostat
|
|
884
882
|
const debug1 = this.enableDebugMode ? this.emit('debug', `Prepare thermostat service`) : false;
|
|
885
|
-
this.melCloudService =
|
|
883
|
+
this.melCloudService = new Service.Thermostat(serviceName, `Thermostat ${deviceId}`);
|
|
886
884
|
this.melCloudService.getCharacteristic(Characteristic.CurrentHeatingCoolingState)
|
|
887
885
|
.onGet(async () => {
|
|
888
886
|
const value = this.accessory.currentOperationMode;
|
|
@@ -930,11 +928,6 @@ class DeviceErv extends EventEmitter {
|
|
|
930
928
|
};
|
|
931
929
|
});
|
|
932
930
|
this.melCloudService.getCharacteristic(Characteristic.CurrentTemperature)
|
|
933
|
-
.setProps({
|
|
934
|
-
minValue: -35,
|
|
935
|
-
maxValue: 150,
|
|
936
|
-
minStep: 0.5
|
|
937
|
-
})
|
|
938
931
|
.onGet(async () => {
|
|
939
932
|
const value = this.accessory.roomTemperature;
|
|
940
933
|
return value;
|
|
@@ -973,6 +966,7 @@ class DeviceErv extends EventEmitter {
|
|
|
973
966
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
974
967
|
};
|
|
975
968
|
});
|
|
969
|
+
accessory.addService(this.melCloudService);
|
|
976
970
|
break;
|
|
977
971
|
};
|
|
978
972
|
|
|
@@ -1101,7 +1095,6 @@ class DeviceErv extends EventEmitter {
|
|
|
1101
1095
|
if (this.presetsConfiguredCount > 0) {
|
|
1102
1096
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
|
|
1103
1097
|
this.presetsServices = [];
|
|
1104
|
-
const previousPresets = [];
|
|
1105
1098
|
|
|
1106
1099
|
for (let i = 0; i < this.presetsConfiguredCount; i++) {
|
|
1107
1100
|
const preset = this.presetsConfigured[i];
|
|
@@ -1128,7 +1121,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1128
1121
|
try {
|
|
1129
1122
|
switch (state) {
|
|
1130
1123
|
case true:
|
|
1131
|
-
|
|
1124
|
+
preset.previousSettings = deviceData.Device;
|
|
1132
1125
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
1133
1126
|
deviceData.Device.Power = presetData.Power;
|
|
1134
1127
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
@@ -1137,18 +1130,22 @@ class DeviceErv extends EventEmitter {
|
|
|
1137
1130
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power;
|
|
1138
1131
|
break;
|
|
1139
1132
|
case false:
|
|
1140
|
-
deviceData.Device =
|
|
1133
|
+
deviceData.Device.SetTemperature = preset.previousSettings.SetTemperature;
|
|
1134
|
+
deviceData.Device.Power = preset.previousSettings.Power;
|
|
1135
|
+
deviceData.Device.OperationMode = preset.previousSettings.OperationMode;
|
|
1136
|
+
deviceData.Device.VentilationMode = preset.previousSettings.VentilationMode;
|
|
1137
|
+
deviceData.Device.SetFanSpeed = preset.previousSettings.FanSpeed;
|
|
1138
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power;
|
|
1141
1139
|
break;
|
|
1142
1140
|
};
|
|
1143
1141
|
|
|
1144
1142
|
await this.melCloudErv.send(deviceData);
|
|
1145
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1143
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${presetName}`);
|
|
1146
1144
|
} catch (error) {
|
|
1147
1145
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1148
1146
|
};
|
|
1149
1147
|
});
|
|
1150
1148
|
};
|
|
1151
|
-
previousPresets.push(deviceData.Device);
|
|
1152
1149
|
this.presetsServices.push(presetService);
|
|
1153
1150
|
accessory.addService(presetService);
|
|
1154
1151
|
};
|
|
@@ -1189,18 +1186,21 @@ class DeviceErv extends EventEmitter {
|
|
|
1189
1186
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power;
|
|
1190
1187
|
break;
|
|
1191
1188
|
case 1: //OPERATING MODE RECOVERY
|
|
1189
|
+
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
|
|
1192
1190
|
deviceData.Device.Power = true;
|
|
1193
|
-
deviceData.Device.VentilationMode = 0;
|
|
1191
|
+
deviceData.Device.VentilationMode = state ? 0 : button.previousValue;
|
|
1194
1192
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
1195
1193
|
break;
|
|
1196
1194
|
case 2: //OPERATING MODE BYPASS
|
|
1195
|
+
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
|
|
1197
1196
|
deviceData.Device.Power = true;
|
|
1198
|
-
deviceData.Device.VentilationMode = 1;
|
|
1197
|
+
deviceData.Device.VentilationMode = state ? 1 : button.previousValue;
|
|
1199
1198
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
1200
1199
|
break
|
|
1201
1200
|
case 3: //OPERATING MODE AUTO
|
|
1201
|
+
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
|
|
1202
1202
|
deviceData.Device.Power = true;
|
|
1203
|
-
deviceData.Device.VentilationMode = 2;
|
|
1203
|
+
deviceData.Device.VentilationMode = state ? 2 : button.previousValue;
|
|
1204
1204
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
1205
1205
|
break;
|
|
1206
1206
|
case 4: //NIGHT PURGE MODE
|
|
@@ -1209,28 +1209,33 @@ class DeviceErv extends EventEmitter {
|
|
|
1209
1209
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power
|
|
1210
1210
|
break;
|
|
1211
1211
|
case 10: //FAN SPEED MODE AUTO
|
|
1212
|
+
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
|
|
1212
1213
|
deviceData.Device.Power = true;
|
|
1213
|
-
deviceData.Device.SetFanSpeed = 0;
|
|
1214
|
+
deviceData.Device.SetFanSpeed = state ? 0 : button.previousValue;
|
|
1214
1215
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1215
1216
|
break;
|
|
1216
1217
|
case 11: //FAN SPEED MODE 1
|
|
1218
|
+
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
|
|
1217
1219
|
deviceData.Device.Power = true;
|
|
1218
|
-
deviceData.Device.SetFanSpeed = 1;
|
|
1220
|
+
deviceData.Device.SetFanSpeed = state ? 1 : button.previousValue;
|
|
1219
1221
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1220
1222
|
break;
|
|
1221
1223
|
case 12: //FAN SPEED MODE 2
|
|
1224
|
+
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
|
|
1222
1225
|
deviceData.Device.Power = true;
|
|
1223
|
-
deviceData.Device.SetFanSpeed = 2;
|
|
1226
|
+
deviceData.Device.SetFanSpeed = state ? 2 : button.previousValue;
|
|
1224
1227
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1225
1228
|
break;
|
|
1226
1229
|
case 13: //FAN SPEED MODE 3
|
|
1230
|
+
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
|
|
1227
1231
|
deviceData.Device.Power = true;
|
|
1228
|
-
deviceData.Device.SetFanSpeed = 3;
|
|
1232
|
+
deviceData.Device.SetFanSpeed = state ? 3 : button.previousValue;
|
|
1229
1233
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1230
1234
|
break;
|
|
1231
1235
|
case 14: //FAN MODE 4
|
|
1236
|
+
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
|
|
1232
1237
|
deviceData.Device.Power = true;
|
|
1233
|
-
deviceData.Device.SetFanSpeed = 4;
|
|
1238
|
+
deviceData.Device.SetFanSpeed = state ? 4 : button.previousValue;
|
|
1234
1239
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1235
1240
|
break;
|
|
1236
1241
|
case 15: //PHYSICAL LOCK CONTROLS
|
|
@@ -1252,7 +1257,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1252
1257
|
};
|
|
1253
1258
|
|
|
1254
1259
|
await this.melCloudErv.send(deviceData);
|
|
1255
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1260
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
|
|
1256
1261
|
} catch (error) {
|
|
1257
1262
|
this.emit('warn', `Set button error: ${error}`);
|
|
1258
1263
|
};
|