|
| 1 | +# Microgrid Concepts |
| 2 | + |
| 3 | +A {{glossary("microgrid")}} is a local electrical grid that connects a |
| 4 | +set of electrical components together. They are often built around a |
| 5 | +passive power consumer, to supplement the electricity consumed from |
| 6 | +the {{glossary("grid", "public grid")}}, with on-site power generation |
| 7 | +or storage systems. |
| 8 | + |
| 9 | +Microgrids can also function in {{glossary("island", "island-mode")}}, |
| 10 | +without a grid connection, or without a local power consumer, but they |
| 11 | +have to have at least one of the two, to be meaningful. |
| 12 | + |
| 13 | +## Frequenz SDK Microgrid Model |
| 14 | + |
| 15 | +The SDK aims to provide an abstract model of the microgrid that allows |
| 16 | +for high-level interactions with {{glossary("component", "microgrid |
| 17 | +components")}}, without having to deal with, or even be aware of |
| 18 | +location specific details like: |
| 19 | + |
| 20 | +- where the {{glossary("meter", "meters")}} are placed, |
| 21 | +- how many {{glossary("battery", "batteries")}}, |
| 22 | +- whether there's a grid connection or a passive consumer, |
| 23 | +- what models the {{glossary("inverter", "inverters")}} are, |
| 24 | + etc. |
| 25 | +- whether components are having downtimes, because |
| 26 | + {{glossary("metric", "metrics")}} and limits get adjusted |
| 27 | + automatically when components are having downtimes. |
| 28 | + |
| 29 | +Users of the SDK can develop applications around this interface once |
| 30 | +and deploy anywhere, and the SDK will take care of translating the |
| 31 | +requests and instructions to correspond to the specific microgrid |
| 32 | +configurations. |
| 33 | + |
| 34 | +``` mermaid |
| 35 | +flowchart LR |
| 36 | +
|
| 37 | +subgraph Left[Measurements only] |
| 38 | +direction LR |
| 39 | + grid["Grid Connection"] |
| 40 | + consumer["Consumer"] |
| 41 | + pv["PV Arrays"] |
| 42 | + chp["CHP"] |
| 43 | +end |
| 44 | +
|
| 45 | +junction(( )) |
| 46 | +
|
| 47 | +subgraph Right[Measurements and control] |
| 48 | +direction LR |
| 49 | + bat["Batteries"] |
| 50 | + ev["EV Chargers"] |
| 51 | +end |
| 52 | +
|
| 53 | +grid --- junction |
| 54 | +consumer --- junction |
| 55 | +pv --- junction |
| 56 | +chp --- junction |
| 57 | +
|
| 58 | +junction --- bat |
| 59 | +junction --- ev |
| 60 | +``` |
| 61 | + |
| 62 | +## Grid |
| 63 | + |
| 64 | +This refers to a microgrid's connection to the external Grid. The |
| 65 | +power flowing through this connection can be streamed through |
| 66 | +[`grid_power`][frequenz.sdk.timeseries.logical_meter.LogicalMeter.grid_power]. |
| 67 | + |
| 68 | +In locations without a grid connection, this method would still be |
| 69 | +available, and would stream zero values. |
| 70 | + |
| 71 | +## Consumer |
| 72 | + |
| 73 | +This is the main power consumer at the site of a microgrid, and often |
| 74 | +the {{glossary("load")}} the microgrid is built to support. The power |
| 75 | +drawn by the consumer is available through |
| 76 | +[`consumer_power`][frequenz.sdk.timeseries.logical_meter.LogicalMeter.consumer_power] |
| 77 | + |
| 78 | +If there is no consumer at a site, this method would stream zero values. |
| 79 | + |
| 80 | +## Producers: PV Arrays, CHP |
| 81 | + |
| 82 | +The total {{glossary("pv", "PV")}} power production in a microgrid can |
| 83 | +be streamed through |
| 84 | +[`pv_power`][frequenz.sdk.timeseries.logical_meter.LogicalMeter.pv_power] |
| 85 | +, and similarly the total CHP production in a site can be streamed |
| 86 | +through |
| 87 | +[`chp_power`][frequenz.sdk.timeseries.logical_meter.LogicalMeter.chp_power]. |
| 88 | +And total producer power is available through |
| 89 | +[`producer_power`][frequenz.sdk.timeseries.logical_meter.LogicalMeter.producer_power]. |
| 90 | + |
| 91 | +And just like the other methods, if components of either of these |
| 92 | +types are not available in a microgrid, the corrensponding methods |
| 93 | +will stream zero values. |
| 94 | + |
| 95 | +## Batteries |
| 96 | + |
| 97 | +The total Battery power is available through |
| 98 | +[`battery_pool`][frequenz.sdk.microgrid.battery_pool]'s |
| 99 | +[`power`][frequenz.sdk.timeseries.battery_pool.BatteryPool.power]. |
| 100 | +The battery pool by default uses all batteries available at a |
| 101 | +location, but battery pool instances can be created for subsets of |
| 102 | +batteries if necessary, by specifying the battery ids. |
| 103 | + |
| 104 | +The `battery_pool` also provides |
| 105 | +[`soc`][frequenz.sdk.timeseries.battery_pool.BatteryPool.soc], |
| 106 | +[`capacity`][frequenz.sdk.timeseries.battery_pool.BatteryPool.capacity], |
| 107 | +[`temperature`][frequenz.sdk.timeseries.battery_pool.BatteryPool.temperature] |
| 108 | +and available power bounds through the |
| 109 | +[`power_status`][frequenz.sdk.timeseries.battery_pool.BatteryPool.power_status] |
| 110 | +method. |
| 111 | + |
| 112 | +The `battery_pool` also provides control methods |
| 113 | +[`propose_power`][frequenz.sdk.timeseries.battery_pool.BatteryPool.propose_power] |
| 114 | +(which accepts values in the {{glossary("psc", "Passive Sign |
| 115 | +Convention")}} and supports both charging and discharging), or through |
| 116 | +[`propose_charge`][frequenz.sdk.timeseries.battery_pool.BatteryPool.propose_charge], |
| 117 | +or |
| 118 | +[`propose_discharge`][frequenz.sdk.timeseries.battery_pool.BatteryPool.propose_discharge]. |
| 119 | + |
| 120 | +## EV Chargers |
| 121 | + |
| 122 | +The [`ev_charger_pool`][frequenz.sdk.microgrid.ev_charger_pool] offers |
| 123 | +a |
| 124 | +[`power`][frequenz.sdk.timeseries.ev_charger_pool.EVChargerPool.power] |
| 125 | +method that streams the total power measured for all the |
| 126 | +{{glossary("ev-charger", "EV Chargers")}} at a site. |
| 127 | + |
| 128 | +It also offers a |
| 129 | +[`component_data`][frequenz.sdk.timeseries.ev_charger_pool.EVChargerPool.component_data] |
| 130 | +method for fetching the status of individual EV Chargers, including |
| 131 | +state changes like when an EV is connected or disconnected, and a |
| 132 | +[`set_bounds`][frequenz.sdk.timeseries.ev_charger_pool.EVChargerPool.set_bounds] |
| 133 | +method for limit the charge power of individual EV Chargers. |
0 commit comments