@pietrolubini/homebridge-ecoflow 1.2.1 → 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.
Files changed (203) hide show
  1. package/.gitattributes +7 -0
  2. package/.prettierrc.json +1 -0
  3. package/README.md +153 -24
  4. package/config.schema.json +65 -2
  5. package/dist/accessories/batteries/batteryAccessoryBase.d.ts +26 -0
  6. package/dist/accessories/batteries/batteryAccessoryBase.js +126 -0
  7. package/dist/accessories/batteries/batteryAccessoryBase.js.map +1 -0
  8. package/dist/accessories/batteries/batteryAccessoryBase.spec.d.ts +1 -0
  9. package/dist/accessories/batteries/delta2Accessory.d.ts +2 -2
  10. package/dist/accessories/batteries/delta2Accessory.js +6 -2
  11. package/dist/accessories/batteries/delta2Accessory.js.map +1 -1
  12. package/dist/accessories/batteries/delta2maxAccessory.d.ts +2 -2
  13. package/dist/accessories/batteries/delta2maxAccessory.js +6 -2
  14. package/dist/accessories/batteries/delta2maxAccessory.js.map +1 -1
  15. package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.d.ts +33 -0
  16. package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.js +3 -0
  17. package/dist/accessories/batteries/interfaces/httpApiBatteryContracts.js.map +1 -0
  18. package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.d.ts +36 -0
  19. package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.js +18 -0
  20. package/dist/accessories/batteries/interfaces/mqttApiBatteryContracts.js.map +1 -0
  21. package/dist/accessories/batteries/services/outletAcService.d.ts +8 -0
  22. package/dist/accessories/batteries/services/outletAcService.js +24 -0
  23. package/dist/accessories/batteries/services/outletAcService.js.map +1 -0
  24. package/dist/accessories/batteries/services/outletAcService.spec.d.ts +1 -0
  25. package/dist/accessories/batteries/services/outletBatteryServiceBase.d.ts +5 -0
  26. package/dist/accessories/batteries/services/outletBatteryServiceBase.js +18 -0
  27. package/dist/accessories/batteries/services/outletBatteryServiceBase.js.map +1 -0
  28. package/dist/accessories/batteries/services/outletCarService.d.ts +6 -0
  29. package/dist/accessories/batteries/services/outletCarService.js +17 -0
  30. package/dist/accessories/batteries/services/outletCarService.js.map +1 -0
  31. package/dist/accessories/batteries/services/outletCarService.spec.d.ts +1 -0
  32. package/dist/accessories/batteries/services/outletUsbService.d.ts +6 -0
  33. package/dist/accessories/batteries/services/outletUsbService.js +15 -0
  34. package/dist/accessories/batteries/services/outletUsbService.js.map +1 -0
  35. package/dist/accessories/batteries/services/outletUsbService.spec.d.ts +1 -0
  36. package/dist/accessories/batteries/simulations/batterySimulator.d.ts +6 -0
  37. package/dist/accessories/batteries/simulations/batterySimulator.js +60 -0
  38. package/dist/accessories/batteries/simulations/batterySimulator.js.map +1 -0
  39. package/dist/accessories/ecoFlowAccessoryBase.d.ts +41 -0
  40. package/dist/accessories/ecoFlowAccessoryBase.js +114 -0
  41. package/dist/accessories/ecoFlowAccessoryBase.js.map +1 -0
  42. package/dist/accessories/ecoFlowAccessoryBase.spec.d.ts +1 -0
  43. package/dist/accessories/ecoFlowAccessoryWithQuotaBase.d.ts +15 -0
  44. package/dist/accessories/ecoFlowAccessoryWithQuotaBase.js +34 -0
  45. package/dist/accessories/ecoFlowAccessoryWithQuotaBase.js.map +1 -0
  46. package/dist/accessories/ecoFlowAccessoryWithQuotaBase.spec.d.ts +1 -0
  47. package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.d.ts +16 -0
  48. package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.js +3 -0
  49. package/dist/accessories/powerstream/interfaces/httpApiPowerStreamContracts.js.map +1 -0
  50. package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.d.ts +41 -0
  51. package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.js +21 -0
  52. package/dist/accessories/powerstream/interfaces/mqttApiPowerStreamContracts.js.map +1 -0
  53. package/dist/accessories/powerstream/powerStreamAccessory.d.ts +26 -0
  54. package/dist/accessories/powerstream/powerStreamAccessory.js +113 -0
  55. package/dist/accessories/powerstream/powerStreamAccessory.js.map +1 -0
  56. package/dist/accessories/powerstream/powerStreamAccessory.spec.d.ts +1 -0
  57. package/dist/accessories/powerstream/services/brightnessService.d.ts +7 -0
  58. package/dist/accessories/powerstream/services/brightnessService.js +27 -0
  59. package/dist/accessories/powerstream/services/brightnessService.js.map +1 -0
  60. package/dist/accessories/powerstream/services/brightnessService.spec.d.ts +1 -0
  61. package/dist/accessories/powerstream/services/outletInvService.d.ts +7 -0
  62. package/dist/accessories/powerstream/services/outletInvService.js +14 -0
  63. package/dist/accessories/powerstream/services/outletInvService.js.map +1 -0
  64. package/dist/accessories/powerstream/services/outletInvService.spec.d.ts +1 -0
  65. package/dist/accessories/powerstream/services/outletService.d.ts +8 -0
  66. package/dist/accessories/powerstream/services/outletService.js +14 -0
  67. package/dist/accessories/powerstream/services/outletService.js.map +1 -0
  68. package/dist/accessories/powerstream/services/outletService.spec.d.ts +1 -0
  69. package/dist/accessories/powerstream/services/powerDemandService.d.ts +7 -0
  70. package/dist/accessories/powerstream/services/powerDemandService.js +27 -0
  71. package/dist/accessories/powerstream/services/powerDemandService.js.map +1 -0
  72. package/dist/accessories/powerstream/services/powerDemandService.spec.d.ts +1 -0
  73. package/dist/accessories/powerstream/simulations/powerStreamSimulator.d.ts +6 -0
  74. package/dist/accessories/powerstream/simulations/powerStreamSimulator.js +39 -0
  75. package/dist/accessories/powerstream/simulations/powerStreamSimulator.js.map +1 -0
  76. package/dist/apis/containers/deviceInfo.d.ts +13 -0
  77. package/dist/apis/containers/deviceInfo.js +23 -0
  78. package/dist/apis/containers/deviceInfo.js.map +1 -0
  79. package/dist/apis/containers/deviceInfo.spec.d.ts +1 -0
  80. package/dist/apis/containers/mqttClientContainer.d.ts +17 -0
  81. package/dist/apis/containers/mqttClientContainer.js +45 -0
  82. package/dist/apis/containers/mqttClientContainer.js.map +1 -0
  83. package/dist/apis/containers/mqttClientContainer.spec.d.ts +1 -0
  84. package/dist/apis/containers/mqttDevice.d.ts +15 -0
  85. package/dist/apis/containers/mqttDevice.js +43 -0
  86. package/dist/apis/containers/mqttDevice.js.map +1 -0
  87. package/dist/apis/containers/mqttDevice.spec.d.ts +1 -0
  88. package/dist/apis/ecoFlowHttpApiManager.d.ts +13 -0
  89. package/dist/apis/{ecoFlowHttpApi.js → ecoFlowHttpApiManager.js} +55 -45
  90. package/dist/apis/ecoFlowHttpApiManager.js.map +1 -0
  91. package/dist/apis/ecoFlowHttpApiManager.spec.d.ts +1 -0
  92. package/dist/apis/ecoFlowMqttApiManager.d.ts +25 -0
  93. package/dist/apis/ecoFlowMqttApiManager.js +152 -0
  94. package/dist/apis/ecoFlowMqttApiManager.js.map +1 -0
  95. package/dist/apis/ecoFlowMqttApiManager.spec.d.ts +1 -0
  96. package/dist/apis/interfaces/httpApiContracts.d.ts +30 -0
  97. package/dist/apis/interfaces/httpApiContracts.js +9 -0
  98. package/dist/apis/interfaces/httpApiContracts.js.map +1 -0
  99. package/dist/apis/interfaces/mqttApiContracts.d.ts +26 -0
  100. package/dist/apis/interfaces/mqttApiContracts.js +9 -0
  101. package/dist/apis/interfaces/mqttApiContracts.js.map +1 -0
  102. package/dist/apis/simulations/mockMqttClient.d.ts +15 -0
  103. package/dist/apis/simulations/mockMqttClient.js +59 -0
  104. package/dist/apis/simulations/mockMqttClient.js.map +1 -0
  105. package/dist/apis/simulations/mockMqttClient.spec.d.ts +1 -0
  106. package/dist/apis/simulations/simulator.d.ts +13 -0
  107. package/dist/apis/simulations/simulator.js +26 -0
  108. package/dist/apis/simulations/simulator.js.map +1 -0
  109. package/dist/characteristics/{CustomCharacteristic.js → customCharacteristic.js} +18 -11
  110. package/dist/characteristics/customCharacteristic.js.map +1 -0
  111. package/dist/characteristics/customCharacteristic.spec.d.ts +1 -0
  112. package/dist/config.d.ts +28 -4
  113. package/dist/config.js +15 -6
  114. package/dist/config.js.map +1 -1
  115. package/dist/helpers/logger.js +5 -1
  116. package/dist/helpers/logger.js.map +1 -1
  117. package/dist/helpers/logger.spec.d.ts +1 -0
  118. package/dist/helpers/machineIdProvider.d.ts +4 -0
  119. package/dist/helpers/machineIdProvider.js +19 -0
  120. package/dist/helpers/machineIdProvider.js.map +1 -0
  121. package/dist/helpers/machineIdProvider.spec.d.ts +1 -0
  122. package/dist/helpers/tests/accessoryTestHelper.d.ts +5 -0
  123. package/dist/helpers/tests/serviceTestHelper.d.ts +6 -0
  124. package/dist/helpers/tests/sleep.d.ts +1 -0
  125. package/dist/homebridge-ui/public/index.d.ts +2 -0
  126. package/dist/homebridge-ui/public/index.html +6 -0
  127. package/dist/homebridge-ui/public/index.js +1 -0
  128. package/dist/homebridge-ui/public/index.spec.d.ts +1 -0
  129. package/dist/homebridge-ui/public/interfaces/contracts.d.ts +13 -0
  130. package/dist/homebridge-ui/public/interfaces/homebridge.d.ts +52 -0
  131. package/dist/homebridge-ui/public/renderers/componentRenderer.d.ts +6 -0
  132. package/dist/homebridge-ui/public/renderers/componentRenderer.spec.d.ts +1 -0
  133. package/dist/homebridge-ui/public/renderers/pluginConfigDevicesRenderer.d.ts +20 -0
  134. package/dist/homebridge-ui/public/renderers/pluginConfigDevicesRenderer.spec.d.ts +1 -0
  135. package/dist/homebridge-ui/public/renderers/pluginConfigNameRenderer.d.ts +5 -0
  136. package/dist/homebridge-ui/public/renderers/pluginConfigNameRenderer.spec.d.ts +1 -0
  137. package/dist/homebridge-ui/public/renderers/pluginConfigRenderer.d.ts +6 -0
  138. package/dist/homebridge-ui/public/renderers/pluginConfigRenderer.spec.d.ts +1 -0
  139. package/dist/homebridge-ui/public/renderers/pluginConfigRendererBase.d.ts +9 -0
  140. package/dist/index.js +7 -4
  141. package/dist/index.js.map +1 -1
  142. package/dist/index.spec.d.ts +1 -0
  143. package/dist/platform.d.ts +11 -8
  144. package/dist/platform.js +88 -32
  145. package/dist/platform.js.map +1 -1
  146. package/dist/platform.spec.d.ts +1 -0
  147. package/dist/services/accessoryInformationService.d.ts +5 -3
  148. package/dist/services/accessoryInformationService.js +15 -12
  149. package/dist/services/accessoryInformationService.js.map +1 -1
  150. package/dist/services/accessoryInformationService.spec.d.ts +1 -0
  151. package/dist/services/batteryStatusService.d.ts +6 -4
  152. package/dist/services/batteryStatusService.js +19 -17
  153. package/dist/services/batteryStatusService.js.map +1 -1
  154. package/dist/services/batteryStatusService.spec.d.ts +1 -0
  155. package/dist/services/fanServiceBase.d.ts +16 -0
  156. package/dist/services/fanServiceBase.js +42 -0
  157. package/dist/services/fanServiceBase.js.map +1 -0
  158. package/dist/services/fanServiceBase.spec.d.ts +1 -0
  159. package/dist/services/lightBulbServiceBase.d.ts +16 -0
  160. package/dist/services/lightBulbServiceBase.js +42 -0
  161. package/dist/services/lightBulbServiceBase.js.map +1 -0
  162. package/dist/services/lightBulbServiceBase.spec.d.ts +1 -0
  163. package/dist/services/outletServiceBase.d.ts +7 -15
  164. package/dist/services/outletServiceBase.js +20 -28
  165. package/dist/services/outletServiceBase.js.map +1 -1
  166. package/dist/services/outletServiceBase.spec.d.ts +1 -0
  167. package/dist/services/serviceBase.d.ts +10 -5
  168. package/dist/services/serviceBase.js +31 -8
  169. package/dist/services/serviceBase.js.map +1 -1
  170. package/dist/settings.js +5 -2
  171. package/dist/settings.js.map +1 -1
  172. package/docs/images/plugin_icon.png +0 -0
  173. package/jest.config.ts +46 -0
  174. package/junit.xml +843 -0
  175. package/package.json +42 -12
  176. package/tsconfig.build.json +5 -0
  177. package/tsconfig.spec.json +8 -0
  178. package/dist/accessories/batteries/batteryAccessory.d.ts +0 -59
  179. package/dist/accessories/batteries/batteryAccessory.js +0 -120
  180. package/dist/accessories/batteries/batteryAccessory.js.map +0 -1
  181. package/dist/accessories/ecoFlowAccessory.d.ts +0 -42
  182. package/dist/accessories/ecoFlowAccessory.js +0 -122
  183. package/dist/accessories/ecoFlowAccessory.js.map +0 -1
  184. package/dist/apis/ecoFlowHttpApi.d.ts +0 -47
  185. package/dist/apis/ecoFlowHttpApi.js.map +0 -1
  186. package/dist/apis/ecoFlowMqttApi.d.ts +0 -53
  187. package/dist/apis/ecoFlowMqttApi.js +0 -100
  188. package/dist/apis/ecoFlowMqttApi.js.map +0 -1
  189. package/dist/characteristics/CustomCharacteristic.js.map +0 -1
  190. package/dist/helpers/machineId.d.ts +0 -2
  191. package/dist/helpers/machineId.js +0 -15
  192. package/dist/helpers/machineId.js.map +0 -1
  193. package/dist/helpers/machineIdHelper.cjs +0 -5
  194. package/dist/services/outletAcService.d.ts +0 -8
  195. package/dist/services/outletAcService.js +0 -17
  196. package/dist/services/outletAcService.js.map +0 -1
  197. package/dist/services/outletCarService.d.ts +0 -6
  198. package/dist/services/outletCarService.js +0 -12
  199. package/dist/services/outletCarService.js.map +0 -1
  200. package/dist/services/outletUsbService.d.ts +0 -6
  201. package/dist/services/outletUsbService.js +0 -10
  202. package/dist/services/outletUsbService.js.map +0 -1
  203. /package/dist/characteristics/{CustomCharacteristic.d.ts → customCharacteristic.d.ts} +0 -0
@@ -1,29 +1,33 @@
1
- export const InputConsumptionWattFactory = (hap) => {
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) => {
2
5
  return class InputConsumptionWatt extends hap.Characteristic {
3
6
  static UUID = '13172B0A-D346-4730-9732-32EF5B6EF8B7';
4
7
  constructor() {
5
8
  super('Input Consumption', InputConsumptionWatt.UUID, {
6
9
  description: 'Input Consumption, W',
7
- format: "float" /* Formats.FLOAT */,
8
- perms: ["ev" /* Perms.NOTIFY */, "pr" /* Perms.PAIRED_READ */],
10
+ format: "float" /* hap.Formats.FLOAT */,
11
+ perms: ["ev" /* hap.Perms.NOTIFY */, "pr" /* hap.Perms.PAIRED_READ */],
9
12
  minValue: 0,
10
13
  minStep: 1,
11
- unit: "celsius" /* Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
14
+ unit: "celsius" /* hap.Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
12
15
  });
13
16
  this.value = this.getDefaultValue();
14
17
  }
15
18
  };
16
19
  };
17
- export const OutputConsumptionWattFactory = (hap) => {
20
+ exports.InputConsumptionWattFactory = InputConsumptionWattFactory;
21
+ const OutputConsumptionWattFactory = (hap) => {
18
22
  return class OutputConsumptionWatt extends hap.Characteristic {
19
23
  // Eve characteristic
20
24
  static UUID = 'E863F10D-079E-48FF-8F27-9C2605A29F52';
21
25
  constructor() {
22
26
  super('Output Consumption', OutputConsumptionWatt.UUID, {
23
27
  description: 'Output Consumption, W',
24
- format: "float" /* Formats.FLOAT */,
25
- perms: ["ev" /* Perms.NOTIFY */, "pr" /* Perms.PAIRED_READ */],
26
- unit: "celsius" /* Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
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
27
31
  minValue: 0,
28
32
  minStep: 1,
29
33
  });
@@ -31,6 +35,7 @@ export const OutputConsumptionWattFactory = (hap) => {
31
35
  }
32
36
  };
33
37
  };
38
+ exports.OutputConsumptionWattFactory = OutputConsumptionWattFactory;
34
39
  // https://gist.github.com/simont77/3f4d4330fa55b83f8ca96388d9004e7d
35
40
  // export const PowerConsumptionVoltFactory = (hap: HAP): WithUUID<{ new (): Characteristic }> => {
36
41
  // return class PowerConsumptionVolt extends hap.Characteristic {
@@ -77,11 +82,13 @@ export const OutputConsumptionWattFactory = (hap) => {
77
82
  // }
78
83
  // };
79
84
  // };
80
- export class PowerConsumption {
85
+ class PowerConsumption {
81
86
  static InputConsumptionWatts;
82
87
  static OutputConsumptionWatts;
83
88
  }
84
- export class CustomCharacteristics {
89
+ exports.PowerConsumption = PowerConsumption;
90
+ class CustomCharacteristics {
85
91
  static PowerConsumption = PowerConsumption;
86
92
  }
87
- //# sourceMappingURL=CustomCharacteristic.js.map
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"}
package/dist/config.d.ts CHANGED
@@ -1,22 +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
11
  export declare enum LocationType {
10
12
  EU = "EU",
11
13
  US = "US"
12
14
  }
13
- export interface DeviceConfig extends AccessoryConfig {
14
- model: DeviceModel;
15
- serialNumber: string;
15
+ export type SerialNumber = string;
16
+ export interface DeviceInfoConfig {
17
+ name: string;
18
+ serialNumber: SerialNumber;
19
+ }
20
+ export interface DeviceAccessConfig extends DeviceInfoConfig {
16
21
  location: LocationType;
17
22
  accessKey: string;
18
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;
19
32
  battery?: BatteryDeviceConfig;
33
+ powerStream?: PowerStreamDeviceConfig;
20
34
  }
21
35
  export interface BatteryDeviceConfig {
22
36
  additionalCharacteristics: AdditionalBatteryCharacteristicType[];
@@ -26,3 +40,13 @@ export declare enum AdditionalBatteryCharacteristicType {
26
40
  InputConsumptionInWatts = "Input Consumption, W",
27
41
  OutputConsumptionInWatts = "Output Consumption, W"
28
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,17 +1,26 @@
1
- export var DeviceModel;
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
- })(DeviceModel || (DeviceModel = {}));
6
- export var LocationType;
8
+ DeviceModel["PowerStream"] = "PowerStream";
9
+ })(DeviceModel || (exports.DeviceModel = DeviceModel = {}));
10
+ var LocationType;
7
11
  (function (LocationType) {
8
12
  LocationType["EU"] = "EU";
9
13
  LocationType["US"] = "US";
10
- })(LocationType || (LocationType = {}));
11
- export var AdditionalBatteryCharacteristicType;
14
+ })(LocationType || (exports.LocationType = LocationType = {}));
15
+ var AdditionalBatteryCharacteristicType;
12
16
  (function (AdditionalBatteryCharacteristicType) {
13
17
  AdditionalBatteryCharacteristicType["BatteryLevel"] = "Battery Level, %";
14
18
  AdditionalBatteryCharacteristicType["InputConsumptionInWatts"] = "Input Consumption, W";
15
19
  AdditionalBatteryCharacteristicType["OutputConsumptionInWatts"] = "Output Consumption, W";
16
- })(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 = {}));
17
26
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,iCAAkB,CAAA;AACpB,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,yBAAS,CAAA;IACT,yBAAS,CAAA;AACX,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAeD,MAAM,CAAN,IAAY,mCAIX;AAJD,WAAY,mCAAmC;IAC7C,wEAAiC,CAAA;IACjC,uFAAgD,CAAA;IAChD,yFAAkD,CAAA;AACpD,CAAC,EAJW,mCAAmC,KAAnC,mCAAmC,QAI9C"}
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"}
@@ -1,4 +1,7 @@
1
- export class Logger {
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,MAAM,OAAO,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"}
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,4 @@
1
+ import { Logging } from 'homebridge';
2
+ export declare class MachineIdProvider {
3
+ getMachineId(log: Logging): Promise<string>;
4
+ }
@@ -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,5 @@
1
+ import { EcoFlowAccessoryBase } from '@ecoflow/accessories/ecoFlowAccessoryBase';
2
+ export interface MockService {
3
+ Name: string;
4
+ }
5
+ export declare function getActualServices(accessory: EcoFlowAccessoryBase): MockService[];
@@ -0,0 +1,6 @@
1
+ import { CharacteristicValue, Nullable, Service } from 'homebridge';
2
+ export interface MockCharacteristic {
3
+ UUID: string;
4
+ value: Nullable<CharacteristicValue>;
5
+ }
6
+ export declare function getActualCharacteristics(service: Service): MockCharacteristic[];
@@ -0,0 +1 @@
1
+ export declare function sleep(ms: number): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import { IHomebridge } from './interfaces/homebridge';
2
+ export declare function renderEcoFlowPluginConfig(homebridgeProvider: IHomebridge): 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,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,5 @@
1
+ import { IContext } from '../interfaces/contracts';
2
+ import { PluginConfigRendererBase } from './pluginConfigRendererBase';
3
+ export declare class PluginConfigNameRenderer extends PluginConfigRendererBase {
4
+ render(context: IContext): void;
5
+ }
@@ -0,0 +1,6 @@
1
+ import { IContext, IRenderer } from '../interfaces/contracts';
2
+ export declare class PluginConfigRenderer {
3
+ private readonly renderers;
4
+ constructor(renderers: IRenderer[]);
5
+ render(context: IContext): void;
6
+ }
@@ -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
- import { EcoFlowHomebridgePlatform } from './platform.js';
2
- import { PLATFORM_NAME } from './settings.js';
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
- export default (api) => {
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":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,eAAe,CAAC,GAAQ,EAAE,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;AACjE,CAAC,CAAC"}
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 {};
@@ -1,7 +1,5 @@
1
- import { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service, UnknownContext } from 'homebridge';
2
- import { EcoFlowAccessory } from './accessories/ecoFlowAccessory.js';
3
- import { CustomCharacteristics } 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
@@ -16,14 +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
- private static InitCustomCharacteristics;
20
+ static InitCustomCharacteristics(hap: HAP): void;
21
21
  /**
22
22
  * This function is invoked when homebridge restores cached accessories from disk at startup.
23
23
  * It should be used to set up event handlers for characteristics and update respective values.
24
24
  */
25
25
  configureAccessory(accessory: PlatformAccessory): void;
26
- registerDevices(): void;
27
- cleanupDevices(configuredAccessories: PlatformAccessory[], configuredEcoFlowAccessories: EcoFlowAccessory[], logs: Record<string, Logging>): void;
28
- createAccessory(accessory: PlatformAccessory<UnknownContext>, config: DeviceConfig, log: Logging): EcoFlowAccessory | null;
26
+ private validateDeviceConfig;
27
+ private registerDevices;
28
+ private addNewDevice;
29
+ private cleanupDevices;
30
+ private initialize;
31
+ private createAccessory;
29
32
  }