Press ESC to close

ADS-B: Receiver installation and configuration on Raspberry Pi

Table of contents

Hello!

Today we will cover the installation and initial configuration of our own kit for receiving the location of aircraft in the sky using a Raspberry Pi and a couple of accessories, which I will describe in the following.

Introduction to our project

I will divide the guide into several steps – from the initial setup, to preparing the system, installing Docker containers on the Raspberry Pi, sharing our data with other flight information aggregation portals.

What is the ADS-B?

ADS-B operating principle

ADS-B (Automatic Dependent Surveillance-Broadcast) is an automatic surveillance and transmission system used in aviation. This technology allows aircraft to transmit data, such as position, speed, altitude and identification, to other ships and ground stations. It is based on GPS technology and transponders mounted on board aircraft.

The ADS-B system operates on two main frequencies: 1090 MHz and 978 MHz. Both bands are used depending on the world region and application.

In fact, most large aircraft are equipped with ADS-B transponders, operating at 1090 MHz, while smaller aircraft, especially those operating in the United States, can use UAT at 978 MHz. The interaction of the two bands is intended to increase the efficiency and flexibility of ADS-B in air traffic management.

Preparation

Before installing an ADS-B pickup system, it is a good idea to make solid preparations. Here is a more extensive description of what was needed based on my own setup.

For the creation of the guide, I will use the documentation provided by the SDR-Enthusiasts team, who have done a very good job. I sincerely thank them for making this information available. In the rest of the tutorial, I will also use their containers, which will make the installation and configuration process easier.

Location

When setting up an ADS-B receiving system using a Raspberry Pi, keep in mind the importance of a suitable place to install the antenna. Here are some tips that you may find helpful.

  • Antenna location: Choose a location that provides free access for the antenna to the open sky. Make sure that the antenna will not be obscured by obstacles – such as trees, buildings or other objects;
  • Avoid interference: Place the antenna away from devices that generate electromagnetic interference, which could affect the quality of received signals;
  • Wiring safety: Ensure safe routing of cables from the antenna to the receiver, avoiding potential sources of damage. Protect your cabling from bad weather;
  • Optimum height: Try to place the antenna at an optimal height to minimize terrain interference and improve the range of received signals;

Taking these tips into account, I decided to install the antenna on the roof of the building where I live. I’m glad I foresaw the need for this a few years ago and took it into account during the construction of the development, talking to the developer about some housing changes. One of these changes was to take the antenna cable and cat 6 network cable directly from my apartment to the roof.

By locating the antenna on the roof, I am sure that I have given it free access to the open sky. Using this optimal height, I also avoid terrain interference, which helps improve the range of received signals.

Paperwork for the use of the roof in housing buildings

When planning to install an antenna on the roof of a housing building, it is necessary to comply with the formalities of the construction law, especially when dealing with a building covered by a community or cooperative. Therefore, the following steps must be taken to erect the mast and antenna on the roof:

  • Community or Cooperative Consent: Before proceeding with the installation, it is important to obtain the approval of the community or housing cooperative board. Typically, the roofs of apartment buildings are considered common areas, and decisions on their use require the approval of the housing community.
  • Construction Law: You should check the construction law to find out if installing an antenna on the roof requires any special permits or approvals. In some cases, depending on the type of antenna and the planned installation, additional paperwork may be required.
  • Contract and Liability: The community or cooperative may also require the signing of a contract, which will specify the terms of use of the roof, rights and obligations related to the installation of the antenna. It is also worth discussing issues related to possible damage to the roof or other building components during installation.
  • Structure Safety: Regardless of the purpose of the antenna installation, the mast should be sturdy and safe. Make sure it meets all safety standards to avoid possible damage or accidents.
  • Notification to the Housing Community: Before starting work, it is important to inform neighbors and residents about the planned installation, and to listen to their concerns or objections, if any. Cooperation with residents can help reach an agreement on the installation of the antenna.

Remember that different rules may apply to each building and community, so it is always a good idea to consult with the management of the community or cooperative, and to consult with the Tenants’ Rights and Housing Maintenance Division of the Housing Department of the Ministry of Development and Technology (there is such a department in Poland) to make sure that all the formalities are met.

Creating an antenna in a private home is usually more trouble-free, as it does not require permission from other residents or institutions.

Required equipment and components

In my case, in order for me to start receiving any information sent by aircraft, it was necessary to have:

  • Hardware:
    • Raspberry Pi 4B in 2 or 4 GB version,
      • Currently, you can already use the commercially available Raspberry Pi 5, however, its availability is very low. I recommend using rpilocator.com to see where you can currently get a reasonably priced device;
    • Raspberry Pi PoE HAT,
      • Due to the fact that one network cable is routed to the roof, I decided to power the Raspberry Pi over PoE using the 802.3af standard;
      • It is powered by Mikrotik RB5009UPr+S+IN router;
    • SDR receiver that covers 1090 MHz in range,
      • The USB receiver from AirNav has a built-in filter and amplifier for the aforementioned frequency – hence it made economic sense to buy it;
    • Antenna optimized for operation at 1090 MHz,
      • I was able to buy the antenna at a bargain price on Allegro, hence it will serve me in describing the instructions further;
    • WD Purple memory card with a capacity of 32GB.
      • The choice of a card from Western Digital is intended to ensure greater reliability and durability. In your solution, you can use other manufacturers of memory cards designed for video surveillance – they have longer durability and higher TBW (Total Bytes Written);
  • Additional equipment:

A few words about memory cards

In the hardware section, I elaborate on the components used. One important aspect is the memory card, which is important for stable operation of the Raspberry Pi, especially if it is used for a long time and works 24/7.

There are several reasons why a cheap microSD card may not be suitable for a Raspberry Pi running for a long time. Here are some factual reasons:

  1. Durability: low-cost microSD cards are usually not designed for heavy continuous use over long periods of time. 24/7 operation can lead to faster wear and failure of the memory card. In contrast, cards such as WD Purple and Kingston Industrial are specifically designed for continuous use, which indicate their durability;

  2. Weather resistance: Raspberry Pi, which works 24/7, can be exposed to various weather conditions, such as temperature changes and humidity. Cheap microSD cards may be less resistant to these conditions, which can lead to failures. Industrial cards often have better weather resistance parameters, guaranteeing reliability in a variety of conditions.

Software

To make our receiver work effectively, we will use the Raspberry Pi OS Lite operating system, devoid of a desktop environment. On the other hand, we will give it commands over SSH.

For Microsoft Windows operating system I recommend PuTTY, while for Apple macOS operating systems I recommend Termius.

Installing the Operating System

Use the official installer to install Raspberry Pi OS Lite on your device.

Raspberry Pi OS website

Data Monitoring and Sharing Software

As software for monitoring and sharing ADS-B data with other aggregators, we will use Ultrafeeder from SDR-Enthusiasts. I will describe the installation steps below, following the instructions provided by the manufacturer.

The introduction of this software will make it possible to effectively monitor air traffic and share the collected data with other portals operating in the ADS-B area.

By making the signal available to air traffic monitoring platforms such as FlightRadar24, FlightAware and RadarBox, we can expect to benefit from free subscriptions to these portals. This enables a more complete use of advanced features, real-time tracking of air traffic and access to additional information and statistics. Sharing ADS-B data thus becomes a tangible investment in the growing aviation community, while giving access to a more advanced air traffic monitoring experience.Flightradar24 Add ADS-B coverage

Collecting the location parameters of our receiver

In order to properly configure the receiver, it is necessary to collect precise data on its location. Here is the key information you need to obtain:

Antenna height (above sea level)
Latitude and longitude of the antenna (to at least five decimal places)

Providing precise location data is a key step in effectively configuring an ADS-B receiver. Be sure to enter this information with the utmost accuracy to ensure effective system operation and provide reliable air traffic data.

Installing and configuring the operating system on the Raspberry Pi

Raspberry Pi Imager

  • Raspberry Pi Device: Select Raspberry Pi 4 (or Raspberry Pi 5 – depending on what you have),
  • Operating System: Select Raspberry Pi OS (other) and then Raspberry Pi OS Lite (64-bit),
  • Storage: select your storage media that you have connected to your computer,
  • Then click Next,

Raspberry Pi Imager

  • When the Use OS customization information prompt appears, click Edit settings,
  • For macOS computers – When you see the next prompt stating Would you like to prefill the wifi password from the system keychain, select No.
  • When the operating system customization window opens, go to the General tab and complete it with the following parameters:
    • Check Set hostname and type: rpi01
    • Check Set username and password and type:
      • Username: pi
      • Password: Set your own password
    • Check Set locale settings, then set:
      • Time zone: Europe/Warsaw,
      • Keyboard layout: us.
  • Go to the next Services tab and check Enable SSH, leaving Use password authentication.
  • To save your settings, click Save.
  • Then return to the previous Use OS customization window and click Yes to apply the modifications you made.
  • A warning window will pop up informing you that all the data on the memory card will be erased permanently. Confirm this action. At this point, the Imager tool will format the card and install the operating system on it with the modifications made.

For information on the changes made to the operating system for the ARM64 platform, click here.

Raspberry Pi OS

Once the installation process is complete, insert the memory card into the Raspberry Pi. Then connect them to the power supply and to the router or switch using a network cable terminated with an RJ45 connector.

The system update is sufficient to continue the configuration process. Regular updates not only ensure security, but also enable you to take advantage of the latest features and fixes, which translates into smooth and efficient operation. Before you proceed with further configuration, it’s a good idea to make sure the software on the Raspberry Pi OS is up to date.

In addition, in the process, we will deactivate the Wi-Fi and Bluetooth functions.

System and package updates
  • Launch PuTTY (Windows OS) or Termius (macOS), then connect to your device,
  • Enter the following command to update the package list,
sudo apt update
  • Then use the command prompt and follow the instructions to install available updates.
sudo apt upgrade
Deactivation of Wi-Fi and Bluetooth

The deactivation of the Wi-Fi and Bluetooth module is aimed at minimizing possible interference in the radio environment and saving energy resources.

To disable Wi-Fi and Bluetooth, we can do it in two ways:

  • Method 1: Via rfkill
    • To use the rfkill command, make sure the tool is installed. If not, install them with the following command:
sudo apt-get update && sudo apt-get install rfkill
    • Then execute the following commands:
# Dezaktywacja Wi-Fi
sudo rfkill block wifi

# Dezaktywacja Bluetooth
sudo rfkill block bluetooth
  • Method 2: By editing the configuration
    • In the configuration file /boot/config.txt, add the necessary lines to disable Wi-Fi and Bluetooth.
# Dezaktywacja Wi-Fi
sudo echo "dtoverlay=disable-wifi" | sudo tee -a /boot/config.txt

# Dezaktywacja Bluetooth
sudo echo "dtoverlay=disable-bt" | sudo tee -a /boot/config.txt

After installing the tool or making changes to the configuration file, it is recommended to restart the Raspberry Pi:

sudo reboot
Fixed IP address on LAN via DHCP Reservation

For home labs, where complex network structures are not often necessary, the DHCP Reservation option provides a simple and effective tool for managing fixed IP addresses for key devices.

The process of configuring IP address reservation in the DHCP server may vary depending on the router manufacturer. The following is a general description of this process, and for the purposes of our configuration, we assume that our device has been assigned an IP address reservation of 192.168.100.10.

  • Logging into the router’s administrative interface:
    • Enter the router’s administrative interface via a web browser,
    • Log in to your administrative account,
  • Finding the DHCP section:
    • In the router’s interface, find the section related to DHCP or LAN Settings,
  • Selecting DHCP Reservation:
    • In the DHCP section, look for an option related to IP address reservation,
  • Adding reservations:
    • In the case of TP-Link, Netgear or Asus etc.:
      • Select DHCP Reservation or a similar option,
      • Add a new reservation, specifying the device’s MAC address and assigned IP address (e.g. 192.168.100.10)
    • In the case of MikroTik:
      • Go to the IP > DHCP Server,
      • In the Leases tab, find your device,
      • Double-click on the selected device,
      • In the DHCP Lease window of the selected device, click Copy,
      • In the New DHCP Lease window, set your desired IP address, then save the configuration by clicking Apply and then OK.
  • Restart the device and wait for the Raspberry Pi to get a new IP address.
Change of SDR serial number

Most RTL-SDR devices are shipped with identical serial numbers. If more than one SDR device is present on our system, this can result in potential confusion. To avoid such a situation, it is recommended to assign SDR serial numbers that are consistent with the frequencies on which these devices operate and receive messages.

For the purposes of this guide, we assume that the SDR used to receive ADS-B Mode-S (1090 MHz) will have the serial number 1090.

If you have more than one SDR device connected to Raspberry Pi – unplug them and leave only the one responsible for receiving 1090 MHz. Then execute the following command.

docker run --rm -it --device /dev/bus/usb --entrypoint rtl_eeprom ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder -s 1090

You should see the following message (your data may be slightly different, but make sure that the new serial number of the device is 1090):

Found 1 device(s):
  0:  Generic RTL2832U
​
Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
​
Current configuration:
__________________________________________
Vendor ID:              0x0bda
Product ID:             0x2832
Manufacturer:           Realtek
Product:                RTL2832U
Serial number:          00001000
Serial number enabled:  yes
IR endpoint enabled:    no
Remote wakeup enabled:  no
__________________________________________
​
New configuration:
__________________________________________
Vendor ID:              0x0bda
Product ID:             0x2832
Manufacturer:           Realtek
Product:                RTL2832U
Serial number:          1090
Serial number enabled:  yes
IR endpoint enabled:    no
Remote wakeup enabled:  no
__________________________________________
Write new configuration to device [y/n]? y
​
Configuration successfully written.
Please replug the device for changes to take effect.

Press y to continue.

Installing and configuring software on the Raspberry Pi

Docker script from SDR Enthusiasts

To make the installation and configuration easier, we’ll use the docker-install.sh script we’ve already prepared. The script will automatically check and install the necessary components and perform the configuration.

You can read the list of all the activities that will be performed by clicking on the link.

  • To use the script, enter the following command:
bash <(curl -s https://raw.githubusercontent.com/sdr-enthusiasts/docker-install/main/docker-install.sh)
  • During the installation of the script, you will receive real-time information about the activities performed.
  • Once the installation is complete, you will receive a summary of the process.
  • Then, it is recommended to restart the device.
  • After the reboot, we will continue with the installation of the Portainer agent.
sudo reboot

Portainer Agent – Remote management of containers

The Portainer Agent is a tool that acts as an interface between Portainer (the platform for managing Docker containers) and the host on which Docker containers are run. The agent enables remote management of Docker containers on hosts via Portainer.

The main tasks of a Portainer agent are:

  • Container Management: The agent allows Portainer to remotely start, stop, delete and monitor Docker containers on a given host.
  • System Information Transfer: The agent collects information about the system, such as resource consumption, network availability and other parameters, and then transfers it to the Portainer so that users can track the status of their containers.
  • Container Updates: Portainer using the agent enables updates to Docker images and containers on all connected hosts.
  • Security: The agent works with Portainer in a secure manner, allowing secure remote management of containers without opening additional ports on the host.

Using the Portainer agent facilitates centralized and automated management of Docker containers on multiple hosts from a single user interface.

To install Portainer Agent on Raspberry Pi, follow these steps:

  • Log in to your account and go to the administration interface.
    • Are you using the Authentik single sign-on system? Make the login process easier for yourself by integrating Portainer with Authentik with the help of these instructions.

Portainer login screen

  • At the bottom left of the Settings section, select and click Environments,
  • Click Add environment,

Portainer Add Environment

  • From the list of proposed environments, select the option to connect Docker Standalone. Then click Start Wizzard,

Portainer Environment Wizard

  • Leave the Agent option checked, then copy the command to install the agent on the remote device,
  • Log in to the Raspberry Pi and type the following command:
docker run -d \
  -p 9001:9001 \
  --name portainer_agent \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  portainer/agent:2.19.4
  • Wait until the Agent is installed on the remote device.
  • Return to editing Quick Setup in the Portainer,
  • In the Name space, type the hostname of the remote device: rpi01
  • Environment address: 192.168.100.10:9001
  • Confirm the configuration with the Connect button. After successfully connecting to the remote device, you will return to the main screen for selecting the environment you want to work in.

Preparing the environment for ADS-B

Create a directory

We need a catalog to put our application. The name of this directory will be the name of our application. Therefore, I suggest using /opt/adsb:

sudo mkdir -p -m 777 /opt/adsb
cd /opt/adsb
Generate the UUID of your receiver

UUID (Universally Unique Identifier) is a unique identifier used for recognition on various data transfer servers. If you don’t have a UUID, you can create a new one by logging into your device, then run the following command:

cat  /proc/sys/kernel/random/uuid

You can use the resulting string of this command (in the format 00000000-0000-0000-0000-000000000000) as your UUID. In further configurations, you will use the same UUID for each feeder of your station.

Create a heywhatsthat panorama ID

Heywhatsthat is a website that can generate an overlay on a map, showing a theoretical range based on obstacles and the curvature of the earth. In the upper left corner of the panorama page you will find the URL, which will look like this: https://www.heywhatsthat.com/?view=CW5KV545. This code will be used later in the configuration instructions.

To create a panorama, follow the steps below:

  • Go to https://heywhatsthat.com/,
  • Click New Panorama,
  • Set the exact location of your antenna,
  • Enter the title of your location / antenna,
  • Submit the request and wait for the processing to complete,

Installing Ultrafeeder using Docker Compose in Portainer

The Ultrafeeder container is the heart of our ADS-B receiver. It receives signals at 1090 MHz from your SDR, demodulates the messages, making them available to all other containers. We will now create a configuration file in Docker Compose using the Portainer.

  • From the Portainer’s home screen, select your device that you previously connected with the agent.

Portainer Environment

  • Go to the Stacks section, then Add stack.
    • Name: adsb-feeder
    • Web editor: Paste the following code content
version: '3.8'

services:
  ultrafeeder:
  # ultrafeeder combines a number of functions:
  # - it retrieves and decodes 1090MHz Mode A/C/S data from the SDR(s) using Wiedehopf's branch of readsb
  # - it implements a `tar1090` based map on port 80 (mapped to port 8080 on the host)
  # - it includes graph1090 (system statistics website) on http://xxxxx/graphs1090
  # - it sends ADSB data directly (without the need of additional containers) to the
  #   "new" aggregators, and, if desired, also to AdsbExchange
  # - it includes mlat-client to send MLAT data to these aggregators
  # - it includes an MLAT Hub to consolidate MLAT results and make them available to the built-in map and other services

    image: ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder
    tty: true
    container_name: ultrafeeder
    hostname: ultrafeeder
    restart: unless-stopped
    device_cgroup_rules:
      - 'c 189:* rwm'
    ports:
      - 8080:80               # to expose the web interface
    environment:
      # --------------------------------------------------
      # general parameters:
      - LOGLEVEL=error
      - TZ=${FEEDER_TZ}
      # --------------------------------------------------
      # SDR related parameters:
      - READSB_DEVICE_TYPE=rtlsdr
      - READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL}
      - READSB_RTLSDR_PPM=${ADSB_SDR_PPM}
      #
      # --------------------------------------------------
      # readsb/decoder parameters:
      - READSB_LAT=${FEEDER_LAT}
      - READSB_LON=${FEEDER_LONG}
      - READSB_ALT=${FEEDER_ALT_M}m
      - READSB_GAIN=${ADSB_SDR_GAIN}
      - READSB_RX_LOCATION_ACCURACY=2
      - READSB_STATS_RANGE=true
      #
      # --------------------------------------------------
      # Sources and Aggregator connections:
      # Note - remove the ones you are not using / feeding
      #  Make sure that each line ends with a semicolon ";",  with the
      #  exception of the last line which shouldn't have a ";"
      - ULTRAFEEDER_CONFIG=
          adsb,dump978,30978,uat_in;
          adsb,feed.adsb.fi,30004,beast_reduce_plus_out;
          adsb,in.adsb.lol,30004,beast_reduce_plus_out;
          adsb,feed.airplanes.live,30004,beast_reduce_plus_out;
          adsb,feed.planespotters.net,30004,beast_reduce_plus_out;
          adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out;
          adsb,data.avdelphi.com,24999,beast_reduce_plus_out;
          adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out;
          adsb,feed.radarplane.com,30001,beast_reduce_plus_out;
          adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out;
          mlat,feed.adsb.fi,31090,39000;
          mlat,in.adsb.lol,31090,39001;
          mlat,feed.airplanes.live,31090,39002;
          mlat,mlat.planespotters.net,31090,39003;
          mlat,feed.theairtraffic.com,31090,39004;
          mlat,skyfeed.hpradar.com,31090,39005;
          mlat,feed.radarplane.com,31090,39006;
          mlat,dati.flyitalyadsb.com,30100,39007;
          mlathub,piaware,30105,beast_in;
          mlathub,rbfeeder,30105,beast_in;
          mlathub,radarvirtuel,30105,beast_in;
          mlathub,planewatch,30105,beast_in
      # --------------------------------------------------
      - UUID=${ULTRAFEEDER_UUID}
      - MLAT_USER=${FEEDER_NAME}
      - READSB_FORWARD_MLAT_SBS=true
      #
      # --------------------------------------------------
      # TAR1090 (Map Web Page) parameters:
      - UPDATE_TAR1090=true
      - TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}
      - TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}
      - TAR1090_MESSAGERATEINTITLE=true
      - TAR1090_PAGETITLE=${FEEDER_NAME}
      - TAR1090_PLANECOUNTINTITLE=true
      - TAR1090_ENABLE_AC_DB=true
      - TAR1090_FLIGHTAWARELINKS=true
      - HEYWHATSTHAT_PANORAMA_ID=${FEEDER_HEYWHATSTHAT_ID}
      - HEYWHATSTHAT_ALTS=${FEEDER_HEYWHATSTHAT_ALTS}
      - TAR1090_SITESHOW=true
      - TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE=true
      - TAR1090_RANGE_OUTLINE_WIDTH=2.0
      - TAR1090_RANGERINGSDISTANCES=50,100,150,200
      - TAR1090_RANGERINGSCOLORS='#1A237E','#0D47A1','#42A5F5','#64B5F6'
      - TAR1090_USEROUTEAPI=true
      #
      # --------------------------------------------------
      # GRAPHS1090 (Decoder and System Status Web Page) parameters:
      - GRAPHS1090_DARKMODE=true
      #
      # --------------------------------------------------
    volumes:
      - /opt/adsb/ultrafeeder/globe_history:/var/globe_history
      - /opt/adsb/ultrafeeder/graphs1090:/var/lib/collectd
      - /proc/diskstats:/proc/diskstats:ro
      - /dev:/dev:ro
    tmpfs:
      - /run:exec,size=256M
      - /tmp:size=128M
      - /var/log:size=32M
Environment variables in the Portainer
  • In the above file, there are several parameters that have values labeled as ${PARAMETR}. These values are read from the environment variables section – which are described below.
  • Under the code editor, in the environment variables section, go to Advanced mode.

Advanced environment Portainer

  • Paste the following content, and the prompts that are in parentheses <TEXT> replace with values according to the legend described below:
FEEDER_ALT_FT=<wysokość anteny w stopach>
FEEDER_ALT_M=<wysokość anteny w metrach>
FEEDER_LONG=<szerokość geograficzna>
FEEDER_TZ=<strefa czasowa>
FEEDER_NAME=<nazwa lokalizacji>
ADSB_SDR_SERIAL=1090
ADSB_SDR_GAIN=autogain
ULTRAFEEDER_UUID=<Twój UUID z wcześniejszego kroku>
FEEDER_HEYWHATSTHAT_ID=<Twój ID z heywhatsthat z wcześniejszego kroku>
FEEDER_HEYWHATSTHAT_ALTS=<pożądane altitudy zasięgu teoretycznego>

Legend:

  • FEEDER_ALT_FT is the height of the antenna above sea level in feet,
  • FEEDER_ALT_M is the height of the antenna above sea level in meters,
  • FEEDER_LAT is the latitude of the antenna (also available at the link above),
  • FEEDER_LONG is the longitude of the antenna (also available at the link above),
  • FEEDER_TZ is the time zone in the format TZ database name,
  • FEEDER_NAME is the name of the location. It is used only in the title of the map’s website,
  • ADSB_SDR_SERIAL is the serial number of the ADS-B dongle; the previous steps set this to 1090 by default, but if you are using a different serial number, enter it here,
  • ADSB_SDR_GAIN is the desired gain of the dongle in dB or autogain, if you want the software to determine the optimal gain,
  • ULTRAFEEDER_UUID is the previously generated UUID,
  • FEEDER_HEYWHATSTHAT_ID is the code from the URL generated earlier,
  • FEEDER_HEYWHATSTHAT_ALTS is a list of altitudes in meters for which the map will display the theoretical maximum range; common starting points are 3000 meters and 12000 meters.

For example:

FEEDER_ALT_FT=50.524
FEEDER_ALT_M=15.4
FEEDER_LAT=52.16547
FEEDER_LONG=20.96719
FEEDER_TZ=Europe/Warsaw
ADSB_SDR_SERIAL=1090
ADSB_SDR_GAIN=autogain
ADSB_SDR_PPM=1
ULTRAFEEDER_UUID=00000000-0000-0000-0000-000000000000
FEEDER_HEYWHATSTHAT_ID=CW5KV545
FEEDER_HEYWHATSTHAT_ALTS=3000,12000

To return to the previous view, select Simple mode in the Portainer. In this mode, the Portainer will automatically assign the entered environment variables to the name and value categories. If you plan to add more ADS-B data aggregators to your setup, this will make the process easier, as you will be able to add variables that you will need in the future.

Implementing Docker Compose in production

The last step left is to create the environment and run the installation. To do so, under the Actions section, click on Deploy the stack and wait a while for the Docker container images to be downloaded to the device’s memory.

If everything goes successfully, the message Success: Stack successfully deployed will appear in the upper right corner of the screen, and then two newly created containers will appear in the container list.

On my Raspberry Pi there are currently as many as 12 containers responsible for sharing data to message aggregators. 🚀

Ultrafeeder after deployment

Access to data via browser

Once configured and running using the above example, the container will make the website available on port 8080 of the host. Here are some generated web pages:

  • http://IP-ADRES-RPI:8080/ : A map of tar1090 and a table of all aircraft that the antenna detected and decoded,
  • http://IP-ADRES-RPI:8080/graphs1090/ : A page with graphs and statistics of our receiver’s performance.

Where is the ADS-B data from my station transmitted to?

If you want to learn more about specific information and what protocol is used to send data from the receiver, take a look at the link here. The authors of SDR-Enthusiasts describe this question very precisely, along with a definition of who is a commercial and who is a non-profit data aggregator.

Additional sources and information

Thank you for reaching this point. For further exploration and more information, I recommend checking out the links below. They are valuable sources that were used in the development of this guide.

Filip Chochół

Filip Chochol runs two blogs: personal “chochol.io” and together with his girlfriend “Warsaw Travelers” about travel. He specializes in IT resource management and technical support, and has been active in the field of cyber security awareness for almost two years. A proponent of open-source technologies, he previously worked in the film and television industry in the camera division (2013-2021). After hours, he develops interests in smart homes and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *


This site uses Akismet to reduce spam. Learn how your comment data is processed.