You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Entity-mode dashboard support: four new optional entity mappings — battery charge power, battery discharge power, grid consumption power, and grid feed-in power — populate the overview card's grid and battery sections in entity/modbus mode.
Automatic unit conversion in entity mode: the entity coordinator reads unit_of_measurement from each source entity and converts to the expected coordinator unit (e.g. W→kW, Wh→kWh) using HA's built-in PowerConverter, EnergyConverter, and TemperatureConverter.
Changed
Force operations unified with smart sessions: force_charge and force_discharge now create smart sessions internally with a full_power flag, gaining circuit breaker protection, restart recovery, UI state, and sensor visibility. The power parameter has been removed — force operations always charge/discharge at maximum inverter power.
Fixed
Grid direction swap with external generation (issue #3): installations with additional solar inverters not visible to FoxESS could show grid consumption and feed-in swapped. Now falls back to gridStatus when the power balance diverges >3× from the actual grid reading.
Discharge deferred start with feedin target: the feedin energy cap caused incorrect deferred start timing in two scenarios — starting too early (full SoC energy used instead of feedin drain time) and staying deferred too long in tight windows (feedin cap over-deferring when the SoC deadline already exceeded the window).
Force operation premature WebSocket connection: force ops opened the WS connection at service call time, before the schedule was applied. Now starts through the smart session listener.
clear_overrides 30s timeout: WS linger dispatched as background task to avoid blocking the service call.
Improved
WebSocket plausibility filter: anomalous WS messages (power values diverging >10× from the last accepted value) now filtered at the WS layer rather than the coordinator. Keeps data-source-specific logic out of the brand-agnostic coordinator.
Architectural lint enforcement: semgrep rules and pre-commit hooks enforce module size budget (2000 lines), typed config access (IntegrationConfig), typed domain data access (_dd(hass)), and brand-import boundaries.
E2E timing-based worker balancing: greedy bin-packing distributes tests across CI workers by estimated time, and new pushes cancel in-progress E2E workflows.