homebridge-melcloud-control 3.3.31 → 3.3.32-beta.1
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 +6 -0
- package/homebridge-ui/server.js +2 -2
- package/index.js +16 -15
- package/package.json +1 -1
- package/src/deviceata.js +81 -80
- package/src/deviceatw.js +113 -112
- package/src/deviceerv.js +54 -53
- package/src/impulsegenerator.js +2 -2
- package/src/melcloud.js +21 -20
- package/src/melcloudata.js +13 -12
- package/src/melcloudatw.js +13 -12
- package/src/melclouderv.js +13 -12
- package/src/mqtt.js +4 -4
- package/src/restful.js +4 -4
package/src/deviceerv.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import EventEmitter from 'events';
|
|
3
|
+
import MelCloudErv from './melclouderv.js';
|
|
4
|
+
import RestFul from './restful.js';
|
|
5
|
+
import Mqtt from './mqtt.js';
|
|
6
|
+
import constants from './constants.json' assert { type: 'json' };
|
|
7
|
+
const { TemperatureDisplayUnits, Ventilation, AirConditioner } = constants;
|
|
7
8
|
let Accessory, Characteristic, Service, Categories, AccessoryUUID;
|
|
8
9
|
|
|
9
10
|
class DeviceErv extends EventEmitter {
|
|
@@ -92,7 +93,7 @@ class DeviceErv extends EventEmitter {
|
|
|
92
93
|
//accessory
|
|
93
94
|
this.accessory = {};
|
|
94
95
|
this.accessory.useFahrenheit = useFahrenheit ? 1 : 0;
|
|
95
|
-
this.accessory.temperatureUnit =
|
|
96
|
+
this.accessory.temperatureUnit = TemperatureDisplayUnits[this.accessory.useFahrenheit];
|
|
96
97
|
};
|
|
97
98
|
|
|
98
99
|
async start() {
|
|
@@ -531,19 +532,19 @@ class DeviceErv extends EventEmitter {
|
|
|
531
532
|
//log current state
|
|
532
533
|
if (!this.disableLogInfo) {
|
|
533
534
|
this.emit('message', `Power: ${power ? 'ON' : 'OFF'}`);
|
|
534
|
-
this.emit('message', `Target ventilation mode: ${
|
|
535
|
-
this.emit('message', `Current ventilation mode: ${
|
|
535
|
+
this.emit('message', `Target ventilation mode: ${Ventilation.OperationMode[ventilationMode]}`);
|
|
536
|
+
this.emit('message', `Current ventilation mode: ${Ventilation.OperationMode[actualVentilationMode]}`);
|
|
536
537
|
this.emit('message', `Target temperature: ${setTemperature}${this.accessory.temperatureUnit}`);
|
|
537
538
|
this.emit('message', `Room temperature: ${roomTemperature}${this.accessory.temperatureUnit}`);
|
|
538
539
|
const info1 = hasSupplyTemperature && deviceData.Device.SupplyTemperature !== null ? this.emit('message', `Supply temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
539
540
|
const info2 = hasOutdoorTemperature && deviceData.Device.OutdoorTemperature !== null ? this.emit('message', `Outdoor temperature: ${roomTemperature}${this.accessory.temperatureUnit}`) : false;
|
|
540
|
-
this.emit('message', `Fan speed mode: ${
|
|
541
|
+
this.emit('message', `Fan speed mode: ${Ventilation.FanSpeed[setFanSpeed]}`);
|
|
541
542
|
this.emit('message', `Temperature display unit: ${this.accessory.temperatureUnit}`);
|
|
542
|
-
this.emit('message', `Core maintenance: ${
|
|
543
|
-
this.emit('message', `Filter maintenance: ${
|
|
544
|
-
const info5 = hasCO2Sensor ? this.emit('message', `CO2 detected: ${
|
|
543
|
+
this.emit('message', `Core maintenance: ${Ventilation.CoreMaintenance[coreMaintenanceRequired]}`);
|
|
544
|
+
this.emit('message', `Filter maintenance: ${Ventilation.FilterMaintenance[filterMaintenanceRequired]}`);
|
|
545
|
+
const info5 = hasCO2Sensor ? this.emit('message', `CO2 detected: ${Ventilation.Co2Detected[roomCO2Detected]}`) : false;
|
|
545
546
|
const info6 = hasCO2Sensor ? this.emit('message', `CO2 level: ${roomCO2Level} ppm`) : false;
|
|
546
|
-
const info7 = hasPM25Sensor ? this.emit('message', `PM2.5 air quality: ${
|
|
547
|
+
const info7 = hasPM25Sensor ? this.emit('message', `PM2.5 air quality: ${Ventilation.PM25AirQuality[pM25AirQuality]}`) : false;
|
|
547
548
|
const info8 = hasPM25Sensor ? this.emit('message', `PM2.5 level: ${pM25Level} µg/m`) : false;
|
|
548
549
|
};
|
|
549
550
|
|
|
@@ -591,57 +592,57 @@ class DeviceErv extends EventEmitter {
|
|
|
591
592
|
switch (key) {
|
|
592
593
|
case 'Power':
|
|
593
594
|
deviceData.Device[key] = value;
|
|
594
|
-
deviceData.Device.EffectiveFlags =
|
|
595
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
595
596
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
596
597
|
break;
|
|
597
598
|
case 'OperationMode':
|
|
598
599
|
deviceData.Device[key] = value;
|
|
599
|
-
deviceData.Device.EffectiveFlags =
|
|
600
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.OperationMode;
|
|
600
601
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
601
602
|
break;
|
|
602
603
|
case 'VentilationMode':
|
|
603
604
|
deviceData.Device[key] = value;
|
|
604
|
-
deviceData.Device.EffectiveFlags =
|
|
605
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.VentilationMode;
|
|
605
606
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
606
607
|
break;
|
|
607
608
|
case 'SetTemperature':
|
|
608
609
|
deviceData.Device[key] = value;
|
|
609
|
-
deviceData.Device.EffectiveFlags =
|
|
610
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetTemperature;
|
|
610
611
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
611
612
|
break;
|
|
612
613
|
case 'DefaultCoolingSetTemperature':
|
|
613
614
|
deviceData.Device[key] = value;
|
|
614
|
-
deviceData.Device.EffectiveFlags =
|
|
615
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetTemperature;
|
|
615
616
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
616
617
|
break;
|
|
617
618
|
case 'DefaultHeatingSetTemperature':
|
|
618
619
|
deviceData.Device[key] = value;
|
|
619
|
-
deviceData.Device.EffectiveFlags =
|
|
620
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetTemperature;
|
|
620
621
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
621
622
|
break;
|
|
622
623
|
case 'NightPurgeMode':
|
|
623
624
|
deviceData.Device[key] = value;
|
|
624
|
-
deviceData.Device.EffectiveFlags =
|
|
625
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.NightPurgeMode;
|
|
625
626
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
626
627
|
break;
|
|
627
628
|
case 'SetFanSpeed':
|
|
628
629
|
deviceData.Device[key] = value;
|
|
629
|
-
deviceData.Device.EffectiveFlags =
|
|
630
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetFanSpeed;
|
|
630
631
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
631
632
|
break;
|
|
632
633
|
case 'HideRoomTemperature':
|
|
633
634
|
deviceData[key] = value;
|
|
634
|
-
deviceData.Device.EffectiveFlags =
|
|
635
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Prohibit;
|
|
635
636
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
636
637
|
break;
|
|
637
638
|
case 'HideSupplyTemperature':
|
|
638
639
|
deviceData[key] = value;
|
|
639
|
-
deviceData.Device.EffectiveFlags =
|
|
640
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Prohibit;
|
|
640
641
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
641
642
|
break;
|
|
642
643
|
case 'HideOutdoorTemperature':
|
|
643
644
|
deviceData[key] = value;
|
|
644
|
-
deviceData.Device.EffectiveFlags =
|
|
645
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Prohibit;
|
|
645
646
|
set = await this.melCloudErv.send(deviceData, this.displayMode);
|
|
646
647
|
break;
|
|
647
648
|
default:
|
|
@@ -700,7 +701,7 @@ class DeviceErv extends EventEmitter {
|
|
|
700
701
|
.onSet(async (state) => {
|
|
701
702
|
try {
|
|
702
703
|
deviceData.Device.Power = [false, true][state];
|
|
703
|
-
deviceData.Device.EffectiveFlags =
|
|
704
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
704
705
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
705
706
|
const info = this.disableLogInfo ? false : this.emit('message', `Set power: ${state ? 'ON' : 'OFF'}`);
|
|
706
707
|
} catch (error) {
|
|
@@ -736,9 +737,9 @@ class DeviceErv extends EventEmitter {
|
|
|
736
737
|
break;
|
|
737
738
|
};
|
|
738
739
|
|
|
739
|
-
deviceData.Device.EffectiveFlags =
|
|
740
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.VentilationMode;
|
|
740
741
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
741
|
-
const operationModeText =
|
|
742
|
+
const operationModeText = Ventilation.VentilationMode[deviceData.Device.VentilationMode];
|
|
742
743
|
const info = this.disableLogInfo ? false : this.emit('message', `Set operation mode: ${operationModeText}`);
|
|
743
744
|
} catch (error) {
|
|
744
745
|
this.emit('warn', `Set operation mode error: ${error}`);
|
|
@@ -780,9 +781,9 @@ class DeviceErv extends EventEmitter {
|
|
|
780
781
|
deviceData.Device.SetFanSpeed = hasAutomaticFanSpeed ? [0, 1, 2, 3, 4, 5, 0][value] : [1, 1, 2, 3, 4, 5][value];
|
|
781
782
|
break;;
|
|
782
783
|
};
|
|
783
|
-
deviceData.Device.EffectiveFlags =
|
|
784
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetFanSpeed;
|
|
784
785
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
785
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set fan speed mode: ${
|
|
786
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set fan speed mode: ${Ventilation.FanSpeed[fanSpeedModeText]}`);
|
|
786
787
|
} catch (error) {
|
|
787
788
|
this.emit('warn', `Set fan speed mode error: ${error}`);
|
|
788
789
|
};
|
|
@@ -802,7 +803,7 @@ class DeviceErv extends EventEmitter {
|
|
|
802
803
|
.onSet(async (value) => {
|
|
803
804
|
try {
|
|
804
805
|
deviceData.Device.DefaultCoolingSetTemperature = value;
|
|
805
|
-
deviceData.Device.EffectiveFlags =
|
|
806
|
+
deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
|
|
806
807
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
807
808
|
const info = this.disableLogInfo ? false : this.emit('message', `Set cooling threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
808
809
|
} catch (error) {
|
|
@@ -825,7 +826,7 @@ class DeviceErv extends EventEmitter {
|
|
|
825
826
|
.onSet(async (value) => {
|
|
826
827
|
try {
|
|
827
828
|
deviceData.Device.DefaultHeatingSetTemperature = value;
|
|
828
|
-
deviceData.Device.EffectiveFlags =
|
|
829
|
+
deviceData.Device.EffectiveFlags = AirConditioner.EffectiveFlags.SetTemperature;
|
|
829
830
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
830
831
|
const info = this.disableLogInfo ? false : this.emit('message', `Set heating threshold temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
831
832
|
} catch (error) {
|
|
@@ -860,7 +861,7 @@ class DeviceErv extends EventEmitter {
|
|
|
860
861
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
861
862
|
await this.melCloud.send(accountInfo);
|
|
862
863
|
this.accessory.useFahrenheit = value;
|
|
863
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${
|
|
864
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${TemperatureDisplayUnits[value]}`);
|
|
864
865
|
} catch (error) {
|
|
865
866
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
866
867
|
};
|
|
@@ -890,27 +891,27 @@ class DeviceErv extends EventEmitter {
|
|
|
890
891
|
switch (value) {
|
|
891
892
|
case 0: //OFF - POWER OFF
|
|
892
893
|
deviceData.Device.Power = false;
|
|
893
|
-
deviceData.Device.EffectiveFlags =
|
|
894
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
894
895
|
break;
|
|
895
896
|
case 1: //HEAT - LOSSNAY
|
|
896
897
|
deviceData.Device.Power = true;
|
|
897
898
|
deviceData.Device.VentilationMode = 0;
|
|
898
|
-
deviceData.Device.EffectiveFlags =
|
|
899
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
899
900
|
break;
|
|
900
901
|
case 2: //COOL - BYPASS
|
|
901
902
|
deviceData.Device.Power = true;
|
|
902
903
|
deviceData.Device.VentilationMode = hasBypassVentilationMode ? 1 : 0;
|
|
903
|
-
deviceData.Device.EffectiveFlags =
|
|
904
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
904
905
|
break;
|
|
905
906
|
case 3: //AUTO - AUTO
|
|
906
907
|
deviceData.Device.Power = true;
|
|
907
908
|
deviceData.Device.VentilationMode = hasAutoVentilationMode ? 2 : 0;
|
|
908
|
-
deviceData.Device.EffectiveFlags =
|
|
909
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
909
910
|
break;
|
|
910
911
|
};
|
|
911
912
|
|
|
912
913
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
913
|
-
const operationModeText =
|
|
914
|
+
const operationModeText = Ventilation.VentilationMode[deviceData.Device.VentilationMode];
|
|
914
915
|
const info = this.disableLogInfo ? false : this.emit('message', `Set operation mode: ${operationModeText}`);
|
|
915
916
|
} catch (error) {
|
|
916
917
|
this.emit('warn', `Set operation mode error: ${error}`);
|
|
@@ -934,7 +935,7 @@ class DeviceErv extends EventEmitter {
|
|
|
934
935
|
.onSet(async (value) => {
|
|
935
936
|
try {
|
|
936
937
|
deviceData.Device.SetTemperature = value;
|
|
937
|
-
deviceData.Device.EffectiveFlags =
|
|
938
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.SetTemperature;
|
|
938
939
|
await this.melCloudErv.send(deviceData, this.displayMode);
|
|
939
940
|
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature: ${value}${this.accessory.temperatureUnit}`);
|
|
940
941
|
} catch (error) {
|
|
@@ -951,7 +952,7 @@ class DeviceErv extends EventEmitter {
|
|
|
951
952
|
accountInfo.UseFahrenheit = [false, true][value];
|
|
952
953
|
await this.melCloud.send(accountInfo);
|
|
953
954
|
this.accessory.useFahrenheit = value;
|
|
954
|
-
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${
|
|
955
|
+
const info = this.disableLogInfo ? false : this.emit('message', `Set temperature display unit: ${TemperatureDisplayUnits[value]}`);
|
|
955
956
|
} catch (error) {
|
|
956
957
|
this.emit('warn', `Set temperature display unit error: ${error}`);
|
|
957
958
|
};
|
|
@@ -1117,7 +1118,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1117
1118
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
1118
1119
|
deviceData.Device.VentilationMode = presetData.VentilationMode;
|
|
1119
1120
|
deviceData.Device.SetFanSpeed = presetData.FanSpeed;
|
|
1120
|
-
deviceData.Device.EffectiveFlags =
|
|
1121
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
1121
1122
|
break;
|
|
1122
1123
|
case false:
|
|
1123
1124
|
deviceData.Device.SetTemperature = preset.previousSettings.SetTemperature;
|
|
@@ -1125,7 +1126,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1125
1126
|
deviceData.Device.OperationMode = preset.previousSettings.OperationMode;
|
|
1126
1127
|
deviceData.Device.VentilationMode = preset.previousSettings.VentilationMode;
|
|
1127
1128
|
deviceData.Device.SetFanSpeed = preset.previousSettings.FanSpeed;
|
|
1128
|
-
deviceData.Device.EffectiveFlags =
|
|
1129
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
1129
1130
|
break;
|
|
1130
1131
|
};
|
|
1131
1132
|
|
|
@@ -1173,64 +1174,64 @@ class DeviceErv extends EventEmitter {
|
|
|
1173
1174
|
switch (mode) {
|
|
1174
1175
|
case 0: //POWER ON,OFF
|
|
1175
1176
|
deviceData.Device.Power = state;
|
|
1176
|
-
deviceData.Device.EffectiveFlags =
|
|
1177
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power;
|
|
1177
1178
|
break;
|
|
1178
1179
|
case 1: //OPERATING MODE RECOVERY
|
|
1179
1180
|
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
|
|
1180
1181
|
deviceData.Device.Power = true;
|
|
1181
1182
|
deviceData.Device.VentilationMode = state ? 0 : button.previousValue;
|
|
1182
|
-
deviceData.Device.EffectiveFlags =
|
|
1183
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
1183
1184
|
break;
|
|
1184
1185
|
case 2: //OPERATING MODE BYPASS
|
|
1185
1186
|
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
|
|
1186
1187
|
deviceData.Device.Power = true;
|
|
1187
1188
|
deviceData.Device.VentilationMode = state ? 1 : button.previousValue;
|
|
1188
|
-
deviceData.Device.EffectiveFlags =
|
|
1189
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
1189
1190
|
break
|
|
1190
1191
|
case 3: //OPERATING MODE AUTO
|
|
1191
1192
|
button.previousValue = state ? deviceData.Device.VentilationMode : button.previousValue ?? deviceData.Device.VentilationMode;
|
|
1192
1193
|
deviceData.Device.Power = true;
|
|
1193
1194
|
deviceData.Device.VentilationMode = state ? 2 : button.previousValue;
|
|
1194
|
-
deviceData.Device.EffectiveFlags =
|
|
1195
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.VentilationMode;
|
|
1195
1196
|
break;
|
|
1196
1197
|
case 4: //NIGHT PURGE MODE
|
|
1197
1198
|
deviceData.Device.Power = true;
|
|
1198
1199
|
deviceData.Device.NightPurgeMode = state;
|
|
1199
|
-
deviceData.Device.EffectiveFlags =
|
|
1200
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power
|
|
1200
1201
|
break;
|
|
1201
1202
|
case 10: //FAN SPEED MODE AUTO
|
|
1202
1203
|
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
|
|
1203
1204
|
deviceData.Device.Power = true;
|
|
1204
1205
|
deviceData.Device.SetFanSpeed = state ? 0 : button.previousValue;
|
|
1205
|
-
deviceData.Device.EffectiveFlags =
|
|
1206
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1206
1207
|
break;
|
|
1207
1208
|
case 11: //FAN SPEED MODE 1
|
|
1208
1209
|
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
|
|
1209
1210
|
deviceData.Device.Power = true;
|
|
1210
1211
|
deviceData.Device.SetFanSpeed = state ? 1 : button.previousValue;
|
|
1211
|
-
deviceData.Device.EffectiveFlags =
|
|
1212
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1212
1213
|
break;
|
|
1213
1214
|
case 12: //FAN SPEED MODE 2
|
|
1214
1215
|
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
|
|
1215
1216
|
deviceData.Device.Power = true;
|
|
1216
1217
|
deviceData.Device.SetFanSpeed = state ? 2 : button.previousValue;
|
|
1217
|
-
deviceData.Device.EffectiveFlags =
|
|
1218
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1218
1219
|
break;
|
|
1219
1220
|
case 13: //FAN SPEED MODE 3
|
|
1220
1221
|
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
|
|
1221
1222
|
deviceData.Device.Power = true;
|
|
1222
1223
|
deviceData.Device.SetFanSpeed = state ? 3 : button.previousValue;
|
|
1223
|
-
deviceData.Device.EffectiveFlags =
|
|
1224
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1224
1225
|
break;
|
|
1225
1226
|
case 14: //FAN MODE 4
|
|
1226
1227
|
button.previousValue = state ? deviceData.Device.SetFanSpeed : button.previousValue ?? deviceData.Device.SetFanSpeed;
|
|
1227
1228
|
deviceData.Device.Power = true;
|
|
1228
1229
|
deviceData.Device.SetFanSpeed = state ? 4 : button.previousValue;
|
|
1229
|
-
deviceData.Device.EffectiveFlags =
|
|
1230
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Power + Ventilation.EffectiveFlags.SetFanSpeed;
|
|
1230
1231
|
break;
|
|
1231
1232
|
case 15: //PHYSICAL LOCK CONTROLS
|
|
1232
1233
|
deviceData.Device = deviceData.Device;
|
|
1233
|
-
deviceData.Device.EffectiveFlags =
|
|
1234
|
+
deviceData.Device.EffectiveFlags = Ventilation.EffectiveFlags.Prohibit;
|
|
1234
1235
|
break;
|
|
1235
1236
|
case 16: //ROOM TEMP HIDE
|
|
1236
1237
|
deviceData.HideRoomTemperature = state;
|
|
@@ -1263,4 +1264,4 @@ class DeviceErv extends EventEmitter {
|
|
|
1263
1264
|
};
|
|
1264
1265
|
};
|
|
1265
1266
|
};
|
|
1266
|
-
|
|
1267
|
+
export default DeviceErv;
|
package/src/impulsegenerator.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
import EventEmitter from 'events';
|
|
3
3
|
|
|
4
4
|
class ImpulseGenerator extends EventEmitter {
|
|
5
5
|
constructor() {
|
|
@@ -45,4 +45,4 @@ class ImpulseGenerator extends EventEmitter {
|
|
|
45
45
|
return this.timersState;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
export default ImpulseGenerator;
|
package/src/melcloud.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const fsPromises =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { promises } from 'fs';
|
|
3
|
+
const fsPromises = promises;
|
|
4
|
+
import { Agent } from 'https';
|
|
5
|
+
import { create } from 'axios';
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
import ImpulseGenerator from './impulsegenerator.js';
|
|
8
|
+
import constants from './constants.json' assert { type: 'json' };
|
|
9
|
+
const { ApiUrls } = constants
|
|
9
10
|
|
|
10
11
|
class MelCloud extends EventEmitter {
|
|
11
12
|
constructor(user, passwd, language, accountFile, buildingsFile, devicesFile, enableDebugMode, requestConfig) {
|
|
@@ -46,19 +47,19 @@ class MelCloud extends EventEmitter {
|
|
|
46
47
|
const debug = this.enableDebugMode ? this.emit('debug', `Connecting to MELCloud.`) : false;
|
|
47
48
|
|
|
48
49
|
try {
|
|
49
|
-
const axiosInstanceLogin =
|
|
50
|
+
const axiosInstanceLogin = create({
|
|
50
51
|
method: 'POST',
|
|
51
|
-
baseURL:
|
|
52
|
+
baseURL: ApiUrls.BaseURL,
|
|
52
53
|
timeout: 10000,
|
|
53
54
|
withCredentials: true,
|
|
54
55
|
maxContentLength: 100000000,
|
|
55
56
|
maxBodyLength: 1000000000,
|
|
56
|
-
httpsAgent: new
|
|
57
|
+
httpsAgent: new Agent({
|
|
57
58
|
keepAlive: false,
|
|
58
59
|
rejectUnauthorized: false
|
|
59
60
|
})
|
|
60
61
|
});
|
|
61
|
-
const accountData = await axiosInstanceLogin(
|
|
62
|
+
const accountData = await axiosInstanceLogin(ApiUrls.ClientLogin, this.options);
|
|
62
63
|
const account = accountData.data;
|
|
63
64
|
const accountInfo = account.LoginData;
|
|
64
65
|
const contextKey = accountInfo.ContextKey;
|
|
@@ -83,9 +84,9 @@ class MelCloud extends EventEmitter {
|
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
//create axios instance post
|
|
86
|
-
this.axiosInstancePost =
|
|
87
|
+
this.axiosInstancePost = create({
|
|
87
88
|
method: 'POST',
|
|
88
|
-
baseURL:
|
|
89
|
+
baseURL: ApiUrls.BaseURL,
|
|
89
90
|
timeout: 10000,
|
|
90
91
|
headers: {
|
|
91
92
|
'X-MitsContextKey': contextKey,
|
|
@@ -94,7 +95,7 @@ class MelCloud extends EventEmitter {
|
|
|
94
95
|
maxContentLength: 100000000,
|
|
95
96
|
maxBodyLength: 1000000000,
|
|
96
97
|
withCredentials: true,
|
|
97
|
-
httpsAgent: new
|
|
98
|
+
httpsAgent: new Agent({
|
|
98
99
|
keepAlive: false,
|
|
99
100
|
rejectUnauthorized: false
|
|
100
101
|
})
|
|
@@ -121,9 +122,9 @@ class MelCloud extends EventEmitter {
|
|
|
121
122
|
async chackDevicesList(contextKey) {
|
|
122
123
|
try {
|
|
123
124
|
//create axios instance get
|
|
124
|
-
const axiosInstanceGet =
|
|
125
|
+
const axiosInstanceGet = create({
|
|
125
126
|
method: 'GET',
|
|
126
|
-
baseURL:
|
|
127
|
+
baseURL: ApiUrls.BaseURL,
|
|
127
128
|
timeout: 10000,
|
|
128
129
|
headers: {
|
|
129
130
|
'X-MitsContextKey': contextKey
|
|
@@ -131,14 +132,14 @@ class MelCloud extends EventEmitter {
|
|
|
131
132
|
maxContentLength: 100000000,
|
|
132
133
|
maxBodyLength: 1000000000,
|
|
133
134
|
withCredentials: true,
|
|
134
|
-
httpsAgent: new
|
|
135
|
+
httpsAgent: new Agent({
|
|
135
136
|
keepAlive: false,
|
|
136
137
|
rejectUnauthorized: false
|
|
137
138
|
})
|
|
138
139
|
});
|
|
139
140
|
|
|
140
141
|
const debug = this.enableDebugMode ? this.emit('debug', `Scanning for devices.`) : false;
|
|
141
|
-
const listDevicesData = await axiosInstanceGet(
|
|
142
|
+
const listDevicesData = await axiosInstanceGet(ApiUrls.ListDevices);
|
|
142
143
|
const buildingsList = listDevicesData.data;
|
|
143
144
|
const debug1 = this.enableDebugMode ? this.emit('debug', `Buildings: ${JSON.stringify(buildingsList, null, 2)}`) : false;
|
|
144
145
|
|
|
@@ -199,7 +200,7 @@ class MelCloud extends EventEmitter {
|
|
|
199
200
|
data: accountInfo
|
|
200
201
|
};
|
|
201
202
|
|
|
202
|
-
await this.axiosInstancePost(
|
|
203
|
+
await this.axiosInstancePost(ApiUrls.UpdateApplicationOptions, options);
|
|
203
204
|
await this.saveData(this.accountFile, accountInfo);
|
|
204
205
|
return true;
|
|
205
206
|
} catch (error) {
|
|
@@ -207,4 +208,4 @@ class MelCloud extends EventEmitter {
|
|
|
207
208
|
};
|
|
208
209
|
};
|
|
209
210
|
};
|
|
210
|
-
|
|
211
|
+
export default MelCloud;
|
package/src/melcloudata.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const fsPromises =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { promises } from 'fs';
|
|
3
|
+
const fsPromises = promises;
|
|
4
|
+
import { Agent } from 'https';
|
|
5
|
+
import { create } from 'axios';
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
import ImpulseGenerator from './impulsegenerator.js';
|
|
8
|
+
import constants from './constants.json' assert { type: 'json' };
|
|
9
|
+
const { ApiUrls } = constants
|
|
9
10
|
|
|
10
11
|
class MelCloudAta extends EventEmitter {
|
|
11
12
|
constructor(config) {
|
|
@@ -17,16 +18,16 @@ class MelCloudAta extends EventEmitter {
|
|
|
17
18
|
//set default values
|
|
18
19
|
this.deviceState = {};
|
|
19
20
|
|
|
20
|
-
this.axiosInstancePost =
|
|
21
|
+
this.axiosInstancePost = create({
|
|
21
22
|
method: 'POST',
|
|
22
|
-
baseURL:
|
|
23
|
+
baseURL: ApiUrls.BaseURL,
|
|
23
24
|
timeout: 25000,
|
|
24
25
|
headers: {
|
|
25
26
|
'X-MitsContextKey': config.contextKey,
|
|
26
27
|
'content-type': 'application/json'
|
|
27
28
|
},
|
|
28
29
|
withCredentials: true,
|
|
29
|
-
httpsAgent: new
|
|
30
|
+
httpsAgent: new Agent({
|
|
30
31
|
keepAlive: false,
|
|
31
32
|
rejectUnauthorized: false
|
|
32
33
|
})
|
|
@@ -424,7 +425,7 @@ class MelCloudAta extends EventEmitter {
|
|
|
424
425
|
}
|
|
425
426
|
}
|
|
426
427
|
|
|
427
|
-
await this.axiosInstancePost(
|
|
428
|
+
await this.axiosInstancePost(ApiUrls.SetAta, payload);
|
|
428
429
|
this.updateData(deviceData);
|
|
429
430
|
return true;
|
|
430
431
|
} catch (error) {
|
|
@@ -439,4 +440,4 @@ class MelCloudAta extends EventEmitter {
|
|
|
439
440
|
}, 500);
|
|
440
441
|
}
|
|
441
442
|
};
|
|
442
|
-
|
|
443
|
+
export default MelCloudAta;
|
package/src/melcloudatw.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const fsPromises =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { promises } from 'fs';
|
|
3
|
+
const fsPromises = promises;
|
|
4
|
+
import { Agent } from 'https';
|
|
5
|
+
import { create } from 'axios';
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
import ImpulseGenerator from './impulsegenerator.js';
|
|
8
|
+
import constants from './constants.json' assert { type: 'json' };
|
|
9
|
+
const { ApiUrls } = constants
|
|
9
10
|
|
|
10
11
|
class MelCloudAtw extends EventEmitter {
|
|
11
12
|
constructor(config) {
|
|
@@ -17,16 +18,16 @@ class MelCloudAtw extends EventEmitter {
|
|
|
17
18
|
//set default values
|
|
18
19
|
this.deviceState = {};
|
|
19
20
|
|
|
20
|
-
this.axiosInstancePost =
|
|
21
|
+
this.axiosInstancePost = create({
|
|
21
22
|
method: 'POST',
|
|
22
|
-
baseURL:
|
|
23
|
+
baseURL: ApiUrls.BaseURL,
|
|
23
24
|
timeout: 25000,
|
|
24
25
|
headers: {
|
|
25
26
|
'X-MitsContextKey': config.contextKey,
|
|
26
27
|
'content-type': 'application/json'
|
|
27
28
|
},
|
|
28
29
|
withCredentials: true,
|
|
29
|
-
httpsAgent: new
|
|
30
|
+
httpsAgent: new Agent({
|
|
30
31
|
keepAlive: false,
|
|
31
32
|
rejectUnauthorized: false
|
|
32
33
|
})
|
|
@@ -469,7 +470,7 @@ class MelCloudAtw extends EventEmitter {
|
|
|
469
470
|
}
|
|
470
471
|
}
|
|
471
472
|
|
|
472
|
-
await this.axiosInstancePost(
|
|
473
|
+
await this.axiosInstancePost(ApiUrls.SetAtw, payload);
|
|
473
474
|
this.updateData(deviceData);
|
|
474
475
|
return true;
|
|
475
476
|
} catch (error) {
|
|
@@ -484,4 +485,4 @@ class MelCloudAtw extends EventEmitter {
|
|
|
484
485
|
}, 500);
|
|
485
486
|
}
|
|
486
487
|
};
|
|
487
|
-
|
|
488
|
+
export default MelCloudAtw;
|
package/src/melclouderv.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const fsPromises =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { promises } from 'fs';
|
|
3
|
+
const fsPromises = promises;
|
|
4
|
+
import { create } from 'axios';
|
|
5
|
+
import { Agent } from 'https';
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
import ImpulseGenerator from './impulsegenerator.js';
|
|
8
|
+
import constants from './constants.json' assert { type: 'json' };
|
|
9
|
+
const { ApiUrls } = constants
|
|
9
10
|
|
|
10
11
|
class MelCloudErv extends EventEmitter {
|
|
11
12
|
constructor(config) {
|
|
@@ -17,16 +18,16 @@ class MelCloudErv extends EventEmitter {
|
|
|
17
18
|
//set default values
|
|
18
19
|
this.deviceState = {};
|
|
19
20
|
|
|
20
|
-
this.axiosInstancePost =
|
|
21
|
+
this.axiosInstancePost = create({
|
|
21
22
|
method: 'POST',
|
|
22
|
-
baseURL:
|
|
23
|
+
baseURL: ApiUrls.BaseURL,
|
|
23
24
|
timeout: 25000,
|
|
24
25
|
headers: {
|
|
25
26
|
'X-MitsContextKey': config.contextKey,
|
|
26
27
|
'content-type': 'application/json'
|
|
27
28
|
},
|
|
28
29
|
withCredentials: true,
|
|
29
|
-
httpsAgent: new
|
|
30
|
+
httpsAgent: new Agent({
|
|
30
31
|
keepAlive: false,
|
|
31
32
|
rejectUnauthorized: false
|
|
32
33
|
})
|
|
@@ -395,7 +396,7 @@ class MelCloudErv extends EventEmitter {
|
|
|
395
396
|
}
|
|
396
397
|
}
|
|
397
398
|
|
|
398
|
-
await this.axiosInstancePost(
|
|
399
|
+
await this.axiosInstancePost(ApiUrls.SetErv, payload);
|
|
399
400
|
this.updateData(deviceData);
|
|
400
401
|
return true;
|
|
401
402
|
} catch (error) {
|
|
@@ -410,4 +411,4 @@ class MelCloudErv extends EventEmitter {
|
|
|
410
411
|
}, 500);
|
|
411
412
|
}
|
|
412
413
|
};
|
|
413
|
-
|
|
414
|
+
export default MelCloudErv;
|