RailSpotting receiver
The RailSpotting receiver listens to railroad radio and reports what it hears to RailSpotting, where trains appear on the live map and in alerts. It runs on small Linux machines (and as a macOS menu bar app) with one to four RTL-SDR dongles and, optionally, a Uniden SR30C scanner.
It recognises:
- Voice calls on the railroad’s road, dispatcher and yard channels.
- End-of-train (EOT) devices, decoded: unit number, brake pipe pressure, motion and more.
- Head-of-train (HOT) transmissions, detected and timed.
- Defect detector announcements: which detector, and whether it reported “no defects”.
- ITC (220 MHz PTC), decoded: base stations, and the state of the signals along the line as trains pass. It stays on the receiver unless the owner turns upload on.
Railroad radio basicsHow trains use radio: road and dispatcher channels, EOT, HOT and defect detectors.
How the receiver identifies signalsWatching many channels at once, decoding EOT, recognising detectors.
How reports reach RailSpottingLinking, the signed API, the offline outbox, and what is sent.
EOT and HOT (457 and 452 MHz)The end-of-train and head-of-train devices: the signal, the EOT packet and its fields, and how they are decoded.
ITC (220 MHz PTC)The train control radio network: channels, the protocol, wayside signal states, and what is shared.
SDR and receiver capabilitiesDongle jobs, windows, radio checks, and the SR30C scanner.
InstallingDebian or Ubuntu, a Proxmox container, or the macOS app.
Antennas and RFAntennas, diplexers, splitters, coax, preamps and FM filters.
Tested hardwareDongles, scanners and computers in use today.
Good to know
- A receiver reports to RailSpotting, a service that is not open source. You link a receiver to your RailSpotting account with a code it shows; see Installing.
- Everything on the radio side is in this repository and can be tried without hardware:
railspotting-receiver run --simulatefeeds it synthetic radio traffic.