From Drake Panzer

NOAA weather satellites broadcast pictures of the Earth using in an Automatic Picture Transmission (APT) signal. I created a program to handle all parts of receiving the APT transmission, from tracking to decoding.

APTbot is designed to be run on a Raspberry Pi and use the RTL-SDR dongle.


Starting this project, I wanted to create a system that would predict, record, and decode NOAA weather satellites so I didn't have to sit outside for half an hour every day to record the satellite passes. There are programs out there that can sort of do this, but they're complicated, lacking, and not completely hands-free. APTbot works extremely well for me.


Tracking the Satellites

APTbot will track the NOAA satellites (15, 18, 19) and determine the intercept that would result in the best signal. Then, it waits until the satellite is in range to begin recording.

Automated Recording

After waiting for the satellite to come in range, APTbot will automatically start recording the satellite on the correct frequency.


Once the satellite has gone out of range, APTbot will then transcode the output to a wav file and decode it. noaa-apt and WXtoIMG are used to create enhanced images.

Web UI

The web UI

APTbot comes with an optional web UI to display the decoded images and the upcoming intercepts.


  • After a pass, the resulting images will be uploaded
  • The next intercept is displayed
  • Previous intercepts are archived and available for download

TLE Update

APTbot manages updating the prediction program (Predict), where TLE files are downloaded from the internet and added to the database. Predict is very finicky so this helps smooth out the operation.


APTbot in action

Start APTbot like this:

./noaa-capture/automated_noaa.py --start fm

This will calculate the next intercept and start the countdown.

I suggest you verify the predictions with gpredict. If your AOS in APTbot don't match gpredict's you need to update the TLEs or your ground station location in Predict is incorrect. If you think the ground station is incorrect, try changing the negative signs of the lat/lon.

TLEs should be updated at least once a week and at most daily.

If you are having trouble, run it with the --verbose flag to see what its doing.

To enable bias-T: rtl_eeprom -b y.


APTbot will automatically decode the resulting wav file. What enhancements are used is determined by config values decoder and wxtoimg_enhancements.

The only decoder that supports enhancements is WXtoIMG. To set this as the decoder, set the key decoder to wxtoimg or both.

To set what enhancements are used, use wxtoimg_enhancements. The possible values and an explantation of each one are here: WXtoIMG Enhancements.

Decoders Explanation

noaa-apt: Very simple, very reliable. Produces very basic images. Will always try to produce an image regardless of signal strength.

WXtoIMG: Feature packed, produces quality images. Has many enhancements to output fancy images. Will fail to read signal if the strength is too low.

I suggest using both decoders.


  1. Run setup.sh, which does:
    • Installs dependencies
    • Installs pip packages
    • Installs the RTL-SDR blog drivers for the RTL-SDR v3
    • Blacklists unnessesary kernel drivers
  2. Set up Predict:
    • Do predict
    • Enter the information Predict tells you to
  3. Move config.sample.yaml to config.yaml and modify these fields:
    • wxtoimg_tlefile
    • wxtoimg_basestation
    • If you're using the web ui:
      • Change upload and swordfish
      • Modify Website/config.php
      • DATABASEDIR needs to be a www-data writable path for the database file
      • Upload the files in Website to a webserver
  4. Update Predict's kepler database: ./noaa-capture/automated_noaa.py --update
  5. To start on boot:
    • Edit file paths in Other/APTbot.cron.sample to match your setup
    • Add to crontab: @reboot /path/to/noaa-apt-automated/Other/APTbot.cron
    • Do chmod +x /path/to/noaa-apt-automated/Other/APTbot.cron

To Do

  • Make the program more modular so that it is easy to reconfigure APTbot for other (non-NOAA) satellites.
  • Logging to file
  • Fancy terminal colors
  • Make decoding optional
  • Option to enable/disable the basestation location in WXtoIMG
  • Better cross-platform, less pi-specific features/settings/code.
  • Make this work well in a remote, unattended setup. (send error messages to server, etc)
  • Use elevation instead of range


Images recorded with APTbot.