Skip to content

Automate the receiving and logging of radio transmissions from overhead satellites with a Raspberry Pi.

Notifications You must be signed in to change notification settings

Un1xG0d/StarStream

Repository files navigation

StarStream

Overview

The idea behind this project is to automate the receiving and logging of communications from the amateur radio repeater on the International Space Station.

It uses the real-time location of the ISS to determine distance from the user and automatically starts receiving through an attached SDR when the conditions are deemed acceptable.

It can also automatically capture and process NOAA weather satellite images.



Getting Started

Configure Raspberry Pi

Install Raspberry Pi OS Lite (64 bit) onto your Raspberry Pi, configure the WiFi settings, and create an account with the username admin.

This is the headless mode without a GUI, which will make the system last longer on battery power.

Install dependencies

Install required software with the commands:

sudo apt install -y gpsd gpsd-clients python3-pip rtl-sdr sox
pip3 install -r requirements.txt

You will also need to install the NOAA-APT image decoder:

wget https://github.com/martinber/noaa-apt/releases/download/v1.4.1/noaa-apt-1.4.1-aarch64-linux-gnu-nogui.zip -O /home/admin/StarStream/decoder/noaa-apt-1.4.1-aarch64-linux-gnu-nogui.zip
unzip /home/admin/StarStream/decoder/noaa-apt-1.4.1-aarch64-linux-gnu-nogui.zip -d /home/admin/StarStream/decoder/
rm -rf /home/admin/StarStream/decoder/noaa-apt-1.4.1-aarch64-linux-gnu-nogui.zip

You may need to configure GPSD to use your USB GPS receiver:

sudo sed -i 's/GPSD_OPTIONS=""/GPSD_OPTIONS="\/dev\/ttyUSB0"/' /etc/default/gpsd

Set up API accounts

You will need to create an OpenAI API key to handle the audio-to-text transcriptions, and an ngrok token to expose the Flask app to the internet without any additional setup like port forwarding.

You will also need to create a Gmail app password to send the latest dashboard URL to yourself when the app is started.

If you want to capture images from the NOAA satellites, you will also need an API key for the N2YO API.

Once you have these, create a .env file in the root project directory and populate it with your personal tokens:

GMAIL_ADDRESS=example@gmail.com
GMAIL_APP_PASSWORD=xxxxxxxxxxxxxxxxxxx
N2YO_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxx
NGROK_AUTHTOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Connect your SDR

Before starting the trackers, make sure your SDR is connected via USB. I am using the RTL-SDR kit from this link.

Run the bootstrap script

Run bootstrap.sh once to configure a crontab that automatically starts both the tracking scripts and the web dashboard on boot.

bash bootstrap.sh

Start the ISS tracking script

Start the ISS tracking script as a background process:

python3 tracker_iss.py &

This script will constantly query the location of the ISS and will start recording when the distance is less than 750 miles away from your current location and the elevation is more than 15 degrees. You can adjust these variables in the config object.

Start the NOAA tracking script

Start the NOAA tracking script as a background process:

python3 tracker_noaa.py &

This script collects a list of NOAA satellite passes overhead of your location. It constantly compares the timestamps of the future passes to the current timestamp, and starts recording when the satellite is nearby. It will automatically process each recording into a satellite image, which you can view on the web interface.

Launch the web interface

python3 web.py

The Dashboard page has general information on the status of the ISS, your recordings, and a map of the real-time position of the ISS. It also displays a list of future NOAA satellite passes at your location.

The Recordings page lets you analyze individual captures, play the converted audio files, read transcripts of the communications, and view any processed satellite images.

The Controls page allows you to specify parameters and manually capture a recording.

The Logs page displays the most recent output of the tracker scripts.

References

NOAA-APT Image Decoder Documentation

N2YO API Documentation

Where the ISS at? API Documentation

RTL_FM Documentation