Skip to content

v1.0.8

Choose a tag to compare

@github-actions github-actions released this 22 Apr 03:33
0f344fd

Added

  • 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.