homebridge-melcloud-control 3.1.11 → 3.1.17
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 +294 -317
- package/src/deviceatw.js +354 -358
- package/src/deviceerv.js +169 -185
- 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;
|
|
@@ -864,7 +870,11 @@ class DeviceAtw extends EventEmitter {
|
|
|
864
870
|
.setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
|
|
865
871
|
|
|
866
872
|
//melcloud services
|
|
873
|
+
const displayMode = this.displayMode;
|
|
867
874
|
const zonesCount = this.zonesCount;
|
|
875
|
+
const caseHotWater = this.caseHotWater;
|
|
876
|
+
const caseZone2 = this.caseZone2;
|
|
877
|
+
const heatCoolModes = this.heatCoolModes;
|
|
868
878
|
const presetsOnServer = this.accessory.presetsOnServer;
|
|
869
879
|
const temperatureSensor = this.temperatureSensor;
|
|
870
880
|
const temperatureSensorFlow = this.temperatureSensorFlow;
|
|
@@ -875,14 +885,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
875
885
|
const temperatureSensorReturnWaterTank = this.temperatureSensorReturnWaterTank;
|
|
876
886
|
const temperatureSensorFlowZone2 = this.temperatureSensorFlowZone2;
|
|
877
887
|
const temperatureSensorReturnZone2 = this.temperatureSensorReturnZone2;
|
|
878
|
-
const presetsConfigured = this.presetsConfigured;
|
|
879
|
-
const presetsConfiguredCount = this.presetsConfiguredCount;
|
|
880
|
-
const buttonsConfigured = this.buttonsConfigured;
|
|
881
|
-
const buttonsConfiguredCount = this.buttonsConfiguredCount;
|
|
882
|
-
const displayMode = this.displayMode;
|
|
883
|
-
const caseHotWater = this.caseHotWater;
|
|
884
|
-
const caseZone2 = this.caseZone2;
|
|
885
|
-
const heatCoolModes = this.heatCoolModes;
|
|
886
888
|
|
|
887
889
|
this.melCloudServices = [];
|
|
888
890
|
for (let i = 0; i < zonesCount; i++) {
|
|
@@ -901,9 +903,9 @@ class DeviceAtw extends EventEmitter {
|
|
|
901
903
|
try {
|
|
902
904
|
switch (i) {
|
|
903
905
|
case 0: //Heat Pump
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
await this.melCloudAtw.send(
|
|
906
|
+
deviceData.Device.Power = [false, true][state];
|
|
907
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
908
|
+
await this.melCloudAtw.send(deviceData);
|
|
907
909
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set power: ${state ? 'ON' : 'OFF'}`);
|
|
908
910
|
break;
|
|
909
911
|
};
|
|
@@ -933,76 +935,76 @@ class DeviceAtw extends EventEmitter {
|
|
|
933
935
|
case 0: //Heat Pump - ON, HEAT, COOL
|
|
934
936
|
switch (value) {
|
|
935
937
|
case 0: //AUTO
|
|
936
|
-
|
|
937
|
-
|
|
938
|
+
deviceData.Device.Power = true;
|
|
939
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
938
940
|
break;
|
|
939
941
|
case 1: //HEAT
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
942
|
+
deviceData.Device.Power = true;
|
|
943
|
+
deviceData.Device.UnitStatus = 0;
|
|
944
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
943
945
|
break;
|
|
944
946
|
case 2: //COOL
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
947
|
+
deviceData.Device.Power = true;
|
|
948
|
+
deviceData.Device.UnitStatus = 1;
|
|
949
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
948
950
|
break;
|
|
949
951
|
};
|
|
950
|
-
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[
|
|
952
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
951
953
|
break;
|
|
952
954
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
953
955
|
switch (value) {
|
|
954
956
|
case 0: //AUTO - HEAT CURVE
|
|
955
|
-
|
|
956
|
-
|
|
957
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
958
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
957
959
|
break;
|
|
958
960
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
959
|
-
|
|
960
|
-
|
|
961
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
962
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
961
963
|
break;
|
|
962
964
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
963
|
-
|
|
964
|
-
|
|
965
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
966
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
965
967
|
break;
|
|
966
968
|
};
|
|
967
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
969
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
968
970
|
break;
|
|
969
971
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
970
972
|
switch (value) {
|
|
971
973
|
case 0: //AUTO
|
|
972
|
-
|
|
973
|
-
|
|
974
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
975
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
974
976
|
break;
|
|
975
977
|
case 1: //HEAT
|
|
976
|
-
|
|
977
|
-
|
|
978
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
979
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
978
980
|
break;
|
|
979
981
|
case 2: //COOL
|
|
980
|
-
|
|
981
|
-
|
|
982
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
983
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
982
984
|
break
|
|
983
985
|
};
|
|
984
|
-
operationModeText =
|
|
986
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
985
987
|
break;
|
|
986
988
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
987
989
|
switch (value) {
|
|
988
990
|
case 0: //AUTO
|
|
989
|
-
|
|
990
|
-
|
|
991
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
992
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
991
993
|
break;
|
|
992
994
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
993
|
-
|
|
994
|
-
|
|
995
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
996
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
995
997
|
break;
|
|
996
998
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
997
|
-
|
|
998
|
-
|
|
999
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1000
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
999
1001
|
break;
|
|
1000
1002
|
};
|
|
1001
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1003
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1002
1004
|
break;
|
|
1003
1005
|
};
|
|
1004
1006
|
|
|
1005
|
-
await this.melCloudAtw.send(
|
|
1007
|
+
await this.melCloudAtw.send(deviceData);
|
|
1006
1008
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1007
1009
|
} catch (error) {
|
|
1008
1010
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1034,24 +1036,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1034
1036
|
try {
|
|
1035
1037
|
switch (i) {
|
|
1036
1038
|
case 0: //Heat Pump
|
|
1037
|
-
//
|
|
1038
|
-
//
|
|
1039
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1040
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1039
1041
|
break;
|
|
1040
1042
|
case 1: //Zone 1
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1044
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1043
1045
|
break;
|
|
1044
1046
|
case caseHotWater: //Hot Water
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1048
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1047
1049
|
break;
|
|
1048
1050
|
case caseZone2: //Zone 2
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1052
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1051
1053
|
break;
|
|
1052
1054
|
};
|
|
1053
1055
|
|
|
1054
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1056
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1055
1057
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1056
1058
|
} catch (error) {
|
|
1057
1059
|
this.emit('warn', `${zoneName}, Set heating threshold temperature error: ${error}`);
|
|
@@ -1074,24 +1076,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1074
1076
|
try {
|
|
1075
1077
|
switch (i) {
|
|
1076
1078
|
case 0: //Heat Pump
|
|
1077
|
-
//
|
|
1078
|
-
//
|
|
1079
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1080
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1079
1081
|
break;
|
|
1080
1082
|
case 1: //Zone 1
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1084
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1083
1085
|
break;
|
|
1084
1086
|
case caseHotWater: //Hot Water
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1088
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1087
1089
|
break;
|
|
1088
1090
|
case caseZone2: //Zone 2
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1092
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1091
1093
|
break;
|
|
1092
1094
|
};
|
|
1093
1095
|
|
|
1094
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1096
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1095
1097
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1096
1098
|
} catch (error) {
|
|
1097
1099
|
this.emit('warn', `${zoneName}, Set cooling threshold temperature error: ${error}`);
|
|
@@ -1108,26 +1110,26 @@ class DeviceAtw extends EventEmitter {
|
|
|
1108
1110
|
value = value ? true : false;
|
|
1109
1111
|
switch (i) {
|
|
1110
1112
|
case 0: //Heat Pump
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1113
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1114
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1115
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1114
1116
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1115
1117
|
break;
|
|
1116
1118
|
case 1: //Zone 1
|
|
1117
|
-
|
|
1119
|
+
deviceData.Device.ProhibitZone1 = value;
|
|
1118
1120
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1119
1121
|
break;
|
|
1120
1122
|
case caseHotWater: //Hot Water
|
|
1121
|
-
|
|
1123
|
+
deviceData.Device.ProhibitHotWater = value;
|
|
1122
1124
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1123
1125
|
break;
|
|
1124
1126
|
case caseZone2: //Zone 2
|
|
1125
|
-
|
|
1127
|
+
deviceData.Device.ProhibitZone2 = value;
|
|
1126
1128
|
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1127
1129
|
break;
|
|
1128
1130
|
};
|
|
1129
1131
|
|
|
1130
|
-
await this.melCloudAtw.send(
|
|
1132
|
+
await this.melCloudAtw.send(deviceData);
|
|
1131
1133
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set lock physical controls: ${value ? 'LOCK' : 'UNLOCK'}`);
|
|
1132
1134
|
} catch (error) {
|
|
1133
1135
|
this.emit('warn', `${zoneName}, Set lock physical controls error: ${error}`);
|
|
@@ -1175,92 +1177,92 @@ class DeviceAtw extends EventEmitter {
|
|
|
1175
1177
|
case 0: //Heat Pump - HEAT, COOL
|
|
1176
1178
|
switch (value) {
|
|
1177
1179
|
case 0: //OFF
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
+
deviceData.Device.Power = false;
|
|
1181
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1180
1182
|
break;
|
|
1181
1183
|
case 1: //HEAT
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1184
|
+
deviceData.Device.Power = true;
|
|
1185
|
+
deviceData.Device.UnitStatus = 0;
|
|
1186
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1185
1187
|
break;
|
|
1186
1188
|
case 2: //COOL
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1189
|
+
deviceData.Device.Power = true;
|
|
1190
|
+
deviceData.Device.UnitStatus = 1;
|
|
1191
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1190
1192
|
break;
|
|
1191
1193
|
case 3: //AUTO
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
+
deviceData.Device.Power = true;
|
|
1195
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1194
1196
|
break;
|
|
1195
1197
|
};
|
|
1196
|
-
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[
|
|
1198
|
+
operationModeText = [CONSTANTS.HeatPump.System[0], CONSTANTS.HeatPump.System[deviceData.Device.UnitStatus]][this.accessory.power];
|
|
1197
1199
|
break;
|
|
1198
1200
|
case 1: //Zone 1 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1199
1201
|
switch (value) {
|
|
1200
1202
|
case 0: //OFF - HEAT CURVE
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1204
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1203
1205
|
break;
|
|
1204
1206
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
+
deviceData.Device.OperationModeZone1 = [0, 3][this.unitStatus];
|
|
1208
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1207
1209
|
break;
|
|
1208
1210
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
+
deviceData.Device.OperationModeZone1 = [1, 4][this.unitStatus];
|
|
1212
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1211
1213
|
break;
|
|
1212
1214
|
case 3: //AUTO - HEAT CURVE
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1216
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1215
1217
|
break;
|
|
1216
1218
|
};
|
|
1217
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1219
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone1];
|
|
1218
1220
|
break;
|
|
1219
1221
|
case caseHotWater: //Hot Water - AUTO, HEAT NOW
|
|
1220
1222
|
switch (value) {
|
|
1221
1223
|
case 0: //OFF
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1225
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1224
1226
|
break;
|
|
1225
1227
|
case 1: //HEAT
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
+
deviceData.Device.ForcedHotWaterMode = true;
|
|
1229
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1228
1230
|
break;
|
|
1229
1231
|
case 2: //COOL
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1233
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1232
1234
|
break;
|
|
1233
1235
|
case 3: //AUTO
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
+
deviceData.Device.ForcedHotWaterMode = false;
|
|
1237
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1236
1238
|
break;
|
|
1237
1239
|
};
|
|
1238
|
-
operationModeText =
|
|
1240
|
+
operationModeText = deviceData.Device.OperationMode === 1 ? CONSTANTS.HeatPump.ForceDhw[1] : CONSTANTS.HeatPump.ForceDhw[deviceData.Device.ForcedHotWaterMode ? 1 : 0];
|
|
1239
1241
|
break;
|
|
1240
1242
|
case caseZone2: //Zone 2 - HEAT THERMOSTAT, HEAT FLOW, HEAT CURVE, COOL THERMOSTAT, COOL FLOW, FLOOR DRY UP
|
|
1241
1243
|
switch (value) {
|
|
1242
1244
|
case 0: //OFF - HEAT CURVE
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1246
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1245
1247
|
break;
|
|
1246
1248
|
case 1: //HEAT - HEAT THERMOSTAT / COOL THERMOSTAT
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
+
deviceData.Device.OperationModeZone2 = [0, 3][this.unitStatus];
|
|
1250
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1249
1251
|
break;
|
|
1250
1252
|
case 2: //COOL - HEAT FLOW / COOL FLOW
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
+
deviceData.Device.OperationModeZone2 = [1, 4][this.unitStatus];
|
|
1254
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1253
1255
|
break;
|
|
1254
1256
|
case 3: //AUTO - HEAT CURVE
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1258
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1257
1259
|
break;
|
|
1258
1260
|
};
|
|
1259
|
-
operationModeText = CONSTANTS.HeatPump.ZoneOperation[
|
|
1261
|
+
operationModeText = CONSTANTS.HeatPump.ZoneOperation[deviceData.Device.OperationModeZone2];
|
|
1260
1262
|
break;
|
|
1261
1263
|
};
|
|
1262
1264
|
|
|
1263
|
-
await this.melCloudAtw.send(
|
|
1265
|
+
await this.melCloudAtw.send(deviceData);
|
|
1264
1266
|
const info = this.disableLogInfo ? false : this.emit('message', `${zoneName}, Set operation mode: ${operationModeText}`);
|
|
1265
1267
|
} catch (error) {
|
|
1266
1268
|
this.emit('warn', `${zoneName}, Set operation mode error: ${error}`);
|
|
@@ -1290,24 +1292,24 @@ class DeviceAtw extends EventEmitter {
|
|
|
1290
1292
|
try {
|
|
1291
1293
|
switch (i) {
|
|
1292
1294
|
case 0: //Heat Pump
|
|
1293
|
-
//
|
|
1294
|
-
//
|
|
1295
|
+
//deviceData.Device.SetTemperatureZone1 = value;
|
|
1296
|
+
//deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1295
1297
|
break;
|
|
1296
1298
|
case 1: //Zone 1
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
+
deviceData.Device.SetTemperatureZone1 = value;
|
|
1300
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone1;
|
|
1299
1301
|
break;
|
|
1300
1302
|
case caseHotWater: //Hot Water
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
+
deviceData.Device.SetTankWaterTemperature = value;
|
|
1304
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTankWaterTemperature;
|
|
1303
1305
|
break;
|
|
1304
1306
|
case caseZone2: //Zone 2
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
+
deviceData.Device.SetTemperatureZone2 = value;
|
|
1308
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.SetTemperatureZone2;
|
|
1307
1309
|
break;
|
|
1308
1310
|
};
|
|
1309
1311
|
|
|
1310
|
-
const set = i > 0 ? await this.melCloudAtw.send(
|
|
1312
|
+
const set = i > 0 ? await this.melCloudAtw.send(deviceData) : false;
|
|
1311
1313
|
const info = this.disableLogInfo || i === 0 ? false : this.emit('message', `${zoneName}, Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
1312
1314
|
} catch (error) {
|
|
1313
1315
|
this.emit('warn', `${zoneName}, Set temperature error: ${error}`);
|
|
@@ -1558,22 +1560,18 @@ class DeviceAtw extends EventEmitter {
|
|
|
1558
1560
|
};
|
|
1559
1561
|
|
|
1560
1562
|
//presets services
|
|
1561
|
-
if (presetsConfiguredCount > 0) {
|
|
1563
|
+
if (this.presetsConfiguredCount > 0) {
|
|
1562
1564
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare presets services`) : false;
|
|
1563
1565
|
this.presetsServices = [];
|
|
1564
1566
|
const previousPresets = [];
|
|
1565
1567
|
|
|
1566
|
-
for (let i = 0; i < presetsConfiguredCount; i++) {
|
|
1567
|
-
const preset = presetsConfigured[i];
|
|
1568
|
-
const
|
|
1569
|
-
const presetData = presetsOnServer[index];
|
|
1568
|
+
for (let i = 0; i < this.presetsConfiguredCount; i++) {
|
|
1569
|
+
const preset = this.presetsConfigured[i];
|
|
1570
|
+
const presetData = presetsOnServer.find(p => p.ID === preset.Id);
|
|
1570
1571
|
|
|
1571
1572
|
//get preset name
|
|
1572
1573
|
const presetName = preset.name;
|
|
1573
1574
|
|
|
1574
|
-
//get preset display type
|
|
1575
|
-
const displayType = button.displayType;
|
|
1576
|
-
|
|
1577
1575
|
//get preset name prefix
|
|
1578
1576
|
const presetNamePrefix = preset.namePrefix;
|
|
1579
1577
|
|
|
@@ -1585,54 +1583,52 @@ class DeviceAtw extends EventEmitter {
|
|
|
1585
1583
|
presetService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
|
|
1586
1584
|
presetService.getCharacteristic(characteristicType)
|
|
1587
1585
|
.onGet(async () => {
|
|
1588
|
-
const state =
|
|
1586
|
+
const state = preset.state;
|
|
1589
1587
|
return state;
|
|
1590
1588
|
})
|
|
1591
|
-
|
|
1592
|
-
presetService.onSet(async (state) => {
|
|
1589
|
+
.onSet(async (state) => {
|
|
1593
1590
|
try {
|
|
1594
1591
|
switch (state) {
|
|
1595
1592
|
case true:
|
|
1596
|
-
previousPresets[i] =
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1593
|
+
previousPresets[i] = deviceData.Device;
|
|
1594
|
+
deviceData.Device.Power = presetData.Power;
|
|
1595
|
+
deviceData.Device.EcoHotWater = presetData.EcoHotWater;
|
|
1596
|
+
deviceData.Device.OperationModeZone1 = presetData.OperationModeZone1;
|
|
1597
|
+
deviceData.Device.OperationModeZone2 = presetData.OperationModeZone2;
|
|
1598
|
+
deviceData.Device.SetTankWaterTemperature = presetData.SetTankWaterTemperature;
|
|
1599
|
+
deviceData.Device.SetTemperatureZone1 = presetData.SetTemperatureZone1;
|
|
1600
|
+
deviceData.Device.SetTemperatureZone2 = presetData.SetTemperatureZone2;
|
|
1601
|
+
deviceData.Device.ForcedHotWaterMode = presetData.ForcedHotWaterMode;
|
|
1602
|
+
deviceData.Device.SetHeatFlowTemperatureZone1 = presetData.SetHeatFlowTemperatureZone1;
|
|
1603
|
+
deviceData.Device.SetHeatFlowTemperatureZone2 = presetData.SetHeatFlowTemperatureZone2;
|
|
1604
|
+
deviceData.Device.SetCoolFlowTemperatureZone1 = presetData.SetCoolFlowTemperatureZone1;
|
|
1605
|
+
deviceData.Device.SetCoolFlowTemperatureZone2 = presetData.SetCoolFlowTemperatureZone2;
|
|
1606
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1610
1607
|
break;
|
|
1611
1608
|
case false:
|
|
1612
|
-
|
|
1609
|
+
deviceData.Device = previousPresets[i];
|
|
1613
1610
|
break;
|
|
1614
1611
|
};
|
|
1615
1612
|
|
|
1616
|
-
await this.melCloudAtw.send(
|
|
1613
|
+
await this.melCloudAtw.send(deviceData);
|
|
1617
1614
|
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${presetName}`);
|
|
1618
1615
|
} catch (error) {
|
|
1619
1616
|
this.emit('warn', `Set preset error: ${error}`);
|
|
1620
1617
|
};
|
|
1621
1618
|
});
|
|
1622
|
-
|
|
1623
|
-
previousPresets.push(deviceState);
|
|
1619
|
+
previousPresets.push(deviceData.Device);
|
|
1624
1620
|
this.presetsServices.push(presetService);
|
|
1625
1621
|
accessory.addService(presetService);
|
|
1626
1622
|
};
|
|
1627
1623
|
};
|
|
1628
1624
|
|
|
1629
1625
|
//buttons services
|
|
1630
|
-
if (buttonsConfiguredCount > 0) {
|
|
1626
|
+
if (this.buttonsConfiguredCount > 0) {
|
|
1631
1627
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare buttons services`) : false;
|
|
1632
1628
|
this.buttonsServices = [];
|
|
1633
1629
|
|
|
1634
|
-
for (let i = 0; i < buttonsConfiguredCount; i++) {
|
|
1635
|
-
const button = buttonsConfigured[i];
|
|
1630
|
+
for (let i = 0; i < this.buttonsConfiguredCount; i++) {
|
|
1631
|
+
const button = this.buttonsConfigured[i];
|
|
1636
1632
|
|
|
1637
1633
|
//get button mode
|
|
1638
1634
|
const mode = button.mode;
|
|
@@ -1657,128 +1653,128 @@ class DeviceAtw extends EventEmitter {
|
|
|
1657
1653
|
const state = button.state;
|
|
1658
1654
|
return state;
|
|
1659
1655
|
})
|
|
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
|
-
|
|
1656
|
+
.onSet(async (state) => {
|
|
1657
|
+
if (displayType > 0 && displayType < 3) {
|
|
1658
|
+
try {
|
|
1659
|
+
switch (mode) {
|
|
1660
|
+
case 0: //POWER ON,OFF
|
|
1661
|
+
deviceData.Device.Power = state;
|
|
1662
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power;
|
|
1663
|
+
break;
|
|
1664
|
+
case 1: //HEAT PUMP HEAT
|
|
1665
|
+
deviceData.Device.Power = true;
|
|
1666
|
+
deviceData.Device.UnitStatus = 0;
|
|
1667
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1668
|
+
break;
|
|
1669
|
+
case 2: //COOL
|
|
1670
|
+
deviceData.Device.Power = true;
|
|
1671
|
+
deviceData.Device.UnitStatus = 1;
|
|
1672
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationMode;
|
|
1673
|
+
break;
|
|
1674
|
+
case 3: //HOLIDAY
|
|
1675
|
+
deviceData.Device.HolidayMode = state;
|
|
1676
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.HolidayMode;
|
|
1677
|
+
break;
|
|
1678
|
+
case 10: //ALL ZONES PHYSICAL LOCK CONTROL
|
|
1679
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1680
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1681
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1682
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1 + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater + CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1683
|
+
break;
|
|
1684
|
+
case 20: //ZONE 1 HEAT THERMOSTAT
|
|
1685
|
+
deviceData.Device.Power = true;
|
|
1686
|
+
deviceData.Device.OperationModeZone1 = 0;
|
|
1687
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1688
|
+
break;
|
|
1689
|
+
case 21: //HEAT FLOW
|
|
1690
|
+
deviceData.Device.Power = true;
|
|
1691
|
+
deviceData.Device.OperationModeZone1 = 1;
|
|
1692
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1693
|
+
break;
|
|
1694
|
+
case 22: //HEAT CURVE
|
|
1695
|
+
deviceData.Device.Power = true;
|
|
1696
|
+
deviceData.Device.OperationModeZone1 = 2;
|
|
1697
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1698
|
+
break;
|
|
1699
|
+
case 23: //COOL THERMOSTAT
|
|
1700
|
+
deviceData.Device.Power = true;
|
|
1701
|
+
deviceData.Device.OperationModeZone1 = 3;
|
|
1702
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1703
|
+
break;
|
|
1704
|
+
case 24: //COOL FLOW
|
|
1705
|
+
deviceData.Device.Power = true;
|
|
1706
|
+
deviceData.Device.OperationModeZone1 = 4;
|
|
1707
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1708
|
+
break;
|
|
1709
|
+
case 25: //FLOOR DRY UP
|
|
1710
|
+
deviceData.Device.Power = true;
|
|
1711
|
+
deviceData.Device.OperationModeZone1 = 5;
|
|
1712
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone1;
|
|
1713
|
+
break;
|
|
1714
|
+
case 30: //PHYSICAL LOCK CONTROL
|
|
1715
|
+
deviceData.Device.ProhibitZone1 = state;
|
|
1716
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone1;
|
|
1717
|
+
break;
|
|
1718
|
+
case 40: //HOT WATER NORMAL/FORCE HOT WATER
|
|
1719
|
+
deviceData.Device.Power = true;
|
|
1720
|
+
deviceData.Device.ForcedHotWaterMode = state;
|
|
1721
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.ForcedHotWaterMode;
|
|
1722
|
+
break;
|
|
1723
|
+
case 41: //NORMAL/ECO
|
|
1724
|
+
deviceData.Device.Power = true;
|
|
1725
|
+
deviceData.Device.EcoHotWater = state;
|
|
1726
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.EcoHotWater;
|
|
1727
|
+
break;
|
|
1728
|
+
case 50: //PHYSICAL LOCK CONTROL
|
|
1729
|
+
deviceData.Device.ProhibitHotWater = state;
|
|
1730
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHotWater;
|
|
1731
|
+
break;
|
|
1732
|
+
case 60: //ZONE 2 HEAT THERMOSTAT
|
|
1733
|
+
deviceData.Device.Power = true;
|
|
1734
|
+
deviceData.Device.OperationModeZone2 = 0;
|
|
1735
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1736
|
+
break;
|
|
1737
|
+
case 61: // HEAT FLOW
|
|
1738
|
+
deviceData.Device.Power = true;
|
|
1739
|
+
deviceData.Device.OperationModeZone2 = 1;
|
|
1740
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1741
|
+
break;
|
|
1742
|
+
case 62: //HEAT CURVE
|
|
1743
|
+
deviceData.Device.Power = true;
|
|
1744
|
+
deviceData.Device.OperationModeZone2 = 2;
|
|
1745
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1746
|
+
break;
|
|
1747
|
+
case 63: //COOL THERMOSTAT
|
|
1748
|
+
deviceData.Device.Power = true;
|
|
1749
|
+
deviceData.Device.OperationModeZone2 = 3;
|
|
1750
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1751
|
+
break;
|
|
1752
|
+
case 64: //COOL FLOW
|
|
1753
|
+
deviceData.Device.Power = true;
|
|
1754
|
+
deviceData.Device.OperationModeZone2 = 4;
|
|
1755
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1756
|
+
break;
|
|
1757
|
+
case 65: //FLOOR DRY UP
|
|
1758
|
+
deviceData.Device.Power = true;
|
|
1759
|
+
deviceData.Device.OperationModeZone2 = 5;
|
|
1760
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.HeatPump.EffectiveFlags.Power + CONSTANTS.HeatPump.EffectiveFlags.OperationModeZone2;
|
|
1761
|
+
break;
|
|
1762
|
+
case 70: //PHYSICAL LOCK CONTROL
|
|
1763
|
+
deviceData.Device.ProhibitZone2 = state;
|
|
1764
|
+
CONSTANTS.HeatPump.EffectiveFlags.ProhibitHeatingZone2;
|
|
1765
|
+
break;
|
|
1766
|
+
default:
|
|
1767
|
+
this.emit('message', `Unknown button mode: ${mode}`);
|
|
1768
|
+
break;
|
|
1769
|
+
};
|
|
1774
1770
|
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1771
|
+
await this.melCloudAtw.send(deviceData);
|
|
1772
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set: ${buttonName}`);
|
|
1773
|
+
} catch (error) {
|
|
1774
|
+
this.emit('warn', `Set button error: ${error}`);
|
|
1775
|
+
};
|
|
1779
1776
|
};
|
|
1780
1777
|
});
|
|
1781
|
-
};
|
|
1782
1778
|
this.buttonsServices.push(buttonService);
|
|
1783
1779
|
accessory.addService(buttonService)
|
|
1784
1780
|
};
|