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