Comment on page
Deploy "dump978" (USA Only)
The "dump978" container receives 978MHz UAT signals from your SDR, and demodulates ADS-B UAT messages, making them available for all other containers.
The FAA has adopted 1090MHz for all flight levels, and UAT only for operations below 18,000 feet. UAT supports two-way links, and the FAA provides additional services on the uplink including TIS-B, and ADS-R, as well as FIS-B, for weather and aeronautical information. Dual 1090/UAT systems have not been adopted in any other country.
If you live outside of the USA (or only have one SDR), you can skip this section!
Every RTL-SDR dongle will have a small frequency error as it is cheaply mass produced and not tested for accuracy. This frequency error is linear across the spectrum, and can be adjusted in most SDR programs by entering a PPM (parts per million) offset value. This allows you to adjust the PPM figure using the ADSB_SDR_PPM environment variable.
Unplug all SDRs, leaving only the SDR to be used for 978MHz reception plugged in. Issue the following command:
docker run --rm -it --entrypoint /scripts/estimate_rtlsdr_ppm.sh --device /dev/bus/usb ghcr.io/sdr-enthusiasts/docker-readsb-protobuf:latest
This takes about 30 minutes and will print a numerical value for Estimated optimum PPM setting.
Inside your application directory (
/opt/adsb), edit the
.envfile using your favourite text editor. Beginners may find the editor
nanoeasy to use:
This file holds all of the commonly used variables (such as our latitude, longitude and altitude). We're going to add more variables associated with UAT dongles.
UAT_SDR_GAIN=<your desired gain>
UAT_SDR_PPM=<your PPM from the step above>
UAR_SDR_SERIALis set to the serial number for your ADS-B dongle; the previous serialization steps set this to 978 by default but if you have used a different serial number enter it here
UAT_SDR_GAINis set to your desired dongle gain in dB, or
autogainif you would like the software to determine the optimal gain
UAT_SDR_PPMis set to your desired dongle PPM setting. Enter the number from the PPM estimation step earlier on this page.
docker-compose.ymlfile that was created when deploying
Append the following lines to the end of the file (inside the
- 'c 189:* rwm'
To explain what's going on in this addition:
- Create a service named
dump978that will run the
- We're presenting the USB bus through to this container (so
dump978can talk to the USB-attached SDR).
- We're passing several environment variables to the container:
TZwill use the
FEEDER_TZvariable from your
dump978to use the RTL-SDR device with the serial from your
- The container will use the SDR gain, PPM, and Device Serial values from your
docker compose, we also want to update the configuration of the
ultrafeedercontainer, so that it pulls the demodulated UAT data from the
docker-compose.ymland make the following environment value is part of the
ULTRAFEEDER_CONFIGvariable to the
In addition, add these lines in the
GRAPHS1090section of the
# GRAPHS1090 (Decoder and System Status Web Page) parameters:
To explain this addition, the
ultrafeedercontainer will connect to the
dump978container on port
30978and receive UAT data. This UAT data will then be included in any outbound data streams from
At this point, you can issue the command
docker compose up -dto refresh both the
Firstly, it should be noted that there is generally vastly less UAT traffic than ADS-B 1090MHz traffic, so don't immediately assume the
dump978container isn't working if you can't immediately see UAT flights. Provided the container is running and healthy, to see the data being received and decoded by our new container, run the command
docker exec -it dump978 viewadsb. This should display a real-time departure-lounge-style screen showing all the aircraft being tracked.
Hex Mode Sqwk Flight Alt Spd Hdg Lat Long RSSI Msgs Ti |
A646B3 S 3000 83 295 42.106 -71.352 -24.7 22 0
... other aircraft removed from output for brevity ...
CTRL-Cto escape this screen.
You should also be able to point your web browser at
http://docker.host.ip.addr:30980/skyaware978to view the web interface (change
docker.host.ip.addrto the IP address of your docker host). You should see a map showing your currently tracked aircraft by the docker-dump978 container; these may include both aircraft received via UAT as well as TIS-B/ADS-R repeated transmissions that you receive at 978 MHz.
The majority of feeders will happily accept a combined 1090MHz & 978MHz feed coming from
ultrafeeder, so there should be nothing further to do.
The current exceptions are:
piaware- FlightAware has separate feeder binaries for 1090MHz and 978MHz.
radarbox- Radarbox needs some additional parameters to support both 1090MHz and 978MHz.
The additional configuration directives are discussed on each container's page.