diff --git a/README.md b/README.md index 3915e4c3..7478be63 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ Compile the code: `cd` -`git clone https://www.github.com/wb2osz/direwolf` +`git clone https://github.com/alanbjohnston/direwolf.git` `cd direwolf` @@ -142,7 +142,9 @@ Now reboot for all the changes to take effect: `sudo reboot now` -After rebooting, tune your radio or SDR to 434.9 MHz FM, and you should receive telemetry from the CubeSatSim! The green LED will be on when the CubeSatSim software is running. The red LED when charging is occuring either through the micro USB or through the solar panels. The blue LED will illuminate when the CubeSatSim is transmitting. +After rebooting, tune your radio or SDR to 434.9 MHz FM, and you should get a signal from the CubeSatSim! If you just have a Pi, you will only hear your Morse Code (CW) callsign - no telemetry signal will be transmitted, since there is no Band Pass Filter installed to block interfering transmissions. If you have built the Main Board or the TFB and it is plugged into your Pi, you will hear telemetry readio signals. + +On the Main Board, the green LED will be on when the CubeSatSim software is running. The red LED when charging is occuring either through the micro USB or through the solar panels. The blue LED will illuminate when the CubeSatSim is transmitting. The push button with the pi-power-button software will cause the Pi to reboot, change telemetry mode, or shutdown. Pressing and holding the pushbutton will make the green power LED blink first once, then two times, then three times, then blinks slowly. Depending on when you release the button, different things will happen. Here's what happens if you: diff --git a/groundstation/AMSAT.mod b/groundstation/AMSAT.mod new file mode 100644 index 00000000..0ce4b487 --- /dev/null +++ b/groundstation/AMSAT.mod @@ -0,0 +1,9 @@ +[GLOBAL] +SATELLITES=7530;22825;39444;43017;42761;42759;43770;43137;45119;25544;44354;40903;40911;40906;40907;40909;40910 + +[SINGLE_SAT] +SELECTED=7530 + +[LIST] +SORT_COLUMN=0 +SORT_ORDER=0 diff --git a/groundstation/bands.json b/groundstation/bands.json new file mode 100644 index 00000000..3d2cc43c --- /dev/null +++ b/groundstation/bands.json @@ -0,0 +1,194 @@ +[ + { + "name": "160m", + "lower_bound": 1810000, + "upper_bound": 2000000, + "frequencies": { + "psk31": 1838000, + "ft8": 1840000, + "wspr": 1836600, + "jt65": 1838000, + "jt9": 1839000 + } + }, + { + "name": "80m", + "lower_bound": 3500000, + "upper_bound": 3800000, + "frequencies": { + "psk31": 3580000, + "ft8": 3573000, + "wspr": 3592600, + "jt65": 3570000, + "jt9": 3572000, + "ft4": [3568000, 3575000] + } + }, + { + "name": "60m", + "lower_bound": 5351500, + "upper_bound": 5366500, + "frequencies": { + "ft8": 5357000, + "wspr": 5364700 + } + }, + { + "name": "40m", + "lower_bound": 7000000, + "upper_bound": 7200000, + "frequencies": { + "psk31": 7040000, + "ft8": 7074000, + "wspr": 7038600, + "jt65": 7076000, + "jt9": 7078000, + "ft4": 7047500 + } + }, + { + "name": "30m", + "lower_bound": 10100000, + "upper_bound": 10150000, + "frequencies": { + "psk31": 10141000, + "ft8": 10136000, + "wspr": 10138700, + "jt65": 10138000, + "jt9": 10140000, + "ft4": 10140000 + } + }, + { + "name": "20m", + "lower_bound": 14000000, + "upper_bound": 14350000, + "frequencies": { + "psk31": 14070000, + "ft8": 14074000, + "wspr": 14095600, + "jt65": 14076000, + "jt9": 14078000, + "ft4": 14080000 + } + }, + { + "name": "17m", + "lower_bound": 18068000, + "upper_bound": 18168000, + "frequencies": { + "psk31": 18098000, + "ft8": 18100000, + "wspr": 18104600, + "jt65": 18102000, + "jt9": 18104000, + "ft4": 18104000 + } + }, + { + "name": "15m", + "lower_bound": 21000000, + "upper_bound": 21450000, + "frequencies": { + "psk31": 21070000, + "ft8": 21074000, + "wspr": 21094600, + "jt65": 21076000, + "jt9": 21078000, + "ft4": 21140000 + } + }, + { + "name": "12m", + "lower_bound": 24890000, + "upper_bound": 24990000, + "frequencies": { + "psk31": 24920000, + "ft8": 24915000, + "wspr": 24924600, + "jt65": 24917000, + "jt9": 24919000, + "ft4": 24919000 + } + }, + { + "name": "10m", + "lower_bound": 28000000, + "upper_bound": 29700000, + "frequencies": { + "psk31": [28070000, 28120000], + "ft8": 28074000, + "wspr": 28124600, + "jt65": 28076000, + "jt9": 28078000, + "ft4": 28180000 + } + }, + { + "name": "6m", + "lower_bound": 50030000, + "upper_bound": 51000000, + "frequencies": { + "psk31": 50305000, + "ft8": 50313000, + "wspr": 50293000, + "jt65": 50310000, + "jt9": 50312000, + "ft4": 50318000 + } + }, + { + "name": "4m", + "lower_bound": 70150000, + "upper_bound": 70200000, + "frequencies": { + "wspr": 70091000 + } + }, + { + "name": "2m", + "lower_bound": 144000000, + "upper_bound": 146000000, + "frequencies": { + "wspr": 144489000, + "ft8": 144174000, + "ft4": 144170000, + "jt65": 144120000, + "packet": 144390000 + } + }, + { + "name": "70cm", + "lower_bound": 430000000, + "upper_bound": 440000000, + "frequencies": { + "packet": 434900000, + "pocsag": 439987500 + } + }, + { + "name": "23cm", + "lower_bound": 1240000000, + "upper_bound": 1300000000 + }, + { + "name": "13cm", + "lower_bound": 2320000000, + "upper_bound": 2450000000 + }, + { + "name": "9cm", + "lower_bound": 3400000000, + "upper_bound": 3475000000 + }, + { + "name": "6cm", + "lower_bound": 5650000000, + "upper_bound": 5850000000 + }, + { + "name": "3cm", + "lower_bound": 10000000000, + "upper_bound": 10500000000 + } +] diff --git a/groundstation/bookmarks.json b/groundstation/bookmarks.json new file mode 100644 index 00000000..f4f9304f --- /dev/null +++ b/groundstation/bookmarks.json @@ -0,0 +1,122 @@ +[ + { + "name": "ISS APRS", + "frequency": 145825000, + "modulation": "nfm" + }, + { + "name": "ISS SSTV", + "frequency": 145819000, + "modulation": "nfm" + }, + { + "name": "AO-27", + "frequency": 436795000, + "modulation": "nfm" + }, + { + "name": "AO-73", + "frequency": 145815000, + "modulation": "usb" + }, + { + "name": "Fox-1B AO-91", + "frequency": 145960000, + "modulation": "nfm" + }, + { + "name": "Fox-1D AO-92", + "frequency": 145880000, + "modulation": "nfm" + }, + { + "name": "MAX VALIER", + "frequency": 145860000, + "modulation": "usb" + }, + { + "name": "NOAA WX Radio 1", + "frequency": 162400000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 2", + "frequency": 162425000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 3", + "frequency": 162450000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 4", + "frequency": 162475000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 5", + "frequency": 162500000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 6", + "frequency": 162525000, + "modulation": "nfm" + }, + { + "name": "NOAA WX Radio 7", + "frequency": 162550000, + "modulation": "nfm" + }, + { + "name": "CAS-4A", + "frequency": 145855000, + "modulation": "usb" + }, + { + "name": "CAS-4B", + "frequency": 145910000, + "modulation": "usb" + }, + { + "name": "XW-2A", + "frequency": 145660000, + "modulation": "usb" + }, + { + "name": "XW-2B", + "frequency": 145725000, + "modulation": "usb" + }, + { + "name": "XW-2C", + "frequency": 145790000, + "modulation": "usb" + }, + { + "name": "XW-2F", + "frequency": 145975000, + "modulation": "usb" + }, + { + "name": "NOAA-19", + "frequency": 137100000, + "modulation": "nfm" + }, + { + "name": "NOAA-18", + "frequency": 137912500, + "modulation": "nfm" + }, + { + "name": "NOAA-15", + "frequency": 137620000, + "modulation": "nfm" + }, + { + "name": "CubeSatSim", + "frequency": 434900000, + "modulation": "nfm" + } +] diff --git a/groundstation/config_webrx.py b/groundstation/config_webrx.py index 1a549578..fe3ae967 100644 --- a/groundstation/config_webrx.py +++ b/groundstation/config_webrx.py @@ -6,6 +6,7 @@ config_webrx: configuration options for OpenWebRX This file is part of OpenWebRX, an open-source SDR receiver software with a web UI. Copyright (c) 2013-2015 by Andras Retzler + Copyright (c) 2019-2020 by Jakob Ketterl This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -29,64 +30,58 @@ config_webrx: configuration options for OpenWebRX (It means that you do not have to redistribute config_rtl.py and config_webrx.py if you make any changes to these two configuration files, and use them for running your web service with OpenWebRX.) + + portions inspired by http://gephi.michalnovak.eu/config_webrx.py + """ +# configuration version. please only modify if you're able to perform the associated migration steps. +version = 2 + # NOTE: you can find additional information about configuring OpenWebRX in the Wiki: -# https://github.com/simonyiszk/openwebrx/wiki +# https://github.com/jketterl/openwebrx/wiki/Configuration-guide # ==== Server settings ==== -web_port=8073 -server_hostname="localhost" # If this contains an incorrect value, the web UI may freeze on load (it can't open websocket) -max_clients=20 +web_port = 8073 +max_clients = 10 # ==== Web GUI configuration ==== -receiver_name="AMSAT CubeSat Simulator Ground Station" -receiver_location="" -receiver_qra="" -receiver_asl=0 -receiver_ant="monopole" -receiver_device="RTL-SDR" -receiver_admin="ku2y@amsat.org" -receiver_gps=(39.0302,-77.0747) -photo_height=350 -photo_title="Panorama of Budapest from Schönherz Zoltán Dormitory" -photo_desc=""" +receiver_name = "KU2Y" +receiver_location = "Philadelphia, PA" +receiver_asl = 200 +receiver_admin = "ku2y@amsat.org" +receiver_gps = (40.0376, -75.3492) +receiver_gps = {"lat": 40.0376, "lon": -75.3492} +photo_title = "ARISS" +photo_desc = """ You can add your own background photo and receiver information.
-Receiver is operated by: %[RX_ADMIN]
-Device: %[RX_DEVICE]
-Antenna: %[RX_ANT]
-Website: http://localhost +Receiver is operated by: ku2y@amsat.org
+Device: RTL-SDR
+Antenna:
+Website: http://ariss-radio:8073 """ -# ==== sdr.hu listing ==== -# If you want your ham receiver to be listed publicly on sdr.hu, then take the following steps: -# 1. Register at: http://sdr.hu/register -# 2. You will get an unique key by email. Copy it and paste here: -sdrhu_key = "" -# 3. Set this setting to True to enable listing: -sdrhu_public_listing = False - # ==== DSP/RX settings ==== -fft_fps=9 -fft_size=4096 #Should be power of 2 -fft_voverlap_factor=0.3 #If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +fft_fps = 9 +fft_size = 4096 # Should be power of 2 +fft_voverlap_factor = ( + 0.3 # If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +) -samp_rate = 250000 -# samp_rate = 2400000 -center_freq = 440450000 -rf_gain = 37 #in dB. For an RTL-SDR, rf_gain=0 will set the tuner to auto gain mode, else it will be in manual gain mode. -ppm = 0 +audio_compression = "adpcm" # valid values: "adpcm", "none" +fft_compression = "adpcm" # valid values: "adpcm", "none" -audio_compression="adpcm" #valid values: "adpcm", "none" -fft_compression="adpcm" #valid values: "adpcm", "none" +digimodes_enable = True # Decoding digimodes come with higher CPU usage. +digimodes_fft_size = 1024 -digimodes_enable=False # True #Decoding digimodes come with higher CPU usage. -digimodes_fft_size=1024 - -start_rtl_thread=True +# determines the quality, and thus the cpu usage, for the ambe codec used by digital voice modes +# if you're running on a Raspi (up to 3B+) you'll want to leave this on 1 +digital_voice_unvoiced_quality = 1 +# enables lookup of DMR ids using the radioid api +digital_voice_dmr_id_lookup = True """ -Note: if you experience audio underruns while CPU usage is 100%, you can: +Note: if you experience audio underruns while CPU usage is 100%, you can: - decrease `samp_rate`, - set `fft_voverlap_factor` to 0, - decrease `fft_fps` and `fft_size`, @@ -96,121 +91,727 @@ Note: if you experience audio underruns while CPU usage is 100%, you can: # ==== I/Q sources ==== # (Uncomment the appropriate by removing # characters at the beginning of the corresponding lines.) -################################################################################################# -# Is my SDR hardware supported? # -# Check here: https://github.com/simonyiszk/openwebrx/wiki#guides-for-receiver-hardware-support # -################################################################################################# - -# You can use other SDR hardware as well, by giving your own command that outputs the I/Q samples... Some examples of configuration are available here (default is RTL-SDR): - -# >> RTL-SDR via rtl_sdr -start_rtl_command="rtl_sdr -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain} -".format(rf_gain=rf_gain, center_freq=center_freq, samp_rate=samp_rate, ppm=ppm) -format_conversion="csdr convert_u8_f" - -#lna_gain=8 -#rf_amp=1 -#start_rtl_command="hackrf_transfer -s {samp_rate} -f {center_freq} -g {rf_gain} -l{lna_gain} -a{rf_amp} -r-".format(rf_gain=rf_gain, center_freq=center_freq, samp_rate=samp_rate, ppm=ppm, rf_amp=rf_amp, lna_gain=lna_gain) -#format_conversion="csdr convert_s8_f" -""" -To use a HackRF, compile the HackRF host tools from its "stdout" branch: - git clone https://github.com/mossmann/hackrf/ - cd hackrf - git fetch - git checkout origin/stdout - cd host - mkdir build - cd build - cmake .. -DINSTALL_UDEV_RULES=ON - make - sudo make install -""" - -# >> Sound card SDR (needs ALSA) -# I did not have the chance to properly test it. -#samp_rate = 96000 -#start_rtl_command="arecord -f S16_LE -r {samp_rate} -c2 -".format(samp_rate=samp_rate) -#format_conversion="csdr convert_s16_f | csdr gain_ff 30" - -# >> /dev/urandom test signal source -# samp_rate = 2400000 -# start_rtl_command="cat /dev/urandom | (pv -qL `python -c 'print int({samp_rate} * 2.2)'` 2>&1)".format(rf_gain=rf_gain, center_freq=center_freq, samp_rate=samp_rate) -# format_conversion="csdr convert_u8_f" - -# >> Pre-recorded raw I/Q file as signal source -# You will have to correctly specify: samp_rate, center_freq, format_conversion in order to correctly play an I/Q file. -#start_rtl_command="(while true; do cat my_iq_file.raw; done) | csdr flowcontrol {sr} 20 ".format(sr=samp_rate*2*1.05) -#format_conversion="csdr convert_u8_f" - -#>> The rx_sdr command works with a variety of SDR harware: RTL-SDR, HackRF, SDRplay, UHD, Airspy, Red Pitaya, audio devices, etc. -# It will auto-detect your SDR hardware if the following tools are installed: -# * the vendor provided driver and library, -# * the vendor-specific SoapySDR wrapper library, -# * and SoapySDR itself. -# Check out this article on the OpenWebRX Wiki: https://github.com/simonyiszk/openwebrx/wiki/Using-rx_tools-with-OpenWebRX/ -#start_rtl_command="rx_sdr -F CF32 -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain} -".format(rf_gain=rf_gain, center_freq=center_freq, samp_rate=samp_rate, ppm=ppm) -#format_conversion="" - -# >> gr-osmosdr signal source using GNU Radio (follow this guide: https://github.com/simonyiszk/openwebrx/wiki/Using-GrOsmoSDR-as-signal-source) -#start_rtl_command="cat /tmp/osmocom_fifo" -#format_conversion="" +############################################################################### +# Is my SDR hardware supported? # +# Check here: https://github.com/jketterl/openwebrx/wiki/Supported-Hardware # +############################################################################### -# ==== Misc settings ==== - -shown_center_freq = center_freq #you can change this if you use an upconverter - -client_audio_buffer_size = 5 -#increasing client_audio_buffer_size will: -# - also increase the latency -# - decrease the chance of audio underruns - -start_freq = center_freq -start_mod = "nfm" #nfm, am, lsb, usb, cw - -iq_server_port = 4951 #TCP port for ncat to listen on. It will send I/Q data over its connections, for internal use in OpenWebRX. It is only accessible from the localhost by default. +# Currently supported types of sdr receivers: +# "rtl_sdr", "rtl_sdr_soapy", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr", +# "perseussdr", "lime_sdr", "pluto_sdr", "soapy_remote" +# +# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. +# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the +# connector. +# +# https://github.com/jketterl/owrx_connector +# +# In order to use Perseus HF you need to install the libperseus-sdr +# +# https://github.com/Microtelecom/libperseus-sdr +# +# and do the proper changes to the sdrs object below +# (see also Wiki in https://github.com/jketterl/openwebrx/wiki/Sample-configuration-for-Perseus-HF-receiver). +# -#access_log = "~/openwebrx_access.log" +sdrs = { + "rtlsdr": { + "name": "RTL-SDR", + "type": "rtl_sdr_soapy", + "ppm": 0, + # you can change this if you use an upconverter. formula is: + # center_freq + lfo_offset = actual frequency on the sdr + # "lfo_offset": 0, + "profiles": { + "wx": { + "name": "Weather Band", + "center_freq": 162350000, + "rf_gain": 30, + "samp_rate": 1000000, + "start_freq": 162400000, + "start_mod": "nfm", + }, + "2m": { + "name": "2m Band", + "center_freq": 145000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "70cm": { + "name": "70cm Band", + "center_freq": 435500000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "fm": { + "name": "FM Band", + "center_freq": 91000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 90000000, + "start_mod": "nfm", + }, + "10mv": { + "name": "10m Band", + "center_freq": 28000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 28500000, + "start_mod": "usb", + }, + "6m": { + "name": "6m Band", + "center_freq": 51000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 51000000, + "start_mod": "usb", + }, + "110MHz": { + "name": "110 MHz", + "center_freq": 110000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 110000000, + "start_mod": "nfm", + }, + "112MHz": { + "name": "112 MHz", + "center_freq": 112000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 112000000, + "start_mod": "nfm", + }, + "114MHz": { + "name": "114 MHz", + "center_freq": 114000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 114000000, + "start_mod": "nfm", + }, + "116mhz": { + "name": "116 MHz", + "center_freq": 116000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 116000000, + "start_mod": "nfm", + }, + "118mhz": { + "name": "118 MHz Air Band", + "center_freq": 118000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 118000000, + "start_mod": "nfm", + }, + "120mhz": { + "name": "120 MHz Air Band", + "center_freq": 120000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 120000000, + "start_mod": "nfm", + }, + "122mhz": { + "name": "122 MHz Air Band", + "center_freq": 122000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 122000000, + "start_mod": "nfm", + }, + "124mhz": { + "name": "124 MHz Air Band", + "center_freq": 124000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 124000000, + "start_mod": "nfm", + }, + "126mhz": { + "name": "126 MHz Air Band", + "center_freq": 126000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 126000000, + "start_mod": "nfm", + }, + "128mhz": { + "name": "126 MHz Air Band", + "center_freq": 128000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 128000000, + "start_mod": "nfm", + }, + "130mhz": { + "name": "130 MHz Air Band", + "center_freq": 130000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 130000000, + "start_mod": "nfm", + }, + "132mhz": { + "name": "132 MHz Air Band", + "center_freq": 132000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 132000000, + "start_mod": "nfm", + }, + "134mhz": { + "name": "134 MHz Air Band", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "nfm", + }, + "136mhz": { + "name": "136 MHz Air Band", + "center_freq": 136000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 136000000, + "start_mod": "nfm", + }, + "138mhz": { + "name": "138 MHz NOAA Weather Satellite Band", + "center_freq": 138000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 138000000, + "start_mod": "nfm", + }, + "140mhz": { + "name": "140 MHz", + "center_freq": 140000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 140000000, + "start_mod": "nfm", + }, + "142mhz": { + "name": "142 MHz", + "center_freq": 142000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 142000000, + "start_mod": "nfm", + }, + "144mhz": { + "name": "144 MHz Ham Band", + "center_freq": 144000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 144000000, + "start_mod": "nfm", + }, + "146mhz": { + "name": "146 MHz Ham Band", + "center_freq": 146000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 146000000, + "start_mod": "nfm", + }, + "148mhz": { + "name": "148 MHz Ham Band", + "center_freq": 148000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 148000000, + "start_mod": "nfm", + }, + "150mhz": { + "name": "150 MHz", + "center_freq": 150000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 150000000, + "start_mod": "nfm", + }, + "152mhz": { + "name": "152 MHz", + "center_freq": 152000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 152000000, + "start_mod": "nfm", + }, + "154mhz": { + "name": "154 MHz", + "center_freq": 154000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 154000000, + "start_mod": "nfm", + }, + "156mhz": { + "name": "156 MHz", + "center_freq": 156000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 156100000, + "start_mod": "nfm", + }, + "158mhz": { + "name": "158 MHz", + "center_freq": 158000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 158000000, + "start_mod": "nfm", + }, + "160mhz": { + "name": "160 MHz", + "center_freq": 160000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 160000000, + "start_mod": "nfm", + }, + "162mhz": { + "name": "162 MHz Weather Band", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 162000000, + "start_mod": "nfm", + }, + "164mhz": { + "name": "164 MHz", + "center_freq": 164000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 164000000, + "start_mod": "nfm", + }, + "166mhz": { + "name": "166 MHz", + "center_freq": 166000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 166000000, + "start_mod": "nfm", + }, + "168mhz": { + "name": "168 MHz", + "center_freq": 168000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 168000000, + "start_mod": "nfm", + }, + "170mhz": { + "name": "170 MHz", + "center_freq": 170000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 170000000, + "start_mod": "nfm", + }, + "172mhz": { + "name": "172 MHz", + "center_freq": 172000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 172000000, + "start_mod": "nfm", + }, + "174mhz": { + "name": "174 MHz", + "center_freq": 174000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 174000000, + "start_mod": "nfm", + }, + "433mhz": { + "name": "433 MHz Ham Band", + "center_freq": 433000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 433000000, + "start_mod": "nfm", + }, + "446mhz": { + "name": "446 MHz", + "center_freq": 446000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 446000000, + "start_mod": "nfm", + }, + "460mhz": { + "name": "460 MHz", + "center_freq": 460000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 460000000, + "start_mod": "nfm", + }, + "462mhz": { + "name": "462 MHz FRS/GMRS", + "center_freq": 462000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 462000000, + "start_mod": "nfm", + }, + "467mhz": { + "name": "467 MHz FRS/GMRS", + "center_freq": 467000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 467000000, + "start_mod": "nfm", + }, + "860mhz": { + "name": "860 MHz", + "center_freq": 860000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 860000000, + "start_mod": "nfm", + }, + "862mhz": { + "name": "862 MHz", + "center_freq": 862000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 862000000, + "start_mod": "nfm", + }, + "864mhz": { + "name": "864 MHz", + "center_freq": 864000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 864000000, + "start_mod": "nfm", + }, + "866mhz": { + "name": "866 MHz", + "center_freq": 866000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 866000000, + "start_mod": "nfm", + }, + "868mhz": { + "name": "868 MHz SRD Band", + "center_freq": 868000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 868000000, + "start_mod": "nfm", + }, + "870mhz": { + "name": "870 MHz", + "center_freq": 870000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 870000000, + "start_mod": "nfm", + }, + "915mhz": { + "name": "915 MHz ISM Band", + "center_freq": 915000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 915000000, + "start_mod": "nfm", + }, + "1090mhz": { + "name": "1090 MHz", + "center_freq": 1090000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1090000000, + "start_mod": "nfm", + }, + "1880mhz": { + "name": "1880 MHz", + "center_freq": 1880000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1880000000, + "start_mod": "nfm", + }, + "1882mhz": { + "name": "1882 MHz", + "center_freq": 1882000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1882000000, + "start_mod": "nfm", + }, + "1884mhz": { + "name": "1884 MHz", + "center_freq": 1884000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1884000000, + "start_mod": "nfm", + }, + "1886mhz": { + "name": "1886 MHz", + "center_freq": 1886000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1886000000, + "start_mod": "nfm", + }, + "1888mhz": { + "name": "1888 MHz", + "center_freq": 1888000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1888000000, + "start_mod": "nfm", + }, + "1890mhz": { + "name": "1890 MHz", + "center_freq": 1890000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1890000000, + "start_mod": "nfm", + }, + "1892mhz": { + "name": "1892 MHz", + "center_freq": 1892000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1892000000, + "start_mod": "nfm", + }, + "1894mhz": { + "name": "1894 MHz", + "center_freq": 1894000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1894000000, + "start_mod": "nfm", + }, + "1896mhz": { + "name": "1896 MHz", + "center_freq": 1896000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1896000000, + "start_mod": "nfm", + }, + "1898mhz": { + "name": "1898 MHz", + "center_freq": 1898000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1898000000, + "start_mod": "nfm", + }, + "1900mhz": { + "name": "1900 MHz", + "center_freq": 1900000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1900000000, + "start_mod": "nfm", + }, + "23cm": { + "name": "23cm Ham Band", + "center_freq": 1270000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1270000000, + "start_mod": "nfm", + }, + "13cm": { + "name": "13cm Ham Band", + "center_freq": 2370000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 2370000000, + "start_mod": "nfm", + }, + "9cm": { + "name": "9cm Band", + "center_freq": 3440000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 3440000000, + "start_mod": "nfm", + }, + "10m": { + "name": "10m Ham Band HF", + "center_freq": 29150000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 28283000, + "start_mod": "usb", + "direct_sampling": 2, + }, + "19m": { + "name": "19m Broadcast Band HF", + "center_freq": 16000000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 15400000, + "start_mod": "am", + "direct_sampling": 2, + }, + "20m": { + "name": "20m Ham Band HF", + "center_freq": 14150000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 14070000, + "start_mod": "usb", + "direct_sampling": 2, + }, + "30m": { + "name": "30m Ham Band HF", + "center_freq": 10125000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 10142000, + "start_mod": "usb", + "direct_sampling": 2, + }, + "40m": { + "name": "40m Ham Band HF", + "center_freq": 7100000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 7070000, + "start_mod": "lsb", + "direct_sampling": 2, + }, + "49m": { + "name": "49m Broadcast Band HF", + "center_freq": 6000000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 6070000, + "start_mod": "am", + "direct_sampling": 2, + }, + "80m": { + "name": "80m Ham Band HF", + "center_freq": 3650000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 3570000, + "start_mod": "lsb", + "direct_sampling": 2, + }, + "160m": { + "name": "160m Band HF", + "center_freq": 1700000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 1440000, + "start_mod": "am", + "direct_sampling": 2, + }, + }, + }, +} # ==== Color themes ==== -#A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels +# A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels ### default theme by teejez: -waterfall_colors = "[0x000000ff,0x0000ffff,0x00ffffff,0x00ff00ff,0xffff00ff,0xff0000ff,0xff00ffff,0xffffffff]" -waterfall_min_level = -88 #in dB +waterfall_colors = [0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0x00FF00FF, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFFFFFFFF] +waterfall_min_level = -88 # in dB waterfall_max_level = -20 -waterfall_auto_level_margin = (5, 40) +waterfall_auto_level_margin = {"min": 5, "max": 40} ### old theme by HA7ILM: -#waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" -#waterfall_min_level = -115 #in dB -#waterfall_max_level = 0 -#waterfall_auto_level_margin = (20, 30) +# waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# waterfall_min_level = -115 #in dB +# waterfall_max_level = 0 +# waterfall_auto_level_margin = {"min": 20, "max": 30} ##For the old colors, you might also want to set [fft_voverlap_factor] to 0. -#Note: When the auto waterfall level button is clicked, the following happens: -# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin[0]] -# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin[1]] +# Note: When the auto waterfall level button is clicked, the following happens: +# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin["min"]] +# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin["max"]] # -# ___|____________________________________|____________________________________|____________________________________|___> signal power -# \_waterfall_auto_level_margin[0]_/ |__ current_min_power_level | \_waterfall_auto_level_margin[1]_/ -# current_max_power_level __| - -# 3D view settings -mathbox_waterfall_frequency_resolution = 128 #bins -mathbox_waterfall_history_length = 10 #seconds -mathbox_waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# ___|________________________________________|____________________________________|________________________________________|___> signal power +# \_waterfall_auto_level_margin["min"]_/ |__ current_min_power_level | \_waterfall_auto_level_margin["max"]_/ +# current_max_power_level __| # === Experimental settings === -#Warning! The settings below are very experimental. -csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. +# Warning! The settings below are very experimental. +csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes. -csdr_through = False # Setting this True will print out how much data is going into the DSP chains. - -nmux_memory = 50 #in megabytes. This sets the approximate size of the circular buffer used by nmux. - -#Look up external IP address automatically from icanhazip.com, and use it as [server_hostname] -""" -print "[openwebrx-config] Detecting external IP address..." -import urllib2 -server_hostname=urllib2.urlopen("http://icanhazip.com").read()[:-1] -print "[openwebrx-config] External IP address detected:", server_hostname -""" +csdr_through = False # Setting this True will print out how much data is going into the DSP chains. + +nmux_memory = 50 # in megabytes. This sets the approximate size of the circular buffer used by nmux. + +google_maps_api_key = "" + +# how long should positions be visible on the map? +# they will start fading out after half of that +# in seconds; default: 2 hours +map_position_retention_time = 2 * 60 * 60 + +# decoder queue configuration +# due to the nature of some operating modes (ft8, ft8, jt9, jt65, wspr and js8), the data is recorded for a given amount +# of time (6 seconds up to 2 minutes) and decoded at the end. this can lead to very high peak loads. +# to mitigate this, the recordings will be queued and processed in sequence. +# the number of workers will limit the total amount of work (one worker will losely occupy one cpu / thread) +decoding_queue_workers = 2 +# the maximum queue length will cause decodes to be dumped if the workers cannot keep up +# if you are running background services, make sure this number is high enough to accept the task influx during peaks +# i.e. this should be higher than the number of decoding services running at the same time +decoding_queue_length = 10 + +# wsjt decoding depth will allow more results, but will also consume more cpu +wsjt_decoding_depth = 3 +# can also be set for each mode separately +# jt65 seems to be somewhat prone to erroneous decodes, this setting handles that to some extent +wsjt_decoding_depths = {"jt65": 1} + +# JS8 comes in different speeds: normal, slow, fast, turbo. This setting controls which ones are enabled. +js8_enabled_profiles = ["normal", "slow"] +# JS8 decoding depth; higher value will get more results, but will also consume more cpu +js8_decoding_depth = 3 + +temporary_directory = "/tmp/openwebrx" + +services_enabled = False +services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False + +# path to the aprs symbols repository (get it here: https://github.com/hessu/aprs-symbols) +aprs_symbols_path = "/opt/aprs-symbols/png" + +# === PSK Reporter setting === +# enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info +# this also uses the receiver_gps setting from above, so make sure it contains a correct locator +pskreporter_enabled = False +pskreporter_callsign = "N0CALL" + +# === Web admin settings === +# this feature is experimental at the moment. it should not be enabled on shared receivers since it allows remote +# changes to the receiver settings. enable for testing in controlled environment only. +# webadmin_enabled = False diff --git a/groundstation/config_webrx_hf.py b/groundstation/config_webrx_hf.py new file mode 100644 index 00000000..091412cf --- /dev/null +++ b/groundstation/config_webrx_hf.py @@ -0,0 +1,849 @@ +# -*- coding: utf-8 -*- + +""" +config_webrx: configuration options for OpenWebRX + + This file is part of OpenWebRX, + an open-source SDR receiver software with a web UI. + Copyright (c) 2013-2015 by Andras Retzler + Copyright (c) 2019-2020 by Jakob Ketterl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + In addition, as a special exception, the copyright holders + state that config_rtl.py and config_webrx.py are not part of the + Corresponding Source defined in GNU AGPL version 3 section 1. + + (It means that you do not have to redistribute config_rtl.py and + config_webrx.py if you make any changes to these two configuration files, + and use them for running your web service with OpenWebRX.) + + portions inspired by http://gephi.michalnovak.eu/config_webrx.py + +""" + +# configuration version. please only modify if you're able to perform the associated migration steps. +version = 2 + +# NOTE: you can find additional information about configuring OpenWebRX in the Wiki: +# https://github.com/jketterl/openwebrx/wiki/Configuration-guide + +# ==== Server settings ==== +web_port = 8073 +max_clients = 10 + +# ==== Web GUI configuration ==== +receiver_name = "KU2Y" +receiver_location = "Philadelphia, PA" +receiver_asl = 200 +receiver_admin = "ku2y@amsat.org" +receiver_gps = (40.0376, -75.3492) +receiver_gps = {"lat": 40.0376, "lon": -75.3492} +photo_title = "ARISS" +photo_desc = """ +You can add your own background photo and receiver information.
+Receiver is operated by: ku2y@amsat.org
+Device: RTL-SDR
+Antenna:
+Website: http://ariss-radio:8073 +""" + +# ==== DSP/RX settings ==== +fft_fps = 9 +fft_size = 4096 # Should be power of 2 +fft_voverlap_factor = ( + 0.3 # If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +) + +audio_compression = "adpcm" # valid values: "adpcm", "none" +fft_compression = "adpcm" # valid values: "adpcm", "none" + +digimodes_enable = True # Decoding digimodes come with higher CPU usage. +digimodes_fft_size = 1024 + +# determines the quality, and thus the cpu usage, for the ambe codec used by digital voice modes +# if you're running on a Raspi (up to 3B+) you'll want to leave this on 1 +digital_voice_unvoiced_quality = 1 +# enables lookup of DMR ids using the radioid api +digital_voice_dmr_id_lookup = True + +""" +Note: if you experience audio underruns while CPU usage is 100%, you can: +- decrease `samp_rate`, +- set `fft_voverlap_factor` to 0, +- decrease `fft_fps` and `fft_size`, +- limit the number of users by decreasing `max_clients`. +""" + +# ==== I/Q sources ==== +# (Uncomment the appropriate by removing # characters at the beginning of the corresponding lines.) + +############################################################################### +# Is my SDR hardware supported? # +# Check here: https://github.com/jketterl/openwebrx/wiki/Supported-Hardware # +############################################################################### + +# Currently supported types of sdr receivers: +# "rtl_sdr", "rtl_sdr_soapy", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr", +# "perseussdr", "lime_sdr", "pluto_sdr", "soapy_remote" +# +# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. +# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the +# connector. +# +# https://github.com/jketterl/owrx_connector +# +# In order to use Perseus HF you need to install the libperseus-sdr +# +# https://github.com/Microtelecom/libperseus-sdr +# +# and do the proper changes to the sdrs object below +# (see also Wiki in https://github.com/jketterl/openwebrx/wiki/Sample-configuration-for-Perseus-HF-receiver). +# + +sdrs = { + "rtlsdr": { + "name": "RTL-SDR", + "type": "rtl_sdr", + "ppm": 0, + # you can change this if you use an upconverter. formula is: + # center_freq + lfo_offset = actual frequency on the sdr + # "lfo_offset": 0, + "profiles": { + "wx": { + "name": "Weather Band", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 161500000, + "start_mod": "nfm", + }, + "70cm": { + "name": "70cm Band", + "center_freq": 435500000, + "rf_gain": 3, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "70cm-hi": { + "name": "70cm Band High Gain", + "center_freq": 435500000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "2m": { + "name": "2m Band", + "center_freq": 145000000, + "rf_gain": 15, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "2m-hi": { + "name": "2m Band High Gain", + "center_freq": 145000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "fm": { + "name": "FM Band", + "center_freq": 91000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 90000000, + "start_mod": "nfm", + }, + "atc": { + "name": "Air Band - ATC", + "center_freq": 134000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "atc-hi": { + "name": "Air Band - ATC High Gain", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "noaa": { + "name": "NOAA Weather Satellites", + "center_freq": 137000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "noaa-hi": { + "name": "NOAA Weather Satellites High Gain", + "center_freq": 137000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "10m": { + "name": "10m Band", + "center_freq": 28000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 28500000, + "start_mod": "usb", + }, + "6m": { + "name": "6m Band", + "center_freq": 51000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 51000000, + "start_mod": "usb", + }, + "110MHz": { + "name": "110 MHz", + "center_freq": 110000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 110000000, + "start_mod": "nfm", + }, + "112MHz": { + "name": "112 MHz", + "center_freq": 112000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 112000000, + "start_mod": "nfm", + }, + "114MHz": { + "name": "114 MHz", + "center_freq": 114000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 114000000, + "start_mod": "nfm", + }, + "116mhz": { + "name": "116 MHz", + "center_freq": 116000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 116000000, + "start_mod": "nfm", + }, + "118mhz": { + "name": "118 MHz", + "center_freq": 118000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 118000000, + "start_mod": "nfm", + }, + "120mhz": { + "name": "120 MHz", + "center_freq": 120000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 120000000, + "start_mod": "nfm", + }, + "122mhz": { + "name": "122 MHz", + "center_freq": 122000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 122000000, + "start_mod": "nfm", + }, + "124mhz": { + "name": "124 MHz", + "center_freq": 124000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 124000000, + "start_mod": "nfm", + }, + "126mhz": { + "name": "126 MHz", + "center_freq": 126000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 126000000, + "start_mod": "nfm", + }, + "128mhz": { + "name": "126 MHz", + "center_freq": 128000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 128000000, + "start_mod": "nfm", + }, + "130mhz": { + "name": "130 MHz", + "center_freq": 130000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 130000000, + "start_mod": "nfm", + }, + "132mhz": { + "name": "132 MHz", + "center_freq": 132000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 132000000, + "start_mod": "nfm", + }, + "134mhz": { + "name": "134 MHz", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "nfm", + }, + "136mhz": { + "name": "136 MHz", + "center_freq": 136000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 136000000, + "start_mod": "nfm", + }, + "138mhz": { + "name": "138 MHz", + "center_freq": 138000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 138000000, + "start_mod": "nfm", + }, + "140mhz": { + "name": "140 MHz", + "center_freq": 140000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 140000000, + "start_mod": "nfm", + }, + "142mhz": { + "name": "142 MHz", + "center_freq": 142000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 142000000, + "start_mod": "nfm", + }, + "144mhz": { + "name": "144 MHz", + "center_freq": 144000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 144000000, + "start_mod": "nfm", + }, + "146mhz": { + "name": "146 MHz", + "center_freq": 146000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 146000000, + "start_mod": "nfm", + }, + "148mhz": { + "name": "148 MHz", + "center_freq": 148000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 148000000, + "start_mod": "nfm", + }, + "150mhz": { + "name": "150 MHz", + "center_freq": 150000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 150000000, + "start_mod": "nfm", + }, + "152mhz": { + "name": "152 MHz", + "center_freq": 152000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 152000000, + "start_mod": "nfm", + }, + "154mhz": { + "name": "154 MHz", + "center_freq": 154000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 154000000, + "start_mod": "nfm", + }, + "156mhz": { + "name": "156 MHz", + "center_freq": 156000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 156100000, + "start_mod": "nfm", + }, + "158mhz": { + "name": "158 MHz", + "center_freq": 158000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 158000000, + "start_mod": "nfm", + }, + "160mhz": { + "name": "160 MHz", + "center_freq": 160000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 160000000, + "start_mod": "nfm", + }, + "162mhz": { + "name": "162 MHz", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 162000000, + "start_mod": "nfm", + }, + "164mhz": { + "name": "164 MHz", + "center_freq": 164000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 164000000, + "start_mod": "nfm", + }, + "166mhz": { + "name": "166 MHz", + "center_freq": 166000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 166000000, + "start_mod": "nfm", + }, + "168mhz": { + "name": "168 MHz", + "center_freq": 168000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 168000000, + "start_mod": "nfm", + }, + "170mhz": { + "name": "170 MHz", + "center_freq": 170000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 170000000, + "start_mod": "nfm", + }, + "172mhz": { + "name": "172 MHz", + "center_freq": 172000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 172000000, + "start_mod": "nfm", + }, + "174mhz": { + "name": "174 MHz", + "center_freq": 174000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 174000000, + "start_mod": "nfm", + }, + "433mhz": { + "name": "433 MHz", + "center_freq": 433000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 433000000, + "start_mod": "nfm", + }, + "446mhz": { + "name": "446 MHz (PMR)", + "center_freq": 446000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 446000000, + "start_mod": "nfm", + }, + "460mhz": { + "name": "460 MHz", + "center_freq": 460000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 460000000, + "start_mod": "nfm", + }, + "860mhz": { + "name": "860 MHz", + "center_freq": 860000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 860000000, + "start_mod": "nfm", + }, + "862mhz": { + "name": "862 MHz", + "center_freq": 862000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 862000000, + "start_mod": "nfm", + }, + "864mhz": { + "name": "864 MHz", + "center_freq": 864000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 864000000, + "start_mod": "nfm", + }, + "866mhz": { + "name": "866 MHz", + "center_freq": 866000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 866000000, + "start_mod": "nfm", + }, + "868mhz": { + "name": "868 MHz", + "center_freq": 868000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 868000000, + "start_mod": "nfm", + }, + "870mhz": { + "name": "870 MHz", + "center_freq": 870000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 870000000, + "start_mod": "nfm", + }, + "915mhz": { + "name": "915 MHz", + "center_freq": 915000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 915000000, + "start_mod": "nfm", + }, + "1090mhz": { + "name": "1090 MHz", + "center_freq": 1090000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1090000000, + "start_mod": "nfm", + }, + "1880mhz": { + "name": "1880 MHz", + "center_freq": 1880000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1880000000, + "start_mod": "nfm", + }, + "1882mhz": { + "name": "1882 MHz", + "center_freq": 1882000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1882000000, + "start_mod": "nfm", + }, + "1884mhz": { + "name": "1884 MHz", + "center_freq": 1884000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1884000000, + "start_mod": "nfm", + }, + "1886mhz": { + "name": "1886 MHz", + "center_freq": 1886000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1886000000, + "start_mod": "nfm", + }, + "1888mhz": { + "name": "1888 MHz", + "center_freq": 1888000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1888000000, + "start_mod": "nfm", + }, + "1890mhz": { + "name": "1890 MHz", + "center_freq": 1890000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1890000000, + "start_mod": "nfm", + }, + "1892mhz": { + "name": "1892 MHz", + "center_freq": 1892000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1892000000, + "start_mod": "nfm", + }, + "1894mhz": { + "name": "1894 MHz", + "center_freq": 1894000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1894000000, + "start_mod": "nfm", + }, + "1896mhz": { + "name": "1896 MHz", + "center_freq": 1896000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1896000000, + "start_mod": "nfm", + }, + "1898mhz": { + "name": "1898 MHz", + "center_freq": 1898000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1898000000, + "start_mod": "nfm", + }, + "1900mhz": { + "name": "1900 MHz", + "center_freq": 1900000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1900000000, + "start_mod": "nfm", + }, + "23cm": { + "name": "23cm Band", + "center_freq": 1270000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1270000000, + "start_mod": "nfm", + }, + "13cm": { + "name": "13cm Band", + "center_freq": 2370000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 2370000000, + "start_mod": "nfm", + }, + "9cm": { + "name": "9cm Band", + "center_freq": 3440000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 3440000000, + "start_mod": "nfm", + }, + }, + }, + "rtl_sdr-2": { + "name": "RTL-SDR HF", + "type": "rtl_sdr_soapy", + "ppm": 0, + "direct_sampling": 2, + "profiles": { + "10m": { + "name": "10m", + "center_freq": 29150000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 28283000, + "start_mod": "usb", + }, + "19m": { + "name": "19m Broadcast", + "center_freq": 16000000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 15400000, + "start_mod": "am", + }, + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 14070000, + "start_mod": "usb", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 7070000, + "start_mod": "lsb", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 6070000, + "start_mod": "am", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 3570000, + "start_mod": "lsb", + }, + "160m": { + "name": "160m", + "center_freq": 1700000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 1440000, + "start_mod": "am", + }, + }, + }, +} + +# ==== Color themes ==== + +# A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels + +### default theme by teejez: +waterfall_colors = [0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0x00FF00FF, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFFFFFFFF] +waterfall_min_level = -88 # in dB +waterfall_max_level = -20 +waterfall_auto_level_margin = {"min": 5, "max": 40} +### old theme by HA7ILM: +# waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# waterfall_min_level = -115 #in dB +# waterfall_max_level = 0 +# waterfall_auto_level_margin = {"min": 20, "max": 30} +##For the old colors, you might also want to set [fft_voverlap_factor] to 0. + +# Note: When the auto waterfall level button is clicked, the following happens: +# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin["min"]] +# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin["max"]] +# +# ___|________________________________________|____________________________________|________________________________________|___> signal power +# \_waterfall_auto_level_margin["min"]_/ |__ current_min_power_level | \_waterfall_auto_level_margin["max"]_/ +# current_max_power_level __| + +# === Experimental settings === +# Warning! The settings below are very experimental. +csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. +csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes. +csdr_through = False # Setting this True will print out how much data is going into the DSP chains. + +nmux_memory = 50 # in megabytes. This sets the approximate size of the circular buffer used by nmux. + +google_maps_api_key = "" + +# how long should positions be visible on the map? +# they will start fading out after half of that +# in seconds; default: 2 hours +map_position_retention_time = 2 * 60 * 60 + +# decoder queue configuration +# due to the nature of some operating modes (ft8, ft8, jt9, jt65, wspr and js8), the data is recorded for a given amount +# of time (6 seconds up to 2 minutes) and decoded at the end. this can lead to very high peak loads. +# to mitigate this, the recordings will be queued and processed in sequence. +# the number of workers will limit the total amount of work (one worker will losely occupy one cpu / thread) +decoding_queue_workers = 2 +# the maximum queue length will cause decodes to be dumped if the workers cannot keep up +# if you are running background services, make sure this number is high enough to accept the task influx during peaks +# i.e. this should be higher than the number of decoding services running at the same time +decoding_queue_length = 10 + +# wsjt decoding depth will allow more results, but will also consume more cpu +wsjt_decoding_depth = 3 +# can also be set for each mode separately +# jt65 seems to be somewhat prone to erroneous decodes, this setting handles that to some extent +wsjt_decoding_depths = {"jt65": 1} + +# JS8 comes in different speeds: normal, slow, fast, turbo. This setting controls which ones are enabled. +js8_enabled_profiles = ["normal", "slow"] +# JS8 decoding depth; higher value will get more results, but will also consume more cpu +js8_decoding_depth = 3 + +temporary_directory = "/tmp/openwebrx" + +services_enabled = False +services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False + +# path to the aprs symbols repository (get it here: https://github.com/hessu/aprs-symbols) +aprs_symbols_path = "/opt/aprs-symbols/png" + +# === PSK Reporter setting === +# enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info +# this also uses the receiver_gps setting from above, so make sure it contains a correct locator +pskreporter_enabled = False +pskreporter_callsign = "N0CALL" + +# === Web admin settings === +# this feature is experimental at the moment. it should not be enabled on shared receivers since it allows remote +# changes to the receiver settings. enable for testing in controlled environment only. +# webadmin_enabled = False diff --git a/groundstation/config_webrx_pi.py b/groundstation/config_webrx_pi.py new file mode 100644 index 00000000..3f30fd61 --- /dev/null +++ b/groundstation/config_webrx_pi.py @@ -0,0 +1,434 @@ +# -*- coding: utf-8 -*- + +""" +config_webrx: configuration options for OpenWebRX + + This file is part of OpenWebRX, + an open-source SDR receiver software with a web UI. + Copyright (c) 2013-2015 by Andras Retzler + Copyright (c) 2019-2020 by Jakob Ketterl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + In addition, as a special exception, the copyright holders + state that config_rtl.py and config_webrx.py are not part of the + Corresponding Source defined in GNU AGPL version 3 section 1. + + (It means that you do not have to redistribute config_rtl.py and + config_webrx.py if you make any changes to these two configuration files, + and use them for running your web service with OpenWebRX.) +""" + +# NOTE: you can find additional information about configuring OpenWebRX in the Wiki: +# https://github.com/simonyiszk/openwebrx/wiki + +# ==== Server settings ==== +web_port = 8073 +max_clients = 10 + +# ==== Web GUI configuration ==== +receiver_name = "KU2Y" +receiver_location = "Philadelphia, PA" +receiver_asl = 200 +receiver_admin = "ku2y@amsat.org" +receiver_gps = (40.0376, -75.3492) +photo_title = "ARISS" +photo_desc = """ +You can add your own background photo and receiver information.
+Receiver is operated by: ku2y@amsat.org
+Device: RTL-SDR
+Antenna:
+Website: http://ariss-radio:8073 +""" + +# ==== sdr.hu listing ==== +# If you want your ham receiver to be listed publicly on sdr.hu, then take the following steps: +# 1. Register at: http://sdr.hu/register +# 2. You will get an unique key by email. Copy it and paste here: +sdrhu_key = "" +# 3. Set this setting to True to enable listing: +sdrhu_public_listing = False +server_hostname = "localhost" + +# ==== DSP/RX settings ==== +fft_fps = 9 +fft_size = 4096 # Should be power of 2 +fft_voverlap_factor = ( + 0.3 # If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +) + +audio_compression = "adpcm" # valid values: "adpcm", "none" +fft_compression = "adpcm" # valid values: "adpcm", "none" + +digimodes_enable = True # Decoding digimodes come with higher CPU usage. +digimodes_fft_size = 1024 + +# determines the quality, and thus the cpu usage, for the ambe codec used by digital voice modes +# if you're running on a Raspi (up to 3B+) you'll want to leave this on 1 +digital_voice_unvoiced_quality = 1 +# enables lookup of DMR ids using the radioid api +digital_voice_dmr_id_lookup = True + +""" +Note: if you experience audio underruns while CPU usage is 100%, you can: +- decrease `samp_rate`, +- set `fft_voverlap_factor` to 0, +- decrease `fft_fps` and `fft_size`, +- limit the number of users by decreasing `max_clients`. +""" + +# ==== I/Q sources ==== +# (Uncomment the appropriate by removing # characters at the beginning of the corresponding lines.) + +################################################################################################# +# Is my SDR hardware supported? # +# Check here: https://github.com/simonyiszk/openwebrx/wiki#guides-for-receiver-hardware-support # +################################################################################################# + +# Currently supported types of sdr receivers: +# "rtl_sdr", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr" +# +# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. +# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the +# connector. +# +# https://github.com/jketterl/owrx_connector +# +# NOTE: The connector sources have replaced the old piped nmux style of reading input. If you still have any sdrs +# configured that have type endin in "_connector", simply remove that suffix. + +sdrs = { + "rtlsdr": { + "name": "RTL-SDR", + "type": "rtl_sdr", + "ppm": 0, + # you can change this if you use an upconverter. formula is: + # center_freq + lfo_offset = actual frequency on the sdr + # "lfo_offset": 0, + "profiles": { + "70cm": { + "name": "70cm Band", + "center_freq": 435500000, + "rf_gain": 3, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "70cm-hi": { + "name": "70cm Band High Gain", + "center_freq": 435500000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "2m": { + "name": "2m Band", + "center_freq": 145000000, + "rf_gain": 15, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "2m-hi": { + "name": "2m Band High Gain", + "center_freq": 145000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "wx": { + "name": "Weather Band", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 161500000, + "start_mod": "nfm", + }, + "fm": { + "name": "FM Band", + "center_freq": 91000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 90000000, + "start_mod": "nfm", + }, + "atc": { + "name": "Air Band - ATC", + "center_freq": 134000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "atc-hi": { + "name": "Air Band - ATC High Gain", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "noaa": { + "name": "NOAA Weather Satellites", + "center_freq": 137000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "noaa-hi": { + "name": "NOAA Weather Satellites High Gain", + "center_freq": 137000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, +# "20m": { +# "name": "20m", +# "direct_sampling": 2, +# "center_freq": 14150000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 14070000, +# "start_mod": "usb", +# }, +# "30m": { +# "name": "30m", +# "direct_sampling": 2, +# "center_freq": 10125000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 10142000, +# "start_mod": "usb", +# }, +# "40m": { +# "name": "40m", +# "direct_sampling": 2, +# "center_freq": 7100000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 7070000, +# "start_mod": "usb", +# }, +# "80m": { +# "name": "80m", +# "direct_sampling": 2, +# "center_freq": 3650000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 3570000, +# "start_mod": "usb", +# }, +# "49m": { +# "name": "49m Broadcast", +# "direct_sampling": 2, +# "center_freq": 6000000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 6070000, +# "start_mod": "am", +# }, +# "MW": { +# "name": "Medium Wave AM Broadcast", +# "direct_sampling": 2, +# "center_freq": 1000000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 1500000, +# "start_mod": "am", +# }, + }, + }, + "airspy": { + "name": "Airspy HF+", + "type": "airspyhf", + "ppm": 0, + "profiles": { + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 14070000, + "start_mod": "usb", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 10, + "samp_rate": 192000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 10, + "samp_rate": 256000, + "start_freq": 7070000, + "start_mod": "usb", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 3570000, + "start_mod": "usb", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 6070000, + "start_mod": "am", + }, + }, + }, + "sdrplay": { + "name": "SDRPlay RSP2", + "type": "sdrplay", + "ppm": 0, + "profiles": { + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 14070000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 0, + "samp_rate": 250000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 7070000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 3570000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 6070000, + "start_mod": "am", + "antenna": "Antenna A", + }, + }, + }, +} + +# ==== Color themes ==== + +# A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels + +### default theme by teejez: +waterfall_colors = [0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0x00FF00FF, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFFFFFFFF] +waterfall_min_level = -88 # in dB +waterfall_max_level = -20 +waterfall_auto_level_margin = (5, 40) +### old theme by HA7ILM: +# waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# waterfall_min_level = -115 #in dB +# waterfall_max_level = 0 +# waterfall_auto_level_margin = (20, 30) +##For the old colors, you might also want to set [fft_voverlap_factor] to 0. + +# Note: When the auto waterfall level button is clicked, the following happens: +# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin[0]] +# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin[1]] +# +# ___|____________________________________|____________________________________|____________________________________|___> signal power +# \_waterfall_auto_level_margin[0]_/ |__ current_min_power_level | \_waterfall_auto_level_margin[1]_/ +# current_max_power_level __| + +# === Experimental settings === +# Warning! The settings below are very experimental. +csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. +csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes. +csdr_through = False # Setting this True will print out how much data is going into the DSP chains. + +nmux_memory = 50 # in megabytes. This sets the approximate size of the circular buffer used by nmux. + +google_maps_api_key = "" + +# how long should positions be visible on the map? +# they will start fading out after half of that +# in seconds; default: 2 hours +map_position_retention_time = 2 * 60 * 60 + +# wsjt decoder queue configuration +# due to the nature of the wsjt operating modes (ft8, ft8, jt9, jt65 and wspr), the data is recorded for a given amount +# of time (6.5 seconds up to 2 minutes) and decoded at the end. this can lead to very high peak loads. +# to mitigate this, the recordings will be queued and processed in sequence. +# the number of workers will limit the total amount of work (one worker will losely occupy one cpu / thread) +wsjt_queue_workers = 2 +# the maximum queue length will cause decodes to be dumped if the workers cannot keep up +# if you are running background services, make sure this number is high enough to accept the task influx during peaks +# i.e. this should be higher than the number of wsjt services running at the same time +wsjt_queue_length = 10 +# wsjt decoding depth will allow more results, but will also consume more cpu +wsjt_decoding_depth = 3 +# can also be set for each mode separately +# jt65 seems to be somewhat prone to erroneous decodes, this setting handles that to some extent +wsjt_decoding_depths = {"jt65": 1} + +temporary_directory = "/tmp" + +services_enabled = False +services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False + +# path to the aprs symbols repository (get it here: https://github.com/hessu/aprs-symbols) +aprs_symbols_path = "/opt/aprs-symbols/png" + +# === PSK Reporter setting === +# enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info +# this also uses the receiver_gps setting from above, so make sure it contains a correct locator +pskreporter_enabled = False +pskreporter_callsign = "N0CALL" diff --git a/groundstation/config_webrx_soapy.py b/groundstation/config_webrx_soapy.py new file mode 100644 index 00000000..d9273220 --- /dev/null +++ b/groundstation/config_webrx_soapy.py @@ -0,0 +1,954 @@ +# -*- coding: utf-8 -*- + +""" +config_webrx: configuration options for OpenWebRX + + This file is part of OpenWebRX, + an open-source SDR receiver software with a web UI. + Copyright (c) 2013-2015 by Andras Retzler + Copyright (c) 2019-2020 by Jakob Ketterl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + In addition, as a special exception, the copyright holders + state that config_rtl.py and config_webrx.py are not part of the + Corresponding Source defined in GNU AGPL version 3 section 1. + + (It means that you do not have to redistribute config_rtl.py and + config_webrx.py if you make any changes to these two configuration files, + and use them for running your web service with OpenWebRX.) +""" + +# NOTE: you can find additional information about configuring OpenWebRX in the Wiki: +# https://github.com/simonyiszk/openwebrx/wiki + +# ==== Server settings ==== +web_port = 8073 +max_clients = 10 + +# ==== Web GUI configuration ==== +receiver_name = "KU2Y" +receiver_location = "Philadelphia, PA" +receiver_asl = 200 +receiver_admin = "ku2y@amsat.org" +receiver_gps = (40.0376, -75.3492) +photo_title = "ARISS" +photo_desc = """ +You can add your own background photo and receiver information.
+Receiver is operated by: ku2y@amsat.org
+Device: RTL-SDR
+Antenna:
+Website: http://ariss-radio:8073 +""" + +# ==== sdr.hu listing ==== +# If you want your ham receiver to be listed publicly on sdr.hu, then take the following steps: +# 1. Register at: http://sdr.hu/register +# 2. You will get an unique key by email. Copy it and paste here: +sdrhu_key = "" +# 3. Set this setting to True to enable listing: +sdrhu_public_listing = False +server_hostname = "localhost" + +# ==== DSP/RX settings ==== +fft_fps = 9 +fft_size = 4096 # Should be power of 2 +fft_voverlap_factor = ( + 0.3 # If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +) + +audio_compression = "adpcm" # valid values: "adpcm", "none" +fft_compression = "adpcm" # valid values: "adpcm", "none" + +digimodes_enable = True # Decoding digimodes come with higher CPU usage. +digimodes_fft_size = 1024 + +# determines the quality, and thus the cpu usage, for the ambe codec used by digital voice modes +# if you're running on a Raspi (up to 3B+) you'll want to leave this on 1 +digital_voice_unvoiced_quality = 1 +# enables lookup of DMR ids using the radioid api +digital_voice_dmr_id_lookup = True + +""" +Note: if you experience audio underruns while CPU usage is 100%, you can: +- decrease `samp_rate`, +- set `fft_voverlap_factor` to 0, +- decrease `fft_fps` and `fft_size`, +- limit the number of users by decreasing `max_clients`. +""" + +# ==== I/Q sources ==== +# (Uncomment the appropriate by removing # characters at the beginning of the corresponding lines.) + +################################################################################################# +# Is my SDR hardware supported? # +# Check here: https://github.com/simonyiszk/openwebrx/wiki#guides-for-receiver-hardware-support # +################################################################################################# + +# Currently supported types of sdr receivers: +# "rtl_sdr", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr" +# +# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. +# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the +# connector. +# +# https://github.com/jketterl/owrx_connector +# +# NOTE: The connector sources have replaced the old piped nmux style of reading input. If you still have any sdrs +# configured that have type endin in "_connector", simply remove that suffix. + +sdrs = { + "rtlsdr": { + "name": "RTL-SDR", + "type": "rtl_sdr", + "ppm": 0, + # you can change this if you use an upconverter. formula is: + # center_freq + lfo_offset = actual frequency on the sdr + # "lfo_offset": 0, + "profiles": { + "70cm": { + "name": "70cm Band", + "center_freq": 435500000, + "rf_gain": 3, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "70cm-hi": { + "name": "70cm Band High Gain", + "center_freq": 435500000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "2m": { + "name": "2m Band", + "center_freq": 145000000, + "rf_gain": 15, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "2m-hi": { + "name": "2m Band High Gain", + "center_freq": 145000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "wx": { + "name": "Weather Band", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 161500000, + "start_mod": "nfm", + }, + "fm": { + "name": "FM Band", + "center_freq": 91000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 90000000, + "start_mod": "nfm", + }, + "atc": { + "name": "Air Band - ATC", + "center_freq": 134000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "atc-hi": { + "name": "Air Band - ATC High Gain", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "noaa": { + "name": "NOAA Weather Satellites", + "center_freq": 137000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "noaa-hi": { + "name": "NOAA Weather Satellites High Gain", + "center_freq": 137000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, +# "20m": { +# "name": "20m", +# "direct_sampling": 2, +# "center_freq": 14150000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 14070000, +# "start_mod": "usb", +# }, +# "30m": { +# "name": "30m", +# "direct_sampling": 2, +# "center_freq": 10125000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 10142000, +# "start_mod": "usb", +# }, +# "40m": { +# "name": "40m", +# "direct_sampling": 2, +# "center_freq": 7100000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 7070000, +# "start_mod": "usb", +# }, +# "80m": { +# "name": "80m", +# "direct_sampling": 2, +# "center_freq": 3650000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 3570000, +# "start_mod": "usb", +# }, +# "49m": { +# "name": "49m Broadcast", +# "direct_sampling": 2, +# "center_freq": 6000000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 6070000, +# "start_mod": "am", +# }, +# "MW": { +# "name": "Medium Wave AM Broadcast", +# "direct_sampling": 2, +# "center_freq": 1000000, +# "rf_gain": 30, +# "samp_rate": 2400000, +# "start_freq": 1500000, +# "start_mod": "am", +# }, + "110mhz": { + "name": "110 MHz", + "center_freq": 110000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 110000000, + "start_mod": "nfm", + }, + "112mhz": { + "name": "112 MHz", + "center_freq": 112000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 112000000, + "start_mod": "nfm", + }, + "114mhz": { + "name": "114 MHz", + "center_freq": 114000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 114000000, + "start_mod": "nfm", + }, + "116mhz": { + "name": "116 MHz", + "center_freq": 116000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 116000000, + "start_mod": "nfm", + }, + "118mhz": { + "name": "118 MHz", + "center_freq": 118000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 118000000, + "start_mod": "nfm", + }, + "120mhz": { + "name": "120 MHz", + "center_freq": 120000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 120000000, + "start_mod": "nfm", + }, + "122mhz": { + "name": "122 MHz", + "center_freq": 122000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 122000000, + "start_mod": "nfm", + }, + "124mhz": { + "name": "124 MHz", + "center_freq": 124000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 124000000, + "start_mod": "nfm", + }, + "126mhz": { + "name": "126 MHz", + "center_freq": 126000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 126000000, + "start_mod": "nfm", + }, + "128mhz": { + "name": "126 MHz", + "center_freq": 128000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 128000000, + "start_mod": "nfm", + }, + "130mhz": { + "name": "130 MHz", + "center_freq": 130000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 130000000, + "start_mod": "nfm", + }, + "132mhz": { + "name": "132 MHz", + "center_freq": 132000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 132000000, + "start_mod": "nfm", + }, + "134mhz": { + "name": "134 MHz", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "nfm", + }, + "136mhz": { + "name": "136 MHz", + "center_freq": 136000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 136000000, + "start_mod": "nfm", + }, + "138mhz": { + "name": "138 MHz", + "center_freq": 138000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 138000000, + "start_mod": "nfm", + }, + "140mhz": { + "name": "140 MHz", + "center_freq": 140000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 140000000, + "start_mod": "nfm", + }, + "142mhz": { + "name": "142 MHz", + "center_freq": 142000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 142000000, + "start_mod": "nfm", + }, + "144mhz": { + "name": "144 MHz", + "center_freq": 144000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 144000000, + "start_mod": "nfm", + }, + "146mhz": { + "name": "146 MHz", + "center_freq": 146000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 146000000, + "start_mod": "nfm", + }, + "148mhz": { + "name": "148 MHz", + "center_freq": 148000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 148000000, + "start_mod": "nfm", + }, + "150mhz": { + "name": "150 MHz", + "center_freq": 150000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 150000000, + "start_mod": "nfm", + }, + "152mhz": { + "name": "152 MHz", + "center_freq": 152000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 152000000, + "start_mod": "nfm", + }, + "154mhz": { + "name": "154 MHz", + "center_freq": 154000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 154000000, + "start_mod": "nfm", + }, + "156mhz": { + "name": "156 MHz", + "center_freq": 156000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 156100000, + "start_mod": "nfm", + }, + "158mhz": { + "name": "158 MHz", + "center_freq": 158000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 158000000, + "start_mod": "nfm", + }, + "160mhz": { + "name": "160 MHz", + "center_freq": 160000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 160000000, + "start_mod": "nfm", + }, + "162mhz": { + "name": "162 MHz", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 162000000, + "start_mod": "nfm", + }, + "164mhz": { + "name": "164 MHz", + "center_freq": 164000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 164000000, + "start_mod": "nfm", + }, + "166mhz": { + "name": "166 MHz", + "center_freq": 166000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 166000000, + "start_mod": "nfm", + }, + "168mhz": { + "name": "168 MHz", + "center_freq": 168000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 168000000, + "start_mod": "nfm", + }, + "170mhz": { + "name": "170 MHz", + "center_freq": 170000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 170000000, + "start_mod": "nfm", + }, + "172mhz": { + "name": "172 MHz", + "center_freq": 172000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 172000000, + "start_mod": "nfm", + }, + "174mhz": { + "name": "174 MHz", + "center_freq": 174000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 174000000, + "start_mod": "nfm", + }, + "433mhz": { + "name": "433 MHz", + "center_freq": 433000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 433000000, + "start_mod": "nfm", + }, + "446mhz": { + "name": "446 MHz (PMR)", + "center_freq": 446000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 446000000, + "start_mod": "nfm", + }, + "460mhz": { + "name": "460 MHz", + "center_freq": 460000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 460000000, + "start_mod": "nfm", + }, + "860mhz": { + "name": "860 MHz", + "center_freq": 860000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 860000000, + "start_mod": "nfm", + }, + "862mhz": { + "name": "862 MHz", + "center_freq": 862000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 862000000, + "start_mod": "nfm", + }, + "864mhz": { + "name": "864 MHz", + "center_freq": 864000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 864000000, + "start_mod": "nfm", + }, + "866mhz": { + "name": "866 MHz", + "center_freq": 866000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 866000000, + "start_mod": "nfm", + }, + "868mhz": { + "name": "868 MHz", + "center_freq": 868000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 868000000, + "start_mod": "nfm", + }, + "870mhz": { + "name": "870 MHz", + "center_freq": 870000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 870000000, + "start_mod": "nfm", + }, + "915mhz": { + "name": "915 MHz", + "center_freq": 915000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 915000000, + "start_mod": "nfm", + }, + "1090mhz": { + "name": "1090 MHz", + "center_freq": 1090000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1090000000, + "start_mod": "nfm", + }, + "1880mhz": { + "name": "1880 MHz", + "center_freq": 1880000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1880000000, + "start_mod": "nfm", + }, + "1882mhz": { + "name": "1882 MHz", + "center_freq": 1882000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1882000000, + "start_mod": "nfm", + }, + "1884mhz": { + "name": "1884 MHz", + "center_freq": 1884000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1884000000, + "start_mod": "nfm", + }, + "1886mhz": { + "name": "1886 MHz", + "center_freq": 1886000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1886000000, + "start_mod": "nfm", + }, + "1888mhz": { + "name": "1888 MHz", + "center_freq": 1888000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1888000000, + "start_mod": "nfm", + }, + "1890mhz": { + "name": "1890 MHz", + "center_freq": 1890000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1890000000, + "start_mod": "nfm", + }, + "1892mhz": { + "name": "1892 MHz", + "center_freq": 1892000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1892000000, + "start_mod": "nfm", + }, + "1894mhz": { + "name": "1894 MHz", + "center_freq": 1894000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1894000000, + "start_mod": "nfm", + }, + "1896mhz": { + "name": "1896 MHz", + "center_freq": 1896000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1896000000, + "start_mod": "nfm", + }, + "1898mhz": { + "name": "1898 MHz", + "center_freq": 1898000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1898000000, + "start_mod": "nfm", + }, + "1900mhz": { + "name": "1900 MHz", + "center_freq": 1900000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1900000000, + "start_mod": "nfm", + }, + "23cm": { + "name": "23cm (HAM)", + "center_freq": 1270000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1270000000, + "start_mod": "nfm", + }, + "13cm": { + "name": "13cm (HAM)", + "center_freq": 2370000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 2370000000, + "start_mod": "nfm", + }, + "9cm": { + "name": "9cm (HAM)", + "center_freq": 3440000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 3440000000, + "start_mod": "nfm", + }, + }, + }, + "rtl_sdr_V3": { + "name": "RTL-SDR V3 HF+", + "type": "rtl_sdr_soapy", + "ppm": 0, + "direct_sampling": 2, + "profiles": { + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 14070000, + "start_mod": "usb", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 7070000, + "start_mod": "lsb", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 3570000, + "start_mod": "lsb", + }, + "160m": { + "name": "160m", + "center_freq": 1900000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 1840000, + "start_mod": "lsb", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 10, + "samp_rate": 2400000, + "start_freq": 6070000, + "start_mod": "am", + }, + }, + }, + "airspy": { + "name": "Airspy HF+", + "type": "airspyhf", + "ppm": 0, + "profiles": { + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 14070000, + "start_mod": "usb", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 10, + "samp_rate": 192000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 10, + "samp_rate": 256000, + "start_freq": 7070000, + "start_mod": "usb", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 3570000, + "start_mod": "usb", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 10, + "samp_rate": 768000, + "start_freq": 6070000, + "start_mod": "am", + }, + }, + }, + "sdrplay": { + "name": "SDRPlay RSP2", + "type": "sdrplay", + "ppm": 0, + "profiles": { + "20m": { + "name": "20m", + "center_freq": 14150000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 14070000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "30m": { + "name": "30m", + "center_freq": 10125000, + "rf_gain": 0, + "samp_rate": 250000, + "start_freq": 10142000, + "start_mod": "usb", + }, + "40m": { + "name": "40m", + "center_freq": 7100000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 7070000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "80m": { + "name": "80m", + "center_freq": 3650000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 3570000, + "start_mod": "usb", + "antenna": "Antenna A", + }, + "49m": { + "name": "49m Broadcast", + "center_freq": 6000000, + "rf_gain": 0, + "samp_rate": 500000, + "start_freq": 6070000, + "start_mod": "am", + "antenna": "Antenna A", + }, + }, + }, +} + +# ==== Color themes ==== + +# A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels + +### default theme by teejez: +waterfall_colors = [0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0x00FF00FF, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFFFFFFFF] +waterfall_min_level = -88 # in dB +waterfall_max_level = -20 +waterfall_auto_level_margin = (5, 40) +### old theme by HA7ILM: +# waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# waterfall_min_level = -115 #in dB +# waterfall_max_level = 0 +# waterfall_auto_level_margin = (20, 30) +##For the old colors, you might also want to set [fft_voverlap_factor] to 0. + +# Note: When the auto waterfall level button is clicked, the following happens: +# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin[0]] +# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin[1]] +# +# ___|____________________________________|____________________________________|____________________________________|___> signal power +# \_waterfall_auto_level_margin[0]_/ |__ current_min_power_level | \_waterfall_auto_level_margin[1]_/ +# current_max_power_level __| + +# === Experimental settings === +# Warning! The settings below are very experimental. +csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. +csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes. +csdr_through = False # Setting this True will print out how much data is going into the DSP chains. + +nmux_memory = 50 # in megabytes. This sets the approximate size of the circular buffer used by nmux. + +google_maps_api_key = "" + +# how long should positions be visible on the map? +# they will start fading out after half of that +# in seconds; default: 2 hours +map_position_retention_time = 2 * 60 * 60 + +# wsjt decoder queue configuration +# due to the nature of the wsjt operating modes (ft8, ft8, jt9, jt65 and wspr), the data is recorded for a given amount +# of time (6.5 seconds up to 2 minutes) and decoded at the end. this can lead to very high peak loads. +# to mitigate this, the recordings will be queued and processed in sequence. +# the number of workers will limit the total amount of work (one worker will losely occupy one cpu / thread) +wsjt_queue_workers = 2 +# the maximum queue length will cause decodes to be dumped if the workers cannot keep up +# if you are running background services, make sure this number is high enough to accept the task influx during peaks +# i.e. this should be higher than the number of wsjt services running at the same time +wsjt_queue_length = 10 +# wsjt decoding depth will allow more results, but will also consume more cpu +wsjt_decoding_depth = 3 +# can also be set for each mode separately +# jt65 seems to be somewhat prone to erroneous decodes, this setting handles that to some extent +wsjt_decoding_depths = {"jt65": 1} + +temporary_directory = "/tmp" + +services_enabled = False +services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False + +# path to the aprs symbols repository (get it here: https://github.com/hessu/aprs-symbols) +aprs_symbols_path = "/opt/aprs-symbols/png" + +# === PSK Reporter setting === +# enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info +# this also uses the receiver_gps setting from above, so make sure it contains a correct locator +pskreporter_enabled = False +pskreporter_callsign = "N0CALL" diff --git a/groundstation/config_webrx_vhf.py b/groundstation/config_webrx_vhf.py new file mode 100644 index 00000000..46f8c2dd --- /dev/null +++ b/groundstation/config_webrx_vhf.py @@ -0,0 +1,777 @@ +# -*- coding: utf-8 -*- + +""" +config_webrx: configuration options for OpenWebRX + + This file is part of OpenWebRX, + an open-source SDR receiver software with a web UI. + Copyright (c) 2013-2015 by Andras Retzler + Copyright (c) 2019-2020 by Jakob Ketterl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + In addition, as a special exception, the copyright holders + state that config_rtl.py and config_webrx.py are not part of the + Corresponding Source defined in GNU AGPL version 3 section 1. + + (It means that you do not have to redistribute config_rtl.py and + config_webrx.py if you make any changes to these two configuration files, + and use them for running your web service with OpenWebRX.) + + portions inspired by http://gephi.michalnovak.eu/config_webrx.py + +""" + +# configuration version. please only modify if you're able to perform the associated migration steps. +version = 2 + +# NOTE: you can find additional information about configuring OpenWebRX in the Wiki: +# https://github.com/jketterl/openwebrx/wiki/Configuration-guide + +# ==== Server settings ==== +web_port = 8073 +max_clients = 10 + +# ==== Web GUI configuration ==== +receiver_name = "KU2Y" +receiver_location = "Philadelphia, PA" +receiver_asl = 200 +receiver_admin = "ku2y@amsat.org" +receiver_gps = (40.0376, -75.3492) +receiver_gps = {"lat": 40.0376, "lon": -75.3492} +photo_title = "ARISS" +photo_desc = """ +You can add your own background photo and receiver information.
+Receiver is operated by: ku2y@amsat.org
+Device: RTL-SDR
+Antenna:
+Website: http://ariss-radio:8073 +""" + +# ==== DSP/RX settings ==== +fft_fps = 9 +fft_size = 4096 # Should be power of 2 +fft_voverlap_factor = ( + 0.3 # If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the diagram. +) + +audio_compression = "adpcm" # valid values: "adpcm", "none" +fft_compression = "adpcm" # valid values: "adpcm", "none" + +digimodes_enable = True # Decoding digimodes come with higher CPU usage. +digimodes_fft_size = 1024 + +# determines the quality, and thus the cpu usage, for the ambe codec used by digital voice modes +# if you're running on a Raspi (up to 3B+) you'll want to leave this on 1 +digital_voice_unvoiced_quality = 1 +# enables lookup of DMR ids using the radioid api +digital_voice_dmr_id_lookup = True + +""" +Note: if you experience audio underruns while CPU usage is 100%, you can: +- decrease `samp_rate`, +- set `fft_voverlap_factor` to 0, +- decrease `fft_fps` and `fft_size`, +- limit the number of users by decreasing `max_clients`. +""" + +# ==== I/Q sources ==== +# (Uncomment the appropriate by removing # characters at the beginning of the corresponding lines.) + +############################################################################### +# Is my SDR hardware supported? # +# Check here: https://github.com/jketterl/openwebrx/wiki/Supported-Hardware # +############################################################################### + +# Currently supported types of sdr receivers: +# "rtl_sdr", "rtl_sdr_soapy", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr", +# "perseussdr", "lime_sdr", "pluto_sdr", "soapy_remote" +# +# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. +# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the +# connector. +# +# https://github.com/jketterl/owrx_connector +# +# In order to use Perseus HF you need to install the libperseus-sdr +# +# https://github.com/Microtelecom/libperseus-sdr +# +# and do the proper changes to the sdrs object below +# (see also Wiki in https://github.com/jketterl/openwebrx/wiki/Sample-configuration-for-Perseus-HF-receiver). +# + +sdrs = { + "rtlsdr": { + "name": "RTL-SDR", + "type": "rtl_sdr", + "ppm": 0, + # you can change this if you use an upconverter. formula is: + # center_freq + lfo_offset = actual frequency on the sdr + # "lfo_offset": 0, + "profiles": { + "wx": { + "name": "Weather Band", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 161500000, + "start_mod": "nfm", + }, + "70cm": { + "name": "70cm Band", + "center_freq": 435500000, + "rf_gain": 3, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "70cm-hi": { + "name": "70cm Band High Gain", + "center_freq": 435500000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 4355000000, + "start_mod": "nfm", + }, + "2m": { + "name": "2m Band", + "center_freq": 145000000, + "rf_gain": 15, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "2m-hi": { + "name": "2m Band High Gain", + "center_freq": 145000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 145725000, + "start_mod": "nfm", + }, + "fm": { + "name": "FM Band", + "center_freq": 91000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 90000000, + "start_mod": "nfm", + }, + "atc": { + "name": "Air Band - ATC", + "center_freq": 134000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "atc-hi": { + "name": "Air Band - ATC High Gain", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "am", + }, + "noaa": { + "name": "NOAA Weather Satellites", + "center_freq": 137000000, + "rf_gain": 20, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "noaa-hi": { + "name": "NOAA Weather Satellites High Gain", + "center_freq": 137000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 137000000, + "start_mod": "fm", + }, + "10m": { + "name": "10m Band", + "center_freq": 28000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 28500000, + "start_mod": "usb", + }, + "6m": { + "name": "6m Band", + "center_freq": 51000000, + "rf_gain": 25, + "samp_rate": 2400000, + "start_freq": 51000000, + "start_mod": "usb", + }, + "110MHz": { + "name": "110 MHz", + "center_freq": 110000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 110000000, + "start_mod": "nfm", + }, + "112MHz": { + "name": "112 MHz", + "center_freq": 112000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 112000000, + "start_mod": "nfm", + }, + "114MHz": { + "name": "114 MHz", + "center_freq": 114000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 114000000, + "start_mod": "nfm", + }, + "116mhz": { + "name": "116 MHz", + "center_freq": 116000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 116000000, + "start_mod": "nfm", + }, + "118mhz": { + "name": "118 MHz", + "center_freq": 118000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 118000000, + "start_mod": "nfm", + }, + "120mhz": { + "name": "120 MHz", + "center_freq": 120000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 120000000, + "start_mod": "nfm", + }, + "122mhz": { + "name": "122 MHz", + "center_freq": 122000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 122000000, + "start_mod": "nfm", + }, + "124mhz": { + "name": "124 MHz", + "center_freq": 124000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 124000000, + "start_mod": "nfm", + }, + "126mhz": { + "name": "126 MHz", + "center_freq": 126000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 126000000, + "start_mod": "nfm", + }, + "128mhz": { + "name": "126 MHz", + "center_freq": 128000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 128000000, + "start_mod": "nfm", + }, + "130mhz": { + "name": "130 MHz", + "center_freq": 130000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 130000000, + "start_mod": "nfm", + }, + "132mhz": { + "name": "132 MHz", + "center_freq": 132000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 132000000, + "start_mod": "nfm", + }, + "134mhz": { + "name": "134 MHz", + "center_freq": 134000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 134000000, + "start_mod": "nfm", + }, + "136mhz": { + "name": "136 MHz", + "center_freq": 136000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 136000000, + "start_mod": "nfm", + }, + "138mhz": { + "name": "138 MHz", + "center_freq": 138000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 138000000, + "start_mod": "nfm", + }, + "140mhz": { + "name": "140 MHz", + "center_freq": 140000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 140000000, + "start_mod": "nfm", + }, + "142mhz": { + "name": "142 MHz", + "center_freq": 142000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 142000000, + "start_mod": "nfm", + }, + "144mhz": { + "name": "144 MHz", + "center_freq": 144000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 144000000, + "start_mod": "nfm", + }, + "146mhz": { + "name": "146 MHz", + "center_freq": 146000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 146000000, + "start_mod": "nfm", + }, + "148mhz": { + "name": "148 MHz", + "center_freq": 148000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 148000000, + "start_mod": "nfm", + }, + "150mhz": { + "name": "150 MHz", + "center_freq": 150000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 150000000, + "start_mod": "nfm", + }, + "152mhz": { + "name": "152 MHz", + "center_freq": 152000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 152000000, + "start_mod": "nfm", + }, + "154mhz": { + "name": "154 MHz", + "center_freq": 154000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 154000000, + "start_mod": "nfm", + }, + "156mhz": { + "name": "156 MHz", + "center_freq": 156000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 156100000, + "start_mod": "nfm", + }, + "158mhz": { + "name": "158 MHz", + "center_freq": 158000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 158000000, + "start_mod": "nfm", + }, + "160mhz": { + "name": "160 MHz", + "center_freq": 160000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 160000000, + "start_mod": "nfm", + }, + "162mhz": { + "name": "162 MHz", + "center_freq": 162000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 162000000, + "start_mod": "nfm", + }, + "164mhz": { + "name": "164 MHz", + "center_freq": 164000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 164000000, + "start_mod": "nfm", + }, + "166mhz": { + "name": "166 MHz", + "center_freq": 166000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 166000000, + "start_mod": "nfm", + }, + "168mhz": { + "name": "168 MHz", + "center_freq": 168000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 168000000, + "start_mod": "nfm", + }, + "170mhz": { + "name": "170 MHz", + "center_freq": 170000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 170000000, + "start_mod": "nfm", + }, + "172mhz": { + "name": "172 MHz", + "center_freq": 172000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 172000000, + "start_mod": "nfm", + }, + "174mhz": { + "name": "174 MHz", + "center_freq": 174000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 174000000, + "start_mod": "nfm", + }, + "433mhz": { + "name": "433 MHz", + "center_freq": 433000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 433000000, + "start_mod": "nfm", + }, + "446mhz": { + "name": "446 MHz (PMR)", + "center_freq": 446000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 446000000, + "start_mod": "nfm", + }, + "460mhz": { + "name": "460 MHz", + "center_freq": 460000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 460000000, + "start_mod": "nfm", + }, + "860mhz": { + "name": "860 MHz", + "center_freq": 860000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 860000000, + "start_mod": "nfm", + }, + "862mhz": { + "name": "862 MHz", + "center_freq": 862000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 862000000, + "start_mod": "nfm", + }, + "864mhz": { + "name": "864 MHz", + "center_freq": 864000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 864000000, + "start_mod": "nfm", + }, + "866mhz": { + "name": "866 MHz", + "center_freq": 866000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 866000000, + "start_mod": "nfm", + }, + "868mhz": { + "name": "868 MHz", + "center_freq": 868000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 868000000, + "start_mod": "nfm", + }, + "870mhz": { + "name": "870 MHz", + "center_freq": 870000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 870000000, + "start_mod": "nfm", + }, + "915mhz": { + "name": "915 MHz", + "center_freq": 915000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 915000000, + "start_mod": "nfm", + }, + "1090mhz": { + "name": "1090 MHz", + "center_freq": 1090000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1090000000, + "start_mod": "nfm", + }, + "1880mhz": { + "name": "1880 MHz", + "center_freq": 1880000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1880000000, + "start_mod": "nfm", + }, + "1882mhz": { + "name": "1882 MHz", + "center_freq": 1882000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1882000000, + "start_mod": "nfm", + }, + "1884mhz": { + "name": "1884 MHz", + "center_freq": 1884000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1884000000, + "start_mod": "nfm", + }, + "1886mhz": { + "name": "1886 MHz", + "center_freq": 1886000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1886000000, + "start_mod": "nfm", + }, + "1888mhz": { + "name": "1888 MHz", + "center_freq": 1888000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1888000000, + "start_mod": "nfm", + }, + "1890mhz": { + "name": "1890 MHz", + "center_freq": 1890000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1890000000, + "start_mod": "nfm", + }, + "1892mhz": { + "name": "1892 MHz", + "center_freq": 1892000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1892000000, + "start_mod": "nfm", + }, + "1894mhz": { + "name": "1894 MHz", + "center_freq": 1894000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1894000000, + "start_mod": "nfm", + }, + "1896mhz": { + "name": "1896 MHz", + "center_freq": 1896000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1896000000, + "start_mod": "nfm", + }, + "1898mhz": { + "name": "1898 MHz", + "center_freq": 1898000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1898000000, + "start_mod": "nfm", + }, + "1900mhz": { + "name": "1900 MHz", + "center_freq": 1900000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1900000000, + "start_mod": "nfm", + }, + "23cm": { + "name": "23cm Band", + "center_freq": 1270000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 1270000000, + "start_mod": "nfm", + }, + "13cm": { + "name": "13cm Band", + "center_freq": 2370000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 2370000000, + "start_mod": "nfm", + }, + "9cm": { + "name": "9cm Band", + "center_freq": 3440000000, + "rf_gain": 30, + "samp_rate": 2400000, + "start_freq": 3440000000, + "start_mod": "nfm", + }, + }, + }, +} + +# ==== Color themes ==== + +# A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels + +### default theme by teejez: +waterfall_colors = [0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0x00FF00FF, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFFFFFFFF] +waterfall_min_level = -88 # in dB +waterfall_max_level = -20 +waterfall_auto_level_margin = {"min": 5, "max": 40} +### old theme by HA7ILM: +# waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" +# waterfall_min_level = -115 #in dB +# waterfall_max_level = 0 +# waterfall_auto_level_margin = {"min": 20, "max": 30} +##For the old colors, you might also want to set [fft_voverlap_factor] to 0. + +# Note: When the auto waterfall level button is clicked, the following happens: +# [waterfall_min_level] = [current_min_power_level] - [waterfall_auto_level_margin["min"]] +# [waterfall_max_level] = [current_max_power_level] + [waterfall_auto_level_margin["max"]] +# +# ___|________________________________________|____________________________________|________________________________________|___> signal power +# \_waterfall_auto_level_margin["min"]_/ |__ current_min_power_level | \_waterfall_auto_level_margin["max"]_/ +# current_max_power_level __| + +# === Experimental settings === +# Warning! The settings below are very experimental. +csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr. +csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes. +csdr_through = False # Setting this True will print out how much data is going into the DSP chains. + +nmux_memory = 50 # in megabytes. This sets the approximate size of the circular buffer used by nmux. + +google_maps_api_key = "" + +# how long should positions be visible on the map? +# they will start fading out after half of that +# in seconds; default: 2 hours +map_position_retention_time = 2 * 60 * 60 + +# decoder queue configuration +# due to the nature of some operating modes (ft8, ft8, jt9, jt65, wspr and js8), the data is recorded for a given amount +# of time (6 seconds up to 2 minutes) and decoded at the end. this can lead to very high peak loads. +# to mitigate this, the recordings will be queued and processed in sequence. +# the number of workers will limit the total amount of work (one worker will losely occupy one cpu / thread) +decoding_queue_workers = 2 +# the maximum queue length will cause decodes to be dumped if the workers cannot keep up +# if you are running background services, make sure this number is high enough to accept the task influx during peaks +# i.e. this should be higher than the number of decoding services running at the same time +decoding_queue_length = 10 + +# wsjt decoding depth will allow more results, but will also consume more cpu +wsjt_decoding_depth = 3 +# can also be set for each mode separately +# jt65 seems to be somewhat prone to erroneous decodes, this setting handles that to some extent +wsjt_decoding_depths = {"jt65": 1} + +# JS8 comes in different speeds: normal, slow, fast, turbo. This setting controls which ones are enabled. +js8_enabled_profiles = ["normal", "slow"] +# JS8 decoding depth; higher value will get more results, but will also consume more cpu +js8_decoding_depth = 3 + +temporary_directory = "/tmp/openwebrx" + +services_enabled = False +services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False + +# path to the aprs symbols repository (get it here: https://github.com/hessu/aprs-symbols) +aprs_symbols_path = "/opt/aprs-symbols/png" + +# === PSK Reporter setting === +# enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info +# this also uses the receiver_gps setting from above, so make sure it contains a correct locator +pskreporter_enabled = False +pskreporter_callsign = "N0CALL" + +# === Web admin settings === +# this feature is experimental at the moment. it should not be enabled on shared receivers since it allows remote +# changes to the receiver settings. enable for testing in controlled environment only. +# webadmin_enabled = False diff --git a/groundstation/decode.sh b/groundstation/decode.sh index 44db5a06..99f83b76 100755 --- a/groundstation/decode.sh +++ b/groundstation/decode.sh @@ -6,5 +6,5 @@ ps -ef | grep rtl | grep -v grep | awk '{print $2}' | sudo xargs kill echo -e "Script to auto decode CubeSat Simulator telemetry\n" -sudo rtl_fm -f 440.386M -s 22050 -g 48 - | multimon-ng -a AFSK1200 -A -t raw - +sudo rtl_fm -f 434.9M -s 22050 -g 48 - | multimon-ng -a AFSK1200 -A -t raw - diff --git a/groundstation/default.conf b/groundstation/default.conf index 7f3e052c..74960edd 100644 --- a/groundstation/default.conf +++ b/groundstation/default.conf @@ -3,31 +3,29 @@ configversion=2 crashed=false [audio] -gain=224 +gain=-74 udp_host=localhost -[fft] -fft_size=4096 -split=40 - [gui] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\0\0\0\0\0$\0\0\x3\xff\0\0\x2\xff\0\0\0\0\0\0\0\x42\0\0\x2\xe8\0\0\x2\xed\0\0\0\0\x2\0\0\0\x4\0) -state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\x1\0\0\x1&\0\0\x2\x65\xfc\x2\0\0\0\x2\xfc\0\0\0\x41\0\0\x1\x90\0\0\x1\x83\0\b\0 \xfa\0\0\0\x1\x2\0\0\0\x3\xfb\0\0\0\x18\0\x44\0o\0\x63\0k\0I\0n\0p\0u\0t\0\x43\0t\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\x1.\0\xff\xff\xff\xfb\0\0\0\x12\0\x44\0o\0\x63\0k\0R\0x\0O\0p\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\x1\x62\0\a\xff\xff\xfb\0\0\0\xe\0\x44\0o\0\x63\0k\0\x46\0\x66\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xc8\0\a\xff\xff\xfc\0\0\x1\xd7\0\0\0\xcf\0\0\0\xc8\0\xff\xff\xff\xfa\0\0\0\0\x2\0\0\0\x2\xfb\0\0\0\x12\0\x44\0o\0\x63\0k\0\x41\0u\0\x64\0i\0o\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xc8\0\xff\xff\xff\xfb\0\0\0\xe\0\x44\0o\0\x63\0k\0R\0\x44\0S\0\0\0\0\0\xff\xff\xff\xff\0\0\0h\0\xff\xff\xff\0\0\0\x3\0\0\x2\xd4\0\0\0\xe9\xfc\x1\0\0\0\x1\xfb\0\0\0\x1a\0\x44\0o\0\x63\0k\0\x42\0o\0o\0k\0m\0\x61\0r\0k\0s\x1\0\0\0\0\0\0\x2\xd4\0\0\x1\x42\0\xff\xff\xff\0\0\x2\xd4\0\0\x1v\0\0\0\x1\0\0\0\x2\0\0\0\b\0\0\0\x2\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\0\xb3\0\0\0)\0\0\x3\xad\0\0\x3\v\0\0\0\xb5\0\0\0G\0\0\x3\xad\0\0\x3\v\0\0\0\0\0\0\0\0\x4\0) +state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\x1\0\0\x1\x36\0\0\x2h\xfc\x2\0\0\0\x2\xfc\0\0\0\x42\0\0\x1\x99\0\0\x1\x89\0\b\0!\xfa\0\0\0\x1\x2\0\0\0\x3\xfb\0\0\0\x18\0\x44\0o\0\x63\0k\0I\0n\0p\0u\0t\0\x43\0t\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\x1\x37\0\xff\xff\xff\xfb\0\0\0\x12\0\x44\0o\0\x63\0k\0R\0x\0O\0p\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\x1g\0\a\xff\xff\xfb\0\0\0\xe\0\x44\0o\0\x63\0k\0\x46\0\x66\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xc8\0\a\xff\xff\xfc\0\0\x1\xe1\0\0\0\xc9\0\0\0\xc8\0\xff\xff\xff\xfa\0\0\0\0\x2\0\0\0\x2\xfb\0\0\0\x12\0\x44\0o\0\x63\0k\0\x41\0u\0\x64\0i\0o\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xc8\0\xff\xff\xff\xfb\0\0\0\xe\0\x44\0o\0\x63\0k\0R\0\x44\0S\0\0\0\0\0\xff\xff\xff\xff\0\0\0h\0\xff\xff\xff\0\0\0\x3\0\0\0\0\0\0\0\0\xfc\x1\0\0\0\x1\xfb\0\0\0\x1a\0\x44\0o\0\x63\0k\0\x42\0o\0o\0k\0m\0\x61\0r\0k\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\x42\0\xff\xff\xff\0\0\x1\xbd\0\0\x2h\0\0\0\x1\0\0\0\x2\0\0\0\b\0\0\0\x2\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) [input] device="rtl=0" -frequency=145800000 +frequency=93300000 gains=@Variant(\0\0\0\b\0\0\0\x1\0\0\0\x6\0L\0N\0\x41\0\0\0\x2\0\0\x1\xf0) -sample_rate=512000 +sample_rate=1800000 + +[output] +device=alsa_output.platform-soc_audio.analog-mono [receiver] -agc_decay=100 agc_off=true -demod=3 -filter_high_cut=5000 -filter_low_cut=-5000 -offset=-202000 -sql_level=-42.5 +demod=5 +filter_high_cut=80000 +filter_low_cut=-80000 +offset=357600 +sql_level=-59.7 [remote_control] allowed_hosts=::ffff:127.0.0.1 diff --git a/groundstation/fox.sh b/groundstation/fox.sh index aa8dc1f8..99b3ab6b 100755 --- a/groundstation/fox.sh +++ b/groundstation/fox.sh @@ -11,9 +11,13 @@ sudo systemctl stop rtl_tcp pkill -o chromium &>/dev/null +sudo killall -9 rtl_tcp &>/dev/null + sudo killall -9 java &>/dev/null -/home/pi/FoxTelem_1.09g_linux/FoxTelem & +sudo killall -9 gqrx &>/dev/null + +/home/pi/FoxTelem_1.09k6_linux/FoxTelem & #/usr/bin/chromium-browser --noerrdialogs --disable-infobars http://localhost:8073 &>/dev/null & diff --git a/groundstation/foxtelem.desktop b/groundstation/foxtelem.desktop new file mode 100644 index 00000000..401800f8 --- /dev/null +++ b/groundstation/foxtelem.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=/home/pi/fox.sh +Name=FoxTelem +Comment=Test Version 1.09 for CubeSatSim +Icon=/home/pi/Downloads/amsat.jpg +Path=/home/pi +#Terminal=true +Categories=HamRadio +Keywords=Ham Radio;AMSAT diff --git a/groundstation/gpredict.cfg b/groundstation/gpredict.cfg new file mode 100644 index 00000000..ad043087 --- /dev/null +++ b/groundstation/gpredict.cfg @@ -0,0 +1,22 @@ +[GLOBAL] +WINDOW_POS_X=148 +WINDOW_POS_Y=36 +WINDOW_WIDTH=982 +WINDOW_HEIGHT=654 +USE_LOCAL_TIME=false +TIME_FORMAT=%Y/%m/%d %H:%M:%S +USE_NSEW=false +USE_IMPERIAL=false +DEFAULT_QTH=AMSAT-HQ.qth +OPEN_MODULES=Amateur;AMSAT +CURRENT_PAGE=1 + +MAIN_WIN_POS=false +MOD_WIN_POS=false +MOD_STATE=false + +[TLE] +LAST_UPDATE=1589043270 + +[MODULES] +GRID=1;0;3;0;3;0;0;3;3;4;2;3;4;0;2;3;3;4;2;4 diff --git a/groundstation/gpredict.desktop b/groundstation/gpredict.desktop new file mode 100644 index 00000000..20a6ab49 --- /dev/null +++ b/groundstation/gpredict.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=/usr/bin/gpredict +Name=Gpredict +Comment=ISS and Satellite Tracking for ARISS Radio Pi +Icon=/home/pi/Downloads/gpredict.png +Path=/home/pi +Terminal=false +Categories=HamRadio +Keywords=Ham Radio;AMSAT diff --git a/groundstation/gqrx.desktop b/groundstation/gqrx.desktop new file mode 100644 index 00000000..4b262cd5 --- /dev/null +++ b/groundstation/gqrx.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=/home/pi/gqrx.sh +Name=Gqrx +Comment=Gqrx SDR +Icon=/home/pi/Downloads/gqrx.png +Path=/home/pi +Terminal=true +Categories=HamRadio +Keywords=Ham Radio;Gqrx;SDR diff --git a/groundstation/gqrx.sh b/groundstation/gqrx.sh index 7e995d2e..c1985706 100755 --- a/groundstation/gqrx.sh +++ b/groundstation/gqrx.sh @@ -1,16 +1,16 @@ -#!/bin/bash -# script to auto decode CubeSat Simulator telemetry +#!/bin/bash +# script to run gqrx -# kill rtl if running -ps -ef | grep rtl | grep -v grep | awk '{print $2}' | sudo xargs kill +echo "Script to run Gqrx for ARISS Radio Pi" -# kill openwebrx process if running -ps -ef | grep openwebrx | grep -v grep | awk '{print $2}' | sudo xargs kill +echo -# kill csdr process if running -ps -ef | grep csdr | grep -v grep | awk '{print $2}' | sudo xargs kill +sudo killall -9 java &>/dev/null -echo -e "Script to run Gqrx\n" +sudo systemctl stop rtl_tcp -/home/pi/gqrx-sdr-2.11.5-linux-rpi3/gqrx +sudo killall -9 rtl_tcp &>/dev/null +sudo systemctl stop openwebrx + +/usr/bin/gqrx diff --git a/groundstation/kill_all.sh b/groundstation/kill_all.sh index 2d9970ec..b4f18b28 100755 --- a/groundstation/kill_all.sh +++ b/groundstation/kill_all.sh @@ -4,16 +4,13 @@ echo -e "\nKilling all SDR or RTL processes \n" -# kill rtl if running -ps -ef | grep rtl_ | grep -v grep | awk '{print $2}' | sudo xargs kill > /dev/null 2>&1 +sudo killall -9 csdr -# kill openwebrx process if running -ps -ef | grep openwebrx | grep -v grep | awk '{print $2}' | sudo xargs kill > /dev/null 2>&1 +sudo killall -9 openwebrx -# kill csdr process if running -ps -ef | grep csdr | grep -v grep | awk '{print $2}' | sudo xargs kill > /dev/null 2>&1 +sudo killall -9 rtl_tcp -# kill gqrx process if running -ps -ef | grep gqrx-sdr-2.11.5-linux-rpi3/gqrx | grep -v grep | awk '{print $2}' | sudo xargs kill > /dev/null 2>&1 +sudo fuser -k 8073/tcp +sudo killall -9 FoxTelem diff --git a/groundstation/rtl-tcp-d.sh b/groundstation/rtl-tcp-d.sh new file mode 100755 index 00000000..8edba5f9 --- /dev/null +++ b/groundstation/rtl-tcp-d.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# script to run RTL-TCP in Direct Sampling Mode + +echo "Script to run RTL-TCP Direct Sampling for ARISS Radio Pi" + +echo + +ip=$(hostname -I|cut -f1 -d ' ') + +echo "IP Address to use in SDR is: $ip:1234" + +echo + +ssid=$(iwgetid -r) + +echo "Note: you need to be on the Wifi network: $ssid" + +echo + +sudo killall -9 java &>/dev/null + +sudo killall -9 gqrx &>/dev/null + +sudo systemctl stop rtl_tcp + +sudo systemctl stop openwebrx + +sudo /bin/sh -c '/usr/local/bin/rtl_tcp -a $(hostname -I|cut -f1 -d " ") -D 2' diff --git a/groundstation/rtl-tcp.desktop b/groundstation/rtl-tcp.desktop new file mode 100644 index 00000000..4a97dc9e --- /dev/null +++ b/groundstation/rtl-tcp.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=/home/pi/rtl-tcp.sh +Name=RTL-TCP +Comment=RTL-TCP for SDR# +Icon=/home/pi/Downloads/rtl-sdr.jpeg +Path=/home/pi +Terminal=true +Categories=HamRadio +Keywords=Ham Radio;RTL-SDR diff --git a/groundstation/rtl-tcp.sh b/groundstation/rtl-tcp.sh index 58032674..cf553288 100755 --- a/groundstation/rtl-tcp.sh +++ b/groundstation/rtl-tcp.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash # script to run RTL-TCP Server # # On SDR client, use 10.3.141.1:1234 to connect @@ -29,6 +29,8 @@ sudo killall -9 java &>/dev/null sudo systemctl stop openwebrx +sudo killall -9 rtl_tcp &>/dev/null + sudo systemctl start rtl_tcp $SHELL diff --git a/groundstation/sdr-2m.desktop b/groundstation/sdr-2m.desktop new file mode 100644 index 00000000..01421d04 --- /dev/null +++ b/groundstation/sdr-2m.desktop @@ -0,0 +1,11 @@ + +[Desktop Entry] +Type=Application +Exec=/home/pi/sdr-2m.sh +Name=SDR 2m Band +Comment=openwebrx for 2m band +Icon=/home/pi/Downloads/sdr.ico +Path=/home/pi +Terminal=true +Categories=HamRadio +Keywords=Ham Radio;SDR diff --git a/groundstation/sdr-hf.sh b/groundstation/sdr-hf.sh new file mode 100755 index 00000000..fd367b46 --- /dev/null +++ b/groundstation/sdr-hf.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# script to run OpenWebRX SDR in HF + +echo "Script to run Web SDR in HF for ARISS Radio Pi" + +echo + +ip=$(hostname -I|cut -f1 -d ' ') + +echo "IP Address to use in web browsers is: $ip:8073" + +echo + +ssid=$(iwgetid -r) + +echo "Note: you need to be on the Wifi network: $ssid" + +echo + +sudo killall -9 java &>/dev/null + +sudo systemctl stop rtl_tcp + +sudo killall -9 rtl_tcp &>/dev/null + +sudo systemctl stop openwebrx + +sudo cp /etc/openwebrx/config_webrx_hf.py /etc/openwebrx/config_webrx.py + +sudo systemctl restart openwebrx + +/usr/bin/chromium-browser --noerrdialogs --disable-infobars http://localhost:8073 &>/dev/null & + +$SHELL diff --git a/groundstation/webSDR.desktop b/groundstation/webSDR.desktop new file mode 100644 index 00000000..b08dd11b --- /dev/null +++ b/groundstation/webSDR.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Exec=/home/pi/sdr.sh +Name=Web SDR +Comment=openwebrx for Web SDR +Icon=/home/pi/Downloads/sdr.ico +Path=/home/pi +Terminal=true +Categories=HamRadio +Keywords=Ham Radio;SDR diff --git a/spacecraft/README.md b/spacecraft/README.md index d59160ce..9c364522 100644 --- a/spacecraft/README.md +++ b/spacecraft/README.md @@ -4,6 +4,8 @@ To use FoxTelem with the CubeSat Simulator, you will need to download the latest https://www.g0kla.com/foxtelem/downloads/test/ -Next, download the .MASTER files in the correct version number directory and put them in the FoxTelem spacecraft folder. +Install and run FoxTelem per the instructions. + +If version you downloaded has a directory of the same name here, download all the files in the correct version number directory and put them in the FoxTelem spacecraft folder.Run FoxTelem, then go under Spacecraft/Add and select the .MASTER files to add the CubeSat Simulator to FoxTelem. + -Run FoxTelem, then go under Spacecraft/Add and select the .MASTER files to add the CubeSat Simulator to FoxTelem. diff --git a/spreadsheet/readme.txt b/spreadsheet/readme.txt index f0b13413..7b5b23db 100644 --- a/spreadsheet/readme.txt +++ b/spreadsheet/readme.txt @@ -1,6 +1,10 @@ This spreadsheet is for analyzing the CubeSat Simulator telemetry. -It has been tested with Office 365 (Windows) and Office Excel for Mac (Version: 16.16.6) and LibreOffice Calc Version: 6.1.4.2 (Windows) +This is only used for the AFSK 1200 APRS telemetry mode. The latest version of the CubeSatSim supports Fox-1 telemetry emulation, so the use of this mode is encouraged - it does not use this spreadsheet as the telemetry is automatically decoded and graphed. + +Setting up FoxTelem is described here https://github.com/alanbjohnston/CubeSatSim/wiki/Ground-Station + +This spreadsheet has been tested with Office 365 (Windows) and Office Excel for Mac (Version: 16.16.6) and LibreOffice Calc Version: 6.1.4.2 (Windows) A version for Google Docs is available for copying and download at: