RTL-SDR ADS-B Feeder Station
In this lab, students construct and operate an automated radio receiver station to capture, decode, and visualize real-time aviation telemetry using Software Defined Radio (SDR) technology. Working with single-board computing platforms and USB-based radio receivers, students deploy an antenna tuned to 1090 MHz to intercept Mode S Automatic Dependent Surveillance-Broadcast (ADS-B) signals transmitted directly from airborne transponders. Students configure a containerized processing pipeline that demodulates raw RF signals, calculates aircraft positions and multilateration (MLAT) timing data, renders live local radar track maps, and routes real-time data feeds over TCP/IP network protocols to international flight aggregators. Through this practical deployment, students gain hands-on experience with RF signal propagation, digital demodulation, software-defined radio architectures, embedded Linux system administration, Docker container orchestration, and networked telemetry streaming.
Uploaded by demo on 2026-09-03 · ready · Electronics · Original source ↗
Files: README.md · docker-compose.yml · docker.image.versions
Readiness checks
-
complete 2026-09-03 18:34 🛡 Cybersecurity: Do not place on an open network · 6 findings 7 searches · 13 pagesview · PDF
Latest report — 2026-09-03 18:34
Readiness: RTL-SDR ADS-B Feeder Station
Verdict: Ready with caveats · 2026-09-03 · est. parts cost $109–$137 (core station; each optional extra SDR adds $36–$95) Cybersecurity — software & network: Do not place on an open network
This is the cold check — the first readiness report for this lab, so it establishes the baseline every later report will measure drift against. All six bill-of-materials lines are commercial off-the-shelf retail items with no manufacturer part numbers, so the check was six retail price searches plus two manufacturer product pages read in full. Every line is buyable today from at least two sellers, and a working station comes to roughly $109–$137. Two things keep this off a clean "Ready". First, the specified SDR dongle (RTL-SDR Blog V4) turns up only in marketplace and reseller listings, priced from $33.24 to $83.00 for the same item, with no authorized-distributor listing to anchor the price — awkward for a purchase order. Second, no antenna listing found this run documents the VSWR ≤ 1.5:1 the lab asks for, and the one antenna product page read in full (the cheapest option, at $8.95) states 2:1 — below the lab's own spec.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| RTL-SDR Blog V4 (primary SDR) | Same dongle priced $33.24 to $83.00 across marketplace and reseller listings; no authorized-distributor listing found this run | Budget about $52 from the mainstream listing ($51.80 · Walmart (HTOOL)), or buy the verified alternative — Nooelec NESDR SMArt v5, $44.95 · Nooelec, sold first-party and listed as supported by the feeder project (see Substitutes) |
| 1090 MHz ADS-B antenna | No listing checked documents the lab's VSWR ≤ 1.5:1; the cheapest option ($8.95 · Nooelec) states VSWR 2:1 on its own product page, and is a 3 dBi 11 cm whip rather than the 5.5 dBi outdoor collinear the lab describes | Ask the seller for the VSWR figure at 1090 MHz before ordering an outdoor collinear. Treat the $8.95 whip as a bench-only starter antenna, not the specified part |
Cybersecurity — software & network
Do not place on an open network — The configuration UI binds every interface with authentication off unless someone enables it, and the feeder's other services are unauthenticated by design, so the station is only safe on an isolated segment.
| Component | Version | How known | Support status |
|---|---|---|---|
| adsb-feeder-image (ADS-B Feeder project code) | not determined | unpinned (app-install.sh clones https://github.com/dirkhh/adsb-feeder-image.git and builds from the main branch unless the installer passes -t |
— |
| adsb-setup (Flask web configuration UI, port 1099) | not determined | unpinned (the adsb-setup directory holds only .py files and templates - no manifest or lockfile (list_repo_files, 10 entries, no manifest candidates); its Python dependencies come from the repository root pyproject.toml) | — |
| Flask (web framework behind the setup UI) | not determined | unpinned (declared twice in fetched/01-pyproject.toml, once with no constraint and once as a >= range, so no exact version is fixed) | — |
| Python dependency group (requests, cryptography, shapely, humanize, pyserial, python-kasa, aiohttp, FastAPI, uvicorn, slowapi and others) | not determined | unpinned (31 of 31 rows in fetched/01-pyproject.toml carry no constraint or only a >= floor) | — |
| Docker engine (container runtime) | not determined | unpinned (the install path pipes get.docker.com to a root shell, so whatever version is current is installed (fetched/03-app-install.sh)) | — |
| alpine (base container image) | 3.23.3 | read from project (ALPINE_CONTAINER=alpine:3.23.3 in fetched/02-docker.image.versions) | supported until 2027-11-01 |
| ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder (1090 MHz decoder, map and MLAT) | latest-build-931 | read from project (ULTRAFEEDER_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/sdr-enthusiasts/docker-reversewebproxy (reverse proxy in front of the web UIs) | latest-build-745 | read from project (WEBPROXY_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/sdr-enthusiasts/docker-dump978 (978 MHz UAT decoder) | latest-build-795 | read from project (UAT978_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/sdr-enthusiasts/docker-piaware (FlightAware feeder) | latest-build-658 | read from project (FA_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/sdr-enthusiasts/docker-flightradar24 (Flightradar24 feeder) | latest-build-850 | read from project (FR24_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/amir20/dozzle (container log viewer) | v10.6.2 | read from project (DOZZLE_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/projecthorus/radiosonde_auto_rx (weather balloon decoder) | v1.8.2 | read from project (RADIOSONDE_CONTAINER in fetched/02-docker.image.versions) | — |
| ghcr.io/plane-watch/docker-plane-watch (Plane.watch feeder) | v0.0.9 | read from project (PW_CONTAINER in fetched/02-docker.image.versions) | — |
| Host operating system image (Raspberry Pi OS / DietPi / Debian in the VM images) | not determined | not determined (the lab's materials state no version or codename for any base image, and none was fetched this run) | — |
| CustomPiOS (image build framework) | not determined | not determined (referenced by repository URL only, with no version or tag, in the project README (snapshot)) | — |
| Raspberry Pi Imager (SD card writing utility) | not determined | not determined (the lab points at the releases page without naming a version (snapshot)) | — |
| Base Linux host packages installed with apt | not determined | unpinned (installed with unpinned apt commands by dietpi-software or by the operator; app-install.sh itself states it assumes the dependencies are already installed (fetched/03-app-install.sh)) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| adsb-feeder-image install path | The documented install runs code straight from the internet as root - the project's app-install.sh is piped from the main branch into a root shell, and the same instructions install Docker by piping get.docker.com into another root shell - so whatever those pages serve at that moment runs with full privileges on the host. | posture | Mitigation only - download both scripts, read them, and install from a fixed release tag (app-install.sh accepts -t |
| adsb-setup (web configuration UI) | The configuration web UI listens on every network interface and its password protection is optional: when it is not switched on, the app treats every visitor as logged in, so anyone who can reach the feeder on the network can reconfigure the station. | posture | Mitigation only - switch on the built-in web UI password before the device leaves the bench, and keep the feeder on an isolated network segment. |
| Feeder network services | Sixteen raw data ports (30001 to 31006) plus the map interface on 8080 and the setup interface on 1099 are published on the host's own network interfaces, and none of them asks for a credential. | posture | Mitigation only - put the feeder on its own VLAN or behind a host firewall and expose only the map port to the classroom. |
| First-boot Wi-Fi hotspot | With no network configured, the feeder brings up an open Wi-Fi access point whose web page accepts the site's Wi-Fi name and password, so anyone within radio range during setup can join it and read or set that configuration. | posture | Mitigation only - configure the feeder over wired Ethernet where possible, or complete the hotspot step away from public areas and confirm the hotspot is gone once the device is on the network. |
| Outbound aggregator feeds | The station's purpose is to push decoded aircraft, ship and balloon data to external aggregators, and each enabled aggregator receives the station's configured location along with the data. | posture | Mitigation only - enable only the aggregators the course needs, and decide deliberately what location the station publishes before enrolling it. |
| Python dependency group (pyproject.toml) | Dependencies unpinned: 31 of 31 in pyproject.toml - the network-facing web UI's Flask, requests and cryptography carry no version constraint at all, so the versions that end up installed have no checkable security state and two builds of the same lab can differ. | posture | Mitigation only - pin the runtime dependencies or add a lockfile, then re-run this check against it. |
What this means for your lab
This station is built to be reachable: it puts a configuration website and about sixteen data ports on your network, and out of the box the configuration website has no password - the software only asks for one if someone turns that option on. Anyone else on the same network can therefore open it and change how the station is set up, including settings that run commands on the little computer itself. During first-time setup the device also broadcasts its own open Wi-Fi network so you can hand it your Wi-Fi password, which anyone in range can join while it is up. The practical answer is not to put this on the open campus or classroom network: give it its own segment or a firewalled port, turn on the web interface password immediately, and prefer wired Ethernet for setup. Talk to campus IT before connecting it, both about the isolated segment and about the fact that the station continuously sends aircraft data - and its own location - out to public aggregators. Note also that nothing here has been checked for known vulnerabilities: the Python packages are installed unpinned so there is no version to look up, and the container images, though pinned, use build tags no vulnerability database tracks. That is an unknown, not a clean bill of health.
Not checked
- 28 pinned container images in docker.image.versions (ultrafeeder, dump978, piaware, flightradar24, acarshub and the rest): container build tags such as latest-build-931 map to no package ecosystem, so no vulnerability database can be queried for them; the tags are pinned, which is good practice, but pinned is not the same as checked
- Host operating system image (Raspberry Pi OS / DietPi / Debian): no version or codename is stated anywhere in the lab's materials, so neither a support-status nor an advisory lookup is possible
- Python dependencies declared in pyproject.toml: unpinned - there is no exact version to check against the advisory database
- Docker engine: installed by get.docker.com at whatever version is current; no version to check
- CustomPiOS image build framework: referenced without a version or tag; build-time tooling with nothing pinned to look up
- Raspberry Pi Imager: no version stated in the lab's materials
- Base Linux host packages installed with apt: installed unpinned from the distribution's repositories; the versions depend on the day the image is built
Parts
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Single-board computer — Raspberry Pi 4 Model B, 2 GB | BCM2711 quad-core ARMv8, 85 × 56 mm, 5.0–5.25 V via USB-C | readily available | listed | $55.00 · PiShop USA | PiShop USA — only listing in evidence that states the 2 GB variant; $45.00 · CanaKit lists "Raspberry Pi 4 Model B" without stating RAM |
| 5 V DC system power supply — official Raspberry Pi 15.3 W USB-C | AC wall adapter, 100–240 V in, 5.1 V ±5% / ≥ 3.0 A out, captive USB-C cable | readily available | listed | $8.00 · DigiKey | DigiKey; also $8.80 · PiShop USA. Third-party 5 V/3 A adapters run $5.95–$7.95, but the lab warns that cheap charger plugs cause MLAT timing failures |
| Primary USB SDR receiver (1090 MHz) — RTL-SDR Blog V4 | RTL2832U + R828D/R860, USB-A dongle, female SMA, 1 PPM TCXO, 250–450 mA on the 5 V USB rail | available; marketplace-priced | listed | $51.80 · Walmart (HTOOL) | Walmart marketplace seller HTOOL; cheapest exact match is $33.24 · eBay seller (individual eBay seller). The feeder project's supported-hardware page lists the v3 and v4 dongles and notes the v3 is slightly better for ADS-B |
| 1090 MHz ADS-B tuned antenna | 50 Ω, tuned 1090 MHz, VSWR ≤ 1.5:1, SMA-male or N-female | available; spec compliance not verified | listed | $8.95 · Nooelec | Nooelec 3 dBi whip — its product page states VSWR 2:1, below the lab's ≤ 1.5:1. Next options: $14.99 · Crew Dog Electronics (5 dBi set) — VSWR not stated in any evidence |
| MicroSD flash storage card — 16/32 GB Class 10 UHS-I, A1/A2 | 11 × 15 × 1 mm µSD, 3.3 V from the board, sustained write ≥ 10 MB/s | readily available | listed | $6.00 · Lensrentals | Lensrentals — Kingston Canvas Select Plus, one of the two cards the lab names. Cheapest: $4.00 · SHI International (Adata 32 GB Premier Pro UHS-I U3). No listing states the A1/A2 application class |
| Optional secondary protocol SDR dongle(s) and antenna(s) — 0 to 4 | RTL2832U USB-A dongle plus band-matched antenna; each adds 250–500 mA to the 5 V rail | readily available (optional) | listed | $94.94 · DigiKey | DigiKey — RTL-SDR Blog V3 with dipole antenna kit; the only authorized-distributor listing in this run, at roughly a 40% premium over marketplace kits. Dongle only: $35.99 · MTools Tec |
Substitutes
| For part | Substitute | Differences | Verified | Judgment |
|---|---|---|---|---|
| RTL-SDR Blog V4 (primary SDR) | Nooelec NESDR SMArt v5 — $44.95 · Nooelec | Same RTL2832U demodulator and R820T2/R860 tuner the lab requires; 0.1–1750 MHz covers 1090 MHz; 0.5 PPM TCXO exceeds the lab's ≤ 1 PPM requirement (better); female SMA input as specified; same 5 V USB bus power, no supply-rail change. One real difference: the product page lists no bias-tee, where the V4 has a software-switched 4.5 V bias-tee — if a mast-mounted preamp is powered over the coax, this dongle cannot feed it (Nooelec's SMArTee variant is the bias-tee model, also listed as supported; its price and stock were not checked this run) | verified: demodulator IC, tuner IC, frequency range, TCXO rating, antenna connector type (Nooelec product page fetched this run); supported-by-project status (adsb.im/supported fetched this run); price (shopping evidence). not verified: absence of a bias-tee (inferred from the page not listing one), enclosure dimensions, current draw | Acceptable as a drop-in for 1090 MHz ADS-B reception, and preferable if you need a first-party seller rather than a marketplace listing — unless the build powers an external preamp over the coax |
| 1090 MHz ADS-B tuned antenna | Nooelec 1090 MHz ADS-B Antenna, 3 dBi, SMA — $8.95 · Nooelec | Centre frequency 1090 MHz as required; male SMA mates with the dongle's female SMA; VSWR "2:1 or better" against the lab's ≤ 1.5:1 — falls short of a stated requirement; 3 dBi against the 5.5 dBi example — falls short; 11 cm portable whip, not a mast-mounted outdoor collinear | verified: centre frequency, VSWR figure, gain, connector gender, physical size (Nooelec product page fetched this run). not verified: 50 Ω impedance is not stated numerically on the page; no outdoor/weatherproof rating stated | Acceptable only as a bench or indoor starter antenna to get a first signal. Not acceptable as the specified outdoor collinear — a 2:1 match costs receive range against the lab's spec |
Check any substitute against the manufacturer's datasheet before ordering.
Other dependencies
- Feeder image releases page (github.com/dirkhh/adsb-feeder-image/releases/latest) — reachable this run; images are published and the page carries the project's own boot-test table. Two things worth knowing before you buy a board: the project says it has "significantly reduced the number of images provided", and one of the x86-64 virtual-machine images in the current release is marked as having failed its automated boot test. Confirm an image exists for the exact board or VM platform you intend to buy.
- ADSB.im project site (adsb.im/home) — reachable this run; documents the install paths and the aggregators a station can feed.
- ADSB.im supported-hardware page (adsb.im/supported) — reachable this run; its current lists of supported single-board computers and supported SDRs match this lab's bill of materials, and it repeats the warning that the Raspberry Pi Zero W will not work. It also recommends a 5 V/4 A supply for boards more capable than the Pi 3 class.
- ADSB.im hotspot page (adsb.im/hotspot) — not checked this run.
- my.adsb.im redirect service — not checked this run.
- Open ADS-B historical flight data (github.com/adsblol/globe_history) — reachable this run; daily releases under the Open Database License. Optional teaching dataset; nothing in the build depends on it.
- Fabrication — none required. No custom PCB; the station is assembled entirely from off-the-shelf boards, dongles and antennas.
Watch list
- RTL-SDR Blog V4 — the part most likely to move. It has no authorized-distributor listing in this run's evidence, so its price is set by marketplace sellers and swung 2.5x between listings on the same day. Re-price it every check; if the cheap listings vanish, the Nooelec alternative is the fallback.
- 1090 MHz antenna — the lab's VSWR ≤ 1.5:1 requirement is not documented by any listing found. Until a compliant antenna is identified by model, this line is a spec gap rather than a supply gap.
- Raspberry Pi 4 Model B, 2 GB — only one listing in this run confirmed the 2 GB variant, at $55.00, above the $45.00 asked for a board whose RAM the listing does not state. Pi 4 pricing and variant availability have historically been volatile; watch both the price and whether 2 GB boards stay listed as the Pi 5 takes over.
- Power supply headroom — the official 3.0 A supply sits exactly at the lab's stated minimum, while the project's own guidance recommends 5 V/4 A for more capable boards. Adding a second SDR dongle (250–500 mA each) is what will push a marginal build into MLAT instability; plan a powered hub or a larger supply at that point.
- microSD application class — no listing checked states the A1/A2 class the lab asks for. Cards are cheap and plentiful, so this is a specification check at ordering time, not a sourcing risk.
Snapshot What the lab depended on when it was uploaded — the baseline the readiness checks research against.
This lab deploys an RTL-SDR ADS-B Feeder Station based on the adsb.im and sdr-enthusiasts software stack, designed to receive, demodulate, map, and feed 1090 MHz ADS-B (and optional 978 MHz UAT, ACARS, VDL2, HFDL, AIS marine, and Radiosonde weather balloon) RF telemetry to open and commercial flight-tracking aggregators. The physical implementation relies on a host single-board computer (SBC) or x86_64 virtualization host paired with USB Software Defined Radio (SDR) receiver dongles and tuned external antennas. The complete hardware system operates from a single regulated 5 V DC nominal power rail (drawing between 2.5 A and 5.0 A depending on SBC model and attached SDR dongles), which routes 5 V DC over the USB host bus to the SDR tuners; no custom printed circuit board is used.
Bill of Materials
Single-Board Computer (Host Platform)
- Identity: Raspberry Pi 4 Model B (Broadcom BCM2711 quad-core Cortex-A72 ARMv8 64-bit SoC, minimum 1 GB to 2 GB RAM). Explicitly supported alternatives in documentation: Raspberry Pi Zero 2, Raspberry Pi 3 Model A/B, Raspberry Pi 5, Libre Computer AML-S905X-CC (Le Potato), Orange Pi Zero 3, Orange Pi Zero 3 LTS, Orange Pi 5 Plus, FriendlyElec NanoPi NEO3, Hardkernel ODROID-C4, Hardkernel ODROID-XU4, or native/virtualized x86_64 PC. Note that Raspberry Pi Zero W is explicitly documented as incompatible due to ARMv6 architecture limitations.
- Quantity: 1
- Footprint/package: Single-board computer (85 mm x 56 mm standard Raspberry Pi form factor)
- Electrical constraints: Supply voltage 5.0 V to 5.25 V DC via USB-C power port; active supply current requirement 3.0 A minimum (5 V / 15 W). Host USB ports supply 5 V DC at up to 1.2 A shared current to peripherals.
- Substitution latitude: Any 64-bit ARM (ARMv8 / aarch64) or x86_64 host system capable of running Linux (Debian, DietPi, or Armbian) and the Docker container engine. 32-bit ARMv6 platforms cannot be substituted.
- Operated controls: None (headless embedded computer).
- Sourcing plan: retail shopping search: Raspberry Pi 4 Model B 2GB
5V DC System Power Supply
- Identity: Regulated 5.1 V DC / 3.0 A USB-C Power Adapter (e.g. Raspberry Pi 15.3 W USB-C Power Supply, part number KSA-15E-051300HU / SC0218). The documentation specifically mandates a dedicated, stable 5 V power source and warns that cheap charger plugs or unpowered/powered USB hubs cause system instability and MLAT timing failures.
- Quantity: 1
- Footprint/package: External AC-to-DC wall-mount adapter with captive 1.5 m 18 AWG cable terminating in USB Type-C plug.
- Electrical constraints: Input 100 V to 240 V AC, 50/60 Hz; output regulated 5.1 V DC (±5%), continuous output current rating ≥ 3.0 A (15.3 W).
- Substitution latitude: Any stable, low-ripple regulated 5.0 V to 5.25 V DC power supply rated for ≥ 3.0 A continuous output with matching DC plug (USB-C or Micro-USB depending on SBC selected).
- Operated controls: None.
- Sourcing plan: retail shopping search: official Raspberry Pi 4 power supply 5.1V 3A USB-C
Primary USB Software Defined Radio (SDR) Receiver (1090 MHz ADS-B)
- Identity: Realtek RTL2832U-based USB SDR receiver with R820T2/R860 tuner (e.g. RTL-SDR Blog V3 / V4, FlightAware Pro Stick Plus, or AirNav RadarBox FlightStick). Documentation also supports Airspy (R2 / Mini via airspy_adsb) and SDRplay (RSP series via docker-sdrplay-beast1090).
- Quantity: 1
- Footprint/package: USB Type-A dongle enclosed in aluminum shielded casing, RF input via female SMA (or MCX) connector.
- Electrical constraints: Supply rail 5.0 V DC (USB bus-powered); current consumption 250 mA to 450 mA. Operates at RF center frequency 1090 MHz; includes internal temperature-compensated crystal oscillator (TCXO ≤ 1 PPM) to minimize frequency drift. Optional internal software-switched 4.5 V DC bias-tee for powering external RF preamplifiers (controlled via READSB_ENABLE_BIASTEE).
- Substitution latitude: Must be an SDR receiver explicitly supported by readsb, airspy_adsb, or sdrplay driver layers with adequate USB timing performance for multilateration (MLAT). RTL2832U dongles with R820T2/R860 tuners are standard.
- Operated controls: None.
- Sourcing plan: retail shopping search: RTL-SDR Blog V4 USB dongle SMA
1090 MHz ADS-B Tuned Antenna
- Identity: Vertically polarized omnidirectional 1090 MHz ADS-B antenna (e.g. 5.5 dBi outdoor fiberglass collinear antenna or indoor magnetic-mount whip tuned to 1090 MHz).
- Quantity: 1
- Footprint/package: Chassis/mast-mounted collinear tube or base-mount whip with SMA-male or N-female RF connector.
- Electrical constraints: Impedance 50 Ω nominal; tuned center frequency 1090 MHz; bandwidth ≥ 30 MHz (1075 MHz to 1105 MHz); VSWR ≤ 1.5:1 at 1090 MHz.
- Substitution latitude: Any 50 Ω antenna tuned to 1090 MHz with compatible coaxial cabling and RF connectors.
- Operated controls: None.
- Sourcing plan: retail shopping search: 1090 MHz ADS-B antenna 50 ohm SMA
MicroSD Flash Storage Card
- Identity: MicroSDHC / MicroSDXC Class 10, UHS-I, Application Performance Class A1 or A2 flash memory card, 16 GB or 32 GB (e.g. SanDisk Ultra 32 GB or Kingston Canvas Select Plus).
- Quantity: 1
- Footprint/package: Standard µSD card (11 mm x 15 mm x 1 mm).
- Electrical constraints: Supply rail 3.3 V DC (supplied by SBC onboard regulator), sustained write speed ≥ 10 MB/s.
- Substitution latitude: Any high-endurance µSD card with ≥ 16 GB capacity compatible with the target SBC SDIO interface.
- Operated controls: None.
- Sourcing plan: retail shopping search: 32GB microSDHC card Class 10 UHS-I
Optional Secondary Protocol SDR Dongle(s) and Antenna(s)
- Identity: Dedicated USB RTL-SDR dongle(s) and band-specific antennas for additional telemetry decoders (UAT 978 MHz, ACARS/VDL2 at 118-137 MHz VHF, HFDL at 2-30 MHz HF, AIS marine at 161.975/162.025 MHz VHF, or Radiosonde at 400-406 MHz UHF). Documentation notes: "each of these protocols requires its own SDR and the number of SDRs a single system can support is limited."
- Quantity: 0 to 4 (application dependent)
- Footprint/package: USB Type-A dongle with matching RF antenna connector.
- Electrical constraints: 5.0 V DC via USB; each dongle adds 250 mA to 500 mA of load on the 5 V rail. If multiple dongles are used, an externally powered 5 V USB hub or higher-amperage dedicated SBC power source is required.
- Substitution latitude: Standard RTL2832U-based SDR receivers matching the tuning frequency of the respective protocol.
- Operated controls: None.
- Sourcing plan: retail shopping search: RTL-SDR dongle with dipole antenna kit
Software and network dependencies
Operating System and Host Platform Images
- Base Host OS Images:
- Raspberry Pi Raspbian-based ADS-B Feeder Image (for Raspberry Pi Zero 2, 3A, 3B, 4, 5), download via Raspberry Pi Imager or adsb.im release page. Version: not stated. Where version came from: not stated.
- Raspberry Pi DietPi-based ADS-B Feeder Image (for Raspberry Pi Zero 2, 3A, 3B, 4, 5). Version: not stated. Where version came from: not stated.
- Single-Board Computer Alternative Images: Libre Computer Le Potato, Orange Pi Zero 3 / Zero 3 LTS / 5 Plus, FriendlyElec NanoPi NEO3, Hardkernel ODROID-C4 / ODROID-XU4. Version: not stated. Where version came from: not stated.
- Virtual Machine / x86 Images: VirtualBox / VMware Workstation OVA archive (adsb-im-x86-64-vm-.ova.xz), Hyper-V Generation 1 BIOS VHDX archive (adsb-im-x86-64-vm--Hyper-V-x86_64.vhdx.xz), and Proxmox VE archive (adsb-im-x86-64-vm-v3.0.4-proxmox.tar.xz). Base OS inside VMs is DietPi/Debian. Version: not stated. Where version came from: not stated. (Note: "v3.0.4" in the Proxmox URL represents the lab project release archive tag, not the underlying OS distribution version).
- Host Build & Setup Tools:
- CustomPiOS: Repository https://github.com/guysoft/CustomPiOS. Version: not stated. Where version came from: not stated.
- app-install.sh: Hosted at https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh. Version: not stated. Where version came from: not stated. Executed via unpinned shell pipe (
curl ... | sudo bash). - adsb-setup: Python web configuration application located on host at
/opt/adsb/adsb-setup. Version: not stated. Where version came from: not stated. - pve-vmcreate.sh: Proxmox VM creation script included in Proxmox VM tarball. Version: not stated. Where version came from: not stated.
- Raspberry Pi Imager: Imaging utility from https://github.com/raspberrypi/rpi-imager/releases. Version: not stated. Where version came from: not stated.
Container Images (Orchestration Manifest: docker.image.versions and docker-compose.yml)
All container images are pinned in docker.image.versions:
- ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder:latest-build-931. Version: latest-build-931. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry without public vulnerability database mapping.
- ghcr.io/sdr-enthusiasts/docker-dump978:latest-build-795. Version: latest-build-795. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-telegraf-adsb:latest-build-16. Version: latest-build-16. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-flightradar24:latest-build-850. Version: latest-build-850. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-piaware:latest-build-658. Version: latest-build-658. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-airnavradar:latest-build-875. Version: latest-build-875. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-radarvirtuel:latest-build-794. Version: latest-build-794. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-opensky-network:latest-build-829. Version: latest-build-829. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-planefinder:latest-build-534. Version: latest-build-534. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-adsbhub:latest-build-523. Version: latest-build-523. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/plane-watch/docker-plane-watch:v0.0.9. Version: v0.0.9. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/airspy_adsb:latest-build-308. Version: latest-build-308. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-radar1090:latest-build-308. Version: latest-build-308. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-sdrmap:latest-build-92. Version: latest-build-92. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-sdrplay-beast1090:latest-build-137. Version: latest-build-137. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-reversewebproxy:latest-build-745. Version: latest-build-745. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-acarshub:latest-build-1499. Version: latest-build-1499. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-acarsdec:latest-build-493. Version: latest-build-493. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/acars_router:latest-build-577. Version: latest-build-577. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-dumpvdl2:latest-build-422. Version: latest-build-422. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-hfdlobserver:latest-build-23. Version: latest-build-23. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-dumphfdl:latest-build-193. Version: latest-build-193. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/rpatel3001/docker-acars2pos:latest-build-31. Version: latest-build-31. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/sdr-enthusiasts/docker-shipfeeder:latest-build-62347. Version: latest-build-62347. Where version came from: pinned in docker.image.versions. Check plan: not checkable: proprietary container tag on GitHub Container Registry.
- ghcr.io/projecthorus/radiosonde_auto_rx:v1.8.2. Version: v1.8.2. Where version came from: pinned in docker.image.versions. Check plan: not checkable: container tag without ecosystem advisory database.
- ghcr.io/tomcarman/skystats:0.1.13. Version: 0.1.13. Where version came from: pinned in docker.image.versions. Check plan: not checkable: container tag without ecosystem advisory database.
- ghcr.io/amir20/dozzle:v10.6.2. Version: v10.6.2. Where version came from: pinned in docker.image.versions. Check plan: not checkable: container tag without ecosystem advisory database.
- alpine:3.23.3. Version: 3.23.3. Where version came from: pinned in docker.image.versions. Check plan: support-status lookup: Alpine Linux 3.23.3
Version Pinning Status
- Docker container images: Fully pinned to specific build/version tags in docker.image.versions.
- Unpinned dependencies:
- app-install.sh in README.md executes directly from the main Git branch:
curl https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh | sudo bash. - Base Linux host packages: When installing via dietpi-software or app-install.sh, Debian/DietPi packages are installed using standard unpinned apt commands.
- CustomPiOS tooling referenced in README.md is unversioned.
- app-install.sh in README.md executes directly from the main Git branch:
Network Exposure
- Network Connectivity: The device connects via Ethernet or Wi-Fi. On initial boot, it spawns an open Wi-Fi access point hotspot named "adsb-feeder-image" allowing users to connect and configure local Wi-Fi credentials via a browser.
- Local Host Resolution: Listens for mDNS on
http://adsb-feeder.local(or sequential hostnamesadsb-feeder-2.local, etc.) and supports redirect resolution viahttp://my.adsb.im. - Inbound Listening Ports (defined in docker-compose.yml on host network interfaces):
- TCP 8080 (or ${AF_TAR1090_PORT_ADJUSTED}, mapped to container port 80): TAR1090 interactive map web interface.
- TCP 1099: Web setup UI (when installed via app-install.sh on generic Linux).
- TCP 30001: Raw ADS-B input.
- TCP 30002: Raw ADS-B output.
- TCP 30003: SBS (BaseStation) protocol output.
- TCP 32006: SBS (BaseStation) protocol input.
- TCP 30004: Beast binary protocol input.
- TCP 30104: Beast binary protocol input.
- TCP 30005: Beast binary protocol output.
- TCP 30006: Beast reduce protocol output.
- TCP 30047: JSON position data output.
- TCP 30152: RE-API data output.
- TCP 31003: MLATHUB SBS output.
- TCP 31004: MLATHUB Beast input.
- TCP 31005: MLATHUB Beast output.
- TCP 31006: MLATHUB Beast reduce output.
- Default Credentials: Not stated in the sources. The web configuration interface is unauthenticated by default on the local area network.
- Outbound External Endpoints:
- Aircraft route lookup API:
https://adsb.im/api/0/routeset(configured in TAR1090_ROUTEAPIURL). - External Aggregator Connections: Pushes decoded aircraft/ship/balloon telemetry over TCP/UDP to configured remote endpoints, including adsb.lol, Fly Italy Adsb, TheAirTraffic, adsb.fi, ADS-B Exchange, airplanes.live, AVDelphi, FlightAware, Flightradar24, OpenSky Network, Plane.watch, Plane Finder, Planespotters.net, AirNav Radar, Radar Virtuel, airframes.io, ACARS Drama, AIS Catcher, AIS Friends, AISHub, HPRadar, MarineTraffic, MyShipTracking, shipfinder, ShippingExplorer, ShipXplorer, and VesselFinder.
- Aircraft route lookup API:
Remaining temporal dependencies
External URLs and Downloads
- Feeder image releases repository: https://github.com/dirkhh/adsb-feeder-image/releases/latest
- Installation script: https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh
- CustomPiOS image builder framework: https://github.com/guysoft/CustomPiOS
- Open ADS-B historical flight data: https://github.com/adsblol/globe_history
- ADSB.im website resources: https://adsb.im/home, https://adsb.im/supported, https://adsb.im/hotspot, http://my.adsb.im
Fabrication
- No custom printed circuit board fabrication is required. The system is assembled entirely from commercial off-the-shelf single-board computer hardware, standard USB radio dongles, and RF antennas.