docs(index): OtOpcUa batch #679–#680 — historian aggregate parity, Gateway Average/Count refused

This commit is contained in:
Joseph Doherty
2026-10-12 08:38:50 -04:00
parent 17cb91a315
commit aa7093b53b
@@ -260,3 +260,21 @@ AddRoute of the dev Mac (`oee-tagdump-mac`, `10.181.206.245.1.1`) on the two tes
- OpcUaClient-backed tags recover much faster after an upstream restart.
- Only reverse reads change shape (ScadaBridge issues no processed or event history reads).
- HistoryUpdate is refused off-Primary.
- **2026-10-12 batch #679–#680 (both closed; OtOpcUa `8ebee2ac`).** Historian processed reads. Live gate 8 passed on
docker-dev (SqlServer + QuestDb, central-1/2); it found one defect introduced by #680, fixed before push.
- **#679 (Gateway backend):** ⚠️ `Average` and `Count` now return `BadAggregateNotSupported` — AVEVA has no arithmetic
mean or sample count (they used to return AVEVA's time-weighted average and rollover-counter increase).
`TimeAverage` → `TimeWeightedAverage` is served instead. Magnitude unverified live (VPN).
- **#680 (SqlServer/QuestDb), aligned to Part 13 / the SDK `AggregateCalculator`:**
- ⚠️ TimeAverage/Total go Uncertain when any part is Uncertain / bridged across Bad / extrapolated / not covered —
a live tag's latest interval is now Uncertain. Total integrates only the covered part.
- ⚠️ PercentGood/PercentBad are duration-based (were sample counts) and row-capped by `MaxTimeWeightedRawRows`.
- ⚠️ TimeAverage2/Total2 no longer extrapolate past the last sample (Partial, then `BadNoData`).
- ⚠️ Count counts Good samples only; an empty interval inside the data range is `0`/Good. Start/End return the raw
sample (own time/status, null if Bad). End-of-data Partial on the interval holding the last sample.
- Report-by-exception tags read `BadNoData`/Uncertain in trailing intervals until their next sample arrives.
- **Gate defect:** QuestDB opens a separate table reader per CTE reference, so the new Start/End query raced
concurrent writes (~1 in 17k–90k reads failed the node). Now one scan; readers tolerate a missing pick.
- **Follow-ups:** #681 (Gateway per-sample aggregates from raw), #682 (advertise per-backend aggregates), #683
(QuestDB data-range lookup cost), #684 (Average/Min/Max include Uncertain).
- **ScadaBridge impact:** none — it issues no processed history reads.