ADS-B Reception, Decoding & Sharing
Introduction
ADS-B Reception, Decoding & Sharing=Automatic Dependent Surveillance-Broadcast (ADS-B) is a surveillance technology in which an aircraft determines its position via satellite navigation and periodically broadcasts it, enabling it to be tracked. I have setup a local receiver that feeds several services. I started with Flightradar24 but have expanded to include others. In exchange for feeding the aggregation sites I receive complementary subscriptions to their services.
In the summer of 2025, I replaced the Linux/Docker/Ultrafeeder configuration with the ADSB Feeder Image system. The primary reason is that it presents a web interface and automation for all of the fiddly tinker bits necessary to maintain to keep the system running. The system also introduces a feeder/server configuration where a server can support one or more feeders. The feeders can be stripped down configurations that require fewer resources.
The stage2 server image is a VM running on the PVE server. There are feeders in Chico and Almanor. I might add another in San Jose later.
The ADSB Feeder Image is built around Debian Linux which is installed and configured as part of the overall setup. There have been a few additions to make overall and remote management easier.
There are two configurations. The feeder is the system that has radio receivers connected to it. There can be multiple feeders in the system. The more the merrier. Currently there are feeders in Chico and at Lake Almanor. The stage2 server collects data from the feeders and forwards the information collected to the various aggregators. The stage2 server runs as a VM on PVE.
Project Overview
The desired end result is to have a fully functional ADS-B in receiver network that will process signals received from nearby aircraft and feed various aggregators. The stage2 server is in Chico and micro-feeders are in Chico and at Lake Almanor. An additional feeder is planned for San Jose.
Previous Configuration
root@argon-pi:/opt/adsb# more .env
FEEDER_ALT_FT=279.85
FEEDER_ALT_M=85.30
FEEDER_LAT=39.7512
FEEDER_LONG=-121.7932
FEEDER_TZ=America/Los_Angeles
FEEDER_NAME=KCIC6
ADSB_SDR_SERIAL=1090
ADSB_SDR_GAIN=auto
ADSB_SDR_PPM=-1
UAT_SDR_SERIAL=978
UAT_SDR_GAIN=autogain
UAT_SDR_PPM=-1
ULTRAFEEDER_UUID=f8f214bc-0a1e-4057-8513-ab144e6b72b3
FEEDER_HEYWHATSTHAT_ID=NRIA6SXG
FEEDER_HEYWHATSTHAT_ALTS=3000,12000
# ADS-B Exchange
ADSBX_UUID=f8f214bc-0a1e-4057-8513-ab144e6b72b3
ADSBX_SITENAME=T-KCIC6
# FlightAware
PIAWARE_FEEDER_ID=3963acce-ab0f-41f0-ae30-e4a32174bdbc
# Flightradar24
FR24_SHARING_KEY=e19faa3795c3fe88
# Radarbox
RADARBOX_SHARING_KEY=3baefd423abd202b5cccdf27ab7cbc68
# Planefinder
PLANEFINDER_SHARECODE=62c905c8d6175
# ADSBHub
ADSBHUB_STATION_KEY='Ms54?dI#:M!]JxU4A[_!43oe4u[q_Sm]o+JtEMu6$>~4JP--Z<?W:Ifdo{?-o9}]1%u#e_N=If_2Ab%|~Vt_}o1Y!li*l}#3'
# OpenSky
OPENSKY_USERNAME=sjclynn
OPENSKY_SERIAL=-1408231625
# Radarvirtuel
RV_FEEDER_KEY=kcic:BDB35CF29690E75A14D905F65839549A
# PlaneWatch
PW_API_KEY=8bf4f7da-d46f-436e-a40a-229b7e4a73b5
Site Specific Installation Information
Chico
This section describes the steps necessary to build and configure the ADS-B environment in Chico:
The Chico Micro Feeder is in a case with a power management board. The setup instructions are here:
The golden SD card has this configured as the default.
Lake Almanor
The Lake Almanor system is intended to be installed outdoors along with an Indi-Allsky SkyCam. This will also improve reception over using an indoor antenna.
Return to: Technical Guides
Install the Prerequisite Packages
apt install -y docker.io docker-compose
Install Portainer and Docker based Applications
Installing the ADSB.im Application
Execute the following command to install the ADSB software:
curl https://raw.githubusercontent.com/dirkhh/adsb-feeder-image/main/src/tools/app-install.sh | sudo bash
Connect to the Feeder and Configure
If the application was setup using the dedicated boot image, you will be able to connect to the feeder at [http://adsb-feeder.local]. The system also starts an sshd server so you can also make a serial connection.
If the application was loaded onto an existing OS then the active port is 1099. Connect to the feeder at [http://raspberrypi:1099]
(Optional) Install Agent-DVR
This is an Application to Run and Monitor Cameras.
https://www.ispyconnect.com/download
Try it native first and then do the docker version if necessary.
The easiest way to do this is with docker:
docker run -d --name=AgentDVR -e PUID=1000 -e PGID=1000 -e TZ=America/New_York -e AGENTDVR_WEBUI_PORT=8090 -p 8090:8090 -p 3478:3478/udp -p 50000-50100:50000-50100/udp -v /appdata/AgentDVR/config/:/AgentDVR/Media/XML/ -v /appdata/AgentDVR/media/:/AgentDVR/Media/WebServerRoot/Media/ -v /appdata/AgentDVR/commands:/AgentDVR/Commands/ --restart unless-stopped mekayelanik/ispyagentdvr:latest
(Optional) Install Indi-Allsky
Use putty, or your preferred app and connect to adsb-feeder.local. Assuming that the user and password were set when the SD card was created, they are pi/raspberry.
The Almanor system is also being configured to have a SkyCam as part of the configuration. The Git library for this application is at: Indi-AllSky. The installation instructions are at Getting Started.
Do a full install, steps 1, 2 and 3.
Step 1 should not be necessary since git has already been installed.
For step 2, enter:
cd /opt sudo git clone https://github.com/aaronwmorris/indi-allsky.git sudo chown -R pi:pi indi-allsky cd indi-allsky
If there is a conflict between applications on ports 80 and 443 the ports on Indi-AllSky can be changed in the setup script. Prior to running the script, it canbe modified so that the web ports are moved to 8080,8443. Edit the setup.sh script and change lines 65 and 66 to 8080 and 8443 respectively and then run:
./misc/build_indi.sh before running setup.sh
Select Automatic for the build Accept the configuration and select Yes to upgrade all of the system packages.
Go have coffee, watch a TV show. It takes a while. Depending on the base image, a reboot may be recommended and a list of services restarted. Just select OK to both. It may do this more than once but will continue.
When it completes reboot if it was recommended and continue to:
./setup.sh
Accept the configuration, select libcamera as the camera interface and the the IMX708 camera module 3 for the camera. Answer yes to add additional Python modules.
ADS-B Receiver
A Raspberry Pi system runs this setup.
Name: pi IP: 192.168.86.50, 192.168.86.51
A second Raspberry Pi system has been setup intending to replace the original one
Name: argon-pi/adsb IP: 192.168.86.52
Hardware
Pi Server
Hardware Configuration
This is the system that has been running the ADS-b receiver since about 2023.
Raspberry Pi 4-B Memory: 4GB Disk: 4GB SD card OS: Raspbian - Buster Default Login: pi/raspberry
Argon-pi Server
Hardware Configuration
Raspberry Pi 5-B
Memory: 8GB
Disk: 64GB SD Card
1TB NVMe stick
OS: Ubuntu 24.04.2
Default Login: ubuntu/ubuntu
Assembly and configuration instructions are here for this hardware.
Initial Setup
This step installs and configures the base operating system and configures it to run the aplications
Install Ubuntu Linux
This step can be done from a PC or a running Raspberry system. A bit of a chicken or egg situation on the latter.
PC Instructions
Download and run the Raspberry Pi Imager utility.
Download from: https://raspberrypi.com/software
Raspberry Pi Instructions
The rpi-imager program will be on the Accessories menu. Install it if it isn't found.
sudo apt install rpi-imager
Select the appropriate items. In our case we are using a Raspberry Pi 5. Choose "Other general-purpose OS" from the Operating System drop down/Ubuntu/24.04.3 LTS (64-bit). Finally, select the appropriate target SD card.
Click on Next.
The OS will be loaded onto the SD card. Remove the card, install it in the SD slot on the processor board and start up the system. Linux will be running using hardwired keyboard and mouse. The KVM configuration will not work for some reason.
Login to the system GUI using the credentials that were setup when the SD card was created. Beware, you will be the superuser at this point.
Install Cockpit
Cockpit is a convenient GUI for relatively simple system management.
sudo apt install cockpit
Open a browser window and click on:
Initial Configuration
Enable Bluetooth and pair
Since having two keyboards and mice is a bit awkward, we will start by installing more convenient ones. In my case, I can easily use Bluetooth with the Pi and also use the Logitech dongles to connect to everything else with the KVM.
Bluetooth is not installed by default on Ubuntu. To install the support software:
sudo apt install pi-bluetooth reboot
After logging back in there will be a Bluetooth icon on the upper right. This is the management interface. Click on Add Device and then pair Bluetooth keyboard and mouse. The wired devices can be removed and put away.
OS Configuration
It is good practice to run through the system update process after installation. The distributed versions can be days, weeks, months out of date. As part of the process, specific support software will be installed.
For the Argon-pi system the following is needed:
curl https;//download,argon40.com/argon-eeprom.sh|bash reboot
Log back in and continue
apt update apt full-upgrade -y curl https://download.argon40.com/argon1.sh | bash reboot
argon-config
On a non-argon, do just the following:
apt update apt full-upgrade -y reboot
Log back in again.
Install the ssh server and client software so that the system can be accessed from a ssh client like putty or kitty.
apt install openssh apt install openssd apt install openssh-server putty-tools -y
We will probably need nfs, at least initially
apt install nfs-kernel-server nfs-common -y </dev/null mkdir /nfs mkdir -p /nfs/media /nfs/multimedia /nfs/mediaarchive /nfs/public chmod -R 777 /nfs chown -R nobody:nogroup /nfs echo ' ' >>/etc/fstab echo 'macey.lan:/share/Multimedia /nfs/multimedia nfs defaults 0 0' >>/etc/fstab echo 'macey.lan:/share/Media_Archive /nfs/mediaarchive nfs defaults 0 0' >>/etc/fstab echo 'macey.lan:/share/Public /nfs/public nfs defaults 0 0' >>/etc/fstab echo 'macey.lan:/share/TR004 /nfs/tr004 nfs defaults 0 0' >>/etc/fstab systemctl restart nfs-kernel-server systemctl daemon-reload mount -a df
Do the following as a normal user
. /etc/os-release
mkdir /home/${SUDO_USER}/.ssh
chmod 755 /home/${SUDO_USER}/.ssh
cp /nfs/public/authorized_keys /home/${SUDO_USER}/.ssh
chown ${SUDO_USER}:${SUDO_USER} /home/${SUDO_USER}/.ssh/authorized_keys
Receivers
FlightAware Pro Stick and Pro Stick Plus
The Plus is an integrated receiver, 1090MHz filter and amplifier combination. The normal Pro Stick does not have the 1090MHz filter and is setup to receive UAT reports on 978MHz.
Antenna
The receiver came with a 1/4 wave antenna that works to about 20 miles. I replaced it with this antenna and get coverage out to over 100 miles. It is still pretty weak and quite directional.
Currently reaching 178 NM in range. The coverage looks like this:

Software
Raspbian - Buster Default login: pi/raspberry
The main guide for installing this is: Docker ADSb Ultrafeeder which draws heavily from: ADSB Guide.
The ADSB software package is installed at /opt/adsb
Normal maintenance is run the following a superuser:
cd /opt/adsb docker compose up -d
This will restart the application and pull new images if they are available. Periodically look at the web pages and review the docker-compose.yml listed there and update the local one accordingly. There is also plenty of information on running the application and getting information from it.
Occasionally, review the docker-compose.yml file and encorporate any changes that are interesting.
The primary software feed service is Ultrafeeder. Ultrafeeder supplies ADS-B and MLAT data to:
ADSBExchange ADSB.lol Planespotters TheAirTraffic avdelphi
As well as others.
In addition, the docker-compose.yml has the following additional services:
ADSBhub FlightRadar24 (fr24) Opensky PlaneFinder (pfclient) FlightAware (piaware) PlaneWatch RadarPlane RadarVirtuel RadarBox (rbfeeder)
Additional services:
Planefence tar1090 autoheal dozzle watchtower
Other Tools
Line of sight profiles for the apartment
Enter KCIC-6 in the View box
Ports
- http://adsb.lan:8080/ : tar1090 map and table of all aircraft received
- http://adsb.lan:8080/graphs1090/ : page with graphs and operations statistics of your station
- http://adsb.lan:8080?pTracks : showing all aircraft tracks received in the last 24 hours
- http://adsb.lan:8080?heatmap&realheat : showing a heatmap of all aircrafts of the last 24 hours
- http://adsb.lan:8080?replay : showing a timelapse replay of the past few days
- http://adsb.lan:8081 : FlightAware PiLocal SkyAware
- http://adsb.lan:8082 : Access to tar1090. Tar1090 is the default viewer.
- http://adsb.lan:8088 : Planefence screen
- http://adsb.lan:9999 : Access to error logs
ADS-B Subscription feeds
The software configuration is run under Docker/Docker-compose. This allows significant flexibility to add feeders that run concurrently beside themselves.
These are configured using this guide: ADS-B Reception, Decoding & Sharing with Docker
The list of sites that my receiver is feeding is:
ADS-B Exchange
ADSBX_UUID=f8f214bc-0a1e-4057-8513-ab144e6b72b3 ADSBX_SITENAME=T-KCIC6
Benefits: Ad free subscription ($2.99/month) May require attention Follow the status link from the Pi server to reset the clock if necessary.
ADSB.fi
A non-profit aggregator fed through ultrafeeder.
Benefits: None that are apparent.
ADSBHub
Station: T-KCIC6
User: lynnmacey@gmail.com
Password: Mc....
ADSBHUB_STATION_KEY='Ms54?dI#:M!]JxU4A[_!43oe4u[q_Sm]o+JtEMu6$>~4JP--Z<?W:Ifdo{?-o9}]1%u#e_N=If_2Ab%|~Vt_}o1Y!li*l}#3'
The Air Traffic
No registration yet
Flightaware
User: sjclynn Password: Mc....
Site Statistics: https://flightaware.com/adsb/stats/user/sjclynn Global Statistics: https://flightaware.com/adsb/stats/ Local access: http://pi.local:8081
Benefits: Enterprise level account ($89.95/month)
PIAWARE_FEEDER_ID=3963acce-ab0f-41f0-ae30-e4a32174bdbc
Flightradar24
User: lynnmacey@gmail.com Password: Mc....
Benefits: Business level account ($39.95/month)
FR24_SHARING_KEY=e19faa3795c3fe88
HP Radar
No registration yet
OpenSky Network
User: sjclynn Password: Mc....
Plane Finder
Plane Finder receiver stats
User: lynnmacey@gmail.com Password: Mc....
Benefits: Plane Finder Premium account ($39.95/mo)
PLANEFINDER_SHARECODE=62c905c8d6175
Plane.Watch
Plane.Watch Desktop
Radar Box
RadarBox - Chico station
Benefits: Business account $39.95/mo
RADARBOX_SHARING_KEY=3baefd423abd202b5cccdf27ab7cbc68
Radar Plane
This aggregator is pretty new to the game. The site is in a pretty early beta.
Radarplane - Chico station
User: sjclynn Password: Ea...
Radarvirtuel
[https://www.radarvirtuel.com/stations/KCIC Radarvirtuel station
Benefits: This is a crowd sourced site
RV_FEEDER_KEY=kcic:BDB35CF29690E75A14D905F65839549A
