-
Notifications
You must be signed in to change notification settings - Fork 146
Background decoding
Since OpenWebRX is capable of decoding many digital signals, it is very much suitable to be used as an automatic reporting stations.
Right of the bench, your OpenWebRX is capable is able to decode all the WSJT-X modes, as well as Packet, but will only do so when a users is connected and actively listening to one of these modes. You can monitor the output on the built-in map, you should see colored squares for everything that outputs Maidenhead locators, and a pin or APRS symbol should show up for every service that produces a precise location.
The first step towards automatic monitoring is enabling "services". Services are decoders that will run automatically in the background, as soon as they detect that their respective frequencies are available on any of the SDRs. For example, if you enable the service for FT8, and you have a user select the 40m band, the service will automatically start decoding FT8 on 7.074 MHz, while the user can listen to any other frequency or mode on the band.
As soon as the user disconnects, the SDR will shut down, and the background decoder will stop decoding. If you wish to keep your receivers busy, you can set up a schedule for each one of them, that will not only make sure that the background decoders have something to do, they also allow you to specify which frequency range should be available to decoding during specific hours of the day.
The background decoders as well as the schedulers are designed in a way to not interfere with any user interaction of the receiver. A user requesting a specific profile will always take precedence over the scheduler selection. The decoders themselves use low scheduling priority, so that the user demodulation should still be possible, even if the CPU is saturated.
There's two simple settings in your config_webrx.py
that control background services (this is the default that comes with the project):
services_enabled = False
services_decoders = ["ft8", "ft4", "wspr", "packet"]
services_enabled
controls whether or not background services are running at all. You should set it to True
(uppercase T
is necessary) if you want any background services to run.
services_decoder
controls which modes should be automatically decoded when their frequencies are available. This is a list, you can put as many modes as you wish in there. Currently, the following values are supported: ft8
, ft4
, wspr
, jt65
, jt9
, packet
.
The scheduler is an extra key in the SDR definition. This is best illustrated with an example (SDR specific configuration has been stripped from the example to focus on the scheduler config):
sdrs = {
"airspy": {
"name": "Airspy HF+",
"type": "airspyhf_connector",
... other sdr options ...
"profiles": {
"20m": { ... removed for clarity ... },
"40m": { ... removed for clarity ... },
"80m": { ... removed for clarity ... },
},
"scheduler": {
"type": "static",
"schedule": {
"2100-0400": "80m",
"0400-0900": "40m",
"0900-1500": "20m",
"1500-2100": "40m",
},
},
},
}
This SDR device has been set up with a static scheduler to listen on the 80m profile from 9pm to 4am, on 20m from 9am to 3pm, and on 40m on the remaining slots inbetween (all times are in UTC).
You can have as many schedule items as you wish, you can even leave "idle" times inbetween in which the SDR is shut down (unless of course a user is using it). You can also set your receiver to be running on the same profile all day long if you set the scheduel item to 0000-0000
.
Please note: The schedule format is very specific. You can only specify start end end time in four digits each, separated by a -
. You can not specify days, weekdays, or seconds.
There is also a "daylight" scheduler available that will calculate sunrise / sunset times and schedule your device accordingly. You can optionally configure a "greyline" profile for the transition period (+/- 1 hour from sunset / sunrise). Here's a small example snippet on how to configure it:
"scheduler": {
"type": "daylight",
"schedule": {
"night": "80m",
"day": "20m",
"greyline": "40m",
},
},
Please Note: with the introduction of the daylight scheduler (January 2020), the scheduler config format has changed to allow for different scheduler types. The old config format is still supported for backwards compatibility, but at the same time deprecated. Please feel encouraged to switch to the new format.
Once your receiver is decoding any digital signals, you may as well share your spots with some networks so the transmitting station can find out about his range.
You can automatically upload your spots to pskreporter. Before you enable it, make sure you have set the receiver_gps
to the correct latitude and longitude of the receiver's location. It is included in all the spots and will lead to irritating displays if it is not set up correctly.
pskreporter_enabled = False
pskreporter_callsign = "N0CALL"
pskreporter_enabled
tells the system whether or not to send the sports to the network. Set this to True
(uppercase T) to share your spots.
pskreporter_callsign
is the callsign of your station. This should be fairly straightforward if you're a ham, if you're not I suppose it's time to get creative. N0CALL
is commonly used in such situations.
Please note that only decodes of the following modes are currently being sent to pskreporter: FT8, FT4, JT9 and JT65. This is just based on my personal perception of what's most appropriate, feel free to discuss.
If your receiver is decoding any APRS signals, you can share them on the APRS-IS network. This is the default configuration:
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
aprs_callsign
is the callsign you'd like your spots to be sent with. Differently than on pskreporter though, this callsign may be used by the network if your message is re-broadcast by other igate stations. Since this cannot be controlled by the reporting station, I suppose this is a feature only to be used by hams.
aprs_igate_enabled
tells the system to start the decoder with the igate functionality enabled, which basically means that anything that's decoded gets fed back to the network.
aprs_igate_server
is the server that you'd like to connect to. The default value is reasonable for pretty much anywhere of Europe, however it is always recommended to check if there's any server available close to your receiver. I do not have any comprehensive list or documentation on how to obtain these servers at my hand.
aprs_igate_password
is the password that, in combination with the callsign, identifies you on the network. Depending on the server software in use on the other side, this may or may not be optional. It can be generated easily, please refrain to your preferred search engine on how to do this.
aprs_igate_beacon
tells the receiver to publish its own location on the network in intervals. Before enabling this, please make sure that the receiver_gps
is set to the correct location of the receiver.
Please note: APRS data is forwarded to the network straight from the decoding software (direwolf).
It is currently not possible to feed data back into WSPRnet due to the fact that the only API known to the author requires more information than the decoder is currently delivering.
The wsprd binary will write additional fields to a file called ALL_WSPR.TXT
, which is also the same format that is required by the API. Due to the architecture of OpenWebRX, decoding will occur in parallel, and as such I do consider that file to be corrupted by design. The output on STDOUT (which is parsed by OpenWebRX) is lacking some fields, and since the fields in the upload are only identified by their position, I would have to fake values for these fields, which I do not intend to do.
Supported Hardware
Setup Guide
Docker
Manual installation
Upgrading an installation
Migrating to OpenWebRX 1.0
RHEL specific notes
User Management
Configuration
Bookmarks
Background decoding
How to get openwebrx stats into collectd
Airspy HF+ and Discovery
Airspy R2 / Mini
HackRF
Perseus HF receiver
RTL-SDR
Radioberry
SDRPlay
HPSDR / Hermes-Lite 2
FiFi-SDR
AMBE vocoder