UK PV National and GSP API
API for hosting nowcasting solar predictions. This is for GSP and National forecasts in the UK.
We use FastAPI.
Installation
Pull the docker image from
docker pull openclimatefix/nowcasting_api:latest
You will need to set the following environment 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 dataORIGINS- 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 dataFORECAST_ERROR_HOURS- using route/v0/system/GBstatus/check_last_forecast_runwe can check if a forecast has
been made in the lastFORECAST_ERROR_HOURShoursADJUST_MW_LIMIT- the maximum the api is allowed to adjust the national forecast byFAKE- This allows fake data to be used, rather than connecting to a databaseQUERY_WAIT_SECONDS- The number of seconds to wait for an on going queryCACHE_TIME_SECONDS- The time in seconds to cache the data is used forDELETE_CACHE_TIME_SECONDS- The time in seconds to after which the cache is deleteLOGLEVEL- The log level for the application.
Note you will need a database set up at DB_URL. This should use the datamodel in nowcasting_datamodel
There are several optional environment variables:
N_CALLS_PER_HOUR- API rate limit for most endpoints. Defaults to 3600 (1 per second).N_SLOW_CALLS_PER_HOUR- API rate limit for slow endpoints. Defaults to 60 (1 per minute).
Documentation
Live documentation can be viewed at https://api.quartz.solar/docs or https://api.quartz.solar/swagger.
This is automatically generated from the code.
Development
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/activateInstall Requirements and Run
pip install -r requirements.txt
cd src && uvicorn main:app --reloadWarning:
If you don't have a local database set up, you can leave the DB_URL string empty (default not set)
and set FAKE=True and the API will return fake data. This is a work in progress,
so some routes might be need to be updated
Docker
๐ Currently non-functional, needs updating to migrate database to match datamodel
- Make sure docker is installed on your system.
- Use
docker-compose up
in the main directory to start up the application. - You will now be able to access it on
http://localhost:80
Running the test suite
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 apiRoutes 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]
FAQ
TODO
Contributing and community
- PR's are welcome! See the Organisation Profile for details on contributing
- Find out about our other projects in the here
- Check out the OCF blog for updates
- Follow OCF on LinkedIn
Contributors
Thanks goes to these wonderful people (emoji key):
Part of the Open Climate Fix community.
