All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Add System health Notifications switch and messaging (with error message, inverter info etc)
- Individual DC string performance over the day comparison (fault finding) for all panels.
- Refactor sensor.py into smaller modules (field, system totals, estimated battery, shared helpers)
- Improve the rate limited messages for clarity.
- No changes yet.
- Improved authentication error handling for the actual responses returned by both the Global and India SolaX API endpoints.
- Added support for the undocumented SolaX token-invalid response
code=103, observed on both the Global and India API endpoints. - Code-less
no auth!responses are now handled as serial/access authorization failures, matching1003behavior while preserving the exact response in diagnostics. - Invalid-serial notifications no longer display a fabricated error code when the API omits it.
- Added selectable Global and India SolaX Cloud API regions.
- Estimated battery charge/discharge energy sensors are now enabled by default for systems that return battery power data.
- Added an API Region selector with
GlobalandIndiachoices during initial setup and in the integration's Configure flow. - Added the dedicated India realtime API endpoint:
https://in.solaxcloud.com/api/v2/dataAccess/realtimeInfo/get. - Added regression tests covering India onboarding, region changes, endpoint routing, safe endpoint fallback, diagnostics, battery entity defaults, and config-entry migration behavior.
- Existing config entries without a stored API region continue to use the Global endpoint.
- Changing API region now validates the selected endpoint and performs a full inverter refresh without changing entity IDs.
- Diagnostics now report the configured API region.
- Per-inverter and System Totals estimated battery energy sensors are enabled by default when non-null
batPowerdata is available. - Existing estimated battery entities previously disabled by the integration are enabled during the version 2 config-entry migration.
- Entities explicitly disabled by the user remain disabled, and Home Assistant's
disable newly added entitiespreference is respected.
- Home Assistant statistics compatibility improvements for daily energy sensors.
- Added regression tests for daily reset and total non-reset behavior across day rollover.
- Extended sensor tests for:
- daily estimated battery energy rollover at new day
- total estimated battery energy continuity across day rollover
- yieldtoday/yieldtotal state-class and reset metadata correctness
yieldtoday(per-inverter) andyieldtoday_total(system total) now use Home Assistant daily-energy semantics:state_class: total- daily
last_resetat local midnight
yieldtotalandyieldtotal_totalremainstate_class: total_increasing.
- Resolved Home Assistant warning for daily estimated battery sensors: Thank you @alan0000007 for testing!
"state class 'measurement' but 'last_reset' is missing"
- Daily estimated battery kWh sensors now use statistics-safe metadata in Home Assistant:
state_class: total- daily
last_resetat local midnight
- Entity-prefix slug guarding now treats Home Assistant fallback slugs like
unknown/unnamedas invalid and enforces the safe fallbacksolax_cloud_apiin config flow, sensor setup, and switch setup.
- Estimated battery energy sensors for battery charge and discharge, calculated from the Power (W) sensor
batPower. - Estimated battery sensors are created only when at least one inverter has battery data (
batPower). - Estimated battery sensors are disabled by default to keep the UI Solax API data only, as these sensors are calculated from API data, and is not actual API data.
- Lithuanian (
lt) translation file (thank you @basas!).
- Added estimated battery energy sensors per inverter:
Estimated Battery Charge Energy TodayEstimated Battery Charge Energy TotalEstimated Battery Discharge Energy TodayEstimated Battery Discharge Energy Total
- Added estimated system battery energy sensors (system totals):
Estimated System Battery Charge Energy TodayEstimated System Battery Charge Energy TotalEstimated System Battery Discharge Energy TodayEstimated System Battery Discharge Energy Total
- Config and options flow notice checkboxes now use a stable internal key (
acknowledge) while keeping the translated UI text unchanged. - Config-flow API checks now use Home Assistant's shared HTTP session helper (
async_get_clientsession) instead of ad-hoc client sessions. - Removed explicit
aiohttprequirement frommanifest.json(HA-core managed dependency path).
- Removed raw YAML import payload logging to avoid accidental token exposure in debug logs.
- Rate-limit cooldown logic now uses a fresh monotonic timestamp per inverter iteration (no stale-time drift in cooldown calculations).
- Hardened entity-prefix slug generation by switching to Home Assistant
slugify(...)with a safe fallback ofsolax_cloud_apiwhen slug output is empty. - Applied the same safe slug fallback path in config flow, sensor setup, and switch setup to prevent invalid entity-prefix values from special characters.
- Brand and diagnostics release focused on easier troubleshooting and privacy-safe debug data.
- Added local brand assets under
custom_components/solax_cloud_api/brandfor Home Assistant's new Brands Proxy API path. - Added Home Assistant diagnostics export with the latest full pre-filter Solax API response per inverter (latest only), including battery field summaries for debugging missing battery entities.
- Brand assets are now resolved by integration domain (
solax_cloud_api) and served by Home Assistant's local brands API path (/api/brands/integration/{domain}/{image}), with no extra integration code required. - Diagnostics are available via Home Assistant's built-in integration action:
Download diagnosticswith partial serial and token masking in exported payloads while preserving support-relevant context.
- Diagnostics intentionally redact sensitive token fields and mask serial data.
- Home Assistant diagnostics packages may still include platform/environment metadata outside this integration's payload.
- Translations and i18n consistency.
- Updated Readme.md instructions regarding what serial number to use during setup and getting the API key.
- Added translation files for de, nl, cs, pl, pt, it, fr, da, nb, and fi.
- Standardized the integration translation title globally to
Solax Cloud API SolaXCloudacross all locale files.
- Removed duplicated folder from root.
- Clean version after passing HACS and Hassfest validations.
- Patch release focused on translation quality and release validation hardening.
- Keeps
v0.1.8.5feature history intact and adds a clear delta for this bump.
- Spanish (
es) UI translations. - Translation key guard script (
scripts/check_translation_keys.py) for CI.
- CI now validates translation keys and language parity before Hassfest.
- Integration version bumped to
v0.1.8.6.
- Prevented translation-key regressions that can fail Hassfest validation.
- This release focuses on production hardening for setup/reload behavior, API rate-limit handling, and invalid-serial (
1003) handling. - System diagnostics and usability were expanded with clear status sensors, polling diagnostics, and a rate-limit notifications control in System Totals.
- Per-inverter
API Access Statusdiagnostic sensor. - Persistent invalid-serial/access notifications with clear
1003details. - Options-flow acknowledgement popup for invalid serial/access during reload.
- API rate-limit notifications toggle (
API Rate Limit Notifications) in System Totals. - Initial-setup preflight classification cache to reuse first API results.
- Rate-limit and invalid-serial GUI notices in setup/options flows.
- System polling diagnostics:
Last Poll Attempt(diagnostic, disabled by default)Next Scheduled Poll(diagnostic, disabled by default)
- System-level rate-limit diagnostic details in attributes (affected inverters, counts, details).
- Integration name shortened to
Solax Cloud API for Single and Multi Inverter Systems. - Setup/options flow validation hardened for token and serial handling.
- Reload behavior improved to keep cached good values and prioritize newly added inverters when token is unchanged.
- System total friendly names no longer include the system-name prefix.
System HealthandAPI Rate Limit Statusmoved to diagnostics in System Totals.Last Poll AttemptandNext Scheduled Pollkept as diagnostics and disabled by default.- README rewritten and expanded (features, diagnostics, troubleshooting, supported inverter names).
- System-total device model text kept static (
Single Inverter System/Multi-Inverter System). - Entity creation logic updated so only fields with non-null API data become entities.
- Translation usage cleaned up for switch/sensor friendly names and diagnostics labels.
- Entity prefix stability preserved when changing system name.
- Correct handling of Solax API rate-limit responses (including code
104and related API messages). - Correct handling and precedence of
1003 Data Unauthorized(invalid serial/no access). - Duplicate serial checks in flow without unnecessary API calls.
- Dynamic sensor creation now avoids creating sensors for null-only fields.
- Removed serials now clean up stale entities/devices from registry.
- Friendly-name translation issue for the rate-limit notification switch.
- Token-invalid setup edge case where flow could continue with bad auth.
- Reload path where unchanged inverters could flip to
unknownduring rate-limit windows. - Rate-limit state now correctly reflected in status diagnostics while keeping previous good data.
- Invalid serials now stay clearly unavailable and surfaced in UI/notifications after reload.