@pietrolubini/homebridge-ecoflow 1.2.0 → 1.3.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/.gitattributes +7 -0
- package/.prettierrc.json +1 -0
- package/README.md +154 -24
- package/config.schema.json +73 -2
- package/dist/accessories/batteries/batteryAccessoryBase.d.ts +26 -0
- package/dist/accessories/batteries/batteryAccessoryBase.js +126 -0
- package/dist/accessories/batteries/batteryAccessoryBase.js.map +1 -0
- package/dist/accessories/batteries/batteryAccessoryBase.spec.d.ts +1 -0
- package/dist/accessories/batteries/delta2Accessory.d.ts +2 -2
- package/dist/accessories/batteries/delta2Accessory.js +6 -2
- package/dist/accessories/batteries/delta2Accessory.js.map +1 -1
- package/dist/accessories/batteries/delta2maxAccessory.d.ts +2 -2
- package/dist/accessories/batteries/delta2maxAccessory.js +6 -2
- package/dist/accessories/batteries/delta2maxAccessory.js.map +1 -1
- package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.d.ts +33 -0
- package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.js +3 -0
- package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.js.map +1 -0
- package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.d.ts +36 -0
- package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.js +18 -0
- package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.js.map +1 -0
- package/dist/accessories/batteries/services/outletAcService.d.ts +8 -0
- package/dist/accessories/batteries/services/outletAcService.js +24 -0
- package/dist/accessories/batteries/services/outletAcService.js.map +1 -0
- package/dist/accessories/batteries/services/outletAcService.spec.d.ts +1 -0
- package/dist/accessories/batteries/services/outletBatteryServiceBase.d.ts +5 -0
- package/dist/accessories/batteries/services/outletBatteryServiceBase.js +18 -0
- package/dist/accessories/batteries/services/outletBatteryServiceBase.js.map +1 -0
- package/dist/accessories/batteries/services/outletCarService.d.ts +6 -0
- package/dist/accessories/batteries/services/outletCarService.js +17 -0
- package/dist/accessories/batteries/services/outletCarService.js.map +1 -0
- package/dist/accessories/batteries/services/outletCarService.spec.d.ts +1 -0
- package/dist/accessories/batteries/services/outletUsbService.d.ts +6 -0
- package/dist/accessories/batteries/services/outletUsbService.js +15 -0
- package/dist/accessories/batteries/services/outletUsbService.js.map +1 -0
- package/dist/accessories/batteries/services/outletUsbService.spec.d.ts +1 -0
- package/dist/accessories/batteries/simulations/batterySimulator.d.ts +6 -0
- package/dist/accessories/batteries/simulations/batterySimulator.js +60 -0
- package/dist/accessories/batteries/simulations/batterySimulator.js.map +1 -0
- package/dist/accessories/ecoFlowAccessoryBase.d.ts +41 -0
- package/dist/accessories/ecoFlowAccessoryBase.js +114 -0
- package/dist/accessories/ecoFlowAccessoryBase.js.map +1 -0
- package/dist/accessories/ecoFlowAccessoryBase.spec.d.ts +1 -0
- package/dist/accessories/ecoFlowAccessoryWithQuotaBase.d.ts +15 -0
- package/dist/accessories/ecoFlowAccessoryWithQuotaBase.js +34 -0
- package/dist/accessories/ecoFlowAccessoryWithQuotaBase.js.map +1 -0
- package/dist/accessories/ecoFlowAccessoryWithQuotaBase.spec.d.ts +1 -0
- package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.d.ts +16 -0
- package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.js +3 -0
- package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.js.map +1 -0
- package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.d.ts +41 -0
- package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.js +21 -0
- package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.js.map +1 -0
- package/dist/accessories/powerstream/powerStreamAccessory.d.ts +26 -0
- package/dist/accessories/powerstream/powerStreamAccessory.js +113 -0
- package/dist/accessories/powerstream/powerStreamAccessory.js.map +1 -0
- package/dist/accessories/powerstream/powerStreamAccessory.spec.d.ts +1 -0
- package/dist/accessories/powerstream/services/brightnessService.d.ts +7 -0
- package/dist/accessories/powerstream/services/brightnessService.js +27 -0
- package/dist/accessories/powerstream/services/brightnessService.js.map +1 -0
- package/dist/accessories/powerstream/services/brightnessService.spec.d.ts +1 -0
- package/dist/accessories/powerstream/services/outletInvService.d.ts +7 -0
- package/dist/accessories/powerstream/services/outletInvService.js +14 -0
- package/dist/accessories/powerstream/services/outletInvService.js.map +1 -0
- package/dist/accessories/powerstream/services/outletInvService.spec.d.ts +1 -0
- package/dist/accessories/powerstream/services/outletService.d.ts +8 -0
- package/dist/accessories/powerstream/services/outletService.js +14 -0
- package/dist/accessories/powerstream/services/outletService.js.map +1 -0
- package/dist/accessories/powerstream/services/outletService.spec.d.ts +1 -0
- package/dist/accessories/powerstream/services/powerDemandService.d.ts +7 -0
- package/dist/accessories/powerstream/services/powerDemandService.js +27 -0
- package/dist/accessories/powerstream/services/powerDemandService.js.map +1 -0
- package/dist/accessories/powerstream/services/powerDemandService.spec.d.ts +1 -0
- package/dist/accessories/powerstream/simulations/powerStreamSimulator.d.ts +6 -0
- package/dist/accessories/powerstream/simulations/powerStreamSimulator.js +39 -0
- package/dist/accessories/powerstream/simulations/powerStreamSimulator.js.map +1 -0
- package/dist/apis/containers/deviceInfo.d.ts +13 -0
- package/dist/apis/containers/deviceInfo.js +23 -0
- package/dist/apis/containers/deviceInfo.js.map +1 -0
- package/dist/apis/containers/deviceInfo.spec.d.ts +1 -0
- package/dist/apis/containers/mqttClientContainer.d.ts +17 -0
- package/dist/apis/containers/mqttClientContainer.js +45 -0
- package/dist/apis/containers/mqttClientContainer.js.map +1 -0
- package/dist/apis/containers/mqttClientContainer.spec.d.ts +1 -0
- package/dist/apis/containers/mqttDevice.d.ts +15 -0
- package/dist/apis/containers/mqttDevice.js +43 -0
- package/dist/apis/containers/mqttDevice.js.map +1 -0
- package/dist/apis/containers/mqttDevice.spec.d.ts +1 -0
- package/dist/apis/ecoFlowHttpApiManager.d.ts +13 -0
- package/dist/apis/{ecoFlowHttpApi.js → ecoFlowHttpApiManager.js} +58 -44
- package/dist/apis/ecoFlowHttpApiManager.js.map +1 -0
- package/dist/apis/ecoFlowHttpApiManager.spec.d.ts +1 -0
- package/dist/apis/ecoFlowMqttApiManager.d.ts +25 -0
- package/dist/apis/ecoFlowMqttApiManager.js +152 -0
- package/dist/apis/ecoFlowMqttApiManager.js.map +1 -0
- package/dist/apis/ecoFlowMqttApiManager.spec.d.ts +1 -0
- package/dist/apis/interfaces/httpApiContracts.d.ts +30 -0
- package/dist/apis/interfaces/httpApiContracts.js +9 -0
- package/dist/apis/interfaces/httpApiContracts.js.map +1 -0
- package/dist/apis/interfaces/mqttApiContracts.d.ts +26 -0
- package/dist/apis/interfaces/mqttApiContracts.js +9 -0
- package/dist/apis/interfaces/mqttApiContracts.js.map +1 -0
- package/dist/apis/simulations/mockMqttClient.d.ts +15 -0
- package/dist/apis/simulations/mockMqttClient.js +59 -0
- package/dist/apis/simulations/mockMqttClient.js.map +1 -0
- package/dist/apis/simulations/mockMqttClient.spec.d.ts +1 -0
- package/dist/apis/simulations/simulator.d.ts +13 -0
- package/dist/apis/simulations/simulator.js +26 -0
- package/dist/apis/simulations/simulator.js.map +1 -0
- package/dist/characteristics/customCharacteristic.d.ts +18 -0
- package/dist/characteristics/customCharacteristic.js +94 -0
- package/dist/characteristics/customCharacteristic.js.map +1 -0
- package/dist/characteristics/customCharacteristic.spec.d.ts +1 -0
- package/dist/config.d.ts +33 -4
- package/dist/config.js +18 -4
- package/dist/config.js.map +1 -1
- package/dist/helpers/logger.js +5 -1
- package/dist/helpers/logger.js.map +1 -1
- package/dist/helpers/logger.spec.d.ts +1 -0
- package/dist/helpers/machineIdProvider.d.ts +4 -0
- package/dist/helpers/machineIdProvider.js +19 -0
- package/dist/helpers/machineIdProvider.js.map +1 -0
- package/dist/helpers/machineIdProvider.spec.d.ts +1 -0
- package/dist/helpers/tests/accessoryTestHelper.d.ts +5 -0
- package/dist/helpers/tests/serviceTestHelper.d.ts +6 -0
- package/dist/helpers/tests/sleep.d.ts +1 -0
- package/dist/homebridge-ui/public/index.d.ts +2 -0
- package/dist/homebridge-ui/public/index.html +6 -0
- package/dist/homebridge-ui/public/index.js +1 -0
- package/dist/homebridge-ui/public/index.spec.d.ts +1 -0
- package/dist/homebridge-ui/public/interfaces/contracts.d.ts +13 -0
- package/dist/homebridge-ui/public/interfaces/homebridge.d.ts +52 -0
- package/dist/homebridge-ui/public/renderers/componentRenderer.d.ts +6 -0
- package/dist/homebridge-ui/public/renderers/componentRenderer.spec.d.ts +1 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigDevicesRenderer.d.ts +20 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigDevicesRenderer.spec.d.ts +1 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigNameRenderer.d.ts +5 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigNameRenderer.spec.d.ts +1 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigRenderer.d.ts +6 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigRenderer.spec.d.ts +1 -0
- package/dist/homebridge-ui/public/renderers/pluginConfigRendererBase.d.ts +9 -0
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/index.spec.d.ts +1 -0
- package/dist/platform.d.ts +12 -8
- package/dist/platform.js +91 -30
- package/dist/platform.js.map +1 -1
- package/dist/platform.spec.d.ts +1 -0
- package/dist/services/accessoryInformationService.d.ts +5 -3
- package/dist/services/accessoryInformationService.js +15 -12
- package/dist/services/accessoryInformationService.js.map +1 -1
- package/dist/services/accessoryInformationService.spec.d.ts +1 -0
- package/dist/services/batteryStatusService.d.ts +6 -4
- package/dist/services/batteryStatusService.js +19 -17
- package/dist/services/batteryStatusService.js.map +1 -1
- package/dist/services/batteryStatusService.spec.d.ts +1 -0
- package/dist/services/fanServiceBase.d.ts +16 -0
- package/dist/services/fanServiceBase.js +42 -0
- package/dist/services/fanServiceBase.js.map +1 -0
- package/dist/services/fanServiceBase.spec.d.ts +1 -0
- package/dist/services/lightBulbServiceBase.d.ts +16 -0
- package/dist/services/lightBulbServiceBase.js +42 -0
- package/dist/services/lightBulbServiceBase.js.map +1 -0
- package/dist/services/lightBulbServiceBase.spec.d.ts +1 -0
- package/dist/services/outletServiceBase.d.ts +7 -15
- package/dist/services/outletServiceBase.js +20 -28
- package/dist/services/outletServiceBase.js.map +1 -1
- package/dist/services/outletServiceBase.spec.d.ts +1 -0
- package/dist/services/serviceBase.d.ts +10 -5
- package/dist/services/serviceBase.js +31 -8
- package/dist/services/serviceBase.js.map +1 -1
- package/dist/settings.js +5 -2
- package/dist/settings.js.map +1 -1
- package/docs/images/plugin_icon.png +0 -0
- package/jest.config.ts +46 -0
- package/junit.xml +843 -0
- package/package.json +42 -12
- package/tsconfig.build.json +5 -0
- package/tsconfig.spec.json +8 -0
- package/dist/accessories/batteries/batteryAccessory.d.ts +0 -59
- package/dist/accessories/batteries/batteryAccessory.js +0 -120
- package/dist/accessories/batteries/batteryAccessory.js.map +0 -1
- package/dist/accessories/ecoFlowAccessory.d.ts +0 -42
- package/dist/accessories/ecoFlowAccessory.js +0 -116
- package/dist/accessories/ecoFlowAccessory.js.map +0 -1
- package/dist/apis/ecoFlowHttpApi.d.ts +0 -46
- package/dist/apis/ecoFlowHttpApi.js.map +0 -1
- package/dist/apis/ecoFlowMqttApi.d.ts +0 -53
- package/dist/apis/ecoFlowMqttApi.js +0 -100
- package/dist/apis/ecoFlowMqttApi.js.map +0 -1
- package/dist/characteristics/CustomCharacteristic.d.ts +0 -16
- package/dist/characteristics/CustomCharacteristic.js +0 -78
- package/dist/characteristics/CustomCharacteristic.js.map +0 -1
- package/dist/helpers/machineId.d.ts +0 -2
- package/dist/helpers/machineId.js +0 -15
- package/dist/helpers/machineId.js.map +0 -1
- package/dist/helpers/machineIdHelper.cjs +0 -5
- package/dist/services/outletAcService.d.ts +0 -8
- package/dist/services/outletAcService.js +0 -17
- package/dist/services/outletAcService.js.map +0 -1
- package/dist/services/outletCarService.d.ts +0 -6
- package/dist/services/outletCarService.js +0 -12
- package/dist/services/outletCarService.js.map +0 -1
- package/dist/services/outletUsbService.d.ts +0 -6
- package/dist/services/outletUsbService.js +0 -10
- package/dist/services/outletUsbService.js.map +0 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomCharacteristics = exports.PowerConsumption = exports.OutputConsumptionWattFactory = exports.InputConsumptionWattFactory = void 0;
|
|
4
|
+
const InputConsumptionWattFactory = (hap) => {
|
|
5
|
+
return class InputConsumptionWatt extends hap.Characteristic {
|
|
6
|
+
static UUID = '13172B0A-D346-4730-9732-32EF5B6EF8B7';
|
|
7
|
+
constructor() {
|
|
8
|
+
super('Input Consumption', InputConsumptionWatt.UUID, {
|
|
9
|
+
description: 'Input Consumption, W',
|
|
10
|
+
format: "float" /* hap.Formats.FLOAT */,
|
|
11
|
+
perms: ["ev" /* hap.Perms.NOTIFY */, "pr" /* hap.Perms.PAIRED_READ */],
|
|
12
|
+
minValue: 0,
|
|
13
|
+
minStep: 1,
|
|
14
|
+
unit: "celsius" /* hap.Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
|
|
15
|
+
});
|
|
16
|
+
this.value = this.getDefaultValue();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
exports.InputConsumptionWattFactory = InputConsumptionWattFactory;
|
|
21
|
+
const OutputConsumptionWattFactory = (hap) => {
|
|
22
|
+
return class OutputConsumptionWatt extends hap.Characteristic {
|
|
23
|
+
// Eve characteristic
|
|
24
|
+
static UUID = 'E863F10D-079E-48FF-8F27-9C2605A29F52';
|
|
25
|
+
constructor() {
|
|
26
|
+
super('Output Consumption', OutputConsumptionWatt.UUID, {
|
|
27
|
+
description: 'Output Consumption, W',
|
|
28
|
+
format: "float" /* hap.Formats.FLOAT */,
|
|
29
|
+
perms: ["ev" /* hap.Perms.NOTIFY */, "pr" /* hap.Perms.PAIRED_READ */],
|
|
30
|
+
unit: "celsius" /* hap.Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
|
|
31
|
+
minValue: 0,
|
|
32
|
+
minStep: 1,
|
|
33
|
+
});
|
|
34
|
+
this.value = this.getDefaultValue();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.OutputConsumptionWattFactory = OutputConsumptionWattFactory;
|
|
39
|
+
// https://gist.github.com/simont77/3f4d4330fa55b83f8ca96388d9004e7d
|
|
40
|
+
// export const PowerConsumptionVoltFactory = (hap: HAP): WithUUID<{ new (): Characteristic }> => {
|
|
41
|
+
// return class PowerConsumptionVolt extends hap.Characteristic {
|
|
42
|
+
// public static readonly UUID: string = 'E863F10A-079E-48FF-8F27-9C2605A29F52';
|
|
43
|
+
// constructor() {
|
|
44
|
+
// super('Voltage', PowerConsumptionVolt.UUID, {
|
|
45
|
+
// description: '"Voltage, V" in Eve App',
|
|
46
|
+
// format: Formats.FLOAT,
|
|
47
|
+
// perms: [Perms.NOTIFY, Perms.PAIRED_READ],
|
|
48
|
+
// minValue: 0,
|
|
49
|
+
// maxValue: 300,
|
|
50
|
+
// });
|
|
51
|
+
// this.value = this.getDefaultValue();
|
|
52
|
+
// }
|
|
53
|
+
// };
|
|
54
|
+
// };
|
|
55
|
+
// export const PowerConsumptionAmpereFactory = (hap: HAP): WithUUID<{ new (): Characteristic }> => {
|
|
56
|
+
// return class PowerConsumptionAmpere extends hap.Characteristic {
|
|
57
|
+
// public static readonly UUID: string = 'E863F126-079E-48FF-8F27-9C2605A29F52';
|
|
58
|
+
// constructor() {
|
|
59
|
+
// super('Current', PowerConsumptionAmpere.UUID, {
|
|
60
|
+
// description: '"Current, A" in Eve App',
|
|
61
|
+
// format: Formats.FLOAT,
|
|
62
|
+
// perms: [Perms.NOTIFY, Perms.PAIRED_READ],
|
|
63
|
+
// minValue: 0,
|
|
64
|
+
// maxValue: 100,
|
|
65
|
+
// });
|
|
66
|
+
// this.value = this.getDefaultValue();
|
|
67
|
+
// }
|
|
68
|
+
// };
|
|
69
|
+
// };
|
|
70
|
+
// export const PowerConsumptionKilowattHourFactory = (hap: HAP): WithUUID<{ new (): Characteristic }> => {
|
|
71
|
+
// return class PowerConsumptionKilowattHour extends hap.Characteristic {
|
|
72
|
+
// public static readonly UUID: string = 'E863F10C-079E-48FF-8F27-9C2605A29F52';
|
|
73
|
+
// constructor() {
|
|
74
|
+
// super('Total Consumption', PowerConsumptionKilowattHour.UUID, {
|
|
75
|
+
// description: '"Total Consumption, kW/h" in Eve App',
|
|
76
|
+
// format: Formats.FLOAT,
|
|
77
|
+
// perms: [Perms.NOTIFY, Perms.PAIRED_READ],
|
|
78
|
+
// minValue: 0,
|
|
79
|
+
// maxValue: 50,
|
|
80
|
+
// });
|
|
81
|
+
// this.value = this.getDefaultValue();
|
|
82
|
+
// }
|
|
83
|
+
// };
|
|
84
|
+
// };
|
|
85
|
+
class PowerConsumption {
|
|
86
|
+
static InputConsumptionWatts;
|
|
87
|
+
static OutputConsumptionWatts;
|
|
88
|
+
}
|
|
89
|
+
exports.PowerConsumption = PowerConsumption;
|
|
90
|
+
class CustomCharacteristics {
|
|
91
|
+
static PowerConsumption = PowerConsumption;
|
|
92
|
+
}
|
|
93
|
+
exports.CustomCharacteristics = CustomCharacteristics;
|
|
94
|
+
//# sourceMappingURL=customCharacteristic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customCharacteristic.js","sourceRoot":"","sources":["../../src/characteristics/customCharacteristic.ts"],"names":[],"mappings":";;;AAEO,MAAM,2BAA2B,GAAG,CAAC,GAAQ,EAAwC,EAAE;IAC5F,OAAO,MAAM,oBAAqB,SAAQ,GAAG,CAAC,cAAc;QACnD,MAAM,CAAU,IAAI,GAAW,sCAAsC,CAAC;QAC7E;YACE,KAAK,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,IAAI,EAAE;gBACpD,WAAW,EAAE,sBAAsB;gBACnC,MAAM,iCAAmB;gBACzB,KAAK,EAAE,+DAAyC;gBAChD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;gBACV,IAAI,mCAAmB,EAAE,6DAA6D;aACvF,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,2BAA2B,+BAetC;AAEK,MAAM,4BAA4B,GAAG,CAAC,GAAQ,EAAwC,EAAE;IAC7F,OAAO,MAAM,qBAAsB,SAAQ,GAAG,CAAC,cAAc;QAC3D,qBAAqB;QACd,MAAM,CAAU,IAAI,GAAW,sCAAsC,CAAC;QAC7E;YACE,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,IAAI,EAAE;gBACtD,WAAW,EAAE,uBAAuB;gBACpC,MAAM,iCAAmB;gBACzB,KAAK,EAAE,+DAAyC;gBAChD,IAAI,mCAAmB,EAAE,6DAA6D;gBACtF,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,4BAA4B,gCAgBvC;AAEF,oEAAoE;AACpE,mGAAmG;AACnG,mEAAmE;AACnE,oFAAoF;AACpF,sBAAsB;AACtB,sDAAsD;AACtD,kDAAkD;AAClD,iCAAiC;AACjC,oDAAoD;AACpD,uBAAuB;AACvB,yBAAyB;AACzB,YAAY;AACZ,6CAA6C;AAC7C,QAAQ;AACR,OAAO;AACP,KAAK;AAEL,qGAAqG;AACrG,qEAAqE;AACrE,oFAAoF;AACpF,sBAAsB;AACtB,wDAAwD;AACxD,kDAAkD;AAClD,iCAAiC;AACjC,oDAAoD;AACpD,uBAAuB;AACvB,yBAAyB;AACzB,YAAY;AACZ,6CAA6C;AAC7C,QAAQ;AACR,OAAO;AACP,KAAK;AAEL,2GAA2G;AAC3G,2EAA2E;AAC3E,oFAAoF;AACpF,sBAAsB;AACtB,wEAAwE;AACxE,+DAA+D;AAC/D,iCAAiC;AACjC,oDAAoD;AACpD,uBAAuB;AACvB,wBAAwB;AACxB,YAAY;AACZ,6CAA6C;AAC7C,QAAQ;AACR,OAAO;AACP,KAAK;AAEL,MAAa,gBAAgB;IACpB,MAAM,CAAC,qBAAqB,CAAuC;IACnE,MAAM,CAAC,sBAAsB,CAAuC;CAC5E;AAHD,4CAGC;AAED,MAAa,qBAAqB;IACzB,MAAM,CAAU,gBAAgB,GAA4B,gBAAgB,CAAC;;AADtF,sDAEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/config.d.ts
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
|
+
import { Simulator } from '@ecoflow/apis/simulations/simulator';
|
|
1
2
|
import { AccessoryConfig, PlatformConfig } from 'homebridge';
|
|
2
3
|
export interface EcoFlowConfig extends PlatformConfig {
|
|
3
4
|
devices: DeviceConfig[];
|
|
4
5
|
}
|
|
5
6
|
export declare enum DeviceModel {
|
|
6
7
|
Delta2Max = "Delta 2 Max",
|
|
7
|
-
Delta2 = "Delta 2"
|
|
8
|
+
Delta2 = "Delta 2",
|
|
9
|
+
PowerStream = "PowerStream"
|
|
8
10
|
}
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
export declare enum LocationType {
|
|
12
|
+
EU = "EU",
|
|
13
|
+
US = "US"
|
|
14
|
+
}
|
|
15
|
+
export type SerialNumber = string;
|
|
16
|
+
export interface DeviceInfoConfig {
|
|
17
|
+
name: string;
|
|
18
|
+
serialNumber: SerialNumber;
|
|
19
|
+
}
|
|
20
|
+
export interface DeviceAccessConfig extends DeviceInfoConfig {
|
|
21
|
+
location: LocationType;
|
|
12
22
|
accessKey: string;
|
|
13
23
|
secretKey: string;
|
|
24
|
+
model: DeviceModel;
|
|
25
|
+
reconnectMqttTimeoutMs?: number;
|
|
26
|
+
simulate?: boolean;
|
|
27
|
+
simulator?: new () => Simulator;
|
|
28
|
+
simulateQuotaTimeoutMs?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface DeviceConfig extends AccessoryConfig, DeviceAccessConfig {
|
|
31
|
+
disabled: boolean;
|
|
14
32
|
battery?: BatteryDeviceConfig;
|
|
33
|
+
powerStream?: PowerStreamDeviceConfig;
|
|
15
34
|
}
|
|
16
35
|
export interface BatteryDeviceConfig {
|
|
17
36
|
additionalCharacteristics: AdditionalBatteryCharacteristicType[];
|
|
@@ -21,3 +40,13 @@ export declare enum AdditionalBatteryCharacteristicType {
|
|
|
21
40
|
InputConsumptionInWatts = "Input Consumption, W",
|
|
22
41
|
OutputConsumptionInWatts = "Output Consumption, W"
|
|
23
42
|
}
|
|
43
|
+
export declare enum PowerStreamConsumptionType {
|
|
44
|
+
W600 = 600,
|
|
45
|
+
W800 = 800
|
|
46
|
+
}
|
|
47
|
+
export interface PowerStreamDeviceConfig {
|
|
48
|
+
type: PowerStreamConsumptionType;
|
|
49
|
+
batteryAdditionalCharacteristics?: AdditionalBatteryCharacteristicType[];
|
|
50
|
+
pvAdditionalCharacteristics?: AdditionalBatteryCharacteristicType[];
|
|
51
|
+
inverterAdditionalCharacteristics?: AdditionalBatteryCharacteristicType[];
|
|
52
|
+
}
|
package/dist/config.js
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PowerStreamConsumptionType = exports.AdditionalBatteryCharacteristicType = exports.LocationType = exports.DeviceModel = void 0;
|
|
4
|
+
var DeviceModel;
|
|
2
5
|
(function (DeviceModel) {
|
|
3
6
|
DeviceModel["Delta2Max"] = "Delta 2 Max";
|
|
4
7
|
DeviceModel["Delta2"] = "Delta 2";
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
DeviceModel["PowerStream"] = "PowerStream";
|
|
9
|
+
})(DeviceModel || (exports.DeviceModel = DeviceModel = {}));
|
|
10
|
+
var LocationType;
|
|
11
|
+
(function (LocationType) {
|
|
12
|
+
LocationType["EU"] = "EU";
|
|
13
|
+
LocationType["US"] = "US";
|
|
14
|
+
})(LocationType || (exports.LocationType = LocationType = {}));
|
|
15
|
+
var AdditionalBatteryCharacteristicType;
|
|
7
16
|
(function (AdditionalBatteryCharacteristicType) {
|
|
8
17
|
AdditionalBatteryCharacteristicType["BatteryLevel"] = "Battery Level, %";
|
|
9
18
|
AdditionalBatteryCharacteristicType["InputConsumptionInWatts"] = "Input Consumption, W";
|
|
10
19
|
AdditionalBatteryCharacteristicType["OutputConsumptionInWatts"] = "Output Consumption, W";
|
|
11
|
-
})(AdditionalBatteryCharacteristicType || (AdditionalBatteryCharacteristicType = {}));
|
|
20
|
+
})(AdditionalBatteryCharacteristicType || (exports.AdditionalBatteryCharacteristicType = AdditionalBatteryCharacteristicType = {}));
|
|
21
|
+
var PowerStreamConsumptionType;
|
|
22
|
+
(function (PowerStreamConsumptionType) {
|
|
23
|
+
PowerStreamConsumptionType[PowerStreamConsumptionType["W600"] = 600] = "W600";
|
|
24
|
+
PowerStreamConsumptionType[PowerStreamConsumptionType["W800"] = 800] = "W800";
|
|
25
|
+
})(PowerStreamConsumptionType || (exports.PowerStreamConsumptionType = PowerStreamConsumptionType = {}));
|
|
12
26
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAOA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,iCAAkB,CAAA;IAClB,0CAA2B,CAAA;AAC7B,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,yBAAS,CAAA;IACT,yBAAS,CAAA;AACX,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AA8BD,IAAY,mCAIX;AAJD,WAAY,mCAAmC;IAC7C,wEAAiC,CAAA;IACjC,uFAAgD,CAAA;IAChD,yFAAkD,CAAA;AACpD,CAAC,EAJW,mCAAmC,mDAAnC,mCAAmC,QAI9C;AAED,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,6EAAU,CAAA;IACV,6EAAU,CAAA;AACZ,CAAC,EAHW,0BAA0B,0CAA1B,0BAA0B,QAGrC"}
|
package/dist/helpers/logger.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Logger = void 0;
|
|
4
|
+
class Logger {
|
|
2
5
|
logger;
|
|
3
6
|
deviceName;
|
|
4
7
|
constructor(logger, deviceName) {
|
|
@@ -39,4 +42,5 @@ export class Logger {
|
|
|
39
42
|
return `[${this.deviceName}] ${message}`;
|
|
40
43
|
}
|
|
41
44
|
}
|
|
45
|
+
exports.Logger = Logger;
|
|
42
46
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IAEE;IACA;IAFnB,YACmB,MAAe,EACf,UAAkB;QADlB,WAAM,GAAN,MAAM,CAAS;QACf,eAAU,GAAV,UAAU,CAAQ;IAClC,CAAC;IAEG,MAAM,CAAC,MAAM,CAAC,MAAe,EAAE,UAAkB;QACtD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAuB,CAAC;IAC9D,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,8DAA8D;IACvD,IAAI,CAAC,OAAe,EAAE,GAAG,UAAiB;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8DAA8D;IACvD,OAAO,CAAC,OAAe,EAAE,GAAG,UAAiB;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,8DAA8D;IACvD,IAAI,CAAC,OAAe,EAAE,GAAG,UAAiB;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IACvD,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,UAAiB;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IACnE,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3C,CAAC;CACF;AA/CD,wBA+CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MachineIdProvider = void 0;
|
|
4
|
+
const node_machine_id_1 = require("node-machine-id");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
class MachineIdProvider {
|
|
7
|
+
async getMachineId(log) {
|
|
8
|
+
try {
|
|
9
|
+
const id = await (0, node_machine_id_1.machineId)();
|
|
10
|
+
return id;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
log.warn('Can not get Machine ID. Using UUID instead', error);
|
|
14
|
+
return (0, uuid_1.v4)();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.MachineIdProvider = MachineIdProvider;
|
|
19
|
+
//# sourceMappingURL=machineIdProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machineIdProvider.js","sourceRoot":"","sources":["../../src/helpers/machineIdProvider.ts"],"names":[],"mappings":";;;AACA,qDAA4C;AAC5C,+BAAoC;AAEpC,MAAa,iBAAiB;IACrB,KAAK,CAAC,YAAY,CAAC,GAAY;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAA,2BAAS,GAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,IAAA,SAAM,GAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AAVD,8CAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<link rel="stylesheet" href="./assets/styles/ecoflow.css"/><div class="hb-plugin-settings-modal"><div class="card card-body" id="generalSettings"></div><div class="card card-body" id="deviceSettings"><div class="form-group"><label id="devicesLabel"></label><ul class="nav nav-tabs" id="devicesTabs"></ul><div class="tab-content" id="devicesPanels"></div></div></div></div><script src="https://code.jquery.com/jquery-3.7.1.slim.min.js" integrity="sha256-kmHvs0B+OpCW5GVHUNjv9rOmY0IvSIRcf7zGUDTDQM8=" crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script><script>// Ensure index.js is loaded and function is called
|
|
2
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
3
|
+
if (typeof renderEcoFlowPluginConfig === 'function') {
|
|
4
|
+
renderEcoFlowPluginConfig(homebridge);
|
|
5
|
+
}
|
|
6
|
+
});</script><script defer="defer" src="./index.js?q=c634f5b376ebee080d80"></script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e={999:(e,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ComponentRenderer=void 0,n.ComponentRenderer=class{renderTextBox(e,n,i,r,t){const o='\n <div class="form-group">\n <label for="device{id}" class="{requiredClass}">{title}</label>\n <input type="text" class="form-control" id="device{id}" placeholder="{description}" required="{required}" />\n </div>'.replace(/{id}/g,n).replace(/{title}/g,i.title).replace(/{description}/g,i.description??"").replace(/{requiredClass}/g,i.required?"required-label":"").replace(/{required}/g,(i.required??!1).toString());e.append(o);const a=e.find(`#device${n}`);a.val(r),a.on("change",(()=>t(a.val()?.toString()||"")))}renderDropDown(e,n,i,r,t){const o='\n <div class="form-group">\n <label for="device{id}" class="{requiredClass}">{title}</label>\n <select class="form-control" id="device{id}" required="{required}"></select>\n </div>'.replace(/{id}/g,n).replace(/{title}/g,i.title).replace(/{requiredClass}/g,i.required?"required-label":"").replace(/{required}/g,(i.required??!1).toString());e.append(o);const a=e.find(`#device${n}`);i.enum.forEach((e=>{const n=$("<option>").val(e).text(e);a.append(n)})),a.val(r),a.on("change",(()=>t(a.val()?.toString()||"")))}}},84:(e,n,i)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PluginConfigDevicesRenderer=void 0;const r=i(536);class t extends r.PluginConfigRendererBase{form;$tabs;$tabPanels;constructor(e){super(e),this.$tabs=$("#devicesTabs"),this.$tabPanels=$("#devicesPanels")}render(e){this.renderDevicesSettings({homebridgeProvider:e.homebridgeProvider,configSchema:e.configSchema,configuration:e.configuration,hideDeviceSettingsPerModel:{"Delta 2":["powerStream"],"Delta 2 Max":["powerStream"],PowerStream:["battery"]}})}renderDevicesSettings(e,n){$("#devicesLabel").text(e.configSchema.schema.properties.devices.title);const i=!n||n<0?0:n;this.renderDeviceTabs(e,i)}renderDeviceTabs(e,n){this.clearDeviceTabs();const i='\n <li class="nav-item">\n <a class="nav-link {activeClass}" data-toggle="tab" href="#deviceTabPanel{index}" id="deviceTab{index}">{name}</a>\n </li>\n ';e.configuration.devices.forEach(((r,t)=>{const o=i.replace(/{activeClass}/g,t===n?"active":"").replace(/{index}/g,t.toString()).replace(/{name}/g,r.name??`Device${t+1}`);this.$tabs.append(o),this.renderDeviceTabPanel(e,r,t,n,this.$tabs.find(`#deviceTab${t}`))})),this.renderAddNewDeviceTab(i,e)}clearDeviceTabs(){this.$tabs.empty(),this.$tabPanels.empty(),this.form?.end()}renderAddNewDeviceTab(e,n){const i=e.replace(/{activeClass}/g,"").replace(/{index}/g,"Add").replace(/{name}/g,"Add Device");this.$tabs.append(i),this.$tabs.find("#deviceTabAdd").on("click",(()=>{n.configuration.devices.push(this.getDefaultDeviceConfiguration(n.configSchema)),this.renderDevicesSettings(n,n.configuration.devices.length-1)}))}renderDeviceTabPanel(e,n,i,r,t){const o='\n <div class="tab-pane container fade {activeClass} card card-body list-group-item" id="deviceTabPanel{index}">\n <button type="button" class="close pull-right" id="deviceTabPanelClose{index}">\n <span>×</span>\n <span class="sr-only">Close</span>\n </button>\n </div>\n '.replace(/{activeClass}/g,i===r?"in show active":"").replace(/{index}/g,i.toString());this.$tabPanels.append(o);const a=this.$tabPanels.find(`#deviceTabPanel${i}`),s=this.clone(e.configSchema.schema.properties.devices.items),d=s.properties.model;this.renderModelDropDown(t,a,i,e,s,d,n),this.renderRemoveButton(a,i,e),this.renderForm(t,i,r,e,s,n)}renderModelDropDown(e,n,i,r,t,o,a){this.componentRenderer.renderDropDown(n,"model"+i,o,a.model,(n=>{a.model=n,this.renderForm(e,i,i,r,t,a)}))}renderRemoveButton(e,n,i){e.find(`#deviceTabPanelClose${n}`).on("click",(()=>{i.configuration.devices.splice(n,1),this.renderDevicesSettings(i,n-1)}))}renderForm(e,n,i,r,t,o){delete(t=this.clone(t)).properties.model,r.hideDeviceSettingsPerModel[o.model].forEach((e=>{delete t.properties[e]})),e.off("click").on("click",(()=>{this.form?.end(),this.form=r.homebridgeProvider.createForm({schema:t},o),this.form.onChange((async i=>{const t=r.configuration.devices[n].name;this.applyChanges(r.configuration.devices[n],i,["model"]),await this.updatePluginConfig(r),i.name!==t&&e.text(i.name)}))})),n===i&&e.trigger("click")}getDefaultDeviceConfiguration(e){const n={},i=e.schema.properties.devices.items.properties;return Object.keys(i).filter((e=>!!i[e]?.default)).forEach((e=>{n[e]=i[e]?.default})),n}applyChanges(e,n,i){Object.assign(e,n);for(const r in e)void 0!==n[r]||i.includes(r)||delete e[r]}}n.PluginConfigDevicesRenderer=t},102:(e,n,i)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PluginConfigNameRenderer=void 0;const r=i(536);class t extends r.PluginConfigRendererBase{render(e){this.componentRenderer.renderTextBox($("#generalSettings"),"name",e.configSchema.schema.properties.name,e.configuration.name,(async n=>{e.configuration.name=n,await this.updatePluginConfig(e)}))}}n.PluginConfigNameRenderer=t},653:(e,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PluginConfigRenderer=void 0,n.PluginConfigRenderer=class{renderers;constructor(e){this.renderers=e}render(e){void 0===e.configuration&&(e.configuration={name:void 0,devices:[]}),this.renderers.forEach((n=>n.render(e)))}}},536:(e,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PluginConfigRendererBase=void 0,n.PluginConfigRendererBase=class{componentRenderer;constructor(e){this.componentRenderer=e}async updatePluginConfig(e){const n=this.clone(e.configuration);delete n.platform,await e.homebridgeProvider.updatePluginConfig([n])}clone(e){return JSON.parse(JSON.stringify(e))}}}},n={};function i(r){var t=n[r];if(void 0!==t)return t.exports;var o=n[r]={exports:{}};return e[r](o,o.exports,i),o.exports}(()=>{const e=i(999),n=i(84),r=i(102),t=i(653);window.renderEcoFlowPluginConfig=async function(i){const o=await i.getPluginConfig(),a=await i.getPluginConfigSchema(),s=o[0],d=new e.ComponentRenderer;new t.PluginConfigRenderer([new r.PluginConfigNameRenderer(d),new n.PluginConfigDevicesRenderer(d)]).render({homebridgeProvider:i,configuration:s,configSchema:a})}})()})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IHomebridge, PluginConfig, PluginConfigSchema } from '../interfaces/homebridge';
|
|
2
|
+
export interface IContext {
|
|
3
|
+
homebridgeProvider: IHomebridge;
|
|
4
|
+
configSchema: PluginConfigSchema;
|
|
5
|
+
configuration: PluginConfig;
|
|
6
|
+
}
|
|
7
|
+
export interface IDeviceContext extends IContext {
|
|
8
|
+
hideDeviceSettingsPerModel: Record<string, string[]>;
|
|
9
|
+
}
|
|
10
|
+
export type ChangedCallbackHandler = (value: string) => void;
|
|
11
|
+
export interface IRenderer {
|
|
12
|
+
render(context: IContext): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface IHomebridge {
|
|
2
|
+
getPluginConfig: () => Promise<PluginConfig[]>;
|
|
3
|
+
getPluginConfigSchema: () => Promise<PluginConfigSchema>;
|
|
4
|
+
updatePluginConfig: (changes: PluginConfig[]) => Promise<void>;
|
|
5
|
+
createForm: (schema: {
|
|
6
|
+
schema: PluginConfigSchemaDevicesItems;
|
|
7
|
+
}, configuration: PluginDeviceConfig) => IForm;
|
|
8
|
+
}
|
|
9
|
+
export interface PluginConfig {
|
|
10
|
+
name: string;
|
|
11
|
+
platform?: string;
|
|
12
|
+
devices: PluginDeviceConfig[];
|
|
13
|
+
}
|
|
14
|
+
export interface PluginDeviceConfig {
|
|
15
|
+
name: string;
|
|
16
|
+
model: string;
|
|
17
|
+
[name: string]: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface PluginConfigSchema {
|
|
20
|
+
schema: {
|
|
21
|
+
properties: {
|
|
22
|
+
name: PluginConfigSchemaObject;
|
|
23
|
+
devices: PluginConfigSchemaDevices;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface PluginConfigSchemaObject {
|
|
28
|
+
title: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
default?: string;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface PluginConfigSchemaEnum extends PluginConfigSchemaObject {
|
|
34
|
+
enum: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface PluginConfigSchemaDevices {
|
|
37
|
+
title: string;
|
|
38
|
+
items: PluginConfigSchemaDevicesItems;
|
|
39
|
+
}
|
|
40
|
+
export interface PluginConfigSchemaDevicesItems {
|
|
41
|
+
properties: PluginConfigSchemaDevice;
|
|
42
|
+
}
|
|
43
|
+
export interface PluginConfigSchemaDevice {
|
|
44
|
+
name: PluginConfigSchemaObject;
|
|
45
|
+
model?: PluginConfigSchemaEnum;
|
|
46
|
+
[name: string]: PluginConfigSchemaObject | undefined;
|
|
47
|
+
}
|
|
48
|
+
export type FormOnChangeCallback = (newConfiguration: PluginDeviceConfig) => Promise<void>;
|
|
49
|
+
export interface IForm {
|
|
50
|
+
onChange: (callback: FormOnChangeCallback) => void;
|
|
51
|
+
end: () => void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChangedCallbackHandler } from '../interfaces/contracts';
|
|
2
|
+
import { PluginConfigSchemaEnum, PluginConfigSchemaObject } from '../interfaces/homebridge';
|
|
3
|
+
export declare class ComponentRenderer {
|
|
4
|
+
renderTextBox($parent: JQuery, id: string, schemaProperty: PluginConfigSchemaObject, value: string, onChangeCallback: ChangedCallbackHandler): void;
|
|
5
|
+
renderDropDown($parent: JQuery, id: string, schemaProperty: PluginConfigSchemaEnum, value: string, onChangeCallback: ChangedCallbackHandler): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IContext } from '../interfaces/contracts';
|
|
2
|
+
import { ComponentRenderer } from './componentRenderer';
|
|
3
|
+
import { PluginConfigRendererBase } from './pluginConfigRendererBase';
|
|
4
|
+
export declare class PluginConfigDevicesRenderer extends PluginConfigRendererBase {
|
|
5
|
+
private form;
|
|
6
|
+
private readonly $tabs;
|
|
7
|
+
private readonly $tabPanels;
|
|
8
|
+
constructor(componentRenderer: ComponentRenderer);
|
|
9
|
+
render(context: IContext): void;
|
|
10
|
+
private renderDevicesSettings;
|
|
11
|
+
private renderDeviceTabs;
|
|
12
|
+
private clearDeviceTabs;
|
|
13
|
+
private renderAddNewDeviceTab;
|
|
14
|
+
private renderDeviceTabPanel;
|
|
15
|
+
private renderModelDropDown;
|
|
16
|
+
private renderRemoveButton;
|
|
17
|
+
private renderForm;
|
|
18
|
+
private getDefaultDeviceConfiguration;
|
|
19
|
+
private applyChanges;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IContext, IRenderer } from '../interfaces/contracts';
|
|
2
|
+
import { ComponentRenderer } from './componentRenderer';
|
|
3
|
+
export declare abstract class PluginConfigRendererBase implements IRenderer {
|
|
4
|
+
protected readonly componentRenderer: ComponentRenderer;
|
|
5
|
+
constructor(componentRenderer: ComponentRenderer);
|
|
6
|
+
abstract render(context: IContext): void;
|
|
7
|
+
protected updatePluginConfig(context: IContext): Promise<void>;
|
|
8
|
+
protected clone<TObject>(obj: TObject): TObject;
|
|
9
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require('module-alias/register');
|
|
4
|
+
const platform_1 = require("@ecoflow/platform");
|
|
5
|
+
const settings_1 = require("@ecoflow/settings");
|
|
3
6
|
/**
|
|
4
7
|
* This method registers the platform with Homebridge
|
|
5
8
|
*/
|
|
6
|
-
|
|
7
|
-
api.registerPlatform(PLATFORM_NAME, EcoFlowHomebridgePlatform);
|
|
9
|
+
exports.default = (api) => {
|
|
10
|
+
api.registerPlatform(settings_1.PLATFORM_NAME, platform_1.EcoFlowHomebridgePlatform);
|
|
8
11
|
};
|
|
9
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEjC,gDAA8D;AAC9D,gDAAkD;AAGlD;;GAEG;AACH,kBAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,GAAG,CAAC,gBAAgB,CAAC,wBAAa,EAAE,oCAAyB,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/platform.d.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service
|
|
2
|
-
import {
|
|
3
|
-
import { CustomCharacteristic } from './characteristics/CustomCharacteristic.js';
|
|
4
|
-
import { DeviceConfig } from './config.js';
|
|
1
|
+
import { API, Characteristic, DynamicPlatformPlugin, HAP, Logging, PlatformAccessory, PlatformConfig, Service } from 'homebridge';
|
|
2
|
+
import { CustomCharacteristics } from '@ecoflow/characteristics/customCharacteristic';
|
|
5
3
|
/**
|
|
6
4
|
* HomebridgePlatform
|
|
7
5
|
* This class is the main constructor for your plugin, this is where you should
|
|
8
6
|
* parse the user config and discover/register accessories with Homebridge.
|
|
9
7
|
*/
|
|
10
|
-
export type EcoFlowCharacteristic = typeof Characteristic & typeof
|
|
8
|
+
export type EcoFlowCharacteristic = typeof Characteristic & typeof CustomCharacteristics;
|
|
11
9
|
export declare class EcoFlowHomebridgePlatform implements DynamicPlatformPlugin {
|
|
12
10
|
private readonly commonLog;
|
|
13
11
|
readonly config: PlatformConfig;
|
|
@@ -16,13 +14,19 @@ export declare class EcoFlowHomebridgePlatform implements DynamicPlatformPlugin
|
|
|
16
14
|
readonly Service: typeof Service;
|
|
17
15
|
readonly Characteristic: EcoFlowCharacteristic;
|
|
18
16
|
readonly accessories: PlatformAccessory[];
|
|
17
|
+
private readonly httpApiManager;
|
|
18
|
+
private readonly mqttApiManager;
|
|
19
19
|
constructor(commonLog: Logging, config: PlatformConfig, api: API);
|
|
20
|
+
static InitCustomCharacteristics(hap: HAP): void;
|
|
20
21
|
/**
|
|
21
22
|
* This function is invoked when homebridge restores cached accessories from disk at startup.
|
|
22
23
|
* It should be used to set up event handlers for characteristics and update respective values.
|
|
23
24
|
*/
|
|
24
25
|
configureAccessory(accessory: PlatformAccessory): void;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
private validateDeviceConfig;
|
|
27
|
+
private registerDevices;
|
|
28
|
+
private addNewDevice;
|
|
29
|
+
private cleanupDevices;
|
|
30
|
+
private initialize;
|
|
31
|
+
private createAccessory;
|
|
28
32
|
}
|