homebridge-melcloud-control 3.3.4 → 3.3.8
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 -0
- package/package.json +1 -1
- package/src/constants.json +13 -1
- package/src/deviceata.js +159 -127
- package/src/deviceatw.js +238 -102
- package/src/deviceerv.js +133 -131
- package/src/melcloud.js +2 -2
- package/src/melcloudata.js +2 -2
- package/src/melcloudatw.js +3 -2
package/src/deviceerv.js
CHANGED
|
@@ -34,7 +34,6 @@ class DeviceErv extends EventEmitter {
|
|
|
34
34
|
this.deviceTypeText = deviceTypeText;
|
|
35
35
|
this.devicesFile = devicesFile;
|
|
36
36
|
this.refreshInterval = refreshInterval;
|
|
37
|
-
this.useFahrenheit = useFahrenheit;
|
|
38
37
|
this.startPrepareAccessory = true;
|
|
39
38
|
this.displayDeviceInfo = true;
|
|
40
39
|
|
|
@@ -95,6 +94,8 @@ class DeviceErv extends EventEmitter {
|
|
|
95
94
|
this.accessory.currentOperationMode = 0;
|
|
96
95
|
this.accessory.targetOperationMode = 0;
|
|
97
96
|
this.accessory.fanSpeed = 0;
|
|
97
|
+
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
98
|
+
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
|
|
98
99
|
};
|
|
99
100
|
|
|
100
101
|
async start() {
|
|
@@ -207,7 +208,6 @@ class DeviceErv extends EventEmitter {
|
|
|
207
208
|
})
|
|
208
209
|
.on('deviceState', async (deviceData) => {
|
|
209
210
|
//device info
|
|
210
|
-
const displayMode = this.displayMode;
|
|
211
211
|
const hasCoolOperationMode = deviceData.Device.HasCoolOperationMode ?? false;
|
|
212
212
|
const hasHeatOperationMode = deviceData.Device.HasHeatOperationMode ?? false;
|
|
213
213
|
const hasAutoOperationMode = deviceData.Device.HasAutoOperationMode ?? false;
|
|
@@ -234,13 +234,13 @@ class DeviceErv extends EventEmitter {
|
|
|
234
234
|
const presetsOnServer = deviceData.Presets ?? [];
|
|
235
235
|
|
|
236
236
|
//device state
|
|
237
|
-
const power = deviceData.Device.Power;
|
|
238
|
-
const offline = deviceData.Device.Offline;
|
|
237
|
+
const power = deviceData.Device.Power ?? false;
|
|
239
238
|
const roomTemperature = deviceData.Device.RoomTemperature;
|
|
240
239
|
const supplyTemperature = deviceData.Device.SupplyTemperature;
|
|
241
240
|
const outdoorTemperature = deviceData.Device.OutdoorTemperature;
|
|
242
241
|
const nightPurgeMode = deviceData.Device.NightPurgeMode;
|
|
243
242
|
const setTemperature = deviceData.Device.SetTemperature;
|
|
243
|
+
const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
|
|
244
244
|
const defaultHeatingSetTemperature = deviceData.Device.DefaultHeatingSetTemperature;
|
|
245
245
|
const defaultCoolingSetTemperature = deviceData.Device.DefaultCoolingSetTemperature;
|
|
246
246
|
const setFanSpeed = deviceData.Device.SetFanSpeed;
|
|
@@ -249,50 +249,41 @@ class DeviceErv extends EventEmitter {
|
|
|
249
249
|
const hideRoomTemperature = deviceData.Device.HideRoomTemperature;
|
|
250
250
|
const hideSupplyTemperature = deviceData.Device.HideSupplyTemperature;
|
|
251
251
|
const hideOutdoorTemperature = deviceData.Device.HideOutdoorTemperature;
|
|
252
|
-
const temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.useFahrenheit];
|
|
253
|
-
|
|
254
|
-
//set temperature
|
|
255
|
-
const targetTemperature = hasCoolOperationMode || hasHeatOperationMode ? setTemperature : 20;
|
|
256
252
|
|
|
257
253
|
//accessory
|
|
258
|
-
this.accessory.
|
|
259
|
-
this.accessory.
|
|
260
|
-
this.accessory.offline = offline ?? false;
|
|
261
|
-
this.accessory.roomTemperature = roomTemperature;
|
|
262
|
-
this.accessory.outdoorTemperature = outdoorTemperature;
|
|
263
|
-
this.accessory.supplyTemperature = supplyTemperature;
|
|
264
|
-
this.accessory.setTemperature = targetTemperature;
|
|
265
|
-
this.accessory.defaultHeatingSetTemperature = defaultHeatingSetTemperature;
|
|
266
|
-
this.accessory.defaultCoolingSetTemperature = defaultCoolingSetTemperature;
|
|
267
|
-
this.accessory.setFanSpeed = setFanSpeed;
|
|
268
|
-
this.accessory.lockPhysicalControl = 0;
|
|
269
|
-
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
270
|
-
this.accessory.useFahrenheit = this.useFahrenheit;
|
|
271
|
-
this.accessory.temperatureUnit = temperatureUnit;
|
|
272
|
-
this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
|
|
254
|
+
this.accessory.hasRoomTemperature = hasRoomTemperature;
|
|
255
|
+
this.accessory.hasSupplyTemperature = hasSupplyTemperature;
|
|
273
256
|
this.accessory.hasOutdoorTemperature = hasOutdoorTemperature;
|
|
274
|
-
this.accessory.numberOfFanSpeeds = numberOfFanSpeeds;
|
|
275
257
|
this.accessory.hasCoolOperationMode = hasCoolOperationMode;
|
|
276
258
|
this.accessory.hasHeatOperationMode = hasHeatOperationMode;
|
|
277
|
-
this.accessory.hasAutoOperationMode = hasAutoOperationMode;
|
|
278
|
-
this.accessory.hasRoomTemperature = hasRoomTemperature;
|
|
279
|
-
this.accessory.hasSupplyTemperature = hasSupplyTemperature;
|
|
280
259
|
this.accessory.hasCO2Sensor = hasCO2Sensor;
|
|
281
|
-
this.accessory.roomCO2Level = roomCO2Level;
|
|
282
|
-
this.accessory.roomCO2Detected = roomCO2Detected;
|
|
283
260
|
this.accessory.hasPM25Sensor = hasPM25Sensor;
|
|
284
|
-
this.accessory.pM25SensorStatus = pM25SensorStatus;
|
|
285
|
-
this.accessory.pM25Level = pM25Level;
|
|
286
|
-
this.accessory.pM25AirQuality = pM25AirQuality;
|
|
287
261
|
this.accessory.hasAutoVentilationMode = hasAutoVentilationMode;
|
|
288
262
|
this.accessory.hasBypassVentilationMode = hasBypassVentilationMode;
|
|
289
|
-
this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
|
|
290
263
|
this.accessory.coreMaintenanceRequired = coreMaintenanceRequired;
|
|
291
264
|
this.accessory.filterMaintenanceRequired = filterMaintenanceRequired;
|
|
292
|
-
this.accessory.
|
|
265
|
+
this.accessory.roomCO2Detected = roomCO2Detected;
|
|
266
|
+
this.accessory.roomCO2Level = roomCO2Level;
|
|
267
|
+
this.accessory.pM25AirQuality = pM25AirQuality;
|
|
268
|
+
this.accessory.pM25Level = pM25Level;
|
|
269
|
+
this.accessory.numberOfFanSpeeds = numberOfFanSpeeds;
|
|
270
|
+
|
|
271
|
+
this.accessory.presets = presetsOnServer;
|
|
272
|
+
|
|
273
|
+
this.accessory.power = power ? 1 : 0;
|
|
274
|
+
this.accessory.operationMode = operationMode;
|
|
275
|
+
this.accessory.ventilationMode = ventilationMode;
|
|
276
|
+
this.accessory.roomTemperature = roomTemperature;
|
|
277
|
+
this.accessory.supplyTemperature = supplyTemperature;
|
|
278
|
+
this.accessory.outdoorTemperature = outdoorTemperature;
|
|
279
|
+
this.accessory.setTemperature = targetTemperature;
|
|
280
|
+
this.accessory.defaultHeatingSetTemperature = defaultHeatingSetTemperature;
|
|
281
|
+
this.accessory.defaultCoolingSetTemperature = defaultCoolingSetTemperature;
|
|
282
|
+
this.accessory.lockPhysicalControl = 0;
|
|
283
|
+
this.accessory.temperatureIncrement = temperatureIncrement;
|
|
293
284
|
|
|
294
285
|
//operation mode - 0, HEAT, 2, COOL, 4, 5, 6, FAN, AUTO
|
|
295
|
-
switch (displayMode) {
|
|
286
|
+
switch (this.displayMode) {
|
|
296
287
|
case 1: //Heater Cooler
|
|
297
288
|
switch (power) {
|
|
298
289
|
case true:
|
|
@@ -353,15 +344,15 @@ class DeviceErv extends EventEmitter {
|
|
|
353
344
|
//update characteristics
|
|
354
345
|
if (this.melCloudService) {
|
|
355
346
|
this.melCloudService
|
|
356
|
-
.updateCharacteristic(Characteristic.Active,
|
|
347
|
+
.updateCharacteristic(Characteristic.Active, power)
|
|
357
348
|
.updateCharacteristic(Characteristic.CurrentHeaterCoolerState, this.accessory.currentOperationMode)
|
|
358
349
|
.updateCharacteristic(Characteristic.TargetHeaterCoolerState, this.accessory.targetOperationMode)
|
|
359
350
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
360
351
|
.updateCharacteristic(Characteristic.RotationSpeed, this.accessory.fanSpeed)
|
|
361
352
|
.updateCharacteristic(Characteristic.LockPhysicalControls, this.accessory.lockPhysicalControl)
|
|
362
353
|
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
|
|
363
|
-
const updateDefHeat =
|
|
364
|
-
const updateDefCool =
|
|
354
|
+
const updateDefHeat = hasHeatOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, ventilationMode === 2 ? defaultHeatingSetTemperature : setTemperature) : false;
|
|
355
|
+
const updateDefCool = hasCoolOperationMode ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, ventilationMode === 2 ? defaultCoolingSetTemperature : setTemperature) : false;
|
|
365
356
|
};
|
|
366
357
|
break;
|
|
367
358
|
case 2: //Thermostat
|
|
@@ -546,15 +537,16 @@ class DeviceErv extends EventEmitter {
|
|
|
546
537
|
//log current state
|
|
547
538
|
if (!this.disableLogInfo) {
|
|
548
539
|
this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
549
|
-
this.emit('message', `
|
|
550
|
-
this.emit('message', `
|
|
551
|
-
|
|
552
|
-
const
|
|
553
|
-
const
|
|
554
|
-
const
|
|
555
|
-
const
|
|
540
|
+
this.emit('message', `Target ventilation mode: ${CONSTANTS.Ventilation.OperationMode[ventilationMode]}`);
|
|
541
|
+
this.emit('message', `Current entilation mode: ${CONSTANTS.Ventilation.OperationMode[actualVentilationMode]}`);
|
|
542
|
+
this.emit('message', `Room temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
|
|
543
|
+
const info = hasCoolOperationMode || hasHeatOperationMode ? this.emit('message', `Target temperature: ${targetTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
544
|
+
const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('message', `Supply temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
545
|
+
const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
546
|
+
const info3 = ventilationMode === 2 && hasHeatOperationMode ? this.emit('message', `Heating threshold temperature: ${defaultHeatingSetTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
547
|
+
const info4 = ventilationMode === 2 && hasCoolOperationMode ? this.emit('message', `Cooling threshold temperature: ${defaultCoolingSetTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
556
548
|
this.emit('message', `Fan speed mode: ${CONSTANTS.Ventilation.FanSpeed[setFanSpeed]}`);
|
|
557
|
-
this.emit('message', `Temperature display unit: ${temperatureUnit}`);
|
|
549
|
+
this.emit('message', `Temperature display unit: ${this.accessory.temperatureUnit}`);
|
|
558
550
|
this.emit('message', `Core maintenance: ${CONSTANTS.Ventilation.CoreMaintenance[coreMaintenanceRequired]}`);
|
|
559
551
|
this.emit('message', `Filter maintenance: ${CONSTANTS.Ventilation.FilterMaintenance[filterMaintenanceRequired]}`);
|
|
560
552
|
const info5 = hasCO2Sensor ? this.emit('message', `CO2 detected: ${CONSTANTS.Ventilation.Co2Detected[roomCO2Detected]}`) : false;
|
|
@@ -563,7 +555,6 @@ class DeviceErv extends EventEmitter {
|
|
|
563
555
|
const info8 = hasPM25Sensor ? this.emit('message', `PM2.5 level: ${pM25Level} µg/m`) : false;
|
|
564
556
|
};
|
|
565
557
|
|
|
566
|
-
//start prepare accessory
|
|
567
558
|
//start prepare accessory
|
|
568
559
|
if (!this.startPrepareAccessory) {
|
|
569
560
|
return;
|
|
@@ -674,6 +665,17 @@ class DeviceErv extends EventEmitter {
|
|
|
674
665
|
//prepare accessory
|
|
675
666
|
async prepareAccessory(accountInfo, deviceData, deviceId, deviceTypeText, deviceName, accountName) {
|
|
676
667
|
try {
|
|
668
|
+
const hasRoomTemperature = this.accessory.hasRoomTemperature;
|
|
669
|
+
const hasSupplyTemperature = this.accessory.hasSupplyTemperature;
|
|
670
|
+
const hasOutdoorTemperature = this.accessory.hasOutdoorTemperature;
|
|
671
|
+
const hasCoolOperationMode = this.accessory.hasCoolOperationMode;
|
|
672
|
+
const hasHeatOperationMode = this.accessory.hasHeatOperationMode;
|
|
673
|
+
const hasCO2Sensor = this.accessory.hasCO2Sensor;
|
|
674
|
+
const hasPM25Sensor = this.accessory.hasPM25Sensor;
|
|
675
|
+
const hasAutoVentilationMode = this.accessory.hasAutoVentilationMode;
|
|
676
|
+
const hasBypassVentilationMode = this.accessory.hasBypassVentilationMode;
|
|
677
|
+
const presetsOnServer = deviceData.Presets;
|
|
678
|
+
|
|
677
679
|
//accessory
|
|
678
680
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare accessory`) : false;
|
|
679
681
|
const accessoryName = deviceName;
|
|
@@ -689,21 +691,9 @@ class DeviceErv extends EventEmitter {
|
|
|
689
691
|
.setCharacteristic(Characteristic.SerialNumber, this.serialNumber)
|
|
690
692
|
.setCharacteristic(Characteristic.FirmwareRevision, this.firmwareRevision);
|
|
691
693
|
|
|
692
|
-
//
|
|
693
|
-
const displayMode = this.displayMode;
|
|
694
|
-
const presetsOnServer = this.accessory.presetsOnServer;
|
|
695
|
-
const temperatureSensor = this.temperatureSensor;
|
|
696
|
-
const temperatureSensorOutdoor = this.temperatureSensorOutdoor;
|
|
697
|
-
const temperatureSensorSupply = this.temperatureSensorSupply;
|
|
698
|
-
const hasCoolOperationMode = this.accessory.hasCoolOperationMode;
|
|
699
|
-
const hasHeatOperationMode = this.accessory.hasHeatOperationMode;
|
|
700
|
-
const hasCO2Sensor = this.accessory.hasCO2Sensor;
|
|
701
|
-
const hasPM25Sensor = this.accessory.hasPM25Sensor;
|
|
702
|
-
const hasAutoVentilationMode = this.accessory.hasAutoVentilationMode;
|
|
703
|
-
const hasBypassVentilationMode = this.accessory.hasBypassVentilationMode;
|
|
694
|
+
//services
|
|
704
695
|
const serviceName = `${deviceTypeText} ${accessoryName}`;
|
|
705
|
-
|
|
706
|
-
switch (displayMode) {
|
|
696
|
+
switch (this.displayMode) {
|
|
707
697
|
case 1: //Heater Cooler
|
|
708
698
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare heather/cooler service`) : false;
|
|
709
699
|
this.melCloudService = new Service.HeaterCooler(serviceName, `HeaterCooler ${deviceId}`);
|
|
@@ -742,18 +732,16 @@ class DeviceErv extends EventEmitter {
|
|
|
742
732
|
switch (value) {
|
|
743
733
|
case 0: //AUTO - AUTO
|
|
744
734
|
deviceData.Device.VentilationMode = hasAutoVentilationMode ? 2 : 0;
|
|
745
|
-
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
746
735
|
break;
|
|
747
736
|
case 1: //HEAT - LOSSNAY
|
|
748
737
|
deviceData.Device.VentilationMode = 0;
|
|
749
|
-
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
750
738
|
break;
|
|
751
739
|
case 2: //COOL - BYPASS
|
|
752
740
|
deviceData.Device.VentilationMode = hasBypassVentilationMode ? 1 : 0;
|
|
753
|
-
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
754
741
|
break;
|
|
755
742
|
};
|
|
756
743
|
|
|
744
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.VentilationMode;
|
|
757
745
|
await this.melCloudErv.send(deviceData);
|
|
758
746
|
const operationModeText = CONSTANTS.Ventilation.VentilationMode[deviceData.Device.VentilationMode];
|
|
759
747
|
const info = this.disableLogInfo ? false : this.emit('message', `Set operation mode: ${operationModeText}`);
|
|
@@ -779,7 +767,7 @@ class DeviceErv extends EventEmitter {
|
|
|
779
767
|
.onSet(async (value) => {
|
|
780
768
|
try {
|
|
781
769
|
let fanSpeedModeText = 0; //AUTO, 1, 2, 3, 4, OFF
|
|
782
|
-
switch (
|
|
770
|
+
switch (this.accessory.numberOfFanSpeeds) {
|
|
783
771
|
case 2: //Fan speed mode 2
|
|
784
772
|
deviceData.Device.SetFanSpeed = ataHasAutomaticFanSpeed ? [0, 1, 2, 0][value] : [1, 1, 2][value];
|
|
785
773
|
fanSpeedModeText = ataHasAutomaticFanSpeed ? [5, 1, 2, 0][value] : [5, 1, 2][value];
|
|
@@ -801,49 +789,63 @@ class DeviceErv extends EventEmitter {
|
|
|
801
789
|
this.emit('warn', `Set fan speed mode error: ${error}`);
|
|
802
790
|
};
|
|
803
791
|
});
|
|
804
|
-
//device can
|
|
805
|
-
if (hasAutoVentilationMode &&
|
|
806
|
-
this.melCloudService.getCharacteristic(Characteristic.
|
|
792
|
+
//device can cool
|
|
793
|
+
if (hasAutoVentilationMode && hasCoolOperationMode) {
|
|
794
|
+
this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
|
|
807
795
|
.setProps({
|
|
808
|
-
minValue:
|
|
796
|
+
minValue: 16,
|
|
809
797
|
maxValue: 31,
|
|
810
798
|
minStep: this.accessory.temperatureIncrement
|
|
811
799
|
})
|
|
812
800
|
.onGet(async () => {
|
|
813
|
-
const value = this.
|
|
801
|
+
const value = this.accessorydefaultCoolingSetTemperature;
|
|
814
802
|
return value;
|
|
815
803
|
})
|
|
816
804
|
.onSet(async (value) => {
|
|
817
805
|
try {
|
|
818
|
-
|
|
806
|
+
switch (this.accessory.ventilationMode) {
|
|
807
|
+
case 2: //AUTO - AUTO
|
|
808
|
+
deviceData.Device.DefaultCoolingSetTemperature = value;
|
|
809
|
+
break;
|
|
810
|
+
default:
|
|
811
|
+
deviceData.Device.SetTemperature = value;
|
|
812
|
+
break
|
|
813
|
+
};
|
|
819
814
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
|
|
820
815
|
await this.melCloudErv.send(deviceData);
|
|
821
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set
|
|
816
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
822
817
|
} catch (error) {
|
|
823
|
-
this.emit('warn', `Set
|
|
818
|
+
this.emit('warn', `Set cooling threshold temperature error: ${error}`);
|
|
824
819
|
};
|
|
825
820
|
});
|
|
826
821
|
};
|
|
827
|
-
//device can
|
|
828
|
-
if (hasAutoVentilationMode &&
|
|
829
|
-
this.melCloudService.getCharacteristic(Characteristic.
|
|
822
|
+
//device can heat
|
|
823
|
+
if (hasAutoVentilationMode && hasHeatOperationMode) {
|
|
824
|
+
this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
|
|
830
825
|
.setProps({
|
|
831
|
-
minValue:
|
|
826
|
+
minValue: 10,
|
|
832
827
|
maxValue: 31,
|
|
833
828
|
minStep: this.accessory.temperatureIncrement
|
|
834
829
|
})
|
|
835
830
|
.onGet(async () => {
|
|
836
|
-
const value = this.accessory.
|
|
831
|
+
const value = this.accessory.defaultHeatingSetTemperature;
|
|
837
832
|
return value;
|
|
838
833
|
})
|
|
839
834
|
.onSet(async (value) => {
|
|
840
835
|
try {
|
|
841
|
-
|
|
836
|
+
switch (this.accessory.ventilationMode) {
|
|
837
|
+
case 2: //AUTO - AUTO
|
|
838
|
+
deviceData.Device.DefaultHeatingSetTemperature = value;
|
|
839
|
+
break;
|
|
840
|
+
default:
|
|
841
|
+
deviceData.Device.SetTemperature = value;
|
|
842
|
+
break
|
|
843
|
+
};
|
|
842
844
|
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
|
|
843
845
|
await this.melCloudErv.send(deviceData);
|
|
844
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set
|
|
846
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
845
847
|
} catch (error) {
|
|
846
|
-
this.emit('warn', `Set
|
|
848
|
+
this.emit('warn', `Set heating threshold temperature error: ${error}`);
|
|
847
849
|
};
|
|
848
850
|
});
|
|
849
851
|
};
|
|
@@ -871,7 +873,7 @@ class DeviceErv extends EventEmitter {
|
|
|
871
873
|
})
|
|
872
874
|
.onSet(async (value) => {
|
|
873
875
|
try {
|
|
874
|
-
accountInfo.UseFahrenheit =
|
|
876
|
+
accountInfo.UseFahrenheit = [false, true][value];
|
|
875
877
|
await this.melCloud.send(accountInfo);
|
|
876
878
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
877
879
|
} catch (error) {
|
|
@@ -954,51 +956,51 @@ class DeviceErv extends EventEmitter {
|
|
|
954
956
|
this.emit('warn', `Set temperature error: ${error}`);
|
|
955
957
|
};
|
|
956
958
|
});
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
};
|
|
1001
|
-
|
|
959
|
+
if (hasAutoVentilationMode) {
|
|
960
|
+
if (hasHeatOperationMode) {
|
|
961
|
+
this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
|
|
962
|
+
.setProps({
|
|
963
|
+
minValue: 10,
|
|
964
|
+
maxValue: 31,
|
|
965
|
+
minStep: this.accessory.temperatureIncrement
|
|
966
|
+
})
|
|
967
|
+
.onGet(async () => {
|
|
968
|
+
const value = this.accessory.defaultHeatingSetTemperature;
|
|
969
|
+
return value;
|
|
970
|
+
})
|
|
971
|
+
.onSet(async (value) => {
|
|
972
|
+
try {
|
|
973
|
+
deviceData.Device.DefaultHeatingSetTemperature = value;
|
|
974
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
|
|
975
|
+
await this.melCloudErv.send(deviceData);
|
|
976
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
977
|
+
} catch (error) {
|
|
978
|
+
this.emit('warn', `Set heating threshold temperature error: ${error}`);
|
|
979
|
+
};
|
|
980
|
+
});
|
|
981
|
+
};
|
|
982
|
+
if (hasCoolOperationMode) {
|
|
983
|
+
this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
|
|
984
|
+
.setProps({
|
|
985
|
+
minValue: 16,
|
|
986
|
+
maxValue: 31,
|
|
987
|
+
minStep: this.accessory.temperatureIncrement
|
|
988
|
+
})
|
|
989
|
+
.onGet(async () => {
|
|
990
|
+
const value = this.accessory.defaultCoolingSetTemperature;
|
|
991
|
+
return value;
|
|
992
|
+
})
|
|
993
|
+
.onSet(async (value) => {
|
|
994
|
+
try {
|
|
995
|
+
deviceData.Device.DefaultCoolingSetTemperature = value;
|
|
996
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.Ventilation.EffectiveFlags.SetTemperature;
|
|
997
|
+
await this.melCloudErv.send(deviceData);
|
|
998
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
999
|
+
} catch (error) {
|
|
1000
|
+
this.emit('warn', `Set cooling threshold temperature error: ${error}`);
|
|
1001
|
+
};
|
|
1002
|
+
});
|
|
1003
|
+
};
|
|
1002
1004
|
};
|
|
1003
1005
|
this.melCloudService.getCharacteristic(Characteristic.TemperatureDisplayUnits)
|
|
1004
1006
|
.onGet(async () => {
|
|
@@ -1007,7 +1009,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1007
1009
|
})
|
|
1008
1010
|
.onSet(async (value) => {
|
|
1009
1011
|
try {
|
|
1010
|
-
accountInfo.UseFahrenheit =
|
|
1012
|
+
accountInfo.UseFahrenheit = [false, true][value];
|
|
1011
1013
|
await this.melCloud.send(accountInfo);
|
|
1012
1014
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1013
1015
|
} catch (error) {
|
|
@@ -1019,7 +1021,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1019
1021
|
};
|
|
1020
1022
|
|
|
1021
1023
|
//temperature sensor service room
|
|
1022
|
-
if (temperatureSensor &&
|
|
1024
|
+
if (this.temperatureSensor && hasRoomTemperature && this.accessory.roomTemperature !== null) {
|
|
1023
1025
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare room temperature sensor service`) : false;
|
|
1024
1026
|
this.roomTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Room`, `Room Temperature Sensor ${deviceId}`);
|
|
1025
1027
|
this.roomTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1038,7 +1040,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1038
1040
|
};
|
|
1039
1041
|
|
|
1040
1042
|
//temperature sensor service supply
|
|
1041
|
-
if (temperatureSensorSupply &&
|
|
1043
|
+
if (this.temperatureSensorSupply && hasSupplyTemperature && this.accessory.supplyTemperature !== null) {
|
|
1042
1044
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare supply temperature sensor service`) : false;
|
|
1043
1045
|
this.supplyTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Supply`, `Supply Temperature Sensor ${deviceId}`);
|
|
1044
1046
|
this.supplyTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
|
@@ -1057,7 +1059,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1057
1059
|
};
|
|
1058
1060
|
|
|
1059
1061
|
//temperature sensor service outdoor
|
|
1060
|
-
if (temperatureSensorOutdoor &&
|
|
1062
|
+
if (this.temperatureSensorOutdoor && hasOutdoorTemperature && this.accessory.outdoorTemperature !== null) {
|
|
1061
1063
|
const debug = this.enableDebugMode ? this.emit('debug', `Prepare outdoor temperature sensor service`) : false;
|
|
1062
1064
|
this.outdoorTemperatureSensorService = new Service.TemperatureSensor(`${serviceName} Outdoor`, `Outdoor Temperature Sensor ${deviceId}`);
|
|
1063
1065
|
this.outdoorTemperatureSensorService.addOptionalCharacteristic(Characteristic.ConfiguredName);
|
package/src/melcloud.js
CHANGED
|
@@ -62,7 +62,7 @@ class MelCloud extends EventEmitter {
|
|
|
62
62
|
const account = accountData.data;
|
|
63
63
|
const accountInfo = account.LoginData;
|
|
64
64
|
const contextKey = accountInfo.ContextKey;
|
|
65
|
-
const useFahrenheit = accountInfo.UseFahrenheit
|
|
65
|
+
const useFahrenheit = accountInfo.UseFahrenheit ?? false;
|
|
66
66
|
this.contextKey = contextKey;
|
|
67
67
|
|
|
68
68
|
//remove sensitive data
|
|
@@ -200,7 +200,7 @@ class MelCloud extends EventEmitter {
|
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
await this.axiosInstancePost(CONSTANTS.ApiUrls.UpdateApplicationOptions, options);
|
|
203
|
-
await this.saveData(this.
|
|
203
|
+
await this.saveData(this.accountFile, accountInfo);
|
|
204
204
|
return true;
|
|
205
205
|
} catch (error) {
|
|
206
206
|
throw new Error(error.message ?? error);
|
package/src/melcloudata.js
CHANGED
|
@@ -405,8 +405,8 @@ class MelCloudAta extends EventEmitter {
|
|
|
405
405
|
VaneVertical: deviceData.Device.VaneVerticalDirection,
|
|
406
406
|
HideVaneControls: deviceData.Device.HideVaneControls,
|
|
407
407
|
HideDryModeControl: deviceData.Device.HideDryModeControl,
|
|
408
|
-
DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature
|
|
409
|
-
DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature
|
|
408
|
+
DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
|
|
409
|
+
DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
|
|
410
410
|
InStandbyMode: deviceData.Device.InStandbyMode,
|
|
411
411
|
ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
|
|
412
412
|
ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
|
package/src/melcloudatw.js
CHANGED
|
@@ -431,10 +431,11 @@ class MelCloudAtw extends EventEmitter {
|
|
|
431
431
|
async send(deviceData) {
|
|
432
432
|
try {
|
|
433
433
|
//prevent to set out of range temp
|
|
434
|
-
const minTempZones =
|
|
435
|
-
const maxTempZones =
|
|
434
|
+
const minTempZones = 0;
|
|
435
|
+
const maxTempZones = 60;
|
|
436
436
|
const minTempWaterTank = 16;
|
|
437
437
|
const maxTempWaterTank = deviceData.Device.MaxTankTemperature ?? 70;
|
|
438
|
+
|
|
438
439
|
deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone1;
|
|
439
440
|
deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone1 > maxTempZones ? maxTempZones : deviceData.Device.SetTemperatureZone1;
|
|
440
441
|
deviceData.Device.SetTemperatureZone1 = deviceData.Device.SetTemperatureZone2 < minTempZones ? minTempZones : deviceData.Device.SetTemperatureZone2;
|