Skip to content

Instantly share code, notes, and snippets.

@nickoe
Created March 5, 2020 07:33
Show Gist options
  • Save nickoe/3f3c11314ee8c5699a3f7671cb3d5897 to your computer and use it in GitHub Desktop.
Save nickoe/3f3c11314ee8c5699a3f7671cb3d5897 to your computer and use it in GitHub Desktop.
radiosonde_auto_rx Jutland config example
[nickoe@z620 auto_rx]$ pwd
/home/nickoe/radiosonde_auto_rx/auto_rx
[nickoe@z620 auto_rx]$ python auto_rx.py -c station.cfg
#
# Radiosonde Auto RX v2 Station Configuration File
#
# Copy this file to station.cfg and modify as required.
#
###################
# RTLSDR SETTINGS #
###################
[sdr]
# Number of RTLSDRs to use.
# If more than one RTLSDR is in use, multiple [sdr_X] sections must be populated below
sdr_quantity = 1
# Individual SDR Settings.
[sdr_1]
# Device Index / Serial
# If using a single RTLSDR, set this value to 0
# If using multiple SDRs, you MUST allocate each SDR a unique serial number using rtl_eeprom
# i.e. to set the serial number of a (single) connected RTLSDR: rtl_eeprom -s 00000002
# Then set the device_idx below to 00000002, and repeat for the other [sdr_n] sections below
device_idx = 00000003
# Frequency Correction (ppm offset)
# Refer here for a method of determining this correction: https://gist.github.com/darksidelemm/b517e6a9b821c50c170f1b9b7d65b824
#ppm = 75
#ppm = 90
ppm = 0
# SDR Gain Setting
# Gain settings can generally range between 0dB and 40dB depending on the tuner in use.
# Run rtl_test to confirm what gain settings are available, or use a value of -1 to use hardware automatic gain control (AGC).
# Note that this is an overall gain value, not an individual mixer/tuner gain. This is a limitation of the rtl_power/rtl_fm utils.
#gain = -1
#gain = 40.2
#gain = 20.7
#gain = 10.0
gain = 12.5
# Bias Tee - Enable the bias tee in the RTLSDR v3 Dongles.
bias = False
#[sdr_2]
# As above, for the next SDR, if used. Note the warning about serial numbers.
#device_idx = 00000002
#ppm = 0
#gain = -1
#bias = False
# Add more SDR definitions here if needed.
##############################
# RADIOSONDE SEARCH SETTINGS #
##############################
[search_params]
# Minimum and maximum search frequencies, in MHz.
# Australia: Use 400.05 - 403 MHz
# Europe: Use 400.05 - 406 MHz
# US:
# Some areas have transitioned to the 400.05 - 406 MHz band.
# Some areas are using ~1680 MHZ sondes, which use channels of 1676, 1678, 1680 and 1682 MHz (Thanks Tory!)
# In these areas I suggest using the whitelist feature below instead of using the peak-detect search.
# You may also need to apply a small offset to the frequency for decoding reliability (i.e. 1676.025 MHz) as
# the sondes are often off-frequency. For now, check in something like GQRX to get an idea of what offset is required.
#min_freq = 401.0
#max_freq = 403.0
min_freq = 400.9
max_freq = 405.9
# Have the decoder timeout after X seconds of no valid data.
rx_timeout = 180
# Frequency Lists - These must be provided as JSON-compatible lists of floats (in MHz), i.e. [400.50, 401.520, 403.200]
# White-List - Add values to this list to *only* scan on these frequencies.
# This is for when you only want to monitor a small set of launch frequencies.
whitelist = []
# Black-List - Any values added to this list will be removed from the list of detected peaks.
# This is used to remove known spurs or other interferers from the scan list, potentially speeding up detection of a sonde.
#blacklist = [403.200]
#blacklist = [403.237, 403.240]
blacklist = [402.00, 402.001, 403.237, 403.240]
# Grey-List - Any values in this list will be added to the start every scan run.
# This is useful when you know the regular frequency of a local sonde, but still want to allow detections on other frequencies.
greylist = [401.870, 402.870, 402.500]
####################
# STATION LOCATION #
####################
# Used by the Habitat Uploader, APRS Uploader, and by Rotator Control
[location]
station_lat = 57.01191
station_lon = 9.97619
station_alt = 0.0
# Location Code (Maximum 5 characters)
# This is ONLY used by the Intermet iMet decoder, to provide additional entropy when
# generating a unique ID for the iMet sondes, which do not transmit their serial number.
# If you know the WMO number of the launch site, then this would be a good value to use.
# Otherwise the ICAO Code of the airport nearest to the launch site would also work.
# If you are not expecting to RX iMet sondes, then this can be left at its default.
# NOTE: Only change this if you are 100% sure you will only be receiving sondes from a single launch location!
station_code = SONDE
# Station Position from GPSD
# If your station is likely to move, then you may wish to have your station position updated from GPSD.
# NOTE: This feature is intended to make life slightly easier when using an auto_rx station in a portable
# capacity, in particular when using a rotator. For the web interface to start up correctly, a lat/lon still
# needs to be entered above.
# For balloon chasing, chasemapper is much better suited: https://github.com/projecthorus/chasemapper
gpsd_enabled = False
gpsd_hostname = localhost
gpsd_port = 2947
###########################
# HABITAT UPLOAD SETTINGS #
###########################
# Settings for uploading to the Habitat HAB tracking database ( https://tracker.habhub.org/ )
# Note that the habitat upload will use a fixed string format of:
# `$$<payload_callsign>,<sequence number>,<time>,<lat>,<lon>,<alt>,<speed>,<temp>,<humidity>,<comment>*<CRC16>`
# Where callsign is set below. Temp values are only supported on the RS41 at this time.
# If you use a custom payload callsign, you will need to create an appropriate payload document for it to appear on the map
#
[habitat]
habitat_enabled = True
# Uploader callsign, as shown above. PLEASE CHANGE THIS TO SOMETHING UNIQUE.
uploader_callsign = N0CALL
# Upload listener position to Habitat? (So you show up on the map)
upload_listener_position = True
# Uploader Antenna Description.
# If upload_listener_position is enabled, this information will show up in your station description on the habhub map.
uploader_antenna = 1/4 wave monopole
# Habitat Upload Rate - Upload a packet every X seconds.
# IMPORTANT NOTE: Please remember that the use of Habitat for tracking radiosondes is secondary to its primary purpose of
# tracking amateur high-altitude balloon flights. It is STRONGLY RECOMMENDED that the update rate is not set to anything
# lower than 30 seconds, to avoid congesting the system and causing higher processing latencies. If this becomes a problem,
# then we may have to implement server-side rate-limiting to avoid affecting performance.
upload_rate = 30
# Payload callsign - if set to <id> will use the serial number of the sonde and create a payload document automatically
# WARNING - If running multiple RTLSDRs, setting this to a fixed callsign will result in odd behaviour on the online tracker.
# DO NOT SET THIS TO ANYTHING OTHER THAN <id> IF YOU ARE USING MORE THAN ONE SDR!
payload_callsign = <id>
########################
# APRS UPLOAD SETTINGS #
########################
# Settings for uploading to APRS-IS
[aprs]
# Enable APRS upload (you will also need to change some options below!)
aprs_enabled = False
# APRS-IS Login Information
# The aprs_user field can have an SSID on the end if desired, i.e. N0CALL-4
#aprs_user = N0CALL
#aprs_pass = passcode_here
# APRS Upload Rate - Upload a packet every X seconds.
upload_rate = 30
# APRS-IS server to upload to.
# Default to radiosondy.info for now, to allow stats to show up on http://radiosondy.info
# Packets are forwarded onto the rest of the APRS-IS network from radiosondy.info.
# If you wish to inject packets directly into the APRS-IS network, use rotate.aprs2.net
aprs_server = radiosondy.info
# Object name / Callsign to be used when uploading to APRS-IS (Max 9 chars)
# Should be either a callsign with a -11 or -12 suffix (i.e. N0CALL-12),
# or <id>, which will be replaced with the radiosondes serial number.
# WARNING - If running multiple RTLSDRs, setting this to a fixed callsign will result in odd behaviour on the online tracker.
# DO NOT SET THIS TO ANYTHING OTHER THAN <id> IF YOU ARE USING MORE THAN ONE SDR!
aprs_object_id = <id>
# Select between uploading the radiosonde position as either an APRS Object, or as a position report.
# False = Upload position as an Object, sourced from <aprs_user>
# True = Position Report (with emulated iGating via <aprs_user>)
# Note that if using Position Reports with aprs_object_id set to <id>, then non-AX.25 compatible callsigns will be generated.
# If in doubt, leave this at False.
aprs_position_report = False
# The APRS-IS beacon comment. The following fields can be included:
# <freq> - Sonde Frequency, i.e. 401.520 MHz
# <type> - Sonde Type (RS94/RS41)
# <id> - Sonde Serial Number (i.e. M1234567)
# <vel_v> - Sonde Vertical Velocity (i.e. -5.1m/s)
# <temp> - Sonde reported temperature. If no temp data available, this will report -273 degC. Only works for RS41s.
# The default comment (below) is compatible with radiosondy.info's parsers, and should only be modified
# if absolutely necessary.
aprs_custom_comment = Clb=<vel_v> t=<temp> <freq> Type=<type> Radiosonde http://bit.ly/2Bj4Sfk
# APRS Station Location Beaconing
# If enabled, you will show up on APRS using the aprs_user callsign set above.
# This also requires your station location to be set in the above [location] section.
station_beacon_enabled = True
# Station beaconing rate, in minutes.
station_beacon_rate = 30
# Station beacon comment.
# <version> will be replaced with the current auto_rx version number
station_beacon_commment = radiosonde_auto_rx SondeGate v<version>
# Station Beacon Icon
# The APRS icon to use, as defined in http://www.aprs.org/symbols.html
# Note that the two characters that define the icon need to be concatenated. Examples:
# Antenna Tower = /r
# House with Yagi = /y
# Satellite Dish = /` (This is required if you want to show up on radiosondy.info's station list.)
station_beacon_icon = /`
###########################
# CHASEMAPPER DATA OUTPUT #
###########################
# Settings for pushing data into Chasemapper and/or OziPlotter
# Oziplotter receives data via a basic CSV format, via UDP.
# Chasemapper can receive data in either the basic CSV format, or in the more descriptive 'payload summary' JSON format.
[oziplotter]
# How often to output data (seconds)
ozi_update_rate = 5
# Enable the 'OziMux' basic CSV output
# Note - this cannot be enabled in a multi-SDR configuration.
ozi_enabled = False
# OziMux UDP Broadcast output port.
# Set to 8942 to send packets directly into OziPlotter, or set to 55681 to send via OziMux
ozi_port = 8942
# Payload summary UDP output, which is the preferred input if using ChaseMapper.
# Using this output allows multiple sondes to be plotted in Chasemapper.
# As of 2019-05, this is enabled by default.
payload_summary_enabled = True
payload_summary_port = 55673
#######################
# EMAIL NOTIFICATIONS #
#######################
# Sends an email notification to the specified address when a new Sonde is detected
[email]
email_enabled = False
# Server details. Note that usually Port 465 is used for SSL auth, and 587 is used for TLS.
smtp_server = localhost
smtp_port = 25
# Authentication type, Valid options are: None, TLS, and SSL
smtp_authentication = None
# If using authentication, the following fields need to be populated:
smtp_login = None
smtp_password = None
# 'Source' e-mail
from = sonde@localhost
# Destination emails. You can send to multiple addresses by separating each address with a semicolon,
# i.e. test@test.com;test2@test2.com
to = someone@example.com
# Custom subject field. The following fields can be included:
# <freq> - Sonde Frequency, i.e. 401.520 MHz
# <type> - Sonde Type (RS94/RS41)
# <id> - Sonde Serial Number (i.e. M1234567)
subject = <type> Sonde launch detected on <freq>: <id>
###################
# ROTATOR CONTROL #
###################
# auto_rx can communicate with an instance of rotctld, on either the local machine or elsewhere on the network.
# This is, admittedly, a bit of a waste of an az/el rotator setup when a vertical antenna usually works fine,
# but it's still fun :-)
[rotator]
# WARNING - This should not be enabled in a multi-SDR configuration.
# Your station location (defined in the [location] section above) must also be defined.
rotator_enabled = False
# How often to update the rotator position. (Seconds)
update_rate = 30
# Only move the rotator if the new position is more than X degrees in azimuth or elevation from the current position.
rotation_threshold = 5.0
# Hostname / Port of the rotctld instance.
rotator_hostname = 127.0.0.1
rotator_port = 4533
# Rotator Homing.
# If enabled, turn to a 'home' location when scanning for sondes.
# This could be used to point an antenna at a known radiosonde launch location.
rotator_homing_enabled = False
# Wait until x minutes after no sonde data received before moving to the home location.
rotator_homing_delay = 10
# Rotator home azimuth/elevation, in degrees true.
rotator_home_azimuth = 0.0
rotator_home_elevation = 0.0
###########
# LOGGING #
###########
[logging]
# If enabled, a log file will be written to ./log/ for each detected radiosonde.
per_sonde_log = True
###########################
# WEB INTERFACE SETTINNGS #
###########################
[web]
# Server Host - Can be set to :: to listen on IPv6
web_host = 0.0.0.0
# Server Port - Ports below 1024 can only be used if you run auto_rx as root (not recommended)
#web_port = 5000
web_port = 8081
# Archive Age - How long to keep a sonde telemetry in memory for the web client to access, in minutes
# Note: The higher this number, the more data the client will need to load in on startup
archive_age = 120
# Enable some additional controls on the auto_rx web interface.
# There is currently no authentication for these features, so use this with caution!
# Do not set this to True on an internet-facing auto_rx instance!!!
web_control = False
##################
# DEBUG SETTINGS #
##################
[debugging]
# WARNING - Enabling these settings can result in lots of SD-card IO, potentially
# reducing the life of the card. These should only be enabled to collect data for
# debugging purposes.
# Save the audio that a detection pass is run over to: detect_<SDR_ID>.wav
# This file is over-written with every new detection.
save_detection_audio = False
# Save the audio from the output from a sonde decode chain to decode_<SDR_ID>.wav
# This file is over-written with each new sonde decoded for a particular SDR.
save_decode_audio = True
# Save the decimated IQ data from an experimental sonde decode chain to decode_IQ_<SDR_ID>.bin
# This will be in complex signed 16-bit int format, and may be either 48 kHz or 96 kHz.
# Note: This will use a LOT of disk space.
save_decode_iq = False
#####################
# ADVANCED SETTINGS #
#####################
# These control low-level settings within various modules.
# Playing with them may result in odd behaviour.
[advanced]
# Scanner - Receive bin width (Hz)
search_step = 800
# Scanner - Minimum SNR for a peak to be detected. The lower the number, the more peaks detected.
snr_threshold = 10
# Scanner - Maximum number of peaks to search through during a scan pass.
# Increase this if you have lots of spurious signals, though this will increase scan times.
max_peaks = 10
# Scanner - Minimum distance between detected peaks (Hz)
min_distance = 1000
# Scanner - Scan Dwell Time - How long to observe the specified spectrum for.
scan_dwell_time = 20
# Scanner - Detection Dwell time - How long to wait for a sonde detection on each peak.
detect_dwell_time = 5
# Scanner - Delay between scans. We should delay a short amount between scans to allow for decoders and other actions to jump in.
scan_delay = 10
# Quantize search results to x Hz steps. Useful as most sondes are on 10 kHz frequency steps.
quantization = 10000
# Decoder Spacing Limit - Only start a new decoder if it is separated from an existing decoder by at least
# this value (Hz). This helps avoid issues where a drifting radiosonde is detected on two adjacent channels.
# If you regularly encounter radiosondes on adjacent (10kHz) channels, then set this value to 5000.
decoder_spacing_limit = 15000
# Temporary Block Time (minutes) - How long to block encrypted or otherwise non-decodable sondes for.
temporary_block_time = 120
# Upload when (seconds_since_utc_epoch%upload_rate) == 0. Otherwise just delay upload_rate seconds between uploads.
# Setting this to True with multple uploaders should give a higher chance of all uploaders uploading the same frame,
# however the upload_rate should not be set too low, else there may be a chance of missing upload slots.
synchronous_upload = True
# Only accept a payload ID as valid until it has been seen N times.
# This helps avoid corrupted callsigns getting onto the map.
payload_id_valid = 5
# Paths to the rtl_fm and rtl_power utilities. If these are on your system path, then you don't need to change these.
sdr_fm_path = rtl_fm
sdr_power_path = rtl_power
################################
# DEMODULATOR / DECODER TWEAKS #
################################
# RS41 / LMS6 Drift Tweak (Regular demod chain only)
# This tweak adds a high-pass filter into the RS41 and LMS6 demod chains. This extends the frequency offset range
# the demod chain can handle, with some performance penalty. This is only required when using RTLSDRs
# with worse than 2-3 PPM drift, and doesn't need to be enabled for TCXO SDRs.
drift_tweak = False
#
# Experimental Decoders - Use at your own risk!
#
# These experimental demod chains use David Rowe's fsk_demod modem.
# They have much better drift handling performance, and so may be better suited for
# 1680 MHz sondes, but use considerably more CPU. Recommend use of a Pi 3 or better.
# The experimental decoders can be enabled independently for each radiosonde type.
rs41_experimental = True
rs92_experimental = False
dfm_experimental = True
m10_experimental = False
# 400 MHz LMS6 sondes decode best with the fsk_demod decode chain, so we use this by default.
lms6-400_experimental = False
# Note: As iMet sondes use AFSK, using fsk_demod does not give any advantage, so there is no experimental decoder for them.
# Dump FSK Demod statistics to stats_<device_ID>.txt while the modem is running.
# This ends up at ~200mb per flight, and is over-written with each new sonde tracked.
# The test/plot_fsk_demod_stats.py script can plot these files for debugging purposes.
# Eventually the modem statistics will be integrated into the web GUI.
enable_stats = False
# Optimize 1680 MHz Scanning for RS92-NGP Sondes
# This flag sets the use of a narrower FM receiver bandwidth when scanning for 1680 MHz RS92-NGP sondes,
# which should improve detection considerably.
# Set this to True if you are sure that only RS92-NGPs are flying in your area.
ngp_tweak = False
# Position Filtering Options
# These are used to discard positions which are clearly bad, such as where the payload has jumped halfway around the world,
# or has suddenly ended up in orbit.
# Adjust only if absolutely necessary.
[filtering]
# Discard positions with an altitude greater than 50000 metres.
max_altitude = 50000
# Discard positions more than 1000 km from the observation station location (if set)
max_radius_km = 1000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment