mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-10-10 00:16:39 +00:00
87 lines
6.7 KiB
Markdown
87 lines
6.7 KiB
Markdown
# Remaining EOS packages and Optimize compatibility
|
|||
|
|
|
||
|
|
Snapshot: 2026-09-16. Official main: `4a37244`. Feature source: `d2e2d58`, plus
|
||
|
|
separately backed-up local work. This is a functional package estimate, not a claim
|
||
|
|
that every differing commit requires its own PR.
|
||
|
|
|
||
|
|
## What is still missing on main
|
||
|
|
|
||
|
|
| Package | Missing behavior relative to feature/local work | Local state | Dependency |
|
||
|
|
| --- | --- | --- | --- |
|
||
|
|
| Device physics | Slot-duration-aware battery/inverter flows, export control, efficiency and limits | Already ported/tested in integration; needs isolated review branch | #1256 device settings/converters |
|
||
|
|
| Complete GENETIC | Quarter-hour orchestration, adaptive evolution, export states, warmstart alignment, forecast tail/terminal value, EV deadlines and flexible consumer profiles | Physics and primitives exist; orchestration/parameter/output integration remains open | Device physics, #1256, tariff contract |
|
||
|
|
| Imported tariff protection | Preserve supplied/imported revenue; avoid silent demo or market-price replacement | Independent main adaptation in progress; feature-specific override still required inside GENETIC port | Main patch independently possible; second part belongs with GENETIC |
|
||
|
|
| Local calibrated PV | Local Akkudoktor PV calculation, measurement calibration and outage handling under existing provider ID | Independent main port in progress | Provider-specific settings; combined forecast/optimizer acceptance later |
|
||
|
|
| Measurement APIs | Typed channels, quality, energy integration, household balance and capacity estimate APIs | Isolated tested local branch exists | #1256, #1305, configuration corrections; JSON fix #1322 |
|
||
|
|
| Config-owned Optimize request | Local ConfigOptimizationRequest, /v1/optimize, runtime observations and common parameter resolver | Backed up; async/maps/converters adaptation pending | New GENETIC and #1305 |
|
||
|
|
| Result/PDF output | Quarter-hour, flexible-consumer, export, tail/rest-value diagnostics in main's on-demand algorithm-specific output | Pending | Final GENETIC result contract |
|
||
|
|
|
||
|
|
Seven feature packages remain in this planning snapshot. They may produce roughly
|
||
|
|
seven further feature PRs; tightly coupled packages may be combined, and independently
|
||
|
|
confirmed defects may require an additional small fix. #1256 and #1305 are existing
|
||
|
|
foundation PRs, not two newly invented replacements. #1224/#1304 already address
|
||
|
|
parts of the tariff work against the old feature branch; preserve/reconcile those
|
||
|
|
contributions rather than count duplicate implementations as separate deliverables.
|
||
|
|
PR #1322 is already published and is additional to this remaining-work table.
|
||
|
|
|
||
|
|
Local helper scripts and private HA-core divergence are not silently included in this
|
||
|
|
count. They remain separately secured/to be audited. Changelog/release work follows
|
||
|
|
acceptance; it is not another optimizer implementation.
|
||
|
|
|
||
|
|
## Parallel lanes
|
||
|
|
|
||
|
|
- Local PV: `feat/local-pv-main-port`, sibling worktree `EOS-pr-local-pv`.
|
||
|
|
- Tariff preparation: `fix/imported-feedin-main`, sibling `EOS-pr-feedin-main`.
|
||
|
|
- Optimize compatibility tests: `test/optimize-pr-contracts`, sibling
|
||
|
|
`EOS-pr-optimize-contracts`. These are shared acceptance coverage, not necessarily
|
||
|
|
an extra standalone public PR.
|
||
|
|
- Root/integration: configuration prerequisites, shared API/algorithm contracts and
|
||
|
|
eventual combination of the tested packages.
|
||
|
|
|
||
|
|
Do not have multiple lanes independently rewrite geneticparams.py, EMS.run or the
|
||
|
|
same configuration structure. A tested tariff patch will be carried into the core
|
||
|
|
port; the core port must keep its regression cases. PV keeps the public
|
||
|
|
PVForecastAkkudoktor ID and existing remote behavior unless explicitly selected.
|
||
|
|
Parallel preparation does not imply parallel unreviewed merges or publishing all
|
||
|
|
branches. Only the JSON fix has publication approval at this point.
|
||
|
|
|
||
|
|
## Three different Optimize contracts
|
||
|
|
|
||
|
|
1. Legacy POST `/optimize` on main explicitly runs GENETIC0, hourly. Existing payload
|
||
|
|
and legacy response aliases must keep working regardless of configured default.
|
||
|
|
2. Automatic EMS with `ems.mode=OPTIMIZATION` selects `optimization.algorithm`:
|
||
|
|
GENETIC or GENETIC0. Preparation and solution conversion are asynchronous.
|
||
|
|
PREDICTION and DISABLED must not accidentally run optimization or dispatch controls.
|
||
|
|
3. The feature worktree's LOCAL POST `/v1/optimize` and ConfigOptimizationRequest are
|
||
|
|
not present on main/integration yet. They must be adapted to current maps,
|
||
|
|
converters and algorithm-specific settings. Old feature `/optimize` meant a
|
||
|
|
different optimizer; clients need explicit migration, not a silent route switch.
|
||
|
|
|
||
|
|
Current blockers: GENETIC.prepare still forces interval_sec to 3600 and EMS start
|
||
|
|
alignment floors to the hour. Fifteen-minute device tests do not prove quarter-hour
|
||
|
|
Optimize-mode support. The core package must change preparation, slot alignment,
|
||
|
|
optimization and response metadata together.
|
||
|
|
|
||
|
|
A further suspected failure-path defect is being verified: after a failed explicit
|
||
|
|
optimization, the HTTP route may return a previous stored solution. Until confirmed
|
||
|
|
on unchanged main, treat this as an audit finding, not a proven upstream bug. A failed
|
||
|
|
new request must never claim an old result as its fresh successful optimization.
|
||
|
|
|
||
|
|
## Shared acceptance before dependent PRs can land
|
||
|
|
|
||
|
|
| Area | Required combined check |
|
||
|
|
| --- | --- |
|
||
|
|
| Routing | Legacy /optimize remains GENETIC0; automatic mode selects the configured algorithm; the new explicit API selects GENETIC deliberately |
|
||
|
|
| Configuration | Stable device IDs/maps and converters, runtime changes retained, old aliases migrated without losing values |
|
||
|
|
| Time | 900/3600-second slots, non-hour-aligned start and advancing warmstart, timezone/DST boundaries, matching output timestamps |
|
||
|
|
| Units | PV/load predictions are W; integrate once to slot Wh. `feed_in_tariff_wh` and `elecprice_marketprice_wh` already yield amount/Wh; convert amount/kWh configuration exactly once |
|
||
|
|
| Tariffs | Positive/zero/negative/imported revenue remains distinct from purchase cost; missing or invalid imported data does not silently become demo data |
|
||
|
|
| Devices | SOC/energy balance, charge/discharge and inverter limits, allowed/blocked battery export |
|
||
|
|
| Consumers | Feature profiles/deadlines and #1256 per-cycle windows/gaps both preserved; impossible schedules fail explicitly |
|
||
|
|
| Results | Raw algorithm result, generic optimization solution, execution plan and on-demand PDF agree on slots and device IDs |
|
||
|
|
| Errors | Failed preparation/optimization produces no new control dispatch and no misleading fresh-success response using old results |
|
||
|
|
|
||
|
|
A passing individual PR is insufficient: after combining dependent packages, run
|
||
|
|
these synthetic end-to-end API cases together with the GENETIC0 regression suite.
|
||
|
|
No device control, HA deployment or production configuration is part of this work.
|