feat(application): integrate measured-load ingestion training and planner source

This commit is contained in:
ENELIX Agent
2026-10-02 21:00:05 +00:00
parent 44362e4bf5
commit fc024fcfba
96 changed files with 8933 additions and 0 deletions
@@ -0,0 +1,80 @@
# Integrated application data/model path - 2026-10-02
User request: finish application implementation, stop asking for repeated hardware
confirmations and adding standalone diagnostic samplers. No actuator permission is
implied by that development request. Confirmed EV allocation remains 161.44 kWh /
39 kW each direction, with SDL reserve already excluded.
## Implemented in the existing application
- Native ManagerNetzfahrplanV4DatenTrait: 30-second acquisition of configured numeric
sources; durable private app-owned outbox; original timestamps, no new Modbus
polls; acknowledged per-plant batches with retries/backoff. Cursor advances only
after exact dataset/acceptedThrough acknowledgement. Batches bounded below the
existing portal's 1 MiB body limit. No credentials in data payload or reports.
- Existing device proxy now forwards /planner-v4/measurements through the existing
authentication, plant binding, licence check and separate V4 rate limiter.
Device route cannot modify the dataset mapping or issue a trial grant.
- Existing V4 database stores immutable versioned source mappings and observations.
Same-time conflicts reject the whole batch; repeated identical data is idempotent.
No writes to portal/users/legacy measurement databases.
- Existing V4 worker aggregates physical load using original source times. Virtual
EV/SDL filter outputs are not load inputs. Solar terminal variant counts signed
terminal power once. Small unobserved parts remain quantified, never zero-filled.
This configured formula remains an estimate, not independent AC/DC certification.
- Application profile training actually runs daily/weekly. Models are immutable,
bootstrap/holdout status explicit. Incumbent replacement requires a causal
holdout when available. Existing data and model versions are not relabelled.
- Three corrected load variants (daily robust profile, last-day profile,
weekday/weekend profile) are paired with the existing PV families 3/13/23.
They are tagged physical-profile-v1; they are NOT claimed to be the old trained
load algorithms under a new data name. Automatic future family registry work
and economic replay are still distinct from this load-profile implementation.
- Selecting corrected_profile in the existing GUI/setting now actually changes
the load entering the existing optimizer. Missing trained data cannot silently
fall back to the contaminated legacy household series.
- A current SDL request is an explicitly labelled PERSISTENCE SCENARIO for the
shadow economic calculation, not a published future schedule. Missing/stale SDL
is not zero. This is not a robust/full SDL production-dispatch policy.
- GUI now exposes dataset/source selection, records, usable equivalent hours,
model version, validation and real training cadence. Existing normal portal
app.js/index files are not changed.
## Deployment package
Server: commissioning/deploy_application.py --plant <approved UUID> --apply
Rebuild/test V4 with Python 3.11, portal routing tests, consistent SQLite backup,
replace ONLY V4 and portal, configure the new per-plant dataset. No automatic
forecast-source switch and no control grant. Atomic file-bind replacement requires
portal recreation, not a simple restart. Additive DB rollback retains new data.
Default invocation without --apply validates source manifests only.
Test host: /srv/agent/netplan-v4-application-build/install.php inside Symcon.
Installs a DATA-ONLY patch of the currently installed passive manager (not the
unreleased controller-trial candidate), reloads EMS, configures acquisition and
imports up to 48h of the existing 23-source observer as a delivery backlog.
Original observer and old raw journals remain intact. Existing separate observers
are NOT automatically stopped by this initial installer; consolidation should
follow confirmed native batch acceptance. No new root diagnostic category.
An asynchronous module registration may require one repeat, handled explicitly.
Dataset lihrenmoos-physical-v1: minimum coverage 95%, longest unsupported portion
10s, at least 24 equivalent usable hours, 28-day profile history. The 95% rule is
an explicit modelling policy, not a statement that missing energy was measured.
Insufficient data remains collecting; no promised time to good forecasts.
All original acquisition thresholds remain unchanged.
## Tests and honest limits
Host tests use existing isolated QA dependencies; native tests mock IPS/HTTP and
use temporary files. Real container and kernel tests occur on the user-run deploy
commands, not during preparation. No services/modules/settings/devices were modified
by this development session.
Still NOT a complete production commissioning: the corrected profile-to-local
feedback/dispatch integration, full automatic cost replay, independent long-term
outbox/server retention and staged live/failure acceptance remain open. The trial
code from previous commits remains gated and is not included in the data-only
native installation. No accountingEvidenceId/device watchdog proof is fabricated.
This release is an integrated application build, NOT a claim that the full original
multi-plant production scope is done. No main/beta release is authorized by tests alone.