Bridging WaveNode Power Meter Data into Thetis
Bridging WaveNode Power Meter Data into Thetis
One of the fun things about modern ham radio is that so much of the station is now software-defined it's not just the radio, but the amplifiers, power meters, rotators, dashboards, remote control systems and logging tools around it.
That also creates a familiar problem: all the pieces know useful things, but they do not always speak the same language.
This project started from a simple question:
Can Thetis display WaveNode RF power and SWR data the same way some stations use TelePost LP-100A meter data?
The short answer is: maybe and this project is an experimental bridge to help test exactly that.
The Problem
Thetis already has a Multi Meter I/O feature that can accept external meter data. Many hams have used this with the TelePost LP-100A, where meter information is sent into Thetis over the network.
WaveNode systems, on the other hand, can publish useful station telemetry such as:
- Forward power
- Reflected power
- SWR
In my station, that data was already available over MQTT (see Getting WaveNode Power Meter Data Into Node-RED).
So the obvious question became:
Instead of trying to make Thetis talk MQTT directly, could a small bridge translate WaveNode MQTT telemetry into an LP100A-style network format that Thetis already understands?
That is what this project attempts to do.
What the Bridge Does
The project is a small Python script:
WaveNode to Thetis LP100A Bridge
It subscribes to WaveNode MQTT topics, reads the current forward power, reflected power and SWR values, then sends them to Thetis as LP100A-style UDP/XML packets.
Conceptually, the flow looks like this:
WaveNode MQTT telemetry
↓
Python bridge
↓
LP100A-style UDP/XML packets
↓
Thetis Multi Meter I/OThe bridge does not modify Thetis, and it does not make Thetis an MQTT client. It simply acts as a translator between the two systems.
Why LP100A-Style Data?
The TelePost LP-100A has become something of a known reference point for external RF power meter data in some SDR workflows. Thetis has support for receiving meter data using a UDP/XML-style format, so rather than inventing a new protocol, this bridge tries to emulate the kind of data structure that Thetis is already prepared to receive.
The bridge sends values such as:
<LP100A>
<fwdpwr>100.00</fwdpwr>
<refpwr>2.00</refpwr>
<swr>1.20</swr>
<z>50.00</z>
<phase>0.00</phase>
<peakpwr>100.00</peakpwr>
</LP100A>The result is intended to let Thetis display external meter values sourced from WaveNode data.
This is still experimental. The exact behavior may depend on the Thetis version, the Multi Meter I/O setup and how closely Thetis expects the LP100A packet structure to match the original device behavior.
Typical MQTT Topics
The bridge expects WaveNode-style MQTT topics such as:
wavenode/avg_watts/1
wavenode/ref_watts/avg/1
wavenode/swr1The sensor number is configurable, so if you are using a different WaveNode sensor channel, you can point the bridge at that sensor.
For example, sensor 1 would use:
Forward power: wavenode/avg_watts/1
Reflected power: wavenode/ref_watts/avg/1
SWR: wavenode/swr1Thetis Setup
In Thetis, configure Multi Meter I/O for external meter input:
Protocol: UDP
Direction: In
Format: XML
Port: 9388If the bridge is running on the same Windows PC as Thetis, send the UDP data to:
127.0.0.1:9388If the bridge is running on another machine, such as a Raspberry Pi, send the UDP data to the IP address of the Windows PC running Thetis.
Running the Bridge
The bridge requires Python 3.8 or newer and the paho-mqtt package.
Install the dependency with:
pip install paho-mqttOr, from the repo:
pip install -r requirements.txtA basic example:
python wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 192.168.1.25 \
--thetis-port 9388 \
--sensor 1Replace the MQTT host with the IP address of your MQTT broker, and replace the Thetis host with the IP address of the PC running Thetis.
If you are running the bridge on the same Windows PC as Thetis, use:
python wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 127.0.0.1 \
--sensor 1Windows or Raspberry Pi?
Either should work.
Running it on the Windows PC with Thetis is probably the easiest first test because you can send the data to 127.0.0.1 and avoid firewall or routing issues.
Running it on a Raspberry Pi may make more sense for a permanent station installation, especially if your MQTT broker or other station automation tools already live there. In that case, the Pi sends UDP packets across the LAN to the Thetis PC.
A Linux/Raspberry Pi example:
sudo apt update
sudo apt install python3 python3-pip
pip3 install paho-mqtt
python3 wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 192.168.1.25 \
--sensor 1Auto-Zero Behavior
One useful feature is auto-zeroing.
If the bridge stops receiving matching WaveNode MQTT updates, it can automatically send zero power and a normal SWR value after a timeout. By default, that timeout is 5 seconds.
That means if RF activity stops, or if telemetry stops updating, the displayed meter values should not remain stuck indefinitely.
Default behavior after timeout:
Forward power = 0
Reflected power = 0
SWR = 1.0You can change the timeout:
python wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 127.0.0.1 \
--zero-after 10Or disable auto-zero:
python wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 127.0.0.1 \
--zero-after 0Useful Command Line Options
Some of the more useful options include:
--mqtt-host MQTT broker host/IP
--mqtt-port MQTT broker port, default 1883
--mqtt-username Optional MQTT username
--mqtt-password Optional MQTT password
--thetis-host IP address of the Thetis PC
--thetis-port Thetis UDP XML input port, default 9388
--base-topic Base MQTT topic, default wavenode
--sensor WaveNode sensor number
--interval UDP send interval in seconds, default 0.5
--zero-after Zero meters after N seconds with no updates
--send-on-update Also send immediately when MQTT updates arrive
--verbose Print each UDP sendFor debugging, --verbose is your friend:
python wavenode_to_thetis_lp100a.py \
--mqtt-host 192.168.1.10 \
--thetis-host 127.0.0.1 \
--sensor 1 \
--verboseThat lets you confirm that the bridge is receiving values and sending packets.
Troubleshooting
If Thetis does not show the meter data, check these first:
- Confirm Thetis Multi Meter I/O is set to UDP, In, XML.
- Confirm the port in Thetis matches the script, usually
9388. - If running the bridge on another machine, check the Windows firewall on the Thetis PC.
- Try running the bridge on the same PC as Thetis and use
127.0.0.1. - Run the script with
--verboseand confirm that UDP packets are being sent.
If MQTT connects but the values do not update:
- Confirm the MQTT broker IP and port.
- Confirm the WaveNode topics match your sensor number.
- Use an MQTT client such as MQTT Explorer to verify the actual topic names and payload values.
What This Project Is — and Is Not
This is an experiment and proof of concept.
It is not an official WaveNode product, not an official Thetis feature and not a complete replacement for native device integration. It is a practical ham-radio-style bridge: take useful data from one place, translate it into a format another program already understands and see how far we can get.
That is often how station automation evolves.
A small bridge like this can be useful because it avoids trying to change either endpoint. WaveNode can keep publishing MQTT. Thetis can keep listening for UDP/XML meter input. The bridge handles the translation in the middle.
Why This Matters
The bigger idea is that more of the modern station should be modular.
If your power meter, amplifier, antenna switch, rotator, SDR software, logging software and dashboard can all exchange data, you can build a station that is easier to monitor, easier to operate remotely, and easier to improve over time.
MQTT is excellent for station telemetry. Thetis is excellent SDR software. This project is a small attempt to connect those worlds.
Project Link
The GitHub project is here:
https://github.com/n3bkv/wavenode-thetis-bridgeIf you test it with Thetis, especially with different Thetis versions or WaveNode configurations, feedback would be helpful. This is the kind of project that will get better as more stations try it and report what works, what does not and what needs to be adjusted.
73
Comments
Post a Comment