Describe the bug
Since today (30 June 2026), the integration fails to set up / refresh data. All sensors for both the inverter device and the plant device show "Unavailable". The config entry repeatedly retries and fails with ConfigEntryNotReady: 'data'.
The cached auth token is still valid (not expired), so this does not look like an authentication/credentials problem. It looks like the SAJ Elekeeper portal changed the JSON response structure for the plant list endpoint, removing (or renaming) the top-level "data" key that web_get_plant() expects.
I noticed the SAJ mobile app and the SAJ portal homepage were updated today, right before the errors started.
Logs
2026-06-30 16:21:42.882 DEBUG (SyncWorker_7) [custom_components.saj_esolar_air] Fetching data with username USER, for plants ['PLANT'] with pv attributes set to True
2026-06-30 16:21:42.883 DEBUG (SyncWorker_7) [custom_components.saj_esolar_air.esolar] Using disk cached token, expires at 2026-07-01 07:10:01
2026-06-30 16:21:42.883 DEBUG (SyncWorker_7) [custom_components.saj_esolar_air.esolar] We don't have all plant_info, requesting
2026-06-30 16:21:43.020 ERROR (MainThread) [custom_components.saj_esolar_air] Unexpected error fetching saj_esolar_air data
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 434, in _async_refresh
self.data = await self._async_update_data()
File "/config/custom_components/saj_esolar_air/__init__.py", line 103, in _async_update_data
data = await self.hass.async_add_executor_job(
get_data, self.hass, self._entry.data, self._entry.options
)
File "/config/custom_components/saj_esolar_air/__init__.py", line 147, in get_data
plant_info = get_esolar_data(region, username, password, plants, use_pv_grid_attributes)
File "/config/custom_components/saj_esolar_air/esolar.py", line 70, in get_esolar_data
plant_info = web_get_plant(region, session, plant_list)
File "/config/custom_components/saj_esolar_air/esolar.py", line 320, in web_get_plant
for plant in plant_list["data"]['list']:
KeyError: 'data'
The same KeyError: 'data' repeats on every retry (5s, 10s, 20s backoff), and the config entry never finishes its first refresh.
Environment
- Integration version: 2.2.14
- Home Assistant: latest core (running in HAOS supervisor)
- Inverter model: H1-3K-S2 (firmware v2.130, hardware v1.377)
- Region/login: standard Elekeeper login, token is being cached and is not expired
- Two devices configured: Inverter (16 entities) + Solar Plant (29 entities) — both affected
To reproduce
- Have the integration already configured and working.
- On/around 30 June 2026, after the SAJ Elekeeper app/portal received an update, restart Home Assistant or let the coordinator refresh.
- Observe the
KeyError: 'data' in web_get_plant() (esolar.py line 320) on every fetch attempt.
Expected behavior
The integration should keep fetching plant/inverter data after the SAJ portal update, or at minimum fail gracefully with a clear "unexpected API response format" message instead of an unhandled KeyError, so legitimate format changes are easier to diagnose.
Additional context
This may be related to the encrypted/signed request mechanism this fork uses to talk to the new Elekeeper portal (as mentioned in the README, the portal's internal keys "can change at any time"). It's possible SAJ changed the response schema of the plant-list endpoint server-side. Happy to provide a full debug log (with credentials redacted) or test a patch if useful.
Describe the bug
Since today (30 June 2026), the integration fails to set up / refresh data. All sensors for both the inverter device and the plant device show "Unavailable". The config entry repeatedly retries and fails with
ConfigEntryNotReady: 'data'.The cached auth token is still valid (not expired), so this does not look like an authentication/credentials problem. It looks like the SAJ Elekeeper portal changed the JSON response structure for the plant list endpoint, removing (or renaming) the top-level
"data"key thatweb_get_plant()expects.I noticed the SAJ mobile app and the SAJ portal homepage were updated today, right before the errors started.
Logs
The same
KeyError: 'data'repeats on every retry (5s, 10s, 20s backoff), and the config entry never finishes its first refresh.Environment
To reproduce
KeyError: 'data'inweb_get_plant()(esolar.py line 320) on every fetch attempt.Expected behavior
The integration should keep fetching plant/inverter data after the SAJ portal update, or at minimum fail gracefully with a clear "unexpected API response format" message instead of an unhandled KeyError, so legitimate format changes are easier to diagnose.
Additional context
This may be related to the encrypted/signed request mechanism this fork uses to talk to the new Elekeeper portal (as mentioned in the README, the portal's internal keys "can change at any time"). It's possible SAJ changed the response schema of the plant-list endpoint server-side. Happy to provide a full debug log (with credentials redacted) or test a patch if useful.