How to Feed the Network

Share your ADS-B receiver with the Arkansas ADS-B Network. If you already run an ultrafeeder, it takes one line. This page also explains how ADS-B, MLAT and UAT work, so you know what you are contributing to.
The Short Version

Add this line to the ULTRAFEEDER_CONFIG of your ultrafeeder and recreate the container:

adsb,feed.adsb.allisononline.org,30004,beast_reduce_plus_out;

MLAT (recommended): add this line too. Set MLAT_USER to your Station ID (any name works if you already use one: tell the portal on your station page):

mlat,feed.adsb.allisononline.org,31090;

MLAT only works when your READSB_LAT, READSB_LON and READSB_ALT are your antenna's true position (within a few metres) and the same UUID is set. Your exact position is held only by the MLAT server and is never shown publicly. How MLAT works.

UAT: if you also have a 978 MHz receiver there is nothing extra to send us. Your 978 MHz aircraft travel through the same feed line above once your ultrafeeder reads your dump978 container. See What is UAT.

Your feeder is identified by the UUID value in the same configuration. After it connects, create an account and claim your feeder to name it and add its location. Everything the network is doing right now is on the service status page.

Am I Feeding?

Check whether the hub has seen a feeder from this network in the last 24 hours. Your public IP address is 216.73.217.22.

How It Works

ADS-B (Automatic Dependent Surveillance–Broadcast) is how most aircraft report themselves. The aircraft's own GPS works out where it is, and its transponder broadcasts that position, altitude, speed and identity about twice a second on 1090 MHz. Anyone with a small antenna and a USB radio can hear it, which is why a few hundred dollars of hobby equipment can watch the whole sky above a county.

Your receiver decodes those broadcasts and sends them to the network's hub, which merges every station into one picture. More stations mean better coverage: aircraft low to the ground, behind hills or far from any one antenna are heard by whoever is closest. The live map is that merged picture.

Not every aircraft is that simple, so the network uses several ways of knowing where something is. Selecting an aircraft on the live map tells you which one applies to it:

SourceWhat it is
ADS-B (1090 MHz)The aircraft broadcasts its own GPS position. The most accurate and the most common: airliners, most business jets and a large share of light aircraft.
MLATThe aircraft only answers radar-type interrogations, so no position is broadcast. The network works the position out from timing. See below.
UAT (978 MHz)A second datalink used only in the United States, mainly by light general-aviation aircraft below 18,000 ft. It needs its own receiver. See below.
ADS-RA ground station copies a report from one datalink (978) onto the other (1090) so aircraft on either can see each other. Same data, rebroadcast.
TIS-BA ground station sends a position it got from air-traffic radar for an aircraft that is not broadcasting. Shown, but not reported by the aircraft itself.
Mode S onlyThe aircraft is heard but nothing says where it is. If enough stations hear it, MLAT can find it.
What Is MLAT?

MLAT (multilateration) finds aircraft that do not broadcast a position. Radio travels at a fixed speed, so when an aircraft transmits, stations at different distances hear it at slightly different instants, a difference of millionths of a second. If three or more stations record exactly when they heard the same message, the differences place the aircraft at one point in the sky (four stations also give altitude). The same trick, run the other way, is how GPS works.

What your station does: your receiver time-stamps every message it hears with its own clock, and sends those timestamps (not your location data) to the network's MLAT server. The server compares all stations' clocks, using aircraft that do broadcast their position as reference beacons, and calculates positions for the others. The results come back to you and appear on the map labelled MLAT.

What it needs:

  • An exact position. Your latitude, longitude and the antenna's altitude above sea level must be right to within a few metres, because the whole calculation assumes it. A wrong location does not just fail; it makes your station's timing look bad to the others, and the server will pause it.
  • Neighbours. At least three stations must hear the same aircraft, so MLAT is best where stations overlap. Your station may sit at "connected, waiting for peers" until the next station near you joins; that is normal.
  • A steady receiver. A computer that is not overloaded, a USB radio that is not dropping samples, and a network without long delays or gaps.
  • The same UUID in your MLAT line as in your feed, and MLAT_USER set to your Station ID, so the portal can match your MLAT connection to your station and show you its health.

Privacy: the MLAT server needs your true coordinates. They stay on the server. The portal never publishes them: the public sees only the approximate location you chose when you claimed your station. See the MLAT network page for how stations are linked and how well.

Trade-offs: MLAT positions are less exact than ADS-B and arrive a moment later, and only aircraft heard by enough stations get one. It is an extra, not a replacement.

What Is UAT (978 MHz)?

UAT (Universal Access Transceiver) is the second ADS-B datalink, used only in the United States. Light general-aviation aircraft flying below 18,000 ft (18,000 ft is where airliners and most jets, which use 1090 MHz, take over) can choose either; many choose UAT because it also lets them receive weather and traffic information in the cockpit. In Arkansas that means many of the small planes you would otherwise never see.

It is a different frequency, so your 1090 MHz receiver cannot hear it. To contribute UAT you need:

  • a second USB radio (RTL-SDR dongles work), with its serial number set to 00000978 so the two radios can tell each other apart;
  • a 978 MHz antenna (it can be a short, simple one; 1090 MHz antennas are the wrong length);
  • the dump978 container, which decodes 978 MHz and hands the result to your ultrafeeder.

Nothing extra is sent to us. Once your ultrafeeder reads the dump978 container, the 978 MHz aircraft are merged into your normal feed, so the same line you already use carries them. They appear on the map as ADS-R/UAT. If you do not have a 978 MHz receiver you lose nothing: the network still shows UAT aircraft heard by the stations that do.

What You Need
  • A receiver: an RTL-SDR style USB dongle (1090 MHz) or similar ADS-B receiver. For UAT, a second one.
  • An antenna tuned for 1090 MHz, mounted as high as you can with a clear view of the sky. For UAT, a second antenna for 978 MHz.
  • Coax cable to connect them. Keep it as short as practical; low-loss cable matters on long runs.
  • A small always-on computer: a Raspberry Pi or any Linux machine that can run Docker.
  • A network connection that can reach feed.adsb.allisononline.org (see Ports).
  • Your exact location: latitude, longitude and the antenna's height above sea level. Needed for MLAT to work; use a map or a phone GPS, and measure the antenna's height, not the ground's.
Hardware
ItemOptions and Notes
Receiver RTL-SDR Blog V4 is a popular low-cost choice. Airspy Mini is a higher-performance option. FlightAware Pro Stick is a dongle with a built-in filter.
AntennaA 1090 MHz antenna such as a ground plane, collinear or a commercial ADS-B antenna. Outdoors and high beats indoors and low. A UAT antenna is a separate 978 MHz one.
Filter or LNAA 1090 MHz filtered preamp helps in areas with strong cellular or broadcast signals. Place it close to the antenna. (A 978 MHz filter is a different part.)
ComputerRaspberry Pi 3, 4 or 5, or any small Linux machine or home server that runs Docker.
Check your coverageHeyWhatsThat shows what your antenna location can see at different heights.
Hardware Setup
  1. Mount the antenna outdoors, as high as possible, away from metal obstructions and other antennas. Keep 1090 and 978 antennas a metre or more apart.
  2. Connect the antenna to the receiver with the shortest practical run of good coax. If you use a filter or LNA, put it between the antenna and the cable run.
  3. Plug the receiver into the computer's USB port, preferably a USB 2.0 port or a short extension cable to keep it away from the computer's noise.
  4. Give the computer a reliable network connection. A cable is better than Wi-Fi, and MLAT in particular dislikes a connection that stalls.
  5. If you add a UAT radio, set its serial number to 00000978 before plugging in both (for example rtl_eeprom -d 0 -s 00000978), so they cannot be mixed up.
Software Setup

The network is built around the ultrafeeder container from the SDR Enthusiasts project. It decodes your receiver, shows a local map, runs the MLAT client and feeds any number of networks.

New station (ultrafeeder)

  1. Install a Linux operating system. On a Raspberry Pi, the Raspberry Pi Imager writes Raspberry Pi OS to an SD card.
  2. Install Docker by following the SDR Enthusiasts Docker install script or the official Docker instructions.
  3. Make sure the computer's clock is kept right (the default systemd-timesyncd or chrony is fine). MLAT compares clocks.
  4. Generate a UUID for your station and keep it: cat /proc/sys/kernel/random/uuid
  5. Create /opt/adsb/compose.yaml with the example below, replacing the values in capitals.
  6. Start it with docker compose up -d in that folder.
services:
  ultrafeeder:
    image: ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder
    container_name: ultrafeeder
    hostname: ultrafeeder
    restart: unless-stopped
    device_cgroup_rules:
      - "c 189:* rwm"
    ports:
      - 8080:80
    environment:
      - TZ=America/Chicago
      - READSB_DEVICE_TYPE=rtlsdr
      - READSB_GAIN=auto
      - READSB_LAT=YOUR_LATITUDE
      - READSB_LON=YOUR_LONGITUDE
      - READSB_ALT=YOUR_ANTENNA_ALTITUDE_ABOVE_SEA_LEVEL_IN_METERS_m
      - READSB_RX_LOCATION_ACCURACY=2
      - UUID=YOUR_UUID
      - MLAT_USER=YOUR_STATION_ID
      - ULTRAFEEDER_CONFIG=
        adsb,feed.adsb.allisononline.org,30004,beast_reduce_plus_out;
        mlat,feed.adsb.allisononline.org,31090;
        adsb,dump978,30978,uat_in

      - TAR1090_PAGETITLE=My ADS-B Station
    volumes:
      - /opt/adsb/ultrafeeder/globe_history:/var/globe_history
      - /opt/adsb/ultrafeeder/graphs1090:/var/lib/collectd
      - /proc/diskstats:/proc/diskstats:ro
      - /dev/bus/usb:/dev/bus/usb
    tmpfs:
      - /run:exec,size=256M
      - /tmp:size=128M
      - /var/log:size=32M

  # only with a second (978 MHz) radio:
  dump978:
    image: ghcr.io/sdr-enthusiasts/docker-dump978
    container_name: dump978
    restart: unless-stopped
    device_cgroup_rules:
      - "c 189:* rwm"
    environment:
      - TZ=America/Chicago
      - DUMP978_RTLSDR_DEVICE=00000978
      - DUMP978_SDR_GAIN=autogain
      - LAT=YOUR_LATITUDE
      - LON=YOUR_LONGITUDE
    volumes:
      - /opt/adsb/dump978/globe_history:/var/globe_history
      - /dev/bus/usb:/dev/bus/usb

Set READSB_ALT to the height of the antenna above sea level, for example 98m or 320ft. Each line in ULTRAFEEDER_CONFIG except the last must end with a semicolon. MLAT_USER may only contain letters, digits, dashes and underscores. If your 1090 radio has a serial number set, add READSB_RTLSDR_DEVICE=SERIAL as well. Without a UAT radio, delete the UAT line (adsb,dump978,30978,uat_in) and the whole dump978 section.

Already feeding other networks

Keep your existing configuration and add our lines to ULTRAFEEDER_CONFIG (the lines shown in The Short Version), then set UUID and, for MLAT, MLAT_USER. If you already run MLAT for another network, that is fine: the MLAT client runs once per network. The full list of options is in the SDR Enthusiasts ADS-B guide.

Not using ultrafeeder? (readsb, dump1090-fa, PiAware)

Ultrafeeder users can skip this whole part. Ultrafeeder already contains the MLAT client and starts it from the mlat,... line, so there is nothing extra to install. This section is only for stations that run other software. Anything that offers a Beast output can feed us. With readsb:

--net-connector feed.adsb.allisononline.org,30004,beast_reduce_plus_out

For MLAT with this kind of setup you do need to install the separate mlat-client program and run it against your receiver's Beast output:

mlat-client --input-type dump1090 --input-connect 127.0.0.1:30005 \
  --server feed.adsb.allisononline.org:31090 --user YOUR_STATION_ID --uuid YOUR_UUID \
  --lat YOUR_LATITUDE --lon YOUR_LONGITUDE --alt YOUR_ANTENNA_ALTITUDE_IN_METERS \
  --results beast,connect,127.0.0.1:30104
After You Are Feeding
  1. Use Am I Feeding above to confirm the hub sees your station.
  2. Create an account and sign in.
  3. Claim your feeder. If you are on the same network as the receiver it is found automatically; otherwise paste its UUID.
  4. Choose a station ID, set the location with the map, and describe your setup. You decide whether the public sees an approximate location, the exact one, or none. This does not change what MLAT receives from your receiver.
  5. Open My Feeders and your station to see your station's MLAT status, in plain words, with what to fix if it is not working. The MLAT network page shows which stations yours is synchronised with.
  6. Your station's range, activity and uptime appear on its page and in the network statistics.
Ports and Firewall

Your station only makes outbound connections. You do not need to open or forward anything on your router.

WhatDirectionDestinationPort
ADS-B feedoutbound TCPfeed.adsb.allisononline.org30004
MLAToutbound TCPfeed.adsb.allisononline.org31090

If your network filters outbound traffic (some schools, businesses and carrier-grade NAT connections do), allow those ports to the host name above.

Troubleshooting
SymptomWhat to check
Am I Feeding finds nothingLook at docker logs ultrafeeder for the line mentioning feed.adsb.allisononline.org. Check the line ends in beast_reduce_plus_out, a semicolon separates each entry, and the host can reach port 30004 (nc -vz feed.adsb.allisononline.org 30004). The check only sees feeders on the same public address as this browser.
Fed once, now shows offlineThe container stopped or the network dropped. Run docker compose ps and docker compose up -d. The status page shows whether the network side is healthy.
Fewer aircraft than expectedAntenna height and view matter most. Check for a loose connector, long coax or an indoor antenna; a filtered preamp helps near strong transmitters.
MLAT: not connectedThe mlat,... line is missing or has a typo, or MLAT_USER contains a space or symbol. docker logs ultrafeeder | grep -i mlat shows the client's messages.
MLAT: connected, waiting for peersNormal when no other station nearby does MLAT yet. It starts by itself once three stations hear the same aircraft.
MLAT: sync problem or timed outAlmost always the position: check latitude, longitude and especially the antenna altitude above sea level to a few metres. Then check the computer's load and clock, and that the USB radio is not dropping samples.
MLAT status says not connected but logs look fineThe portal matches by UUID first, then by the MLAT User Name saved on your station page, then by a MLAT_USER equal to your Station ID. Make sure the same UUID is set, or save your existing MLAT_USER as the MLAT User Name.
UAT: nothing arrivesBoth radios must have different serial numbers (rtl_test lists them), the 978 antenna must be a 978 antenna, and docker logs dump978 should show messages. Check that your ultrafeeder has the line adsb,dump978,30978,uat_in. UAT aircraft are sparse; try during daytime.
Your Data and Privacy
  • The aircraft messages you send are public flight data. They are merged into the network's map and statistics.
  • Your location is shown publicly only as you choose: approximate, exact or hidden. The MLAT server needs your exact position to work and keeps it private; the portal never shows it.
  • You can change your choice, rename the station, or delete your account at any time from your account pages.
  • Station statistics (uptime, messages, range) are public for named stations, without anything that reveals a hidden location.
More Help