{"id":45395541,"url":"https://github.com/veldkornet/ha-hyxi-cloud","last_synced_at":"2026-06-01T00:01:16.760Z","repository":{"id":339812081,"uuid":"1163381300","full_name":"Veldkornet/ha-hyxi-cloud","owner":"Veldkornet","description":"HYXiPower ⚡️🔋☀️ Integration for HomeAssistant using HYXiCloud ☁️","archived":false,"fork":false,"pushed_at":"2026-05-25T08:16:18.000Z","size":1204,"stargazers_count":6,"open_issues_count":2,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T08:28:53.471Z","etag":null,"topics":["battery","battery-monitor","hacs","home-assistant","integration","inverter","smartmeter","solar"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Veldkornet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","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},"funding":{"buy_me_a_coffee":"veldkornet"}},"created_at":"2026-02-21T14:47:47.000Z","updated_at":"2026-05-25T06:56:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Veldkornet/ha-hyxi-cloud","commit_stats":null,"previous_names":["veldkornet/ha-hyxi-cloud"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/Veldkornet/ha-hyxi-cloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Veldkornet%2Fha-hyxi-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Veldkornet%2Fha-hyxi-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Veldkornet%2Fha-hyxi-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Veldkornet%2Fha-hyxi-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Veldkornet","download_url":"https://codeload.github.com/Veldkornet/ha-hyxi-cloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Veldkornet%2Fha-hyxi-cloud/sbom","scorecard":{"id":1244815,"data":{"date":"2026-03-12T21:51:49Z","repo":{"name":"github.com/Veldkornet/ha-hyxi-cloud","commit":"df03cd108a4b62c980dfc395c2e28d47fff19c99"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":6.2,"checks":[{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:20","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:21","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:22","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/process-pr.yml:20","Info: jobLevel 'actions' permission set to 'read': .github/workflows/process-pr.yml:22","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-drafter.yml:23","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-publisher.yml:16","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/scorecards.yml:33","Info: jobLevel 'checks' permission set to 'read': .github/workflows/scorecards.yml:35","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Info: jobLevel 'issues' permission set to 'read': .github/workflows/scorecards.yml:32","Info: jobLevel 'contents' permission set to 'read': .github/workflows/security.yml:21","Info: jobLevel 'contents' permission set to 'read': .github/workflows/security.yml:64","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/sync-manifest.yml:16","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/ha-preview.yml:3","Info: topLevel 'contents' permission set to 'read': .github/workflows/lint.yml:15","Info: found token with 'none' permissions: .github/workflows/process-pr.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/receive-pr.yml:3","Info: found token with 'none' permissions: .github/workflows/release-drafter.yml:17","Info: found token with 'none' permissions: .github/workflows/release-publisher.yml:9","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/security.yml:13","Info: found token with 'none' permissions: .github/workflows/sync-manifest.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/tests.yml:3","Info: topLevel 'contents' permission set to 'read': .github/workflows/validate.yml:22"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Info: Possibly incomplete results: error parsing shell code: \"foo(\" must be followed by ): dev_env/manage.sh:82","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:34","Info:  22 out of  22 GitHub-owned GitHubAction dependencies pinned","Info:  22 out of  22 third-party GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.3.3 not signed: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295909963","Warn: release artifact v1.3.2 not signed: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295746163","Warn: release artifact v1.3.1 not signed: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295059830","Warn: release artifact v1.3.0 not signed: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/294422713","Warn: release artifact v1.2.10 not signed: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/293577714","Warn: release artifact v1.3.3 does not have provenance: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295909963","Warn: release artifact v1.3.2 does not have provenance: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295746163","Warn: release artifact v1.3.1 does not have provenance: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/295059830","Warn: release artifact v1.3.0 does not have provenance: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/294422713","Warn: release artifact v1.2.10 does not have provenance: https://api.github.com/repos/Veldkornet/ha-hyxi-cloud/releases/293577714"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Warn: 'stale review dismissal' is disabled on branch 'main'","Warn: branch 'main' does not require approvers","Info: codeowner review is required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Warn: 'up-to-date branches' is disabled on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Contributors","score":0,"reason":"project has 0 contributing companies or organizations -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"30 out of 30 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2026-03-13T03:55:35.059Z","repository_id":339812081,"created_at":"2026-03-13T03:55:35.059Z","updated_at":"2026-03-13T03:55:35.059Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33753925,"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-05-31T02:00:06.040Z","response_time":95,"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":["battery","battery-monitor","hacs","home-assistant","integration","inverter","smartmeter","solar"],"created_at":"2026-02-21T19:12:50.624Z","updated_at":"2026-06-01T00:01:16.753Z","avatar_url":"https://github.com/Veldkornet.png","language":"Python","funding_links":["https://buymeacoffee.com/veldkornet","https://www.buymeacoffee.com/veldkornet","https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20coffee\u0026emoji=\u0026slug=veldkornet\u0026button_colour=FFDD00\u0026font_colour=000000\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=ffffff"],"categories":[],"sub_categories":[],"readme":"# HYXI\n![HYXI Logo](https://raw.githubusercontent.com/Veldkornet/ha-hyxi-cloud/main/custom_components/hyxi_cloud/brand/logo.png)\n\n### [HYXIPower](https://www.hyxipower.com/) Cloud Integration for Home Assistant\n**Monitor your solar production, battery state-of-charge, and grid flow in real-time.**\n\n[![HACS Custom](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![GitHub Release](https://img.shields.io/github/v/release/Veldkornet/ha-hyxi-cloud?style=flat-square\u0026color=blue)](https://github.com/Veldkornet/ha-hyxi-cloud/releases)\n[![License](https://img.shields.io/github/license/Veldkornet/ha-hyxi-cloud?style=flat-square\u0026color=lightgrey)](LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\u0026style=flat-square)](https://github.com/astral-sh/ruff)\n[![GitHub Issues](https://img.shields.io/github/issues/Veldkornet/ha-hyxi-cloud?style=flat-square\u0026color=blue)](https://github.com/Veldkornet/ha-hyxi-cloud/issues)\n\n[![CodeQL](https://github.com/Veldkornet/ha-hyxi-cloud/actions/workflows/codeql.yml/badge.svg)](https://github.com/Veldkornet/ha-hyxi-cloud/actions/workflows/codeql.yml)\n[![HomeAssistant](https://github.com/Veldkornet/ha-hyxi-cloud/actions/workflows/validate.yml/badge.svg)](https://github.com/Veldkornet/ha-hyxi-cloud/actions/workflows/validate.yml)\n[![Gitleaks](https://img.shields.io/badge/protected%20by-gitleaks-blue?style=flat-square)](https://github.com/gitleaks/gitleaks-action)\n[![Security: Harden-Runner](https://img.shields.io/badge/Security-Harden--Runner-green?style=flat-square)](https://github.com/Veldkornet/ha-hyxi-cloud/actions)\n[![Dependabot](https://img.shields.io/badge/Dependabot-enabled-blue?style=flat-square\u0026logo=dependabot)](https://github.com/Veldkornet/ha-hyxi-cloud/network/updates)\n[![OpenSSF Baseline](https://www.bestpractices.dev/projects/12051/baseline)](https://www.bestpractices.dev/projects/12051)\n\n[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?style=flat-square\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/veldkornet)\n\n---\n\n## ✨ Features\n\n- **⚡ Energy Dashboard Ready:** Native support for Home Assistant's built-in Energy Dashboard. Track daily solar yield, grid dependency, and battery cycles.\n- **🔄 Real-Time Push Subscriptions:** Optional support for receiving instantaneous updates for telemetry data and active alarms directly from HYXI Cloud via Home Assistant's webhook endpoints, bypassing polling delays.\n- **🔧 Device Control:** Send supported HYXI Cloud control commands from Home Assistant, including inverter mode buttons, peak shaving buttons, frequency control, and microinverter power controls.\n- **📊 Advanced Diagnostics:** Track cloud connectivity, API success rates, and data sync latency with dedicated diagnostic sensors.\n- **🕥 Adjustable Polling:** Fine-tune your data refresh rate between 1 and 60 minutes via the integration options.\n- **🛡️ Reliable Quality Assurance:** Built with **99%+ automated test coverage** and robust numeric safety nets to ensure your energy data is accurate and resilient.\n- **🧼 Clean UI:** Precision-tuned data with support for **20+ languages** (English, German, French, Dutch, Afrikaans, Portuguese, Spanish, Italian, and more).\n\n## 📥 Installation\n\n[![Open your Home Assistant instance and open the repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=Veldkornet\u0026repository=ha-hyxi-cloud\u0026category=Integration)\n\n### Method 1: HACS (Recommended)\n1. Open **HACS** in Home Assistant.\n2. Go to **Integrations** \u003e **Custom repositories** (three dots menu).\n3. Paste: `https://github.com/Veldkornet/ha-hyxi-cloud`\n4. Select **Integration** and click **Add**.\n5. Restart Home Assistant.\n\n### Method 2: Manual\n1. Copy the `hyxi_cloud` folder to your `/config/custom_components/` directory.\n2. Restart Home Assistant.\n\n## 🔌 Supported Devices\n\n\u003e [!TIP]\n\u003e **Dynamic Discovery:** This integration uses a proactive discovery model. Even if your device is listed as \"Untested,\" it will automatically populate with at least basic diagnostic entities and known mapped entities. Full sensor mapping is applied once the device type is confirmed.\n\n### 📡 Detailed Entity Support\n\n| Device Type | Status | Key Entities Provided |\n| :--- | :--- | :--- |\n| **Hybrid \u0026 All-in-One** | ✅ Tested | **PV:** Power, Voltage (String 1/2), Current, Daily/Total Yield \u003cbr\u003e **Battery:** SOC, Power (Charge/Discharge), Voltage, Current, SOH, **Capacity (kWh)**, **Max Chg/Disch Power**, Temp \u003cbr\u003e **Grid:** Import/Export Power, Load Power, Voltage, Frequency, **Phase(1/2/3) Volts/Amps/Power**, **Bus Voltage** \u003cbr\u003e **System:** Internal Temp, Running State, Fault Codes |\n| **Data Collector** | ✅ Tested | **Diagnostics:** Signal Intensity (RSSI/%), Heartbeat, Heartbeat Interval, Last Seen, **WiFi Version**, **Comm Mode**, **App Version** |\n| **String Inverter** | ⚠️ Untested | **PV:** Power, String Volts/Amps \u003cbr\u003e **AC:** Output Power, Daily/Total Yield, Bus Voltage, Temperature |\n| **Micro Inverter** | ⚠️ Untested | **Module:** DC Input Power, AC Voltage, Frequency, Daily Energy, Internal Temp |\n| **Smart Meter** | ⚠️ Untested | **Grid:** Active/Reactive Power, Voltage, Export Energy, Import Energy |\n\n\u003e [!IMPORTANT]\n\u003e ### 🤝 Call for Testers\n\u003e Do you own a **String Inverter, Micro Inverter, Standalone Battery or Multiple Batteries**? Your data can help us move these to **✅ Tested**!\n\u003e Specifically multiple batteries behind an inverter would be a great addition to confirm working!\n\u003e\n\u003e 1. Enable **Debug Logging** in Home Assistant for this integration.\n\u003e 2. Open a [GitHub Issue](https://github.com/Veldkornet/ha-hyxi-cloud/wiki/Supported-Devices#-support-for-new-devices) and attach a snippet of the debug log output.\n\u003e 3. We will verify the sensor mappings and update the integration!\n\n### 🔧 Device Control\n\n\u003e [!IMPORTANT]\n\u003e **Device Controls are Opt-In:** To prevent Home Assistant from interfering with external device management or grid curtailment schedules by default, all control entities (such as Operating Mode buttons, power sliders, and switches) are hidden initially.\n\u003e\n\u003e **How to enable them:**\n\u003e 1. Go to **Settings \u003e Devices \u0026 Services** \u003e **HYXI Cloud**.\n\u003e 2. Click the **Configure** button on the integration card.\n\u003e 3. Check the box for **\"Enable Device Control \u0026 Protection\"** and save. The integration will reload and all control entities will appear.\n\u003e\n\u003e **VPP Lockout Safety:** If a Virtual Power Plant (VPP) dispatch is active (i.e. your energy provider is actively controlling your device), controls will be automatically disabled/locked out in Home Assistant to prevent command conflicts.\n\u003e - *Bypassing the Lockout:* You can bypass this lockout by checking the **\"Override VPP Lock (force-enable controls during VPP)\"** option in the Configure card. **Warning:** Enabling this could interfere with grid management commands sent by your energy provider.\n\n\nThis integration supports writing control commands to compatible inverters via the HYXI Cloud API.\n\nControls are scoped per device type — each device only gets the controls it supports:\n\n#### Hybrid Inverter / All-in-One\n\nThe HYXI API defines controls by **phase type** (Single Phase / Three-Phase). The integration auto-detects phase type and exposes matching controls:\n\n| Phase | Controls | controlId |\n| :--- | :--- | :--- |\n| **Three-Phase** | Operating Mode buttons (Mode: Idle / Mode: Charge / Mode: Discharge / Mode: Self-Consumption) | 1062–1065 |\n| **Three-Phase** | Target Charge / Discharge Power | — |\n| **Single Phase** | Peak Shaving buttons (Peak Shaving: Turn Off / Peak Shaving: Force Charge / Peak Shaving: Force Discharge / Peak Shaving: Stop / Peak Shaving: Hold) | 1021 |\n| **Single Phase** | Frequency Control (Enable / Disable) | 1020 |\n\n**Phase Detection** — determined in priority order:\n\n1. **Model name suffix:** `-HT` / `-HTA` / `-ET` → Three-Phase, `-HS` / `-LS` → Single Phase\n2. **Runtime metrics:** Phase power keys (`ph2Loadp` / `ph3Loadp` / `ph2p` / `ph3p`) or non-zero phase 2/3 voltage (`ph2v` / `ph3v`) → Three-Phase\n\n\u003e [!IMPORTANT]\n\u003e If the phase type cannot be determined from either the model name or runtime metrics, **no control entities are created**. This is a safety measure to prevent sending unsupported commands to your inverter. If you believe your device should have controls, please open a [GitHub Issue](https://github.com/Veldkornet/ha-hyxi-cloud/issues) with your device model and we will add support.\n\n#### Energy Manager Standalone (Beta)\n\nThe Energy Manager Standalone is an automated battery control engine that runs a 15-second decision loop inside Home Assistant. It reads your P1 smart meter, solar production, battery SOC, and optional solar forecast to automatically manage your inverter's operating mode (charge, discharge, self-consume, idle).\n\n\u003e [!NOTE]\n\u003e This is the **Standalone** energy manager — it makes all decisions locally based on real-time sensor data and configurable rules. A future **Day Ahead** energy manager (optimizing against dynamic energy prices) is planned for a separate release.\n\n**Important:** The Energy Manager builds on top of the existing Battery Protection — it does **not** replace it. SOC minimum/maximum limits are read from the existing protection number entities and are always respected.\n\n##### Prerequisites\n\n- **Enable Device Control \u0026 Protection** must be turned on first (Options → Configure)\n- A **P1 smart meter** entity (power sensor) configured in Home Assistant\n\n##### Enabling\n\n1. Go to **Settings \u003e Devices \u0026 Services** \u003e **HYXI Cloud** \u003e **Configure**.\n2. Enable **Device Control \u0026 Protection** and save.\n3. Re-open **Configure** — the **Enable Energy Manager Standalone (Beta)** toggle is now visible.\n4. Enable it and configure:\n   - **P1 Smart Meter** — your grid power sensor (required, e.g. `sensor.p1_meter_power`)\n   - **Solar Forecast Remaining Today** — remaining solar energy for today in kWh (optional)\n   - **Solar Forecast Current Power** — current predicted solar power in W (optional)\n   - **Inverter to Control** — which inverter the engine manages\n   - **Override Battery Capacity** — check this to manually set battery capacity (see below)\n   - **Battery Capacity (Wh)** — manual override value (only used when override is checked)\n\nThe Energy Manager is **disabled by default** even after enabling it in options. You must also turn on the **Energy Manager** switch entity. Each sub-feature (Night Mode, High Load Assist) must be individually enabled via its own switch entity.\n\n##### Solar Forecast Integration\n\nThe engine can use solar forecast data to make smarter decisions about battery preservation and charge timing. Two optional forecast entities can be configured:\n\n- **Solar Forecast Remaining Today (kWh):** Used for night preservation decisions — the engine checks whether remaining solar can recharge the battery to the night target before sunset. Compatible with:\n  - [Forecast.Solar](https://www.home-assistant.io/integrations/forecast_solar/) — use the `energy_production_today_remaining` sensor\n  - [Solcast](https://github.com/BJReplay/ha-solcast-solar) — use the `forecast_remaining_today` sensor\n  - Any sensor providing remaining solar energy for today in kWh\n\n- **Solar Forecast Current Power (W):** Currently reserved for future use. Compatible with:\n  - [Forecast.Solar](https://www.home-assistant.io/integrations/forecast_solar/) — use the `power_production_now` sensor\n  - [Solcast](https://github.com/BJReplay/ha-solcast-solar) — use the `forecast_this_hour` sensor\n\nIf no forecast entities are configured, the engine estimates solar availability from current production and time to sunset.\n\n##### Battery Capacity\n\nThe engine needs to know your battery's total capacity (in Wh) for SOC calculations, night reserve estimation, and high-load cost analysis.\n\n**How it's determined (in priority order):**\n\n1. **Manual override** — If you check *Override Battery Capacity* in the energy manager options and set a value, that value is always used.\n2. **API auto-detection** — The `batCap` metric from your inverter (reported in kWh, converted to Wh). Most hybrid inverters report this automatically.\n3. **Fallback** — 2000 Wh if neither of the above is available.\n\n\u003e [!TIP]\n\u003e If your inverter reports `batCap` correctly (visible as the \"Battery Capacity\" sensor on your inverter device), you don't need to configure anything. The override is for situations where the API value is missing, incorrect, or you have modified your battery setup.\n\n##### How It Works — Decision Priorities\n\nEvery 15 seconds the engine evaluates these priorities in order. The first matching priority wins:\n\n| Priority | Condition | Action | Details |\n| :--- | :--- | :--- | :--- |\n| **1. Emergency Low SOC** | SOC \u003c SOC Minimum | Charge from solar or grid | If solar is producing, charges from solar. If no solar and *Grid Charge Allowed* is on, charges from grid at up to 2000W. Otherwise goes idle to prevent further drain. |\n| **2. Over-Max SOC** | SOC \u003e SOC Maximum | Forced discharge | Discharges at the higher of current grid import or 1000W, capped at max discharge power. Prevents overcharging. |\n| **2b. Export Limiting** | Grid export \u003e max limit | Charge or curtail PV | Single-phase only. Uses peak shaving control. See details below. |\n| **3. High Load Assist** | Home load \u003e threshold | Battery assist or grid-only | Only active when the *High Load Battery Assist* switch is ON. See details below. |\n| **4. Night Mode** | Nighttime (sun below horizon) | Self-consume or idle | Only active when the *Night Mode* switch is ON. See details below. |\n| **5. Solar Optimization** | Solar producing + SOC \u003c max | Smart charge from solar | Waits for sustained grid export before entering charge mode. Continuously tunes charge power to minimize grid import/export. |\n| **Default** | None of the above | Self-consume | Safe fallback. If currently charging or discharging, switches to self-consume. |\n\n##### Night Mode (Priority 4)\n\n**Requires:** *Night Mode* switch entity → ON (default: OFF)\n\nNight Mode manages battery usage during nighttime and preserves battery for overnight consumption:\n\n- **At night (sun below horizon, no solar):**\n  - If SOC is above SOC Minimum → **self-consume** (battery powers the house)\n  - If SOC is at or below SOC Minimum → **idle** (stop discharging, protect the reserve)\n\n- **During daytime — night preservation:**\n  - If SOC has dropped to or below the calculated *night SOC target* and the house is importing from grid and solar forecast cannot cover the gap → **idle** (preserve remaining battery for tonight)\n\nThe **night SOC target** is automatically calculated based on:\n- `Average Night Consumption` (W) — configurable, also auto-updated hourly from real P1 data between 21:00–06:00\n- `Night Buffer %` — extra safety margin (default 5%)\n- Battery capacity (from options or API)\n- Hours until sunrise\n\nFormula: `night_target = soc_min + ((avg_consumption × hours_remaining × (1 + buffer%)) / capacity) × 100`\n\n**Example:** With 400W average consumption, 14.8 kWh battery, 5% buffer, 20% SOC minimum, 12 hours until sunrise:\nNight target ≈ 20% + 34% = **54%**. The engine will preserve battery above 54% during daytime if it calculates that solar won't be enough to recharge before sunset.\n\n##### High Load Assist (Priority 3)\n\n**Requires:** *High Load Battery Assist* switch entity → ON (default: OFF)\n\nHigh Load Assist detects when your home consumption exceeds a configurable threshold and decides whether the battery should help:\n\n- **Home load \u003e High Load Threshold** and assist is enabled:\n  - Calculates the SOC cost of running battery assist for 30 minutes at 50% max discharge power\n  - If the battery can afford it (remaining SOC after assist would still exceed the night SOC target) → **self-consume** (battery helps power the high load)\n  - If the battery cannot afford it (would drain below night target) → **idle** (let the grid handle it, preserve battery for night)\n\n- **Home load below threshold:** No action, falls through to next priority.\n\n**Use case:** Running an oven, EV charger, or heat pump. The engine prevents the battery from draining itself to cover a temporary spike that would leave you with insufficient reserve for the night.\n\n##### Export Limiting (Priority 2b)\n\n**Requires:** *Export Limiting* switch entity → ON (default: OFF)\n\n**Single-phase devices only** — uses peak shaving control (controlId 1021) which is not available on three-phase inverters.\n\nExport Limiting caps how much power is fed back to the grid:\n\n- **Grid export \u003e Max Grid Export** and battery has room (SOC \u003c SOC Maximum):\n  - Charges battery to absorb excess (minimum 300W, capped at max charge power)\n  - Continuously adjusts charge power as export fluctuates\n\n- **Grid export \u003e Max Grid Export** and battery is full:\n  - Sends peak shaving `stop` to curtail PV production entirely\n  - 30-second cooldown between stop/hold toggles prevents oscillation\n\n- **Grid export drops below limit:**\n  - Sends peak shaving `hold` to resume PV production\n  - Returns to self-consume\n\n**Use case:** Feed-in tariff limits, grid connection limits, or reducing grid export to maximize self-consumption.\n\n##### Solar Charge Logic (Priority 5)\n\nWhen solar is producing and the battery isn't full, the engine optimizes charging:\n\n1. **Entry gate:** Solar must exceed `Min Solar for Charge` (default: 1000W).\n2. **Export confirmation:** Grid export must exceed `Charge Entry Threshold` (default: 500W) for several consecutive readings before entering charge mode. This prevents charge/discharge oscillation on cloudy days.\n3. **Power tuning:** Once charging, the engine continuously adjusts charge power to keep P1 close to zero (not importing, not exporting).\n4. **Bottomout exit:** If charge power drops to minimum (100W) for 3 consecutive ticks due to insufficient solar, exits back to self-consume.\n5. **Sunset urgency:** Within 4 hours of sunset, if SOC is below the night target and solar forecast won't cover it, entry thresholds are relaxed to capture remaining solar.\n\n##### Grid Charge Allowed\n\nThe *Grid Charge Allowed* switch (on the inverter device, not the Energy Manager device) controls whether the engine may charge the battery from the grid during emergencies. This is only used when SOC drops below minimum and there is no solar available. Default: OFF.\n\n##### Entity Reference\n\nAll Energy Manager entities appear on a virtual **Energy Manager** device linked to your inverter.\n\n**Switches (all default OFF):**\n\n| Entity | Purpose |\n| :--- | :--- |\n| Energy Manager | Master on/off for the decision loop |\n| Night Mode | Enable night self-consume and battery preservation |\n| High Load Battery Assist | Enable battery assist during high home loads |\n| Export Limiting | Cap grid export and charge battery with excess (single-phase only) |\n| Grid Charge Allowed | Allow grid charging in low-SOC emergencies (on inverter device) |\n\n**Number parameters:**\n\n| Entity | Unit | Default | Range | Purpose |\n| :--- | :--- | :--- | :--- | :--- |\n| High Load Threshold | W | 6500 | 1000–20000 | Home load above this triggers high-load logic |\n| Max Charge Power | W | 5000 | 500–15000 | Maximum charge power sent to inverter |\n| Max Discharge Power | W | 5000 | 500–15000 | Maximum discharge power |\n| Min Solar for Charge | W | 1000 | 200–3000 | Solar must exceed this to consider charging |\n| Mode Switch Cooldown | s | 60 | 10–300 | Minimum seconds between mode changes |\n| Power Change Threshold | W | 100 | 10–500 | Minimum power change before resending command |\n| Power Adjust Cooldown | s | 30 | 5–120 | Minimum seconds between power adjustments |\n| Night Buffer | % | 5 | 0–20 | Extra safety margin for night SOC calculation |\n| Avg Night Consumption | W | 400 | 100–2000 | Baseline night power draw (auto-updated hourly) |\n| Charge Margin | W | 150 | 0–500 | Buffer between solar charge and grid balance point |\n| Charge Entry Threshold | W | 500 | 100–2000 | Grid export required before entering charge mode |\n| Charge Re-entry Delay | s | 300 | 30–600 | Cooldown before re-entering charge after exit |\n| Bottomout Cooldown | s | 300 | 60–900 | Extended cooldown after charge bottomout exit |\n| P1 Smoothing Period | s | 60 | 1–300 | Rolling average window for P1 meter readings |\n| Max Grid Export | W | 0 | 0–10000 | Maximum allowed grid export before charging kicks in (single-phase only) |\n\n**Options flow parameters** (set once in Configure, not entities):\n\n| Setting | Default | Purpose |\n| :--- | :--- | :--- |\n| Override Battery Capacity | OFF | Enable manual battery capacity override |\n| Battery Capacity (Wh) | 2000 | Manual capacity value (only used when override is checked) |\n| Dry-Run Mode | OFF | Engine logs decisions and fires HA events but skips all API calls |\n\n**Sensors (read-only):**\n\n| Entity | Purpose |\n| :--- | :--- |\n| EM Decision | The active decision label (e.g., `solar_charge`, `night_self_consume`) |\n| EM Last Action | Last mode command sent (e.g., `charge @ 2500W`, or `[dry-run] charge @ 2500W`) |\n| EM Status | Engine state: `running`, `stopped`, `disabled`, `cooldown`, `dry_run`, or `error` |\n| Battery Energy Available | Usable energy above SOC minimum (Wh) |\n| Hours Until Sunrise | Calculated from `sun.sun` entity |\n| Hours Until Sunset | Calculated from `sun.sun` entity |\n| P1 Average Power | Rolling average of P1 meter readings, configurable window (W) |\n\n**Binary sensors:**\n\n| Entity | Purpose |\n| :--- | :--- |\n| Night Mode Active | Whether it's currently nighttime (sun below horizon, no solar) |\n| High Load Detected | Whether home load exceeds the high load threshold |\n\n**HA Events:**\n\nThe engine fires a `hyxi_em_mode_changed` event on every mode change, usable in automations:\n\n| Field | Description |\n| :--- | :--- |\n| `sn` | Inverter serial number |\n| `mode` | New mode (`charge`, `discharge`, `self_consume`, `idle`) |\n| `power` | Target power in watts (null for idle/self_consume) |\n| `previous_mode` | Mode before the change |\n| `decision` | Decision label that triggered the change |\n| `dry_run` | `true` if in dry-run mode (field absent when not dry-run) |\n\n#### Microinverter\n\n| Controls | controlId |\n| :--- | :--- |\n| Power On/Off | 3011 |\n| Power Limit (0–100%) | 3012 |\n| Restart | 3013 |\n\n#### Unsupported Device Types\n\n\u003e [!WARNING]\n\u003e **Micro ESS (EMS):** Control entities are **not** enabled for EMS devices. The HYXI API documentation does not list any control endpoints for EMS — the EMS API section only provides read-only data queries.\n\n#### Real-Time Webhook Push Subscriptions\n\nThe integration supports subscribing to real-time telemetry and alarm push notifications from the HYXI Cloud. Instead of waiting for the polling interval, HYXI Cloud will push data and alarm changes directly to Home Assistant as soon as they are received.\n\n##### Configuration\n1. Go to **Settings \u003e Devices \u0026 Services** \u003e **HYXI Cloud** \u003e **Configure**.\n2. Toggle **Enable Real-Time Telemetry \u0026 Alarm Push**.\n3. Configure the following optional parameters if needed:\n   - **Real-Time Push Rate (s):** Telemetry push rate in seconds (default: 10).\n   - **Real-Time Push Custom Callback URL:** By default, the integration uses the public external URL registered with Home Assistant to configure the webhook. If your Home Assistant's default public URL is not directly accessible by HYXI Cloud (e.g. if you are behind CGNAT, using custom Nginx proxies, or using an ngrok / Cloudflare tunnel), you can provide a custom callback URL here. The webhook path must be appended manually.\n4. Saving the options will register a new webhook callback endpoint on your Home Assistant instance and automatically subscribe to HYXI Cloud.\n\n##### Diagnostics \u0026 Monitoring\nThe integration provides a **Subscription Status** sensor on your inverter's device page:\n- **State:** Reports `active`, `inactive`, or `error` depending on subscription health.\n- **Attributes:** Displays URLs, subscriber codes, rates, errors, and the timestamp of the last received push frame.\n- **Renewal Button:** A stateless button entity **Renew Subscription** is provided to manually trigger unregistration and re-registration of the webhook if needed.\n\n### 🛡️ Reliability \u0026 Diagnostics\n\nThis integration includes a specialized diagnostic system to help you distinguish between local hardware issues and cloud service outages.\n\n| Sensor | Purpose | Behavior |\n| :--- | :--- | :--- |\n| **Cloud Status** | Binary connectivity sensor. | Indicates Cloud connectivity. Includes **Connection Quality** and **Data Freshness** as attributes. |\n| **Device Alarm** | Hardware fault tracking. | Binary sensor that turns `On` if the hardware reports active alarms. |\n| **Integration Last Updated** | Local Sync timestamp. | The exact time Home Assistant last successfully processed a cloud update. |\n\n## ⚙️ Setup \u0026 Configuration\n\n1. Ensure you have a developer account and have created an **application** to obtain an **Access Key** and **Secret Key** from the [HYXIPOWER Developer Platform](https://open.hyxicloud.com/#/quickStart).\n\n   \u003e **Important:**\n   \u003e Use the same email address that your devices are registered to in the HYXI app.\n2. Go to **Settings \u003e Devices \u0026 Services** \u003e **Add Integration** \u003e **HYXI Cloud**.\nOr alternatively, add the integration with the following:\n\n[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=hyxi_cloud)\n\n## Configuration\n\n1. Enter your **Access Key** and **Secret Key** from the HYXI Open API portal.\n\n### Optional Features (Options Flow)\nClick the **Configure** button on the HYXI integration card to access:\n* **Polling Interval:** Adjust frequency between 1–60 minutes (Default: 5).\n* **Enable Discovery via Alarms:** Proactively discover child devices reporting active alarms (Advanced).\n* **Enable Device Control \u0026 Protection:** Opt-in to enable inverter mode buttons, charge/discharge power settings, automatic battery protection thresholds, and micro-inverter power limits or switches. By default, this is disabled to prevent conflicts with external control systems (e.g. energy providers or grid constraints).\n* **Enable Real-Time Telemetry \u0026 Alarm Push:** Registers a webhook endpoint in Home Assistant and subscribes to HYXI Cloud push notifications to receive real-time updates and active alarms.\n* **Enable Energy Manager Standalone (Beta):** Automated battery management engine. Only visible after enabling Device Control \u0026 Protection. See [Energy Manager Standalone](#energy-manager-standalone-beta) above.\n\n## 🛡️ Quality Assurance\n\nThis integration prioritizes data integrity and system stability above all else:\n- **99% Test Coverage**: Every line of core logic is validated against dozens of simulated hardware scenarios.\n- **Glitch Filtering**: Built-in protection against impossible energy \"spikes\" and \"dips\" often caused by cloud reporting delays.\n- **Continuous Integration**: Every change is automatically scanned for security vulnerabilities (CodeQL) and code quality (Ruff).\n\n## 🐛 Troubleshooting\n\nIf you are opening a bug report, please include **Debug Logs**:\n**How to enable and download debug logs:**\n1. Go to **Settings \u003e Devices \u0026 Services** \u003e **HYXI Cloud**.\n2. Click the three dots (⋮) and select **Enable debug logging**.\n3. Wait 5-10 minutes, then click **Disable debug logging** to download the file.\n4. Attach the downloaded log file to your GitHub issue — **no manual editing needed**, serial numbers, plant IDs, and your home address are automatically masked in the logs.\n\n## Disclaimer\nThis is a custom integration and is **not** an official product of HYXI Power.\n\n## Support\nIf you find this integration helpful and want to support its development:\n\n[![Buy Me a Coffee](https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20coffee\u0026emoji=\u0026slug=veldkornet\u0026button_colour=FFDD00\u0026font_colour=000000\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=ffffff)](https://www.buymeacoffee.com/veldkornet)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveldkornet%2Fha-hyxi-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveldkornet%2Fha-hyxi-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveldkornet%2Fha-hyxi-cloud/lists"}