v0.4.0rc6
Pre-release
Pre-release
HAEO v0.4.0rc6
Pre-release covering changes merged to main since v0.4.0rc5.
Highlights (User-Facing)
- 🗺️ Network topology Lovelace card — Add
custom:haeo-topology-cardto your dashboard to explore your optimization network: elements, connections, segment limits, efficiency, pricing, and policy overlays as an interactive SVG graph - 💰 Pricing on element config — Set battery charge/discharge costs and load pricing directly when configuring batteries and loads, without opening the standalone policy flow
- 📊 Shadow prices in $/kWh — Shadow price sensors now use the same unit as tariffs and other energy-priced quantities, making comparisons and dashboards easier to read
- ☀️ Volcast solar forecasts — Use Volcast solar forecast data as an optimization input via a new data extractor
⚠️ Breaking Changes
Shadow price units changed to $/kWh (#424)
All shadow price sensors are now reported in $/kWh instead of $/kW. Entity IDs are unchanged, but dashboards, templates, and automations that assumed the old unit need updating.
Migration: Review any Lovelace cards, utility meters, or automations that reference shadow price sensors. Re-scale or relabel displays to expect $/kWh. If you compare shadow prices to import/export tariffs, they now share the same unit without manual conversion.
User-Facing Changes
New Features
- Network topology Lovelace card (#417, #453) — Backend topology serialization on the optimization status sensor, plus a dashboard card registered in the existing
/haeo-static/haeo-forecast-card.min.jsresource. Select a HAEO hub in the card editor; the card resolves the optimization status sensor and renders the live network graph. - Shared hub selection for Lovelace cards (#453) — Forecast and topology cards use Home Assistant’s built-in config entry selector and filter entities by hub via the device registry, so multi-hub setups show the correct sensors.
- Volcast solar forecast extractor (#440) — Detects Volcast’s
detailedForecastattribute (5-minute resolution,power_win watts) for use as a solar forecast input. - Historic diagnostics walkthrough guide (#432) — New user guide for working through optimization diagnostics over time.
Configuration Improvements
- Surfaced policy pricing on battery and load flows (#430, #442) — Common pricing rules appear on element config screens. Defaults apply even when the frontend omits suggested values on new elements.
- Clearer battery partition input names (#428) — Undercharge/overcharge cost and percentage inputs now have distinct friendly names (“Undercharge cost”, “Overcharge percentage”, etc.). Entity IDs are unchanged.
- Unit-aware entity pickers (#446) — Config flow entity selectors filter by unit compatibility and exclude entities owned by the current hub to prevent self-referential loops.
- SOC pricing scaled by period duration (#439) — SOC pricing penalties now account for variable-width optimization periods so short and long periods are treated consistently.
Bug Fixes
- Policy-pruned connections (#449) — Element adapters and shadow price extraction handle connections removed by policy compilation without errors.
- Surfaced policy defaults (#442) — Pricing rules are created from field defaults when the UI does not submit optional suggested values.
Developer-Facing Changes
Developer Highlights
- InputStore (#441) — Shared core layer for input-field data (editable vs driven modes, time-series loading, readiness) used by both optimization and surfaced policy paths, decoupled from Home Assistant entity presentation.
uv run simrealtime simulator (#444) — Boots a browsable Home Assistant instance, feeds time-shifted scenario inputs, optionally configures HAEO from scenario config, and tears down on Ctrl+C.
Architecture
- InputStore extraction and unified input paths (#441) — Coordinator, adapters, and surfaced policy flows route through the shared input store.
- Topology visualization pipeline (#417, #453, #454) — Matplotlib/networkx scenario graphs replaced by frontend SVG rendering; Lovelace card wired to optimization status
topologyattribute. - Snapshot rounding stabilization (#426) — Removed
DEFAULT_TAG; snapshot output rounding is more stable for tests and tooling. - Scenario optimization SVG exports stabilized (#450) — Deterministic exports for scenario visualizations.
Schema/API Changes
- Shadow price LP formulation (#424) — Dual values computed in energy-native $/kWh form throughout the model layer.
- Battery partition translation keys (#428) — Translation keys include
device_typefor disambiguation (battery_undercharge_partition_cost, etc.).
Testing & Documentation
- Guide test reliability (#448) — Event-based waiting replaces brittle timeouts in guide tests.
- Trusted networks auth for guide tests and sim (#447) — Simpler auth setup for automated guide runs and the realtime simulator.
- Lovelace card user guide (#453) — Documents forecast and topology card configuration, hub selection, and troubleshooting.
- Remove Codecov token from CI (#429) — Codecov uploads use OIDC instead of a repository token.
Contributors
Full Changelog
- Remove defensive paths from topology card code (#454) by @TrentHouliston
- Add HAEO network topology Lovelace card (#453) by @TrentHouliston
- Remove Codecov token from CI workflow (#429) by @TrentHouliston
- Bump version to 0.4.0rc6 (#452) by @TrentHouliston
- Extract InputStore and unify optimization input and surfaced policy paths (#441) by @TrentHouliston
- Stabilize scenario optimization SVG exports (#450) by @TrentHouliston
- Scale SOC pricing cost by period duration (#439) by @TrentHouliston
- Handle policy-pruned connections in element adapters (#449) by @TrentHouliston
- Improve guide test reliability with event-based waiting (#448) by @TrentHouliston
- Use trusted_networks auth for guide tests and sim (#447) by @TrentHouliston
- Filter config flow entity pickers by unit compatibility (#446) by @TrentHouliston
- Add uv run sim realtime Home Assistant simulator (#444) by @TrentHouliston
- Apply surfaced policy defaults when frontend omits fields (#442) by @TrentHouliston
- Add Volcast solar forecast extractor (#440) by @TrentHouliston
- Surface policy pricing fields on battery and load config flows (#430) by @TrentHouliston
- Add historic diagnostics walkthrough guide (#432) by @TrentHouliston
- Add network topology visualization card (#417) by @TrentHouliston
- Disambiguate undercharge/overcharge partition entity names (#428) by @purcell-lab
- Expose shadow prices in $/kWh (closes #423) (#424) by @purcell-lab
- Remove DEFAULT_TAG and stabilize snapshot rounding (#426) by @TrentHouliston
Full diff: v0.4.0rc5...main