{"id":18021609,"url":"https://github.com/zuinigerijder/combinepvoutputsystems","last_synced_at":"2026-04-29T19:32:54.408Z","repository":{"id":51416642,"uuid":"519595040","full_name":"ZuinigeRijder/CombinePVOutputSystems","owner":"ZuinigeRijder","description":"Simple Python3 script to combine 2 PVOutput Systems continously (normally once per 5 minutes)  into target PVOutput System","archived":false,"fork":false,"pushed_at":"2024-03-21T10:04:01.000Z","size":65,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-29T09:12:10.681Z","etag":null,"topics":["pvoutput","python","raspberry-pi"],"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/ZuinigeRijder.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2022-07-30T18:43:09.000Z","updated_at":"2025-01-25T09:11:48.000Z","dependencies_parsed_at":"2023-10-20T18:00:25.279Z","dependency_job_id":"2b289327-f5bc-4d73-a578-d11794ab8328","html_url":"https://github.com/ZuinigeRijder/CombinePVOutputSystems","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":"0.11111111111111116","last_synced_commit":"32b88febafafee4cb61a2b128d548ba1d389cb76"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ZuinigeRijder/CombinePVOutputSystems","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZuinigeRijder%2FCombinePVOutputSystems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZuinigeRijder%2FCombinePVOutputSystems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZuinigeRijder%2FCombinePVOutputSystems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZuinigeRijder%2FCombinePVOutputSystems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZuinigeRijder","download_url":"https://codeload.github.com/ZuinigeRijder/CombinePVOutputSystems/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZuinigeRijder%2FCombinePVOutputSystems/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260835407,"owners_count":23070287,"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":["pvoutput","python","raspberry-pi"],"created_at":"2024-10-30T06:10:35.348Z","updated_at":"2026-04-29T19:32:54.366Z","avatar_url":"https://github.com/ZuinigeRijder.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"- [Combine PVOutput Systems](#combine-pvoutput-systems)\n  - [PVOutput](#pvoutput)\n  - [Configuration](#configuration)\n  - [Usage](#usage)\n    - [Windows 10](#windows-10)\n    - [Raspberry pi](#raspberry-pi)\n    - [Raspberry pi Configuration](#raspberry-pi-configuration)\n    - [log files](#log-files)\n    - [Example output pvoutput.log](#example-output-pvoutputlog)\n\n# Combine PVOutput Systems\nSimple Python3 script to combine two PVOutput Systems continously (normally once per 5 minutes) into a target PVOutput System.\n\nPVOutput also includes possibilities for combining systems, but that needs a donation. With a donation you well get also other functionality, so make a choice if the donation features of PVOutput is a better route.\n\nNotes\n* you need 3 PVOutput accounts, for each system one.\n* only between 5 and 23 hour data is fetched and combined into the target PVOutput\n* the script will exit outside 5 and 23\n* if one system is not updated anymore, the target PVOutput system will NOT be updated or the time must be after 22:00 hours (assumption tyhat one system has gone to sleep already)\n* the script relies on Python version 3.7 and higher, using the ordered dictionary functionality.\n\n## PVOutput\n[PVOutput](https://pvoutput.org/) is a free online service for sharing and comparing photovoltaic solar panel output data. It provides both manual and automatic data uploading facilities.\n\nOutput data can be graphed, analysed and compared with other pvoutput contributors over various time periods. The ability to compare with similar systems within close proximity allows both short and longer term performance issues to be easily identified. While PVOutput is primarily focused on monitoring energy generation, it also provides equally capabable facilities to upload and monitor energy consumption data from various energy monitoring devices.\n\nThe python script requires multiple PVOutput API_KEY and SYSTEM_ID to function.\n* Login in PVOutput and goto your Settings page for each account\n* Select Enabled for API Access\n* Click on New Key to generate your API key\n* Make a note of your System Id\n* Save your settings\n\n## Configuration\nChange in combine_two_pvoutput_systems.cfg the following lines with your above obtained secrets:\n* pvoutput_source1_api_key = a930b6cfe4c326b0b15b83bc3501ddf123456789\n* pvoutput_source1_system_id = 12345\n* pvoutput_source2_api_key = 0f2dd8190d00369ec893b059034dde1123456789\n* pvoutput_source2_system_id = 12346\n* pvoutput_target_api_key = 6d7be6f183fc02c53f5792d1ec37180123456789\n* pvoutput_target_system_id = 12347\n\n## Usage\n### Windows 10\npython combine_two_pvoutput_systems.py\n\n### Raspberry pi\ncombine_two_pvoutput_systems.py script runs on my Raspberry pi Model B with 512 MB memory (yes, very old, from 2012) with Raspbian GNU/Linux 11 (bullseye).\n\n### Raspberry pi Configuration\nSteps:\n* create a directory solis in your home directory\n* copy pvoutput.sh, combine_two_pvoutput_systems.py and combine_two_pvoutput_systems.cfg in this solis directory\n* change inside combine_two_pvoutput_systems.cfg the API_KEY and SYSTEM_ID secrets\n* chmod + x pvoutput.sh\n* add the following line in your crontab -e:\n\n```\n4 5 * * * ~/solis/pvoutput.sh \u003e /dev/null\n@reboot sleep 234 \u0026\u0026 ~/pvoutput/pvoutput.sh \u003e /dev/null\n```\n\n### log files\nLog files are written in the home subdirectory solis\n* pvoutput.log containing the processing and data send to PVOutput (and maybe error messages)\n* pvoutput.crontab.log containing the crontab output (normally it will say that solis.sh is running).\n\n### Example output pvoutput.log\n\n```\n20220805 08:15:06: Target   read_in_memory since 05:00: written=05:00, written wh=0, wh=152, line=20220805,08:05,152,294,,,,410.0\n20220805 08:15:06: Last Written target: 08:05\n20220805 08:15:06: Source 1 read_in_memory since 08:05: written=08:05, written wh=107, wh=124, line=20220805,08:10,124,204,,,,234.4\n20220805 08:15:07: Source 2 read_in_memory since 08:05: written=08:05, written wh=45, wh=53, line=20220805,08:10,53,100,,,,175.6\n20220805 08:15:07: Sleeping for 5 minutes\n20220805 08:20:08: Source 1 read_in_memory since 08:05: written=08:05, written wh=107, wh=141, line=20220805,08:15,141,204,,,,234.6\n20220805 08:20:08: Source 2 read_in_memory since 08:05: written=08:05, written wh=45, wh=62, line=20220805,08:15,62,110,,,,179.6\n20220805 08:20:08: Target datapoints: 2\n1: data=20220805,08:10,177,304,,,,410\n2: 20220805,08:15,203,314,,,,414\n20220805 08:25:09: Source 1 read_in_memory since 08:15: written=08:15, written wh=141, wh=161, line=20220805,08:20,161,240,,,,234.8\n20220805 08:25:10: Source 2 read_in_memory since 08:15: written=08:15, written wh=62, wh=71, line=20220805,08:20,71,110,,,,179.5\n20220805 08:25:10: Target datapoints: 1\n1: data=20220805,08:20,232,350,,,,414\n20220805 08:30:11: Source 1 read_in_memory since 08:20: written=08:20, written wh=161, wh=178, line=20220805,08:25,178,204,,,,234.3\n20220805 08:30:12: Source 2 read_in_memory since 08:20: written=08:20, written wh=71, wh=100, line=20220805,08:25,100,130,,,,179.6\n20220805 08:30:12: Target datapoints: 1\n1: data=20220805,08:25,278,334,,,,414\n20220805 08:35:13: Source 1 read_in_memory since 08:25: written=08:25, written wh=178, wh=196, line=20220805,08:30,196,216,,,,234.0\n20220805 08:35:14: Source 2 read_in_memory since 08:25: written=08:25, written wh=100, wh=107, line=20220805,08:30,107,90,,,,167.6\n20220805 08:35:14: Target datapoints: 1\n1: data=20220805,08:30,303,306,,,,402\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzuinigerijder%2Fcombinepvoutputsystems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzuinigerijder%2Fcombinepvoutputsystems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzuinigerijder%2Fcombinepvoutputsystems/lists"}