homebridge-melcloud-control 3.1.18 → 3.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +4 -4
- package/package.json +1 -1
- package/src/deviceata.js +90 -55
- package/src/deviceatw.js +49 -23
- package/src/deviceerv.js +39 -34
- package/src/melcloudata.js +6 -3
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.5",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -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 = null;
|
|
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;
|
|
@@ -309,8 +311,8 @@ class DeviceAta extends EventEmitter {
|
|
|
309
311
|
this.accessory.targetOperationMode = 2;
|
|
310
312
|
break;
|
|
311
313
|
default:
|
|
312
|
-
this.emit('warn', `
|
|
313
|
-
|
|
314
|
+
this.emit('warn', `Received unknown operating mode: ${operationMode}`);
|
|
315
|
+
return
|
|
314
316
|
};
|
|
315
317
|
break;
|
|
316
318
|
case false:
|
|
@@ -460,7 +462,7 @@ class DeviceAta extends EventEmitter {
|
|
|
460
462
|
&& presetData.SetTemperature === setTemperature
|
|
461
463
|
&& presetData.OperationMode === operationMode
|
|
462
464
|
&& presetData.VaneHorizontal === vaneHorizontalDirection
|
|
463
|
-
&& presetData.VaneVertical ===
|
|
465
|
+
&& presetData.VaneVertical === vaneVerticalDirection
|
|
464
466
|
&& presetData.FanSpeed === fanSpeed) : false;
|
|
465
467
|
|
|
466
468
|
if (this.presetsServices) {
|
|
@@ -475,19 +477,20 @@ class DeviceAta extends EventEmitter {
|
|
|
475
477
|
if (this.buttonsConfiguredCount > 0) {
|
|
476
478
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
477
479
|
const button = this.buttonsConfigured[i];
|
|
478
|
-
const mode =
|
|
480
|
+
const mode = button.mode;
|
|
481
|
+
let setPreviousValue = false;
|
|
479
482
|
switch (mode) {
|
|
480
483
|
case 0: //POWER ON,OFF
|
|
481
484
|
button.state = (power === true);
|
|
482
485
|
break;
|
|
483
486
|
case 1: //OPERATING MODE HEAT
|
|
484
|
-
button.state = power ? (operationMode === 1) : false;
|
|
487
|
+
button.state = power ? (operationMode === 1 || operationMode === 9) : false;
|
|
485
488
|
break;
|
|
486
489
|
case 2: //OPERATING MODE DRY
|
|
487
|
-
button.state = power ? (operationMode === 2) : false;
|
|
490
|
+
button.state = power ? (operationMode === 2 || operationMode === 10) : false;
|
|
488
491
|
break
|
|
489
492
|
case 3: //OPERATING MODE COOL
|
|
490
|
-
button.state = power ? (operationMode === 3) : false;
|
|
493
|
+
button.state = power ? (operationMode === 3 || operationMode === 11) : false;
|
|
491
494
|
break;
|
|
492
495
|
case 4: //OPERATING MODE FAN
|
|
493
496
|
button.state = power ? (operationMode === 7) : false;
|
|
@@ -496,7 +499,7 @@ class DeviceAta extends EventEmitter {
|
|
|
496
499
|
button.state = power ? (operationMode === 8) : false;
|
|
497
500
|
break;
|
|
498
501
|
case 6: //OPERATING MODE PURIFY
|
|
499
|
-
button.state = power ? (operationMode ===
|
|
502
|
+
button.state = power ? (operationMode === 12) : false;
|
|
500
503
|
break;
|
|
501
504
|
case 7: //OPERATING MODE DRY CONTROL HIDE
|
|
502
505
|
button.state = power ? (hideDryModeControl === true) : false;
|
|
@@ -526,25 +529,25 @@ class DeviceAta extends EventEmitter {
|
|
|
526
529
|
button.state = power ? (vaneHorizontalDirection === 12) : false;
|
|
527
530
|
break;
|
|
528
531
|
case 20: //VANE V SWING MODE AUTO
|
|
529
|
-
button.state = power ? (
|
|
532
|
+
button.state = power ? (vaneVerticalDirection === 0) : false;
|
|
530
533
|
break;
|
|
531
534
|
case 21: //VANE V SWING MODE 1
|
|
532
|
-
button.state = power ? (
|
|
535
|
+
button.state = power ? (vaneVerticalDirection === 1) : false;
|
|
533
536
|
break;
|
|
534
537
|
case 22: //VANE V SWING MODE 2
|
|
535
|
-
button.state = power ? (
|
|
538
|
+
button.state = power ? (vaneVerticalDirection === 2) : false;
|
|
536
539
|
break;
|
|
537
540
|
case 23: //VANE V SWING MODE 3
|
|
538
|
-
button.state = power ? (
|
|
541
|
+
button.state = power ? (vaneVerticalDirection === 3) : false;
|
|
539
542
|
break;
|
|
540
543
|
case 24: //VANE V SWING MODE 4
|
|
541
|
-
button.state = power ? (
|
|
544
|
+
button.state = power ? (vaneVerticalDirection === 4) : false;
|
|
542
545
|
break;
|
|
543
546
|
case 25: //VANE V SWING MODE 5
|
|
544
|
-
button.state = power ? (
|
|
547
|
+
button.state = power ? (vaneVerticalDirection === 5) : false;
|
|
545
548
|
break;
|
|
546
549
|
case 26: //VANE V SWING MODE SWING
|
|
547
|
-
button.state = power ? (
|
|
550
|
+
button.state = power ? (vaneVerticalDirection === 7) : false;
|
|
548
551
|
break;
|
|
549
552
|
case 27: //VANE H/V CONTROLS HIDE
|
|
550
553
|
button.state = power ? (hideVaneControls === true) : false;
|
|
@@ -679,7 +682,7 @@ class DeviceAta extends EventEmitter {
|
|
|
679
682
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
|
|
680
683
|
set = await this.melCloudAta.send(deviceData);
|
|
681
684
|
break;
|
|
682
|
-
case '
|
|
685
|
+
case 'FanSpeed':
|
|
683
686
|
deviceData.Device[key] = value;
|
|
684
687
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
685
688
|
set = await this.melCloudAta.send(deviceData);
|
|
@@ -1097,7 +1100,6 @@ class DeviceAta extends EventEmitter {
|
|
|
1097
1100
|
if (this.presetsConfiguredCount > 0) {
|
|
1098
1101
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
|
|
1099
1102
|
this.presetsServices = [];
|
|
1100
|
-
const previousPresets = [];
|
|
1101
1103
|
|
|
1102
1104
|
for (let i = 0; i < this.presetsConfiguredCount; i++) {
|
|
1103
1105
|
const preset = this.presetsConfigured[i];
|
|
@@ -1124,7 +1126,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1124
1126
|
try {
|
|
1125
1127
|
switch (state) {
|
|
1126
1128
|
case true:
|
|
1127
|
-
|
|
1129
|
+
preset.previousSettings = deviceData.Device;
|
|
1128
1130
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
1129
1131
|
deviceData.Device.Power = presetData.Power;
|
|
1130
1132
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
@@ -1134,17 +1136,22 @@ class DeviceAta extends EventEmitter {
|
|
|
1134
1136
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1135
1137
|
break;
|
|
1136
1138
|
case false:
|
|
1137
|
-
deviceData.Device =
|
|
1139
|
+
deviceData.Device.SetTemperature = preset.previousSettings.SetTemperature;
|
|
1140
|
+
deviceData.Device.Power = preset.previousSettings.Power;
|
|
1141
|
+
deviceData.Device.OperationMode = preset.previousSettings.OperationMode;
|
|
1142
|
+
deviceData.Device.VaneHorizontalDirection = preset.previousSettings.VaneHorizontalDirection;
|
|
1143
|
+
deviceData.Device.VaneVerticalDirection = preset.previousSettings.VaneVerticalDirection;
|
|
1144
|
+
deviceData.Device.FanSpeed = preset.previousSettings.FanSpeed;
|
|
1145
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1138
1146
|
break;
|
|
1139
1147
|
};
|
|
1140
1148
|
|
|
1141
1149
|
await this.melCloudAta.send(deviceData);
|
|
1142
|
-
const info = this.disableLogInfo ? false : this.emit('message',
|
|
1150
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${presetName}`);
|
|
1143
1151
|
} catch (error) {
|
|
1144
1152
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1145
1153
|
};
|
|
1146
1154
|
});
|
|
1147
|
-
previousPresets.push(deviceData.Device);
|
|
1148
1155
|
this.presetsServices.push(presetService);
|
|
1149
1156
|
accessory.addService(presetService);
|
|
1150
1157
|
};
|
|
@@ -1186,149 +1193,177 @@ class DeviceAta extends EventEmitter {
|
|
|
1186
1193
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1187
1194
|
break;
|
|
1188
1195
|
case 1: //OPERATING MODE HEAT
|
|
1196
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1189
1197
|
deviceData.Device.Power = true;
|
|
1190
|
-
deviceData.Device.OperationMode = 1;
|
|
1198
|
+
deviceData.Device.OperationMode = state ? 1 : button.previousValue === 9 ? 1 : button.previousValue;
|
|
1191
1199
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1192
1200
|
break;
|
|
1193
1201
|
case 2: //OPERATING MODE DRY
|
|
1202
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1194
1203
|
deviceData.Device.Power = true;
|
|
1195
|
-
deviceData.Device.OperationMode = 2;
|
|
1204
|
+
deviceData.Device.OperationMode = state ? 2 : button.previousValue === 10 ? 2 : button.previousValue;
|
|
1196
1205
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1197
1206
|
break
|
|
1198
1207
|
case 3: //OPERATING MODE COOL
|
|
1208
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1199
1209
|
deviceData.Device.Power = true;
|
|
1200
|
-
deviceData.Device.OperationMode = 3;
|
|
1210
|
+
deviceData.Device.OperationMode = state ? 3 : button.previousValue === 11 ? 3 : button.previousValue;
|
|
1201
1211
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1202
1212
|
break;
|
|
1203
1213
|
case 4: //OPERATING MODE FAN
|
|
1214
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1204
1215
|
deviceData.Device.Power = true;
|
|
1205
|
-
deviceData.Device.OperationMode = 7;
|
|
1216
|
+
deviceData.Device.OperationMode = state ? 7 : button.previousValue;
|
|
1206
1217
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1207
1218
|
break;
|
|
1208
1219
|
case 5: //OPERATING MODE AUTO
|
|
1220
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1209
1221
|
deviceData.Device.Power = true;
|
|
1210
|
-
deviceData.Device.OperationMode = 8;
|
|
1222
|
+
deviceData.Device.OperationMode = state ? 8 : button.previousValue;
|
|
1211
1223
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1212
1224
|
break;
|
|
1213
1225
|
case 6: //OPERATING MODE PURIFY
|
|
1226
|
+
button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
|
|
1214
1227
|
deviceData.Device.Power = true;
|
|
1215
|
-
deviceData.Device.OperationMode =
|
|
1228
|
+
deviceData.Device.OperationMode = state ? 12 : button.previousValue;
|
|
1216
1229
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
|
|
1217
1230
|
break;
|
|
1218
1231
|
case 7: //OPERATING MODE DRY CONTROL HIDE
|
|
1219
1232
|
deviceData.Device.HideDryModeControl = state;
|
|
1220
1233
|
break;
|
|
1221
1234
|
case 10: //VANE H SWING MODE AUTO
|
|
1235
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1222
1236
|
deviceData.Device.Power = true;
|
|
1223
|
-
deviceData.Device.VaneHorizontalDirection = 0;
|
|
1237
|
+
deviceData.Device.VaneHorizontalDirection = state ? 0 : button.previousValue;
|
|
1224
1238
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1225
1239
|
break;
|
|
1226
1240
|
case 11: //VANE H SWING MODE 1
|
|
1241
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1227
1242
|
deviceData.Device.Power = true;
|
|
1228
|
-
deviceData.Device.VaneHorizontalDirection = 1;
|
|
1243
|
+
deviceData.Device.VaneHorizontalDirection = state ? 1 : button.previousValue;
|
|
1229
1244
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1230
1245
|
break;
|
|
1231
1246
|
case 12: //VANE H SWING MODE 2
|
|
1247
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1232
1248
|
deviceData.Device.Power = true;
|
|
1233
|
-
deviceData.Device.VaneHorizontalDirection = 2;
|
|
1249
|
+
deviceData.Device.VaneHorizontalDirection = state ? 2 : button.previousValue;
|
|
1234
1250
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1235
1251
|
break;
|
|
1236
1252
|
case 13: //VANE H SWING MODE 3
|
|
1253
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1237
1254
|
deviceData.Device.Power = true;
|
|
1238
|
-
deviceData.Device.VaneHorizontalDirection = 3;
|
|
1255
|
+
deviceData.Device.VaneHorizontalDirection = state ? 3 : button.previousValue;
|
|
1239
1256
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1240
1257
|
break;
|
|
1241
1258
|
case 14: //VANE H SWING MODE 4
|
|
1259
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1242
1260
|
deviceData.Device.Power = true;
|
|
1243
|
-
deviceData.Device.VaneHorizontalDirection = 4;
|
|
1261
|
+
deviceData.Device.VaneHorizontalDirection = state ? 4 : button.previousValue;
|
|
1244
1262
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1245
1263
|
break;
|
|
1246
1264
|
case 15: //VANE H SWING MODE 5
|
|
1265
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1247
1266
|
deviceData.Device.Power = true;
|
|
1248
|
-
deviceData.Device.VaneHorizontalDirection = 5;
|
|
1267
|
+
deviceData.Device.VaneHorizontalDirection = state ? 5 : button.previousValue;
|
|
1249
1268
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1250
1269
|
break;
|
|
1251
1270
|
case 16: //VANE H SWING MODE SPLIT
|
|
1271
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1252
1272
|
deviceData.Device.Power = true;
|
|
1253
|
-
deviceData.Device.VaneHorizontalDirection = 8;
|
|
1273
|
+
deviceData.Device.VaneHorizontalDirection = state ? 8 : button.previousValue;
|
|
1254
1274
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1255
1275
|
break;
|
|
1256
1276
|
case 17: //VANE H SWING MODE SWING
|
|
1277
|
+
button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
|
|
1257
1278
|
deviceData.Device.Power = true;
|
|
1258
|
-
deviceData.Device.VaneHorizontalDirection = 12;
|
|
1279
|
+
deviceData.Device.VaneHorizontalDirection = state ? 12 : button.previousValue;
|
|
1259
1280
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
|
|
1260
1281
|
break;
|
|
1261
1282
|
case 20: //VANE V SWING MODE AUTO
|
|
1283
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1262
1284
|
deviceData.Device.Power = true;
|
|
1263
|
-
deviceData.Device.VaneVerticalDirection = 0;
|
|
1285
|
+
deviceData.Device.VaneVerticalDirection = state ? 0 : button.previousValue;
|
|
1264
1286
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1265
1287
|
break;
|
|
1266
1288
|
case 21: //VANE V SWING MODE 1
|
|
1289
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1267
1290
|
deviceData.Device.Power = true;
|
|
1268
|
-
deviceData.Device.VaneVerticalDirection = 1;
|
|
1291
|
+
deviceData.Device.VaneVerticalDirection = state ? 1 : button.previousValue;
|
|
1269
1292
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1270
1293
|
break;
|
|
1271
1294
|
case 22: //VANE V SWING MODE 2
|
|
1295
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1272
1296
|
deviceData.Device.Power = true;
|
|
1273
|
-
deviceData.Device.VaneVerticalDirection = 2;
|
|
1297
|
+
deviceData.Device.VaneVerticalDirection = state ? 2 : button.previousValue;
|
|
1274
1298
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1275
1299
|
break;
|
|
1276
1300
|
case 23: //VANE V SWING MODE 3
|
|
1301
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1277
1302
|
deviceData.Device.Power = true;
|
|
1278
|
-
deviceData.Device.VaneVerticalDirection = 3;
|
|
1303
|
+
deviceData.Device.VaneVerticalDirection = state ? 3 : button.previousValue;
|
|
1279
1304
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1280
1305
|
break;
|
|
1281
1306
|
case 24: //VANE V SWING MODE 4
|
|
1307
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1282
1308
|
deviceData.Device.Power = true;
|
|
1283
|
-
deviceData.Device.VaneVerticalDirection = 4;
|
|
1309
|
+
deviceData.Device.VaneVerticalDirection = state ? 4 : button.previousValue;
|
|
1284
1310
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1285
1311
|
break;
|
|
1286
1312
|
case 25: //VANE V SWING MODE 5
|
|
1313
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1287
1314
|
deviceData.Device.Power = true;
|
|
1288
|
-
deviceData.Device.VaneVerticalDirection = 5;
|
|
1315
|
+
deviceData.Device.VaneVerticalDirection = state ? 5 : button.previousValue;
|
|
1289
1316
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1290
1317
|
break;
|
|
1291
1318
|
case 26: //VANE V SWING MODE SWING
|
|
1319
|
+
button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
|
|
1292
1320
|
deviceData.Device.Power = true;
|
|
1293
|
-
deviceData.Device.VaneVerticalDirection = 7;
|
|
1321
|
+
deviceData.Device.VaneVerticalDirection = state ? 7 : button.previousValue;
|
|
1294
1322
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
1295
1323
|
break;
|
|
1296
1324
|
case 27: //VANE H/V CONTROLS HIDE
|
|
1297
1325
|
deviceData.Device.HideVaneControls = state;
|
|
1298
1326
|
break;
|
|
1299
1327
|
case 30: //FAN SPEED MODE AUTO
|
|
1328
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1300
1329
|
deviceData.Device.Power = true;
|
|
1301
|
-
deviceData.Device.FanSpeed = 0;
|
|
1330
|
+
deviceData.Device.FanSpeed = state ? 0 : button.previousValue;
|
|
1302
1331
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1303
1332
|
break;
|
|
1304
1333
|
case 31: //FAN SPEED MODE 1
|
|
1334
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1305
1335
|
deviceData.Device.Power = true;
|
|
1306
|
-
deviceData.Device.FanSpeed = 1;
|
|
1336
|
+
deviceData.Device.FanSpeed = state ? 1 : button.previousValue;
|
|
1307
1337
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1308
1338
|
break;
|
|
1309
1339
|
case 32: //FAN SPEED MODE 2
|
|
1340
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1310
1341
|
deviceData.Device.Power = true;
|
|
1311
|
-
deviceData.Device.FanSpeed = 2;
|
|
1342
|
+
deviceData.Device.FanSpeed = state ? 2 : button.previousValue;
|
|
1312
1343
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1313
1344
|
break;
|
|
1314
1345
|
case 33: //FAN SPEED MODE 3
|
|
1346
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1315
1347
|
deviceData.Device.Power = true;
|
|
1316
|
-
deviceData.Device.FanSpeed = 3;
|
|
1348
|
+
deviceData.Device.FanSpeed = state ? 3 : button.previousValue;
|
|
1317
1349
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1318
1350
|
break;
|
|
1319
1351
|
case 34: //FAN MODE 4
|
|
1352
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1320
1353
|
deviceData.Device.Power = true;
|
|
1321
|
-
deviceData.Device.FanSpeed = 4;
|
|
1354
|
+
deviceData.Device.FanSpeed = state ? 4 : button.previousValue;
|
|
1322
1355
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1323
1356
|
break;
|
|
1324
1357
|
case 35: //FAN SPEED MODE 5
|
|
1358
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1325
1359
|
deviceData.Device.Power = true;
|
|
1326
|
-
deviceData.Device.FanSpeed = 5;
|
|
1360
|
+
deviceData.Device.FanSpeed = state ? 5 : button.previousValue;
|
|
1327
1361
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1328
1362
|
break;
|
|
1329
1363
|
case 36: //FAN SPEED MODE 6
|
|
1364
|
+
button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
|
|
1330
1365
|
deviceData.Device.Power = true;
|
|
1331
|
-
deviceData.Device.FanSpeed = 6;
|
|
1366
|
+
deviceData.Device.FanSpeed = state ? 6 : button.previousValue;
|
|
1332
1367
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
|
|
1333
1368
|
break;
|
|
1334
1369
|
case 37: //PHYSICAL LOCK CONTROLS
|
|
@@ -1355,7 +1390,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1355
1390
|
};
|
|
1356
1391
|
|
|
1357
1392
|
await this.melCloudAta.send(deviceData);
|
|
1358
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
|
|
1393
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${button.previousValue}`}`);
|
|
1359
1394
|
} catch (error) {
|
|
1360
1395
|
this.emit('warn', `Set button error: ${error}`);
|
|
1361
1396
|
};
|
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 = null;
|
|
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;
|
|
@@ -630,7 +632,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
630
632
|
if (this.buttonsConfiguredCount > 0) {
|
|
631
633
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
632
634
|
const button = this.buttonsConfigured[i];
|
|
633
|
-
const mode =
|
|
635
|
+
const mode = button.mode;
|
|
634
636
|
switch (mode) {
|
|
635
637
|
case 0: //POWER ON,OFF
|
|
636
638
|
button.state = (power === true);
|
|
@@ -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 ?? deviceData.Device.UnitStatus;
|
|
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 ?? deviceData.Device.UnitStatus;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone1;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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 ?? deviceData.Device.OperationModeZone2;
|
|
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', `Set: ${buttonName}`);
|
|
1798
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${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 = null;
|
|
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;
|
|
@@ -480,7 +482,7 @@ class DeviceErv extends EventEmitter {
|
|
|
480
482
|
if (this.buttonsConfiguredCount > 0) {
|
|
481
483
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
482
484
|
const button = this.buttonsConfigured[i];
|
|
483
|
-
const mode =
|
|
485
|
+
const mode = button.mode;;
|
|
484
486
|
switch (mode) {
|
|
485
487
|
case 0: //POWER ON,OFF
|
|
486
488
|
button.state = (power === true);
|
|
@@ -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 ?? deviceData.Device.VentilationMode;
|
|
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 ?? deviceData.Device.VentilationMode;
|
|
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 ?? deviceData.Device.VentilationMode;
|
|
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 ?? deviceData.Device.SetFanSpeed;
|
|
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 ?? deviceData.Device.SetFanSpeed;
|
|
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 ?? deviceData.Device.SetFanSpeed;
|
|
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 ?? deviceData.Device.SetFanSpeed;
|
|
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 ?? deviceData.Device.SetFanSpeed;
|
|
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', `Set: ${buttonName}`);
|
|
1260
|
+
const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${button.previousValue}`}`);
|
|
1256
1261
|
} catch (error) {
|
|
1257
1262
|
this.emit('warn', `Set button error: ${error}`);
|
|
1258
1263
|
};
|
package/src/melcloudata.js
CHANGED
|
@@ -380,14 +380,17 @@ class MelCloudAta extends EventEmitter {
|
|
|
380
380
|
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature < minTempCoolDry ? minTempCoolDry : deviceData.Device.SetTemperature;
|
|
381
381
|
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature > maxTempCoolDry ? maxTempCoolDry : deviceData.Device.SetTemperature;
|
|
382
382
|
break;
|
|
383
|
+
case 7:
|
|
384
|
+
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature < 10 ? 10 : deviceData.Device.SetTemperature;
|
|
385
|
+
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature > 31 ? 31 : deviceData.Device.SetTemperature;
|
|
386
|
+
break;
|
|
383
387
|
case 8:
|
|
384
388
|
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature < minTempAutomatic ? minTempAutomatic : deviceData.Device.SetTemperature;
|
|
385
389
|
deviceData.Device.SetTemperature = deviceData.Device.SetTemperature > maxTempAutomatic ? maxTempAutomatic : deviceData.Device.SetTemperature;
|
|
386
390
|
break;
|
|
387
391
|
default:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
break;
|
|
392
|
+
this.emit('warn', `Trying to set nknown operating mode: ${deviceData.Device.OperationMode}`);
|
|
393
|
+
return;
|
|
391
394
|
};
|
|
392
395
|
|
|
393
396
|
const payload = {
|