homebridge-melcloud-control 3.1.0-beta.5 → 3.1.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config.schema.json +46 -1
- package/homebridge-ui/public/index.html +3 -0
- package/package.json +1 -1
- package/src/deviceata.js +35 -28
- package/src/deviceatw.js +47 -40
- package/src/deviceerv.js +33 -26
package/config.schema.json
CHANGED
|
@@ -369,6 +369,11 @@
|
|
|
369
369
|
"items": {
|
|
370
370
|
"type": "object",
|
|
371
371
|
"properties": {
|
|
372
|
+
"id": {
|
|
373
|
+
"title": "ID",
|
|
374
|
+
"type": "integer",
|
|
375
|
+
"required": false
|
|
376
|
+
},
|
|
372
377
|
"name": {
|
|
373
378
|
"title": "Name",
|
|
374
379
|
"type": "string",
|
|
@@ -431,6 +436,9 @@
|
|
|
431
436
|
"required": false
|
|
432
437
|
}
|
|
433
438
|
}
|
|
439
|
+
},
|
|
440
|
+
"condition": {
|
|
441
|
+
"functionBody": "const devicePresets = model.accounts[arrayIndices].devicesAta[arrayIndices]?.presets || []; return devicePresets.length > 0 && devicePresets.every(preset => preset.id != null && preset.id !== '');"
|
|
434
442
|
}
|
|
435
443
|
},
|
|
436
444
|
"temperatureSensor": {
|
|
@@ -735,6 +743,9 @@
|
|
|
735
743
|
"required": false
|
|
736
744
|
}
|
|
737
745
|
}
|
|
746
|
+
},
|
|
747
|
+
"condition": {
|
|
748
|
+
"functionBody": "const buttons = model.accounts[arrayIndices].devicesAta[arrayIndices]?.buttons || []; return buttons.length > 0 && buttons.every(preset => buttons.name != null && device.name !== '');"
|
|
738
749
|
}
|
|
739
750
|
}
|
|
740
751
|
}
|
|
@@ -867,6 +878,11 @@
|
|
|
867
878
|
"items": {
|
|
868
879
|
"type": "object",
|
|
869
880
|
"properties": {
|
|
881
|
+
"id": {
|
|
882
|
+
"title": "ID",
|
|
883
|
+
"type": "integer",
|
|
884
|
+
"required": false
|
|
885
|
+
},
|
|
870
886
|
"name": {
|
|
871
887
|
"title": "Name",
|
|
872
888
|
"type": "string",
|
|
@@ -929,6 +945,9 @@
|
|
|
929
945
|
"required": false
|
|
930
946
|
}
|
|
931
947
|
}
|
|
948
|
+
},
|
|
949
|
+
"condition": {
|
|
950
|
+
"functionBody": "const devicePresets = model.accounts[arrayIndices].devicesAtw[arrayIndices]?.presets || []; return devicePresets.length > 0 && devicePresets.every(preset => preset.id != null && preset.id !== '');"
|
|
932
951
|
}
|
|
933
952
|
},
|
|
934
953
|
"buttonsSensors": {
|
|
@@ -1141,6 +1160,9 @@
|
|
|
1141
1160
|
"required": false
|
|
1142
1161
|
}
|
|
1143
1162
|
}
|
|
1163
|
+
},
|
|
1164
|
+
"condition": {
|
|
1165
|
+
"functionBody": "const buttons = model.accounts[arrayIndices].devicesAtw[arrayIndices]?.buttons || []; return buttons.length > 0 && buttons.every(preset => buttons.name != null && device.name !== '');"
|
|
1144
1166
|
}
|
|
1145
1167
|
}
|
|
1146
1168
|
}
|
|
@@ -1180,7 +1202,7 @@
|
|
|
1180
1202
|
"type": "integer",
|
|
1181
1203
|
"minimum": 0,
|
|
1182
1204
|
"maximum": 2,
|
|
1183
|
-
"default":
|
|
1205
|
+
"default": 1,
|
|
1184
1206
|
"oneOf": [
|
|
1185
1207
|
{
|
|
1186
1208
|
"title": "None/Disabled",
|
|
@@ -1231,6 +1253,11 @@
|
|
|
1231
1253
|
"items": {
|
|
1232
1254
|
"type": "object",
|
|
1233
1255
|
"properties": {
|
|
1256
|
+
"id": {
|
|
1257
|
+
"title": "ID",
|
|
1258
|
+
"type": "integer",
|
|
1259
|
+
"required": false
|
|
1260
|
+
},
|
|
1234
1261
|
"name": {
|
|
1235
1262
|
"title": "Name",
|
|
1236
1263
|
"type": "string",
|
|
@@ -1293,6 +1320,9 @@
|
|
|
1293
1320
|
"required": false
|
|
1294
1321
|
}
|
|
1295
1322
|
}
|
|
1323
|
+
},
|
|
1324
|
+
"condition": {
|
|
1325
|
+
"functionBody": "const devicePresets = model.accounts[arrayIndices].devicesErv[arrayIndices]?.presets || []; return devicePresets.length > 0 && devicePresets.every(preset => preset.id != null && preset.id !== '');"
|
|
1296
1326
|
}
|
|
1297
1327
|
},
|
|
1298
1328
|
"buttonsSensors": {
|
|
@@ -1457,6 +1487,9 @@
|
|
|
1457
1487
|
"required": false
|
|
1458
1488
|
}
|
|
1459
1489
|
}
|
|
1490
|
+
},
|
|
1491
|
+
"condition": {
|
|
1492
|
+
"functionBody": "const buttons = model.accounts[arrayIndices].devicesErv[arrayIndices]?.buttons || []; return buttons.length > 0 && buttons.every(preset => buttons.name != null && device.name !== '');"
|
|
1460
1493
|
}
|
|
1461
1494
|
}
|
|
1462
1495
|
}
|
|
@@ -1708,6 +1741,10 @@
|
|
|
1708
1741
|
"type": "tabarray",
|
|
1709
1742
|
"title": "{{ value.name }}",
|
|
1710
1743
|
"items": [
|
|
1744
|
+
{
|
|
1745
|
+
"key": "accounts[].ataDevices[].presets[].id",
|
|
1746
|
+
"readonly": true
|
|
1747
|
+
},
|
|
1711
1748
|
"accounts[].ataDevices[].presets[].name",
|
|
1712
1749
|
"accounts[].ataDevices[].presets[].displayType",
|
|
1713
1750
|
"accounts[].ataDevices[].presets[].namePrefix"
|
|
@@ -1798,6 +1835,10 @@
|
|
|
1798
1835
|
"type": "tabarray",
|
|
1799
1836
|
"title": "{{ value.name }}",
|
|
1800
1837
|
"items": [
|
|
1838
|
+
{
|
|
1839
|
+
"key": "accounts[].atwDevices[].presets[].id",
|
|
1840
|
+
"readonly": true
|
|
1841
|
+
},
|
|
1801
1842
|
"accounts[].atwDevices[].presets[].name",
|
|
1802
1843
|
"accounts[].atwDevices[].presets[].displayType",
|
|
1803
1844
|
"accounts[].atwDevices[].presets[].namePrefix"
|
|
@@ -1882,6 +1923,10 @@
|
|
|
1882
1923
|
"type": "tabarray",
|
|
1883
1924
|
"title": "{{ value.name }}",
|
|
1884
1925
|
"items": [
|
|
1926
|
+
{
|
|
1927
|
+
"key": "accounts[].ervDevices[].presets[].id",
|
|
1928
|
+
"readonly": true
|
|
1929
|
+
},
|
|
1885
1930
|
"accounts[].ervDevices[].presets[].name",
|
|
1886
1931
|
"accounts[].ervDevices[].presets[].displayType",
|
|
1887
1932
|
"accounts[].ervDevices[].presets[].namePrefix"
|
|
@@ -223,6 +223,7 @@
|
|
|
223
223
|
const presetId = preset.ID;
|
|
224
224
|
const presetName = preset.NumberDescription;
|
|
225
225
|
|
|
226
|
+
preset.Id = presetId;
|
|
226
227
|
preset.name = presetName;
|
|
227
228
|
preset.displayType == 0;
|
|
228
229
|
preset.namePrefix = false;
|
|
@@ -279,6 +280,7 @@
|
|
|
279
280
|
const presetId = preset.ID;
|
|
280
281
|
const presetName = preset.NumberDescription;
|
|
281
282
|
|
|
283
|
+
preset.Id = presetId;
|
|
282
284
|
preset.name = presetName;
|
|
283
285
|
preset.displayType == 0;
|
|
284
286
|
preset.namePrefix = false;
|
|
@@ -329,6 +331,7 @@
|
|
|
329
331
|
const presetId = preset.ID;
|
|
330
332
|
const presetName = preset.NumberDescription;
|
|
331
333
|
|
|
334
|
+
preset.Id = presetId;
|
|
332
335
|
preset.name = presetName;
|
|
333
336
|
preset.displayType == 0;
|
|
334
337
|
preset.namePrefix = false;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "3.1.0-beta.
|
|
4
|
+
"version": "3.1.0-beta.7",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/deviceata.js
CHANGED
|
@@ -204,6 +204,9 @@ class DeviceAta extends EventEmitter {
|
|
|
204
204
|
const outdoorTemperature = deviceData.Device.OutdoorTemperature;
|
|
205
205
|
const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
|
|
206
206
|
|
|
207
|
+
//presets
|
|
208
|
+
const presetsOnServer = deviceData.Presets ?? [];
|
|
209
|
+
|
|
207
210
|
//device state
|
|
208
211
|
const roomTemperature = deviceState.RoomTemperature;
|
|
209
212
|
const setTemperature = deviceState.SetTemperature;
|
|
@@ -221,6 +224,7 @@ class DeviceAta extends EventEmitter {
|
|
|
221
224
|
const offline = deviceState.Offline;
|
|
222
225
|
|
|
223
226
|
//accessory
|
|
227
|
+
this.accessory.presetsOnServer = presetsOnServer;
|
|
224
228
|
this.accessory.power = power;
|
|
225
229
|
this.accessory.offline = offline;
|
|
226
230
|
this.accessory.roomTemperature = roomTemperature;
|
|
@@ -425,6 +429,28 @@ class DeviceAta extends EventEmitter {
|
|
|
425
429
|
.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature)
|
|
426
430
|
};
|
|
427
431
|
|
|
432
|
+
//update presets state
|
|
433
|
+
if (this.presetsConfigured.length > 0) {
|
|
434
|
+
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
435
|
+
const preset = this.presetsConfigured[i];
|
|
436
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
437
|
+
const presetData = presetsOnServer[index];
|
|
438
|
+
|
|
439
|
+
preset.state = presetData ? (presetData.Power === power
|
|
440
|
+
&& presetData.SetTemperature === setTemperature
|
|
441
|
+
&& presetData.OperationMode === operationMode
|
|
442
|
+
&& presetData.VaneHorizontal === vaneHorizontal
|
|
443
|
+
&& presetData.VaneVertical === vaneVertical
|
|
444
|
+
&& presetData.FanSpeed === setFanSpeed) : false;
|
|
445
|
+
|
|
446
|
+
if (this.presetsServices) {
|
|
447
|
+
const characteristicType = preset.characteristicType;
|
|
448
|
+
this.presetsServices[i]
|
|
449
|
+
.updateCharacteristic(characteristicType, preset.state)
|
|
450
|
+
};
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
|
|
428
454
|
//update buttons state
|
|
429
455
|
if (this.buttonsConfiguredCount > 0) {
|
|
430
456
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
@@ -550,25 +576,6 @@ class DeviceAta extends EventEmitter {
|
|
|
550
576
|
};
|
|
551
577
|
};
|
|
552
578
|
|
|
553
|
-
//update presets state
|
|
554
|
-
if (this.presetsConfigured.length > 0) {
|
|
555
|
-
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
556
|
-
const preset = this.presetsConfigured[i];
|
|
557
|
-
preset.state = (preset.Power === power
|
|
558
|
-
&& preset.SetTemperature === setTemperature
|
|
559
|
-
&& preset.OperationMode === operationMode
|
|
560
|
-
&& preset.VaneHorizontal === vaneHorizontal
|
|
561
|
-
&& preset.VaneVertical === vaneVertical
|
|
562
|
-
&& preset.FanSpeed === setFanSpeed) ?? false;
|
|
563
|
-
|
|
564
|
-
if (this.presetsServices) {
|
|
565
|
-
const characteristicType = preset.characteristicType;
|
|
566
|
-
this.presetsServices[i]
|
|
567
|
-
.updateCharacteristic(characteristicType, preset.state)
|
|
568
|
-
};
|
|
569
|
-
};
|
|
570
|
-
};
|
|
571
|
-
|
|
572
579
|
//log current state
|
|
573
580
|
if (!this.disableLogInfo) {
|
|
574
581
|
const operationModeText = !power ? CONSTANTS.AirConditioner.System[0] : CONSTANTS.AirConditioner.DriveMode[operationMode];
|
|
@@ -708,6 +715,7 @@ class DeviceAta extends EventEmitter {
|
|
|
708
715
|
.setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
|
|
709
716
|
|
|
710
717
|
//melcloud services
|
|
718
|
+
const presetsOnServer = this.accessory.presetsOnServer;
|
|
711
719
|
const displayMode = this.displayMode;
|
|
712
720
|
const temperatureSensor = this.temperatureSensor;
|
|
713
721
|
const temperatureSensorOutdoor = this.temperatureSensorOutdoor;
|
|
@@ -1081,9 +1089,8 @@ class DeviceAta extends EventEmitter {
|
|
|
1081
1089
|
|
|
1082
1090
|
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1083
1091
|
const preset = presetsConfigured[i];
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
const displayType = preset.displayType;
|
|
1092
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
1093
|
+
const presetData = presetsOnServer[index];
|
|
1087
1094
|
|
|
1088
1095
|
//get button name
|
|
1089
1096
|
const presetName = preset.name;
|
|
@@ -1107,12 +1114,12 @@ class DeviceAta extends EventEmitter {
|
|
|
1107
1114
|
switch (state) {
|
|
1108
1115
|
case true:
|
|
1109
1116
|
previousPresets[i] = deviceState;
|
|
1110
|
-
deviceState.SetTemperature =
|
|
1111
|
-
deviceState.Power =
|
|
1112
|
-
deviceState.OperationMode =
|
|
1113
|
-
deviceState.VaneHorizontal =
|
|
1114
|
-
deviceState.VaneVertical =
|
|
1115
|
-
deviceState.SetFanSpeed =
|
|
1117
|
+
deviceState.SetTemperature = presetData.SetTemperature;
|
|
1118
|
+
deviceState.Power = presetData.Power;
|
|
1119
|
+
deviceState.OperationMode = presetData.OperationMode;
|
|
1120
|
+
deviceState.VaneHorizontal = presetData.VaneHorizontal;
|
|
1121
|
+
deviceState.VaneVertical = presetData.VaneVertical;
|
|
1122
|
+
deviceState.SetFanSpeed = presetData.FanSpeed;
|
|
1116
1123
|
deviceState.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.Power;
|
|
1117
1124
|
break;
|
|
1118
1125
|
case false:
|
package/src/deviceatw.js
CHANGED
|
@@ -214,6 +214,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
214
214
|
const returnTemperatureZone2 = deviceData.Device.ReturnTemperatureZone2;
|
|
215
215
|
const returnTemperatureWaterTank = deviceData.Device.ReturnTemperatureBoiler;
|
|
216
216
|
|
|
217
|
+
//presets
|
|
218
|
+
const presetsOnServer = deviceData.Presets ?? [];
|
|
219
|
+
|
|
217
220
|
//zones
|
|
218
221
|
const hotWater = hasHotWaterTank ? 1 : 0;
|
|
219
222
|
const zone2 = hasZone2 ? 1 : 0;
|
|
@@ -254,6 +257,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
254
257
|
const offline = deviceState.Offline;
|
|
255
258
|
|
|
256
259
|
//accessory
|
|
260
|
+
this.accessory.presetsOnServer = presetsOnServer;
|
|
257
261
|
this.accessory.power = power;
|
|
258
262
|
this.accessory.offline = offline;
|
|
259
263
|
this.accessory.unitStatus = unitStatus;
|
|
@@ -570,6 +574,34 @@ class DeviceAtw extends EventEmitter {
|
|
|
570
574
|
};
|
|
571
575
|
};
|
|
572
576
|
|
|
577
|
+
//update presets state
|
|
578
|
+
if (this.presetsConfigured.length > 0) {
|
|
579
|
+
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
580
|
+
const preset = this.presetsConfigured[i];
|
|
581
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
582
|
+
const presetData = presetsOnServer[index];
|
|
583
|
+
|
|
584
|
+
preset.state = presetData ? (preset.Power === power
|
|
585
|
+
&& preset.EcoHotWater === ecoHotWater
|
|
586
|
+
&& preset.OperationModeZone1 === operationModeZone1
|
|
587
|
+
&& preset.OperationModeZone2 === operationModeZone2
|
|
588
|
+
&& preset.SetTankWaterTemperature === setTankWaterTemperature
|
|
589
|
+
&& preset.SetTemperatureZone1 === setTemperatureZone1
|
|
590
|
+
&& preset.SetTemperatureZone2 === setTemperatureZone2
|
|
591
|
+
&& preset.ForcedHotWaterMode === forcedHotWaterMode
|
|
592
|
+
&& preset.SetHeatFlowTemperatureZone1 === setHeatFlowTemperatureZone1
|
|
593
|
+
&& preset.SetHeatFlowTemperatureZone2 === setHeatFlowTemperatureZone2
|
|
594
|
+
&& preset.SetCoolFlowTemperatureZone1 === setCoolFlowTemperatureZone1
|
|
595
|
+
&& preset.SetCoolFlowTemperatureZone2 === setCoolFlowTemperatureZone2) : false;
|
|
596
|
+
|
|
597
|
+
if (this.presetsServices) {
|
|
598
|
+
const characteristicType = preset.characteristicType;
|
|
599
|
+
this.presetsServices[i]
|
|
600
|
+
.updateCharacteristic(characteristicType, preset.state)
|
|
601
|
+
};
|
|
602
|
+
};
|
|
603
|
+
};
|
|
604
|
+
|
|
573
605
|
//update buttons state
|
|
574
606
|
if (this.buttonsConfiguredCount > 0) {
|
|
575
607
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
@@ -659,31 +691,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
659
691
|
};
|
|
660
692
|
};
|
|
661
693
|
|
|
662
|
-
//update presets state
|
|
663
|
-
if (this.presetsConfigured.length > 0) {
|
|
664
|
-
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
665
|
-
const preset = this.presetsConfigured[i];
|
|
666
|
-
preset.state = (preset.Power === power
|
|
667
|
-
&& preset.EcoHotWater === ecoHotWater
|
|
668
|
-
&& preset.OperationModeZone1 === operationModeZone1
|
|
669
|
-
&& preset.OperationModeZone2 === operationModeZone2
|
|
670
|
-
&& preset.SetTankWaterTemperature === setTankWaterTemperature
|
|
671
|
-
&& preset.SetTemperatureZone1 === setTemperatureZone1
|
|
672
|
-
&& preset.SetTemperatureZone2 === setTemperatureZone2
|
|
673
|
-
&& preset.ForcedHotWaterMode === forcedHotWaterMode
|
|
674
|
-
&& preset.SetHeatFlowTemperatureZone1 === setHeatFlowTemperatureZone1
|
|
675
|
-
&& preset.SetHeatFlowTemperatureZone2 === setHeatFlowTemperatureZone2
|
|
676
|
-
&& preset.SetCoolFlowTemperatureZone1 === setCoolFlowTemperatureZone1
|
|
677
|
-
&& preset.SetCoolFlowTemperatureZone2 === setCoolFlowTemperatureZone2) ?? false;
|
|
678
|
-
|
|
679
|
-
if (this.presetsServices) {
|
|
680
|
-
const characteristicType = preset.characteristicType;
|
|
681
|
-
this.presetsServices[i]
|
|
682
|
-
.updateCharacteristic(characteristicType, preset.state)
|
|
683
|
-
};
|
|
684
|
-
};
|
|
685
|
-
};
|
|
686
|
-
|
|
687
694
|
//start prepare accessory
|
|
688
695
|
if (this.startPrepareAccessory) {
|
|
689
696
|
try {
|
|
@@ -827,6 +834,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
827
834
|
|
|
828
835
|
//melcloud services
|
|
829
836
|
const zonesCount = this.zonesCount;
|
|
837
|
+
const presetsOnServer = this.accessory.presetsOnServer;
|
|
830
838
|
const temperatureSensor = this.temperatureSensor;
|
|
831
839
|
const temperatureSensorFlow = this.temperatureSensorFlow;
|
|
832
840
|
const temperatureSensorReturn = this.temperatureSensorReturn;
|
|
@@ -1529,9 +1537,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1529
1537
|
|
|
1530
1538
|
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1531
1539
|
const preset = presetsConfigured[i];
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
const displayType = preset.displayType;
|
|
1540
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
1541
|
+
const presetData = presetsOnServer[index];
|
|
1535
1542
|
|
|
1536
1543
|
//get button name
|
|
1537
1544
|
const presetName = preset.name;
|
|
@@ -1555,18 +1562,18 @@ class DeviceAtw extends EventEmitter {
|
|
|
1555
1562
|
switch (state) {
|
|
1556
1563
|
case true:
|
|
1557
1564
|
previousPresets[i] = deviceState;
|
|
1558
|
-
deviceState.Power =
|
|
1559
|
-
deviceState.EcoHotWater =
|
|
1560
|
-
deviceState.OperationModeZone1 =
|
|
1561
|
-
deviceState.OperationModeZone2 =
|
|
1562
|
-
deviceState.SetTankWaterTemperature =
|
|
1563
|
-
deviceState.SetTemperatureZone1 =
|
|
1564
|
-
deviceState.SetTemperatureZone2 =
|
|
1565
|
-
deviceState.ForcedHotWaterMode =
|
|
1566
|
-
deviceState.SetHeatFlowTemperatureZone1 =
|
|
1567
|
-
deviceState.SetHeatFlowTemperatureZone2 =
|
|
1568
|
-
deviceState.SetCoolFlowTemperatureZone1 =
|
|
1569
|
-
deviceState.SetCoolFlowTemperatureZone2 =
|
|
1565
|
+
deviceState.Power = presetData.Power;
|
|
1566
|
+
deviceState.EcoHotWater = presetData.EcoHotWater;
|
|
1567
|
+
deviceState.OperationModeZone1 = presetData.OperationModeZone1;
|
|
1568
|
+
deviceState.OperationModeZone2 = presetData.OperationModeZone2;
|
|
1569
|
+
deviceState.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
|
|
1570
|
+
deviceState.SetTemperatureZone1 = presetData.SetTemperatureZone1;
|
|
1571
|
+
deviceState.SetTemperatureZone2 = presetData.SetTemperatureZone2;
|
|
1572
|
+
deviceState.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
|
|
1573
|
+
deviceState.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
|
|
1574
|
+
deviceState.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
|
|
1575
|
+
deviceState.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
|
|
1576
|
+
deviceState.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
|
|
1570
1577
|
deviceState.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1571
1578
|
break;
|
|
1572
1579
|
case false:
|
package/src/deviceerv.js
CHANGED
|
@@ -211,6 +211,9 @@ class DeviceErv extends EventEmitter {
|
|
|
211
211
|
const numberOfFanSpeeds = deviceData.Device.NumberOfFanSpeeds ?? 0;
|
|
212
212
|
const temperatureIncrement = deviceData.Device.TemperatureIncrement ?? 1;
|
|
213
213
|
|
|
214
|
+
//presets
|
|
215
|
+
const presetsOnServer = deviceData.Presets ?? [];
|
|
216
|
+
|
|
214
217
|
//device state
|
|
215
218
|
const roomTemperature = deviceState.RoomTemperature;
|
|
216
219
|
const supplyTemperature = deviceState.SupplyTemperature;
|
|
@@ -231,6 +234,7 @@ class DeviceErv extends EventEmitter {
|
|
|
231
234
|
const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
|
|
232
235
|
|
|
233
236
|
//accessory
|
|
237
|
+
this.accessory.presetsOnServer = presetsOnServer;
|
|
234
238
|
this.accessory.power = power;
|
|
235
239
|
this.accessory.offline = offline;
|
|
236
240
|
this.accessory.roomTemperature = roomTemperature;
|
|
@@ -434,6 +438,27 @@ class DeviceErv extends EventEmitter {
|
|
|
434
438
|
.updateCharacteristic(Characteristic.PM2_5Density, pM25Level)
|
|
435
439
|
}
|
|
436
440
|
|
|
441
|
+
//update presets state
|
|
442
|
+
if (this.presetsConfigured.length > 0) {
|
|
443
|
+
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
444
|
+
const preset = this.presetsConfigured[i];
|
|
445
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
446
|
+
const presetData = presetsOnServer[index];
|
|
447
|
+
|
|
448
|
+
preset.state = presetData ? (preset.Power === power
|
|
449
|
+
&& preset.SetTemperature === targetTemperature
|
|
450
|
+
&& preset.OperationMode === operationMode
|
|
451
|
+
&& preset.VentilationMode === ventilationMode
|
|
452
|
+
&& preset.FanSpeed === setFanSpeed) : false;
|
|
453
|
+
|
|
454
|
+
if (this.presetsServices) {
|
|
455
|
+
const characteristicType = preset.characteristicType;
|
|
456
|
+
this.presetsServices[i]
|
|
457
|
+
.updateCharacteristic(characteristicType, preset.state)
|
|
458
|
+
};
|
|
459
|
+
};
|
|
460
|
+
};
|
|
461
|
+
|
|
437
462
|
//update buttons state
|
|
438
463
|
if (this.buttonsConfiguredCount > 0) {
|
|
439
464
|
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
@@ -496,24 +521,6 @@ class DeviceErv extends EventEmitter {
|
|
|
496
521
|
};
|
|
497
522
|
};
|
|
498
523
|
|
|
499
|
-
//update presets state
|
|
500
|
-
if (this.presetsConfigured.length > 0) {
|
|
501
|
-
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
502
|
-
const preset = this.presetsConfigured[i];
|
|
503
|
-
preset.state = (preset.Power === power
|
|
504
|
-
&& preset.SetTemperature === targetTemperature
|
|
505
|
-
&& preset.OperationMode === operationMode
|
|
506
|
-
&& preset.VentilationMode === ventilationMode
|
|
507
|
-
&& preset.FanSpeed === setFanSpeed) ?? false;
|
|
508
|
-
|
|
509
|
-
if (this.presetsServices) {
|
|
510
|
-
const characteristicType = preset.characteristicType;
|
|
511
|
-
this.presetsServices[i]
|
|
512
|
-
.updateCharacteristic(characteristicType, preset.state)
|
|
513
|
-
};
|
|
514
|
-
};
|
|
515
|
-
};
|
|
516
|
-
|
|
517
524
|
//log current state
|
|
518
525
|
if (!this.disableLogInfo) {
|
|
519
526
|
const operationModeText = !power ? CONSTANTS.Ventilation.System[0] : CONSTANTS.Ventilation.OperationMode[ventilationMode];
|
|
@@ -648,6 +655,7 @@ class DeviceErv extends EventEmitter {
|
|
|
648
655
|
.setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
|
|
649
656
|
|
|
650
657
|
//melcloud services
|
|
658
|
+
const presetsOnServer = this.accessory.presetsOnServer;
|
|
651
659
|
const displayMode = this.displayMode;
|
|
652
660
|
const temperatureSensor = this.temperatureSensor;
|
|
653
661
|
const temperatureSensorOutdoor = this.temperatureSensorOutdoor;
|
|
@@ -1078,9 +1086,8 @@ class DeviceErv extends EventEmitter {
|
|
|
1078
1086
|
|
|
1079
1087
|
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1080
1088
|
const preset = presetsConfigured[i];
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
const displayType = preset.displayType;
|
|
1089
|
+
const index = presetsOnServer.findIndex(p => p.ID === preset.Id);
|
|
1090
|
+
const presetData = presetsOnServer[index]
|
|
1084
1091
|
|
|
1085
1092
|
//get button name
|
|
1086
1093
|
const presetName = preset.name;
|
|
@@ -1104,11 +1111,11 @@ class DeviceErv extends EventEmitter {
|
|
|
1104
1111
|
switch (state) {
|
|
1105
1112
|
case true:
|
|
1106
1113
|
previousPresets[i] = deviceState;
|
|
1107
|
-
deviceState.SetTemperature =
|
|
1108
|
-
deviceState.Power =
|
|
1109
|
-
deviceState.OperationMode =
|
|
1110
|
-
deviceState.VentilationMode =
|
|
1111
|
-
deviceState.SetFanSpeed =
|
|
1114
|
+
deviceState.SetTemperature = presetData.SetTemperature;
|
|
1115
|
+
deviceState.Power = presetData.Power;
|
|
1116
|
+
deviceState.OperationMode = presetData.OperationMode;
|
|
1117
|
+
deviceState.VentilationMode = presetData.VentilationMode;
|
|
1118
|
+
deviceState.SetFanSpeed = presetData.FanSpeed;
|
|
1112
1119
|
deviceState.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.Power;
|
|
1113
1120
|
break;
|
|
1114
1121
|
case false:
|