|
1 | 1 | = ESS (Energy Storage System) |
2 | 2 |
|
3 | | -An Energy Storage System is an integrated system with battery and battery inverter. |
| 3 | +An Energy Storage System is an integrated system with battery and battery inverter. This API bundle defines the core natures (interfaces) that ESS components implement. |
4 | 4 |
|
5 | | -link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/SymmetricEss.java[Ess icon:code[]]:: |
6 | | -A generic Energy Storage System |
7 | | -// + |
8 | | -// |=== |
9 | | -// include::https://raw.githubusercontent.com/OpenEMS/openems/develop/doc/_old/devices/_include/EssNature.adoc[tag=channels] |
10 | | -// |=== |
| 5 | +== Core ESS Natures |
11 | 6 |
|
12 | | -link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/SymmetricEss.java[SymmetricEssReadonly icon:code[]]:: |
13 | | -A symmetric Energy Storage System in readonly-mode. |
14 | | -// TODO add channels |
| 7 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/SymmetricEss.java[SymmetricEss icon:code[]]:: |
| 8 | +A symmetric Energy Storage System that provides balanced power across all phases. This is the base nature for most ESS implementations. |
| 9 | ++ |
| 10 | +*Key Channels:* |
| 11 | ++ |
| 12 | +* `SOC` - State of Charge (%) |
| 13 | +* `CAPACITY` - Battery capacity (Wh) |
| 14 | +* `GRID_MODE` - Current grid mode (On-Grid/Off-Grid) |
| 15 | +* `ACTIVE_POWER` - Active power (W, negative=charge, positive=discharge) |
| 16 | +* `REACTIVE_POWER` - Reactive power (var) |
15 | 17 |
|
16 | | -//link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/ManagedSymmetricEss.java[SymmetricEss icon:code[]]:: |
17 | | -A symmetric, controllable Energy Storage System. |
18 | | -// TODO add channels |
| 18 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/ManagedSymmetricEss.java[ManagedSymmetricEss icon:code[]]:: |
| 19 | +A controllable symmetric Energy Storage System that extends `SymmetricEss`. Supports active and reactive power control commands. |
| 20 | +This is the most commonly used nature for controllable ESS implementations. |
| 21 | ++ |
| 22 | +*Key Channels:* |
| 23 | ++ |
| 24 | +* `ALLOWED_CHARGE_POWER` - Maximum allowed charge power (W, negative value) |
| 25 | +* `ALLOWED_DISCHARGE_POWER` - Maximum allowed discharge power (W, positive value) |
| 26 | +* `SET_ACTIVE_POWER_EQUALS` - Write command to set active power |
| 27 | +* `SET_ACTIVE_POWER_LESS_OR_EQUALS` - Write command to limit maximum discharge power |
| 28 | +* `SET_ACTIVE_POWER_GREATER_OR_EQUALS` - Write command to limit maximum charge power |
| 29 | +* `SET_REACTIVE_POWER_EQUALS` - Write command to set reactive power |
| 30 | ++ |
19 | 31 |
|
20 | | -// TODO: describe SymmetricPower 'Active/Reactive Power circle' + callback |
| 32 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/AsymmetricEss.java[AsymmetricEss icon:code[]]:: |
| 33 | +A three-phase Asymmetric Energy Storage System that extends `SymmetricEss`. Provides separate power measurements for each phase (L1, L2, L3). |
| 34 | ++ |
| 35 | +*Key Channels:* |
| 36 | ++ |
| 37 | +* `ACTIVE_POWER_L1`, `ACTIVE_POWER_L2`, `ACTIVE_POWER_L3` - Active power per phase (W) |
| 38 | +* `REACTIVE_POWER_L1`, `REACTIVE_POWER_L2`, `REACTIVE_POWER_L3` - Reactive power per phase (var) |
| 39 | + |
| 40 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/ManagedAsymmetricEss.java[ManagedAsymmetricEss icon:code[]]:: |
| 41 | +A controllable asymmetric Energy Storage System that extends both `ManagedSymmetricEss` and `AsymmetricEss`. Allows independent control of each phase. |
| 42 | ++ |
| 43 | +*Key Channels:* |
| 44 | ++ |
| 45 | +* `SET_ACTIVE_POWER_L1_EQUALS`, `SET_ACTIVE_POWER_L2_EQUALS`, `SET_ACTIVE_POWER_L3_EQUALS` - Write commands for active power per phase |
| 46 | +* `SET_REACTIVE_POWER_L1_EQUALS`, `SET_REACTIVE_POWER_L2_EQUALS`, `SET_REACTIVE_POWER_L3_EQUALS` - Write commands for reactive power per phase |
| 47 | + |
| 48 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/SinglePhaseEss.java[SinglePhaseEss icon:code[]]:: |
| 49 | +A single-phase Energy Storage System that extends `AsymmetricEss`. Connected to only one phase (L1, L2, or L3). |
| 50 | ++ |
| 51 | +*Key Methods:* |
| 52 | ++ |
| 53 | +* `getPhase()` - Returns which phase (L1/L2/L3) the ESS is connected to |
| 54 | + |
| 55 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/ManagedSinglePhaseEss.java[ManagedSinglePhaseEss icon:code[]]:: |
| 56 | +A controllable single-phase Energy Storage System that extends both `ManagedSymmetricEss` and `SinglePhaseEss`. |
| 57 | + |
| 58 | +== Specialized ESS Natures |
| 59 | + |
| 60 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/HybridEss.java[HybridEss icon:code[]]:: |
| 61 | +An ESS with one or more DC-coupled PV chargers. Extends `SymmetricEss`. |
| 62 | ++ |
| 63 | +*Key Channels:* |
| 64 | ++ |
| 65 | +* `DC_DISCHARGE_POWER` - Actual battery discharge power (W), i.e., `ACTIVE_POWER` minus DC charger production |
| 66 | +* `DC_CHARGE_ENERGY` - Cumulative battery charge energy (Wh) |
| 67 | +* `DC_DISCHARGE_ENERGY` - Cumulative battery discharge energy (Wh) |
| 68 | ++ |
| 69 | +*Note:* For hybrid inverters, `ACTIVE_POWER` includes excess DC-PV production, while `DC_DISCHARGE_POWER` represents the actual battery power flow. |
| 70 | + |
| 71 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/MetaEss.java[MetaEss icon:code[]]:: |
| 72 | +A virtual ESS that wraps one or more physical energy storage systems. Extends `SymmetricEss`. Used for ESS clusters or combined systems. |
| 73 | ++ |
| 74 | +*Key Methods:* |
| 75 | ++ |
| 76 | +* `getEssIds()` - Returns array of Component-IDs of the physical ESS components |
| 77 | ++ |
| 78 | +*Usage:* Implements aggregation logic to combine multiple ESS into a single logical unit. |
| 79 | + |
| 80 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/offgrid/api/OffGridEss.java[OffGridEss icon:code[]]:: |
| 81 | +An ESS with off-grid (island mode) capabilities. Extends `ManagedSymmetricEss`. |
| 82 | ++ |
| 83 | +*Key Methods:* |
| 84 | ++ |
| 85 | +* `isOffGridPossible()` - Returns true if the ESS can build a micro-grid in off-grid mode |
| 86 | ++ |
| 87 | +*Usage:* Typically used with systems that can form and maintain an AC grid when disconnected from the utility grid. |
| 88 | + |
| 89 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/EssErrorAcknowledge.java[EssErrorAcknowledge icon:code[]]:: |
| 90 | +Defines error acknowledgement capabilities for ESS components. Extends `OpenemsComponent`. |
| 91 | ++ |
| 92 | +*Key Channels:* |
| 93 | ++ |
| 94 | +* `TIMEOUT_START_BATTERY` - Fault state when battery start timeout is exceeded |
| 95 | +* `TIMEOUT_START_BATTERY_INVERTER` - Fault state when battery inverter start timeout is exceeded |
| 96 | +* `TIMEOUT_STOP_BATTERY` - Fault state when battery stop timeout is exceeded |
| 97 | +* `TIMEOUT_STOP_BATTERY_INVERTER` - Fault state when battery inverter stop timeout is exceeded |
| 98 | ++ |
| 99 | +*Key Methods:* |
| 100 | ++ |
| 101 | +* `executeErrorAcknowledge()` - Attempts to clear error channels |
| 102 | ++ |
| 103 | +*Usage:* Implemented by ESS components that require explicit error acknowledgement and timeout handling. |
| 104 | + |
| 105 | +== Auxiliary Components |
| 106 | + |
| 107 | +=== DC Charger |
21 | 108 |
|
22 | 109 | link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/dccharger/api/EssDcCharger.java[EssDcCharger icon:code[]]:: |
23 | | -A solar charger that is connected to DC side of an energy storage system. |
24 | | -// TODO add channels |
| 110 | +A DC-coupled solar charger connected to the DC side of an energy storage system. Extends `OpenemsComponent`. |
| 111 | ++ |
| 112 | +*Key Channels:* |
| 113 | ++ |
| 114 | +* `ACTUAL_POWER` - Current DC power production (W, positive value) |
| 115 | +* `ACTUAL_ENERGY` - Cumulative energy production (Wh) |
| 116 | +* `MAX_ACTUAL_POWER` - Maximum ever recorded power (W) |
| 117 | +* `VOLTAGE` - DC voltage (V) |
| 118 | ++ |
| 119 | +*Usage:* Used in hybrid ESS systems where PV production feeds directly into the battery DC bus. |
| 120 | + |
| 121 | +=== Off-Grid Switch |
| 122 | + |
| 123 | +link:https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/offgrid/api/OffGridSwitch.java[OffGridSwitch icon:code[]]:: |
| 124 | +A device that determines grid status and actively switches between on-grid and off-grid modes. Extends `OpenemsComponent`. |
| 125 | ++ |
| 126 | +*Key Channels:* |
| 127 | ++ |
| 128 | +* `MAIN_CONTACTOR` - Main contactor state connecting inverter to public grid (Boolean) |
| 129 | +* `GROUNDING_CONTACTOR` - Grounding contactor state for off-grid neutral connection (Boolean) |
| 130 | +* `GRID_MODE` - Current grid mode (On-Grid/Off-Grid) |
| 131 | ++ |
| 132 | +*Usage:* Used in systems with active grid separation capabilities. |
| 133 | + |
| 134 | +== Nature Hierarchy |
| 135 | + |
| 136 | +The following diagram shows the inheritance relationships: |
| 137 | + |
| 138 | +[source] |
| 139 | +---- |
| 140 | +OpenemsComponent (base interface) |
| 141 | +├── SymmetricEss |
| 142 | +│ ├── ManagedSymmetricEss |
| 143 | +│ │ ├── ManagedAsymmetricEss (also extends AsymmetricEss) |
| 144 | +│ │ ├── ManagedSinglePhaseEss (also extends SinglePhaseEss) |
| 145 | +│ │ └── OffGridEss |
| 146 | +│ ├── AsymmetricEss |
| 147 | +│ │ ├── ManagedAsymmetricEss (also extends ManagedSymmetricEss) |
| 148 | +│ │ └── SinglePhaseEss |
| 149 | +│ │ └── ManagedSinglePhaseEss (also extends ManagedSymmetricEss) |
| 150 | +│ ├── MetaEss |
| 151 | +│ └── HybridEss |
| 152 | +├── EssDcCharger |
| 153 | +├── OffGridSwitch |
| 154 | +└── EssErrorAcknowledge |
| 155 | +---- |
| 156 | + |
| 157 | +== Implementation Guidelines |
| 158 | + |
| 159 | +When implementing an ESS component, choose the appropriate nature(s): |
| 160 | + |
| 161 | +* *Read-only ESS*: Implement `SymmetricEss` only |
| 162 | +* *Controllable ESS*: Implement `ManagedSymmetricEss` |
| 163 | +* *Three-phase with independent control*: Implement `ManagedAsymmetricEss` |
| 164 | +* *Single-phase system*: Implement `ManagedSinglePhaseEss` |
| 165 | +* *Hybrid inverter with DC-PV*: Implement `HybridEss` and provide `EssDcCharger` component(s) |
| 166 | +* *Off-grid capable*: Implement `OffGridEss` and optionally `OffGridSwitch` |
| 167 | +* *ESS cluster/aggregation*: Implement `MetaEss` |
| 168 | + |
| 169 | +Multiple natures can be combined. For example, a hybrid off-grid ESS would implement both `HybridEss` and `OffGridEss`. |
| 170 | + |
0 commit comments