Added
- Overview card box customisation: show/hide, reorder, relabel, and re-icon boxes (solar, house, grid, battery) via the card editor or YAML
boxesconfig. Responsive grid adapts layout for 1, 3, or 4 visible boxes. - Overview card click-to-history: tapping any energy flow node opens the HA entity history dialog. Sub-details (cell temperature, PV strings, grid voltage/frequency, residual energy) are individually clickable for granular history access.
- Cold-temperature BMS charge curtailment: when BMS battery temperature is below 16°C, the maximum charge power is capped at 80A × live battery voltage (~4kW at 50V). The BMS physically limits charge current — the system now anticipates this to avoid over-requesting. Exposed via
charge_effective_max_power_wsensor attribute. - BMS temperature on overview card: shows "Cell 15.5°C · Inv 25.3°C" in the battery node, clearly distinguishing BMS cell temperature from the inverter sensor temperature.
- Two-tier circuit breaker (C-024): 3 consecutive adapter errors open the circuit breaker and hold position; 5 more ticks without recovery abort the session to self-use.
- Automatic session replay after outage: when the circuit breaker aborts a session and the time window is still open, the integration probes the API every 5 minutes and restarts on recovery (up to 6 attempts).
- Proactive schedule conflict detection: periodic check warns about unmanaged schedule modes (e.g. Backup) before they block a session start.
- Forecast chart card (
foxess-forecast-card): SVG-based card showing projected SoC trajectory with actual history overlay, target/min SoC markers. - Session history timeline card (
foxess-history-card): 24h horizontal timeline with coloured session bars and SoC trace overlay. - Action buttons on control card: cancel (with double-tap confirmation), charge, and discharge buttons with inline parameter forms.
- Visual card editors: both control and overview cards support HA's visual card editor.
- Init debug log sensor (
sensor.foxess_init_debug_log): non-wrapping buffer preserving the first 75 log messages after startup, complementing the rolling debug log. - INFO-level rolling log sensor (
sensor.foxess_info_log): captures only INFO+ messages in a rolling buffer of 75 entries, retaining operational context much longer than the DEBUG log. - BMS battery temperature sensor (
sensor.foxess_bms_battery_temperature): exposes the min cell temperature from the BMS via the FoxESS web portal API. - Troubleshooting guide, Contributing guide, and FAQ documentation.
- Performance regression gate: CI job testing algorithm calculation time and AST scan for sync I/O in async functions.
Fixed
- BMS temperature reliability: resolved multiple issues preventing BMS temperature from working — correct endpoint discovery (
GET /dew/v0/device/detail), compound battery ID persistence, web session token handling, fetch timing during WebSocket operation, and value preservation on transient server failures. - Discharge power sensor oscillates:
get_actual_discharge_power_wnow correctly returns 0 when the battery isn't discharging (solar > load) instead of falling back to the target power. - Discharge target_power_w missing until first tick: attribute now set at session creation and deferred start.
- Control card form inputs reset during typing: state updates triggered full card re-renders, clearing user input. Now uses real-time
inputevent listeners with post-render DOM restore. - Discharge circuit breaker unreliable: pacing loop now calls the adapter every tick, matching the charge path, so the circuit breaker can detect steady-state failures.
- Log sensor entities unnamed: added explicit
_attr_nameso entities register with correct names. - Blocking I/O on event loop: WASM bytes pre-read at module import time; Module constructed from memory.
- Web session token expiry:
async_getandasync_postdetect auth errors (errno 41808/41809) and retry once after re-authenticating.
Improved
- HA Integration Quality Scale: Bronze 18/18, Silver 10/10, Gold 19/21, Platinum 3/3. Includes
ConfigEntryNotReady, repair issues, diagnostics, entity categories, display precision, reauthentication,icons.json,entry.runtime_data, andpy.typed. - Typed runtime data:
entry.runtime_datastoresFoxESSEntryDatainstead of untyped dict.FoxESSControlDatabridge layer preserves backward compatibility. - HA-managed aiohttp session: web portal operations use HA's shared HTTP session for proper SSL, proxy, and lifecycle management.
- E2E test infrastructure: deterministic waits replace all sleeps, robust page reload, expanded cloud/entity parametrization, fault recovery tests, 796 total tests (670 unit + 126 E2E).
- Migration guide rewritten: recommends clean install with guidance for cleaning up orphaned entities.