homebridge-melcloud-control 3.3.12-beta.2 → 3.3.12-beta.21
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/index.js +4 -3
- package/package.json +1 -1
- package/src/constants.json +0 -6
- package/src/deviceata.js +55 -87
- package/src/deviceatw.js +5 -7
- package/src/deviceerv.js +5 -6
- package/src/melcloud.js +2 -6
- package/src/melcloudata.js +3 -5
- package/src/melcloudatw.js +1 -3
- package/src/melclouderv.js +0 -2
package/index.js
CHANGED
|
@@ -95,6 +95,7 @@ class MelCloudPlatform {
|
|
|
95
95
|
const response = await melCloud.connect();
|
|
96
96
|
const accountInfo = response.accountInfo;
|
|
97
97
|
const contextKey = response.contextKey;
|
|
98
|
+
const useFahrenheit = response.useFahrenheit;
|
|
98
99
|
|
|
99
100
|
//check devices list
|
|
100
101
|
const devices = await melCloud.chackDevicesList(contextKey);
|
|
@@ -116,7 +117,7 @@ class MelCloudPlatform {
|
|
|
116
117
|
|
|
117
118
|
const deviceName = device.name;
|
|
118
119
|
const deviceTypeText = device.typeString;
|
|
119
|
-
const airConditioner = new DeviceAta(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
|
|
120
|
+
const airConditioner = new DeviceAta(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
|
|
120
121
|
airConditioner.on('publishAccessory', (accessory) => {
|
|
121
122
|
|
|
122
123
|
//publish device
|
|
@@ -161,7 +162,7 @@ class MelCloudPlatform {
|
|
|
161
162
|
|
|
162
163
|
const deviceName = device.name;
|
|
163
164
|
const deviceTypeText = device.typeString;
|
|
164
|
-
const heatPump = new DeviceAtw(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
|
|
165
|
+
const heatPump = new DeviceAtw(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
|
|
165
166
|
heatPump.on('publishAccessory', (accessory) => {
|
|
166
167
|
|
|
167
168
|
//publish device
|
|
@@ -206,7 +207,7 @@ class MelCloudPlatform {
|
|
|
206
207
|
|
|
207
208
|
const deviceName = device.name;
|
|
208
209
|
const deviceTypeText = device.typeString;
|
|
209
|
-
const energyRecoveryVentilation = new DeviceErv(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval)
|
|
210
|
+
const energyRecoveryVentilation = new DeviceErv(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, deviceRefreshInterval, useFahrenheit)
|
|
210
211
|
energyRecoveryVentilation.on('publishAccessory', (accessory) => {
|
|
211
212
|
|
|
212
213
|
//publish device
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "3.3.12-beta.
|
|
4
|
+
"version": "3.3.12-beta.21",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
package/src/constants.json
CHANGED
package/src/deviceata.js
CHANGED
|
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
|
|
|
7
7
|
let Accessory, Characteristic, Service, Categories, AccessoryUUID;
|
|
8
8
|
|
|
9
9
|
class DeviceAta extends EventEmitter {
|
|
10
|
-
constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval) {
|
|
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;
|
|
@@ -96,6 +96,8 @@ class DeviceAta extends EventEmitter {
|
|
|
96
96
|
this.accessory.currentOperationMode = 0;
|
|
97
97
|
this.accessory.targetOperationMode = 0;
|
|
98
98
|
this.accessory.fanSpeed = 0;
|
|
99
|
+
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
100
|
+
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
|
|
99
101
|
};
|
|
100
102
|
|
|
101
103
|
async start() {
|
|
@@ -208,9 +210,6 @@ class DeviceAta extends EventEmitter {
|
|
|
208
210
|
this.displayDeviceInfo = false;
|
|
209
211
|
})
|
|
210
212
|
.on('deviceState', async (deviceData) => {
|
|
211
|
-
//use fahrenheit
|
|
212
|
-
const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
|
|
213
|
-
|
|
214
213
|
//presets
|
|
215
214
|
const presetsOnServer = deviceData.Presets ?? [];
|
|
216
215
|
|
|
@@ -245,10 +244,8 @@ class DeviceAta extends EventEmitter {
|
|
|
245
244
|
const operationMode = deviceData.Device.OperationMode;
|
|
246
245
|
const vaneVerticalDirection = deviceData.Device.VaneVerticalDirection;
|
|
247
246
|
const vaneVerticalSwing = deviceData.Device.VaneVerticalSwing;
|
|
248
|
-
this.emit('message', `swing v: ${vaneVerticalSwing}`);
|
|
249
247
|
const vaneHorizontalDirection = deviceData.Device.VaneHorizontalDirection;
|
|
250
248
|
const vaneHorizontalSwing = deviceData.Device.VaneHorizontalSwing;
|
|
251
|
-
this.emit('message', `swing h: ${vaneHorizontalSwing}`);
|
|
252
249
|
const prohibitSetTemperature = deviceData.Device.ProhibitSetTemperature ?? false;
|
|
253
250
|
const prohibitOperationMode = deviceData.Device.ProhibitOperationMode ?? false;
|
|
254
251
|
const prohibitPower = deviceData.Device.ProhibitPower ?? false;
|
|
@@ -256,8 +253,6 @@ class DeviceAta extends EventEmitter {
|
|
|
256
253
|
const outdoorTemperature = deviceData.Device.OutdoorTemperature;
|
|
257
254
|
|
|
258
255
|
//accessory
|
|
259
|
-
this.accessory.useFahrenheit = useFahrenheit;
|
|
260
|
-
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
|
|
261
256
|
this.accessory.presets = presetsOnServer;
|
|
262
257
|
this.accessory.hasAutomaticFanSpeed = hasAutomaticFanSpeed;
|
|
263
258
|
this.accessory.airDirectionFunction = airDirectionFunction;
|
|
@@ -295,15 +290,15 @@ class DeviceAta extends EventEmitter {
|
|
|
295
290
|
case true:
|
|
296
291
|
switch (operationMode) {
|
|
297
292
|
case 1: //HEAT
|
|
298
|
-
this.accessory.currentOperationMode = roomTemperature > setTemperature ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
|
|
293
|
+
this.accessory.currentOperationMode = roomTemperature > setTemperature + 0.5 ? 1 : 2; //INACTIVE, IDLE, HEATING, COOLING
|
|
299
294
|
this.accessory.targetOperationMode = 1; //AUTO, HEAT, COOL
|
|
300
295
|
break;
|
|
301
296
|
case 2: //DRY
|
|
302
|
-
this.accessory.currentOperationMode =
|
|
297
|
+
this.accessory.currentOperationMode = 1;
|
|
303
298
|
this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
|
|
304
299
|
break;
|
|
305
300
|
case 3: //COOL
|
|
306
|
-
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
301
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature - 0.5 ? 1 : 3;
|
|
307
302
|
this.accessory.targetOperationMode = 2;
|
|
308
303
|
break;
|
|
309
304
|
case 7: //FAN
|
|
@@ -311,32 +306,19 @@ class DeviceAta extends EventEmitter {
|
|
|
311
306
|
this.accessory.targetOperationMode = this.autoDryFanMode === 3 ? 0 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : this.accessory.targetOperationMode;
|
|
312
307
|
break;
|
|
313
308
|
case 8: //AUTO
|
|
314
|
-
|
|
315
|
-
switch (curentModeInAuto) {
|
|
316
|
-
case 'HEATING': //HEATING
|
|
317
|
-
const heatingToFan = roomTemperature > defaultHeatingSetTemperature + 1;
|
|
318
|
-
this.accessory.currentOperationMode = heatingToFan ? 1 : 2;
|
|
319
|
-
break;
|
|
320
|
-
case 'COOLING': //COOLING
|
|
321
|
-
const coolingToFan = roomTemperature < defaultCoolingSetTemperature - 1;
|
|
322
|
-
this.accessory.currentOperationMode = coolingToFan ? 1 : 3;
|
|
323
|
-
break;
|
|
324
|
-
default: //FAN
|
|
325
|
-
this.accessory.currentOperationMode = roomTemperature <= defaultHeatingSetTemperature ? 2 : roomTemperature >= defaultCoolingSetTemperature ? 3 : 1;
|
|
326
|
-
break;
|
|
327
|
-
};
|
|
309
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 2 : roomTemperature > setTemperature ? 3 : this.accessory.currentOperationMode;
|
|
328
310
|
this.accessory.targetOperationMode = 0;
|
|
329
311
|
break;
|
|
330
312
|
case 9: //ISEE HEAT
|
|
331
|
-
this.accessory.currentOperationMode = roomTemperature > setTemperature ? 1 : 2
|
|
313
|
+
this.accessory.currentOperationMode = roomTemperature > setTemperature + 0.5 ? 1 : 2
|
|
332
314
|
this.accessory.targetOperationMode = 1;
|
|
333
315
|
break;
|
|
334
316
|
case 10: //ISEE DRY
|
|
335
|
-
this.accessory.currentOperationMode =
|
|
317
|
+
this.accessory.currentOperationMode = 1;
|
|
336
318
|
this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 0 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
|
|
337
319
|
break;
|
|
338
320
|
case 11: //ISEE COOL;
|
|
339
|
-
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 1 : 3;
|
|
321
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature - 0.5 ? 1 : 3;
|
|
340
322
|
this.accessory.targetOperationMode = 2;
|
|
341
323
|
break;
|
|
342
324
|
default:
|
|
@@ -393,8 +375,8 @@ class DeviceAta extends EventEmitter {
|
|
|
393
375
|
.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature)
|
|
394
376
|
.updateCharacteristic(Characteristic.LockPhysicalControls, this.accessory.lockPhysicalControl)
|
|
395
377
|
.updateCharacteristic(Characteristic.TemperatureDisplayUnits, this.accessory.useFahrenheit);
|
|
396
|
-
const
|
|
397
|
-
const
|
|
378
|
+
const updateDefCool = modelSupportsCool ? this.melCloudService.updateCharacteristic(Characteristic.CoolingThresholdTemperature, setTemperature) : false;
|
|
379
|
+
const updateDefHeat = modelSupportsHeat ? this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, this.accessory.targetOperationMode !== 1 ? 10 : setTemperature) : false;
|
|
398
380
|
const updateRS = modelSupportsFanSpeed ? this.melCloudService.updateCharacteristic(Characteristic.RotationSpeed, this.accessory.fanSpeed) : false;
|
|
399
381
|
const updateSM = swingFunction ? this.melCloudService.updateCharacteristic(Characteristic.SwingMode, this.accessory.swingMode) : false;
|
|
400
382
|
};
|
|
@@ -406,15 +388,15 @@ class DeviceAta extends EventEmitter {
|
|
|
406
388
|
case true:
|
|
407
389
|
switch (operationMode) {
|
|
408
390
|
case 1: //HEAT
|
|
409
|
-
this.accessory.currentOperationMode = 1; //OFF, HEATING, COOLING
|
|
391
|
+
this.accessory.currentOperationMode = roomTemperature > setTemperature ? 0 : 1; //OFF, HEATING, COOLING
|
|
410
392
|
this.accessory.targetOperationMode = 1; //OFF, HEAT, COOL, AUTO
|
|
411
393
|
break;
|
|
412
394
|
case 2: //DRY
|
|
413
|
-
this.accessory.currentOperationMode = 2;
|
|
395
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
414
396
|
this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
|
|
415
397
|
break;
|
|
416
398
|
case 3: //COOL
|
|
417
|
-
this.accessory.currentOperationMode = 2;
|
|
399
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
418
400
|
this.accessory.targetOperationMode = 2;
|
|
419
401
|
break;
|
|
420
402
|
case 7: //FAN
|
|
@@ -422,32 +404,31 @@ class DeviceAta extends EventEmitter {
|
|
|
422
404
|
this.accessory.targetOperationMode = this.autoDryFanMode === 3 ? 3 : this.heatDryFanMode === 3 ? 1 : this.coolDryFanMode === 3 ? 2 : this.accessory.targetOperationMode;
|
|
423
405
|
break;
|
|
424
406
|
case 8: //AUTO
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const heatingToFan = roomTemperature > defaultHeatingSetTemperature + 1;
|
|
407
|
+
switch (this.accessory.currentOperationMode) {
|
|
408
|
+
case 2: //HEATING
|
|
409
|
+
const heatingToFan = roomTemperature > (defaultHeatingSetTemperature + 1);
|
|
429
410
|
this.accessory.currentOperationMode = heatingToFan ? 0 : 1;
|
|
430
411
|
break;
|
|
431
|
-
case
|
|
432
|
-
const coolingToFan = roomTemperature < defaultCoolingSetTemperature - 1;
|
|
433
|
-
this.accessory.currentOperationMode =
|
|
412
|
+
case 3: //COOLING
|
|
413
|
+
const coolingToFan = roomTemperature < (defaultCoolingSetTemperature - 1);
|
|
414
|
+
this.accessory.currentOperationMode = coolingToFan ? 0 : 2;
|
|
434
415
|
break;
|
|
435
416
|
default: //FAN
|
|
436
|
-
this.accessory.currentOperationMode = roomTemperature <= defaultHeatingSetTemperature ? 1 : roomTemperature
|
|
417
|
+
this.accessory.currentOperationMode = roomTemperature >= defaultHeatingSetTemperature && roomTemperature <= defaultCoolingSetTemperature ? 0 : roomTemperature < defaultHeatingSetTemperature ? 1 : roomTemperature > defaultCoolingSetTemperature ? 2 : this.accessory.currentOperationMode;
|
|
437
418
|
break;
|
|
438
419
|
};
|
|
439
420
|
this.accessory.targetOperationMode = 3;
|
|
440
421
|
break;
|
|
441
422
|
case 9: //ISEE HEAT
|
|
442
|
-
this.accessory.currentOperationMode = 1
|
|
423
|
+
this.accessory.currentOperationMode = roomTemperature > setTemperature ? 0 : 1;
|
|
443
424
|
this.accessory.targetOperationMode = 1;
|
|
444
425
|
break;
|
|
445
426
|
case 10: //ISEE DRY
|
|
446
|
-
this.accessory.currentOperationMode = 2;
|
|
427
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
447
428
|
this.accessory.targetOperationMode = this.autoDryFanMode === 2 ? 3 : this.heatDryFanMode === 2 ? 1 : this.coolDryFanMode === 2 ? 2 : this.accessory.targetOperationMode;
|
|
448
429
|
break;
|
|
449
430
|
case 11: //ISEE COOL;
|
|
450
|
-
this.accessory.currentOperationMode = 2;
|
|
431
|
+
this.accessory.currentOperationMode = roomTemperature < setTemperature ? 0 : 2;
|
|
451
432
|
this.accessory.targetOperationMode = 2;
|
|
452
433
|
break;
|
|
453
434
|
default:
|
|
@@ -643,16 +624,14 @@ class DeviceAta extends EventEmitter {
|
|
|
643
624
|
this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
644
625
|
this.emit('message', `Target operation mode: ${CONSTANTS.AirConditioner.DriveMode[operationMode]}`);
|
|
645
626
|
this.emit('message', `Current operation mode: ${this.displayMode === 1 ? CONSTANTS.AirConditioner.CurrentOperationModeHeatherCooler[this.accessory.currentOperationMode] : CONSTANTS.AirConditioner.CurrentOperationModeThermostat[this.accessory.currentOperationMode]}`);
|
|
646
|
-
|
|
627
|
+
this.emit('message', `Target temperature: ${setTemperature}${this.accessory.temperatureUnit}`);
|
|
647
628
|
this.emit('message', `Current temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
|
|
648
629
|
const info = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${outdoorTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
649
|
-
const info1 = operationMode === 8 && modelSupportsHeat ? this.emit('message', `Heating threshold temperature: ${defaultHeatingSetTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
650
|
-
const info2 = operationMode === 8 && modelSupportsCool ? this.emit('message', `Cooling threshold temperature: ${defaultCoolingSetTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
651
630
|
const info3 = modelSupportsFanSpeed ? this.emit('message', `Target fan speed: ${CONSTANTS.AirConditioner.FanSpeed[fanSpeed]}`) : false;
|
|
652
631
|
const info4 = modelSupportsFanSpeed ? this.emit('message', `Current fan speed: ${CONSTANTS.AirConditioner.FanSpeed[actualFanSpeed]}`) : false;
|
|
653
632
|
const info5 = vaneHorizontalDirection !== null ? this.emit('message', `Vane horizontal: ${CONSTANTS.AirConditioner.HorizontalVane[vaneHorizontalDirection]}`) : false;
|
|
654
633
|
const info6 = vaneVerticalDirection !== null ? this.emit('message', `Vane vertical: ${CONSTANTS.AirConditioner.VerticalVane[vaneVerticalDirection]}`) : false;
|
|
655
|
-
const info7 = swingFunction ? this.emit('message', `Air direction: ${CONSTANTS.AirConditioner.AirDirection[this.accessory.swingMode
|
|
634
|
+
const info7 = swingFunction ? this.emit('message', `Air direction: ${CONSTANTS.AirConditioner.AirDirection[this.accessory.swingMode]}`) : false;
|
|
656
635
|
this.emit('message', `Temperature display unit: ${this.accessory.temperatureUnit}`);
|
|
657
636
|
this.emit('message', `Lock physical controls: ${this.accessory.lockPhysicalControl ? 'LOCKED' : 'UNLOCKED'}`);
|
|
658
637
|
};
|
|
@@ -926,41 +905,32 @@ class DeviceAta extends EventEmitter {
|
|
|
926
905
|
deviceData.Device.VaneVertical = value ? 7 : 0;
|
|
927
906
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.VaneHorizontal + CONSTANTS.AirConditioner.EffectiveFlags.VaneVertical;
|
|
928
907
|
await this.melCloudAta.send(deviceData);
|
|
929
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set air direction mode: ${CONSTANTS.AirConditioner.AirDirection[value
|
|
908
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set air direction mode: ${CONSTANTS.AirConditioner.AirDirection[value]}`);
|
|
930
909
|
} catch (error) {
|
|
931
910
|
this.emit('warn', `Set vane swing mode error: ${error}`);
|
|
932
911
|
};
|
|
933
912
|
});
|
|
934
913
|
};
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
};
|
|
956
|
-
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
|
|
957
|
-
await this.melCloudAta.send(deviceData);
|
|
958
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
959
|
-
} catch (error) {
|
|
960
|
-
this.emit('warn', `Set cooling threshold temperature error: ${error}`);
|
|
961
|
-
};
|
|
962
|
-
});
|
|
963
|
-
};
|
|
914
|
+
this.melCloudService.getCharacteristic(Characteristic.CoolingThresholdTemperature)
|
|
915
|
+
.setProps({
|
|
916
|
+
minValue: 16,
|
|
917
|
+
maxValue: 31,
|
|
918
|
+
minStep: this.accessory.temperatureIncrement
|
|
919
|
+
})
|
|
920
|
+
.onGet(async () => {
|
|
921
|
+
const value = this.accessory.setTemperature;
|
|
922
|
+
return value;
|
|
923
|
+
})
|
|
924
|
+
.onSet(async (value) => {
|
|
925
|
+
try {
|
|
926
|
+
deviceData.Device.SetTemperature = value;
|
|
927
|
+
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
|
|
928
|
+
await this.melCloudAta.send(deviceData);
|
|
929
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
930
|
+
} catch (error) {
|
|
931
|
+
this.emit('warn', `Set cooling threshold temperature error: ${error}`);
|
|
932
|
+
};
|
|
933
|
+
});
|
|
964
934
|
if (modelSupportsHeat) {
|
|
965
935
|
this.melCloudService.getCharacteristic(Characteristic.HeatingThresholdTemperature)
|
|
966
936
|
.setProps({
|
|
@@ -969,23 +939,19 @@ class DeviceAta extends EventEmitter {
|
|
|
969
939
|
minStep: this.accessory.temperatureIncrement
|
|
970
940
|
})
|
|
971
941
|
.onGet(async () => {
|
|
972
|
-
const value = this.accessory.
|
|
942
|
+
const value = this.accessory.targetOperationMode !== 1 ? 10 : this.accessory.setTemperature;
|
|
973
943
|
return value;
|
|
974
944
|
})
|
|
975
945
|
.onSet(async (value) => {
|
|
976
946
|
try {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
break;
|
|
981
|
-
default:
|
|
982
|
-
deviceData.Device.SetTemperature = value;
|
|
983
|
-
break
|
|
947
|
+
if (this.accessory.targetOperationMode !== 1) {
|
|
948
|
+
this.melCloudService.updateCharacteristic(Characteristic.HeatingThresholdTemperature, 10)
|
|
949
|
+
return;
|
|
984
950
|
};
|
|
985
951
|
|
|
986
952
|
deviceData.Device.EffectiveFlags = CONSTANTS.AirConditioner.EffectiveFlags.SetTemperature;
|
|
987
953
|
await this.melCloudAta.send(deviceData);
|
|
988
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set
|
|
954
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set heat temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
989
955
|
} catch (error) {
|
|
990
956
|
this.emit('warn', `Set heating threshold temperature error: ${error}`);
|
|
991
957
|
};
|
|
@@ -1018,6 +984,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1018
984
|
try {
|
|
1019
985
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
1020
986
|
await this.melCloud.send(accountInfo);
|
|
987
|
+
this.accessory.useFahrenheit = value;
|
|
1021
988
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1022
989
|
} catch (error) {
|
|
1023
990
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
@@ -1154,6 +1121,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1154
1121
|
try {
|
|
1155
1122
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
1156
1123
|
await this.melCloud.send(accountInfo);
|
|
1124
|
+
this.accessory.useFahrenheit = value;
|
|
1157
1125
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1158
1126
|
} catch (error) {
|
|
1159
1127
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
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, devicesFile, refreshInterval) {
|
|
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;
|
|
@@ -97,6 +97,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
97
97
|
|
|
98
98
|
//accessory
|
|
99
99
|
this.accessory = { zones: [{}, {}, {}, {}] };
|
|
100
|
+
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
101
|
+
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
|
|
100
102
|
};
|
|
101
103
|
|
|
102
104
|
async start() {
|
|
@@ -211,12 +213,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
211
213
|
this.displayDeviceInfo = false;
|
|
212
214
|
})
|
|
213
215
|
.on('deviceState', async (deviceData) => {
|
|
214
|
-
//use fahrenheit
|
|
215
|
-
const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
|
|
216
|
-
|
|
217
216
|
//presets
|
|
218
217
|
const presetsOnServer = deviceData.Presets ?? [];
|
|
219
|
-
|
|
220
218
|
//device info
|
|
221
219
|
const heatPumpName = 'Heat Pump';
|
|
222
220
|
const hotWaterName = 'Hot Water';
|
|
@@ -274,8 +272,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
274
272
|
const idleZone2 = deviceData.Device.IdleZone2 ?? false;
|
|
275
273
|
|
|
276
274
|
//accessory
|
|
277
|
-
this.accessory.useFahrenheit = useFahrenheit;
|
|
278
|
-
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit]
|
|
279
275
|
this.accessory.power = power ? 1 : 0;
|
|
280
276
|
this.accessory.operationMode = operationMode;
|
|
281
277
|
this.accessory.operationModeZone1 = operationModeZone1;
|
|
@@ -1260,6 +1256,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1260
1256
|
try {
|
|
1261
1257
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
1262
1258
|
await this.melCloud.send(accountInfo);
|
|
1259
|
+
this.accessory.useFahrenheit = value;
|
|
1263
1260
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1264
1261
|
} catch (error) {
|
|
1265
1262
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
@@ -1552,6 +1549,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1552
1549
|
try {
|
|
1553
1550
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
1554
1551
|
await this.melCloud.send(accountInfo);
|
|
1552
|
+
this.accessory.useFahrenheit = value;
|
|
1555
1553
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1556
1554
|
} catch (error) {
|
|
1557
1555
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
package/src/deviceerv.js
CHANGED
|
@@ -7,7 +7,7 @@ const CONSTANTS = require('./constants.json');
|
|
|
7
7
|
let Accessory, Characteristic, Service, Categories, AccessoryUUID;
|
|
8
8
|
|
|
9
9
|
class DeviceErv extends EventEmitter {
|
|
10
|
-
constructor(api, account, device, melCloud, accountInfo, contextKey, accountName, deviceId, deviceName, deviceTypeText, devicesFile, refreshInterval) {
|
|
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;
|
|
@@ -94,6 +94,8 @@ class DeviceErv extends EventEmitter {
|
|
|
94
94
|
this.accessory.currentOperationMode = 0;
|
|
95
95
|
this.accessory.targetOperationMode = 0;
|
|
96
96
|
this.accessory.fanSpeed = 0;
|
|
97
|
+
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
98
|
+
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[this.accessory.useFahrenheit];
|
|
97
99
|
};
|
|
98
100
|
|
|
99
101
|
async start() {
|
|
@@ -205,9 +207,6 @@ class DeviceErv extends EventEmitter {
|
|
|
205
207
|
this.displayDeviceInfo = false;
|
|
206
208
|
})
|
|
207
209
|
.on('deviceState', async (deviceData) => {
|
|
208
|
-
//use fahrenheit
|
|
209
|
-
const useFahrenheit = deviceData.useFahrenheit ? 1 : 0;
|
|
210
|
-
|
|
211
210
|
//presets
|
|
212
211
|
const presetsOnServer = deviceData.Presets ?? [];
|
|
213
212
|
|
|
@@ -254,8 +253,6 @@ class DeviceErv extends EventEmitter {
|
|
|
254
253
|
const ventilationMode = deviceData.Device.VentilationMode;
|
|
255
254
|
|
|
256
255
|
//accessory
|
|
257
|
-
this.accessory.useFahrenheit = useFahrenheit;
|
|
258
|
-
this.accessory.temperatureUnit = CONSTANTS.TemperatureDisplayUnits[useFahrenheit];
|
|
259
256
|
this.accessory.presets = presetsOnServer;
|
|
260
257
|
this.accessory.hasRoomTemperature = hasRoomTemperature;
|
|
261
258
|
this.accessory.hasSupplyTemperature = hasSupplyTemperature;
|
|
@@ -882,6 +879,7 @@ class DeviceErv extends EventEmitter {
|
|
|
882
879
|
try {
|
|
883
880
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
884
881
|
await this.melCloud.send(accountInfo);
|
|
882
|
+
this.accessory.useFahrenheit = value;
|
|
885
883
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
886
884
|
} catch (error) {
|
|
887
885
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
@@ -1018,6 +1016,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1018
1016
|
try {
|
|
1019
1017
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
1020
1018
|
await this.melCloud.send(accountInfo);
|
|
1019
|
+
this.accessory.useFahrenheit = value;
|
|
1021
1020
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${CONSTANTS.TemperatureDisplayUnits[value]}`);
|
|
1022
1021
|
} catch (error) {
|
|
1023
1022
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
package/src/melcloud.js
CHANGED
|
@@ -63,7 +63,6 @@ class MelCloud extends EventEmitter {
|
|
|
63
63
|
const accountInfo = account.LoginData;
|
|
64
64
|
const contextKey = accountInfo.ContextKey;
|
|
65
65
|
const useFahrenheit = accountInfo.UseFahrenheit ?? false;
|
|
66
|
-
this.useFahrenheit = useFahrenheit;
|
|
67
66
|
this.contextKey = contextKey;
|
|
68
67
|
|
|
69
68
|
//remove sensitive data
|
|
@@ -109,7 +108,8 @@ class MelCloud extends EventEmitter {
|
|
|
109
108
|
|
|
110
109
|
const obj = {
|
|
111
110
|
accountInfo: accountInfo,
|
|
112
|
-
contextKey: contextKey
|
|
111
|
+
contextKey: contextKey,
|
|
112
|
+
useFahrenheit: useFahrenheit
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
return obj;
|
|
@@ -165,10 +165,6 @@ class MelCloud extends EventEmitter {
|
|
|
165
165
|
|
|
166
166
|
//add all devices to the devices array
|
|
167
167
|
devices.push(...allDevices);
|
|
168
|
-
|
|
169
|
-
for (const device of devices) {
|
|
170
|
-
device.useFahrenheit = this.useFahrenheit
|
|
171
|
-
}
|
|
172
168
|
}
|
|
173
169
|
|
|
174
170
|
const devicesCount = devices.length;
|
package/src/melcloudata.js
CHANGED
|
@@ -55,7 +55,6 @@ class MelCloudAta extends EventEmitter {
|
|
|
55
55
|
const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
|
|
56
56
|
|
|
57
57
|
//device info
|
|
58
|
-
const useFahrenheit = deviceData.useFahrenheit;
|
|
59
58
|
const deviceId = deviceData.DeviceID;
|
|
60
59
|
const deviceName = deviceData.DeviceName;
|
|
61
60
|
const buildingId = deviceData.BuildingID;
|
|
@@ -310,7 +309,6 @@ class MelCloudAta extends EventEmitter {
|
|
|
310
309
|
};
|
|
311
310
|
|
|
312
311
|
const deviceState = {
|
|
313
|
-
UseFahrenheit: useFahrenheit,
|
|
314
312
|
Power: power,
|
|
315
313
|
Offlin: offline,
|
|
316
314
|
InStandbyMode: inStandbyMode,
|
|
@@ -333,7 +331,7 @@ class MelCloudAta extends EventEmitter {
|
|
|
333
331
|
ProhibitSetTemperature: prohibitSetTemperature,
|
|
334
332
|
ProhibitOperationMode: prohibitOperationMode,
|
|
335
333
|
ProhibitPower: prohibitPower,
|
|
336
|
-
EffectiveFlags:effectiveFlags
|
|
334
|
+
EffectiveFlags: effectiveFlags
|
|
337
335
|
}
|
|
338
336
|
|
|
339
337
|
//check state changes
|
|
@@ -416,8 +414,8 @@ class MelCloudAta extends EventEmitter {
|
|
|
416
414
|
OperationMode: deviceData.Device.OperationMode,
|
|
417
415
|
VaneHorizontal: deviceData.Device.VaneHorizontalDirection,
|
|
418
416
|
VaneVertical: deviceData.Device.VaneVerticalDirection,
|
|
419
|
-
DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature,
|
|
420
|
-
DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature,
|
|
417
|
+
DefaultHeatingSetTemperature: deviceData.Device.DefaultHeatingSetTemperature ?? 21,
|
|
418
|
+
DefaultCoolingSetTemperature: deviceData.Device.DefaultCoolingSetTemperature ?? 23,
|
|
421
419
|
InStandbyMode: deviceData.Device.InStandbyMode,
|
|
422
420
|
ProhibitSetTemperature: deviceData.Device.ProhibitSetTemperature,
|
|
423
421
|
ProhibitOperationMode: deviceData.Device.ProhibitOperationMode,
|
package/src/melcloudatw.js
CHANGED
|
@@ -55,7 +55,6 @@ class MelCloudAtw extends EventEmitter {
|
|
|
55
55
|
const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
|
|
56
56
|
|
|
57
57
|
//device info
|
|
58
|
-
const useFahrenheit = deviceData.useFahrenheit;
|
|
59
58
|
const deviceId = deviceData.DeviceID;
|
|
60
59
|
const deviceName = deviceData.DeviceName;
|
|
61
60
|
const buildingId = deviceData.BuildingID;
|
|
@@ -371,7 +370,6 @@ class MelCloudAtw extends EventEmitter {
|
|
|
371
370
|
};
|
|
372
371
|
|
|
373
372
|
const deviceState = {
|
|
374
|
-
UseFahrenheit: useFahrenheit,
|
|
375
373
|
Power: power,
|
|
376
374
|
Offlin: offline,
|
|
377
375
|
IdleZone1: idleZone1,
|
|
@@ -398,7 +396,7 @@ class MelCloudAtw extends EventEmitter {
|
|
|
398
396
|
ProhibitZone1: prohibitHeatingZone1,
|
|
399
397
|
ProhibitZone2: prohibitHeatingZone2,
|
|
400
398
|
ProhibitHotWater: prohibitHotWater,
|
|
401
|
-
EffectiveFlags:effectiveFlags
|
|
399
|
+
EffectiveFlags: effectiveFlags
|
|
402
400
|
}
|
|
403
401
|
|
|
404
402
|
//check state changes
|
package/src/melclouderv.js
CHANGED
|
@@ -55,7 +55,6 @@ class MelCloudErv extends EventEmitter {
|
|
|
55
55
|
const debug = this.debugLog ? this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`) : false;
|
|
56
56
|
|
|
57
57
|
//deviceData
|
|
58
|
-
const useFahrenheit = deviceData.useFahrenheit;
|
|
59
58
|
const deviceId = deviceData.DeviceID;
|
|
60
59
|
const deviceName = deviceData.DeviceName;
|
|
61
60
|
const buildingId = deviceData.BuildingID;
|
|
@@ -298,7 +297,6 @@ class MelCloudErv extends EventEmitter {
|
|
|
298
297
|
};
|
|
299
298
|
|
|
300
299
|
const deviceState = {
|
|
301
|
-
UseFahrenheit: useFahrenheit,
|
|
302
300
|
Power: power,
|
|
303
301
|
Offlin: offline,
|
|
304
302
|
RoomTemperature: roomTemperature,
|