FastAPI server, replaceable JSON config, tests, Dockerfile. Pairs with ATO via spec/interface.md contract. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
857 B
Markdown
45 lines
857 B
Markdown
# ATO ↔ TrainSim interface (v1)
|
||
|
||
Standalone. No ETCS. No ATP. JSON over HTTP.
|
||
|
||
Base URL (TrainSim): `http://trainsim:8080`
|
||
|
||
## TrainSim → ATO reads
|
||
|
||
`GET /train/state`
|
||
|
||
```json
|
||
{
|
||
"speed_mps": 0.0,
|
||
"position_m": 0.0,
|
||
"track_length_m": 1000.0,
|
||
"sim_running": false
|
||
}
|
||
```
|
||
|
||
## ATO → TrainSim writes
|
||
|
||
`POST /train/actuate`
|
||
|
||
```json
|
||
{
|
||
"traction_pct": 0,
|
||
"brake_pct": 0
|
||
}
|
||
```
|
||
|
||
Percent 0–100. Do not send both > 0 (TrainSim clamps brake wins).
|
||
|
||
`POST /sim/start` — start physics tick (empty body)
|
||
|
||
`POST /sim/stop` — pause physics (empty body)
|
||
|
||
Optional (TrainSim logs only): `POST /train/doors` `{ "command": "open" | "close" }`
|
||
|
||
## ATO configuration (env)
|
||
|
||
| Variable | Meaning |
|
||
|----------|---------|
|
||
| `TRAINSIM_URL` | TrainSim base URL |
|
||
| `TARGET_SPEED_MPS` | Cruise target (default 10) |
|
||
| `TICK_MS` | Control period (default 100) |
|