There already is quite a bunch of programs fullfilling the same function, that is managing an automatic satellite receiving / decoding station aimed at NOAA / METEOR, but none worked the way I wanted it to... So was born Auto137, a python-based autonomous APT / LRPT / etc station made to easily support more options and be cleaner (only 1 language).
This program, along with the necessary external tools and libraries, can do all this :
- TLE fetching from Celestrak
- Predict passes
- Record satellites passes
- Decode it
- Pass conflict solving, including priorities
- Easy support for other protocols
- Multi-Threaded, decoding does not impact reception
All decoded data is saved into the chosen directory and an optional RSS feed can be enabled (no history saving to save on size).
- rtl_sdr (could be modified to use anything else)
- ffmpeg
- noaa-apt (APT decoding)
- Meteor M2 Demodulator (QPSK demodulation)
- LRPT Decoder (LRPT image decoding)
- satellitetle (TLE fetching)
- orbit-predictor (Pass prediction)
- pyyaml (YAML config file)
- apscheduler (Task scheduling)
- PyRSS2Gen (Rss feed generation)
This procedure should work on any debian-based system (including Raspbian). If using anything else replace apt with your distro's package manager (eg. dnf, yum, pacman, opkg).
Start by installing all required packages through your package manager, including pip for other dependencies.
sudo apt install ffmpeg rtl-sdr python3-pip python3-numpy fpc build-essential
Then install all python libraries.
sudo pip3 install satellitetle orbit_predictor apscheduler pyyaml PyRSS2Gen
Now you need to install noaa-apt (download here), and compile meteor_demod and meteor_decoder :
git clone https://github.com/artlav/meteor_decoder.git && cd meteor_decoder && sh ./build_medet.sh && sudo cp medet /usr/bin
git clone https://github.com/dbdexter-dev/meteor_demod.git && cd meteor_demod && make && sudo make install
Now clone this git repo, edit the config file to your likings and start main.py using python3 main.py
. If you experience an exception concerning config = yaml.load(f, Loader=yaml.FullLoader)
, change it into config = yaml.load(f)
.