Files
Enelix-EMS/docs/netplan-v4-application.md
T

98 lines
5.5 KiB
Markdown

# V4 application data and forecast integration
## Implemented application path
`ManagerNetzfahrplanV4DatenTrait` records the configured raw power/SOC/counter sources
inside the existing Manager. This replaces the need for permanent standalone
observation categories once the native delivery path has been accepted. It never
issues device commands. New acquisition properties default disabled.
The private outbox at `data/enelix-v4/<installationId>` is append-only and delivery
is acknowledged by dataset and capture time. Unacknowledged data survives network
failures and 429 responses. The native payload budget is below the existing portal
1 MiB request-body limit. Existing authentication and V4 rate limiting are reused.
Server application source is now versioned under `services/netplan-v4`, rather than
existing only as an untracked server working tree. No live measurements, databases,
credentials, dependency binaries or settings exports are included in this directory.
The existing worker handles per-plant dataset ingestion, physical five-minute
rollup, model training, model storage and corrected-load substitution into the V4
optimizer. It continues to consume the existing PV forecasts and price/operation
inputs. The public device route can append measurements but cannot alter source
meaning, register a dataset, change live permissions or arm a controlled trial.
## Explicit settings and model meaning
- `forecastSource=legacy` preserves the existing forecast input by default.
- `forecastSource=corrected_profile` plus `measurementDataset` uses the trained
corrected physical load. Missing models are reported; legacy house values are
not substituted silently.
- `trainingCadence=daily|weekly` is now connected to real profile fitting in the
application worker, independently from the optimizer refresh frequency.
- Corrected load profiles are tagged `physical-profile-v1`: robust daily profile,
recent-day profile and weekday/weekend profile paired with PV families 3/13/23.
They are not claimed to be the previous load models unchanged. Economic automatic
selection still requires the separate, not yet finished cost-replay integration.
- Initial models are explicitly bootstrap models. Later candidates record causal
holdout errors; an overlapping validation window cannot certify a promotion.
- Current SDL request persistence is only a labelled shadow scenario. Unknown or
stale SDL is not silently zero, and the scenario is not a guaranteed future
schedule or a robust SDL-aware production control policy.
## Lihrenmoos package scope
Effective EV capacity 161.44 kWh and power 39 kW remain unchanged; SDL reserve is
already excluded. The prepared dataset `lihrenmoos-physical-v1` uses a configured
physical estimate with SolarEdge signed terminal power counted once. It requires
at least 24 equivalent usable hours before the first bootstrap profile; the
history window is 28 days. Coverage policy 95% with maximum 10-second unsupported
portion is an explicit modelling assumption. Gaps and source ages remain visible.
It is not an independent electrical metering-boundary proof.
Server entry point on the service host:
python3 /home/agent/services/netplan-v4-shadow/commissioning/deploy_application.py \
--plant e3a08f9e-af12-4695-99bd-8b51c0520021 --apply
Default without --apply checks source only. The explicit apply command rebuilds
and tests V4 in Python 3.11, tests portal routing, backs up the V4 database and
recreates only V4 and the portal. It configures the dataset but DOES NOT select it
for the existing plan automatically. No forecasts/tariff importer or controllers
are restarted by the server command. A previous-image rollback is prepared.
Then, inside Lihrenmoos Symcon:
require '/srv/agent/netplan-v4-application-build/install.php';
This is a data-only patch of the currently installed passive manager, with file
backup and library reload. It does NOT install the development control-trial
changes in Manager/Batterie. The first runtime invocation imports at most 48h of
the existing 23-channel observer as a durable backlog, preserving the original
files, then activates acquisition and delivery. If Symcon module registration is
not immediately available, the installer reports that a single repeat is needed.
The two temporary standalone samplers are not stopped automatically by this
initial package; disable them only after native batch acceptance and history
continuity are confirmed. This package creates no new root diagnostic category.
## Validation performed before deployment
219 Python tests passed in the isolated host QA runtime, including actual synthetic
measurement -> profile -> existing optimizer -> stored shadow plan. 16 Node proxy
checks passed. 21 PHP data-path checks and 5 installer scenarios passed with mocked
IPS/HTTP and temporary files on the test host. Full staged PHP syntax passed.
No new container or new manager data integration has yet been run in production.
Evidence: service `APPLICATION_PIPELINE_TEST_RESULTS.txt`,
`APPLICATION_PORTAL_TEST_RESULTS.txt`, `commissioning/application-source/RELEASE.json`;
test host `netplan-v4-application-build/PREPARATION.json` and `TEST_RESULTS.txt`.
## Remaining product scope (do not disguise as complete)
This integrates application data and load forecasting, not completed production
commissioning. Economic replay-based automatic family selection, full corrected
feedback/control integration, long-term outbox/server retention and real live/
failure acceptance remain open. Existing trial gates are unchanged. No sensor,
accounting or hardware evidence identifier is fabricated by data ingestion.