Files
lmxopcua/docs/drivers/Historian.Wonderware.md
T
Joseph Doherty 2e4ccf7fe9 chore(localdb): phase-2 DoD sweep
Build: 0 errors solution-wide, and 0 warnings from every project this branch
touches. The ~816 solution-wide warnings are pre-existing xUnit1051 /
OTOPCUA0001 / CS86xx in untouched driver + client test projects.

Tests: full solution run compared against a full run on a detached worktree at
the pre-branch baseline 2e46d054. The two failure SETS are identical -- all 13
tests, same names, zero new failures. Net +26 tests: +3 Core.AlarmHistorian
(drain gate), +6 Runtime (role view), +17 Host.IntegrationTests (migrator +
convergence). Set comparison rather than counts, because the suite carries
standing environment- and load-dependent failures a count would hide.

The greps found real drift Task 6 missed -- eight live sites still naming the
deleted SqliteStoreAndForwardSink, including the AdminUI /alarms/historian
panel text, which is user-visible, and a <see cref> in HistorianAdapterActor
that resolved to nothing without warning. All repointed at
LocalDbStoreAndForwardSink; CLAUDE.md's alarm-history paragraph now also
records the LocalDb buffer and the primary-gated drain, and drops DatabasePath
from the knob list. docs/AlarmTracking.md still promised an
AlarmHistorianOptions.Validate() startup warning for a relative DatabasePath
and an empty SharedSecret; both branches are gone, so it now says so.

Code references to AlarmHistorian:DatabasePath reduce to exactly two intentional
ones: AlarmSfLegacyMigrator.LegacyPathKey and its test. No `new SqliteConnection`
remains anywhere in Core.AlarmHistorian.

Recon doc gains the durable verification record: guard-deletion evidence for
both vacuous passes, the two exact-set replicated-table pins (both assert set
equality, so an added or a dropped registration fails), and the baseline test
comparison with a per-failure account of why each of the 13 is not this
branch's.

Stops here per the plan. Task 8's live gate needs explicit go-ahead; nothing on
this branch is to be merged.

Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW
2026-07-21 05:03:57 -04:00

2.6 KiB

Wonderware Historian Backend — RETIRED

This backend has been retired. The bespoke Wonderware TCP/ArchestrA historian sidecar (OtOpcUaWonderwareHistorian) and its Driver.Historian.Wonderware* projects — plus the vestigial Historian.Wonderware driver type — were removed. HistorianGateway is now the sole historian backend for OtOpcUa (read, alarm-write, and continuous historization).

What replaced it

OtOpcUa now consumes the ZB.MOM.WW.HistorianGateway sidecar through the Gitea-feed ZB.MOM.WW.HistorianGateway.Client gRPC package (historian_gateway.v1), behind the IHistorianGatewayClient seam in ZB.MOM.WW.OtOpcUa.Driver.Historian.Gateway:

  • HistoryReadGatewayHistorianDataSource over the ServerHistorian appsettings section.
  • Alarm historyGatewayAlarmHistorianWriter (the gateway SendEvent path) behind the durable LocalDbStoreAndForwardSink; alarm-history ReadEvents needs the gateway running RuntimeDb:EventReadsEnabled=true.
  • Continuous historization → a crash-safe FasterLog outbox + ContinuousHistorizationRecorder draining to the gateway's WriteLiveValues (ContinuousHistorization section); needs the gateway running RuntimeDb:Enabled=true.
  • Tag provisioningAddressSpaceApplier fires a non-blocking IHistorianProvisioning EnsureTags hook for added historized tags.

The gateway API key must carry the scopes historian:read, historian:write, historian:tags:write.

Where to read now

  • ../Historian.md — the full historian guide (read path, alarm path, continuous historization, config keys, migration note).
  • README.md — driver / back-end overview.
  • ../ServiceHosting.md — deployment (the historian backend is the external HistorianGateway, not an installed sidecar).

Migration

Deployments that carried the old ServerHistorian Wonderware keys must rename them:

Old (Wonderware) key New (gateway) key
ServerHistorian:Host + :Port ServerHistorian:Endpoint (https://host:5222)
ServerHistorian:SharedSecret ServerHistorian:ApiKey (supply via env ServerHistorian__ApiKey)
ServerHistorian:ServerCertThumbprint ServerHistorian:CaCertificatePath (+ UseTls / AllowUntrustedServerCertificate)

The AlarmHistorian section's old Wonderware connection keys (Host/Port/UseTls/ServerCertThumbprint/SharedSecret) were pruned — remove them; the SQLite store-and-forward knobs are retained and the downstream connection is now sourced from ServerHistorian.