Skip to content

Commit 745689c

Browse files
committed
Add a user guide explaining microgrid concepts from an SDK perspective
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent f322b1f commit 745689c

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
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

Comments
 (0)