Skip to content

Subscribe to MQTT topics for external device status and rotator control #699

Description

@va3mw

Request preparation

  • I used an AI assistant to help structure this request
  • I checked for existing issues covering the same feature

What would you like?

What

Add MQTT client support so AetherSDR can subscribe to one or more MQTT topics and display short status messages from external station devices directly in the panadapter area.

From the operator’s perspective, AetherSDR would connect to a user-configured MQTT broker and show inbound device text such as beam heading, selected antenna, or SteppIR position below the existing WIDE and PreAmp controls in the panadapter UI.

As a follow-on capability, the same MQTT integration could also allow outbound control messages for devices such as rotators from an AetherSDR panel similar in spirit to Spot Hub.

Why

Many radio shacks already use MQTT heavily through Node-RED and other automation systems to coordinate antennas, rotators, SteppIR controllers, and related devices.

Today, that information often lives in a separate dashboard or browser window. Bringing key MQTT-fed status into AetherSDR would let the operator see important station context without leaving the client.

This would also create a flexible integration path for many external devices without requiring AetherSDR to implement a custom protocol adapter for each one.

How Other Clients Do It
SmartSDR generally relies on ecosystem integrations and companion tools rather than a native MQTT event bus.
Node-RED-based station dashboards commonly use MQTT topics to aggregate radio, antenna, and rotator state into a single operator view.
GQRX / SDR++ typically do not offer native MQTT-driven station-control integration in the main UI, so operators often depend on separate tooling.

AetherSDR could differentiate itself by exposing a clean, native station-automation bridge inside the main operating interface.

Suggested Behavior
Phase 1 — MQTT status subscribe/display
Add an MQTT section in settings:
Broker hostname/IP
Port
Username/password if needed
Topic list to subscribe to
Retain / QoS options if practical
Maximum displayed message length: 20 or 40 characters
In the panadapter UI, display the most recent MQTT text payload below WIDE and PreAmp
The display should update whenever a subscribed message arrives
If multiple topics are configured, allow either:
one selected “display topic”, or
a compact merged display such as Antenna: Hexbeam | Bearing: 240
If the broker disconnects, show a subtle disconnected indicator rather than an intrusive popup
Phase 2 — MQTT device control
Add an optional dockable panel or popup, potentially similar to Spot Hub
Allow the operator to click preset actions such as:
rotate left/right
go to heading
select antenna
trigger SteppIR preset
Publish outbound MQTT commands to configured topics
Show acknowledgement/state updates from subscribed return topics when available
UI notes
The receive/status text should feel native to AetherSDR and not obscure core panadapter controls
A later implementation could expose this as a small panel associated with AppletPanel, RxApplet, or a related panadapter-side widget
If the text is longer than the configured visible width, truncate cleanly with ellipsis
Protocol Hints

AetherSDR is a Linux-native Qt6/C++20 client, and the project guidance favors Qt6/C++20 idioms and existing app settings infrastructure.

Possible implementation direction:

MQTT transport: Unknown — needs research
Candidate Qt approach:
use a Qt-friendly MQTT client implementation
persist broker/topic settings through AppSettings rather than QSettings per project guidance
Inbound payload:
plain text string, expected length 20 to 40 characters
Outbound payload for rotator/device control:
topic/payload format should be user-configurable because Node-RED deployments vary widely

Example inbound payloads:

Beam 240° NW
ANT: 40m Yagi
SteppIR 14.074 USB

Example outbound topic ideas:

station/rotator/cmd
station/antenna/cmd
station/steppir/cmd

Example outbound payload ideas:

LEFT
RIGHT
GOTO 270
ANT 2
PRESET 20M
Acceptance Criteria
AetherSDR can connect to a configured MQTT broker and subscribe to at least one topic
A received MQTT text payload is shown in the panadapter area below WIDE / PreAmp
The displayed text updates live without requiring the operator to reopen the panel or restart the app
Broker disconnect/reconnect state is handled gracefully and visibly
MQTT settings are persisted correctly using the project’s normal settings system
A future extension path exists for outbound MQTT publish actions for rotator or antenna control

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementImprovement to existing feature

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions