98 lines
5.5 KiB
Markdown
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.
|