Repository navigation
[FR] Price-aware solar surplus absorption — only absorb during the cheapest hours #346
Replies: 4 comments
|
Thanks for the suggestion! 🙌 Here's how this works:
If your idea is very specific to your setup, it may not make it into the core integration — I'll try to suggest a workaround in that case. Feel free to discuss details or alternatives below. |
|
This should address this feature request (alongside a similar one): #355 |
|
Update: this is now implemented by PR #355 (merged Sep 4), tracked in #237 where @ffunes committed it for v1.5.0 — so this request is effectively a duplicate of #237. Anyone landing here: please add your use case / votes there. Marking this as answered; looking forward to the release and happy to test on my Venus E (NL, symmetric feed-in tariff). |
|
Implemented in v1.5.0 as Price-aware solar surplus absorption (Dynamic Pricing, opt-in): the battery lets surplus export while a clearly cheaper export window is still ahead and takes the day's charge in the cheapest hours instead. Turn on its switch on the Control tab and, optionally, set an export price sensor. Thanks @joostlammers-web. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
On a fully dynamic (hourly) tariff where export is paid at the same rate as import, absorbing solar surplus the moment it appears is not free — it costs the export revenue of that hour. Charging from surplus and charging from the grid are economically identical; only the timing matters.
Omnibattery already reasons about price for grid charging (
min_arbitrage_margin,max_price_threshold, negative-price charging), but surplus absorption is pure load-following: the PD controller charges whenever there is export, regardless of what that hour is worth.Measured over 31 days on a single Marstek Venus E: charging the same daily volume in each day's cheapest hours instead would have cut the average charge price from € 0.213 to € 0.162 /kWh, roughly doubling the battery's net return (€ 0.30 → € 0.55 per day). The loss comes from absorbing surplus from mid-morning onwards, when export is still worth € 0.23–0.28, instead of waiting for the € 0.16–0.18 window a few hours later.
Measurement detail
Single battery, single phase, NL hourly-priced tariff, 31 full days, 149.4 kWh charged.
Average price by hour of day over the period (€/kWh):
Actual charging cost € 31.77 (€ 0.213/kWh). Re-allocating the same per-day volume to
that day's cheapest hours, capped at the configured max charge power, gives € 24.22
(€ 0.162/kWh). Discharge value is unchanged at € 42.24, so the net goes from € 9.37 to
€ 16.91 over the period. Day-ahead prices are published, so this is schedulable rather
than a hindsight-only optimum.
What I'd like
Goal-seeking behaviour rather than a rule: the battery decides when to take its energy, given how much it needs and what each hour costs.
I'm describing the outcome rather than the mechanism, but one thing stands out: the predictive planner already holds every input this needs — solar forecast, expected consumption, price curve, SoC floor, safety margin. Today it answers "should I grid-charge tonight?"; the same inputs answer "when today should I absorb surplus, and do I need to top up if that falls short?". In winter, with the cheapest hours at night and no surplus, the behaviour collapses back into the grid charging that already exists — so this may be a widening of the planner's remit rather than a new subsystem.
Why the current settings don't cover it
charge_delay("holds back grid charging while solar can still cover the required energy") acts on grid charging, not surplus absorption.max_price_thresholdandmin_arbitrage_margingate predictive grid charging only.system_max_charge_powercan't serve as an external gate:0 Wmeans disabled (no cap), not no charging.Gating the battery's own
battery_allow_chargefrom an automation leaves the PD controller commanding charge power the hardware refuses, and desynchronises Omnibattery's energy accounting. Drivingset_charge_powerexternally appears to hit the same conflict as #334.Versions
Omnibattery v1.3.0 (HACS), Home Assistant 2026.8.3, one battery, AC-coupled, single phase.
All reactions