{"id":23787627,"url":"https://github.com/afrouper/sungrow-api-client","last_synced_at":"2026-06-21T02:31:55.613Z","repository":{"id":270400192,"uuid":"910268681","full_name":"Afrouper/sungrow-api-client","owner":"Afrouper","description":"Java Client for the official Sungrow iSolarCloud API","archived":false,"fork":false,"pushed_at":"2026-06-02T05:04:31.000Z","size":251,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-02T07:09:13.709Z","etag":null,"topics":["api","isolarcloud","java","pv","solar-energy","sungrow","sungrow-battery","sungrow-inverter"],"latest_commit_sha":null,"homepage":"https://developer-api.isolarcloud.com/","language":"Java","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/Afrouper.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":"2024-12-30T20:55:13.000Z","updated_at":"2026-06-02T05:04:28.000Z","dependencies_parsed_at":"2025-02-03T11:28:53.727Z","dependency_job_id":"32063575-84cd-4369-8b7c-dd3a57422eeb","html_url":"https://github.com/Afrouper/sungrow-api-client","commit_stats":null,"previous_names":["afrouper/sungrow-api-client"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Afrouper/sungrow-api-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Afrouper%2Fsungrow-api-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Afrouper%2Fsungrow-api-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Afrouper%2Fsungrow-api-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Afrouper%2Fsungrow-api-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Afrouper","download_url":"https://codeload.github.com/Afrouper/sungrow-api-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Afrouper%2Fsungrow-api-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34592050,"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-21T02:00:05.568Z","response_time":54,"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":["api","isolarcloud","java","pv","solar-energy","sungrow","sungrow-battery","sungrow-inverter"],"created_at":"2025-01-01T15:15:09.773Z","updated_at":"2026-06-21T02:31:55.606Z","avatar_url":"https://github.com/Afrouper.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sungrow API Client\n\n[![Java CI with Maven](https://github.com/Afrouper/sungrow-api-client/actions/workflows/maven.yml/badge.svg)](https://github.com/Afrouper/sungrow-api-client/actions/workflows/maven.yml)\n[![CodeQL](https://github.com/Afrouper/sungrow-api-client/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/Afrouper/sungrow-api-client/actions/workflows/github-code-scanning/codeql)\n[![Dependabot Updates](https://github.com/Afrouper/sungrow-api-client/actions/workflows/dependabot/dependabot-updates/badge.svg)](https://github.com/Afrouper/sungrow-api-client/actions/workflows/dependabot/dependabot-updates)\n![Tests](https://img.shields.io/endpoint?label=Tests\u0026url=https://gist.githubusercontent.com/Afrouper/4b8ce8c93b2a3a92b777d51914cb1e6b/raw/9352822e575e3f75afef51f26f1b5e9125c526dc/sungrow-api-client-junit-tests.json)\n![Tests](https://img.shields.io/endpoint?label=Test%20Coverage\u0026url=https://gist.githubusercontent.com/Afrouper/4b8ce8c93b2a3a92b777d51914cb1e6b/raw/cb93d70bb0200fe0aa820ea4231f625bb71d5c65/sungrow-api-client-jacoco-coverage.json)\n\nAPI Client which uses the official API from the [sungrow developer portal](https://developer-api.isolarcloud.com/).\n\nThe Client is still in development and not finished.\n\n\u003e [!NOTE]\n\u003e Pull requests to complete APIs are welcome\n\n\u003e [!IMPORTANT]\n\u003e I choose a very simple implementation to get this client used in different environments; without coming to \"dependency\n\u003e hell\".\n\n## ToDos\n\n- [x] Add gitHub actions for compile, dependabot and securiy issues\n- [x] Add sample client for basic usage\n- [x] Support encrypted API calls (open: Change password for each call)\n- [x] Add release action\n- [x] Mock JUnit Test\n- [x] Deploy via Maven Central\n- [x] Complete API Calls for reading\n- [x] Add OAuth2 Support\n- [ ] Complete API Calls for writing\n\n## Dependency\n\nThe JAR is available on [Maven Central](https://central.sonatype.com/artifact/io.github.afrouper/sungrow-api-client)\nwith the coordinates `io.github.afrouper:sungrow-api-client`:\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.afrouper\u003c/groupId\u003e\n    \u003cartifactId\u003esungrow-api-client\u003c/artifactId\u003e\n    \u003cversion\u003e[1.1.0,)\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n# Usage\n\nYou have to create an account at Sungrows iSolarCloud and on their developer portal and get the needed\ncredentials (see [Sungrow Developer Portal](https://developer-api.isolarcloud.com))\nTo access the iSolarCloud API you can either use a variant with an \"API key\" or via OAuth2.\n\nFor a simple configuration approach the needed values can be read via class\n[EnvironmentConfiguration](src/main/java/de/afrouper/server/sungrow/api/EnvironmentConfiguration.java).\n\n| SystemProperty / Environment variable | meaning                                                |\n|---------------------------------------|--------------------------------------------------------|\n| APP_KEY                               | Your app key from Sungrow Developer Portal             |\n| SECRET_KEY                            | Your secret key from Sungrow Developer Portal          |\n| ACCOUNT_EMAIL                         | EMailadress used for login to Sungrow Developer Portal |\n| ACCOUNT_PASSWORD                      | Password used for login to Sungrow Developer Portal    |\n| RSA_PUBLIC_KEY                        | RSA Public key to call APIs E2E encrypted              |\n| API_CALL_PASSWORD                     | Password for payload encryption                        |\n| AUTHORIZE_URL                         | OAuth2 Authorization URL                               |\n| REDIRECT_URL                          | OAuth2 Redirect URL                                    |\n\nThe URL for accessing the correct cloud service is determined from\nthe [Region](src/main/java/de/afrouper/server/sungrow/api/SungrowClientBuilder.java) Enum.\n\n## API Key variant\n\nA simple example can be found at [Client.java](src/test/java/de/afrouper/server/sungrow/Client.java).\nIts Output (with a german installation) can be seen [here](docs/Output.MD)\n\n```java\nsungrowClient = new SungrowClientBuilder()\n    .builder(SungrowClientBuilder.Region.EUROPE)\n    .withCredentials(EnvironmentConfiguration.getAppKey(), EnvironmentConfiguration.getSecretKey())\n        .withLogin(EnvironmentConfiguration.getAccountEmail(), EnvironmentConfiguration.getAccountPassword());\n\nPlantList plants = sungrowClient.getPlants();\n// Handle Plants and devices - see de.afrouper.server.sungrow.Client\n```\n\n## OAuth2 variant\n\nThe OAuth2 auth code flow requires a server to handle the redirect send after login; the server must be implemented or\nprovided by you 😇\nA sample can be found at [OAuth2Client](src/test/java/de/afrouper/server/sungrow/OAuth2Client.java)\n\n```java\nsungrowClient = new SungrowClientBuilder()\n    .builder(SungrowClientBuilder.Region.EUROPE)\n    .withCredentials(EnvironmentConfiguration.getAppKey(), EnvironmentConfiguration.getSecretKey())\n    .withOAuth2(EnvironmentConfiguration.getAuthorizeUrl(), EnvironmentConfiguration.getRedirectUrl())\n    .build();\n\nString authCode = \"xxxxx\"; //TODO: Replace with correct auth code\nsungrowClient.authCodeFlow(authCode);\n\nPlantList plants = sungrowClient.getPlants();\n// Handle Plants and devices...\n\nsungrowClient.close(); // Stop thread for refreshing the access token\n```\n\n# Sungrow Developer Portal\n\nUse your sungrow credentials to login at \"https://developer-api.isolarcloud.com\".\nYou need to create an application; go to you applications in the top menu:\n\n![Applications](img/applicationMenu.png)\n\nClick 'Create Application'. This is the sample for a \"normal\" application - used via \"API key\" variant.\n\n![Authorization](img/authorization.png)\n\n# API Usage\n\nPlease read the docs at\nthe [Developer Portal](https://developer-api.isolarcloud.com/#/document/md?id=10942\u0026project_id=2\u0026version=V1). THe are\nsome hints and documentation of the measurement points, etc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafrouper%2Fsungrow-api-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafrouper%2Fsungrow-api-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafrouper%2Fsungrow-api-client/lists"}