homebridge-melcloud-control 3.1.11 → 3.1.16
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/README.md +8 -8
- package/package.json +2 -2
- package/src/deviceata.js +346 -350
- package/src/deviceatw.js +342 -337
- package/src/deviceerv.js +197 -199
- package/src/melcloudata.js +70 -60
- package/src/melcloudatw.js +66 -47
- package/src/melclouderv.js +44 -36
package/src/deviceatw.js
CHANGED
|
@@ -42,6 +42,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
42
42
|
this.refreshInterval = refreshInterval;
|
|
43
43
|
this.useFahrenheit = useFahrenheit;
|
|
44
44
|
this.startPrepareAccessory = true;
|
|
45
|
+
this.displayDeviceInfo = true;
|
|
45
46
|
|
|
46
47
|
//external integrations
|
|
47
48
|
this.restFul = account.restFul ?? {};
|
|
@@ -76,10 +77,10 @@ class DeviceAtw extends EventEmitter {
|
|
|
76
77
|
this.buttonsConfigured = [];
|
|
77
78
|
for (const button of this.buttons) {
|
|
78
79
|
const buttonName = button.name ?? false;
|
|
79
|
-
const buttonMode = button.mode ??
|
|
80
|
+
const buttonMode = button.mode ?? -1;
|
|
80
81
|
const buttonDisplayType = button.displayType ?? 0;
|
|
81
82
|
const buttonNamePrefix = button.namePrefix ?? false;
|
|
82
|
-
if (buttonName && buttonMode && buttonDisplayType > 0) {
|
|
83
|
+
if (buttonName && buttonMode >= 0 && buttonDisplayType > 0) {
|
|
83
84
|
const buttonServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][buttonDisplayType];
|
|
84
85
|
const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][buttonDisplayType];
|
|
85
86
|
button.namePrefix = buttonNamePrefix;
|
|
@@ -107,7 +108,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
107
108
|
debugLog: this.enableDebugMode
|
|
108
109
|
});
|
|
109
110
|
|
|
110
|
-
this.melCloudAtw.on('externalIntegrations', (deviceData
|
|
111
|
+
this.melCloudAtw.on('externalIntegrations', (deviceData) => {
|
|
111
112
|
try {
|
|
112
113
|
//RESTFul server
|
|
113
114
|
const restFulEnabled = this.restFul.enable || false;
|
|
@@ -124,7 +125,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
124
125
|
})
|
|
125
126
|
.on('set', async (key, value) => {
|
|
126
127
|
try {
|
|
127
|
-
await this.setOverExternalIntegration('RESTFul',
|
|
128
|
+
await this.setOverExternalIntegration('RESTFul', deviceData, key, value);
|
|
128
129
|
} catch (error) {
|
|
129
130
|
this.emit('warn', `RESTFul set error: ${error}.`);
|
|
130
131
|
};
|
|
@@ -137,7 +138,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
137
138
|
});
|
|
138
139
|
}
|
|
139
140
|
const restFul0 = this.restFulConnected ? this.restFul1.update('info', deviceData) : false;
|
|
140
|
-
const restFul1 = this.restFulConnected ? this.restFul1.update('state',
|
|
141
|
+
const restFul1 = this.restFulConnected ? this.restFul1.update('state', deviceData.Device) : false;
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
//MQTT client
|
|
@@ -163,7 +164,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
163
164
|
})
|
|
164
165
|
.on('set', async (key, value) => {
|
|
165
166
|
try {
|
|
166
|
-
await this.setOverExternalIntegration('MQTT',
|
|
167
|
+
await this.setOverExternalIntegration('MQTT', deviceData, key, value);
|
|
167
168
|
} catch (error) {
|
|
168
169
|
this.emit('warn', `MQTT set error: ${error}.`);
|
|
169
170
|
};
|
|
@@ -176,13 +177,17 @@ class DeviceAtw extends EventEmitter {
|
|
|
176
177
|
});
|
|
177
178
|
}
|
|
178
179
|
const mqtt0 = this.mqttConnected ? this.mqtt1.emit('publish', `Info`, deviceData) : false;
|
|
179
|
-
const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`,
|
|
180
|
+
const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`, deviceData.Device) : false;
|
|
180
181
|
}
|
|
181
182
|
} catch (error) {
|
|
182
183
|
this.emit('warn', `External integration start error: ${error.message || error}.`);
|
|
183
184
|
};
|
|
184
185
|
})
|
|
185
186
|
.on('deviceInfo', (manufacturer, modelIndoor, modelOutdoor, serialNumber, firmwareAppVersion, hasHotWaterTank, hasZone2) => {
|
|
187
|
+
if (!this.displayDeviceInfo) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
186
191
|
if (!this.disableLogDeviceInfo) {
|
|
187
192
|
this.emit('devInfo', `---- ${this.deviceTypeText}: ${this.deviceName} ----`);
|
|
188
193
|
this.emit('devInfo', `Account: ${this.accountName}`);
|
|
@@ -202,8 +207,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
202
207
|
this.model = modelIndoor ? modelIndoor : modelOutdoor ? modelOutdoor : `${this.deviceTypeText} ${this.deviceId}`;
|
|
203
208
|
this.serialNumber = serialNumber;
|
|
204
209
|
this.firmwareRevision = firmwareAppVersion;
|
|
210
|
+
this.displayDeviceInfo = false;
|
|
205
211
|
})
|
|
206
|
-
.on('deviceState', async (deviceData
|
|
212
|
+
.on('deviceState', async (deviceData) => {
|
|
207
213
|
//device info
|
|
208
214
|
const displayMode = this.displayMode;
|
|
209
215
|
const heatPumpName = 'Heat Pump';
|
|
@@ -245,36 +251,36 @@ class DeviceAtw extends EventEmitter {
|
|
|
245
251
|
this.caseZone2 = caseZone2;
|
|
246
252
|
|
|
247
253
|
//device state
|
|
248
|
-
const
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
const
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
const
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
const
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
const
|
|
272
|
-
const
|
|
254
|
+
const power = deviceData.Device.Power ?? false;
|
|
255
|
+
const offline = deviceData.Device.Offline ?? false;
|
|
256
|
+
const setTemperatureZone1 = deviceData.Device.SetTemperatureZone1;
|
|
257
|
+
const setTemperatureZone2 = deviceData.Device.SetTemperatureZone2;
|
|
258
|
+
const roomTemperatureZone1 = deviceData.Device.RoomTemperatureZone1;
|
|
259
|
+
const roomTemperatureZone2 = deviceData.Device.RoomTemperatureZone2;
|
|
260
|
+
const operationMode = deviceData.Device.OperationMode;
|
|
261
|
+
const operationModeZone1 = deviceData.Device.OperationModeZone1;
|
|
262
|
+
const operationModeZone2 = deviceData.Device.OperationModeZone2;
|
|
263
|
+
const setHeatFlowTemperatureZone1 = deviceData.Device.SetHeatFlowTemperatureZone1;
|
|
264
|
+
const setHeatFlowTemperatureZone2 = deviceData.Device.SetHeatFlowTemperatureZone2;
|
|
265
|
+
const setCoolFlowTemperatureZone1 = deviceData.Device.SetCoolFlowTemperatureZone1;
|
|
266
|
+
const setCoolFlowTemperatureZone2 = deviceData.Device.SetCoolFlowTemperatureZone2;
|
|
267
|
+
const tankWaterTemperature = deviceData.Device.TankWaterTemperature;
|
|
268
|
+
const setTankWaterTemperature = deviceData.Device.SetTankWaterTemperature;
|
|
269
|
+
const forcedHotWaterMode = deviceData.Device.ForcedHotWaterMode ? 1 : 0;
|
|
270
|
+
const unitStatus = deviceData.Device.UnitStatus ?? 0;
|
|
271
|
+
const outdoorTemperature = deviceData.Device.OutdoorTemperature;
|
|
272
|
+
const ecoHotWater = deviceData.Device.EcoHotWater ?? false;
|
|
273
|
+
const holidayMode = deviceData.Device.HolidayMode ?? false;
|
|
274
|
+
const prohibitZone1 = deviceData.Device.ProhibitZone1 ?? false;
|
|
275
|
+
const prohibitZone2 = deviceData.Device.ProhibitZone2 ?? false;
|
|
276
|
+
const prohibitHotWater = deviceData.Device.ProhibitHotWater ?? false;
|
|
277
|
+
const idleZone1 = deviceData.Device.IdleZone1 ?? false;
|
|
278
|
+
const idleZone2 = deviceData.Device.IdleZone2 ?? false;
|
|
273
279
|
|
|
274
280
|
//accessory
|
|
275
281
|
this.accessory.presetsOnServer = presetsOnServer;
|
|
276
282
|
this.accessory.power = power ? 1 : 0;
|
|
277
|
-
this.accessory.offline = offline;
|
|
283
|
+
this.accessory.offline = offline ?? false;
|
|
278
284
|
this.accessory.unitStatus = unitStatus;
|
|
279
285
|
this.accessory.idleZone1 = idleZone1;
|
|
280
286
|
this.accessory.idleZone2 = idleZone2;
|
|
@@ -454,6 +460,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
454
460
|
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
|
|
455
461
|
}
|
|
456
462
|
break;
|
|
463
|
+
default:
|
|
464
|
+
this.emit('warn', `Unknown display mode: ${displayMode}`);
|
|
465
|
+
return;
|
|
457
466
|
};
|
|
458
467
|
|
|
459
468
|
//push value to arrays
|
|
@@ -594,8 +603,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
594
603
|
if (this.presetsConfigured.length > 0) {
|
|
595
604
|
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
596
605
|
const preset = this.presetsConfigured[i];
|
|
597
|
-
const
|
|
598
|
-
const presetData = presetsOnServer[index];
|
|
606
|
+
const presetData = presetsOnServer.find(p => p.ID === preset.Id);
|
|
599
607
|
|
|
600
608
|
preset.state = presetData ? (presetData.Power === power
|
|
601
609
|
&& presetData.EcoHotWater === ecoHotWater
|
|
@@ -713,7 +721,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
713
721
|
}
|
|
714
722
|
|
|
715
723
|
try {
|
|
716
|
-
const accessory = await this.prepareAccessory(this.accountInfo,
|
|
724
|
+
const accessory = await this.prepareAccessory(this.accountInfo, deviceData, this.deviceId, this.deviceTypeText, this.deviceName, this.accountName);
|
|
717
725
|
this.emit('publishAccessory', accessory);
|
|
718
726
|
this.startPrepareAccessory = false;
|
|
719
727
|
} catch (error) {
|
|
@@ -731,8 +739,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
731
739
|
})
|
|
732
740
|
.on('error', async (error) => {
|
|
733
741
|
this.emit('error', error);
|
|
734
|
-
await new Promise(resolve => setTimeout(resolve, 15000));
|
|
735
|
-
await this.melCloudAtw.impulseGenerator.start([{ name: 'checkState', sampling: this.refreshInterval }]);
|
|
736
742
|
});
|
|
737
743
|
|
|
738
744
|
//check state
|
|
@@ -747,94 +753,94 @@ class DeviceAtw extends EventEmitter {
|
|
|
747
753
|
};
|
|
748
754
|
};
|
|
749
755
|
|
|
750
|
-
async setOverExternalIntegration(integration,
|
|
756
|
+
async setOverExternalIntegration(integration, deviceData, key, value) {
|
|
751
757
|
try {
|
|
752
758
|
let set = false
|
|
753
759
|
switch (key) {
|
|
754
760
|
case 'Power':
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
set = await this.melCloudAtw.send(
|
|
761
|
+
deviceData.Device[key] = value;
|
|
762
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
763
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
758
764
|
break;
|
|
759
765
|
case 'OperationMode':
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
set = await this.melCloudAtw.send(
|
|
766
|
+
deviceData.Device[key] = value;
|
|
767
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
768
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
763
769
|
break;
|
|
764
770
|
case 'OperationModeZone1':
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
set = await this.melCloudAtw.send(
|
|
771
|
+
deviceData.Device[key] = value;
|
|
772
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
773
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
768
774
|
break;
|
|
769
775
|
case 'OperationModeZone2':
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
set = await this.melCloudAtw.send(
|
|
776
|
+
deviceData.Device[key] = value;
|
|
777
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
778
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
773
779
|
break;
|
|
774
780
|
case 'SetTemperatureZone1':
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
set = await this.melCloudAtw.send(
|
|
781
|
+
deviceData.Device[key] = value;
|
|
782
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
783
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
778
784
|
break;
|
|
779
785
|
case 'SetTemperatureZone2':
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
set = await this.melCloudAtw.send(
|
|
786
|
+
deviceData.Device[key] = value;
|
|
787
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
788
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
783
789
|
break;
|
|
784
790
|
case 'SetHeatFlowTemperatureZone1':
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
set = await this.melCloudAtw.send(
|
|
791
|
+
deviceData.Device[key] = value;
|
|
792
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone1;
|
|
793
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
788
794
|
break;
|
|
789
795
|
case 'SetHeatFlowTemperatureZone2':
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
set = await this.melCloudAtw.send(
|
|
796
|
+
deviceData.Device[key] = value;
|
|
797
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetHeatFlowTemperatureZone2;
|
|
798
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
793
799
|
break;
|
|
794
800
|
case 'SetCoolFlowTemperatureZone1':
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
set = await this.melCloudAtw.send(
|
|
801
|
+
deviceData.Device[key] = value;
|
|
802
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone1;
|
|
803
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
798
804
|
break;
|
|
799
805
|
case 'SetCoolFlowTemperatureZone2':
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
set = await this.melCloudAtw.send(
|
|
806
|
+
deviceData.Device[key] = value;
|
|
807
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetCoolFlowTemperatureZone2;
|
|
808
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
803
809
|
break;
|
|
804
810
|
case 'SetTankWaterTemperature':
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
set = await this.melCloudAtw.send(
|
|
811
|
+
deviceData.Device[key] = value;
|
|
812
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
813
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
808
814
|
break;
|
|
809
815
|
case 'ForcedHotWaterMode':
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
set = await this.melCloudAtw.send(
|
|
816
|
+
deviceData.Device[key] = value;
|
|
817
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
818
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
813
819
|
break;
|
|
814
820
|
case 'EcoHotWater':
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
set = await this.melCloudAtw.send(
|
|
821
|
+
deviceData.Device[key] = value;
|
|
822
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
|
|
823
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
818
824
|
break;
|
|
819
825
|
case 'HolidayMode':
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
set = await this.melCloudAtw.send(
|
|
826
|
+
deviceData.Device[key] = value;
|
|
827
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
|
|
828
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
823
829
|
break;
|
|
824
830
|
case 'ProhibitZone1':
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
set = await this.melCloudAtw.send(
|
|
831
|
+
deviceData.Device[key] = value;
|
|
832
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone1;
|
|
833
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
828
834
|
break;
|
|
829
835
|
case 'ProhibitZone2':
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
set = await this.melCloudAtw.send(
|
|
836
|
+
deviceData.Device[key] = value;
|
|
837
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitZone2;
|
|
838
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
833
839
|
break;
|
|
834
840
|
case 'ProhibitHotWater':
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
set = await this.melCloudAtw.send(
|
|
841
|
+
deviceData.Device[key] = value;
|
|
842
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
843
|
+
set = await this.melCloudAtw.send(deviceData);
|
|
838
844
|
break;
|
|
839
845
|
default:
|
|
840
846
|
this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
|
|
@@ -846,7 +852,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
846
852
|
};
|
|
847
853
|
}
|
|
848
854
|
//prepare accessory
|
|
849
|
-
async prepareAccessory(accountInfo,
|
|
855
|
+
async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
|
|
850
856
|
try {
|
|
851
857
|
//accessory
|
|
852
858
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
|
|
@@ -901,9 +907,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
901
907
|
try {
|
|
902
908
|
switch (i) {
|
|
903
909
|
case 0: //Heat Pump
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
await this.melCloudAtw.send(
|
|
910
|
+
deviceData.Device.Power = [false, true][state];
|
|
911
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
912
|
+
await this.melCloudAtw.send(deviceData);
|
|
907
913
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set power: ${state ? 'ON' : 'OFF'}`);
|
|
908
914
|
break;
|
|
909
915
|
};
|
|
@@ -933,76 +939,76 @@ class DeviceAtw extends EventEmitter {
|
|
|
933
939
|
case 0: //Heat Pump - ON, HEAT, COOL
|
|
934
940
|
switch (value) {
|
|
935
941
|
case 0: //AUTO
|
|
936
|
-
|
|
937
|
-
|
|
942
|
+
deviceData.Device.Power = true;
|
|
943
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
938
944
|
break;
|
|
939
945
|
case 1: //HEAT
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
946
|
+
deviceData.Device.Power = true;
|
|
947
|
+
deviceData.Device.UnitStatus = 0;
|
|
948
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
943
949
|
break;
|
|
944
950
|
case 2: //COOL
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
951
|
+
deviceData.Device.Power = true;
|
|
952
|
+
deviceData.Device.UnitStatus = 1;
|
|
953
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
948
954
|
break;
|
|
949
955
|
};
|
|
950
|
-
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[
|
|
956
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
951
957
|
break;
|
|
952
958
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
953
959
|
switch (value) {
|
|
954
960
|
case 0: //AUTO - HEAT CURVE
|
|
955
|
-
|
|
956
|
-
|
|
961
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
962
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
957
963
|
break;
|
|
958
964
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
959
|
-
|
|
960
|
-
|
|
965
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
966
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
961
967
|
break;
|
|
962
968
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
963
|
-
|
|
964
|
-
|
|
969
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
970
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
965
971
|
break;
|
|
966
972
|
};
|
|
967
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
973
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
968
974
|
break;
|
|
969
975
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
970
976
|
switch (value) {
|
|
971
977
|
case 0: //AUTO
|
|
972
|
-
|
|
973
|
-
|
|
978
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
979
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
974
980
|
break;
|
|
975
981
|
case 1: //HEAT
|
|
976
|
-
|
|
977
|
-
|
|
982
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
983
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
978
984
|
break;
|
|
979
985
|
case 2: //COOL
|
|
980
|
-
|
|
981
|
-
|
|
986
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
987
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
982
988
|
break
|
|
983
989
|
};
|
|
984
|
-
operationModeText =
|
|
990
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
985
991
|
break;
|
|
986
992
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
987
993
|
switch (value) {
|
|
988
994
|
case 0: //AUTO
|
|
989
|
-
|
|
990
|
-
|
|
995
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
996
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
991
997
|
break;
|
|
992
998
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
993
|
-
|
|
994
|
-
|
|
999
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
1000
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
995
1001
|
break;
|
|
996
1002
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
997
|
-
|
|
998
|
-
|
|
1003
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1004
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
999
1005
|
break;
|
|
1000
1006
|
};
|
|
1001
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1007
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1002
1008
|
break;
|
|
1003
1009
|
};
|
|
1004
1010
|
|
|
1005
|
-
await this.melCloudAtw.send(
|
|
1011
|
+
await this.melCloudAtw.send(deviceData);
|
|
1006
1012
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1007
1013
|
} catch (error) {
|
|
1008
1014
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1034,24 +1040,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1034
1040
|
try {
|
|
1035
1041
|
switch (i) {
|
|
1036
1042
|
case 0: //Heat Pump
|
|
1037
|
-
//
|
|
1038
|
-
//
|
|
1043
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1044
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1039
1045
|
break;
|
|
1040
1046
|
case 1: //Zone 1
|
|
1041
|
-
|
|
1042
|
-
|
|
1047
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1048
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1043
1049
|
break;
|
|
1044
1050
|
case caseHotWater: //Hot Water
|
|
1045
|
-
|
|
1046
|
-
|
|
1051
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1052
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1047
1053
|
break;
|
|
1048
1054
|
case caseZone2: //Zone 2
|
|
1049
|
-
|
|
1050
|
-
|
|
1055
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1056
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1051
1057
|
break;
|
|
1052
1058
|
};
|
|
1053
1059
|
|
|
1054
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1060
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1055
1061
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1056
1062
|
} catch (error) {
|
|
1057
1063
|
this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
|
|
@@ -1074,24 +1080,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1074
1080
|
try {
|
|
1075
1081
|
switch (i) {
|
|
1076
1082
|
case 0: //Heat Pump
|
|
1077
|
-
//
|
|
1078
|
-
//
|
|
1083
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1084
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1079
1085
|
break;
|
|
1080
1086
|
case 1: //Zone 1
|
|
1081
|
-
|
|
1082
|
-
|
|
1087
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1088
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1083
1089
|
break;
|
|
1084
1090
|
case caseHotWater: //Hot Water
|
|
1085
|
-
|
|
1086
|
-
|
|
1091
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1092
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1087
1093
|
break;
|
|
1088
1094
|
case caseZone2: //Zone 2
|
|
1089
|
-
|
|
1090
|
-
|
|
1095
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1096
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1091
1097
|
break;
|
|
1092
1098
|
};
|
|
1093
1099
|
|
|
1094
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1100
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1095
1101
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1096
1102
|
} catch (error) {
|
|
1097
1103
|
this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
|
|
@@ -1108,26 +1114,26 @@ class DeviceAtw extends EventEmitter {
|
|
|
1108
1114
|
value = value ? true : false;
|
|
1109
1115
|
switch (i) {
|
|
1110
1116
|
case 0: //Heat Pump
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1117
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1118
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1119
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1114
1120
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1115
1121
|
break;
|
|
1116
1122
|
case 1: //Zone 1
|
|
1117
|
-
|
|
1123
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1118
1124
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1119
1125
|
break;
|
|
1120
1126
|
case caseHotWater: //Hot Water
|
|
1121
|
-
|
|
1127
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1122
1128
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1123
1129
|
break;
|
|
1124
1130
|
case caseZone2: //Zone 2
|
|
1125
|
-
|
|
1131
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1126
1132
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1127
1133
|
break;
|
|
1128
1134
|
};
|
|
1129
1135
|
|
|
1130
|
-
await this.melCloudAtw.send(
|
|
1136
|
+
await this.melCloudAtw.send(deviceData);
|
|
1131
1137
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
|
|
1132
1138
|
} catch (error) {
|
|
1133
1139
|
this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
|
|
@@ -1175,92 +1181,92 @@ class DeviceAtw extends EventEmitter {
|
|
|
1175
1181
|
case 0: //Heat Pump - HEAT, COOL
|
|
1176
1182
|
switch (value) {
|
|
1177
1183
|
case 0: //OFF
|
|
1178
|
-
|
|
1179
|
-
|
|
1184
|
+
deviceData.Device.Power = false;
|
|
1185
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1180
1186
|
break;
|
|
1181
1187
|
case 1: //HEAT
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1188
|
+
deviceData.Device.Power = true;
|
|
1189
|
+
deviceData.Device.UnitStatus = 0;
|
|
1190
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1185
1191
|
break;
|
|
1186
1192
|
case 2: //COOL
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1193
|
+
deviceData.Device.Power = true;
|
|
1194
|
+
deviceData.Device.UnitStatus = 1;
|
|
1195
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1190
1196
|
break;
|
|
1191
1197
|
case 3: //AUTO
|
|
1192
|
-
|
|
1193
|
-
|
|
1198
|
+
deviceData.Device.Power = true;
|
|
1199
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1194
1200
|
break;
|
|
1195
1201
|
};
|
|
1196
|
-
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[
|
|
1202
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
1197
1203
|
break;
|
|
1198
1204
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1199
1205
|
switch (value) {
|
|
1200
1206
|
case 0: //OFF - HEAT CURVE
|
|
1201
|
-
|
|
1202
|
-
|
|
1207
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1208
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1203
1209
|
break;
|
|
1204
1210
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1205
|
-
|
|
1206
|
-
|
|
1211
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
1212
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1207
1213
|
break;
|
|
1208
1214
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1209
|
-
|
|
1210
|
-
|
|
1215
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
1216
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1211
1217
|
break;
|
|
1212
1218
|
case 3: //AUTO - HEAT CURVE
|
|
1213
|
-
|
|
1214
|
-
|
|
1219
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1220
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1215
1221
|
break;
|
|
1216
1222
|
};
|
|
1217
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1223
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
1218
1224
|
break;
|
|
1219
1225
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
1220
1226
|
switch (value) {
|
|
1221
1227
|
case 0: //OFF
|
|
1222
|
-
|
|
1223
|
-
|
|
1228
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1229
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1224
1230
|
break;
|
|
1225
1231
|
case 1: //HEAT
|
|
1226
|
-
|
|
1227
|
-
|
|
1232
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
1233
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1228
1234
|
break;
|
|
1229
1235
|
case 2: //COOL
|
|
1230
|
-
|
|
1231
|
-
|
|
1236
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1237
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1232
1238
|
break;
|
|
1233
1239
|
case 3: //AUTO
|
|
1234
|
-
|
|
1235
|
-
|
|
1240
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1241
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1236
1242
|
break;
|
|
1237
1243
|
};
|
|
1238
|
-
operationModeText =
|
|
1244
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
1239
1245
|
break;
|
|
1240
1246
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1241
1247
|
switch (value) {
|
|
1242
1248
|
case 0: //OFF - HEAT CURVE
|
|
1243
|
-
|
|
1244
|
-
|
|
1249
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1250
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1245
1251
|
break;
|
|
1246
1252
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1247
|
-
|
|
1248
|
-
|
|
1253
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
1254
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1249
1255
|
break;
|
|
1250
1256
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1251
|
-
|
|
1252
|
-
|
|
1257
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1258
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1253
1259
|
break;
|
|
1254
1260
|
case 3: //AUTO - HEAT CURVE
|
|
1255
|
-
|
|
1256
|
-
|
|
1261
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1262
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1257
1263
|
break;
|
|
1258
1264
|
};
|
|
1259
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1265
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1260
1266
|
break;
|
|
1261
1267
|
};
|
|
1262
1268
|
|
|
1263
|
-
await this.melCloudAtw.send(
|
|
1269
|
+
await this.melCloudAtw.send(deviceData);
|
|
1264
1270
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1265
1271
|
} catch (error) {
|
|
1266
1272
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1290,24 +1296,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1290
1296
|
try {
|
|
1291
1297
|
switch (i) {
|
|
1292
1298
|
case 0: //Heat Pump
|
|
1293
|
-
//
|
|
1294
|
-
//
|
|
1299
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1300
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1295
1301
|
break;
|
|
1296
1302
|
case 1: //Zone 1
|
|
1297
|
-
|
|
1298
|
-
|
|
1303
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1304
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1299
1305
|
break;
|
|
1300
1306
|
case caseHotWater: //Hot Water
|
|
1301
|
-
|
|
1302
|
-
|
|
1307
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1308
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1303
1309
|
break;
|
|
1304
1310
|
case caseZone2: //Zone 2
|
|
1305
|
-
|
|
1306
|
-
|
|
1311
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1312
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1307
1313
|
break;
|
|
1308
1314
|
};
|
|
1309
1315
|
|
|
1310
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1316
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1311
1317
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1312
1318
|
} catch (error) {
|
|
1313
1319
|
this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
|
|
@@ -1565,8 +1571,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1565
1571
|
|
|
1566
1572
|
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1567
1573
|
const preset = presetsConfigured[i];
|
|
1568
|
-
const
|
|
1569
|
-
const presetData = presetsOnServer[index];
|
|
1574
|
+
const presetData = presetsOnServer.find(p => p.ID === preset.Id);
|
|
1570
1575
|
|
|
1571
1576
|
//get preset name
|
|
1572
1577
|
const presetName = preset.name;
|
|
@@ -1593,34 +1598,34 @@ class DeviceAtw extends EventEmitter {
|
|
|
1593
1598
|
try {
|
|
1594
1599
|
switch (state) {
|
|
1595
1600
|
case true:
|
|
1596
|
-
previousPresets[i] =
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1601
|
+
previousPresets[i] = deviceData.Device;
|
|
1602
|
+
deviceData.Device.Power = presetData.Power;
|
|
1603
|
+
deviceData.Device.EcoHotWater = presetData.EcoHotWater;
|
|
1604
|
+
deviceData.Device.OperationModeZone1 = presetData.OperationModeZone1;
|
|
1605
|
+
deviceData.Device.OperationModeZone2 = presetData.OperationModeZone2;
|
|
1606
|
+
deviceData.Device.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
|
|
1607
|
+
deviceData.Device.SetTemperatureZone1 = presetData.SetTemperatureZone1;
|
|
1608
|
+
deviceData.Device.SetTemperatureZone2 = presetData.SetTemperatureZone2;
|
|
1609
|
+
deviceData.Device.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
|
|
1610
|
+
deviceData.Device.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
|
|
1611
|
+
deviceData.Device.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
|
|
1612
|
+
deviceData.Device.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
|
|
1613
|
+
deviceData.Device.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
|
|
1614
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1610
1615
|
break;
|
|
1611
1616
|
case false:
|
|
1612
|
-
|
|
1617
|
+
deviceData.Device = previousPresets[i];
|
|
1613
1618
|
break;
|
|
1614
1619
|
};
|
|
1615
1620
|
|
|
1616
|
-
await this.melCloudAtw.send(
|
|
1621
|
+
await this.melCloudAtw.send(deviceData);
|
|
1617
1622
|
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${presetName}`);
|
|
1618
1623
|
} catch (error) {
|
|
1619
1624
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1620
1625
|
};
|
|
1621
1626
|
});
|
|
1622
1627
|
};
|
|
1623
|
-
previousPresets.push(
|
|
1628
|
+
previousPresets.push(deviceData.Device);
|
|
1624
1629
|
this.presetsServices.push(presetService);
|
|
1625
1630
|
accessory.addService(presetService);
|
|
1626
1631
|
};
|
|
@@ -1657,128 +1662,128 @@ class DeviceAtw extends EventEmitter {
|
|
|
1657
1662
|
const state = button.state;
|
|
1658
1663
|
return state;
|
|
1659
1664
|
})
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1665
|
+
.onSet(async (state) => {
|
|
1666
|
+
if (displayType > 0 && displayType < 3) {
|
|
1667
|
+
try {
|
|
1668
|
+
switch (mode) {
|
|
1669
|
+
case 0: //POWER ON,OFF
|
|
1670
|
+
deviceData.Device.Power = state;
|
|
1671
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1672
|
+
break;
|
|
1673
|
+
case 1: //HEAT PUMP HEAT
|
|
1674
|
+
deviceData.Device.Power = true;
|
|
1675
|
+
deviceData.Device.UnitStatus = 0;
|
|
1676
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1677
|
+
break;
|
|
1678
|
+
case 2: //COOL
|
|
1679
|
+
deviceData.Device.Power = true;
|
|
1680
|
+
deviceData.Device.UnitStatus = 1;
|
|
1681
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1682
|
+
break;
|
|
1683
|
+
case 3: //HOLIDAY
|
|
1684
|
+
deviceData.Device.HolidayMode = state;
|
|
1685
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
|
|
1686
|
+
break;
|
|
1687
|
+
case 10: //ALL ZONES PHYSICAL LOCK CONTROL
|
|
1688
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1689
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1690
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1691
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1692
|
+
break;
|
|
1693
|
+
case 20: //ZONE 1 HEAT THERMOSTAT
|
|
1694
|
+
deviceData.Device.Power = true;
|
|
1695
|
+
deviceData.Device.OperationModeZone1 = 0;
|
|
1696
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1697
|
+
break;
|
|
1698
|
+
case 21: //HEAT FLOW
|
|
1699
|
+
deviceData.Device.Power = true;
|
|
1700
|
+
deviceData.Device.OperationModeZone1 = 1;
|
|
1701
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1702
|
+
break;
|
|
1703
|
+
case 22: //HEAT CURVE
|
|
1704
|
+
deviceData.Device.Power = true;
|
|
1705
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1706
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1707
|
+
break;
|
|
1708
|
+
case 23: //COOL THERMOSTAT
|
|
1709
|
+
deviceData.Device.Power = true;
|
|
1710
|
+
deviceData.Device.OperationModeZone1 = 3;
|
|
1711
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1712
|
+
break;
|
|
1713
|
+
case 24: //COOL FLOW
|
|
1714
|
+
deviceData.Device.Power = true;
|
|
1715
|
+
deviceData.Device.OperationModeZone1 = 4;
|
|
1716
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1717
|
+
break;
|
|
1718
|
+
case 25: //FLOOR DRY UP
|
|
1719
|
+
deviceData.Device.Power = true;
|
|
1720
|
+
deviceData.Device.OperationModeZone1 = 5;
|
|
1721
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1722
|
+
break;
|
|
1723
|
+
case 30: //PHYSICAL LOCK CONTROL
|
|
1724
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1725
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1726
|
+
break;
|
|
1727
|
+
case 40: //HOT WATER NORMAL/FORCE HOT WATER
|
|
1728
|
+
deviceData.Device.Power = true;
|
|
1729
|
+
deviceData.Device.ForcedHotWaterMode = state;
|
|
1730
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1731
|
+
break;
|
|
1732
|
+
case 41: //NORMAL/ECO
|
|
1733
|
+
deviceData.Device.Power = true;
|
|
1734
|
+
deviceData.Device.EcoHotWater = state;
|
|
1735
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
|
|
1736
|
+
break;
|
|
1737
|
+
case 50: //PHYSICAL LOCK CONTROL
|
|
1738
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1739
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1740
|
+
break;
|
|
1741
|
+
case 60: //ZONE 2 HEAT THERMOSTAT
|
|
1742
|
+
deviceData.Device.Power = true;
|
|
1743
|
+
deviceData.Device.OperationModeZone2 = 0;
|
|
1744
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1745
|
+
break;
|
|
1746
|
+
case 61: // HEAT FLOW
|
|
1747
|
+
deviceData.Device.Power = true;
|
|
1748
|
+
deviceData.Device.OperationModeZone2 = 1;
|
|
1749
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1750
|
+
break;
|
|
1751
|
+
case 62: //HEAT CURVE
|
|
1752
|
+
deviceData.Device.Power = true;
|
|
1753
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1754
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1755
|
+
break;
|
|
1756
|
+
case 63: //COOL THERMOSTAT
|
|
1757
|
+
deviceData.Device.Power = true;
|
|
1758
|
+
deviceData.Device.OperationModeZone2 = 3;
|
|
1759
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1760
|
+
break;
|
|
1761
|
+
case 64: //COOL FLOW
|
|
1762
|
+
deviceData.Device.Power = true;
|
|
1763
|
+
deviceData.Device.OperationModeZone2 = 4;
|
|
1764
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1765
|
+
break;
|
|
1766
|
+
case 65: //FLOOR DRY UP
|
|
1767
|
+
deviceData.Device.Power = true;
|
|
1768
|
+
deviceData.Device.OperationModeZone2 = 5;
|
|
1769
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1770
|
+
break;
|
|
1771
|
+
case 70: //PHYSICAL LOCK CONTROL
|
|
1772
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1773
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1774
|
+
break;
|
|
1775
|
+
default:
|
|
1776
|
+
this.emit('message', `Unknown button mode: ${mode}`);
|
|
1777
|
+
break;
|
|
1778
|
+
};
|
|
1774
1779
|
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1780
|
+
await this.melCloudAtw.send(deviceData);
|
|
1781
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
|
|
1782
|
+
} catch (error) {
|
|
1783
|
+
this.emit('warn', `Set button error: ${error}`);
|
|
1784
|
+
};
|
|
1779
1785
|
};
|
|
1780
1786
|
});
|
|
1781
|
-
};
|
|
1782
1787
|
this.buttonsServices.push(buttonService);
|
|
1783
1788
|
accessory.addService(buttonService)
|
|
1784
1789
|
};
|