ADS-B Platform Architecture
Table of Contents
System Diagram
┌─────────────────────────────────────────┐
│ 1090 MHz Airspace │
│ ✈ Aircraft broadcasting ADS-B/Mode S │
└─────────────────┬───────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RTL-SDR V4 │ │ NESDR SMArt v5 │ │ (Future) │
│ + Dipole │ │ + 1090MHz Ant │ │ FlightFeeder? │
│ (indoor) │ │ (rooftop) │ │ │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ dump1090 │ │dump1090-mutabil │
│ hydra:30003 │ │ pi:30003 │
└────────┬────────┘ └────────┬────────┘
│ │
│ SBS1 Protocol │
│ (BaseStation) │
└───────────┬───────────────┘
│
▼
┌───────────────────────┐
│ adsb-processor │
│ v1.4.0 │
│ │
│ • Multi-receiver │
│ • Deduplication │
│ • Callsign tracking │
│ • OpenSky enrichment │
└───────────┬───────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐
│ SQLite DB │ │ sbs-logger │ │ adsb-server │
│ /mnt/usb/adsb/ │ │ (CSV raw) │ │ :8081 │
│ │ │ │ │ │
│ • aircraft │ │ • Timestam- │ │ • /data.json │
│ • metadata │ │ ped logs │ │ • /aircraft- │
│ • callsign_hist │ │ • Receiver │ │ metadata/:id │
│ • positions │ │ attrib │ │ • /opensky- │
└─────────────────┘ └─────────────┘ │ bincraft │
└────────┬────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ adsb-tracker │ │ WebSocket │ │ External │
│ (Web UI) │ │ :8083 │ │ Feeds │
│ │ │ │ │ │
│ • Leaflet map │ │ • Real-time │ │ • FlightAware │
│ • Aircraft list │ │ updates │ │ (via pi) │
│ • Selection │ │ • Push notif │ │ • OpenSky │
│ • Enrichment │ │ │ │ (API) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Data Flow
Inbound (Reception)
- Aircraft transmit on 1090 MHz
- SDR dongles receive RF signals
- dump1090 decodes to SBS1 format
- adsb-processor aggregates multiple sources
Processing
- Deduplicate messages from multiple receivers
- Track aircraft state (position, altitude, speed)
- Maintain callsign history for swap detection
- Enrich with OpenSky metadata
Storage
| Store | Purpose | Retention |
|---|---|---|
| SQLite (aircraft) | Current state | Permanent |
| SQLite (metadata) | Aircraft info | Permanent (cached) |
| SQLite (positions) | Track history | 7 days |
| CSV logs | Raw messages | 180 days |
Outbound (Display/Feed)
- Web UI for local visualization
- WebSocket for real-time updates
- PiAware feeding to FlightAware
Network Topology
Internet
│
▼
┌─────────────────┐
│ Tailscale │
│ (VPN mesh) │
└────────┬────────┘
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ hydra │ │ pi │ │ laptop │
│ .86.30 │ │ .86.101 │ │ (remote)│
└─────────┘ └─────────┘ └─────────┘
│ │
│ LAN │
└──────┬──────┘
│
┌──────────────┐
│ Router │
│ 192.168.86.1│
└──────────────┘
Port Allocation
| Port | Service | Protocol |
|---|---|---|
| 30003 | dump1090 SBS1 | TCP |
| 8080 | dump1090 HTTP | HTTP |
| 8081 | adsb-server | HTTP |
| 8083 | adsb-websocket | WS |
