mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-10-08 15:26:38 +00:00
feat(optimization): deadlines for consumers and EV, graded grid export
Three related scheduling improvements, all opt-in and behaviour-preserving
when the new fields are not set.
Flexible consumers get absolute time bounds next to the recurring
time_windows: earliest_start_datetime and deadline_datetime, where the
deadline requires the complete run to have *finished* before that moment
("clean dishes by 03:00 tonight"). When no start can meet it,
deadline_policy decides between BEST_EFFORT (run as early as possible, so
the delay rather than the cost is minimized) and STRICT (keep the
deadline; a ONCE consumer then fails the optimization). The solution
reports appliance_deadline_missed per device.
The EV charging target can be given the same kind of deadline, as an
absolute min_soc_deadline_datetime and/or a relative min_soc_max_duration_h
("full in 6 hours"), the earlier of the two winning. The ev_soc_miss
penalty is then evaluated at that slot instead of at the end of the
horizon, and the seeding heuristic only proposes charge slots before it.
Battery-to-grid export under direct marketing is no longer all-or-nothing:
grid_export_rates configures the selectable export levels as a factor of
the rated discharge power (default [0.25, 0.5, 0.75, 1.0]). Each rate is
its own optimizer state, with the full-power state keeping its previous
index so existing seeds and heuristics are unaffected. The chosen level
per slot is reported in battery_grid_export_factor and as the
GRID_SUPPORT_EXPORT operation factor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
weekday/date restrictions) and the horizon; ONCE without any valid start is rejected.
|
||||
Results are reported per device (`result.home_appliance_energy_wh`, `appliance_starts`,
|
||||
per-device solution columns and `DDBCInstruction`s emitted only on RUN/OFF transitions).
|
||||
- Flexible consumers can be given absolute time bounds: `earliest_start_datetime` and
|
||||
`deadline_datetime`, where the deadline demands that the complete run has *finished* before
|
||||
that moment ("clean dishes by 03:00 tonight"). When no start can meet the deadline,
|
||||
`deadline_policy` decides between `BEST_EFFORT` (run as early as possible, minimizing the
|
||||
delay) and `STRICT` (keep the deadline; a `ONCE` consumer then fails the optimization).
|
||||
The solution reports `appliance_deadline_missed` per device so callers can warn instead of
|
||||
silently trusting a late schedule.
|
||||
- Battery-to-grid export (direct marketing) is no longer all-or-nothing: `grid_export_rates`
|
||||
configures the selectable export levels as a factor of the rated discharge power
|
||||
(default `[0.25, 0.5, 0.75, 1.0]`), settable per battery in `devices.batteries[].
|
||||
grid_export_rates` or per request in `pv_akku.grid_export_rates`. The optimizer picks one
|
||||
level per slot and reports it in `battery_grid_export_factor` and as the
|
||||
`GRID_SUPPORT_EXPORT` operation factor. `[1.0]` restores the previous behaviour.
|
||||
- The EV charging target can be given a deadline: `min_soc_deadline_datetime` (absolute, e.g.
|
||||
the next departure) and/or `min_soc_max_duration_h` ("full in 6 hours"), the earlier of the
|
||||
two applies. The `ev_soc_miss` penalty is then evaluated at that slot instead of at the end
|
||||
of the horizon, and the seeding heuristics only propose charge slots before it. Without a
|
||||
deadline the behaviour is unchanged.
|
||||
- EV Bug (wrong output in genetic.py / no senseful results)
|
||||
- Direktvermarktung active / Battery discharge into grid (new state / action battery_grid_export_allowed) + (new simulation output Feed_in_tariff)
|
||||
- New PV forecast providers giving operators more cloud forecast sources to choose from in
|
||||
|
||||
Reference in New Issue
Block a user