91 lines
5.4 KiB
Markdown
91 lines
5.4 KiB
Markdown
# Historical publication timing (2026-10-03)
|
|
|
|
## Implemented scope
|
|
|
|
`services/netplan-v4/netplan_v4/history_timing.py` implements optional, bounded
|
|
retrospective estimates between consecutive identical source values at DIFFERENT
|
|
original publication timestamps. It is used by the existing measurement pipeline,
|
|
model training and forecast source substitution. It is NOT a real-time estimator,
|
|
a measurement certificate, an actuator authority or a repair of device communications.
|
|
|
|
No source `maxAgeSeconds` is changed. When a regular hold expires, only its tail
|
|
until the next qualifying original publication may be estimated. Strict processing
|
|
remains the default. The following forbid the estimate: unequal endpoints,
|
|
nonfinite/missing observations, conflicting same-timestamp values, collector gaps,
|
|
invalid source intervals or a span beyond the explicit source-specific bound.
|
|
There is no extrapolation past the last observation and no fabricated zero.
|
|
|
|
Each window reports `publicationEstimatedSeconds`, per-source estimated portions,
|
|
uncovered-source seconds and `availableNotBefore`. Training/validation must not use
|
|
a confirmation or receipt before it was actually available. Backfilled windows
|
|
cannot establish a supposedly causal holdout at a date before their availability.
|
|
All physical windows remain configured estimates; even full support is not proof
|
|
that the physical waveform stayed constant between the two endpoint readings.
|
|
|
|
## Evidence and model assumptions
|
|
|
|
Read-only source configuration projection on the test server, snapshot
|
|
2026-10-03T07:47:24Z: GoodWe 1 instance 19742 (ModBus Device) has Poller 60000 ms;
|
|
GoodWe 2 instance 57658 has Poller 5000 ms; SolarEdge scale instance 48996
|
|
(ModBus Address) has Poller 20000 ms. No polling setting was changed.
|
|
Projection program: /srv/agent/netplan-v4-application-build/inspect_source_update_policy.py.
|
|
|
|
Official Symcon documentation accessed on 2026-10-03:
|
|
https://www.symcon.de/de/service/dokumentation/modulreferenz/geraete/modbus-rtu-tcp/vorlagen/
|
|
It documents value publication for ModBus Device on changes or when the variable is
|
|
older than 60 seconds, including ordinary and virtual addresses. VariableUpdated
|
|
is therefore not automatically the last successful device poll. The documentation
|
|
is not a proof that a particular installed device link was healthy.
|
|
|
|
Explicit Lihrenmoos HISTORICAL estimate bounds:
|
|
- GoodWe 1 PV/physical storage: equal original publications at most 130 s apart
|
|
(60 s publication suppression + configured 60 s poll + 10 s scheduling allowance).
|
|
- GoodWe 2 PV/physical storage: at most 75 s (60 + 5 + 10).
|
|
- SolarEdge scale: equal scale publications at most 90 s apart. This is a modelling
|
|
bound based on the configured 20 s polling and observed sparse scale publication,
|
|
not a manufacturer guarantee and not proof of the same internal implementation
|
|
as ModBus Device. Raw AC power remains under the original strict limit.
|
|
The 10 s margins are explicit scheduling assumptions, NOT measured timing guarantees.
|
|
Gaps of many minutes (e.g. the previously observed GoodWe gaps above 600 s) are NOT
|
|
bridged. Nonzero changes are never interpolated by this policy.
|
|
|
|
## Versioned dataset without restarting collection
|
|
|
|
`lihrenmoos-physical-published-v2` references immutable observations in
|
|
`lihrenmoos-physical-v1`. No observations are copied, deleted, relabelled or resent.
|
|
Registration requires the same installation and identical original mapping,
|
|
formula, coverage and training configuration. Cycles/reference chains and device
|
|
uploads directly into a derived dataset are rejected. Original ingestion continues
|
|
unchanged in the Manager. The 24 usable-hour minimum stays in force.
|
|
|
|
Models/windows are stored separately for v1/v2 and record their timing policy. An
|
|
existing selected model/family is not automatically switched by this release.
|
|
The current SDL request still uses the strict current-state requirements; no
|
|
historical bridge grants a future SDL schedule or a live battery permission.
|
|
|
|
## Tests and release
|
|
|
|
254 isolated Python tests passed (219 previous + 35 new including simulated
|
|
installation/recovery). Includes the actual service pipeline from referenced
|
|
observations to model and optimizer using synthetic records. No new target-container
|
|
or field-history evaluation has been run with this release yet; do not infer an
|
|
improved real coverage percentage or production acceptance from unit tests.
|
|
Evidence: /home/agent/services/qa/history-timing-20261003/ALL_TEST_RESULTS.txt.
|
|
|
|
Prepared command on enelix-services (root required for Docker):
|
|
|
|
python3 /home/agent/services/netplan-v4-shadow/commissioning/deploy_history_timing.py \
|
|
--plant e3a08f9e-af12-4695-99bd-8b51c0520021 --apply
|
|
|
|
Default without --apply validates staged source only. The apply path backs up source
|
|
files, builds and runs the exact target tests, backs up the V4 SQLite database, and
|
|
recreates ONLY the V4 service. A failed test restores source without a service
|
|
restart; failed post-deploy validation attempts the previous image and preserves
|
|
additive data. Concurrently modified files are not silently overwritten.
|
|
|
|
No portal/forecast/tariff/Symcon restart, no new sensor requests, no change to
|
|
161.44 kWh / 39 kW, SOC accounting, old raw samplers or actuator permissions.
|
|
The new dataset is registered but not selected for the active forecast. A root
|
|
execution and successful report are still required to install it. Previous release
|
|
manifests remain historical records; do not bypass them to reapply an older build.
|