WaveLogGoat is a lightweight Go application that polls radio status from flrig (via XML-RPC) or hamlib's rigctld (via TCP) and sends it to your Wavelog instance.
This tool replaces the JavaScript-based WaveLogGate with a single, statically compiled binary that runs as a background service with no runtime dependencies. It supports multiple configuration profiles for different radios or Wavelog instances.
- Dual Data Source: Supports both
flrigandhamlib(rigctld).- The
flrigsupport is tested and known to function with flrig running on Fedora and an IC-7300 - hamlib/rigctld is reported working by mattmelling
- The
- Configuration Profiles: Manage multiple radio/Wavelog setups within a single
config.jsonfile. - Command-Line Control: All configuration options can be set via command-line flags, which override file settings.
- Easy Configuration: Persist your settings using the
-save-profileflag. - Cross-Platform: Runs on Linux, Windows, and macOS.
- Tested on Fedora Linux on amd64
- Intended to work on macOS and Windows. Please report success or failure.
- Lightweight: Low CPU and memory usage, ideal for a Raspberry Pi, laptop, or generally conserving resources.
- Leveled Logging:
-log-level=error(default): Only shows fatal errors.-log-level=warn: Shows non-critical errors (e.g., failed to get one data point).-log-level=info: Shows successful updates and configuration loading.-log-level=debug: Shows connection errors and unchanged data polls.
- Real-time Radio Status Broadcasting:
- WebSocket Server (WS): Broadcasts radio status changes to connected clients in real-time.
- WebSocket Secure Server (WSS): Encrypted WebSocket connections for secure communication.
- Compatible with WaveLogGate client format.
- HTTP QSY Server:
- Remote frequency/mode control via HTTP API.
- Supports both HTTP and HTTPS (dual listener on same port).
- SSL/TLS Support:
- Automatic self-signed certificate generation for localhost.
- Platform-specific certificate installation instructions.
- Secure connections for WSS and HTTPS QSY endpoints.
Download the standalone binary for your operating system and CPU type, and if necessary make it executable:
chmod +x waveloggoatYou must have the Go toolchain (version 1.21+) installed.
It is recommended to have GoReleaser installed
# git clone https://github.com/johnsonm/WaveLogGoat
# cd WaveLogGoat
# Download dependencies
go mod tidy
# Build the binary with goreleaser
goreleaser build
# Or build the binary with go
go buildWaveLogGoat is configured using a config.json file, command-line flags, or a combination of both. Flags will always override settings from the config file.
Configuration File Location:
- Linux:
~/.config/WaveLogGoat/config.json - Windows:
%APPDATA%\WaveLogGoat\config.json - macOS:
~/Library/Application Support/WaveLogGoat/config.json
Certificate Location (for SSL/TLS):
- Linux:
~/.config/WaveLogGoat/waveloggoat.crtandwaveloggoat.key - Windows:
%APPDATA%\WaveLogGoat\waveloggoat.crtandwaveloggoat.key - macOS:
~/Library/Application Support/WaveLogGoat/waveloggoat.crtandwaveloggoat.key
The easiest way to get started is by using command-line flags to create and save your first profile.
# Example: Create a profile named "IC-7300" using flrig
./waveloggoat \
-save-profile="IC-7300" \
-wavelog-url="https://mywavelog.com/index.php" \
-wavelog-key="wl2_MY-API-KEY" \
-radio-name="IC-7300" \
-data-source="flrig" \
-flrig-host="127.0.0.1" \
-flrig-port=12345 \
-websocket-enable \
-websocket-port=54322 \
-qsy-enable \
-qsy-port=54321This command creates the config.json file (if it doesn't exist) and saves these settings.
After saving a profile, you can set it as the default.
./waveloggoat -set-default-profile="IC-7300"Once you have a default profile set, you can run the program with no arguments:
# This will load the settings for the default profile
./waveloggoatTo run with a different profile:
./waveloggoat -profile="My-Other-Radio"To override one setting (like the log level) for a single run:
# Run the default profile, but with debug logging
./waveloggoat -log-level=debugUsage of ./waveloggoat:
-data-source string
Data source: 'flrig' or 'hamlib'. (default "flrig")
-flrig-host string
flrig XML-RPC host address. (default "127.0.0.1")
-flrig-port int
flrig XML-RPC port. (default 12345)
-hamlib-host string
Hamlib rigctld host address. (default "127.0.0.1")
-hamlib-port int
Hamlib rigctld port. (default 4532)
-interval string
Polling interval (e.g., 1s, 1500ms). (default "1s")
-log-level string
Logging level: 'debug', 'info', 'warn', or 'error'. (default "error")
-profile string
Select a named configuration profile to run (overrides default).
-qsy-enable
Enable QSY HTTP server.
-qsy-enable-ssl
Enable HTTPS for QSY server (dual HTTP/HTTPS on same port).
-qsy-port int
QSY HTTP server port (default: 54321). (default 54321)
-radio-name string
Name of the radio (e.g., FT-891). (default "RIG")
-save-profile string
Saves the current configuration flags (excluding this flag) to the specified profile name and exits.
-set-default-profile string
Sets the default profile to the specified name and exits.
-version
Print version information and exit
-wavelog-key wl2_
Wavelog API Key, starting with wl2_. (default "wl2_YOUR_API_KEY")
-wavelog-url string
Wavelog API URL for radio status. (default "http://localhost/index.php")
-websocket-enable
Enable WebSocket server for real-time radio status. (default true)
-websocket-port int
WebSocket server port (default: 54322). (default 54322)
-wss-enable
Enable WebSocket Secure server (WSS) for encrypted connections.
-wss-port int
WebSocket Secure server port (default: 54323). (default 54323)
This tool sends data to Wavelog using the new JSON format:
- Endpoint:
(your-wavelog-url)/api/v2/radio(The/api/v2/radiopath is added automatically; the old /api/radio API is not supported) - Method:
POST - Header:
Authorization: Bearer wl2_YOUR_API_KEY - Body (JSON):
{ "radio": "IC-7300", "power": 100, "frequency": 14074000, "mode": "DATA", "frequency_rx": 14076000, // Optional: Only sent when split "mode_rx": "DATA" // Optional: Only sent when split }
## WebSocket/WSS Server
WaveLogGoat includes a WebSocket server that broadcasts real-time radio status changes to connected clients. This is c
mpatible with the WaveLogGate client format.
### WebSocket (WS) - Default Port 54322
```javascript
// Example JavaScript client
const socket = new WebSocket('ws://localhost:54322/');
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'radio_status') {
console.log(`Frequency: ${data.frequency} Hz, Mode: ${data.mode}`);
}
};
When SSL is enabled, WaveLogGoat generates a self-signed certificate and starts a WSS server:
./waveloggoat -wss-enable// Example WSS client
const socket = new WebSocket('wss://localhost:54323/');
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'radio_status') {
console.log(`Frequency: ${data.frequency} Hz, Mode: ${data.mode}`);
}
};Radio status messages are sent in the following JSON format:
{
"type": "radio_status",
"frequency": 14075000,
"mode": "USB",
"power": 100,
"split": 0,
"radio": "IC-7300",
"timestamp": 1704067200000
}For split mode operation:
{
"type": "radio_status",
"frequency": 14075000,
"frequency_rx": 14074000,
"mode": "USB",
"mode_rx": "USB",
"power": 100,
"split": 1,
"radio": "IC-7300",
"timestamp": 1704067200000
}WaveLogGoat includes an HTTP API for remote frequency and mode control (QSY). This allows WaveLog or other applications to change the radio frequency and mode.
- HTTP:
http://localhost:54321/{frequency}/{mode} - HTTPS:
https://localhost:54321/{frequency}/{mode}(when-qsy-enable-sslis set)
# Set radio to 7.155 MHz LSB
curl http://localhost:54321/7155000/LSB
# Using HTTPS (requires SSL certificate to be installed)
curl -k https://localhost:54321/7155000/LSBSuccess response:
{
"status": "success",
"message": "QSY successful: frequency=7155000 Hz, mode=LSB",
"frequency": 7155000,
"mode": "LSB"
}Error response (radio control software not available):
{
"error": "QSY failed: radio control software not available",
"details": "connection refused"
}USB, LSB, CW, AM, FM, PKTUSB, PKTLSB, RTTY, CWR, PKTFM, DIGI, DIGU, DIGL
WaveLogGoat includes automatic SSL/TLS certificate generation for secure connections.
When you enable SSL features (-wss-enable or -qsy-enable-ssl), WaveLogGoat automatically:
- Generates a self-signed ECDSA P-256 certificate for localhost
- Saves the certificate and private key to the config directory
- Displays platform-specific installation instructions
The certificate is valid for 10 years and includes the following Subject Alternative Names:
localhost127.0.0.1::1
For browsers to trust the self-signed certificate, it must be installed in your system's certificate trust store.
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/Library/Application\ Support/WaveLogGoat/waveloggoat.crtAlternative (via GUI):
- Open Keychain Access (Applications > Utilities > Keychain Access)
- Drag the certificate file into the 'System' keychain
- Find the certificate, double-click it, and expand 'Trust'
- Set 'When using this certificate' to 'Always Trust'
- Close the dialog and enter your password if prompted
certutil -addstore -f Root %APPDATA%\WaveLogGoat\waveloggoat.crtAlternative (via GUI):
- Double-click the certificate file
- Click 'Install Certificate'
- Select 'Local Machine' > Next
- Select 'Place all certificates in the following store'
- Click 'Browse' and select 'Trusted Root Certification Authorities'
- Click Finish
Debian/Ubuntu:
sudo cp ~/.config/WaveLogGoat/waveloggoat.crt /usr/local/share/ca-certificates/waveloggoat.crt
sudo update-ca-certificatesFedora/RHEL/CentOS:
sudo cp ~/.config/WaveLogGoat/waveloggoat.crt /etc/pki/ca-trust/source/anchors/waveloggoat.crt
sudo update-ca-trustArch Linux:
sudo trust anchor ~/.config/WaveLogGoat/waveloggoat.crtNote: Some browsers (like Firefox) manage their own certificate store. You may need to import the certificate directly in your browser settings.
# Enable WebSocket Secure only
./waveloggoat -wss-enable
# Enable HTTPS for QSY server
./waveloggoat -qsy-enable-ssl
# Enable both
./waveloggoat -wss-enable -qsy-enable-ssl
# Save SSL settings to profile
./waveloggoat -save-profile="ssl-profile" -wss-enable -qsy-enable-ssl- 12345: Default flrig XML-RPC port
- 4532: Default hamlib rigctld port
- 54321: HTTP/HTTPS QSY server port
- 54322: WebSocket (WS) server port
- 54323: WebSocket Secure (WSS) server port
MIT License - See LICENSE file for details.