energyexplorer.io

energy-transition economic-modeling interactive-data-visualization

An interactive dashboard to calculate NPV and LCOE of utility-scale front-of-meter solar with battery projects in California.

Thomas Wheeler
01-01-2023

Project overview

energyexplorer.io is a web application I independently developed to automate parts of a renewable energy project valuation assignment from Dr. Ranjit Deshmukh’s Energy & Electric Power Systems course at the Bren School of Environmental Science & Management.

The main goal of the application to provide an intuitive, user-interactive dashboard for renewable energy developers to estimate the levelized cost of energy (LCOE) and net present value (NPV) of a proposed project at a desired location in California.

To step through the energy and economic calculations performed by the app’s backend, explore data-pipeline.ipynb in this repo.

Data analysis

To calculate LCOE and NPV for a user defined location the application:

  1. Sends user defined project parameters to NREL’s National Solar Radiation Database (NSRDB) which returns a one year historical hourly solar radiation for the project’s latitude & longitude.

  2. Converts historical hourly solar radiation dataset to hourly energy generation using modules from NREL’s System Advisor Model (SAM)

  3. Identifies the the nearest CAISO wholesale LMP Node that the proposed plant could sell electricity to.

  4. Extracts one year historical hourly LMP prices from nearest LMP node (currently using static dataset due to difficulty connecting to CAISO API) and joins with hourly generation dataset.

  5. Simulates additional earnings generated through energy arbitrage if user includes a battery with the plant. To simulate arbitrage, the application assumes prices and energy generation will be exactly the same as the prior year. The battery is charged only

  1. Calculates LCOE per MWh is calculated using the following formula:

lcoe = (((capital_cost_per_mw * (1-tax_credit/100)) * installed_capacity * crf) + (fixed_cost_per_mwh * installed_capacity)) / (installed_capacity * dc_capacity_factor * annual_operating_hours)

where:

  1. Calculates NPV by subtracting LCOE per MWh from average plant earnings per MWh and discounting over project lifetime

  2. Graphs output

Data

National Solar Radiation Database (NSRDB) - Database of hourly and half-hourly solar radiation (global horizontal, direct normal, and diffuse horizontal irradiance) across the United States and in some international locations. This dataset is accessed using NREL’s Python API.

NREL’s System Advisor Model (SAM) - SAM is a model used to calculate energy generation and financial projections for a variety of renewable energy systems. energyexplorer.io uses SAM’s energy generation model to convert solar radiation data from NSRDB to energy generation by a solar plant with user defined parameters. This tool is accessed using the NREL-PySAM package.

CAISO OAIS - Database of real-time and historical data related to the ISO transmission system and its Market, such as system demand forecasts, transmission outage and capacity status, market prices and market result data. Click here to view a realtime map of wholesale energy prices across California. The current version of energyexplorer.io uses a static, one year hourly dataset from the HOLLISTR_1_N101 for all future price predictions. This dataset was manually extracted using the CAISO OASIS online downloader.

U.S. Solar Photovoltaic System and Energy Storage Cost Benchmarks: Q1 2021 - This NREL report was used to define capex and fixed o&m parameters used to calculated the levelized cost of energy (LCOE) in energyexplorer.io. More about cost and performance parameters provided by NREL for electricity generating technologies can be found here.

NREL’s Cambium Viewer - Database and viewing tool developed by NREL to project future wholesale energy prices and marginal emission rates across the United States. Projections provided by Cambium were are not currently used in energyexplorer.io.

Application tech stack

Front-end:

Back-end: