-
-
Notifications
You must be signed in to change notification settings - Fork 107
StreamDeck
AetherSDR supports Elgato Stream Deck devices via the StreamController plugin system and AetherSDR's built-in TCI server. This approach works with all Stream Deck models on Linux, macOS, and Windows.
Note: Prior to v0.8.6, AetherSDR had native USB HID StreamDeck support. This was replaced by the TCI-based plugin for better flexibility, cross-platform support, and community extensibility.
- AetherSDR v0.8.6+ with TCI server enabled
- StreamController — the open-source Linux Stream Deck application (installation guide)
- Python 3.10+
In AetherSDR, go to Settings → Autostart TCI with AetherSDR and check it. The TCI WebSocket server listens on port 40001 by default.
Verify it's running: connect to a radio, then check the status bar — you should see the TCI icon.
Follow the StreamController installation guide for your platform.
Copy the plugin from the AetherSDR source tree to StreamController's plugin directory:
# Linux
cp -r /path/to/AetherSDR/plugins/streamcontroller-aethersdr \
~/.var/app/com.core447.StreamController/data/plugins/com_aethersdr_radio
# Or if using a system install:
cp -r /usr/share/AetherSDR/plugins/streamcontroller-aethersdr \
~/.var/app/com.core447.StreamController/data/plugins/com_aethersdr_radioRestart StreamController after copying. The "AetherSDR" plugin should appear in the plugin list.
The plugin connects to AetherSDR's TCI server at ws://localhost:40001 automatically. No configuration needed if both are running on the same machine.
For remote operation, set the TCI host in the plugin settings to the IP of the machine running AetherSDR.
| Action | Description |
|---|---|
| PTT | Push-to-talk (hold to transmit) |
| MOX Toggle | Toggle transmit on/off |
| TUNE Toggle | Toggle tune carrier |
| RF Power | Adjust RF power level |
| Tune Power | Adjust tune power level |
| Action | Description |
|---|---|
| Band 160m–6m | Direct band select (11 bands) |
| Band Up / Down | Step through bands sequentially |
| Tune Up / Down | Nudge frequency by one step |
| Action | Description |
|---|---|
| Mode USB, LSB, CW, AM, FM, DIGU, DIGL, FT8 | Direct mode select |
| Action | Description |
|---|---|
| Mute Toggle | Toggle audio mute |
| Volume Up / Down | Adjust AF gain |
| Action | Description |
|---|---|
| NB Toggle | Noise blanker |
| NR Toggle | Noise reduction |
| ANF Toggle | Auto notch filter |
| APF Toggle | Audio peak filter |
| SQL Toggle | Squelch |
| Action | Description |
|---|---|
| Split Toggle | Toggle split mode |
| Lock Toggle | Toggle VFO lock |
| RIT Toggle | Toggle RIT |
| XIT Toggle | Toggle XIT |
| Action | Description |
|---|---|
| Play | Play DVK recording |
| Record | Start/stop DVK recording |
- Stream Deck XL (32 keys): Use Row 1 for bands, Row 2 for modes, Row 3 for TX/slice controls, Row 4 for DSP toggles
- Stream Deck MK2 (15 keys): Focus on the controls you use most — band/mode on top rows, TX/DSP on bottom
- Stream Deck Mini (6 keys): PTT, MOX, TUNE, band up/down, and one mode toggle
- Stream Deck + (8 keys + 4 dials): Keys for toggles, assign dials to VFO tune, volume, RF power, squelch via StreamController's dial actions
- Stream Deck Pedal (3 keys): PTT on center pedal, band up/down on sides
StreamDeck Hardware
↓ USB HID
StreamController App
↓ Plugin API
AetherSDR Plugin (Python)
↓ WebSocket
AetherSDR TCI Server (port 40001)
↓ TCP 4992
FlexRadio
The plugin maintains a persistent WebSocket connection to AetherSDR's TCI server. Button presses send TCI commands; radio state changes are pushed back to update button labels and indicators.
- Verify the plugin was copied to the correct directory
- Check that the directory name is
com_aethersdr_radio - Restart StreamController
- Check that AetherSDR is running and connected to a radio
- Verify TCI is enabled: Settings → Autostart TCI with AetherSDR
- Check StreamController logs for WebSocket connection errors
- Ensure AetherSDR's TCI server is running (port 40001)
- If running remotely, check firewall rules for port 40001
- Try
wscat -c ws://localhost:40001to test the connection manually
The plugin source is in plugins/streamcontroller-aethersdr/ in the AetherSDR repository. Each action is a self-contained Python class in the actions/ directory. To add a new action:
- Create a new directory under the appropriate category (e.g.,
actions/DSP/MyAction/) - Create
MyAction.pyextendingActionBasefrom the plugin - Register it in
main.py
See the TCI protocol documentation for available commands.
If you were using the built-in StreamDeck support in v0.8.5 or earlier:
- The
hidapilibrary is no longer required for StreamDeck (still needed for HID encoders like FlexControl) - The Settings → StreamDeck... menu item has been removed
- Install StreamController + the AetherSDR plugin as described above
- The udev rule for StreamDeck access is now managed by StreamController, not AetherSDR
- Panadapter Controls
- VFO Widget
- RX Controls
- TX Controls
- Aetherial Audio
- Multi-Slice Operation
- Diversity and ESC
- TNF (Tracking Notch Filters)
- Memory Channels
- Profile Management
- Slice Colors
- XVTR (Transverters)
- CWX Panel
- CW Decoder
- DVK Panel
- RTTY Operation
- RADE Digital Voice
- DAX Virtual Audio
- DAX IQ Streaming
- WSJT-X Integration
- CAT Control
- TCI Server