Deep Dive – Node-RED QO-100 Satellite Ground Station Dashboard

Following on from my article about my QO-100 Satellite Ground Station Complete Build, this article goes into some detail on the Node-RED section of the build and how I put together my QO-100 Satellite Ground Station Dashboard web app.

The Node-RED project has grown organically as I used the QO-100 satellite over time. Initially this started out as a simple project to synchronise the transmit and receive VFO’s so that the SDR receiver always tracked the IC-705 transmitter.

Over time I added more and more functionality until the QO-100 Ground Station Dashboard became the beast it is today.

M0AWS QO-100 ground Station Control Dashboard built using Node-RED.
M0AWS QO-100 Ground Station Control Dashboard built using Node-RED.

Looking at the dashboard web app it looks relatively simple in that it reflects a lot of the functionality that the two radio devices already have in their own rights however, bringing this together is actually more complicated than it first appears.

Starting at the beginning I use FLRig to connect to the IC-705. The connection can be via USB or LAN/Wifi, it makes no difference. Node-RED gains CAT control of the IC-705 via XMLRPC on port 12345 to FLRig.

To control the SDR receiver I use GQRX SDR software and connect to it using RIGCTL on GQRX port 7356 from Node-RED. These two methods of connectivity work well and enables full control of the two radios.

M0AWS Node-RED QO-100 Ground Station Dashboard - 12/06/24
M0AWS Node-RED QO-100 Ground Station Dashboard Flow as of 12/06/24

The complete flow above looks rather daunting initially however, breaking it down into its constituent parts makes it much easier to understand.

There are two sections to the flow, the GQRX control which is the more complex of the two flows and the comparatively simple IC-705 section of the flow. These two flows could be broken down further into smaller flows and spread across multiple projects using inter-flow links however, I found it much easier from a debug point of view to have the entire flow in one Node-RED project.

Breaking down the flow further the GQRX startup section (shown below) establishes communication with the GQRX SDR software via TCP/IP and gets the initial mode and filter settings from the SDR software. This information is then used to populate the dashboard web app.

M0AWS - Node-RED QO-100 Ground Station Dashboard - GQRX Startup
M0AWS Node-RED QO-100 Ground Station Dashboard – GQRX Startup Flow

The startup triggers fire just once at initial startup of Node-RED so it’s important that the SDR device is plugged into the PC at boot time.

All the startup triggers feed information into the RIGCTL section of the GQRX flow. This section of the flow (shown below) passes all the commands onto the GQRX SDR software to control the SDR receiver.

M0AWS - QO-100 Ground Station Dashboard - GQRX RIGCTL flow
M0AWS Node-RED QO-100 Ground Station Dashboard – GQRX RIGCTL Flow

The TCP RIGCTL -> GQRX node is a standard TCP Request node that is configured to talk to the GQRX software on the defined IP Address and Port as configured in the GQRX setup. The output from this node then goes into the Filter RIGCTL Response node that processes the corresponding reply from GQRX for each message sent to it. Errors are trapped in the green Debug node and can be used for debugging.

The receive S Meter is also driven from the the output of the Filter RIGCTL Response node and passed onto the S Meter function for formatting before being passed through to the actual gauge on the dashboard.

Continuing down the left hand side of the flow we move into the section where all the GQRX controls are defined.

M0AWS - QO-100 Ground Station Dashboard - GQRX Controls
M0AWS Node-RED QO-100 Ground Station Dashboard – GQRX Controls Flow

In this section we have the VFO step buttons that move the VFO up/down in steps of 10Hz to 10Khz. Each button press generates a value that is passed onto the Set DeltaFreq change node and then on to the Calc new VFO Freq function. From here the new VFO frequency is stored and passed onto the communications channel to send the new VFO frequency to the GQRX software.

The Mode and Filter nodes are simple drop down menus with predefined values that are used to change the mode and receive filter width of the SDR receiver.

Below are the HAM band selector buttons, each of these will use a similar process as detailed above to change the VFO frequency to a preset value on each of the HAM HF Bands.

The QO-100 button puts the transmit and receive VFO’s into synchro-mode so that the receive VFO follows the transmit VFO. It also sets the correct frequency in the 739Mhz band for the downlink from the LNB in GQRX SDR software and sets the IC-705 to the correct frequency in the 2m VHF HAM band to drive the 2.4Ghz up-converter.

The Split button allows the receive VFO to be moved away from the transmit VFO for split operation when in QO-100 mode. This allows for the receive VFO to be moved away so that you can RIT into slightly off frequency stations or to work split when working DXpedition stations.

The bottom two Memory buttons allow you to store the current receive frequency into a memory for later recall.

At the top right of this section of the flow there is a Display Band Plan Info function, this displays the band plan information for the QO-100 satellite in a small display field on the Dashboard as you tune across the transponder. Currently it only displays information for the satellite, at some point in the future I will add the necessary code to display band plan information for the HF bands too.

The final section of the GQRX flow (shown below) sets the initial button colours and starts the Powermate USB VFO knob flow. I’ve already written a detailed article on how this works here but, for completeness it is triggered a few seconds after startup (to allow the USB device to be found) and then starts the BASH script that is used to communicate with the USB device. The output of this is processed and passed back into the VFO control part of the flow so that the receive VFO can be manually altered when in split mode or in non-QO-100 mode.

M0AWS - QO-100 Ground Station Dashboard - Powermate VFO section
M0AWS Node-RED QO-100 Ground Station Dashboard – Powermate VFO Flow

The bottom flows in the image above set some flow variables that are used throughout the flow and then calculates and sets the RIT value on the dashboard display.

The final section of the flow is the IC-705 control flow. This is a relatively simple flow that is used to both send and receive data to/from the IC-705, process it and pass it on to the other parts of the flow as required.

M0AWS - QO-100 Ground Station Dashboard - IC-705 control flow
M0AWS Node-RED QO-100 Ground Station Dashboard – IC-705 Control Flow

The IC-705 flow is started via the timestamp trigger at the top left. This node is nothing more than a trigger that fires every 0.5 seconds so that the dashboard display is updated in near realtime. The flow is pretty self explanatory, in that it collects the current frequency, transmit power, SWR reading, PTT on/off status and S Meter reading each time it is triggered. This information is then processed and used to keep the dashboard display up to date and to provide VFO tracking information to the GQRX receive flow.

On the left are the buttons to change band on the IC-705 along with a button to tune to the VOLEMT on the 60m band. Once again there two memory buttons to save and recall the IC-705 VFO frequency.

The Startup PTT Colour trigger node sets the PTT button to green on startup. The PTT button changes to red during transmit and is controlled via the Toggle PTT function.

At the very bottom of the flow is the set transverter IF Freq function, this sets the IC-705 to a preselected frequency in the 2m HAM band when the dashboard is switched into QO-100 mode by pressing the QO-100 button.

On the right of the flow there is a standard file write node that writes the 2.4Ghz QO-100 uplink frequency each time it changes into a file that is used by my own logging software to add the uplink frequency into my log entries automatically. (Yes I wrote my own logging software!)

The RX Audio Mute Control filter node is used to reduce the receive volume during transmit when in QO-100 full duplex mode otherwise, the operator can get tongue tied hearing their own voice 250ms after they’ve spoken coming back from the satellite. This uses the pulse audio system found on the Linux platform. The audio is reduced to a level whereby it makes it much easier to talk but, you can still hear enough of your audio to ensure that you have a good, clean signal on the satellite.

As I said at the beginning of this article, this flow has grown organically over the last 12 months and has been a fun project to put together. I’ve had many people ask me how I have created the dashboard and whether they could do the same for their ground station. The simple answer is yes, you can use this flow with any kind of radio as long as it has the ability to be controlled via CAT/USB or TCP/IP using XMLRPC or RIGCTL.

To this end I include below an export of the complete flow that can be imported into your own Node-RED flow editor. You may need to make changes to it for it to work with your radio/SDR but, it shouldn’t take too much to complete. If like me you are using an IC-705 and any kind of SDR controlled by GQRX SDR software then it’s ready to go without any changes at all.


More soon …

Update to my NodeRed QO-100 Dashboard

Ever since my QO-100 ground station has been operational I’ve been using my NodeRed QO-100 Dashboard to control my IC-705 and GQRX SDR software to drive my NooElec SmartSDR receiver. This gives me a full duplex ground station with both transmit and receive VFO’s synchronised.

This solution has worked incredibly well from the outset and over time I’ve added extra functionality that I’ve found to be useful to enhance the overall setup.

The latest addition to the ground station solution is a Sennheiser Headset that I picked up for just £56 on Amazon (Much cheaper than the Heil equivalents at the HAM stores!) and have found it to be excellent. The audio quality from both the mic and the headphones is extremely good whilst being light and comfortable to wear for extended periods.

M0AWS - Sennheiser SC 165
M0AWS – Sennheiser SC 165 Headset

To incorporate this into the ground station the headset is connected to my Kubuntu PC and the audio chain to the IC-705 is sent wirelessly using the latest version of WFView. This works extremely well. The receive audio comes directly from the GQRX SDR software to the headphones so that I have a full duplex headset combination.

Audio routing is done via pulse audio on the Kubuntu PC and is very easy to setup.

Since I no longer have a mic connected to the IC-705 directly I found that I needed a way to operate the PTT wirelessly and this is where the latest addition to my NodeRed QO-100 Dashboard comes in.

Adding a little functionality to the NodeRed flow I was able to create a button that toggles the IC-705 PTT state on and off giving me the ability to easily switch between receive and transmit using a simple XMLRPC node without the need for a physical PTT button.

M0AWS - Additional NodeRed PTT Flow
M0AWS – Additional NodeRed PTT Flow

The PTT state and PTT button colour change is handled by the Toggle PTT function node shown in the above flow. The code to do this is relatively simple as shown below.

M0AWS - NodeRed Toggle PTT Function to change button colour
M0AWS – NodeRed Toggle PTT Function to change button colour

The entire QO-100 Dashboard flow has grown somewhat from it’s initial conception but, it provides all the functionality that I require to operate a full duplex station on the QO-100 satellite.

M0AWS - NodeRed QO-100 Dashboard complete flow
M0AWS – NodeRed QO-100 Dashboard complete flow

This simple but, effective PTT solution works great and leaves me hands free whilst talking on the satellite or the HF bands when using the IC-705. This also means that when using my IC-705 it only requires the coax to be connected, everything else is done via Wifi keeping things nice and tidy in the radio shack.

M0AWS - Updated NodeRed QO-100 Dashboard with PTT button
M0AWS – Updated NodeRed QO-100 Dashboard with PTT button

The image above shows the QO-100 ground station in receive cycle with the RX/TX VFO’s in split mode as the DX station was slightly off frequency to me. The PTT button goes red when in TX mode just like the split button shown above for visual reference.

As you can probably tell, I’m a huge fan of NodeRed and have put together quite a few projects using it, including my HF Bands Live Monitoring web page.

More soon …

Stray capacitance effects on SWR at 868Mhz

Following on from my last article on improving the Heltec ESP32 v3 antennas I found during the installation of the 90 degree SMA connector that the device was very sensitive to stray capacitance from things around it. After reconnecting my VNA I found the SWR curve would change substantially depending on what the device was near and so I set about rectifying this.

I decided to remove all the insulation from the single radial inside the unit and then added two more radials to increase the ground for the antenna to tune against. I then removed the N type plug with the antenna connected to it and made a new antenna from a piece of 1.5mm solid core insulated mains wire connected directly to the N type socket, without using an N type plug. Tuning to resonance was much easier than before and I soon had the SWR down to 1.2:1. Moving the device around and placing near to other objects the SWR curve was now much more stable than before with only very slight changes in curve shape.

M0AWS Updated 868Mhz Antenna
M0AWS Updated 868Mhz Antenna

Making this change to the 868Mhz antenna has shown an improvement in signal strength from my node-1 device of almost +0.5dB, every dB counts when you only have 100mW to play with!

The Bluetooth antenna update has made a massive improvement to the usability of the device via the iOS Meshtastic app. Being able to have a reliable, solid connection from anywhere in the house is great and I no longer lose messages because I’ve strayed outside the range of the Bluetooth connection.

I now have 2 new Heltec ESP32 v3 devices on the way to me and will be getting those configured and operational outside with external antennas in the hope of hearing some nodes locally to me.

More soon …

QO-100 TX/RX Dashboard

I’ve now completed the GQRX Receive and Icom IC-705 Transmit dashboard in Node Red. It was a fun project to put together and needed some javascript coding to get the functionality I wanted but, I got there in the end.

M0AWS QO-100 GQRX/IC-705 control dashboard

The dashboard looks fairly simple but, there is a lot behind the scenes to get it to this stage.

On the left is the Icom IC-705 transmit control panel. It shows the transmit frequency, power output and SWR reading. The SWR is so that I can check that the input into the 2.4Ghz transverter doesn’t have any connectivity issues. The “S0” will actually display the S Meter reading when the IC-705 is being used as a normal transceiver rather than being in QO-100 Duplex mode as shown above where the GQRX app and Funcube Dongle SDR are being used as the receiver.

The GQRX side of the dashboard shows the downlink frequency which tracks the uplink frequency of the VFO on the IC-705. This will ensure that the Funcube Dongle Pro+ SDR receiver will always be on the correct downlink frequency relative to the uplink frequency, thus I should always be able to hear my own signal coming from the QO-100 satellite.

Once taken out of QO-100 mode the two radios can be used independently on any of the HAM bands and can be switched using the buttons on the dashboard.

I also coded in a simple memory facility where a frequency can be stored in Node Red and recalled later on both the transmit and receive sides.

Looking at the dashboard it all looks simple and straight forward however, if you look at the Node Red flow it becomes obvious that this isn’t the case.

QO-100 Dashboard Flow in the Node Red Editor (Click for larger image)

There’s a lot to the flow to get the information from the receiver and transmitter so that it can be presented on the dashboard. There’s also some code to convert between Rigctl protocol used by the GQRX application and XMLRPC used by the IC-705 via FLRig and WFview. I had to also code around a bug in the Node Red XMLRPC node whereby you have to add 0.1 onto the VFO frequency for it to be passed onto the radio otherwise the information is never sent. This was a real pain of a bug to find but, with a little experimentation I found the problem and managed to code around it. The strange thing about this is that the 0.1 added onto the frequency isn’t actually passed onto the radio via the XMLRPC node, it just has to have that on input otherwise it doesn’t work at all. A very strange bug and hopefully one that will be fixed by the node developer in future releases.

All that is left to do now is add the temperature sensors dashboard to complete the dashboard. These haven’t arrived yet and so I’ve not been able to create the necessary flow to collect the data from them.

Hopefully this coming week the weather will improve and I’ll start getting the dish antenna up and the get the receive side working.

UPDATE: Further development of my QO-100 Dashboard has taken place, you can read all about it here.

More soon …

How low can you go?

Now that I’ve got my new radio shack up and running I decided to give my Icom IC-705 QRP rig an outing and see if I could work a distance of 2000 miles with 1w output.

This is something I’ve been wanting to do for a while but, only being able to sit at the picnic table in the garden or in the summer wasn’t particularly conducive to a long stint on the radio.

Icom IC-705 wirelessly connected to my MacBook Pro

For this challenge I decided to use FT4 or FT8, whichever was active on the bands. This is a great mode for QRP operations and can get a tiny signal through when other more traditional modes fail.

I used both my EFHW vertical for 20m/10m and my EFHW vertical for 30m that can also be tuned on most of the other HF bands too. This gave me most of the HF bands for the challenge.

Initially I worked a lot of stations in the 600-700 mile range, conditions weren’t brilliant and there was a lot of deep QSB.

My first notable distance QSO was with YO4DG near Mangalia Romania at 1383 miles, this equates to 0.72mW/Mile, my lowest mW/Mile achievement up until this point.

Not long afterwards I saw SV8DCY on the WSJTX waterfall, I wasn’t sure if he’d hear me or not but, I gave a call. To my surprise he came back and became the longest distance QSO for a short time. At 1485 Miles to Kalloni Lesvos Island, Greece this equates to a new low of 0.67mW/Mile.

I then went on to work a bunch of stations in the 1000 miles or less range for a while as conditions on the bands were up and down. It’s amazing how many times I got an answer from a station only for them to disappear completely before the QSO was completed.

The next contact of note was with CU3HN in the Azores, 1713 Miles at 0.58mW/Mile, a new lowest mW/Mile record set. it’s amazing how far you can get a signal with such a tiny amount of power.

RV6F in the Stavropol region of Russia was the next big mile marker, 1932 miles at 0.51mW/Mile. It took a number of attempts to get the QSO to complete as we kept losing each other due to the deep QSB that was between us on the 20m band but, with a little patience and persaverance we eventually got the QSO to complete and it was in the log.

At this point I decided to switch over to the 10m band to see if it had opened up to more than just Europe. When I checked earlier there were only European stations being heard, most being well under 1000 miles. Sure enough the band had indeed opened up and I was hearing stations out to the east that were in excess of 2000 miles.

PSKReporter map showing signals heard on the 10m band

After tuning up and listening for a bit my first call was to RL9F in Perm Russia. This was the one that I’d been looking for, 2084 miles at 0.47mW/Mile this was the one that could complete the challenge.

After a few failed attempts due to deep QSB we eventually got a complete QSO in the log finishing the challenge.

2000 miles using 1w is a lot of fun, frustrating at times when you’re being heard by stations on the east coast USA but, none are answering your reply to their CQ calls.

PSKReporter has proven invaluable, being able to see who can hear you makes a big difference when trying to eek out the last mile when using next to no power.

In total 31 stations were worked over a 9 hour period, not huge numbers but, for many an M0AWS call sign isn’t exotic enough to answer and so many of my calls to stations were ignored. Sad really.

You can view all the log entries for the 2000 Mile 1 Watt challenge on my WSJTX Log.

So, what next? Well I guess it has to be 3000 miles or more using just 1w from my trusty Icom IC-705.

More soon …

IC-705 – Going wireless with Apple Mac computers

Since getting my Icom IC-705 I’ve had problems with computer noise causing interference when connected via USB. I solved the problem mostly by winding both the USB and coax cables around 240-31 ferrite toroids. This resolved the problem nicely on all HF bands except 10m. With further investigation I realised that the 240-31 ferrite toroid doesn’t provide much choking resistance at 28mhz and so a 240-43 would be better for the higher bands. This would mean I’d need a longer USB cable and coax to the AH-705 so that there was enough cable to wind around two ferrite toroids to cover all the HF bands.

Whilst this will almost certainly provide a complete solution to the problem there is of course another way around this issue. The IC-705 is a rare beast in that it has wifi capability built in. The wifi on the IC-705 is capable of operating in one of two different modes, Access Point (AP) and Station, a host on an existing wifi network.

Since I connected my IC-705 to my in-shack wifi I am using the radio in station mode for connectivity via wifi. By connecting it this way my MacBook Pro will also have access to the internet at the same time as connecting to the radio giving me the best of both worlds.

You can of course put the radio into AP mode and connect your computer directly to it via wifi however, you won’t have any internet access from the computer as it will be connected directly to the radio. This is how it will be used when in the field for portable operations unless you have a portable 3/4/5g wifi router.

Getting the radio connected to my shack wifi was easy, just go into the IC-705 menus, switch the WLAN on, pick the SSID of my wifi router and enter the password, the radio connects immediately. You will also need to switch on the network control option and also set up a user and password that is used when connecting to the radio from your computer. Refer to the IC-705 manual on how to do this if you haven’t done it already.

To be able to use the radio wirelessly from any Apple Mac computer you will need 2 applications, WFview and Blackhole. Both of these applications are Opensource Software, I’m a huge fan of Opensource Software and have over the years been involved in a number of opensource projects.

I’m fully aware that there is an application called SDR Control available on the Apple App Store for around £90.00 that can be used instead to connect to the IC-705 wirelessly however, I prefer to use Opensource software where possible.

Before proceeding with the instructions below make sure you have an up to date backup of your system. This installation and configuration shouldn’t cause any issues at all, it worked fine on my MacBook Pro but, it’s always best to backup before you install more complex software like this.

First you need to download WFView from the Download page, make sure to download the MacOS Universal package which was v1.1 at the time writing this article. Do **not** install WFView yet, the sequence of installation is important!

WFView Download page showing the MacOS (Universal) Package v1.1

Next download the Blackhole Virtual Audio Cable application from the download page. You will need to enter an email address and your name to be able to download the application. It’s not clear how much email/spam will be sent to you but, you will need to get at least one email to obtain the download link with the authorisation code in it.

Once you’ve entered the information and submitted it you will get an email with a URL enclosed, click the URL and goto the download page. On the page there are 3 options available for download, select the “Blackhole 2 Ch” option only. At the time of writing this v0.2.10 was the current version available.

Blackhole Download page showing the 3 options available

Once downloaded you need to install the Blackhole application first as it will create the necessary virtual audio cable for WFView to use to provide sound to WSJT-X and other digital mode applications. Installation is simple and follows the normal MacOS installation process. Double click the installation package and follow the prompts accordingly.

Once installed reboot your Apple computer to make sure it starts up OK with the new kernel module installed. When your system comes back up, login and open the “Audio Midi Setup” application. (The Midi app is in Applications >> Utilities)

Once the application opens you should see that you have a new audio device called “Blackhole 2ch”. On both the Input and Output tabs set the format to 48,000Hz. This setting will get the best results when using applications like WSJT-X for FT4/8 digital modes.

Apple Audio Midi Setup showing 48,000Hz selected

Leave everything else as default setting in the Audio Midi App, nothing else needs changing. Leave the Master volume at the default max as levels are controlled from the other apps.

Once you’ve set the 48,000Hz on the two tabs quit the audio midi app as it’s no longer required.

Next you need to copy the WFView app that you downloaded into the Applications folder on your Mac. Once in the applications folder you can create a shortcut to it on the dock by dragging and dropping the app icon onto your dock bar.

Next goto your IC-705 and go into the WLAN settings and make a note of the IP Address assigned to the radio from your wifi router. You will need this IP Address later.

At this point you are half way to having wireless control of your IC-705.

Start the WFView application and goto the settings tab.

The following settings need to be made:

1: Set Data Mod Input to LAN

2: Click the Connect Over LAN radio button.

3:Enter the IP Address from your IC-705 into the Radio IP Address field.

4: Make sure Radio Control Port is set to 50001

5: Enter the Username you configured on your IC-705 into the Username field

6: Enter the Password you configured on your IC-705 into the Password Field

7: Set Sample Rate to 48000

8: Set Audio Output and Input fields to BlackHole 2ch

9: Select the first option available in the Virtual Serial Port field. This should be as shown below:

/Users/username/Library/Containers/org.wfview.wfview/Data/Downloads/rig-pty1

Note: Replace username with your login username.

Leave all other settings as default and click Save Settings and then Exit Program.

You must exit the application in order to restart it with all the new settings.

WFView Settings tab showing all the necessary settings whilst connected to the radio

Start the WFView application again and goto the Settings tab. Click on the Connect Button.

Once it has connected to the radio you will see the RX Latency details etc on the bottom right of the window. Click on the View tab and you should now have an active waterfall.

At this point you have full control of your IC-705 wirelessly. Have a play with the application and get familiar with it.

Fully operational WFView connected to my IC-705 receiving FT8 on 10m

Once I had WFView operational I set about getting WSJT-X connected to the radio wirelessly. This is actually really simple to do and just needs a couple of changes to the settings to make it work.

Start up the WSJT-X application and goto the Radio Settings tab. On this page you need to set the radio to IC-705, serial port to that shown below (Also shown in point 9 in the WFView section above) and Baud Rate to 38400.

/Users/username/Library/Containers/org.wfview.wfview/Data/Downloads/rig-pty1

Note: Replace username with your login username.

WSJT-X Settings showing Serial Port and Baud Rate

Next select the WSJT-X Audio Settings tab and set the soundcard Input/Output fields to Blackhole 2ch. Set both Input and Output to Mono as shown below.

WSJT-X Audio settings

Click OK and return to the WSJT-X main screen. You should now be fully operational for WSJT-X digital modes.

WSJT-X transmitting through WFView to the IC-705

Once I’d made a few contacts with WSJT-X in FT8 mode I went on to try and get FLDigi working with WFView as well.

Unfortunately at the moment I cannot get CAT control working in either FLDigi or FLRig, neither will accept the /dev/ttys000 as the serial device however, I was able to get the audio working into FLDigi and even decoded some morse with it. I need to do little more work to fathom out why the CAT control doesn’t work in these two applications. I’m sure there is a way to resolve this but, I just need to put in a little more time to find the solution.

FLDigi decoding Morse code via WFView

UPDATE: There was some concern in one of the IC-705 Facebook groups that Blackhole wouldn’t work after a MacOS update. I’ve just upgraded my Macbook Pro to MacOS 11.6.6 and BlackHole is still fully functional afterwards. The MacOS update has no effect on the BlackHole service whatsoever. So you can rest easy!

More soon …