{"id":19797,"name":"PV Free","description":"A public API for PV modeling parameters.","url":"https://github.com/BreakingBytes/pvfree","last_synced_at":"2026-04-03T12:30:24.068Z","repository":{"id":27962873,"uuid":"31455907","full_name":"BreakingBytes/pvfree","owner":"BreakingBytes","description":"Free PV API","archived":false,"fork":false,"pushed_at":"2026-03-06T05:14:36.000Z","size":389,"stargazers_count":23,"open_issues_count":13,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-03-26T10:41:10.941Z","etag":null,"topics":["api","python","solar-energy"],"latest_commit_sha":null,"homepage":"https://pvfree.azurewebsites.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BreakingBytes.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2015-02-28T08:09:30.000Z","updated_at":"2026-03-06T05:14:32.000Z","dependencies_parsed_at":"2026-03-25T08:02:23.215Z","dependency_job_id":null,"html_url":"https://github.com/BreakingBytes/pvfree","commit_stats":{"total_commits":221,"total_committers":2,"mean_commits":110.5,"dds":0.03167420814479638,"last_synced_commit":"6943f127e3a5b37d5a0d973f4a64d8d8c528d164"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BreakingBytes/pvfree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BreakingBytes","download_url":"https://codeload.github.com/BreakingBytes/pvfree/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"owner":{"login":"BreakingBytes","name":"Breaking Bytes","uuid":"1437576","kind":"organization","description":"","email":"breaking-bytes@alwaysdata.net","website":"http://breakingbytes.github.io/","location":"Oakland, CA","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1437576?v=4","repositories_count":8,"last_synced_at":"2024-04-16T02:52:05.522Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/BreakingBytes","funding_links":[],"total_stars":62,"followers":0,"following":0,"created_at":"2022-11-03T11:44:40.885Z","updated_at":"2024-04-16T02:52:08.781Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BreakingBytes","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BreakingBytes/repositories"},"packages":[],"commits":{"id":1253911,"full_name":"BreakingBytes/pvfree","default_branch":"main","total_commits":339,"total_committers":2,"total_bot_commits":20,"total_bot_committers":1,"mean_commits":169.5,"dds":0.05899705014749268,"past_year_total_commits":82,"past_year_total_committers":2,"past_year_total_bot_commits":10,"past_year_total_bot_committers":1,"past_year_mean_commits":41.0,"past_year_dds":0.12195121951219512,"last_synced_at":"2026-03-31T11:02:56.325Z","last_synced_commit":"d299d5eefa82020cb01633ca76d8446185f485f4","created_at":"2023-03-27T10:48:04.636Z","updated_at":"2026-03-31T11:02:55.728Z","committers":[{"name":"Mark Mikofski","email":"bwana.marko@yahoo.com","login":"mikofski","count":319},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":20}],"past_year_committers":[{"name":"Mark Mikofski","email":"mark.mikofski@dnv.com","login":"mikofski","count":72},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":10}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-02T00:00:08.713Z","repositories_count":6209116,"commits_count":926966555,"contributors_count":35789902,"owners_count":1144363,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"BreakingBytes/pvfree","html_url":"https://github.com/BreakingBytes/pvfree","last_synced_at":"2026-03-29T10:02:47.483Z","status":"error","issues_count":31,"pull_requests_count":85,"avg_time_to_close_issue":15907922.52631579,"avg_time_to_close_pull_request":1494507.9,"issues_closed_count":19,"pull_requests_closed_count":80,"pull_request_authors_count":2,"issue_authors_count":1,"avg_comments_per_issue":0.4838709677419355,"avg_comments_per_pull_request":0.2,"merged_pull_requests_count":73,"bot_issues_count":0,"bot_pull_requests_count":34,"past_year_issues_count":15,"past_year_pull_requests_count":47,"past_year_avg_time_to_close_issue":831665.1666666666,"past_year_avg_time_to_close_pull_request":71901.0,"past_year_issues_closed_count":6,"past_year_pull_requests_closed_count":44,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.26666666666666666,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":12,"past_year_merged_pull_requests_count":44,"created_at":"2023-05-09T10:38:28.199Z","updated_at":"2026-03-29T10:02:47.483Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/BreakingBytes%2Fpvfree/issues","issue_labels_count":{"bug":5,"enhancement":4,"dependencies":3,"python":3,"help wanted":2},"pull_request_labels_count":{"dependencies":36,"python":24,"enhancement":3,"github_actions":2},"issue_author_associations_count":{"MEMBER":31},"pull_request_author_associations_count":{"MEMBER":51,"CONTRIBUTOR":34},"issue_authors":{"mikofski":31},"pull_request_authors":{"mikofski":51,"dependabot[bot]":34},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-31T00:00:10.865Z","repositories_count":14018533,"issues_count":34603442,"pull_requests_count":113142603,"authors_count":11212645,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"enhancement":3,"python":3,"bug":2,"dependencies":2,"help wanted":1},"past_year_pull_request_labels_count":{"dependencies":12,"python":12,"enhancement":3},"past_year_issue_author_associations_count":{"MEMBER":15},"past_year_pull_request_author_associations_count":{"MEMBER":29,"CONTRIBUTOR":10},"past_year_issue_authors":{"mikofski":15},"past_year_pull_request_authors":{"mikofski":29,"dependabot[bot]":10},"maintainers":[{"login":"mikofski","count":82,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mikofski"}],"active_maintainers":[{"login":"mikofski","count":44,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mikofski"}]},"events":{"total":{"DeleteEvent":15,"PullRequestEvent":53,"ForkEvent":1,"IssuesEvent":30,"WatchEvent":3,"IssueCommentEvent":18,"PushEvent":45,"GollumEvent":48,"CreateEvent":11},"last_year":{"DeleteEvent":13,"PullRequestEvent":40,"ForkEvent":1,"IssuesEvent":28,"WatchEvent":1,"IssueCommentEvent":15,"PushEvent":37,"GollumEvent":26,"CreateEvent":5}},"keywords":["api","python","solar-energy"],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-08-01T09:09:00.026Z","updated_at":"2022-08-01T09:09:00.026Z","repository_link":"https://github.com/BreakingBytes/pvfree/blob/main/requirements.txt","dependencies":[{"id":538327678,"package_name":"bokeh","ecosystem":"pypi","requirements":"==2.0.1","direct":true,"kind":"runtime","optional":false},{"id":538327679,"package_name":"defusedxml","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":538327680,"package_name":"dj_database_url","ecosystem":"pypi","requirements":"==0.5.0","direct":true,"kind":"runtime","optional":false},{"id":538327681,"package_name":"django","ecosystem":"pypi","requirements":"==1.11.29","direct":true,"kind":"runtime","optional":false},{"id":538327682,"package_name":"django_tastypie","ecosystem":"pypi","requirements":"==0.14.3","direct":true,"kind":"runtime","optional":false},{"id":538327683,"package_name":"future","ecosystem":"pypi","requirements":"==0.18.2","direct":true,"kind":"runtime","optional":false},{"id":538327684,"package_name":"gunicorn","ecosystem":"pypi","requirements":"==20.0.4","direct":true,"kind":"runtime","optional":false},{"id":538327685,"package_name":"jinja2","ecosystem":"pypi","requirements":"==2.11.3","direct":true,"kind":"runtime","optional":false},{"id":538327686,"package_name":"lxml","ecosystem":"pypi","requirements":"==4.6.5","direct":true,"kind":"runtime","optional":false},{"id":538327687,"package_name":"nose","ecosystem":"pypi","requirements":"==1.3.7","direct":true,"kind":"runtime","optional":false},{"id":538327688,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.16.2","direct":true,"kind":"runtime","optional":false},{"id":538327689,"package_name":"openpyxl","ecosystem":"pypi","requirements":"==3.0.3","direct":true,"kind":"runtime","optional":false},{"id":538327690,"package_name":"pandas","ecosystem":"pypi","requirements":"==0.24.2","direct":true,"kind":"runtime","optional":false},{"id":538327691,"package_name":"psycopg2","ecosystem":"pypi","requirements":"==2.8.5","direct":true,"kind":"runtime","optional":false},{"id":538327692,"package_name":"pvlib","ecosystem":"pypi","requirements":"==0.6.1","direct":true,"kind":"runtime","optional":false},{"id":538327693,"package_name":"pytest","ecosystem":"pypi","requirements":"==5.4.1","direct":true,"kind":"runtime","optional":false},{"id":538327694,"package_name":"pytest-django","ecosystem":"pypi","requirements":"==3.9.0","direct":true,"kind":"runtime","optional":false},{"id":538327695,"package_name":"pytz","ecosystem":"pypi","requirements":"==2019.3","direct":true,"kind":"runtime","optional":false},{"id":538327696,"package_name":"python_dateutil","ecosystem":"pypi","requirements":"==2.8.1","direct":true,"kind":"runtime","optional":false},{"id":538327697,"package_name":"pyyaml","ecosystem":"pypi","requirements":"==5.4","direct":true,"kind":"runtime","optional":false},{"id":538327698,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.2.1","direct":true,"kind":"runtime","optional":false},{"id":538327699,"package_name":"six","ecosystem":"pypi","requirements":"==1.14.0","direct":true,"kind":"runtime","optional":false},{"id":538327700,"package_name":"tables","ecosystem":"pypi","requirements":"==3.6.1","direct":true,"kind":"runtime","optional":false},{"id":538327701,"package_name":"whitenoise","ecosystem":"pypi","requirements":"==5.0.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/master_pvfree.yml","sha":null,"kind":"manifest","created_at":"2024-03-17T04:51:40.557Z","updated_at":"2024-03-17T04:51:40.557Z","repository_link":"https://github.com/BreakingBytes/pvfree/blob/main/.github/workflows/master_pvfree.yml","dependencies":[{"id":16864555613,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":16864555727,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":16864555728,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":16864555729,"package_name":"actions/download-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":16864555730,"package_name":"azure/webapps-deploy","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test_pvfree.yml","sha":null,"kind":"manifest","created_at":"2025-04-17T08:56:31.550Z","updated_at":"2025-04-17T08:56:31.550Z","repository_link":"https://github.com/BreakingBytes/pvfree/blob/main/.github/workflows/test_pvfree.yml","dependencies":[{"id":22722112304,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":22722112305,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":22722112306,"package_name":"postgres","ecosystem":"actions","requirements":"*","direct":true,"kind":"docker","optional":false}]}],"score":4.276666119016055,"created_at":"2023-09-11T14:52:07.190Z","updated_at":"2026-04-03T12:30:24.078Z","avatar_url":"https://github.com/BreakingBytes.png","language":"Python","category":"Renewable Energy","sub_category":"Photovoltaics and Solar Energy","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"[![test_pvfree](https://github.com/BreakingBytes/pvfree/actions/workflows/test_pvfree.yml/badge.svg?branch=main\u0026event=push)](https://github.com/BreakingBytes/pvfree/actions/workflows/test_pvfree.yml)\n\nPV Free\n=======\nA public API for PV modeling parameters and pvlib API for learning about solar.\n\nAnnouncements\n-------------\n_2025-03-22_: Now that ElephantSQL has reached its end-of-life, and the Aiven migration is working as expected, the dev website deployed\nat AlwaysData has been terminated. Please use https://pvfree.azurewebsites.net/ only.\n\nHosting\n-------\npvfree is hosted at [Microsoft Azure Cloud App service](https://azure.microsoft.com/en-us/products/app-service/).\nPlease use https://pvfree.azurewebsites.net/ to get module and inverter parameters for pvlib and to learn about solar energy modeling.\n\nThe pvfree database is hosted at [Aiven](https://aiven.io/) using PostgreSQL.\n\nContributing\n------------\nThe `pytest.ini` file is set to run using `DJANGO.SETTINGS_MODULE=pvfree.settings.dev` and find all tests automatically,\nto allow you to use just the `pytest` command instead of `python manage.py test testdir --settings pvfree.settings.dev`.\n\nUsage\n-----\nBrowsing to\n[`pvfree.azurewebsites.net/api/v1/pvinverter/`](https://pvfree.azurewebsites.net/api/v1/pvinverter/?format=json)\nwill display a JSON string with the first 20 records. The endpoint and query\nstring to obtain the next set\n[`api/pvinverter/?limit=20\u0026offset=20`](https://pvfree.azurewebsites.net/api/v1/pvinverter/?format=json\u0026limit=20\u0026offset=20)\nis contained in the `next` key of the string as are the endpoints for each\ninverter. Note: the query string `?format=json` is only necessary when using the API url directly in a browser to display the response.\n\n[Tastypie](https://django-tastypie.readthedocs.org/en/latest/)\n--------------------------------------------------------------\nThe API is generated by the Tastypie django extension. Add the following endpoints to the base URL, [`https://pvfree.azurewebsites.net/`](https://pvfree.azurewebsites.net/):\n\n* Get first 20 pvinverters.\n\n        api/pvinverter/\n\n* Get first pvinverter.\n\n        api/pvinverter/1/\n\n* Get pvinverter set containing #'s 2, 3, 5, and 10.\n\n        api/pvinverter/set/2;3;5;10/\n\n* Get 100 pvinverters starting from pvinverter # 500.\n\n        api/pvinverter/?limit=100\u0026offset=500\n\n* Get pvinverter database schema.\n\n        api/pvinverter/schema/\n\n[Python Requests](https://requests.readthedocs.io/en/master/)\n-------------------------------------------------------------\nPython has several libraries for interacting with URLs. The Requests package is available from [PyPI](https://pypi.python.org/pypi/requests).\n\n```python\n\u003e\u003e\u003e import requests\n\u003e\u003e\u003e response = requests.get('https://pvfree.azurewebsites.net/api/v1/pvinverter/set/1;3;5/')\n\u003e\u003e\u003e response\n  \u003cResponse [200]\u003e\n\u003e\u003e\u003e response.status_code\n  200\n\u003e\u003e\u003e response.content\n  {\"objects\": [{\"C0\": -2.48104842861e-05, \"C1\": -9.0149429405099999e-05, \"C2\": 0.00066889632690700005, \"C3\": -0.018880466688599998, \"Idcmax\": 10.0, \"MPPT_hi\": 50.0, \"MPPT_low\": 20.0, \"Paco\": 250.0, \"Pdco\": 259.52205054799998, \"Pnt\": 0.02, \"Pso\": 1.7716142241299999, \"Sandia_ID\": 1399, \"Tamb_low\": -40.0, \"Tamb_max\": 85.0, \"Vaco\": 208.0, \"Vdcmax\": 65.0, \"Vdco\": 40.242603174599999, \"id\": 1, \"manufacturer\": \"ABB\", \"name\": \"MICRO-0.25-I-OUTD-US-208\", \"numberMPPTChannels\": 1, \"resource_uri\": \"/api/v1/pvinverter/1/\", \"source\": \"CEC\", \"vintage\": \"2014-01-01\", \"weight\": 1.6499999999999999}, ...]}\n```\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["optimize","archiving","measur","transforms","animals","conversion","observation","generic","projection","compose"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/19797","html_url":"https://ost.ecosyste.ms/projects/19797"}