A YAML-configured OPC-UA server with a layered industrial signal simulator. Models actual process physics — not random noise:
plant state → process dynamics → sensor model → fault injection → OPC UA tags
Run directly without installing — requires only uv:
uvx --from git+https://github.com/oriolrius/opc-ua-demo-server opcua-serverConnect at opc.tcp://localhost:4840/opcua/server/
opcua-server # bundled default plant
opcua-server --config my-plant.yaml # custom config
opcua-server --dump-config > my-plant.yaml # extract default config to customize
opcua-server --help # all optionsThe bundled config simulates a pump-fed tank system with 11 OPC UA nodes:
Objects/Plant/
Machine/ State
Pump/ Speed, Current, LinePressure
Tank/ Level, InletFlow, OutletFlow
Bearing/ Temperature, VibrationRMS
Status/ QualityFlag, AlarmCode
See docs/default-plant.md for the full address space tree, node IDs, steady-state values, alarm thresholds, and fault scenarios.
Everything is defined in a single YAML file — address space structure, process physics, sensor noise, fault injection, and alarms. No code changes needed to reshape the OPC UA tree or add variables.
See docs/configuration.md for the complete reference with examples.
uv sync # install dependencies
uv run opcua-server # run
uv run pytest tests/ -v # test