So for a while I’ve toyed with the idea of building an ADS-B decoder system, which I can run here. For those who aren’t familiar, ADS-B is the transponder system used by aircraft, both commercial and private (though I believe it’s currently optional for private aircraft below a certain size – this may change soon though). I won’t go into the full details on exactly what ADS-B is and how it works, or indeed what the messages mean etc, because that information has been readily provided by a plethora of other websites already, and it seems a bit unnecessary to just copy and paste it here.
What I will do, however, is run through the steps I took to build a multi-feed decoder unit feeding to various websites. At the time of writing, I’m currently feeding Airnav’s RadarBox website, FlightAware, and PlaneFinder. I planned to add FlightRadar24 to the list too, but at this point they haven’t managed to send me the e-mail to confirm my account, so I can’t class that as working. More on that later.
First of all, you’re going to need some hardware. I’m using a Raspberry Pi 3B+, because I already had a 12V to Micro USB regulator on order before the new Raspberry Pi 4 was released, and I felt it would be pointless buying another power supply for the Raspberry Pi 4, or a converter, when the extra horsepower really isn’t needed for this application – it’s really light on resources. You’ll also need an SDR (a software defined radio) or some other way to receive the radio signals from aircraft. In initial testing I used a cheap (circa £8) DVB-T USB television decoder, but since this system is going to be installed permanently in a remote location and used properly, I’ve now upgraded it to use one of FlightAware’s Pro Stick Plus units, which has an integrated band-pass filter and preamplifier, and even in basic testing here has proven to be vastly superior to the DVB-T unit I first connected up. I know this system needs a lot of cable between the antenna and receiver, so I bought a 15m ‘wifi’ extension coaxial cable – HDR400 with SMA connectors on both ends (one male to connect to the FlightAware receiver, and one female as the antenna we’ve been donated has a male SMA connector on its flying lead). For testing I’m using a compromise – an antenna that’s inside my house, tuned for an entirely different frequency range than I’m using it on – but when this unit goes into production it will have a tuned antenna for the correct frequency of 1090MHz.
That’s the hardware dealt with, now for the software. I’m quite comfortable using Linux without a graphical interface of any sort, so I didn’t bother installing one. Instead, I’m running the ‘lite’ version of Raspbian (the Raspberry Pi fork of Debian Linux), and at the time of writing, I’m using the latest version, codenamed ‘Buster’, to run this system. If you wanted a desktop on it, you could add one with a couple of commands, or you could download the full image direct from Raspberry Pi’s website. The initial setup is fairly trivial – you write your chosen downloaded image to the MicroSD card using one of the many tools available (I used Win32DiskImager because I had it handy), then plug it into your Raspberry Pi and power it on. At this point I felt it was easier to plug a screen and a keyboard directly into the Raspberry Pi, rather than trying to do everything over a remote SSH connection, and it meant I could use the
raspi-config application to do the initial operating system configuration. I enabled the SSH server, changed the hostname, expanded the file system, and made a couple of other standard tweaks I tend to do when first building a new Raspberry Pi based system. I also did a full round of updates to make sure I had the latest versions of everything – to do this you can run:
sudo apt update && sudo apt dist-upgrade
This chains together the update command and the subsequent upgrade command, and as a general rule I won’t run one without the other being run too. Once this finishes the first time after install, it’s often a good idea to reboot your system (no pulling the power, clean reboots using
init 6 or similar commands only please!), just in case a kernel or other core system update was installed. On the assumption that this all worked properly, it’s time to get down to business.
Firstly let’s install the software we need in order to test your SDR (assuming you’re using either a DVB-T stick, a FlightAware Pro Stick (Plus or standard), or another RTL based SDR – if you’re not sure, and if it was fairly cheap, then it’ll likely be an RTL, but there’s other ways of checking which I won’t go into here.
sudo apt install rtl-sdr
You’ll want to make sure your SDR is plugged in at this point, and then run a PPM calculation test. To do this, run:
Leave this running for a long time (usually around 20 minutes or so for best results), as you’ll see a number of lines being displayed, each one giving an instant PPM offset, and the cumulative average. You want to let this run until the cumulative average stops changing (it’s expected that it will be a number, not zero, unless your stick has a high stability oscillator in it. Note down the final average number, as you’ll need this shortly.
Now to install the actual decoding app – dump1090. This decodes data it receives on 1090MHz via an SDR, so that it can be either displayed locally, or passed to other applications for processing. Dump1090-mutability is a pre-built package which works for Raspbian Buster without any extra work being required.
sudo apt install dump1090-mutability
You may, or may not, be prompted to configure a number of things here. By and large the defaults are fine, though you’ll need to enter the PPM offset number from the previous test. I don’t recommend changing any of the port assignments unless you really need to, so it’s best to just hit enter on most of the options if you are unsure. If you aren’t prompted at all then you can force it by running:
sudo dpkg-reconfigure dump1090-mutability
At this point, I’d do another reboot just to be sure that everything is behaving as expected, and that your dump1090 instance starts up on boot. When it comes back up, grab a web browser from another machine on your network, and navigate to the webpage that will now be active – mine was http://<ipaddress>/dump1090/gmap.html – and assuming it’s active and there are aircraft nearby, you’ll start to see them being tracked on that page. All that’s left to do now is install whichever of the various feeder apps you want to use to push your data to other websites. Each has a different mechanism for installation, though some are fairly similar, and whilst they’re all documented individually, I’m using the following:
- RadarBox (https://www.radarbox24.com)
- FlightAware (https://flightaware.com)
- PlaneFinder (https://planefinder.net)
I also plan to add FlightRadar24 and 360Radar, but at the time of writing FlightRadar24 haven’t sent me the confirmation e-mail to allow me to open my account, and 360Radar doesn’t have a client which runs with the current Python 3.7, so unless I force a downgrade of my Python packages (I’d rather not do this), I can’t feed to 360Radar. I believe a new version of the client is being worked on though.
RadarBox was quite simple. There is a full guide at https://www.radarbox24.com/raspberry-pi/guide for setting up your rbfeeder Raspberry Pi client, but essentially you run the following command to install it:
sudo bash -c "$(wget -O - http://apt.rb24.com/inst_rbfeeder.sh)"
Mine configured correctly and required very little work at all at this point. You want to make sure it’s expecting to use
beast mode, and connect to localhost (
127.0.0.1) on port
30005. Once you’ve finished configuring the rbfeeder app, you need to run:
sudo systemctl restart rbfeeder
sudo rbfeeder --showkey
The first of these restarts the rbfeeder app, and the second shows you your unique key. You then head to https://www.radarbox24.com/raspberry-pi/claim and paste the key into the box, in order to claim your feeder and link it to your account.
FlightAware was a little more complicated, as they provide multiple different options for installation including some prebuilt Raspberry Pi images. Since we’re building a multi-feeder unit, we don’t want to use those though, and instead want to refer to https://flightaware.com/adsb/piaware/install which provides PiAware software installation instructions without the need for a full OS image. You’ll be able to skip some steps, as we don’t want to use the FlightAware customised version of dump1090. Run the following commands:
sudo dpkg -i ./piaware-repository_3.7.1_all.deb
sudo apt update
sudo apt install piaware
sudo piaware-config allow-manual-updates yes
sudo piaware-config allow-mlat yes
sudo piaware-config receiver-type relay
sudo piaware-config receiver-host 127.0.0.1
sudo piaware-config receiver-port 30005
Then in a web browser on the same network, navigate to https://flightaware.com/adsb/piaware/claim and link your receiver to your account there. If it’s not showing after a minute or two, I’d suggest rebooting your Raspberry Pi again so that it can bring up all the processes correctly.
PlaneFinder wasn’t too bad to set up. Full details can be found at http://876e4dd3654715fa151c-71f8796d2abe5094889e30919e12901d.r77.cf3.rackcdn.com/docs/Plane-Finder-Debian-Client.pdf for the current version. Again, it has an installation script:
sudo dpkg -i ./pfclient_4.1.1_armhf.deb
This time rather than configuring with a command line utility, you need to grab a web browser and head to
http://<ipaddress>:30053 where <ipaddress> is the IP address of your Raspberry Pi. Fill in the boxes and choose ‘Create new Sharecode’ to get a code. You then add this to your account at planefinder.net in the ‘Manage Receivers’ section – https://planefinder.net/account/receivers – after which you continue with the configuration of your receiver on the web console. When it comes to configuring the sdr, choose
AVR(TCP) and fill in the boxes with
127.0.0.1 and port
That’s all there is to it. I’ll add more information if/when I get my FR24 account confirmed, for how to set that up too!