A data-driven HMI/SCADA web controller that turns live Automation System state and Plant Factory exports into operator-ready views, controls, trends, alarms and diagnostics.
Deutsch · Quick start · Architecture · Release evidence · Security
Automation Control (AFC) is an HMI/SCADA “Virtual Web Controller” for the Automation System. Sensors, actuators, process states, trends, alarms, operations, diagnostics and metrics are generated from a generic state register and Plant Factory/V9 contracts rather than hard-coded per screen.
The result is a single browser interface that can run against the included simulator, a contract-faithful fake proxy or the real Proxy Gateway. Event data flows over WS/WSS; HTTP is limited to bootstrap, static content, health, metrics and snapshot operations.
- Operators and automation engineers who need a unified plant view.
- HMI/SCADA teams integrating Plant Factory SVG and HMI exports.
- System integrators connecting browser control to Proxy, Master and Worker nodes.
- Platform and SRE teams observing the field-to-browser event chain.
- Engineering teams that need a framework-free, auditable web client and server.
- Observe a complete live plant with semantic SVG values, styles and animations.
- Generate actuator controls and process-state panels dynamically from runtime data.
- Correlate commands through acceptance, execution and terminal readback states.
- Inspect live/history trends, alarms, operations, logs and end-to-end metrics.
- Switch between German, English, French, Spanish and Japanese at runtime.
- Deploy locally, with Docker Compose, or through Helm/Kustomize manifests.
| Live plant and inspector | Dynamic process control |
|---|---|
![]() |
![]() |
| Semantic SVG entities, live values, zoom and context. | Process-state and actuator controls generated from the register. |
The repository contains 33 release screenshots covering ten views across
Dark/DE, Light/EN, Dark-Contrast/JA and interaction workflows in
docs/screenshots/.
| Capability | Operational value | Implemented evidence |
|---|---|---|
| Generic state register | One monotonic entity/history/document model feeds every view. | Put/patch/delete, history, listeners, snapshots and resync tests. |
| Event-only live transport | Sensor and actuator updates avoid polling loops in the browser. | afc.ws.v1, coalesced deltas, filters and reconnect. |
| Plant Factory adapter | HMI UI v1/v2, projects, bundles, SVG, styles, alarms and actions normalize into one plant model. | Demo and original PF project adapter tests. |
| Proxy Gateway adapter | Session/Bearer auth, CSRF, control/events sockets, replay cursor and resync. | Fake-proxy contract and complete proxy-mode tests. |
| Command lifecycle | Operator intent remains correlated until CONFIRMED, FAILED or another terminal result. |
Command router and operation E2E tests. |
| Backpressure control | Critical frames survive while non-critical deltas can be dropped under pressure. | Bounded client queues and explicit regression coverage. |
| Observability | Prometheus plus JSON/WS metrics cover ingest, fan-out, browser render, RTT and operations. | /metrics, /api/v1/metrics and Metrics view. |
| Functional implementation | Python and Vanilla JS remain class-, decorator-, lambda- and arrow-free. | Python and TypeScript AST gates. |
Important
Version 0.0.1 is an integration/pilot release. Simulator and documented
proxy-contract paths are tested; real Proxy Gateway interoperability,
target PKI, container/cluster deployment, load and plant-specific safety must
be qualified in the intended environment before operational use.
flowchart LR
Browser["Browser<br/>Vanilla JS · 10 views"] <-->|"HTTP(S)<br/>bootstrap · REST"| Web["Control Web listener"]
Browser <-->|"WS(S) · afc.ws.v1"| Hub["WS hub"]
Hub <--> Register["State register<br/>entities · history · documents"]
Hub --> Router["Command router"]
Ingest["Event ingest"] --> Register
Plants["Plant registry + PF adapter"] --> Register
Persist["Snapshot persistence"] <--> Register
Upstream["Upstream manager"] --> Ingest
Router --> Upstream
Upstream --> Simulator["Simulator"]
Upstream --> Proxy["Proxy Gateway"]
Proxy --> Master["Master"] --> Worker["Worker / field I/O"]
The detailed listener split, data lifecycle, backpressure, adapter boundary,
security model, deployment paths and performance instrumentation are in
Architecture. Standalone Mermaid source:
automation-control-components.mmd.
- Linux and Python 3.11+ for the documented deployment workflow.
aiohttp,websocketsandPyYAMLfromrequirements.txt.- Optional Chromium/Playwright for browser regression and screenshots.
git clone https://github.com/Centaurus-X/Automation_Control.git
cd Automation_Control
./run.shOpen http://localhost:8080. The default uses the included simulator and a
separate browser WebSocket listener on ws://localhost:8081/ws/afc/v1.
export AFC_PROXY_PASSWORD='replace-with-secret-source'
export AFC_UPSTREAM__MODE=proxy
export AFC_UPSTREAM__PROXY__WSS_URL=wss://proxy.example.org:8443
export AFC_UPSTREAM__PROXY__HTTPS_URL=https://proxy.example.org:8444
export AFC_UPSTREAM__PROXY__ORIGIN=https://proxy.example.org:8444
./run.shInstall the gateway CA and review every URL, origin, identity and token source before connection. See Deployment.
| Path | Status | Intended use |
|---|---|---|
| Local Python service | Tested | Development, integration and pilot operation. |
| Fake Proxy Gateway | Tested | Contract and reconnect testing without a Control Plane. |
| Docker / Compose | Supplied, target build required | Reproducible container deployment. |
| Helm / Kustomize | Rendered/validated, no recorded live-cluster rollout | Cluster integration after target acceptance. |
| Active/standby | Preview | Manual failover evaluation; no leader election. |
./test_all.sh
# Optional complete browser capture:
./test_all.sh --browserThe recorded Linux release validation reports:
- 41 Python and 24 JavaScript files with zero functional-style violations.
- 34 functional unit/E2E tests with zero failures.
- 30 Chromium screenshots across language/theme/view combinations.
- Zero browser console errors/warnings and zero failed requests in the recorded smoke run.
- Internal SHA-256 manifest for all original release files.
- Original byte-exact release ZIP and sidecar attached to the GitHub release.
These are project-maintained records, not independent certification. The exact scope and open gates are documented in Test and release.
Register changes are coalesced every delta_flush_ms (default 50 ms) before
fan-out. Per-client queues are bounded; only non-critical frames are eligible
for backpressure drops. Per-entity history uses bounded ring buffers.
The product exposes histograms and counters for upstream event age, ingest, fan-out, browser render, end-to-end sensor latency, RTT, command handling, operation completion and batch size. No universal latency or client-capacity claim is made—measure with synchronized clocks, representative event rates, real SVG complexity and the target Proxy/Worker path. See Metrics.
afc.py CLI and process entry point
src/library/ config, JSON, logging, metrics, rings, SVG, TLS
src/adapter/ PF/V9 adapters, simulator and Proxy upstream
src/core/ register, ingest, routing, WS hub and server
src/web/ Vanilla JS/CSS/HTML UI and five languages
cfg/ service config, plants, shards and certificate stores
deploy/kubernetes/ Helm and Kustomize deployment layer
test/ 34 functional regression tests
docs/screenshots/ release screenshots and interaction evidence
- Active/standby is a preview with static roles and manual failover.
- Docker and a real Kubernetes target were not part of the recorded development release gate.
- Production Proxy Gateway differences must be checked during first integration.
- Browser-reported E2E timing depends on clock synchronization and offset estimation.
- No high-load multi-browser capacity test or universal performance guarantee is published.
- ARIA, focus, keyboard and contrast features exist; a screen-reader audit was not recorded.
- Operator controls do not replace plant-specific safety logic, interlocks or authorization.
- Architecture and technical diagnosis
- Original German architecture
- Protocol
afc.ws.v1 - Adapter guide
- Deployment
- Metrics
- HA preview
- Test and release
- Original release README
Use GitHub private vulnerability reporting; never expose credentials, tokens, certificates, plant data or vulnerability details in public issues. Read SECURITY.md.
Read CONTRIBUTING.md. The public project is licensed under GNU GPL v3.0 only. Separate commercial licensing or engineering work may be discussed for integration, deployment, hardening and validation; see Commercial licensing.
Years of automation experience, expressed as a calm operator surface: every visible state should have an origin, every command a lifecycle, and every boundary a name.

