Skip to content

feature: computed overnight reserve floor (Min SOC + historical night use) so one knob covers evening export + night load #381

Description

@Frank-Leysen

Context

Live Growatt MOD 5000TL3-XH / 15 kWh / Belgium Dynamic (Belpex H + Luminus), tester @Frank-Leysen. Related discussion lived on #126; opening a dedicated issue per your request.

Today BESS has a single Min SOC knob. In practice we need two different floors:

  1. Hard floor (Min SOC) — never go below this (hardware / safety / end of overnight).
  2. Evening export / midnight planning floor — how low evening BATTERY_EXPORT may go so enough energy remains for overnight house load until morning PV covers consumption.

With only one knob we keep hitting a bad trade-off (reported on #126, e.g. 17 Jul):

Min SOC setting What happens
Low (e.g. 12–15%) Strong evening export, but overnight can run too thin → avoidable grid import on Belgian buy≈0.35 vs sell≈0.12–0.16
High (e.g. 47%) Night reserve OK, but DP often holds far above Min SOC through the peak (we saw ~74% flat) → evening arbitrage largely wasted

So: one Min SOC cannot express "export hard into the evening peak, but keep X% reserved for overnight load support until solar returns."

Observed (today's numbers as example)

  • Battery: 15 kWh
  • User Min SOC: 12%1.8 kWh hard floor
  • Overnight battery use (last night → this morning, until PV starts covering load): ~2.8 kWh
  • Implied planning reserve after evening export: 1.8 + 2.8 = 4.6 kWh ≈ 30.7% SOC

Separately, before tomorrow's day-ahead prices land (~14:00), the dashboard Net Grid Cost can look overly optimistic because the plan still assumes export down toward Min SOC; after prices, midnight SOC often rises (overnight reserve) and the headline shrinks. A visible computed floor would make that behaviour easier to understand even when the horizon is incomplete.

Desired

Keep one user setting: Min SOC (hard floor).

Have BESS compute an overnight planning floor from history, e.g. last 7 nights:

planning_floor_kWh = min_soc_kWh + expected_overnight_battery_use_kWh (+ optional safety margin)
planning_floor_soc = planning_floor_kWh / capacity

Use planning_floor_soc in:

  • evening BATTERY_EXPORT stop / midnight target
  • schedule / Savings / Net Grid Cost so the UI does not imply "export all the way to Min SOC" when overnight reserve is required

Important nuance: overnight the battery may still discharge from planning_floor down to Min SOC for house load. The computed value is not a second hardware Min SOC (writing ~31% to the inverter would stop discharge too early and force expensive night import).

expected_overnight_battery_use ideally = energy needed until net PV covers house load (not a fixed clock). Prefer median or P75 of recent nights + a small configurable margin, so boiler/EV/heatwave outliers do not dominate.

Proposal — question for Johan

Does this design make sense to you as a product approach?

We are not asking to replace the DP with rules. The idea is a transparent constraint / terminal target derived from Min SOC + recent overnight reality, so:

  • users keep a single Min SOC
  • graphs and economics immediately respect the real overnight buffer
  • we avoid the manual Min SOC yo-yo (15% vs 47%) that fights the optimiser

If the DP already intends to hold this reserve via the load forecast: great — then the ask is mainly to surface that computed floor and to guarantee it when the forecast / pre-14:00 horizon underestimates overnight need (without double-counting on top of a correct load model).

Happy to stay guinea pig on Growatt + Belpex H and supply debug bundles for any prototype (e.g. 7-day median overnight kWh + margin %).

Thanks — curious what you think of the approach.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions