Command line¶
Install with uv sync (add --extra forecast for the gradient-boosting forecaster), then
prefix commands with uv run.
openenergy run¶
uv run openenergy run examples/gb-2019-naive.yaml [--out DIR]
Runs one scenario, prints a summary and writes outputs.
gb-2019-naive (naive_last_week, GBP)
days simulated 363 (2 skipped)
revenue 13,918.48 GBP
revenue per MW-year 13,995.16 GBP
captured spread 15.79 GBP/MWh
equivalent cycles 464.7
final SOH 0.9807
forecast MAE / RMSE 6.01 / 8.12 GBP/MWh
capture ratio 73.0%
outputs outputs/gb-2019-naive
The two skipped days are 7–8 June 2019, when the source data has a day-long gap.
A scenario with assets also reports the plant
and the co-location comparison:
gb-2019-pv-colocated (naive_last_week, GBP)
days simulated 361 (2 skipped)
revenue 614,474.47 GBP
premium 0.00 GBP
plant output 13,265 MWh (0.3% curtailed)
equivalent cycles 462.5
final SOH 1.0000
forecast MAE / RMSE 6.02 / 8.14 GBP/MWh
capture ratio 96.2%
plant captured price 41.24 GBP/MWh (96.1% of baseload)
separate assets 616,873.99 GBP (plant 546,977 + battery 69,897)
co-location value -2,399.52 GBP (upper bound: plant output known)
openenergy report¶
uv run openenergy report DIR [DIR ...] [-o report.html] [--title TEXT] [--cdn]
Writes one HTML file of charts and tables from directories written by run, system run
or system validate --out, or from a sweep --out CSV. Needs the report extra
(uv sync --extra report). See Reports.
openenergy capture¶
uv run openenergy capture data/time_series/time_series_60min_singleindex_filtered.csv -t solar
Captured price and capture rate per year for each renewable technology (all by default,
or repeat -t), with capacity factor and the share of output at negative prices.
year technology CF baseload captured capture neg-price (prices in GBP/MWh)
2015 solar 18.2% 40.24 42.63 105.9% 0.00%
2016 solar 15.3% 40.47 38.13 94.2% 0.00%
2017 solar 14.4% 45.33 42.52 93.8% 0.00%
2018 solar 15.6% 57.44 56.46 98.3% 0.00%
2019 solar 15.3% 42.89 41.22 96.1% 0.00%
openenergy compare¶
uv run openenergy compare examples/gb-2019-{naive,ml,perfect}.yaml
Runs several scenarios and ranks them by revenue (plus any premium), with revenue per MW-year (battery-only scenarios), capture ratio and cycles.
openenergy netload¶
uv run openenergy netload data/time_series/time_series_60min_singleindex_filtered.csv \
[--scale-wind 3] [--scale-solar 3] [--must-run 8000]
Net load per year: renewable share, mean, peak and minimum, 99th-percentile 1-hour and 3-hour ramps, surplus above the must-run floor and, for the actual system, the price slope per GW of net load. See System analysis.
openenergy storage¶
uv run openenergy storage DATA --scale-wind 3 --scale-solar 3 --must-run 8000 \
--power 2000,5000,10000 --hours 4,8,24
Share of surplus absorbed by storage fleets of each power (MW) and duration (hours).
openenergy sweep¶
uv run openenergy sweep examples/gb-2019-naive.yaml \
--set battery.energy_mwh=1,2,4 --set dispatch.degradation_cost=0,5 [--out sweep.csv]
Runs a scenario for every combination of --set dotted.key=v1,v2 values (up to 100) and
ranks them by total revenue. For a system scenario it keeps the order
given and reports price, emissions, curtailment, cost and any battery's revenue.
openenergy system validate¶
uv run openenergy system validate [--start 2015-04-01] [--end 2020-09-30] [--out backcast/]
uv run openenergy system validate --start 2021-01-01 --end 2025-12-31
uv run openenergy system validate --commitment --price start
Rebuilds GB prices and gas and coal output from fuel, carbon and fleet data, and compares
each year with what happened: mean, MAE, correlation, 95th percentile and average daily
spread of price, gas and coal output, and CO2. The system data runs to the end of 2025.
Actual prices come from the bundled OPSD file and, after it ends in September 2020, the
Ember file; --prices (repeatable, earlier files first) points at other copies.
--commitment adds start-up costs and minimum stable output
(unit commitment; about a minute per year). --price
start compares the start price instead of the marginal price and needs --commitment.
--data points at another copy of data/system. --out writes backcast.csv,
hourly.csv and summary.json.
openenergy system run¶
uv run openenergy system run examples/gb-2019-system.yaml [--out outputs/gb-2019-system]
Dispatches one GB year with a scenario's changes and prints price, generation by
technology, curtailment, emissions, system cost and, if the scenario has a battery, its
revenue on the modelled prices. Writes dispatch.csv and summary.json. Scenarios with
storage need the system extra (uv sync --extra system).
openenergy data info¶
uv run openenergy data info data/time_series/time_series_60min_singleindex_filtered.csv
Lists each price zone with its currency, date range and number of complete days.
openenergy data update¶
uv run openenergy data update [--dir DIR]
Downloads the latest GB hourly day-ahead prices from Ember (CC BY 4.0, in EUR as
published) and the ECB's daily GBP rates into DIR (default
~/.cache/openenergy/prices, or $XDG_CACHE_HOME/openenergy/prices). Point a scenario at
the result with data: {source: ember, path: DIR/gb_day_ahead_ember.csv}. The bundled copy
in data/prices/ is refreshed by scripts/fetch_prices.py.
Errors¶
Invalid scenarios, missing files and infeasible plans print a single error: line and
exit with status 1.