homebridge-melcloud-control 3.2.4 → 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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "3.2.4",
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
@@ -84,7 +84,7 @@ class DeviceAta extends EventEmitter {
84
84
  button.serviceType = buttonServiceType;
85
85
  button.characteristicType = buttonCharacteristicType;
86
86
  button.state = false;
87
- button.previousValue = 0;
87
+ button.previousValue = null;
88
88
  this.buttonsConfigured.push(button);
89
89
  } else {
90
90
  const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
@@ -311,8 +311,8 @@ class DeviceAta extends EventEmitter {
311
311
  this.accessory.targetOperationMode = 2;
312
312
  break;
313
313
  default:
314
- this.emit('warn', `Unknown operating mode: ${operationMode}`);
315
- break;
314
+ this.emit('warn', `Received unknown operating mode: ${operationMode}`);
315
+ return
316
316
  };
317
317
  break;
318
318
  case false:
@@ -462,7 +462,7 @@ class DeviceAta extends EventEmitter {
462
462
  && presetData.SetTemperature === setTemperature
463
463
  && presetData.OperationMode === operationMode
464
464
  && presetData.VaneHorizontal === vaneHorizontalDirection
465
- && presetData.VaneVertical === VaneVerticalDirection
465
+ && presetData.VaneVertical === vaneVerticalDirection
466
466
  && presetData.FanSpeed === fanSpeed) : false;
467
467
 
468
468
  if (this.presetsServices) {
@@ -477,19 +477,20 @@ class DeviceAta extends EventEmitter {
477
477
  if (this.buttonsConfiguredCount > 0) {
478
478
  for (let i = 0; i < this.buttonsConfiguredCount; i++) {
479
479
  const button = this.buttonsConfigured[i];
480
- const mode = this.buttonsConfigured[i].mode;
480
+ const mode = button.mode;
481
+ let setPreviousValue = false;
481
482
  switch (mode) {
482
483
  case 0: //POWER ON,OFF
483
484
  button.state = (power === true);
484
485
  break;
485
486
  case 1: //OPERATING MODE HEAT
486
- button.state = power ? (operationMode === 1) : false;
487
+ button.state = power ? (operationMode === 1 || operationMode === 9) : false;
487
488
  break;
488
489
  case 2: //OPERATING MODE DRY
489
- button.state = power ? (operationMode === 2) : false;
490
+ button.state = power ? (operationMode === 2 || operationMode === 10) : false;
490
491
  break
491
492
  case 3: //OPERATING MODE COOL
492
- button.state = power ? (operationMode === 3) : false;
493
+ button.state = power ? (operationMode === 3 || operationMode === 11) : false;
493
494
  break;
494
495
  case 4: //OPERATING MODE FAN
495
496
  button.state = power ? (operationMode === 7) : false;
@@ -498,7 +499,7 @@ class DeviceAta extends EventEmitter {
498
499
  button.state = power ? (operationMode === 8) : false;
499
500
  break;
500
501
  case 6: //OPERATING MODE PURIFY
501
- button.state = power ? (operationMode === 9) : false;
502
+ button.state = power ? (operationMode === 12) : false;
502
503
  break;
503
504
  case 7: //OPERATING MODE DRY CONTROL HIDE
504
505
  button.state = power ? (hideDryModeControl === true) : false;
@@ -528,25 +529,25 @@ class DeviceAta extends EventEmitter {
528
529
  button.state = power ? (vaneHorizontalDirection === 12) : false;
529
530
  break;
530
531
  case 20: //VANE V SWING MODE AUTO
531
- button.state = power ? (VaneVerticalDirection === 0) : false;
532
+ button.state = power ? (vaneVerticalDirection === 0) : false;
532
533
  break;
533
534
  case 21: //VANE V SWING MODE 1
534
- button.state = power ? (VaneVerticalDirection === 1) : false;
535
+ button.state = power ? (vaneVerticalDirection === 1) : false;
535
536
  break;
536
537
  case 22: //VANE V SWING MODE 2
537
- button.state = power ? (VaneVerticalDirection === 2) : false;
538
+ button.state = power ? (vaneVerticalDirection === 2) : false;
538
539
  break;
539
540
  case 23: //VANE V SWING MODE 3
540
- button.state = power ? (VaneVerticalDirection === 3) : false;
541
+ button.state = power ? (vaneVerticalDirection === 3) : false;
541
542
  break;
542
543
  case 24: //VANE V SWING MODE 4
543
- button.state = power ? (VaneVerticalDirection === 4) : false;
544
+ button.state = power ? (vaneVerticalDirection === 4) : false;
544
545
  break;
545
546
  case 25: //VANE V SWING MODE 5
546
- button.state = power ? (VaneVerticalDirection === 5) : false;
547
+ button.state = power ? (vaneVerticalDirection === 5) : false;
547
548
  break;
548
549
  case 26: //VANE V SWING MODE SWING
549
- button.state = power ? (VaneVerticalDirection === 7) : false;
550
+ button.state = power ? (vaneVerticalDirection === 7) : false;
550
551
  break;
551
552
  case 27: //VANE H/V CONTROLS HIDE
552
553
  button.state = power ? (hideVaneControls === true) : false;
@@ -1192,130 +1193,130 @@ class DeviceAta extends EventEmitter {
1192
1193
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
1193
1194
  break;
1194
1195
  case 1: //OPERATING MODE HEAT
1195
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1196
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1196
1197
  deviceData.Device.Power = true;
1197
- deviceData.Device.OperationMode = state ? 1 : button.previousValue;
1198
+ deviceData.Device.OperationMode = state ? 1 : button.previousValue === 9 ? 1 : button.previousValue;
1198
1199
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1199
1200
  break;
1200
1201
  case 2: //OPERATING MODE DRY
1201
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1202
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1202
1203
  deviceData.Device.Power = true;
1203
- deviceData.Device.OperationMode = state ? 2 : button.previousValue;
1204
+ deviceData.Device.OperationMode = state ? 2 : button.previousValue === 10 ? 2 : button.previousValue;
1204
1205
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1205
1206
  break
1206
1207
  case 3: //OPERATING MODE COOL
1207
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1208
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1208
1209
  deviceData.Device.Power = true;
1209
- deviceData.Device.OperationMode = state ? 3 : button.previousValue;
1210
+ deviceData.Device.OperationMode = state ? 3 : button.previousValue === 11 ? 3 : button.previousValue;
1210
1211
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1211
1212
  break;
1212
1213
  case 4: //OPERATING MODE FAN
1213
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1214
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1214
1215
  deviceData.Device.Power = true;
1215
1216
  deviceData.Device.OperationMode = state ? 7 : button.previousValue;
1216
1217
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1217
1218
  break;
1218
1219
  case 5: //OPERATING MODE AUTO
1219
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1220
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1220
1221
  deviceData.Device.Power = true;
1221
1222
  deviceData.Device.OperationMode = state ? 8 : button.previousValue;
1222
1223
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1223
1224
  break;
1224
1225
  case 6: //OPERATING MODE PURIFY
1225
- button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue;
1226
+ button.previousValue = state ? deviceData.Device.OperationMode : button.previousValue ?? deviceData.Device.OperationMode;
1226
1227
  deviceData.Device.Power = true;
1227
- deviceData.Device.OperationMode = state ? 9 : button.previousValue;
1228
+ deviceData.Device.OperationMode = state ? 12 : button.previousValue;
1228
1229
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.OperationMode;
1229
1230
  break;
1230
1231
  case 7: //OPERATING MODE DRY CONTROL HIDE
1231
1232
  deviceData.Device.HideDryModeControl = state;
1232
1233
  break;
1233
1234
  case 10: //VANE H SWING MODE AUTO
1234
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1235
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1235
1236
  deviceData.Device.Power = true;
1236
1237
  deviceData.Device.VaneHorizontalDirection = state ? 0 : button.previousValue;
1237
1238
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1238
1239
  break;
1239
1240
  case 11: //VANE H SWING MODE 1
1240
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1241
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1241
1242
  deviceData.Device.Power = true;
1242
1243
  deviceData.Device.VaneHorizontalDirection = state ? 1 : button.previousValue;
1243
1244
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1244
1245
  break;
1245
1246
  case 12: //VANE H SWING MODE 2
1246
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1247
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1247
1248
  deviceData.Device.Power = true;
1248
1249
  deviceData.Device.VaneHorizontalDirection = state ? 2 : button.previousValue;
1249
1250
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1250
1251
  break;
1251
1252
  case 13: //VANE H SWING MODE 3
1252
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1253
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1253
1254
  deviceData.Device.Power = true;
1254
1255
  deviceData.Device.VaneHorizontalDirection = state ? 3 : button.previousValue;
1255
1256
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1256
1257
  break;
1257
1258
  case 14: //VANE H SWING MODE 4
1258
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1259
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1259
1260
  deviceData.Device.Power = true;
1260
1261
  deviceData.Device.VaneHorizontalDirection = state ? 4 : button.previousValue;
1261
1262
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1262
1263
  break;
1263
1264
  case 15: //VANE H SWING MODE 5
1264
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1265
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1265
1266
  deviceData.Device.Power = true;
1266
1267
  deviceData.Device.VaneHorizontalDirection = state ? 5 : button.previousValue;
1267
1268
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1268
1269
  break;
1269
1270
  case 16: //VANE H SWING MODE SPLIT
1270
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1271
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1271
1272
  deviceData.Device.Power = true;
1272
1273
  deviceData.Device.VaneHorizontalDirection = state ? 8 : button.previousValue;
1273
1274
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1274
1275
  break;
1275
1276
  case 17: //VANE H SWING MODE SWING
1276
- button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue;
1277
+ button.previousValue = state ? deviceData.Device.VaneHorizontalDirection : button.previousValue ?? deviceData.Device.VaneHorizontalDirection;
1277
1278
  deviceData.Device.Power = true;
1278
1279
  deviceData.Device.VaneHorizontalDirection = state ? 12 : button.previousValue;
1279
1280
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal;
1280
1281
  break;
1281
1282
  case 20: //VANE V SWING MODE AUTO
1282
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1283
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1283
1284
  deviceData.Device.Power = true;
1284
1285
  deviceData.Device.VaneVerticalDirection = state ? 0 : button.previousValue;
1285
1286
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1286
1287
  break;
1287
1288
  case 21: //VANE V SWING MODE 1
1288
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1289
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1289
1290
  deviceData.Device.Power = true;
1290
1291
  deviceData.Device.VaneVerticalDirection = state ? 1 : button.previousValue;
1291
1292
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1292
1293
  break;
1293
1294
  case 22: //VANE V SWING MODE 2
1294
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1295
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1295
1296
  deviceData.Device.Power = true;
1296
1297
  deviceData.Device.VaneVerticalDirection = state ? 2 : button.previousValue;
1297
1298
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1298
1299
  break;
1299
1300
  case 23: //VANE V SWING MODE 3
1300
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1301
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1301
1302
  deviceData.Device.Power = true;
1302
1303
  deviceData.Device.VaneVerticalDirection = state ? 3 : button.previousValue;
1303
1304
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1304
1305
  break;
1305
1306
  case 24: //VANE V SWING MODE 4
1306
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1307
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1307
1308
  deviceData.Device.Power = true;
1308
1309
  deviceData.Device.VaneVerticalDirection = state ? 4 : button.previousValue;
1309
1310
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1310
1311
  break;
1311
1312
  case 25: //VANE V SWING MODE 5
1312
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1313
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1313
1314
  deviceData.Device.Power = true;
1314
1315
  deviceData.Device.VaneVerticalDirection = state ? 5 : button.previousValue;
1315
1316
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
1316
1317
  break;
1317
1318
  case 26: //VANE V SWING MODE SWING
1318
- button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue;
1319
+ button.previousValue = state ? deviceData.Device.VaneVerticalDirection : button.previousValue ?? deviceData.Device.VaneVerticalDirection;
1319
1320
  deviceData.Device.Power = true;
1320
1321
  deviceData.Device.VaneVerticalDirection = state ? 7 : button.previousValue;
1321
1322
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
@@ -1324,43 +1325,43 @@ class DeviceAta extends EventEmitter {
1324
1325
  deviceData.Device.HideVaneControls = state;
1325
1326
  break;
1326
1327
  case 30: //FAN SPEED MODE AUTO
1327
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1328
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1328
1329
  deviceData.Device.Power = true;
1329
1330
  deviceData.Device.FanSpeed = state ? 0 : button.previousValue;
1330
1331
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1331
1332
  break;
1332
1333
  case 31: //FAN SPEED MODE 1
1333
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1334
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1334
1335
  deviceData.Device.Power = true;
1335
1336
  deviceData.Device.FanSpeed = state ? 1 : button.previousValue;
1336
1337
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1337
1338
  break;
1338
1339
  case 32: //FAN SPEED MODE 2
1339
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1340
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1340
1341
  deviceData.Device.Power = true;
1341
1342
  deviceData.Device.FanSpeed = state ? 2 : button.previousValue;
1342
1343
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1343
1344
  break;
1344
1345
  case 33: //FAN SPEED MODE 3
1345
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1346
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1346
1347
  deviceData.Device.Power = true;
1347
1348
  deviceData.Device.FanSpeed = state ? 3 : button.previousValue;
1348
1349
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1349
1350
  break;
1350
1351
  case 34: //FAN MODE 4
1351
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1352
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1352
1353
  deviceData.Device.Power = true;
1353
1354
  deviceData.Device.FanSpeed = state ? 4 : button.previousValue;
1354
1355
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1355
1356
  break;
1356
1357
  case 35: //FAN SPEED MODE 5
1357
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1358
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1358
1359
  deviceData.Device.Power = true;
1359
1360
  deviceData.Device.FanSpeed = state ? 5 : button.previousValue;
1360
1361
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
1361
1362
  break;
1362
1363
  case 36: //FAN SPEED MODE 6
1363
- button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue;
1364
+ button.previousValue = state ? deviceData.Device.FanSpeed : button.previousValue ?? deviceData.Device.FanSpeed;
1364
1365
  deviceData.Device.Power = true;
1365
1366
  deviceData.Device.FanSpeed = state ? 6 : button.previousValue;
1366
1367
  deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power + CONSTANTS.AirConditioner.EffectiveFlags.SetFanSpeed;
@@ -1389,7 +1390,7 @@ class DeviceAta extends EventEmitter {
1389
1390
  };
1390
1391
 
1391
1392
  await this.melCloudAta.send(deviceData);
1392
- const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set: ' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
1393
+ const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${button.previousValue}`}`);
1393
1394
  } catch (error) {
1394
1395
  this.emit('warn', `Set button error: ${error}`);
1395
1396
  };
package/src/deviceatw.js CHANGED
@@ -88,7 +88,7 @@ class DeviceAtw extends EventEmitter {
88
88
  button.serviceType = buttonServiceType;
89
89
  button.characteristicType = buttonCharacteristicType;
90
90
  button.state = false;
91
- button.previousValue = 0;
91
+ button.previousValue = null;
92
92
  this.buttonsConfigured.push(button);
93
93
  } else {
94
94
  const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
@@ -632,7 +632,7 @@ class DeviceAtw extends EventEmitter {
632
632
  if (this.buttonsConfiguredCount > 0) {
633
633
  for (let i = 0; i < this.buttonsConfiguredCount; i++) {
634
634
  const button = this.buttonsConfigured[i];
635
- const mode = this.buttonsConfigured[i].mode;
635
+ const mode = button.mode;
636
636
  switch (mode) {
637
637
  case 0: //POWER ON,OFF
638
638
  button.state = (power === true);
@@ -1674,13 +1674,13 @@ class DeviceAtw extends EventEmitter {
1674
1674
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
1675
1675
  break;
1676
1676
  case 1: //HEAT PUMP HEAT
1677
- button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue;
1677
+ button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
1678
1678
  deviceData.Device.Power = true;
1679
1679
  deviceData.Device.UnitStatus = state ? 0 : button.previousValue;
1680
1680
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
1681
1681
  break;
1682
1682
  case 2: //COOL
1683
- button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue;
1683
+ button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
1684
1684
  deviceData.Device.Power = true;
1685
1685
  deviceData.Device.UnitStatus = state ? 1 : button.previousValue;
1686
1686
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
@@ -1696,37 +1696,37 @@ class DeviceAtw extends EventEmitter {
1696
1696
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
1697
1697
  break;
1698
1698
  case 20: //ZONE 1 HEAT THERMOSTAT
1699
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1699
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1700
1700
  deviceData.Device.Power = true;
1701
1701
  deviceData.Device.OperationModeZone1 = state ? 0 : button.previousValue;
1702
1702
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1703
1703
  break;
1704
1704
  case 21: //HEAT FLOW
1705
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1705
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1706
1706
  deviceData.Device.Power = true;
1707
1707
  deviceData.Device.OperationModeZone1 = state ? 1 : button.previousValue;
1708
1708
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1709
1709
  break;
1710
1710
  case 22: //HEAT CURVE
1711
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1711
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1712
1712
  deviceData.Device.Power = true;
1713
1713
  deviceData.Device.OperationModeZone1 = state ? 2 : button.previousValue;
1714
1714
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1715
1715
  break;
1716
1716
  case 23: //COOL THERMOSTAT
1717
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1717
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1718
1718
  deviceData.Device.Power = true;
1719
1719
  deviceData.Device.OperationModeZone1 = state ? 3 : button.previousValue;
1720
1720
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1721
1721
  break;
1722
1722
  case 24: //COOL FLOW
1723
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1723
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1724
1724
  deviceData.Device.Power = true;
1725
1725
  deviceData.Device.OperationModeZone1 = state ? 4 : button.previousValue;
1726
1726
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
1727
1727
  break;
1728
1728
  case 25: //FLOOR DRY UP
1729
- button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue;
1729
+ button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
1730
1730
  deviceData.Device.Power = true;
1731
1731
  deviceData.Device.OperationModeZone1 = state ? 5 : button.previousValue;
1732
1732
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
@@ -1750,37 +1750,37 @@ class DeviceAtw extends EventEmitter {
1750
1750
  CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
1751
1751
  break;
1752
1752
  case 60: //ZONE 2 HEAT THERMOSTAT
1753
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1753
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1754
1754
  deviceData.Device.Power = true;
1755
1755
  deviceData.Device.OperationModeZone2 = state ? 0 : button.previousValue;
1756
1756
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1757
1757
  break;
1758
1758
  case 61: // HEAT FLOW
1759
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1759
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1760
1760
  deviceData.Device.Power = true;
1761
1761
  deviceData.Device.OperationModeZone2 = state ? 1 : button.previousValue;
1762
1762
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1763
1763
  break;
1764
1764
  case 62: //HEAT CURVE
1765
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1765
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1766
1766
  deviceData.Device.Power = true;
1767
1767
  deviceData.Device.OperationModeZone2 = state ? 2 : button.previousValue;
1768
1768
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1769
1769
  break;
1770
1770
  case 63: //COOL THERMOSTAT
1771
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1771
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1772
1772
  deviceData.Device.Power = true;
1773
1773
  deviceData.Device.OperationModeZone2 = state ? 3 : button.previousValue;
1774
1774
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1775
1775
  break;
1776
1776
  case 64: //COOL FLOW
1777
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1777
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1778
1778
  deviceData.Device.Power = true;
1779
1779
  deviceData.Device.OperationModeZone2 = state ? 4 : button.previousValue;
1780
1780
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
1781
1781
  break;
1782
1782
  case 65: //FLOOR DRY UP
1783
- button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue;
1783
+ button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
1784
1784
  deviceData.Device.Power = true;
1785
1785
  deviceData.Device.OperationModeZone2 = state ? 5 : button.previousValue;
1786
1786
  deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
@@ -1795,7 +1795,7 @@ class DeviceAtw extends EventEmitter {
1795
1795
  };
1796
1796
 
1797
1797
  await this.melCloudAtw.send(deviceData);
1798
- const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
1798
+ const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${button.previousValue}`}`);
1799
1799
  } catch (error) {
1800
1800
  this.emit('warn', `Set button error: ${error}`);
1801
1801
  };
package/src/deviceerv.js CHANGED
@@ -82,7 +82,7 @@ class DeviceErv extends EventEmitter {
82
82
  button.serviceType = buttonServiceType;
83
83
  button.characteristicType = buttonCharacteristicType;
84
84
  button.state = false;
85
- button.previousValue = 0;
85
+ button.previousValue = null;
86
86
  this.buttonsConfigured.push(button);
87
87
  } else {
88
88
  const log = buttonDisplayType === 0 ? false : this.emit('warn', `Button Name: ${buttonName ? buttonName : 'Missing'}, Mode: ${buttonMode ? buttonMode : 'Missing'}.`);
@@ -482,7 +482,7 @@ class DeviceErv extends EventEmitter {
482
482
  if (this.buttonsConfiguredCount > 0) {
483
483
  for (let i = 0; i < this.buttonsConfiguredCount; i++) {
484
484
  const button = this.buttonsConfigured[i];
485
- const mode = this.buttonsConfigured[i].mode;;
485
+ const mode = button.mode;;
486
486
  switch (mode) {
487
487
  case 0: //POWER ON,OFF
488
488
  button.state = (power === true);
@@ -1186,19 +1186,19 @@ class DeviceErv extends EventEmitter {
1186
1186
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power;
1187
1187
  break;
1188
1188
  case 1: //OPERATING MODE RECOVERY
1189
- button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
1189
+ button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
1190
1190
  deviceData.Device.Power = true;
1191
1191
  deviceData.Device.VentilationMode = state ? 0 : button.previousValue;
1192
1192
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
1193
1193
  break;
1194
1194
  case 2: //OPERATING MODE BYPASS
1195
- button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
1195
+ button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
1196
1196
  deviceData.Device.Power = true;
1197
1197
  deviceData.Device.VentilationMode = state ? 1 : button.previousValue;
1198
1198
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
1199
1199
  break
1200
1200
  case 3: //OPERATING MODE AUTO
1201
- button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue;
1201
+ button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
1202
1202
  deviceData.Device.Power = true;
1203
1203
  deviceData.Device.VentilationMode = state ? 2 : button.previousValue;
1204
1204
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
@@ -1209,31 +1209,31 @@ 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
+ button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
1213
1213
  deviceData.Device.Power = true;
1214
1214
  deviceData.Device.SetFanSpeed = state ? 0 : button.previousValue;
1215
1215
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
1216
1216
  break;
1217
1217
  case 11: //FAN SPEED MODE 1
1218
- button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
1218
+ button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
1219
1219
  deviceData.Device.Power = true;
1220
1220
  deviceData.Device.SetFanSpeed = state ? 1 : button.previousValue;
1221
1221
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
1222
1222
  break;
1223
1223
  case 12: //FAN SPEED MODE 2
1224
- button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
1224
+ button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
1225
1225
  deviceData.Device.Power = true;
1226
1226
  deviceData.Device.SetFanSpeed = state ? 2 : button.previousValue;
1227
1227
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
1228
1228
  break;
1229
1229
  case 13: //FAN SPEED MODE 3
1230
- button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
1230
+ button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
1231
1231
  deviceData.Device.Power = true;
1232
1232
  deviceData.Device.SetFanSpeed = state ? 3 : button.previousValue;
1233
1233
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
1234
1234
  break;
1235
1235
  case 14: //FAN MODE 4
1236
- button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue;
1236
+ button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
1237
1237
  deviceData.Device.Power = true;
1238
1238
  deviceData.Device.SetFanSpeed = state ? 4 : button.previousValue;
1239
1239
  deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power + CONSTANTS.Ventilation.EffectiveFlags.SetFanSpeed;
@@ -1257,7 +1257,7 @@ class DeviceErv extends EventEmitter {
1257
1257
  };
1258
1258
 
1259
1259
  await this.melCloudErv.send(deviceData);
1260
- const info = this.disableLogInfo ? false : this.emit('message', `${state ? 'Set:' : 'Unset:'} ${buttonName}, Value: ${button.previousValue}`);
1260
+ const info = this.disableLogInfo ? false : this.emit('message', `${state ? `Set: ${buttonName}` : `Unset: ${buttonName}, Set: ${button.previousValue}`}`);
1261
1261
  } catch (error) {
1262
1262
  this.emit('warn', `Set button error: ${error}`);
1263
1263
  };
@@ -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
- deviceData.Device.SetTemperature = deviceData.Device.SetTemperature < 10 ? 10 : deviceData.Device.SetTemperature;
389
- deviceData.Device.SetTemperature = deviceData.Device.SetTemperature > 31 ? 31 : deviceData.Device.SetTemperature;
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 = {