// the find
FreeOpcUa/opcua-asyncio
OPC UA library for python >= 3.10
Full OPC UA client and server implementation in Python using asyncio, covering the binary protocol, subscriptions, encryption, history, and custom structures. It's the go-to Python option for industrial automation work where you need to talk to PLCs, SCADA systems, or other OPC UA endpoints. Pre-1.0, actively maintained, and battle-tested against real industrial stacks like Beckhoff, Kepware, and Prosys.
- Both client and server in one library with a clean async API, plus a sync wrapper that actually works for codebases not on asyncio yet
- High test coverage (95%+) with a large, realistic test suite covering crypto, subscriptions, history, custom structures, and HA client scenarios
- Protocol code is autogenerated from the official OPC UA XML spec, so UA type fidelity is good and keeping up with spec updates is tractable
- HA client with virtual subscriptions and reconciliation logic is a genuinely useful addition for production deployments against redundant servers
- Still pre-1.0 with explicit warnings about API changes, and things like argument renames have already bitten users upgrading between minor versions
- Missing features matter in real deployments: no WebSocket transport, no XML protocol, no proper alarm/condition support, and automatic reconnection is described as 'maybe'
- Security model is weak on the server side — one hardcoded admin user, everything else read-only, no role-based access control worth speaking of
- PubSub support exists but feels bolted on; UADP over UDP only, no MQTT transport, and the implementation is not covered by the same test depth as the core client/server