Feed UAT (978 MHz)

The second ADS-B datalink, used only in the United States. It needs its own radio and antenna, but nothing extra is sent to the network: the 978 MHz aircraft travel through the same feed as your ADS-B.
The Short Version

With a second radio (serial number 00000978) and a 978 MHz antenna, run the dump978 container next to your ultrafeeder and add this line to the ULTRAFEEDER_CONFIG (the line before it needs a semicolon):

adsb,dump978,30978,uat_in

There is no separate feed line for us: your 978 MHz aircraft go out through the line from the ADS-B page. Without a 978 MHz radio you lose nothing, because the network still shows UAT aircraft heard by the stations that have one.

How It Works

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. A second radio tuned to 978 MHz feeds the dump978 container, which decodes it and hands the result to your ultrafeeder. From there the aircraft are merged into your normal feed and appear on the map as UAT/ADS-R.

ADS-R is the same data rebroadcast by ground stations onto 1090 MHz; the map groups both as UAT / ADS-R. See the source table on the ADS-B page.

What You Need
  • A working ADS-B feed with an ultrafeeder (or a decoder that can take a 978 MHz input).
  • 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. A 1090 MHz antenna is the wrong length.
  • The dump978 container (a second service in your compose.yaml), on the same computer.
  • Your latitude and longitude for the dump978 container (the same as the ADS-B ones).
Hardware
ItemOptions and Notes
RadioAn RTL-SDR dongle, such as the RTL-SDR Blog V4, dedicated to 978 MHz. Two radios on one computer: use two separate USB ports, preferably a powered hub or short extensions.
AntennaA 978 MHz antenna: a simple quarter-wave ground plane has elements about 7.7 cm (3 inches) long, or buy one made for UAT. Mount it outdoors and high, on the same mast as the 1090 antenna but about a metre away from it.
Filter or LNAA band-pass filtered preamp for 978 MHz helps where there is strong cellular noise. It is a different part from the 1090 MHz one.
ComputerThe same Raspberry Pi 3, 4 or 5 or small Linux machine as for ADS-B; UAT adds little load.
Hardware Setup
  1. Set the serial number of the 978 MHz radio before plugging in both radios, so they cannot be mixed up: with only that radio connected, run rtl_eeprom -d 0 -s 00000978, unplug it and plug it back in. rtl_test lists the serial numbers.
  2. If your 1090 radio has its own serial number set, tell the ultrafeeder with READSB_RTLSDR_DEVICE=SERIAL.
  3. Mount the 978 MHz antenna outdoors, high, with a clear view, about a metre or more from the 1090 antenna.
  4. Connect it to the 978 radio with a short run of good coax, with the filter or LNA (if any) close to the antenna.
  5. Plug both radios into separate USB ports and give the computer a reliable network connection.
Software Setup

Add the dump978 service to the compose.yaml from the ADS-B software setup, and the line that reads it to the ultrafeeder:

services:
  ultrafeeder:
    environment:
      # ...everything from the ADS-B page, then in ULTRAFEEDER_CONFIG add the 978 line:
      - ULTRAFEEDER_CONFIG=
        adsb,feed.arksignal.net,30004,beast_reduce_plus_out;
        mlat,feed.arksignal.net,31090;
        adsb,dump978,30978,uat_in

  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

Each line in ULTRAFEEDER_CONFIG except the last needs a semicolon. Recreate with docker compose up -d; docker logs dump978 should show messages after a few minutes.

Not using ultrafeeder?

With readsb, add the decoder as an input: --net-connector dump978,30978,uat_in. PiAware users run dump978-fa and its skyaware978 output and need a way to merge it into the feed; ultrafeeder is the easier route.

After You Are Feeding
  1. Use Am I Feeding? to confirm the hub sees your station.
  2. Create an account and sign in, then claim your feeder. If you are on the same network as the receiver it is found automatically; otherwise paste its UUID.
  3. 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 the receiver sends.
  4. UAT and ADS-R aircraft appear on the live map under the Data Source filter (UAT / ADS-R), and the Coverage Map can show them as they arrive.
Ports and Firewall

UAT needs nothing extra. dump978 hands its data to the ultrafeeder on the same computer (port 30978, local only), and your 978 MHz aircraft go out with the normal feed:

WhatDirectionDestinationPort
Feed (carries UAT too; see the ADS-B page)outbound TCPfeed.arksignal.net30004
Troubleshooting
SymptomWhat to check
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.
The 1090 side stopped after adding the second radioThe two radios were mixed up: set the serial number of the UAT radio as above and, if needed, READSB_RTLSDR_DEVICE for the 1090 one.
Very few UAT aircraftUAT is used by fewer aircraft, only at lower altitudes and with shorter range than 1090. A higher antenna and a 978 MHz filter help.
Aircraft show but not as UATADS-R rebroadcasts are shown under the same UAT / ADS-R group; the aircraft card says how its position is known.
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