{"id":13718938,"url":"https://github.com/openclimatefix/pvoutput","last_synced_at":"2026-01-23T13:12:07.713Z","repository":{"id":35326070,"uuid":"197233143","full_name":"openclimatefix/pvoutput","owner":"openclimatefix","description":"Python code for downloading PV data from PVOutput.org","archived":false,"fork":false,"pushed_at":"2025-03-24T17:23:25.000Z","size":5336,"stargazers_count":34,"open_issues_count":35,"forks_count":17,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-05T03:03:12.827Z","etag":null,"topics":["nowcasting","pvoutput","python","python-library","solar"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openclimatefix.png","metadata":{"funding":{"github":["openclimatefix"],"patreon":null,"open_collective":"openclimatefix","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2019-07-16T16:51:03.000Z","updated_at":"2025-03-30T00:45:51.000Z","dependencies_parsed_at":"2024-02-19T19:03:20.490Z","dependency_job_id":"cb7f5324-50be-4a5a-9f06-a0d04f852171","html_url":"https://github.com/openclimatefix/pvoutput","commit_stats":{"total_commits":282,"total_committers":14,"mean_commits":"20.142857142857142","dds":0.7092198581560284,"last_synced_commit":"60d682c406a50c448658063121d7d13a85121920"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openclimatefix%2Fpvoutput","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openclimatefix%2Fpvoutput/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openclimatefix%2Fpvoutput/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openclimatefix%2Fpvoutput/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openclimatefix","download_url":"https://codeload.github.com/openclimatefix/pvoutput/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247430833,"owners_count":20937873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["nowcasting","pvoutput","python","python-library","solar"],"created_at":"2024-08-03T01:00:39.729Z","updated_at":"2026-01-23T13:12:07.702Z","avatar_url":"https://github.com/openclimatefix.png","language":"Python","funding_links":["https://github.com/sponsors/openclimatefix","https://opencollective.com/openclimatefix"],"categories":["Renewable Energy"],"sub_categories":["Photovoltaics and Solar Energy"],"readme":"\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n[![codecov](https://codecov.io/gh/openclimatefix/pvoutput/branch/main/graph/badge.svg?token=GTQDR2ZZ2S)](https://codecov.io/gh/openclimatefix/pvoutput)\n\nDownload historical solar photovoltaic data from [PVOutput.org](https://pvoutput.org).\n\nThis code is a work-in-progress.  The aim is to provide both a Python library for interacting with [PVOutput.org's API](https://pvoutput.org/help.html#api), and a set of scripts for downloading lots of data :)\n\n# Installation\n\n```bash\n$ pip install pvoutput-ocf\n```\n\n## Register with PVOutput.org\n\nYou need to get an API key *and* a system ID from PVOutput.org.\n\nIf you don't own a physical PV system, click the \"energy consumption only\" box\nwhen registering on PVOutput.  If you don't include a\nsystem ID, then you'll get a \"401 Unauthorized\" response from the PVOutput API.\n\nYou can pass the API key and system ID into the `PVOutput` constructor.\nOr, create a `~/.pvoutput.yml` file which looks like:\n\n```yaml\napi_key: \u003cAPI key from PVOutput.org\u003e\nsystem_id: \u003cSystemID from PVOutput.org\u003e\n```\n\nThe default location of the `.pvoutput.yml` is the user's home directory, expanded from `~`. This can be overridden by setting the `PVOUTPUT_CONFIG` environment variable.\n\ne.g. `export PVOUTPUT_CONFIG=\"/my/preferred/location/.pvoutput.yml\"`\n\nAlternatively, you can set `API_KEY`, `SYSTEM_ID` and `DATA_SERVICE_URL` (see below) as environmental variables.\n\n### API quotas and paid subscriptions\nPlease see [here](https://pvoutput.org/help/data_services.html) for update info.\n\n#### Free\n\nFor free, PVOutput.org gives you 60 API requests per hour. In a single API request you can download one day of data for one PV system.  (See PVOutput's docs for more info about [rate limits](https://pvoutput.org/help/api_specification.html#rate-limits).)\n\n#### Donate\n[Donating to PVOutput.org](https://pvoutput.org/help/donations.html#donations) increases your API quota to 300 requests per hour.\n\n#### Paid\nTo get more historical data, you can pay $800 Australian dollars for a year's 'Live System History' subscription for a single country ([more info here](https://pvoutput.org/help/data_services.html). And [here's PVOutput.org's full price list](https://pvoutput.org/services.jsp)).\nThis allows you to use the [`get batch status`](https://pvoutput.org/help/data_services.html#get-batch-status-service) API to download 900 PV-system-*years* per hour.\n\nIf you have subscribed to PVOutput's data service then either\n- add `data_service_url` to your configuration file (`~/.pvoutput.yml`) or\n- pass `data_service_url` to the `PVOutput` constructor.\n\nThe `data_service_url` should end in `.org` (note the `data_service_url` doesn't include the `/service/r2` part of the URL)\nFor example: `data_service_url: https://pvoutput.org/`\n\n\n## Install pvoutput Python library\n\n```bash\npip install -e git+https://github.com/openclimatefix/pvoutput.git@main#egg=pvoutput-ocf\n```\n\n# Usage\n\nSee the [Quick Start notebook](examples/quick_start.ipynb).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://jack-kelly.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/460756?v=4?s=100\" width=\"100px;\" alt=\"Jack Kelly\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJack Kelly\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=JackKelly\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ssmssam\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/39378848?v=4?s=100\" width=\"100px;\" alt=\"Sam Murphy-Sugrue\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSam Murphy-Sugrue\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=ssmssam\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://gabrieltseng.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/29063740?v=4?s=100\" width=\"100px;\" alt=\"Gabriel Tseng\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGabriel Tseng\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=gabrieltseng\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.solar.sheffield.ac.uk/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12187350?v=4?s=100\" width=\"100px;\" alt=\"Jamie Taylor\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJamie Taylor\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=JamieTaylor-TUOS\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/peterdudfield\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/34686298?v=4?s=100\" width=\"100px;\" alt=\"Peter Dudfield\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePeter Dudfield\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#infra-peterdudfield\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/vnshanmukh\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/67438038?v=4?s=100\" width=\"100px;\" alt=\"Shanmukh Chava\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eShanmukh Chava\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=vnshanmukh\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Antsthebul\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56587872?v=4?s=100\" width=\"100px;\" alt=\"Antsthebul\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAntsthebul\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=Antsthebul\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.rachitsingh.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1606892?v=4?s=100\" width=\"100px;\" alt=\"Rachit Singh\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRachit Singh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#data-rachtsingh\" title=\"Data\"\u003e🔣\u003c/a\u003e \u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=rachtsingh\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/devsjc\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/47188100?v=4?s=100\" width=\"100px;\" alt=\"devsjc\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edevsjc\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/openclimatefix/pvoutput/commits?author=devsjc\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenclimatefix%2Fpvoutput","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenclimatefix%2Fpvoutput","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenclimatefix%2Fpvoutput/lists"}