Building a Backyard Flight Tracker: ADS-B, MLAT, and a Fake Plant

by Prasanna Sambasivan

Building a Backyard Flight Tracker: ADS-B, MLAT, and a Fake Plant
Photo by Paulo Almeida / Unsplash

Share

What do you get when you combine a Raspberry Pi, an ADS-B antenna, some coax cable, and a fake IKEA plant? Apparently, a semi-professional air traffic surveillance node.


Welcome to my mildly over-engineered attempt over the summer at building a reliable, discreet, and maintainable flight tracking station. This setup now feeds live aircraft data to FlightAware, Flightradar24, RadarBox, and Planefinder - all running from a Raspberry Pi 4 tucked into a waterproof box, camouflaged within an outdoor planter.

I’ve actually been feeding FlightAware and Flightradar24 for a couple of years now, using a humble Raspberry Pi Zero paired with a NooElec SDR and a basic whip antenna by the window. It worked, but let’s just say it wasn’t winning any awards for range. That original setup has since been retired from Toronto, and is now being prepped for redeployment in Mumbai.

This new outdoor setup is a serious step up, both in performance and presentation.

🎯 Why?

Because I’m a civil aviation aficionado. Because flight tracking is fun. Because feeding multiple aggregators helps contribute to open aviation data. Because doing so unlocks enterprise-tier subscriptions to all the fed networks, with no ongoing fees. And because if I can squeeze this out of a small outdoor corner with a one-time setup, and a Pi sipping power quietly in the background, and even a touch of multilateration magic, you probably can too.

But before I go on, let’s talk about what exactly we’re tracking here.

What is ADS-B?

ADS-B (Automatic Dependent Surveillance–Broadcast) is a system where aircraft continuously transmit their position, altitude, speed, and other flight data. These signals can be picked up by ground receivers like mine, then shared with public flight tracking networks to power those familiar live aircraft maps.

What is MLAT?

MLAT (Multilateration) is a technique used to determine the position of aircraft that don’t broadcast their location (i.e., no GPS info in their ADS-B signal). Instead, it uses time differences from signals picked up by multiple receivers—like mine—to triangulate their position. The more receivers in sync, the better the accuracy. This is why feeding multiple networks helps the entire system improve.

📦 The Setup

Hardware

Note: I started with a Pi Zero, but once I added more feeders and enabled MLAT, it couldn’t keep up. The Pi 4 has been rock-solid since.

Software

🖥️ OS Configuration for the Pi

You can download a ready-to-go image like PiAware from FlightAware or the RadarBox SD card image, and they’ll work fine - for one network. But if your goal is to feed multiple aggregators (and unlock all the perks that come with it), the best approach is to start with a clean, minimal OS and install each package yourself.

I used the official Raspberry Pi OS Lite (64-bit) image, flashed using Raspberry Pi Imager. No GUI, no fluff. Just a lean Debian base with SSH enabled and a few core tweaks to get going.

This gives you full control, lets you co-install piaware, fr24feed, rbfeeder, pfclient, and mlat-client without conflicts, and makes troubleshooting way easier if something breaks. It also avoids the “which image owns the hardware?” headache when two scripts fight over the SDR dongle.

Once that’s out of the way, everything else layers cleanly on top.

🌐 Feeding the Networks

All three networks accept Beast format input from the same dongle on localhost:30005. The install process for each was relatively painless, but I hit a few interesting quirks:

🛠️ Mounting and Concealment

Rather than go all out with brackets or visible clamps, I went... plant-based.

Why? Because it looks elegant and tidy. From the outside, you’d never guess it was doing anything more than pretending to be decorative.

🔌 Power Management

Currently I'm not using UPS (uninterruptible power supply), but given the minimal power outages in Toronto, I’ve decided to skip that complexity. Plus, it would be overkill for this purpose.

📡 Performance

At ~6 feet above the balcony floor and with open sightlines in one direction, range is surprisingly decent. Early data shows aircraft hits up to 370–460 km away. I’ll post graphs and aggregate stats once there’s enough long-term data.

Compared to the indoor setup, message rate nearly tripled, and range went from ~150 km to over 400 km. That’s what a few meters of elevation and an open sky can do.

The setup now ranks among the Top 200 feeders in Canada across multiple networks - not bad for a Pi in a planter.

If you’re curious about what this little setup is actually doing, you can check out live stats and uptime on a couple of networks:

🤓 Lessons Learned

Honestly, I forgot how much I enjoy building things when there’s no meetings, no metrics, no deadlines, and no one waiting for slides. Turns out, I needed that more than I thought.

📝 Coming Soon

I'm considering redeploying the original indoor setup, featuring the trusty Nooelec antenna in Mumbai. It will be connected to fewer networks, run headless, and managed remotely from Canada via Cloudflare. This setup will extend community flight tracking into South Asia with minimal power usage and no physical maintenance. Just goes to show that a retired antenna can still rack up the miles.