Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Automation Control

Automation Control showing a live reactor HMI with semantic SVG bindings

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.

Quality Release Version Maturity License: GPL-3.0-only

Deutsch · Quick start · Architecture · Release evidence · Security


One live model instead of hand-built screens

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.

Who it is for

  • 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.

What you can achieve

  • 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.

Product tour

Live plant and inspector Dynamic process control
Live plant Dynamic controls
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/.

Engineering capabilities

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.

Architecture at a glance

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"]
Loading

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.

Quick start

Requirements

  • Linux and Python 3.11+ for the documented deployment workflow.
  • aiohttp, websockets and PyYAML from requirements.txt.
  • Optional Chromium/Playwright for browser regression and screenshots.
git clone https://github.com/Centaurus-X/Automation_Control.git
cd Automation_Control

./run.sh

Open http://localhost:8080. The default uses the included simulator and a separate browser WebSocket listener on ws://localhost:8081/ws/afc/v1.

Connect to a Proxy Gateway

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.sh

Install the gateway CA and review every URL, origin, identity and token source before connection. See Deployment.

Deployment options

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.

Validation and evidence

./test_all.sh
# Optional complete browser capture:
./test_all.sh --browser

The 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.

Performance and observability

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.

Repository map

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

Known boundaries

  • 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.

Documentation

Security

Use GitHub private vulnerability reporting; never expose credentials, tokens, certificates, plant data or vulnerability details in public issues. Read SECURITY.md.

Contributing and license

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.

About

Data-driven HMI/SCADA web control with live SVG plants, dynamic operations, trends, alarms, diagnostics and end-to-end metrics.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages