{"id":50666081,"url":"https://github.com/dnv-opensource/solarfarmer-sdk-examples","last_synced_at":"2026-06-08T06:30:46.499Z","repository":{"id":361810409,"uuid":"1244560053","full_name":"dnv-opensource/solarfarmer-sdk-examples","owner":"dnv-opensource","description":"Materials demonstrating use cases of SolarFarmer, Solcast and Solar Resource Compass APIs","archived":false,"fork":false,"pushed_at":"2026-06-01T10:06:03.000Z","size":5145,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T12:06:15.436Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dnv-opensource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T11:33:38.000Z","updated_at":"2026-05-20T12:57:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dnv-opensource/solarfarmer-sdk-examples","commit_stats":null,"previous_names":["dnv-opensource/solarfarmer-sdk-examples"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dnv-opensource/solarfarmer-sdk-examples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fsolarfarmer-sdk-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fsolarfarmer-sdk-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fsolarfarmer-sdk-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fsolarfarmer-sdk-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dnv-opensource","download_url":"https://codeload.github.com/dnv-opensource/solarfarmer-sdk-examples/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fsolarfarmer-sdk-examples/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34051768,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-08T06:30:40.449Z","updated_at":"2026-06-08T06:30:46.490Z","avatar_url":"https://github.com/dnv-opensource.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# solarfarmer-sdk-examples\n\nRunnable Jupyter notebooks demonstrating end-to-end PV energy yield workflows using\nthe [SolarFarmer Python SDK](https://dnv-opensource.github.io/solarfarmer-python-sdk/),\nthe [Solcast Python SDK](https://solcast.github.io/solcast-api-python-sdk/), and the\n[DNV Solar Resource Compass API](https://api.src.dnv.com/).\n\nEach subfolder corresponds to a specific event or workshop. More are added over time.\n\n---\n\n## Contents\n\n| Folder | Event | Date |\n|--------|-------|------|\n| [`PVPMC2026/`](PVPMC2026/) | PVPMC USA Workshop, Albuquerque NM | May 2026 |\n| [`WebinarJune2026/`](WebinarJune2026/) | DNV Webinar — Bankable yield modelling in your Python workflows | June 2026 |\n\n---\n\n## Webinar June 2026\n\nFour notebooks from the **DNV Webinar: Bankable yield modelling in your Python workflows** (June 3rd 2026).\nCovers single-plant design, GCR optimisation, multi-year resource variability, operational monitoring, and multi-site portfolio assessment — all using the SolarFarmer SDK and Solcast satellite weather.\n\n| Notebook | Title | What it covers |\n|----------|-------|----------------|\n| [`demo_solarfarmer.ipynb`](WebinarJune2026/demo_solarfarmer.ipynb) | SolarFarmer SDK in 90 seconds | Design a 10 MW tracker plant, run a bankable energy calculation, visualise monthly energy \u0026 PR, sweep GCR for LCOE optimisation |\n| [`demo_multiyear_resource.ipynb`](WebinarJune2026/demo_multiyear_resource.ipynb) | Multi-year resource \u0026 energy variability | Solcast TMY + 19 years of historic data, parallel SolarFarmer runs, P50/P75/P90 exceedance, inter-annual variability |\n| [`demo_operational.ipynb`](WebinarJune2026/demo_operational.ipynb) | From pro forma to operations | Reuse a SolarFarmer 3D model for TMY baseline and satellite-actual simulations; weekly PII/PIE/WA-PIE decomposition; pvlib Kimber soiling from precipitation; cleaning ROI |\n| [`demo_multisite_portfolio.ipynb`](WebinarJune2026/demo_multisite_portfolio.ipynb) | Multi-site portfolio assessment | 5-site US West Coast portfolio from CSV; parallel Solcast TMY fetch; `PVSystem` (Workflow 2); parallel energy calculations; PR / specific yield / monthly profiles |\n\n---\n\n## PVPMC2026\n\nFive notebooks presented at the **PVPMC USA 2026 Workshop** in Albuquerque, New Mexico.\nThey form a progression from raw resource data retrieval through to multi-year energy yield analysis.\n\n| Notebook | Title | What it covers |\n|----------|-------|----------------|\n| [`01_solcast.ipynb`](PVPMC2026/01_solcast.ipynb) | Solcast API | TMY, historic, live and forecast irradiance \u0026 weather retrieval via the Solcast SDK |\n| [`02_solar_resource_compass.ipynb`](PVPMC2026/02_solar_resource_compass.ipynb) | DNV Solar Resource Compass | Multi-source irradiance comparison, monthly soiling profiles, and ground albedo via the SRC API |\n| [`03_solarfarmer.ipynb`](PVPMC2026/03_solarfarmer.ipynb) | SolarFarmer API — PVSystem builder | Build a 10 MW tracker plant from scratch, run an energy yield calculation, and sweep GCR for LCOE optimisation |\n| [`04_operational_SF3d.ipynb`](PVPMC2026/04_operational_SF3d.ipynb) | Operational: Live + Forecast → SolarFarmer | Pull Solcast live observations and short-range forecasts, convert to a SolarFarmer weather file, and run a near-real-time energy calculation |\n| [`05_solcast_solarfarmer_multiyear.ipynb`](PVPMC2026/05_solcast_solarfarmer_multiyear.ipynb) | Multi-year yield variability | Fetch 19 years of Solcast historic data, apply pvlib Kimber soiling, run each year through SolarFarmer in parallel, and analyse P50/P90 exceedance |\n\n---\n\n## Prerequisites\n\n### API keys\n\nAll notebooks require at least one API key set as an environment variable before running.\n\n| Variable | Where to get it |\n|----------|-----------------|\n| `SOLCAST_API_KEY` | [toolkit.solcast.com.au/register](https://toolkit.solcast.com.au/register) | \n| `SRC_API_KEY` | Issued by DNV on request |\n| `SF_API_KEY` | Retrieved from [solarfarmer.dnv.com](https://solarfarmer.dnv.com/) after being requested |\n\nSet them in your shell before launching Jupyter:\n\n```bash\n# Linux / macOS\nexport SOLCAST_API_KEY=your-key\nexport SRC_API_KEY=your-key\nexport SF_API_KEY=your-key\n\n# Windows (Command Prompt)\nset SOLCAST_API_KEY=your-key\nset SRC_API_KEY=your-key\nset SF_API_KEY=your-key\n\n# Windows (PowerShell)\n$env:SOLCAST_API_KEY = \"your-key\"\n$env:SRC_API_KEY     = \"your-key\"\n$env:SF_API_KEY      = \"your-key\"\n```\n\n---\n\n## Setup\n\nRequires **Python 3.11+**. Each event folder contains its own `pyproject.toml` (and, where available, an `environment.yml`) listing all dependencies. Install from whichever folder you want to run.\n\nThe examples below use `PVPMC2026/`; substitute `WebinarJune2026/` (or any other folder) to install for a different event.\n\n### Option A — conda (recommended, where environment.yml is provided)\n\n```bash\ncd PVPMC2026\nconda env create -f environment.yml\nconda activate pvpmc-usa-2026-dnv-apis\njupyter lab\n```\n\n### Option B — uv\n\n```bash\ncd PVPMC2026\nuv sync              # reads pyproject.toml and uv.lock\njupyter lab\n```\n\n### Option C — pip / venv\n\n```bash\ncd PVPMC2026          # or WebinarJune2026, etc.\npython -m venv .venv\n.venv\\Scripts\\activate          # Windows\n# source .venv/bin/activate     # macOS / Linux\npip install .        # reads pyproject.toml\njupyter lab\n```\n\n---\n\n## Repository structure\n\n```\nsolarfarmer-sdk-examples/\n├── README.md\n├── PVPMC2026/\n│   ├── environment.yml\n│   ├── pyproject.toml\n│   ├── uv.lock\n│   ├── solar_resource_compass.py     # SRC API helper\n│   ├── 01_solcast.ipynb\n│   ├── 02_solar_resource_compass.ipynb\n│   ├── 03_solarfarmer.ipynb\n│   ├── 04_operational_SF3d.ipynb\n│   ├── 05_solcast_solarfarmer_multiyear.ipynb\n│   ├── equipment/                    # PAN / OND files for notebooks 03–05\n│   └── operational_usecase/          # SolarFarmer Workflow 1 API input files\n└── WebinarJune2026/\n    ├── pyproject.toml\n    ├── environment.yml\n    ├── sites.csv                     # 5-site portfolio definition\n    ├── demo_solarfarmer.ipynb        # Single-plant design, GCR optimisation\n    ├── demo_multiyear_resource.ipynb # Multi-year variability \u0026 P50/P90\n    ├── demo_operational.ipynb        # Operational monitoring \u0026 soiling ROI\n    ├── demo_multisite_portfolio.ipynb  # Multi-site portfolio\n    ├── equipment/                    # PAN / OND files (symlinked from PVPMC2026)\n    └── weather/                      # Cached Solcast TMY TSV files\n```\n\n---\n\n## Key dependencies\n\n| Package | Purpose |\n|---------|---------|\n| [`solcast`](https://solcast.github.io/solcast-api-python-sdk/) | Solcast TMY, historic, live and forecast endpoints |\n| [`dnv-solarfarmer`](https://dnv-opensource.github.io/solarfarmer-python-sdk/) | SolarFarmer energy yield API |\n| [`pvlib`](https://pvlib-python.readthedocs.io/) | Soiling model (Kimber) and irradiance utilities |\n| `pandas`, `matplotlib` | Data manipulation and visualisation |\n\n---\n\n## Contact\n\nFor questions or to request access to API tokens, contact the DNV team at [solarfarmer@dnv.com](mailto:solarfarmer@dnv.com).\n\n---\n\n## License\n\nSee [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnv-opensource%2Fsolarfarmer-sdk-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdnv-opensource%2Fsolarfarmer-sdk-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnv-opensource%2Fsolarfarmer-sdk-examples/lists"}