Skip to content

openclimatefix/solar-consumer

Repository files navigation

Solar Consumer

All Contributors

ease of contribution: easy

This code can be used to download solar forecasts and save them to a PostgreSQL database. It fetches solar generation estimates for embedded solar farms and processes the data for analysis. Forecast can be retreived from NESO, generation values can be retreived from Ned NL.

Requirements

  • Docker
  • Docker Compose

Installation & Running

  1. Clone the repository:
git clone https://github.com/openclimatefix/neso-solar-consumer.git
cd neso-solar-consumer
  1. Copy the example environment file:
cp .example.env .env
  1. Start the application:
docker compose up -d

The above command will:

  • Start a PostgreSQL database container
  • Build and start the NESO Solar Consumer application
  • Configure all necessary networking between containers

To stop the application:

docker compose down

To view logs:

docker compose logs -f

Note: The PostgreSQL data is persisted in a Docker volume. To completely reset the database, use:

docker compose down -v

Documentation

The package provides three main functionalities:

  1. Data Fetching: Retrieves solar forecast data from the NESO API
  2. Data Formatting: Processes the data into standardized forecast objects
  3. Data Storage: Saves the formatted forecasts to a PostgreSQL database

Key Components:

  • fetch_data.py: Handles API data retrieval
  • format_forecast.py: Converts raw data into forecast objects
  • save_forecast.py: Manages database operations
  • app.py: Orchestrates the entire pipeline

Environment Variables: (Can be found in the .example.env / .env file)

  • DB_URL=postgresql://postgres:postgres@localhost:5432/neso_solar : Database Configuration
  • COUNTRY="gb" : Country code for fetching data. Currently, other options are ["nl"]
  • SAVE_METHOD="db": Ways to store the data. Currently other options are ["csv", "site-db"]
  • CSV_DIR=None : Directory to save CSV files if SAVE_METHOD="csv".

Development

  1. Set up the development environment:
pip install ".[dev]"
  1. Run tests:
pytest
  1. Format code:
black .
  1. Run linter:
ruff check .

Running the Test Suite

The test suite includes unit tests and integration tests:

# Run all tests
pytest

# Run specific test file
pytest tests/test_fetch_data.py

# Run with coverage
pytest --cov=neso_solar_consumer

Continuous Integration (CI)

This reposistory has 2 main CI workflows - branch-ci and merged-ci.

  • branch-ci is triggered on all pushes to any branch except main, and on any pull request that is opened, reopened or updated. It runs the tests suite, lints the project, and builds and pushes a dev image.
  • merged-ci is triggered on any pull request merged into main. It bumps the git tag, and builds and pushes a container with that tag.

FAQ

Q: What format is the data stored in? A: The data is stored in PostgreSQL using SQLAlchemy models, with timestamps in UTC and power values in megawatts.

Q: How often should I run the consumer? A: This depends on your use case and the NESO API update frequency. The consumer can be scheduled using cron jobs or other scheduling tools.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing and community

issues badge

Contributors

Peter Dudfield
Peter Dudfield

πŸ€”
Seao7
Seao7

πŸ’»
Siddharth
Siddharth

πŸ‘€ πŸš‡ πŸ’»
Conor O Callaghan
Conor O Callaghan

πŸ“–
Ali Rashid
Ali Rashid

⚠️
Manzoor Ahmed Shaikh
Manzoor Ahmed Shaikh

πŸ’»
Anas Khan
Anas Khan

πŸ“–
Peter Ireland
Peter Ireland

πŸ“–
vashisthrahul13
vashisthrahul13

πŸ’»
rahul-ahuja
rahul-ahuja

πŸ’»
Rahul Joon
Rahul Joon

πŸ’»
michael-gendy
michael-gendy

πŸš‡

Part of the Open Climate Fix community.

OCF Logo

About

Pull and save solar generation and forecasts

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors 16