homebridge-melcloud-control 4.2.5-beta.0 → 4.2.5-beta.3
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/config.schema.json +36 -18
- package/package.json +1 -1
- package/src/deviceata.js +272 -247
- package/src/deviceatw.js +200 -176
- package/src/deviceerv.js +141 -135
package/src/deviceatw.js
CHANGED
|
@@ -89,8 +89,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
89
89
|
//buttons configured
|
|
90
90
|
for (const button of this.buttons) {
|
|
91
91
|
button.name = button.name || 'Button'
|
|
92
|
-
button.serviceType = [
|
|
93
|
-
button.characteristicType = [
|
|
92
|
+
button.serviceType = serviceType[button.displayType];
|
|
93
|
+
button.characteristicType = characteristicType[button.displayType];
|
|
94
94
|
button.state = false;
|
|
95
95
|
button.previousValue = null;
|
|
96
96
|
}
|
|
@@ -357,8 +357,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
357
357
|
switch (i) {
|
|
358
358
|
case 0: //Heat Pump
|
|
359
359
|
deviceData.Device.Power = state ? true : false;
|
|
360
|
-
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, HeatPump.EffectiveFlags.Power);
|
|
361
360
|
if (this.logInfo) this.emit('info', `${zoneName}, Set power: ${state ? 'On' : 'Off'}`);
|
|
361
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, HeatPump.EffectiveFlags.Power);
|
|
362
362
|
break;
|
|
363
363
|
};
|
|
364
364
|
} catch (error) {
|
|
@@ -457,8 +457,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
457
457
|
break;
|
|
458
458
|
};
|
|
459
459
|
|
|
460
|
-
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
461
460
|
if (this.logInfo) this.emit('info', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
461
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
462
462
|
} catch (error) {
|
|
463
463
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
464
464
|
};
|
|
@@ -531,8 +531,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
531
531
|
break;
|
|
532
532
|
};
|
|
533
533
|
|
|
534
|
-
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
535
534
|
if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
535
|
+
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
536
536
|
} catch (error) {
|
|
537
537
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
|
|
538
538
|
};
|
|
@@ -596,8 +596,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
596
596
|
break;
|
|
597
597
|
};
|
|
598
598
|
|
|
599
|
-
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
600
599
|
if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
600
|
+
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
601
601
|
} catch (error) {
|
|
602
602
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
|
|
603
603
|
};
|
|
@@ -634,8 +634,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
634
634
|
break;
|
|
635
635
|
};
|
|
636
636
|
|
|
637
|
+
if (this.logInfo) this.emit('info', `${zoneName}, Set lock physical controls: ${value ? 'Lock' : 'Unlock'}`);
|
|
637
638
|
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData);
|
|
638
|
-
if (this.logInfo) this.emit('info', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
|
|
639
639
|
} catch (error) {
|
|
640
640
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
|
|
641
641
|
};
|
|
@@ -651,8 +651,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
651
651
|
try {
|
|
652
652
|
value = [false, true][value];
|
|
653
653
|
this.accessory.useFahrenheit = value;
|
|
654
|
-
this.emit('melCloud', 'UseFahrenheit', value);
|
|
655
654
|
if (this.logInfo) this.emit('info', `Set temperature display unit: ${TemperatureDisplayUnits[value]}`);
|
|
655
|
+
this.emit('melCloud', 'UseFahrenheit', value);
|
|
656
656
|
} catch (error) {
|
|
657
657
|
if (this.logWarn) this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
658
658
|
};
|
|
@@ -772,8 +772,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
772
772
|
break;
|
|
773
773
|
};
|
|
774
774
|
|
|
775
|
-
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
776
775
|
if (this.logInfo) this.emit('info', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
776
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
777
777
|
} catch (error) {
|
|
778
778
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
779
779
|
};
|
|
@@ -820,8 +820,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
820
820
|
break;
|
|
821
821
|
};
|
|
822
822
|
|
|
823
|
-
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
824
823
|
if (this.logInfo && i !== 0) this.emit('info', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
824
|
+
if (i > 0) await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
825
825
|
} catch (error) {
|
|
826
826
|
if (this.logWarn) this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
|
|
827
827
|
};
|
|
@@ -835,10 +835,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
835
835
|
if (this.account.type === 'melcloudhome') return;
|
|
836
836
|
|
|
837
837
|
try {
|
|
838
|
-
value =
|
|
838
|
+
value = value ? true : false;
|
|
839
839
|
this.accessory.useFahrenheit = value;
|
|
840
|
-
this.emit('melCloud', 'UseFahrenheit', value);
|
|
841
840
|
if (this.logInfo) this.emit('info', `Set temperature display unit: ${TemperatureDisplayUnits[value]}`);
|
|
841
|
+
this.emit('melCloud', 'UseFahrenheit', value);
|
|
842
842
|
} catch (error) {
|
|
843
843
|
if (this.logWarn) this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
844
844
|
};
|
|
@@ -1137,8 +1137,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1137
1137
|
.onSet(async (state) => {
|
|
1138
1138
|
try {
|
|
1139
1139
|
deviceData.HolidayMode.Enabled = state;
|
|
1140
|
-
|
|
1141
|
-
|
|
1140
|
+
if (this.logInfo) this.emit('info', `Holiday mode: ${state ? 'Enable' : 'Disable'}`);
|
|
1141
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, 'holidaymode');
|
|
1142
1142
|
} catch (error) {
|
|
1143
1143
|
if (this.logWarn) this.emit('warn', `Set holiday mode error: ${error}`);
|
|
1144
1144
|
};
|
|
@@ -1219,8 +1219,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1219
1219
|
break;
|
|
1220
1220
|
};
|
|
1221
1221
|
|
|
1222
|
-
|
|
1223
|
-
|
|
1222
|
+
if (this.logInfo) this.emit('info', `Preset ${name}: ${state ? 'Set:' : 'Unset:'}`);
|
|
1223
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, AirConditioner.EffectiveFlags.Presets);
|
|
1224
1224
|
} catch (error) {
|
|
1225
1225
|
if (this.logWarn) this.emit('warn', `Set preset error: ${error}`);
|
|
1226
1226
|
};
|
|
@@ -1276,10 +1276,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
1276
1276
|
.onSet(async (state) => {
|
|
1277
1277
|
try {
|
|
1278
1278
|
deviceData.ScheduleEnabled = state;
|
|
1279
|
-
|
|
1280
|
-
|
|
1279
|
+
if (this.logInfo) this.emit('info', `Schedules: ${state ? 'Enable' : 'Disable'}`);
|
|
1280
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, 'schedule');
|
|
1281
1281
|
} catch (error) {
|
|
1282
|
-
if (this.logWarn) this.emit('warn', `Set
|
|
1282
|
+
if (this.logWarn) this.emit('warn', `Set schedules error: ${error}`);
|
|
1283
1283
|
};
|
|
1284
1284
|
});
|
|
1285
1285
|
accessory.addService(this.scheduleControlService);
|
|
@@ -1345,8 +1345,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1345
1345
|
.onSet(async (state) => {
|
|
1346
1346
|
try {
|
|
1347
1347
|
sceneData.Enabled = state;
|
|
1348
|
-
|
|
1349
|
-
|
|
1348
|
+
if (this.logInfo) this.emit('info', `Scene ${name}: ${state ? 'Enable' : 'Disable'}`);
|
|
1349
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, 'scene', sceneData);
|
|
1350
1350
|
} catch (error) {
|
|
1351
1351
|
if (this.logWarn) this.emit('warn', `Set scene error: ${error}`);
|
|
1352
1352
|
};
|
|
@@ -1371,8 +1371,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
1371
1371
|
|
|
1372
1372
|
//buttons services
|
|
1373
1373
|
if (this.buttons.length > 0) {
|
|
1374
|
-
if (this.logDebug) this.emit('debug', `Prepare buttons services`);
|
|
1375
|
-
this.
|
|
1374
|
+
if (this.logDebug) this.emit('debug', `Prepare buttons / sensors services`);
|
|
1375
|
+
this.buttonControlServices = [];
|
|
1376
|
+
this.buttonControlSensorServices = [];
|
|
1376
1377
|
this.buttons.lengthforEach((button, i) => {
|
|
1377
1378
|
//get button mode
|
|
1378
1379
|
const mode = button.mode;
|
|
@@ -1389,160 +1390,178 @@ class DeviceAtw extends EventEmitter {
|
|
|
1389
1390
|
const serviceName1 = namePrefix ? `${accessoryName} ${name}` : name;
|
|
1390
1391
|
const serviceType = button.serviceType;
|
|
1391
1392
|
const characteristicType = button.characteristicType;
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1393
|
+
|
|
1394
|
+
//control
|
|
1395
|
+
if (button.displayType > 3) {
|
|
1396
|
+
if (this.logDebug) this.emit('debug', `Prepare button control ${name} service`);
|
|
1397
|
+
const buttonControlService = new serviceType(serviceName, `buttonControlService${deviceId} ${i}`);
|
|
1398
|
+
buttonControlService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
1399
|
+
buttonControlService.setCharacteristic(Characteristic.ConfiguredName, serviceName1);
|
|
1400
|
+
buttonControlService.getCharacteristic(characteristicType)
|
|
1401
|
+
.onGet(async () => {
|
|
1402
|
+
const state = button.state;
|
|
1403
|
+
return state;
|
|
1404
|
+
})
|
|
1405
|
+
.onSet(async (state) => {
|
|
1406
|
+
if (displayType > 0 && displayType < 3) {
|
|
1407
|
+
try {
|
|
1408
|
+
let flag = null;
|
|
1409
|
+
switch (mode) {
|
|
1410
|
+
case 0: //POWER ON,OFF
|
|
1411
|
+
deviceData.Device.Power = state;
|
|
1412
|
+
flag = HeatPump.EffectiveFlags.Power;
|
|
1413
|
+
break;
|
|
1414
|
+
case 1: //HEAT PUMP HEAT
|
|
1415
|
+
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
|
|
1416
|
+
deviceData.Device.Power = true;
|
|
1417
|
+
deviceData.Device.UnitStatus = state ? 0 : button.previousValue;
|
|
1418
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationMode;
|
|
1419
|
+
break;
|
|
1420
|
+
case 2: //COOL
|
|
1421
|
+
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
|
|
1422
|
+
deviceData.Device.Power = true;
|
|
1423
|
+
deviceData.Device.UnitStatus = state ? 1 : button.previousValue;
|
|
1424
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationMode;
|
|
1425
|
+
break;
|
|
1426
|
+
case 3: //HOLIDAY
|
|
1427
|
+
if (this.accountType === 'melcloud') {
|
|
1428
|
+
deviceData.Device.HolidayMode = state;
|
|
1429
|
+
flag = HeatPump.EffectiveFlags.HolidayMode;
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
if (this.accountType === 'melcloudhome') {
|
|
1433
|
+
deviceData.Device.HolidayMode.Enabled = state;
|
|
1434
|
+
flag = 'holidaymode';
|
|
1435
|
+
}
|
|
1436
|
+
break;
|
|
1437
|
+
case 10: //ALL ZONES PHYSICAL LOCK CONTROL
|
|
1438
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1439
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1440
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1441
|
+
flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1 + HeatPump.EffectiveFlags.ProhibitHotWater + HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1442
|
+
break;
|
|
1443
|
+
case 20: //ZONE 1 HEAT THERMOSTAT
|
|
1444
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1445
|
+
deviceData.Device.Power = true;
|
|
1446
|
+
deviceData.Device.OperationModeZone1 = state ? 0 : button.previousValue;
|
|
1447
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1448
|
+
break;
|
|
1449
|
+
case 21: //HEAT FLOW
|
|
1450
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1451
|
+
deviceData.Device.Power = true;
|
|
1452
|
+
deviceData.Device.OperationModeZone1 = state ? 1 : button.previousValue;
|
|
1453
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1454
|
+
break;
|
|
1455
|
+
case 22: //HEAT CURVE
|
|
1456
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1457
|
+
deviceData.Device.Power = true;
|
|
1458
|
+
deviceData.Device.OperationModeZone1 = state ? 2 : button.previousValue;
|
|
1459
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1460
|
+
break;
|
|
1461
|
+
case 23: //COOL THERMOSTAT
|
|
1462
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1463
|
+
deviceData.Device.Power = true;
|
|
1464
|
+
deviceData.Device.OperationModeZone1 = state ? 3 : button.previousValue;
|
|
1465
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1466
|
+
break;
|
|
1467
|
+
case 24: //COOL FLOW
|
|
1468
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1469
|
+
deviceData.Device.Power = true;
|
|
1470
|
+
deviceData.Device.OperationModeZone1 = state ? 4 : button.previousValue;
|
|
1471
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1472
|
+
break;
|
|
1473
|
+
case 25: //FLOOR DRY UP
|
|
1474
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1475
|
+
deviceData.Device.Power = true;
|
|
1476
|
+
deviceData.Device.OperationModeZone1 = state ? 5 : button.previousValue;
|
|
1477
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1478
|
+
break;
|
|
1479
|
+
case 30: //PHYSICAL LOCK CONTROL
|
|
1480
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1481
|
+
flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1482
|
+
break;
|
|
1483
|
+
case 40: //HOT WATER NORMAL/FORCE HOT WATER
|
|
1484
|
+
deviceData.Device.Power = true;
|
|
1485
|
+
deviceData.Device.ForcedHotWaterMode = state;
|
|
1486
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1487
|
+
break;
|
|
1488
|
+
case 41: //NORMAL/ECO
|
|
1489
|
+
deviceData.Device.Power = true;
|
|
1490
|
+
deviceData.Device.EcoHotWater = state;
|
|
1491
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.EcoHotWater;
|
|
1492
|
+
break;
|
|
1493
|
+
case 50: //PHYSICAL LOCK CONTROL
|
|
1494
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1495
|
+
flag = HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1496
|
+
break;
|
|
1497
|
+
case 60: //ZONE 2 HEAT THERMOSTAT
|
|
1498
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1499
|
+
deviceData.Device.Power = true;
|
|
1500
|
+
deviceData.Device.OperationModeZone2 = state ? 0 : button.previousValue;
|
|
1501
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1502
|
+
break;
|
|
1503
|
+
case 61: // HEAT FLOW
|
|
1504
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1505
|
+
deviceData.Device.Power = true;
|
|
1506
|
+
deviceData.Device.OperationModeZone2 = state ? 1 : button.previousValue;
|
|
1507
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1508
|
+
break;
|
|
1509
|
+
case 62: //HEAT CURVE
|
|
1510
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1511
|
+
deviceData.Device.Power = true;
|
|
1512
|
+
deviceData.Device.OperationModeZone2 = state ? 2 : button.previousValue;
|
|
1513
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1514
|
+
break;
|
|
1515
|
+
case 63: //COOL THERMOSTAT
|
|
1516
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1517
|
+
deviceData.Device.Power = true;
|
|
1518
|
+
deviceData.Device.OperationModeZone2 = state ? 3 : button.previousValue;
|
|
1519
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1520
|
+
break;
|
|
1521
|
+
case 64: //COOL FLOW
|
|
1522
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1523
|
+
deviceData.Device.Power = true;
|
|
1524
|
+
deviceData.Device.OperationModeZone2 = state ? 4 : button.previousValue;
|
|
1525
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1526
|
+
break;
|
|
1527
|
+
case 65: //FLOOR DRY UP
|
|
1528
|
+
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1529
|
+
deviceData.Device.Power = true;
|
|
1530
|
+
deviceData.Device.OperationModeZone2 = state ? 5 : button.previousValue;
|
|
1531
|
+
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1532
|
+
break;
|
|
1533
|
+
case 70: //PHYSICAL LOCK CONTROL
|
|
1534
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1535
|
+
HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1536
|
+
break;
|
|
1537
|
+
default:
|
|
1538
|
+
if (this.logWarn) this.emit('warn', `Unknown button mode: ${mode}`);
|
|
1539
|
+
break;
|
|
1540
|
+
};
|
|
1541
|
+
|
|
1542
|
+
if (this.logInfo) this.emit('info', `${state ? `Set: ${name}` : `Unset: ${name}, Set: ${button.previousValue}`}`);
|
|
1543
|
+
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
1544
|
+
} catch (error) {
|
|
1545
|
+
if (this.logWarn) this.emit('warn', `Set button error: ${error}`);
|
|
1546
|
+
};
|
|
1547
|
+
};
|
|
1548
|
+
});
|
|
1549
|
+
this.buttonControlServices.push(buttonControlService);
|
|
1550
|
+
accessory.addService(buttonControlService)
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
//sensor
|
|
1554
|
+
if (this.logDebug) this.emit('debug', `Prepare button control sensor ${name} service`);
|
|
1555
|
+
const buttonControlSensorService = new serviceType(serviceName, `buttonControlSensorService${deviceId} ${i}`);
|
|
1556
|
+
buttonControlSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
1557
|
+
buttonControlSensorService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
|
|
1558
|
+
buttonControlSensorService.getCharacteristic(characteristicType)
|
|
1396
1559
|
.onGet(async () => {
|
|
1397
1560
|
const state = button.state;
|
|
1398
1561
|
return state;
|
|
1399
1562
|
})
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
try {
|
|
1403
|
-
let flag = null;
|
|
1404
|
-
switch (mode) {
|
|
1405
|
-
case 0: //POWER ON,OFF
|
|
1406
|
-
deviceData.Device.Power = state;
|
|
1407
|
-
flag = HeatPump.EffectiveFlags.Power;
|
|
1408
|
-
break;
|
|
1409
|
-
case 1: //HEAT PUMP HEAT
|
|
1410
|
-
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
|
|
1411
|
-
deviceData.Device.Power = true;
|
|
1412
|
-
deviceData.Device.UnitStatus = state ? 0 : button.previousValue;
|
|
1413
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationMode;
|
|
1414
|
-
break;
|
|
1415
|
-
case 2: //COOL
|
|
1416
|
-
button.previousValue = state ? deviceData.Device.UnitStatus : button.previousValue ?? deviceData.Device.UnitStatus;
|
|
1417
|
-
deviceData.Device.Power = true;
|
|
1418
|
-
deviceData.Device.UnitStatus = state ? 1 : button.previousValue;
|
|
1419
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationMode;
|
|
1420
|
-
break;
|
|
1421
|
-
case 3: //HOLIDAY
|
|
1422
|
-
if (this.accountType === 'melcloud') {
|
|
1423
|
-
deviceData.Device.HolidayMode = state;
|
|
1424
|
-
flag = HeatPump.EffectiveFlags.HolidayMode;
|
|
1425
|
-
}
|
|
1426
|
-
|
|
1427
|
-
if (this.accountType === 'melcloudhome') {
|
|
1428
|
-
deviceData.Device.HolidayMode.Enabled = state;
|
|
1429
|
-
flag = 'holidaymode';
|
|
1430
|
-
}
|
|
1431
|
-
break;
|
|
1432
|
-
case 10: //ALL ZONES PHYSICAL LOCK CONTROL
|
|
1433
|
-
deviceData.Device.ProhibitZone1 = state;
|
|
1434
|
-
deviceData.Device.ProhibitHotWater = state;
|
|
1435
|
-
deviceData.Device.ProhibitZone2 = state;
|
|
1436
|
-
flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1 + HeatPump.EffectiveFlags.ProhibitHotWater + HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1437
|
-
break;
|
|
1438
|
-
case 20: //ZONE 1 HEAT THERMOSTAT
|
|
1439
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1440
|
-
deviceData.Device.Power = true;
|
|
1441
|
-
deviceData.Device.OperationModeZone1 = state ? 0 : button.previousValue;
|
|
1442
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1443
|
-
break;
|
|
1444
|
-
case 21: //HEAT FLOW
|
|
1445
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1446
|
-
deviceData.Device.Power = true;
|
|
1447
|
-
deviceData.Device.OperationModeZone1 = state ? 1 : button.previousValue;
|
|
1448
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1449
|
-
break;
|
|
1450
|
-
case 22: //HEAT CURVE
|
|
1451
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1452
|
-
deviceData.Device.Power = true;
|
|
1453
|
-
deviceData.Device.OperationModeZone1 = state ? 2 : button.previousValue;
|
|
1454
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1455
|
-
break;
|
|
1456
|
-
case 23: //COOL THERMOSTAT
|
|
1457
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1458
|
-
deviceData.Device.Power = true;
|
|
1459
|
-
deviceData.Device.OperationModeZone1 = state ? 3 : button.previousValue;
|
|
1460
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1461
|
-
break;
|
|
1462
|
-
case 24: //COOL FLOW
|
|
1463
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1464
|
-
deviceData.Device.Power = true;
|
|
1465
|
-
deviceData.Device.OperationModeZone1 = state ? 4 : button.previousValue;
|
|
1466
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1467
|
-
break;
|
|
1468
|
-
case 25: //FLOOR DRY UP
|
|
1469
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone1 : button.previousValue ?? deviceData.Device.OperationModeZone1;
|
|
1470
|
-
deviceData.Device.Power = true;
|
|
1471
|
-
deviceData.Device.OperationModeZone1 = state ? 5 : button.previousValue;
|
|
1472
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1473
|
-
break;
|
|
1474
|
-
case 30: //PHYSICAL LOCK CONTROL
|
|
1475
|
-
deviceData.Device.ProhibitZone1 = state;
|
|
1476
|
-
flag = HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1477
|
-
break;
|
|
1478
|
-
case 40: //HOT WATER NORMAL/FORCE HOT WATER
|
|
1479
|
-
deviceData.Device.Power = true;
|
|
1480
|
-
deviceData.Device.ForcedHotWaterMode = state;
|
|
1481
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1482
|
-
break;
|
|
1483
|
-
case 41: //NORMAL/ECO
|
|
1484
|
-
deviceData.Device.Power = true;
|
|
1485
|
-
deviceData.Device.EcoHotWater = state;
|
|
1486
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.EcoHotWater;
|
|
1487
|
-
break;
|
|
1488
|
-
case 50: //PHYSICAL LOCK CONTROL
|
|
1489
|
-
deviceData.Device.ProhibitHotWater = state;
|
|
1490
|
-
flag = HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1491
|
-
break;
|
|
1492
|
-
case 60: //ZONE 2 HEAT THERMOSTAT
|
|
1493
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1494
|
-
deviceData.Device.Power = true;
|
|
1495
|
-
deviceData.Device.OperationModeZone2 = state ? 0 : button.previousValue;
|
|
1496
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1497
|
-
break;
|
|
1498
|
-
case 61: // HEAT FLOW
|
|
1499
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1500
|
-
deviceData.Device.Power = true;
|
|
1501
|
-
deviceData.Device.OperationModeZone2 = state ? 1 : button.previousValue;
|
|
1502
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1503
|
-
break;
|
|
1504
|
-
case 62: //HEAT CURVE
|
|
1505
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1506
|
-
deviceData.Device.Power = true;
|
|
1507
|
-
deviceData.Device.OperationModeZone2 = state ? 2 : button.previousValue;
|
|
1508
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1509
|
-
break;
|
|
1510
|
-
case 63: //COOL THERMOSTAT
|
|
1511
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1512
|
-
deviceData.Device.Power = true;
|
|
1513
|
-
deviceData.Device.OperationModeZone2 = state ? 3 : button.previousValue;
|
|
1514
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1515
|
-
break;
|
|
1516
|
-
case 64: //COOL FLOW
|
|
1517
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1518
|
-
deviceData.Device.Power = true;
|
|
1519
|
-
deviceData.Device.OperationModeZone2 = state ? 4 : button.previousValue;
|
|
1520
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1521
|
-
break;
|
|
1522
|
-
case 65: //FLOOR DRY UP
|
|
1523
|
-
button.previousValue = state ? deviceData.Device.OperationModeZone2 : button.previousValue ?? deviceData.Device.OperationModeZone2;
|
|
1524
|
-
deviceData.Device.Power = true;
|
|
1525
|
-
deviceData.Device.OperationModeZone2 = state ? 5 : button.previousValue;
|
|
1526
|
-
flag = HeatPump.EffectiveFlags.Power + HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1527
|
-
break;
|
|
1528
|
-
case 70: //PHYSICAL LOCK CONTROL
|
|
1529
|
-
deviceData.Device.ProhibitZone2 = state;
|
|
1530
|
-
HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1531
|
-
break;
|
|
1532
|
-
default:
|
|
1533
|
-
if (this.logWarn) this.emit('warn', `Unknown button mode: ${mode}`);
|
|
1534
|
-
break;
|
|
1535
|
-
};
|
|
1536
|
-
|
|
1537
|
-
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, flag);
|
|
1538
|
-
if (this.logInfo) this.emit('info', `${state ? `Set: ${name}` : `Unset: ${name}, Set: ${button.previousValue}`}`);
|
|
1539
|
-
} catch (error) {
|
|
1540
|
-
if (this.logWarn) this.emit('warn', `Set button error: ${error}`);
|
|
1541
|
-
};
|
|
1542
|
-
};
|
|
1543
|
-
});
|
|
1544
|
-
this.buttonsServices.push(buttonService);
|
|
1545
|
-
accessory.addService(buttonService)
|
|
1563
|
+
this.buttonControlSensorServices.push(buttonControlSensorService);
|
|
1564
|
+
accessory.addService(buttonControlSensorService);
|
|
1546
1565
|
});
|
|
1547
1566
|
};
|
|
1548
1567
|
|
|
@@ -2245,9 +2264,14 @@ class DeviceAtw extends EventEmitter {
|
|
|
2245
2264
|
break;
|
|
2246
2265
|
};
|
|
2247
2266
|
|
|
2248
|
-
//
|
|
2249
|
-
|
|
2250
|
-
|
|
2267
|
+
//control
|
|
2268
|
+
if (button.displayType > 3) {
|
|
2269
|
+
this.buttonControlServices?.[i]?.updateCharacteristic(Characteristic.On, button.state);
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
//sensor
|
|
2273
|
+
const characteristicType = scene.characteristicType;
|
|
2274
|
+
this.buttonControlSensorServices?.[i]?.updateCharacteristic(characteristicType, button.state);
|
|
2251
2275
|
});
|
|
2252
2276
|
};
|
|
2253
2277
|
})
|