Skip to content

openclimatefix/uk-pv-national-gsp-api

Repository files navigation

Nowcasting API

All Contributors

codecov

API for hosting nowcasting solar predictions. Will just return 'dummy' numbers until about mid-2022!

We use FastAPI.

Documentation

Documentation can be viewed at /docs or /swagger. This is automatically generated from the code.

Setup and Run

This can be done it two different ways: With Python or with Docker.

Python

Create a virtual env

python3 -m venv ./venv
source venv/bin/activate

Install Requirements and Run

pip install -r requirements.txt
cd src && uvicorn main:app --reload

You may need to run the following additional installation pip install git+https://github.com/SheffieldSolar/PV_Live-API#pvlive_api for pvlive-api, as in the Dockerfile.

Docker

  1. Make sure docker is installed on your system.
  2. Use docker-compose up in the main directory to start up the application.
  3. You will now be able to access it on http://localhost:80

Tests

TO run tests use the following command

docker stop $(docker ps -a -q)
docker-compose -f test-docker-compose.yml build
docker-compose -f test-docker-compose.yml run api

Development

We use pre-commit to manage various pre-commit hooks. All hooks are also run as Actions when code is pushed to GitHub.

You can run the formatters and linters locally. To do that:

  1. Install pre-commit
  2. Check the install worked via pre-commit --version
  3. Install the git hooks script via pre-commit install

Deployment

Deployment of this service is now done through terraform cloud.

Environmental Variables

  • AUTH0_DOMAIN - The Auth0 domain which can be collected from the Applications/Applications tab. It should be something like 'XXXXXXX.eu.auth0.com'
  • AUTH0_API_AUDIENCE - THE Auth0 api audience, this can be collected from the Applications/APIs tab. It should be something like https://XXXXXXXXXX.eu.auth0.com/api/v2/
  • DB_URL- The Forecast database URL used to get GSP forecast data
  • DB_URL_PV - The PV database URL, used to get PV data
  • ORIGINS - Endpoints that are valid CORS origins. See FastAPI documentation.
  • N_HISTORY_DAYS - Default is just to load data from today and yesterday, but we can set this to 5, if we want the api always to return 5 days of data
  • FORECAST_ERROR_HOURS - using route /v0/system/GBstatus/check_last_forecast_run we can check if a forecast has been made in the last FORECAST_ERROR_HOURS hours
  • ADJUST_MW_LIMIT - the maximum the api is allowed to adjust the national forecast by

Routes to SQL tables

National

  graph TD;
      N1(national/forecast) --> Q1;
      Q1{Include metadata?>} -->|no| Q2;
      Q1 --> |yes| N2[NationalForecast];
      N4[ForecastValueLatest];
      Q2{forecast horizon <br> minutes not None}
      Q2-->|yes| N5[ForecastValueSevenDays];
      Q2-->|no| N4;

      NP1(national/pvlive)-->NP2;
      NP2[GSPYield];

GSP

  graph TD;
      G1(gsp/forecast/all);
      G1--> N3[ManyForecasts];

      G3(gsp/gsp_id/forecast) -->Q4;
      Q4{forecast horizon <br> minutes not None}
      Q4-->|yes| G7[ForecastValueSevenDays];
      Q4-->|no| G6[ForecastValueLatest];

      GP1(gsp/pvlive/all)-->GP2;
      GP2[LocationWithGSPYields];

      GP3(gsp/gsp_id/pvlive)-->GP4;
      GP4[GSPYield];

Extras

  graph TD;
      G1(status)-->G2;
      G2[Status];

      G3(gsp)-->G4
      G4[Location]

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Peter Dudfield
Peter Dudfield

💻
Mohammed Faisal
Mohammed Faisal

💻
Bodale Denis
Bodale Denis

💻
Souhit Dey
Souhit Dey

💻
Flo
Flo

💻
Shanmukh
Shanmukh

💻
Sixte de Maupeou
Sixte de Maupeou

💻
rachel tipton
rachel tipton

💻
braddf
braddf

💻
Dorin
Dorin

👀
Peter Hull
Peter Hull

💻
Pedro Garcia Rodriguez
Pedro Garcia Rodriguez

💻

This project follows the all-contributors specification. Contributions of any kind welcome!