@pietrolubini/homebridge-ecoflow 1.0.3 → 1.2.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/.prettierrc.json +2 -1
- package/README.md +32 -0
- package/config.schema.json +18 -1
- package/dist/accessories/batteries/batteryAccessory.d.ts +59 -0
- package/dist/accessories/batteries/batteryAccessory.js +120 -0
- package/dist/accessories/batteries/batteryAccessory.js.map +1 -0
- package/dist/accessories/batteries/delta2Accessory.d.ts +3 -0
- package/dist/accessories/batteries/delta2Accessory.js +4 -0
- package/dist/accessories/batteries/delta2Accessory.js.map +1 -0
- package/dist/accessories/batteries/delta2maxAccessory.d.ts +3 -0
- package/dist/accessories/batteries/delta2maxAccessory.js +4 -0
- package/dist/accessories/batteries/delta2maxAccessory.js.map +1 -0
- package/dist/accessories/ecoFlowAccessory.d.ts +19 -11
- package/dist/accessories/ecoFlowAccessory.js +49 -8
- package/dist/accessories/ecoFlowAccessory.js.map +1 -1
- package/dist/apis/ecoFlowHttpApi.d.ts +46 -0
- package/dist/{accessories/apis → apis}/ecoFlowHttpApi.js +31 -6
- package/dist/apis/ecoFlowHttpApi.js.map +1 -0
- package/dist/apis/ecoFlowMqttApi.d.ts +53 -0
- package/dist/apis/ecoFlowMqttApi.js +100 -0
- package/dist/apis/ecoFlowMqttApi.js.map +1 -0
- package/dist/characteristics/CustomCharacteristic.d.ts +16 -0
- package/dist/characteristics/CustomCharacteristic.js +78 -0
- package/dist/characteristics/CustomCharacteristic.js.map +1 -0
- package/dist/config.d.ts +11 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/helpers/logger.js +6 -6
- package/dist/helpers/logger.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +7 -4
- package/dist/platform.js +29 -13
- package/dist/platform.js.map +1 -1
- package/dist/{accessories/services → services}/accessoryInformationService.d.ts +2 -1
- package/dist/services/accessoryInformationService.js +32 -0
- package/dist/services/accessoryInformationService.js.map +1 -0
- package/dist/{accessories/services/batteryService.d.ts → services/batteryStatusService.d.ts} +3 -2
- package/dist/services/batteryStatusService.js +32 -0
- package/dist/services/batteryStatusService.js.map +1 -0
- package/dist/services/outletAcService.d.ts +8 -0
- package/dist/services/outletAcService.js +17 -0
- package/dist/services/outletAcService.js.map +1 -0
- package/dist/{accessories/services → services}/outletCarService.d.ts +2 -2
- package/dist/{accessories/services → services}/outletCarService.js +4 -2
- package/dist/services/outletCarService.js.map +1 -0
- package/dist/services/outletServiceBase.d.ts +24 -0
- package/dist/services/outletServiceBase.js +62 -0
- package/dist/services/outletServiceBase.js.map +1 -0
- package/dist/{accessories/services → services}/outletUsbService.d.ts +2 -2
- package/dist/{accessories/services → services}/outletUsbService.js +2 -2
- package/dist/services/outletUsbService.js.map +1 -0
- package/dist/services/serviceBase.d.ts +24 -0
- package/dist/services/serviceBase.js +52 -0
- package/dist/services/serviceBase.js.map +1 -0
- package/docs/images/BatteryAdditionalCharacteristics.jpg +0 -0
- package/package.json +3 -1
- package/dist/accessories/apis/ecoFlowHttpApi.d.ts +0 -16
- package/dist/accessories/apis/ecoFlowHttpApi.js.map +0 -1
- package/dist/accessories/apis/ecoFlowMqttApi.d.ts +0 -23
- package/dist/accessories/apis/ecoFlowMqttApi.js +0 -94
- package/dist/accessories/apis/ecoFlowMqttApi.js.map +0 -1
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.d.ts +0 -47
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js +0 -6
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js.map +0 -1
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.d.ts +0 -68
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js +0 -9
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js.map +0 -1
- package/dist/accessories/delta2maxAccessory.d.ts +0 -24
- package/dist/accessories/delta2maxAccessory.js +0 -117
- package/dist/accessories/delta2maxAccessory.js.map +0 -1
- package/dist/accessories/services/accessoryInformationService.js +0 -24
- package/dist/accessories/services/accessoryInformationService.js.map +0 -1
- package/dist/accessories/services/batteryService.js +0 -29
- package/dist/accessories/services/batteryService.js.map +0 -1
- package/dist/accessories/services/outletAcService.d.ts +0 -6
- package/dist/accessories/services/outletAcService.js +0 -15
- package/dist/accessories/services/outletAcService.js.map +0 -1
- package/dist/accessories/services/outletCarService.js.map +0 -1
- package/dist/accessories/services/outletServiceBase.d.ts +0 -15
- package/dist/accessories/services/outletServiceBase.js +0 -44
- package/dist/accessories/services/outletServiceBase.js.map +0 -1
- package/dist/accessories/services/outletUsbService.js.map +0 -1
- package/dist/accessories/services/serviceBase.d.ts +0 -11
- package/dist/accessories/services/serviceBase.js +0 -17
- package/dist/accessories/services/serviceBase.js.map +0 -1
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { EcoFlowAccessoryWithQuota } from './ecoFlowAccessory.js';
|
|
2
|
-
import { BatteryService } from './services/batteryService.js';
|
|
3
|
-
import { OutletUsbService } from './services/outletUsbService.js';
|
|
4
|
-
import { OutletCarService } from './services/outletCarService.js';
|
|
5
|
-
import { OutletAcService } from './services/outletAcService.js';
|
|
6
|
-
import { MqttMessageType, } from './apis/interfaces/ecoFlowMqttContacts.js';
|
|
7
|
-
export class Delta2MaxAccessory extends EcoFlowAccessoryWithQuota {
|
|
8
|
-
batteryService;
|
|
9
|
-
outletUsbService;
|
|
10
|
-
outletAcService;
|
|
11
|
-
outletCarService;
|
|
12
|
-
constructor(platform, accessory, config, log) {
|
|
13
|
-
super(platform, accessory, config, log);
|
|
14
|
-
this.batteryService = new BatteryService(this);
|
|
15
|
-
this.outletUsbService = new OutletUsbService(this);
|
|
16
|
-
this.outletAcService = new OutletAcService(this);
|
|
17
|
-
this.outletCarService = new OutletCarService(this);
|
|
18
|
-
}
|
|
19
|
-
getServices() {
|
|
20
|
-
return [this.batteryService, this.outletUsbService, this.outletAcService, this.outletCarService];
|
|
21
|
-
}
|
|
22
|
-
updateInitialValues(initialData) {
|
|
23
|
-
this.updateBmsInitialValues(initialData);
|
|
24
|
-
this.updateInvInitialValues(initialData);
|
|
25
|
-
this.updatePdInitialValues(initialData);
|
|
26
|
-
}
|
|
27
|
-
subscribeOnParameterUpdates() {
|
|
28
|
-
return [
|
|
29
|
-
this.mqttApi.bmsParams$.subscribe(params => this.updateBmsValues(params)),
|
|
30
|
-
this.mqttApi.invParams$.subscribe(params => this.updateInvValues(params)),
|
|
31
|
-
this.mqttApi.pdParams$.subscribe(params => this.updatePdValues(params)),
|
|
32
|
-
];
|
|
33
|
-
}
|
|
34
|
-
updateBmsInitialValues(initialData) {
|
|
35
|
-
const bmsMessage = {
|
|
36
|
-
typeCode: MqttMessageType.BMS,
|
|
37
|
-
params: {
|
|
38
|
-
f32ShowSoc: initialData['bms_bmsStatus.f32ShowSoc'],
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
this.mqttApi.processMqttMessage(bmsMessage);
|
|
42
|
-
}
|
|
43
|
-
updateInvInitialValues(initialData) {
|
|
44
|
-
const invMessage = {
|
|
45
|
-
typeCode: MqttMessageType.INV,
|
|
46
|
-
params: {
|
|
47
|
-
inputWatts: initialData['inv.inputWatts'],
|
|
48
|
-
outputWatts: initialData['inv.outputWatts'],
|
|
49
|
-
cfgAcEnabled: initialData['inv.cfgAcEnabled'],
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
this.mqttApi.processMqttMessage(invMessage);
|
|
53
|
-
}
|
|
54
|
-
updatePdInitialValues(initialData) {
|
|
55
|
-
const pdMessage = {
|
|
56
|
-
typeCode: MqttMessageType.PD,
|
|
57
|
-
params: {
|
|
58
|
-
carState: initialData['pd.carState'],
|
|
59
|
-
carWatts: initialData['pd.carWatts'],
|
|
60
|
-
dcOutState: initialData['pd.dcOutState'],
|
|
61
|
-
usb1Watts: initialData['pd.usb1Watts'],
|
|
62
|
-
usb2Watts: initialData['pd.usb2Watts'],
|
|
63
|
-
qcUsb1Watts: initialData['pd.qcUsb1Watts'],
|
|
64
|
-
qcUsb2Watts: initialData['pd.qcUsb2Watts'],
|
|
65
|
-
typec1Watts: initialData['pd.typec1Watts'],
|
|
66
|
-
typec2Watts: initialData['pd.typec2Watts'],
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
this.mqttApi.processMqttMessage(pdMessage);
|
|
70
|
-
}
|
|
71
|
-
updateBmsValues(params) {
|
|
72
|
-
if (params.f32ShowSoc !== undefined) {
|
|
73
|
-
this.batteryService.updateStatusLowBattery(params.f32ShowSoc);
|
|
74
|
-
this.batteryService.updateBatteryLevel(params.f32ShowSoc);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
updateInvValues(params) {
|
|
78
|
-
if (params.inputWatts !== undefined) {
|
|
79
|
-
this.batteryService.updateChargingState(params.inputWatts);
|
|
80
|
-
}
|
|
81
|
-
if (params.cfgAcEnabled !== undefined) {
|
|
82
|
-
this.outletAcService.updateState(params.cfgAcEnabled);
|
|
83
|
-
}
|
|
84
|
-
if (params.outputWatts !== undefined) {
|
|
85
|
-
this.outletAcService.updateInUse(params.outputWatts > 0);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
updatePdValues(params) {
|
|
89
|
-
if (params.carState !== undefined) {
|
|
90
|
-
this.outletCarService.updateState(params.carState);
|
|
91
|
-
}
|
|
92
|
-
if (params.carWatts !== undefined) {
|
|
93
|
-
this.outletCarService.updateInUse(params.carWatts > 0);
|
|
94
|
-
}
|
|
95
|
-
if (params.dcOutState !== undefined) {
|
|
96
|
-
this.outletUsbService.updateState(params.dcOutState);
|
|
97
|
-
}
|
|
98
|
-
if (params.usb1Watts !== undefined ||
|
|
99
|
-
params.usb2Watts !== undefined ||
|
|
100
|
-
params.qcUsb1Watts !== undefined ||
|
|
101
|
-
params.qcUsb2Watts !== undefined ||
|
|
102
|
-
params.typec1Watts !== undefined ||
|
|
103
|
-
params.typec2Watts !== undefined) {
|
|
104
|
-
const usbWatts = this.getUsbWatts(params.usb1Watts, params.usb2Watts, params.qcUsb1Watts, params.qcUsb2Watts, params.typec1Watts, params.typec2Watts);
|
|
105
|
-
this.outletUsbService.updateInUse(usbWatts > 0);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
getUsbWatts(usb1Watts, usb2Watts, qcUsb1Watts, qcUsb2Watts, typec1Watts, typec2Watts) {
|
|
109
|
-
return ((usb1Watts ?? 0) +
|
|
110
|
-
(usb2Watts ?? 0) +
|
|
111
|
-
(qcUsb1Watts ?? 0) +
|
|
112
|
-
(qcUsb2Watts ?? 0) +
|
|
113
|
-
(typec1Watts ?? 0) +
|
|
114
|
-
(typec2Watts ?? 0));
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=delta2maxAccessory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delta2maxAccessory.js","sourceRoot":"","sources":["../../src/accessories/delta2maxAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { ServiceBase } from './serviceBase.js';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
export class AccessoryInformationService extends ServiceBase {
|
|
6
|
-
createService() {
|
|
7
|
-
const service = this.ecoFlowAccessory.accessory.getService(this.ecoFlowAccessory.platform.Service.AccessoryInformation) ||
|
|
8
|
-
this.ecoFlowAccessory.accessory.addService(this.ecoFlowAccessory.platform.Service.AccessoryInformation);
|
|
9
|
-
service
|
|
10
|
-
.setCharacteristic(this.ecoFlowAccessory.platform.Characteristic.Manufacturer, 'EcoFlow')
|
|
11
|
-
.setCharacteristic(this.ecoFlowAccessory.platform.Characteristic.Model, this.ecoFlowAccessory.config.model)
|
|
12
|
-
.setCharacteristic(this.ecoFlowAccessory.platform.Characteristic.SerialNumber, this.ecoFlowAccessory.config.serialNumber)
|
|
13
|
-
.setCharacteristic(this.ecoFlowAccessory.platform.Characteristic.FirmwareRevision, this.getVersion());
|
|
14
|
-
return service;
|
|
15
|
-
}
|
|
16
|
-
getVersion() {
|
|
17
|
-
const filename = fileURLToPath(import.meta.url);
|
|
18
|
-
const dirname = path.dirname(filename);
|
|
19
|
-
const packageJsonPath = path.resolve(dirname, '../../../package.json');
|
|
20
|
-
const packageData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
21
|
-
return packageData?.version;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=accessoryInformationService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessoryInformationService.js","sourceRoot":"","sources":["../../../src/accessories/services/accessoryInformationService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,OAAO,2BAA4B,SAAQ,WAAW;IACvC,aAAa;QAC9B,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACvG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAE1G,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;aACxF,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;aAC1G,iBAAiB,CAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAC1D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAC1C;aACA,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxG,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,UAAU;QAChB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,OAAO,WAAW,EAAE,OAAO,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ServiceBase } from './serviceBase.js';
|
|
2
|
-
export class BatteryService extends ServiceBase {
|
|
3
|
-
createService() {
|
|
4
|
-
const service = this.ecoFlowAccessory.accessory.getService(this.ecoFlowAccessory.platform.Service.Battery) ||
|
|
5
|
-
this.ecoFlowAccessory.accessory.addService(this.ecoFlowAccessory.platform.Service.Battery, this.ecoFlowAccessory.config.name);
|
|
6
|
-
return service;
|
|
7
|
-
}
|
|
8
|
-
updateStatusLowBattery(batteryLevel) {
|
|
9
|
-
const statusLowBattery = batteryLevel < 20;
|
|
10
|
-
this.log.debug('Status Low Battery ->', statusLowBattery);
|
|
11
|
-
this.service
|
|
12
|
-
.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.StatusLowBattery)
|
|
13
|
-
.updateValue(statusLowBattery
|
|
14
|
-
? this.ecoFlowAccessory.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW
|
|
15
|
-
: this.ecoFlowAccessory.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL);
|
|
16
|
-
}
|
|
17
|
-
updateBatteryLevel(batteryLevel) {
|
|
18
|
-
this.log.debug('BatteryLevel ->', batteryLevel);
|
|
19
|
-
this.service
|
|
20
|
-
.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.BatteryLevel)
|
|
21
|
-
.updateValue(batteryLevel);
|
|
22
|
-
}
|
|
23
|
-
updateChargingState(chargingPower) {
|
|
24
|
-
const isCharging = chargingPower > 0;
|
|
25
|
-
this.log.debug('ChargingState ->', isCharging);
|
|
26
|
-
this.service.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.ChargingState).updateValue(isCharging);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=batteryService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batteryService.js","sourceRoot":"","sources":["../../../src/accessories/services/batteryService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC1B,aAAa;QAC9B,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1F,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAClC,CAAC;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,sBAAsB,CAAC,YAAoB;QAChD,MAAM,gBAAgB,GAAG,YAAY,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aACjF,WAAW,CACV,gBAAgB;YACd,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,iBAAiB;YAClF,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,oBAAoB,CACxF,CAAC;IACN,CAAC;IAEM,kBAAkB,CAAC,YAAoB;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;aAC7E,WAAW,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAEM,mBAAmB,CAAC,aAAqB;QAC9C,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtH,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
2
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
3
|
-
export declare class OutletAcService extends OutletsServiceBase {
|
|
4
|
-
constructor(ecoFlowAccessory: EcoFlowAccessory);
|
|
5
|
-
protected setOn(value: boolean): Promise<void>;
|
|
6
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
2
|
-
export class OutletAcService extends OutletsServiceBase {
|
|
3
|
-
constructor(ecoFlowAccessory) {
|
|
4
|
-
super('AC', ecoFlowAccessory);
|
|
5
|
-
}
|
|
6
|
-
setOn(value) {
|
|
7
|
-
return this.publishEnabled(3, 'acOutCfg', {
|
|
8
|
-
out_voltage: 4294967295,
|
|
9
|
-
out_freq: 1,
|
|
10
|
-
xboost: Number(true),
|
|
11
|
-
enabled: Number(value),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=outletAcService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outletAcService.js","sourceRoot":"","sources":["../../../src/accessories/services/outletAcService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IACrD,YAAY,gBAAkC;QAC5C,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAEkB,KAAK,CAAC,KAAc;QACrC,OAAO,IAAI,CAAC,cAAc,CAAgC,CAAC,EAAE,UAAU,EAAE;YACvE,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outletCarService.js","sourceRoot":"","sources":["../../../src/accessories/services/outletCarService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,gBAAkC;QAC5C,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAEkB,KAAK,CAAC,KAAc;QACrC,OAAO,IAAI,CAAC,cAAc,CAA8B,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;CACF"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Service } from 'homebridge';
|
|
2
|
-
import { ServiceBase } from './serviceBase.js';
|
|
3
|
-
import { MqttSetMessageParams } from 'accessories/apis/interfaces/ecoFlowMqttContacts.js';
|
|
4
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
5
|
-
export declare abstract class OutletsServiceBase extends ServiceBase {
|
|
6
|
-
private readonly serviceSubType;
|
|
7
|
-
constructor(serviceSubType: string, ecoFlowAccessory: EcoFlowAccessory);
|
|
8
|
-
updateState(state: boolean): void;
|
|
9
|
-
updateInUse(isInUse: boolean): void;
|
|
10
|
-
protected createService(): Service;
|
|
11
|
-
protected abstract setOn(value: boolean): Promise<void>;
|
|
12
|
-
protected publishEnabled<TParams extends MqttSetMessageParams>(moduleType: number, operateType: string, params: TParams): Promise<void>;
|
|
13
|
-
private addCharacteristics;
|
|
14
|
-
private getOrAddService;
|
|
15
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ServiceBase } from './serviceBase.js';
|
|
2
|
-
export class OutletsServiceBase extends ServiceBase {
|
|
3
|
-
serviceSubType;
|
|
4
|
-
constructor(serviceSubType, ecoFlowAccessory) {
|
|
5
|
-
super(ecoFlowAccessory);
|
|
6
|
-
this.serviceSubType = serviceSubType;
|
|
7
|
-
}
|
|
8
|
-
updateState(state) {
|
|
9
|
-
this.log.debug(`${this.serviceSubType} State ->`, state);
|
|
10
|
-
this.service.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.On).updateValue(state);
|
|
11
|
-
}
|
|
12
|
-
updateInUse(isInUse) {
|
|
13
|
-
this.log.debug(`${this.serviceSubType} InUse ->`, isInUse);
|
|
14
|
-
this.service.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.OutletInUse).updateValue(isInUse);
|
|
15
|
-
}
|
|
16
|
-
createService() {
|
|
17
|
-
const service = this.getOrAddService(this.ecoFlowAccessory.config.name, this.serviceSubType);
|
|
18
|
-
this.addCharacteristics(service);
|
|
19
|
-
return service;
|
|
20
|
-
}
|
|
21
|
-
async publishEnabled(moduleType, operateType, params) {
|
|
22
|
-
const data = {
|
|
23
|
-
id: Math.floor(Math.random() * 1000000),
|
|
24
|
-
version: '1.0',
|
|
25
|
-
moduleType,
|
|
26
|
-
operateType,
|
|
27
|
-
params,
|
|
28
|
-
};
|
|
29
|
-
await this.ecoFlowAccessory.mqttApi.publish('/open/<certificateAccount>/<sn>/set', this.ecoFlowAccessory.config.serialNumber, data);
|
|
30
|
-
}
|
|
31
|
-
addCharacteristics(service) {
|
|
32
|
-
service
|
|
33
|
-
.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.On)
|
|
34
|
-
.onSet(value => this.setOn(value));
|
|
35
|
-
}
|
|
36
|
-
getOrAddService(deviceName, serviceSubType) {
|
|
37
|
-
const serviceName = deviceName + ' ' + serviceSubType;
|
|
38
|
-
const service = this.ecoFlowAccessory.accessory.getServiceById(this.ecoFlowAccessory.platform.Service.Outlet, serviceSubType) ||
|
|
39
|
-
this.ecoFlowAccessory.accessory.addService(this.ecoFlowAccessory.platform.Service.Outlet, serviceName, serviceSubType);
|
|
40
|
-
service.setCharacteristic(this.ecoFlowAccessory.platform.Characteristic.Name, serviceName);
|
|
41
|
-
return service;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=outletServiceBase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outletServiceBase.js","sourceRoot":"","sources":["../../../src/accessories/services/outletServiceBase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,MAAM,OAAgB,kBAAmB,SAAQ,WAAW;IAC7B;IAA7B,YAA6B,cAAsB,EAAE,gBAAkC;QACrF,KAAK,CAAC,gBAAgB,CAAC,CAAC;QADG,mBAAc,GAAd,cAAc,CAAQ;IAEnD,CAAC;IAEM,WAAW,CAAC,KAAc;QAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC;IAEM,WAAW,CAAC,OAAgB;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjH,CAAC;IAEkB,aAAa;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7F,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAIS,KAAK,CAAC,cAAc,CAC5B,UAAkB,EAClB,WAAmB,EACnB,MAAe;QAEf,MAAM,IAAI,GAA4B;YACpC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;YACvC,OAAO,EAAE,KAAK;YACd,UAAU;YACV,WAAW;YACX,MAAM;SACP,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CACzC,qCAAqC,EACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,EACzC,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,OAAgB;QACzC,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aACnE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAgB,CAAC,CAAC,CAAC;IAClD,CAAC;IAEO,eAAe,CAAC,UAAkB,EAAE,cAAsB;QAChE,MAAM,WAAW,GAAG,UAAU,GAAG,GAAG,GAAG,cAAc,CAAC;QACtD,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC;YAC7G,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAC7C,WAAW,EACX,cAAc,CACf,CAAC;QAEJ,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE3F,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outletUsbService.js","sourceRoot":"","sources":["../../../src/accessories/services/outletUsbService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,gBAAkC;QAC5C,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAEkB,KAAK,CAAC,KAAc;QACrC,OAAO,IAAI,CAAC,cAAc,CAA8B,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;CACF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Logging, Service } from 'homebridge';
|
|
2
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
3
|
-
export declare abstract class ServiceBase {
|
|
4
|
-
protected ecoFlowAccessory: EcoFlowAccessory;
|
|
5
|
-
protected readonly log: Logging;
|
|
6
|
-
private _service;
|
|
7
|
-
constructor(ecoFlowAccessory: EcoFlowAccessory);
|
|
8
|
-
initialize(): void;
|
|
9
|
-
get service(): Service;
|
|
10
|
-
protected abstract createService(): Service;
|
|
11
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export class ServiceBase {
|
|
2
|
-
ecoFlowAccessory;
|
|
3
|
-
log;
|
|
4
|
-
_service = null;
|
|
5
|
-
constructor(ecoFlowAccessory) {
|
|
6
|
-
this.ecoFlowAccessory = ecoFlowAccessory;
|
|
7
|
-
this.log = ecoFlowAccessory.log;
|
|
8
|
-
}
|
|
9
|
-
initialize() {
|
|
10
|
-
this._service = this.createService();
|
|
11
|
-
}
|
|
12
|
-
// Getter for service
|
|
13
|
-
get service() {
|
|
14
|
-
return this._service;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=serviceBase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serviceBase.js","sourceRoot":"","sources":["../../../src/accessories/services/serviceBase.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,WAAW;IAIT;IAHH,GAAG,CAAU;IACxB,QAAQ,GAAmB,IAAI,CAAC;IAExC,YAAsB,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;QACtD,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;IAClC,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,qBAAqB;IACrB,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAS,CAAC;IACxB,CAAC;CAGF"}
|