What this template does
A Python tick on the broker drives mixer, filler, and capper. MODBUS_SERVER and OPCUA_SERVER expose those tags on localhost. Client routes poll them onto Plant/#. PostgreSQL stores completed batches. An AGENT reads the namespace.
When to use it
A self-contained bottling lab — no extra simulator process. Point the client hosts at real PLCs when you have them.
BrewerySim.tick → sim/devices/{mixer,filler,capper}/*
├── MODBUS_SERVER MixerDevice 127.0.0.1:1501
├── OPCUA_SERVER FillerDevice opc.tcp://127.0.0.1:4840
└── MODBUS_SERVER CapperDevice 127.0.0.1:1502
↓
MixerM01 / FillerF01 / CapperC01 → Plant/#
**sim**/brewery/batch → PostgreSQL → Plant/Historian/*/Batches
Plant/#
What's inside
