Skip to content

SpotHub

Jeremy Fielder edited this page May 9, 2026 · 4 revisions

SpotHub

SpotHub is AetherSDR's unified spot management system. Access it from Settings → SpotHub...

SpotHub aggregates spots from six independent sources, displays them on the panadapter as colour-coded callsign labels, and provides a sortable spot list with band filtering. All spot sources run on a dedicated worker thread with batched 1/second forwarding to the radio. The Display tab also exposes a separate Signal History markers path that detects voice signals + QRM directly from the panadapter spectrum (no spotter required).

The window opens with frameless chrome by default — a custom 18 px title bar at the top and 8-axis edge resize on the body, matching every other floating dialog in AetherSDR. Toggle frameless mode globally via View → Frameless Window.

Tabs

SpotHub has eight tabs: Cluster, RBN, WSJT-X, SpotCollector, POTA, FreeDV, Spot List, and Display. POTA and FreeDV are hidden if their respective optional dependencies (no extra build flags / qt6-websockets) aren't available.


Cluster (DX Cluster)

Connects to standard DX cluster nodes via telnet (DX Spider, AR-Cluster, CC Cluster).

  • Server / Port / Callsign — configure your cluster node (default: dxc.nc7j.com:7300)
  • Auto-Connect — automatically connect when radio connects
  • Console — live telnet output with command input (type sh/dx 20, set/filter, etc.)
  • Spot Color — configurable color picker (default: tan)
  • Log File~/.config/AetherSDR/dxcluster.log, replayed on dialog open

DX cluster spots appear on the panadapter at their spotted frequency with the configured color.

RBN (Reverse Beacon Network)

Connects to the Reverse Beacon Network for automated CW/RTTY/FT8 skimmer spots.

  • Server / Port — default: telnet.reversebeacon.net:7000
  • Callsign — falls back to cluster callsign if empty
  • Rate Limit — configurable max spots/sec to radio (default: 10) to prevent flooding during contests
  • Auto-Connect — automatically connect when radio connects
  • Console — live RBN output with command input
  • Spot Color — configurable (default: blue)
  • Log File~/.config/AetherSDR/rbn.log

RBN uses the same telnet protocol as DX clusters. The rate limiter uses a token-bucket system — excess spots are queued and sent in the next batch cycle.

WSJT-X (Decode Spotter)

Listens for WSJT-X decode messages via UDP multicast to spot stations you can hear in digital modes.

  • Address / Port — default: 224.0.0.1:2237 (multicast). Set to 0.0.0.0 for unicast
  • Auto-Start — automatically start listening when radio connects
  • Spot Filters — checkboxes to control which decodes are sent to the radio:
    • CQ — spot stations calling CQ (mutually exclusive with CQ POTA)
    • CQ POTA — spot stations calling CQ POTA (mutually exclusive with CQ)
    • Calling Me — spot stations calling your callsign directly
    • If nothing is checked, all decodes are forwarded
  • Per-filter Color Pickers — each filter category has its own color:
    • CQ: green (default)
    • CQ POTA: cyan (default)
    • Calling Me: red (default)
    • Default (unmatched): white
  • SNR-based Alpha — spot label opacity scales with signal strength:
    • -24 dB → faint (alpha 64)
    • 0 dB → mostly solid (alpha 192)
    • +10 dB → full opacity (alpha 255)
  • Spot Lifetime Slider — 30-300 seconds (default: 120s), separate from DXC/RBN lifetime
  • Console — shows decoded callsigns with frequency, SNR, and full decoded message
  • Log File~/.config/AetherSDR/wsjtx.log

How It Works

WSJT-X broadcasts decode messages as binary UDP packets (Qt QDataStream format). AetherSDR listens for Type 2 (Decode) messages, extracts the callsign from the decoded text, computes the actual frequency (dial frequency from Status messages + audio offset from the decode), and forwards matching spots to the radio.

The decoded message text (e.g., CQ KK7GWY DN18) appears in the Comment column of the Spot List.

Setup

  1. In WSJT-X: File → Settings → Reporting — ensure UDP Server is enabled (default port 2237)
  2. In AetherSDR: Settings → SpotHub → WSJT-X tab — click Start (or enable Auto-Start)
  3. Spots from decoded stations appear on the panadapter

See also: WSJT-X Integration for audio and CAT setup.

SpotCollector

A local UDP listener that accepts spot packets from third-party software (loggers, contest tools, custom scripts). Useful for funnelling spots from any UDP-capable application into the same panadapter overlay as your DX cluster spots.

  • Port — UDP port to listen on (configurable; default per the Auto-Start state)
  • Auto-Start — automatically start listening on radio connect
  • Console — live packet log with parse status

Packets are deduplicated against the existing spot pool and forwarded to the radio on the same 1/sec batch cycle as the other sources.

POTA (Parks on the Air)

Polls the POTA API for active park activations.

  • Poll Interval — 15-300 seconds (default: 30s)
  • Auto-Start — automatically start polling when radio connects
  • Console — shows activations with callsign, frequency, park reference, park name, and mode
  • Spot Color — configurable (default: yellow)
  • Spot Lifetime — uses the POTA API's expire field (time remaining on the activation)
  • Log File~/.config/AetherSDR/pota.log

POTA spots show the park reference and name in the Comment column (e.g., US-4567 Yellowstone National Park SSB). The API is polled at https://api.pota.app/spot/activator — no authentication required. Only new spots are forwarded (tracked by spotId).

FreeDV (FreeDV Reporter)

Connects to the FreeDV QSO Reporter at qso.freedv.org via WebSocket for real-time FreeDV station spots.

  • Auto-Start — automatically connect when radio connects
  • Console — shows active FreeDV stations with callsign, frequency, mode, and grid square
  • Spot Color — configurable (default: dark orange #FF8C00)
  • Spot Lifetime — 120 seconds (default), configurable via FreeDvSpotLifetime setting
  • Log File~/.config/AetherSDR/freedv.log

How It Works

The FreeDV QSO Reporter uses Socket.IO v4 over WebSocket (no REST API). AetherSDR connects in view-only mode (no callsign required) and receives real-time events:

  • freq_change — a station is active at a frequency → creates a spot
  • rx_report — a station decoded another station → creates a spot with SNR
  • new_connection / remove_connection — stations come online / go offline

On initial connect, the server replays all currently active stations, so spots appear immediately.

FreeDV spots show the mode (e.g., "700E", "1600") and grid square in the Comment column. Requires qt6-websockets package (optional dependency — FreeDV tab hidden if not available).


Spot List

A sortable table showing all spots from all sources in one view.

Columns

Column Description
Time UTC time of spot
Freq (kHz) Spotted frequency
DX Call Callsign of spotted station
Comment Mode, park reference, decoded message, etc.
Spotter Who spotted the station
Band Auto-detected band (160m-6m)
Source Which source provided the spot (Cluster, RBN, WSJT-X, POTA, FreeDV)

Features

  • Band Filter Checkboxes — 160m through 6m, all checked by default, persisted across sessions
  • Sortable — click any column header to sort
  • Double-click to Tune — tunes the active slice to the spot's frequency
  • Smart Auto-scroll — scrolls to show newest spots, pauses when you scroll up to read, resumes when you scroll back to the bottom
  • Clear button to reset the list

Display

Controls how spots appear on the panadapter. The tab opens with a single compact toggle row at the top — every "show this on the panadapter" switch lives here as a green-checked button:

[Spots] [Passive] [Memories] [Auto] [Signals] [QRM] [Clear All]
Toggle What it does
Spots Master enable for the spot overlay (DXC/RBN/WSJT-X/POTA/FreeDV/SpotCollector)
Passive Receive and render radio-side spots without sending spot add commands back to the radio
Memories Render the radio's memory channels as a spot-like feed on the panadapter
Auto Auto-switch slice mode when clicking a spot that includes mode info (CW, FT8, RTTY, etc.)
Signals Gold markers for detected voice-width signals (Signal History — generated locally from the spectrum)
QRM Red markers for persistent carriers and wideband interference (also Signal History)
Clear All Wipes DX spots, memories feed, and S-History / QRM marker state in one click

General display sliders

  • Levels — max vertical stacking depth for labels (1–10)
  • Position — vertical starting position (% from top of spectrum)
  • Font Size — spot label font size (8–32 px)
  • Spot Lifetime — non-linear slider with 10 sec → 24 hr range
  • Override Colors — force all spots to one colour (overrides per-source colours)
  • Override Background — control label background colour, opacity, and Auto-contrast toggle
  • Background Opacity — 0–100%
  • Spot Lines — toggle vertical tick lines from each label down to the spectrum
  • Total Spots — current count of spots on the radio

DXCC Coloring (left column below the divider)

Imports an ADIF log file and colours spot labels by worked status: new DXCC entity, new band, new mode, or already worked. Live-watches the log file so colours update whenever your logger writes a new QSO.

  • DXCC Colors toggle (Enabled / Disabled)
  • Log File (ADIF) — Browse… picker; arms a file watcher automatically
  • Imported — live "N QSOs / M entities" status
  • Colors — four swatch pickers (New DXCC, New Band, New Mode, Worked). Click a swatch to choose a colour.

Signal History (right column below the divider)

Tunes the panadapter-driven Signal History markers — the Signals and QRM toggles on the top row gate visibility, these sliders shape detection.

  • Marker Lifetime (15–300 s, default 60) — how long an inactive marker persists before purge
  • QRM Gate (3–30 s, default 6) — minimum age before a narrow carrier or wideband signal is classified as QRM
  • Edge Threshold (1.0–10.0 dB, default 3.0) — softer noise+dB threshold used by the slope edge walk that refines voice-width markers toward the carrier (lower = closer to carrier but more noise-sensitive)
  • Colors — Signals / QRM swatch pickers (defaults: amber #FFC800 for voice, red #FF0000 for QRM)
  • Snap to Step — when enabled, click-to-tune on a Signal History or QRM marker rounds to the active slice's step size, hiding the small carrier offset that comes from detecting voice on the panadapter

The Signal/QRM markers share the same rendering pipeline as DX spots — they honour Levels, Position, Font Size, override colours, and override background settings.


Spot Density Badges

When too many spots overlap in the same area of the panadapter (exceeding the configured Levels), they collapse into amber +N badges. Clicking a badge opens a popup menu listing all collapsed callsigns with their frequencies — click any entry to tune.

Spot Deduplication

Spots are deduplicated across all sources by callsign + frequency. If the same callsign appears on the same frequency (within 1 kHz) and hasn't expired, the duplicate is dropped. If the callsign moves to a different frequency, the old entry is replaced. The dedup timer uses source-appropriate lifetimes (WSJT-X uses its own shorter timer, POTA uses the API's expire field, DXC/RBN use the Display tab lifetime).

Hover Cursor

The mouse cursor changes to a pointing hand when hovering over spot labels or density badges on the panadapter, indicating they are clickable for tuning.

Worker Thread

All spot source clients (DX Cluster, RBN, WSJT-X, POTA) run on a dedicated worker thread. Network I/O, protocol parsing, and log file writing all happen off the main GUI thread. Spots are batched and forwarded to the radio once per second, reducing both main-thread CPU usage and radio command flooding.

Settings Keys

All SpotHub settings are persisted in ~/.config/AetherSDR/AetherSDR.settings:

Key Default Description
DxClusterHost dxc.nc7j.com Cluster server
DxClusterPort 7300 Cluster port
DxClusterCallsign (empty) Login callsign
DxClusterAutoConnect False Auto-connect on radio connect
DxClusterSpotColor #D2B48C DXC spot color (tan)
RbnHost telnet.reversebeacon.net RBN server
RbnPort 7000 RBN port
RbnCallsign (empty) RBN callsign (falls back to DXC)
RbnAutoConnect False Auto-connect on radio connect
RbnRateLimit 10 Max spots/sec to radio
RbnSpotColor #4488FF RBN spot color (blue)
WsjtxAddress 224.0.0.1 WSJT-X multicast address
WsjtxPort 2237 WSJT-X UDP port
WsjtxAutoStart False Auto-start on radio connect
WsjtxSpotLifetime 120 WSJT-X spot lifetime (seconds)
WsjtxFilterCQ True Filter: CQ calls
WsjtxFilterPOTA True Filter: CQ POTA calls
WsjtxFilterCallingMe True Filter: directed to my call
WsjtxColorCQ #00FF00 CQ spot color (green)
WsjtxColorPOTA #00FFFF CQ POTA spot color (cyan)
WsjtxColorCallingMe #FF0000 Calling Me spot color (red)
WsjtxColorDefault #FFFFFF Default WSJT-X spot color
PotaPollInterval 30 POTA poll interval (seconds)
PotaAutoStart False Auto-start on radio connect
PotaSpotColor #FFFF00 POTA spot color (yellow)
DxClusterSpotLifetime 30 DXC/RBN spot lifetime (minutes)
IsSpotsEnabled True Show spots on panadapter
SpotsMaxLevel 3 Max label stacking depth
SpotFontSize 16 Label font size (px)
SpotBandFilter_* True Per-band filter state
ManualSpotColor #00FF00 Manual spot color (green)
ManualSpotLifetime 1800 Manual spot lifetime (seconds)
SpotForwardToCluster False Forward manual spots to DX cluster

Manual Spot Creation (Click-to-Spot)

Right-click on the panadapter to manually create spots:

Adding a Spot

  1. Right-click on an empty area of the panadapter
  2. Select "Add Spot at X.XXX MHz..."
  3. Fill in the dialog:
    • Frequency — pre-filled from click position, snapped to tuning step size
    • Callsign — required
    • Comment — optional
    • Lifetime — 5 min, 15 min, 30 min, 1 hour, or 2 hours
    • Forward to DX Cluster — if checked and cluster is connected, sends a standard DX command
  4. Click OK — the spot appears on the panadapter

Right-Click on Existing Spots

Right-click directly on a spot label for additional options:

Action Description
Tune to <callsign> Tunes the active slice to the spot frequency
Copy Callsign Copies callsign to clipboard
Lookup on QRZ Opens qrz.com/db/<callsign> in your browser
Remove Spot Removes the spot from the radio

Label Deconfliction

Spot labels automatically stack across multiple levels to avoid overlap. When more spots exist than the configured level depth allows, overflow spots are grouped into cluster badges (+N) that can be clicked to expand.

Clone this wiki locally