homebridge-melcloud-control 3.1.10 → 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/CHANGELOG.md +7 -2
- package/README.md +8 -8
- package/homebridge-ui/server.js +1 -3
- package/index.js +4 -3
- package/package.json +2 -2
- package/src/deviceata.js +353 -358
- package/src/deviceatw.js +349 -345
- package/src/deviceerv.js +205 -208
- package/src/melcloud.js +25 -25
- package/src/melcloudata.js +71 -80
- package/src/melcloudatw.js +67 -67
- package/src/melclouderv.js +45 -56
package/src/deviceatw.js
CHANGED
|
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
|
|
|
7
7
|
let Accessory, Characteristic, Service, Categories, AccessoryUUID;
|
|
8
8
|
|
|
9
9
|
class DeviceAtw extends EventEmitter {
|
|
10
|
-
constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText,
|
|
10
|
+
constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval, useFahrenheit) {
|
|
11
11
|
super();
|
|
12
12
|
|
|
13
13
|
Accessory = api.platformAccessory;
|
|
@@ -38,10 +38,11 @@ class DeviceAtw extends EventEmitter {
|
|
|
38
38
|
this.deviceId = deviceId;
|
|
39
39
|
this.deviceName = deviceName;
|
|
40
40
|
this.deviceTypeText = deviceTypeText;
|
|
41
|
-
this.accountFile = accountFile;
|
|
42
41
|
this.devicesFile = devicesFile;
|
|
43
42
|
this.refreshInterval = refreshInterval;
|
|
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;
|
|
@@ -102,13 +103,12 @@ class DeviceAtw extends EventEmitter {
|
|
|
102
103
|
//melcloud device
|
|
103
104
|
this.melCloudAtw = new MelCloudAtw({
|
|
104
105
|
contextKey: this.contextKey,
|
|
105
|
-
accountFile: this.accountFile,
|
|
106
106
|
devicesFile: this.devicesFile,
|
|
107
107
|
deviceId: this.deviceId,
|
|
108
108
|
debugLog: this.enableDebugMode
|
|
109
109
|
});
|
|
110
110
|
|
|
111
|
-
this.melCloudAtw.on('externalIntegrations', (deviceData
|
|
111
|
+
this.melCloudAtw.on('externalIntegrations', (deviceData) => {
|
|
112
112
|
try {
|
|
113
113
|
//RESTFul server
|
|
114
114
|
const restFulEnabled = this.restFul.enable || false;
|
|
@@ -125,7 +125,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
125
125
|
})
|
|
126
126
|
.on('set', async (key, value) => {
|
|
127
127
|
try {
|
|
128
|
-
await this.setOverExternalIntegration('RESTFul',
|
|
128
|
+
await this.setOverExternalIntegration('RESTFul', deviceData, key, value);
|
|
129
129
|
} catch (error) {
|
|
130
130
|
this.emit('warn', `RESTFul set error: ${error}.`);
|
|
131
131
|
};
|
|
@@ -138,7 +138,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
const restFul0 = this.restFulConnected ? this.restFul1.update('info', deviceData) : false;
|
|
141
|
-
const restFul1 = this.restFulConnected ? this.restFul1.update('state',
|
|
141
|
+
const restFul1 = this.restFulConnected ? this.restFul1.update('state', deviceData.Device) : false;
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
//MQTT client
|
|
@@ -164,7 +164,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
164
164
|
})
|
|
165
165
|
.on('set', async (key, value) => {
|
|
166
166
|
try {
|
|
167
|
-
await this.setOverExternalIntegration('MQTT',
|
|
167
|
+
await this.setOverExternalIntegration('MQTT', deviceData, key, value);
|
|
168
168
|
} catch (error) {
|
|
169
169
|
this.emit('warn', `MQTT set error: ${error}.`);
|
|
170
170
|
};
|
|
@@ -177,13 +177,17 @@ class DeviceAtw extends EventEmitter {
|
|
|
177
177
|
});
|
|
178
178
|
}
|
|
179
179
|
const mqtt0 = this.mqttConnected ? this.mqtt1.emit('publish', `Info`, deviceData) : false;
|
|
180
|
-
const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`,
|
|
180
|
+
const mqtt1 = this.mqttConnected ? this.mqtt1.emit('publish', `State`, deviceData.Device) : false;
|
|
181
181
|
}
|
|
182
182
|
} catch (error) {
|
|
183
183
|
this.emit('warn', `External integration start error: ${error.message || error}.`);
|
|
184
184
|
};
|
|
185
185
|
})
|
|
186
186
|
.on('deviceInfo', (manufacturer, modelIndoor, modelOutdoor, serialNumber, firmwareAppVersion, hasHotWaterTank, hasZone2) => {
|
|
187
|
+
if (!this.displayDeviceInfo) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
187
191
|
if (!this.disableLogDeviceInfo) {
|
|
188
192
|
this.emit('devInfo', `---- ${this.deviceTypeText}: ${this.deviceName} ----`);
|
|
189
193
|
this.emit('devInfo', `Account: ${this.accountName}`);
|
|
@@ -203,8 +207,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
203
207
|
this.model = modelIndoor ? modelIndoor : modelOutdoor ? modelOutdoor : `${this.deviceTypeText} ${this.deviceId}`;
|
|
204
208
|
this.serialNumber = serialNumber;
|
|
205
209
|
this.firmwareRevision = firmwareAppVersion;
|
|
210
|
+
this.displayDeviceInfo = false;
|
|
206
211
|
})
|
|
207
|
-
.on('deviceState', async (deviceData
|
|
212
|
+
.on('deviceState', async (deviceData) => {
|
|
208
213
|
//device info
|
|
209
214
|
const displayMode = this.displayMode;
|
|
210
215
|
const heatPumpName = 'Heat Pump';
|
|
@@ -217,7 +222,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
217
222
|
const canCool = deviceData.Device.CanCool ?? false;
|
|
218
223
|
const heatCoolModes = canHeat && canCool ? 0 : canHeat ? 1 : canCool ? 2 : 3;
|
|
219
224
|
const temperatureIncrement = deviceData.Device.TemperatureIncrement ?? 1;
|
|
220
|
-
const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
|
|
225
|
+
const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.useFahrenheit];
|
|
221
226
|
const minSetTemperature = deviceData.Device.MinSetTemperature ?? 10;
|
|
222
227
|
const maxSetTemperature = deviceData.Device.MaxSetTemperature ?? 30;
|
|
223
228
|
const maxTankTemperature = deviceData.Device.MaxTankTemperature ?? 70;
|
|
@@ -246,40 +251,40 @@ class DeviceAtw extends EventEmitter {
|
|
|
246
251
|
this.caseZone2 = caseZone2;
|
|
247
252
|
|
|
248
253
|
//device state
|
|
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
|
|
273
|
-
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;
|
|
274
279
|
|
|
275
280
|
//accessory
|
|
276
281
|
this.accessory.presetsOnServer = presetsOnServer;
|
|
277
|
-
this.accessory.power = power;
|
|
278
|
-
this.accessory.offline = offline;
|
|
282
|
+
this.accessory.power = power ? 1 : 0;
|
|
283
|
+
this.accessory.offline = offline ?? false;
|
|
279
284
|
this.accessory.unitStatus = unitStatus;
|
|
280
285
|
this.accessory.idleZone1 = idleZone1;
|
|
281
286
|
this.accessory.idleZone2 = idleZone2;
|
|
282
|
-
this.accessory.useFahrenheit = useFahrenheit;
|
|
287
|
+
this.accessory.useFahrenheit = this.useFahrenheit;
|
|
283
288
|
this.accessory.temperatureUnit = temperatureUnit;
|
|
284
289
|
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
285
290
|
this.accessory.hasHotWaterTank = hasHotWaterTank;
|
|
@@ -381,7 +386,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
381
386
|
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, targetOperationMode)
|
|
382
387
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
383
388
|
.updateCharacteristic(Characteristic.LockPhysicalControls, lockPhysicalControl)
|
|
384
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, useFahrenheit);
|
|
389
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
|
|
385
390
|
const updateHT = heatCoolModes === 0 || heatCoolModes === 1 ? this.melCloudServices[i].updateCharacteristic(Characteristic.HeatingThresholdTemperature, setTemperature) : false;
|
|
386
391
|
const updateCT = heatCoolModes === 0 || heatCoolModes === 2 ? this.melCloudServices[i].updateCharacteristic(Characteristic.CoolingThresholdTemperature, setTemperature) : false;
|
|
387
392
|
}
|
|
@@ -452,9 +457,12 @@ class DeviceAtw extends EventEmitter {
|
|
|
452
457
|
.updateCharacteristic(Characteristic.TargetHeatingCoolingState, targetOperationMode)
|
|
453
458
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
454
459
|
.updateCharacteristic(Characteristic.TargetTemperature, setTemperature)
|
|
455
|
-
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, useFahrenheit);
|
|
460
|
+
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
|
|
456
461
|
}
|
|
457
462
|
break;
|
|
463
|
+
default:
|
|
464
|
+
this.emit('warn', `Unknown display mode: ${displayMode}`);
|
|
465
|
+
return;
|
|
458
466
|
};
|
|
459
467
|
|
|
460
468
|
//push value to arrays
|
|
@@ -595,8 +603,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
595
603
|
if (this.presetsConfigured.length > 0) {
|
|
596
604
|
for (let i = 0; i < this.presetsConfigured.length; i++) {
|
|
597
605
|
const preset = this.presetsConfigured[i];
|
|
598
|
-
const
|
|
599
|
-
const presetData = presetsOnServer[index];
|
|
606
|
+
const presetData = presetsOnServer.find(p => p.ID === preset.Id);
|
|
600
607
|
|
|
601
608
|
preset.state = presetData ? (presetData.Power === power
|
|
602
609
|
&& presetData.EcoHotWater === ecoHotWater
|
|
@@ -714,7 +721,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
714
721
|
}
|
|
715
722
|
|
|
716
723
|
try {
|
|
717
|
-
const accessory = await this.prepareAccessory(this.accountInfo,
|
|
724
|
+
const accessory = await this.prepareAccessory(this.accountInfo, deviceData, this.deviceId, this.deviceTypeText, this.deviceName, this.accountName);
|
|
718
725
|
this.emit('publishAccessory', accessory);
|
|
719
726
|
this.startPrepareAccessory = false;
|
|
720
727
|
} catch (error) {
|
|
@@ -732,8 +739,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
732
739
|
})
|
|
733
740
|
.on('error', async (error) => {
|
|
734
741
|
this.emit('error', error);
|
|
735
|
-
await new Promise(resolve => setTimeout(resolve, 15000));
|
|
736
|
-
await this.melCloudAtw.impulseGenerator.start([{ name: 'checkState', sampling: this.refreshInterval }]);
|
|
737
742
|
});
|
|
738
743
|
|
|
739
744
|
//check state
|
|
@@ -748,94 +753,94 @@ class DeviceAtw extends EventEmitter {
|
|
|
748
753
|
};
|
|
749
754
|
};
|
|
750
755
|
|
|
751
|
-
async setOverExternalIntegration(integration,
|
|
756
|
+
async setOverExternalIntegration(integration, deviceData, key, value) {
|
|
752
757
|
try {
|
|
753
758
|
let set = false
|
|
754
759
|
switch (key) {
|
|
755
760
|
case 'Power':
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
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);
|
|
759
764
|
break;
|
|
760
765
|
case 'OperationMode':
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
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);
|
|
764
769
|
break;
|
|
765
770
|
case 'OperationModeZone1':
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
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);
|
|
769
774
|
break;
|
|
770
775
|
case 'OperationModeZone2':
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
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);
|
|
774
779
|
break;
|
|
775
780
|
case 'SetTemperatureZone1':
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
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);
|
|
779
784
|
break;
|
|
780
785
|
case 'SetTemperatureZone2':
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
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);
|
|
784
789
|
break;
|
|
785
790
|
case 'SetHeatFlowTemperatureZone1':
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
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);
|
|
789
794
|
break;
|
|
790
795
|
case 'SetHeatFlowTemperatureZone2':
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
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);
|
|
794
799
|
break;
|
|
795
800
|
case 'SetCoolFlowTemperatureZone1':
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
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);
|
|
799
804
|
break;
|
|
800
805
|
case 'SetCoolFlowTemperatureZone2':
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
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);
|
|
804
809
|
break;
|
|
805
810
|
case 'SetTankWaterTemperature':
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
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);
|
|
809
814
|
break;
|
|
810
815
|
case 'ForcedHotWaterMode':
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
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);
|
|
814
819
|
break;
|
|
815
820
|
case 'EcoHotWater':
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
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);
|
|
819
824
|
break;
|
|
820
825
|
case 'HolidayMode':
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
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);
|
|
824
829
|
break;
|
|
825
830
|
case 'ProhibitZone1':
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
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);
|
|
829
834
|
break;
|
|
830
835
|
case 'ProhibitZone2':
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
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);
|
|
834
839
|
break;
|
|
835
840
|
case 'ProhibitHotWater':
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
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);
|
|
839
844
|
break;
|
|
840
845
|
default:
|
|
841
846
|
this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
|
|
@@ -847,7 +852,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
847
852
|
};
|
|
848
853
|
}
|
|
849
854
|
//prepare accessory
|
|
850
|
-
async prepareAccessory(accountInfo,
|
|
855
|
+
async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
|
|
851
856
|
try {
|
|
852
857
|
//accessory
|
|
853
858
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
|
|
@@ -902,9 +907,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
902
907
|
try {
|
|
903
908
|
switch (i) {
|
|
904
909
|
case 0: //Heat Pump
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
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);
|
|
908
913
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set power: ${state ? 'ON' : 'OFF'}`);
|
|
909
914
|
break;
|
|
910
915
|
};
|
|
@@ -934,76 +939,76 @@ class DeviceAtw extends EventEmitter {
|
|
|
934
939
|
case 0: //Heat Pump - ON, HEAT, COOL
|
|
935
940
|
switch (value) {
|
|
936
941
|
case 0: //AUTO
|
|
937
|
-
|
|
938
|
-
|
|
942
|
+
deviceData.Device.Power = true;
|
|
943
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
939
944
|
break;
|
|
940
945
|
case 1: //HEAT
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
946
|
+
deviceData.Device.Power = true;
|
|
947
|
+
deviceData.Device.UnitStatus = 0;
|
|
948
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
944
949
|
break;
|
|
945
950
|
case 2: //COOL
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
951
|
+
deviceData.Device.Power = true;
|
|
952
|
+
deviceData.Device.UnitStatus = 1;
|
|
953
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
949
954
|
break;
|
|
950
955
|
};
|
|
951
|
-
operationModeText =
|
|
956
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
952
957
|
break;
|
|
953
958
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
954
959
|
switch (value) {
|
|
955
960
|
case 0: //AUTO - HEAT CURVE
|
|
956
|
-
|
|
957
|
-
|
|
961
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
962
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
958
963
|
break;
|
|
959
964
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
960
|
-
|
|
961
|
-
|
|
965
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
966
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
962
967
|
break;
|
|
963
968
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
964
|
-
|
|
965
|
-
|
|
969
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
970
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
966
971
|
break;
|
|
967
972
|
};
|
|
968
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
973
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
969
974
|
break;
|
|
970
975
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
971
976
|
switch (value) {
|
|
972
977
|
case 0: //AUTO
|
|
973
|
-
|
|
974
|
-
|
|
978
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
979
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
975
980
|
break;
|
|
976
981
|
case 1: //HEAT
|
|
977
|
-
|
|
978
|
-
|
|
982
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
983
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
979
984
|
break;
|
|
980
985
|
case 2: //COOL
|
|
981
|
-
|
|
982
|
-
|
|
986
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
987
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
983
988
|
break
|
|
984
989
|
};
|
|
985
|
-
operationModeText =
|
|
990
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
986
991
|
break;
|
|
987
992
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
988
993
|
switch (value) {
|
|
989
994
|
case 0: //AUTO
|
|
990
|
-
|
|
991
|
-
|
|
995
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
996
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
992
997
|
break;
|
|
993
998
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
994
|
-
|
|
995
|
-
|
|
999
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
1000
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
996
1001
|
break;
|
|
997
1002
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
998
|
-
|
|
999
|
-
|
|
1003
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1004
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1000
1005
|
break;
|
|
1001
1006
|
};
|
|
1002
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1007
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1003
1008
|
break;
|
|
1004
1009
|
};
|
|
1005
1010
|
|
|
1006
|
-
await this.melCloudAtw.send(
|
|
1011
|
+
await this.melCloudAtw.send(deviceData);
|
|
1007
1012
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1008
1013
|
} catch (error) {
|
|
1009
1014
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1035,24 +1040,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1035
1040
|
try {
|
|
1036
1041
|
switch (i) {
|
|
1037
1042
|
case 0: //Heat Pump
|
|
1038
|
-
//
|
|
1039
|
-
//
|
|
1043
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1044
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1040
1045
|
break;
|
|
1041
1046
|
case 1: //Zone 1
|
|
1042
|
-
|
|
1043
|
-
|
|
1047
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1048
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1044
1049
|
break;
|
|
1045
1050
|
case caseHotWater: //Hot Water
|
|
1046
|
-
|
|
1047
|
-
|
|
1051
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1052
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1048
1053
|
break;
|
|
1049
1054
|
case caseZone2: //Zone 2
|
|
1050
|
-
|
|
1051
|
-
|
|
1055
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1056
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1052
1057
|
break;
|
|
1053
1058
|
};
|
|
1054
1059
|
|
|
1055
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1060
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1056
1061
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1057
1062
|
} catch (error) {
|
|
1058
1063
|
this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
|
|
@@ -1075,24 +1080,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1075
1080
|
try {
|
|
1076
1081
|
switch (i) {
|
|
1077
1082
|
case 0: //Heat Pump
|
|
1078
|
-
//
|
|
1079
|
-
//
|
|
1083
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1084
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1080
1085
|
break;
|
|
1081
1086
|
case 1: //Zone 1
|
|
1082
|
-
|
|
1083
|
-
|
|
1087
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1088
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1084
1089
|
break;
|
|
1085
1090
|
case caseHotWater: //Hot Water
|
|
1086
|
-
|
|
1087
|
-
|
|
1091
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1092
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1088
1093
|
break;
|
|
1089
1094
|
case caseZone2: //Zone 2
|
|
1090
|
-
|
|
1091
|
-
|
|
1095
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1096
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1092
1097
|
break;
|
|
1093
1098
|
};
|
|
1094
1099
|
|
|
1095
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1100
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1096
1101
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1097
1102
|
} catch (error) {
|
|
1098
1103
|
this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
|
|
@@ -1109,26 +1114,26 @@ class DeviceAtw extends EventEmitter {
|
|
|
1109
1114
|
value = value ? true : false;
|
|
1110
1115
|
switch (i) {
|
|
1111
1116
|
case 0: //Heat Pump
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1117
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1118
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1119
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1115
1120
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1116
1121
|
break;
|
|
1117
1122
|
case 1: //Zone 1
|
|
1118
|
-
|
|
1123
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1119
1124
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1120
1125
|
break;
|
|
1121
1126
|
case caseHotWater: //Hot Water
|
|
1122
|
-
|
|
1127
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1123
1128
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1124
1129
|
break;
|
|
1125
1130
|
case caseZone2: //Zone 2
|
|
1126
|
-
|
|
1131
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1127
1132
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1128
1133
|
break;
|
|
1129
1134
|
};
|
|
1130
1135
|
|
|
1131
|
-
await this.melCloudAtw.send(
|
|
1136
|
+
await this.melCloudAtw.send(deviceData);
|
|
1132
1137
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
|
|
1133
1138
|
} catch (error) {
|
|
1134
1139
|
this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
|
|
@@ -1176,92 +1181,92 @@ class DeviceAtw extends EventEmitter {
|
|
|
1176
1181
|
case 0: //Heat Pump - HEAT, COOL
|
|
1177
1182
|
switch (value) {
|
|
1178
1183
|
case 0: //OFF
|
|
1179
|
-
|
|
1180
|
-
|
|
1184
|
+
deviceData.Device.Power = false;
|
|
1185
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1181
1186
|
break;
|
|
1182
1187
|
case 1: //HEAT
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1188
|
+
deviceData.Device.Power = true;
|
|
1189
|
+
deviceData.Device.UnitStatus = 0;
|
|
1190
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1186
1191
|
break;
|
|
1187
1192
|
case 2: //COOL
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1193
|
+
deviceData.Device.Power = true;
|
|
1194
|
+
deviceData.Device.UnitStatus = 1;
|
|
1195
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1191
1196
|
break;
|
|
1192
1197
|
case 3: //AUTO
|
|
1193
|
-
|
|
1194
|
-
|
|
1198
|
+
deviceData.Device.Power = true;
|
|
1199
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1195
1200
|
break;
|
|
1196
1201
|
};
|
|
1197
|
-
operationModeText =
|
|
1202
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
1198
1203
|
break;
|
|
1199
1204
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1200
1205
|
switch (value) {
|
|
1201
1206
|
case 0: //OFF - HEAT CURVE
|
|
1202
|
-
|
|
1203
|
-
|
|
1207
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1208
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1204
1209
|
break;
|
|
1205
1210
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1206
|
-
|
|
1207
|
-
|
|
1211
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
1212
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1208
1213
|
break;
|
|
1209
1214
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1210
|
-
|
|
1211
|
-
|
|
1215
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
1216
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1212
1217
|
break;
|
|
1213
1218
|
case 3: //AUTO - HEAT CURVE
|
|
1214
|
-
|
|
1215
|
-
|
|
1219
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1220
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1216
1221
|
break;
|
|
1217
1222
|
};
|
|
1218
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1223
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
1219
1224
|
break;
|
|
1220
1225
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
1221
1226
|
switch (value) {
|
|
1222
1227
|
case 0: //OFF
|
|
1223
|
-
|
|
1224
|
-
|
|
1228
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1229
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1225
1230
|
break;
|
|
1226
1231
|
case 1: //HEAT
|
|
1227
|
-
|
|
1228
|
-
|
|
1232
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
1233
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1229
1234
|
break;
|
|
1230
1235
|
case 2: //COOL
|
|
1231
|
-
|
|
1232
|
-
|
|
1236
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1237
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1233
1238
|
break;
|
|
1234
1239
|
case 3: //AUTO
|
|
1235
|
-
|
|
1236
|
-
|
|
1240
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1241
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1237
1242
|
break;
|
|
1238
1243
|
};
|
|
1239
|
-
operationModeText =
|
|
1244
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
1240
1245
|
break;
|
|
1241
1246
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1242
1247
|
switch (value) {
|
|
1243
1248
|
case 0: //OFF - HEAT CURVE
|
|
1244
|
-
|
|
1245
|
-
|
|
1249
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1250
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1246
1251
|
break;
|
|
1247
1252
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1248
|
-
|
|
1249
|
-
|
|
1253
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
1254
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1250
1255
|
break;
|
|
1251
1256
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1252
|
-
|
|
1253
|
-
|
|
1257
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1258
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1254
1259
|
break;
|
|
1255
1260
|
case 3: //AUTO - HEAT CURVE
|
|
1256
|
-
|
|
1257
|
-
|
|
1261
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1262
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1258
1263
|
break;
|
|
1259
1264
|
};
|
|
1260
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1265
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1261
1266
|
break;
|
|
1262
1267
|
};
|
|
1263
1268
|
|
|
1264
|
-
await this.melCloudAtw.send(
|
|
1269
|
+
await this.melCloudAtw.send(deviceData);
|
|
1265
1270
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1266
1271
|
} catch (error) {
|
|
1267
1272
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1291,24 +1296,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1291
1296
|
try {
|
|
1292
1297
|
switch (i) {
|
|
1293
1298
|
case 0: //Heat Pump
|
|
1294
|
-
//
|
|
1295
|
-
//
|
|
1299
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1300
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1296
1301
|
break;
|
|
1297
1302
|
case 1: //Zone 1
|
|
1298
|
-
|
|
1299
|
-
|
|
1303
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1304
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1300
1305
|
break;
|
|
1301
1306
|
case caseHotWater: //Hot Water
|
|
1302
|
-
|
|
1303
|
-
|
|
1307
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1308
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1304
1309
|
break;
|
|
1305
1310
|
case caseZone2: //Zone 2
|
|
1306
|
-
|
|
1307
|
-
|
|
1311
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1312
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1308
1313
|
break;
|
|
1309
1314
|
};
|
|
1310
1315
|
|
|
1311
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1316
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1312
1317
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1313
1318
|
} catch (error) {
|
|
1314
1319
|
this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
|
|
@@ -1566,8 +1571,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1566
1571
|
|
|
1567
1572
|
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1568
1573
|
const preset = presetsConfigured[i];
|
|
1569
|
-
const
|
|
1570
|
-
const presetData = presetsOnServer[index];
|
|
1574
|
+
const presetData = presetsOnServer.find(p => p.ID === preset.Id);
|
|
1571
1575
|
|
|
1572
1576
|
//get preset name
|
|
1573
1577
|
const presetName = preset.name;
|
|
@@ -1594,34 +1598,34 @@ class DeviceAtw extends EventEmitter {
|
|
|
1594
1598
|
try {
|
|
1595
1599
|
switch (state) {
|
|
1596
1600
|
case true:
|
|
1597
|
-
previousPresets[i] =
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
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;
|
|
1611
1615
|
break;
|
|
1612
1616
|
case false:
|
|
1613
|
-
|
|
1617
|
+
deviceData.Device = previousPresets[i];
|
|
1614
1618
|
break;
|
|
1615
1619
|
};
|
|
1616
1620
|
|
|
1617
|
-
await this.melCloudAtw.send(
|
|
1621
|
+
await this.melCloudAtw.send(deviceData);
|
|
1618
1622
|
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${presetName}`);
|
|
1619
1623
|
} catch (error) {
|
|
1620
1624
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1621
1625
|
};
|
|
1622
1626
|
});
|
|
1623
1627
|
};
|
|
1624
|
-
previousPresets.push(
|
|
1628
|
+
previousPresets.push(deviceData.Device);
|
|
1625
1629
|
this.presetsServices.push(presetService);
|
|
1626
1630
|
accessory.addService(presetService);
|
|
1627
1631
|
};
|
|
@@ -1658,128 +1662,128 @@ class DeviceAtw extends EventEmitter {
|
|
|
1658
1662
|
const state = button.state;
|
|
1659
1663
|
return state;
|
|
1660
1664
|
})
|
|
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
|
-
|
|
1774
|
-
|
|
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
|
+
};
|
|
1775
1779
|
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
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
|
+
};
|
|
1780
1785
|
};
|
|
1781
1786
|
});
|
|
1782
|
-
};
|
|
1783
1787
|
this.buttonsServices.push(buttonService);
|
|
1784
1788
|
accessory.addService(buttonService)
|
|
1785
1789
|
};
|