Realtime WSJT-X decode data map

Following on from my previous article on Enhancing Digital modes with Node Red I’ve now got to a point where I have realtime decode information from the WSJT-X digital application being plotted on a Node Red world map not just for CQ calls but, for stations in conversation too.

The flow has become somewhat more complex than it was originally as more and more functionality has been added. I have deliberately split out the flow process into more nodes than are really necessary so that the flow is easier to understand. Anyone from a programming background like myself will soon realise that a lot of the nodes could actually be combined into one big node however, the overall flow process wouldn’t be so easy to understand for the Node Red newcomer and would possibly put people off from trying it out.

Current WSJT-X Node Red flow

Above is a screenshot of the flow as it currently stands. It’s pretty easy to understand what is happening in the flow due to the fact that the processes are broken out into small, easy to digest blocks.

From the top down we connect to WSJT-X via UDP port 2237 and listen for the data stream. As the data is received it’s passed directly into the WSJT-X-Decode node that converts the information into a Node Red compatible format. The data is then filtered with only the information required being passed onto the next node. There are two outputs from the filter node as we require two different streams of information, namely “CQ” and “TX1” data. All the rest of the data from WSJT-X is ignored as it’s not required at this time.

The “Get freq & SNR + Others” node builds a decode message payload with all the correct data, in the right format ready to be passed on along the flow. This node also sets a number of parameters required by the map node to be able to control the display of the data.

The next node along is “Set msg.payload”, this brings together all the necessary data into a single message payload that is then worked on by all the nodes further along the flow.

The next 3 nodes perform the simple task of moving some of the data into the objects defined by the world map node, if the data isn’t moved into these specific objects the map will not plot anything.

Now we get onto the slightly more difficult bit that might put off those who aren’t from a programming background. The next 7 nodes are all javascript functions which I have created to perform tasks that cannot be done via the standard Node Red pallet.

At this point it’s worth noting that I’m not a javascript programmer, I’ve used Python, Rust, Go, C and many other languages during my 40 plus year career but, javascript has never been one of them. I’m sure any seasoned javascript programmer will most likely raise an eyebrow at my attempt at javascript programming but, you need to remember that I’m doing this in my retirement and my enthusiasm for learning yet another programming language has wained somewhat!

So, getting back to the flow, each javascript function does just one task each of which is as follows:

  • Set rx_time – Sets the time the data was received/processed
  • Remove RR73 in tx1 – Remove decodes where RR73 is in TX1 instead of a valid callsign
  • Set Dynamic Icon Colour – Sets the icon colour depending on what type of call is decoded
  • Maidenhead to LON/LAT – Converts Maidenhead locator codes into LAT/LON Coordinates
  • Calc Distance – Calculates the distance between “My QTH” and the DX station
  • Calc Bearing – Calculates the bearing/beam heading to the DX Station from “My QTH”
  • Generate Search URLs – Generates the URLs for QRZ and my own online log lookups
Editing the Calc Distance function with debug info in the far right panel

Once all the functions have run the resultant data set is forwarded on to the WSJT-X Stations Map node where it is plotted real time on a world map.

To view the map point your web browser at your PC running Node Red as follows:

http://radiopc.your.domain:1880/worldmap/

Or if you haven’t got a DNS setup at home then just use the IP Address of the PC instead:

http://192.168.100.10:1880/worldmap/

Don’t forget that for all of this to work you must configure WSJT-X to send data via UDP on port 2237 otherwise the flow won’t be able to connect and listen for the decode data.

You may have noticed that there are 3 other nodes that I haven’t mentioned yet. The two green greyed out nodes are Debug nodes that can be enabled when required to help see what is going on in the flow. These debug nodes will display data in the debug panel on the right of the flow editor screen when they are enabled, they are extremely useful for debugging!

The third is the blue My QTH node, this contains data pertaining to my QTH that is plotted on the map using an orange icon. You can easily edit this node to point to your QTH instead.

WSJT-X Node Red map showing orange icon denoting my QTH

Once the flow is deployed you’ll be surprised how quickly the data starts to be plotted on the map. Stations calling “CQ” are shown by Green icons and stations that are in a QSO with another station are denoted by the Red icons.

Each icon is clickable and will present all the information collected by WSJT-X for each station viewed.

WSJT-X Node Red World Map showing FT8 stations realtime on the 12m Band

The popup also has two clickable entries, one will take you to the qrz.com page for the station being viewed and the other will search my logs to see if I have worked that station already and if so it will open a new tab showing the information.

Node Red Function Editor showing the Generate Search URLs function

You can edit the “Generate Search URLs” node so that it points to your online logs search engine so that you can view your own log data instead of mine.

Below is a close up of the popups that are displayed when each icon on the map is clicked. The popups show the information collected from WSJT-X for each station plotted on the map.

Left – Green “CQ” Popup and Right – Red “TX1” in QSO popup

If you fancy trying this out for yourself but, don’t fancy creating all the nodes in the flow manually then I have made an export of the flow available for download. All you have to do is download the file, unzip it and then import it to Node Red and you’ll have everything built ready to play with.


I’ll probably be adding more functionality to this flow as time goes on and will post further articles about it in the future.

More soon …

JS8 Logs now online

I’ve now added my JS8/JS8CALL logs to the website for both QRO (25w Max) and QRP (<10w) QSOs.

The JS8 logs are available from the Logs menu above.

I’ve updated the adi2html program to now be capable of processing the JS8CALL log file and will be releasing it into the public domain soon.

M0AWS QRP JS8 Online Log

More soon …

All night DX fest!

Having just completed building my new radio shack I thought what better way to break it in than to do an all night radio session chasing the DX.

All nighters aren’t anything new for me, I did many an all night session low band DXing when we lived in France (F5VKM). Back then I had a massive cellar, part of which was a very well fitted out radio shack. With some very large antennas in our field out back I was truly spoilt with some great times on the 160m band in the dark winter months.

Now back in the UK and only just getting back into the hobby after a long break things are somewhat different. I now only have a typical small UK garden and only vertical antennas. Better than no antennas though!

The new radio shack is small compared to my super spacious setup in France but, it’s perfectly formed with all facilities.

For my over night radio session I decided to use my trusty Yaesu FTDX10, it has the best receiver I’ve ever used and is built to withstand the long haul operation.

Antenna wise I decided to use my 30m band EFHW vertical that can be tuned on most bands from 80m and upwards. I use a CG3000 remote auto tuner to match this antenna to the 50 ohm coax feed and it does a great job.

Being comfortably setup in the shack I tuned up on the 30m band and had a listen to see what shape the band was in.

Stations heard on 30m 10/11-07-22

Using FT8 I worked a bunch of European, Russian/Asiatic Russian stations with ease, the band was in fairly good shape albeit localised around Europe and Russia. Wanting to work stations a little further afield I decided to move up on to the higher bands. 12m is a band I really like but, always seem to miss when it’s open.

Tuning up on the 12m band using the same vertical that I was just using on the 30m band the FT8 section was packed with signals. At last, I’ve tuned up on the band when it’s open!

I suddenly noticed Bobby, VP8ADR down in the Falkland Islands in the WSJTX waterfall and gave him a call. He had a fair few people calling him and so I joined the list. In no time at all Bobby answered my call and we exchange SNR reports of -8dB both ways. This was surprising as later on one of the FT8 Facebook groups Bobby stated he was using 200w into a Hexbeam during our QSO, I was only using a measly 18w into my Vertical, I would had expected a much lower SNR report. Clearly Bobby’s setup was doing all the work!

Right after the QSO with Bobby I immediately went on to work PY7ZC, LU8YD, PY2ATI, LW6EQC, PY2EBD and PY2THO all in quick succession. With the Falklands, Brazil and Argentina in the log so soon it was looking like it was going to be a fun packed night.

Next up on the waterfall was 9Y4DG in Trinidad and Tobago and 8P6ET in Barbados, two really nice locations to get into the log and new ones on 12m for me.

Having worked all the DX I could hear on 12m and not wanting to just spend hours working endless European stations I tuned down onto the 17m band using the same vertical antenna. This antenna really does work well on bands it’s not designed for.

First 3 stations in the log on 17m were all from Japan, JR3NZC, JQ6RUP and JA5BDZ. With all 3 stations being well on the way to 6000 miles away this was a good start. The propagation strangely swung to the west and I got YV5DRN from Venezuela in the log.

Not seeing any other stations that I wanted to work I retuned back onto 30m again and found it was open to South America and the Caribbean.

In no time at all I had YV4CLF in Venezuela, HK2AQ in Colombia, NP4TX and NP3XF in Puerto Rico and PY7ZC in Brazil all in the log.

Being in complete darkness I decided to tune down on to the 60m band, one of my favourites, to see if there was much going on. Sure enough there were a few stations active on the limited space available.

First station worked was a new one for me FP/KV1J on St. Pierre and Miquelon Island just off the coast of New Foundland. I have to admit I had no idea where this little island was and confess to having to look it up on google maps.

I then went on to work a few East Coast USA stations all with good SNR reports for this time of year.

Stations heard on the 60m band 11-07-22

Having worked all the notable DX on 60m I tuned back onto the 17m which was now wide open to the world.

I stayed on this band for the rest of the night well into the morning grey line and beyond working some great DX including some new ones for me.

I worked many East Coast USA stations but, stations of note were 6Y5HN in Jamaica and AK6R, K6EU and K6EI in California on the West Coast USA. It’s rare for me to get into the West Coast USA for some reason.

UA0SDX in Irkutsk Siberia was also a nice one to get in the log. This is a town I was going to be riding my motorcycle through on my Mongolian trip before COVID19 and the war in Ukraine broke out and stopped the trip from happening.

It was good to get an Ozzy call in the log too, VK6EI on the West Coast of Australia came in at a strong -15dB SNR giving me a surprising -14dB SNR report, incredible considering I was using just 22w into my vertical antenna.

Well after sunrise the DX was still pouring in and I worked KL7TC in Fairbanks Alaska, a new one for me that made me very happy as I’d been trying to get into Alaska for some time but, never seemed to time it right. Today was my day!

Another station I was really pleased to get into the log was V31MA. I’ve tried to get a QSO with this station many times but, have never succeeded until today. I called for about 20mins and eventually got a reply putting a huge smile on my face. -16dB SNR sent and -19dB SNR received, I was happy that I finally have Belize in the log.

The last station worked was RA0FF way over on the far East Coast of Russia, the complete opposite direction to Belize. Located in Yu-Sakhalinsk right on the Russian coast opposite Japan and at 5270 miles, this is my longest distance Russian station worked so far and one I was very happy to have in the log. I always get good take off towards Russia whether it be directly east or over the North Pole to the far eastern parts of the Siberian wilderness.

I had a great night chasing the DX on the HF bands and being retired didn’t have to worry about going to work after such a long night. I highly recommend that you try an all nighter at least once in your HAM radio career, you get the opportunity to work stations that you’d normally not hear during the day time hours.

You can see the full list of stations worked on the over nighter on my WSJTX Log page.

More soon …

How to make a webpage from your WSJT-X log file

Map showing all M0AWS FT4/8 contacts

I’ve had a few messages of late asking how I generate my WSJT-X log web pages for my website. The answer is pretty simple, I use a little BASH script that I started writing some time back and have gradually improved over the last few months.

If you have a PC running Linux or a RaspberryPi running any of the normal Debian/Ubuntu/Redhat/Fedora based Linux distro’s that are available today then, this script should work just fine.

I originally wrote this program using Python but, a friend of mine bet me that I couldn’t write it in BASH and so, I took up the challenge and this is the result. It’s pretty simple and uses all the normal UNIX command line goodies like grep, sed and awk.

The script also uses WWL to calculate the distance between two Maidenhead locator grid squares and so it’s important to have it installed before running the script. (The script checks for it at runtime and will exit if it is not installed!). You can install WWL using your package manager on your Linux distro or from the command line directly. Details are in the READ-ME.txt file.

Screen grab from my M0AWS WSJT-X Log web page

It’s important that you READ the READ-ME.txt included in the zip file before trying to run any of the scripts included as it details the variables that you need to enter values for to make the script run on your PC/Server. (Example entries are in place as supplied).

The variables are mainly just paths to files on your system and whether you want distances calculated in miles or kilometres. Other than that there’s nothing else required for it to run.

I’ve also included details on how to run the script automatically from a crontab so that your webpage can be updated automatically every few minutes/hours etc.

The script also includes code to add a PNG map file into the generated webpage so that there is a graphical representation of all your QSOs. The map isn’t generated by the script (something I need to add in the coming few months) so you’ll need to generate it yourself and then add it to the website either via the crontab script included in the zip file or manually.

I use the QSOMap website to generate my map image files and then have them uploaded to my web server via the crontab script.

The script processes 100 entries per second on my web server (Headless virtual machine running Ubuntu Server 64bit Edition) and so should be pretty fast on most PCs. It will run somewhat slower on a RaspberryPi so be patient!

You can download the script and associated information using the button below.



If you do use my script please send me a link to your website so that I can take a look at your log file.

More soon …

An evening of FT8 on the 40m Band

I spent the evening/early morning trying some FT8 on the 40m band taking advantage of the grey line and night time propagation. It’s been a while since I’ve stayed up late to catch some DX on 40m and it brought back memories of the all nighters I used to do when I was on air as F5VKM in France.

The 40m band has always been one of my favourites, there’s always great DX to be had when the band is open and on the grey line the world really is your oyster.

I’ve always been a huge fan of CW on 40m, there are some great seasoned op’s on the band and it’s always a real pleasure to QSO with them on the key. This time I decided to see what could be achieved with FT8 and 22w of power from my Yaesu FTDX10, a combination that should give me global reach.

Setting up at just past 6pm on May 9th 2022 the band was already busy with European stations, lots of them! There was no room to squeeze in and call CQ, the FT8 section of the band was packed with signals filling the allocation completely with many calling over the top of each other.

I decided to take my normal stance of search and pounce to get the stations I want to work rather than just working the masses endlessly.

I initially worked a bunch of Russian stations ranging from 1200 to 2200 miles out, good distances were easily achievable even though we were still in full daylight.

My home-brew multi-band vertical antenna worked well on 40m

In amongst the throng of FT8 stations I spotted UN3P, Vladimir in Karaganda Kazakhstan, not a country I have worked a lot since getting back on air and at 3013 miles it’s a good distance to achieve on 40m whilst still in broad daylight.

I gave a call to his CQ and he came straight back with an SNR report of -20dB, I sent him a report of -12dB so there was some 8dB difference between us. Considering I was only using 22w of power in broad daylight I was happy with the report. Of course I’ve no idea how much power he was using but, my signal was 6.63mW/Mile, not the lowest I ever had but, not the biggest either.

I worked a bunch more RA9/UB9 stations in the 2000-3000 mile range and then started hearing the Australian stations on the early grey line. Initially their signals were suffering some deep QSB but, it wasn’t long until their signals were constant and stable.

All the stations that heard M0AWS 09/05/22 – 10/05/22 on 40m

Ian, VK3VDX in Victoria was the first station from Oz in the log at -19dB/-20dB, pretty even SNR reports. At 10451 miles it equates to 2.10mW/Mile.

Closely following was John, VK5PO in Mallala South Australia, much stronger signals this time at -10dB/-14dB, 2.19mW/mile over a total distance of 10028 miles.

VK5PO Mallala South Australia

As darkness replaced light the propagation swung west with east coast USA and Canadian stations dropping in to the East coast of the U.K.

John, VO1BE was the first north American station in the log with -1dB/+1dB SNR reports. To be +1dB in Canada with just 22w really is quite impressive. I’m guessing he has a very low background noise level.

I worked a bunch of East Coast USA stations and then PY2GZ popped up on the waterfall. From my QTH I have a clear view South East to South West across flat ground for miles and so it’s normally pretty easy to work stations in that zone and this evening was no different. First call was answered and -10dB/-17dB SNR reports were exchanged, 3.68mW/mile over 5965 miles.

My 14.81m tall home brew vertical works superbly on the 40m band with tuning handled by my CG3000 Remote Auto Tuner. This is actually my 30m band EFHW vertical antenna but, removing the 49:1 Unun and replacing it with the CG3000 has made this antenna much more versatile.

CG3000 Remote Auto Tuner connected to the 14.81m vertical antenna and ground system

The next station in the log was BG0BBB in Xinjiang China with -9dB/-18dB SNR reports exchanged. China is always a hard location for me to get into for some reason so, I was glad to get another Chinese HAM into the log.

BG0BBB Xinjiang China

As the propagation started to swing westerly I got 8P4JP in Bridgetown Barbados into the log. It took a few calls to get the exchange completed due to very deep QSB between us but, with some perseverance the contact was completed successfully and I had a new one in the log!

I continued to work a flurry of East Coast USA, Brazilian and Puerto Ricon stations one after the other until suddenly stations from the east started coming in again.

First from the east was Igor, 4L1FL from Tbilisi Georgia, another new one for me that somehow seems to escape me every time I come across Georgian stations on the bands.

4L1FL Tbilisi Georgia

UN7JO in Ust-Kamenogorsk Kazakhstan was loud with me at -5dB SNR although I only got -21dB SNR back, some 16dB difference across the path of 3386 Miles.

One station of particular interest was VY0MEL, Julien in Rankin Inlet, Nunavut Northern Canada. This is the most northern Canadian station I’ve worked in a long time and it was great to get him in the log. His QRZ page is worth a read, he works at a mine in Nunavut on a 14 day rotation and so has a fair bit of time for HAM radio. Using just a dipole that is strung between two shipping containers and only 60cm above the snow in the centre he was a good signal at -19dB here in the U.K, especially considering he was still in broad daylight.

VY0MEL Rankin Inlet, Nunavut Northern Canada

Needless to say I had a fun filled evening/early morning on the 40m band, once again it didn’t disappoint and I got a couple of new countries in the log. I think the next late night will have to be a CW evening on 40m to see how well I do in comparison.

The full list of stations worked over 9th-10th May 2022 using FT8 on the 40m band can be viewed in my WSJT-X log in glorious technicolour with distances and mW/mile figures for every contact.

Map showing all FT4/FT8 stations worked up to 10/05/22 all bands

More soon …

Searching the WSJT-X log whilst on air

searchwsjtxlog v0.4 showing search for partial callsign

Being a UNIX/Linux command line guy I’m not a fan of a lot of these GUI based logging programs that are full of functionality I’ll never use. I currently have RumLogNG for the MacBook Pro but, I really don’t like it. It does many things I don’t need and not the things I really need when on air.

So I decided to write a bunch of command line based programs that do exactly what I want with minimal fuss. The first of these programs was adi2html, a simple program that converts the WSJT-X ADI log file into HTML so I can easily put it on my website.

I’ve now written a new program using the same BASH shell technique to allow me to search the WSJT-X log file quickly and easily whilst on air.

searchwsjtxlog is a simple little shell script that searches for either a full or partial callsign and presents the results instantly. I use this script a lot when working FT4/8 as I can see if I’ve worked a station before and on what bands easily and quickly.

The script works on Linux and MacOS Big Sur (Not got Monterey to test but, should work fine). If you find a bug please let me know and I’ll fix it as soon as possible.

Note: Since MacOS uses such an old version of the BASH it cannot handle spaces in the path to the wsjtx_log.adi file. On MacOS you’ll need to create a softlink to the file and then put the path to the soft link into the script for it to work properly. CD into the directory where you have saved the searchwsjtxlog.sh file and then run the following command:

ln -s /Users/YOURUSERNAME/Library/Application\ Support/WSJT-X/wsjtx_log.adi ./wsjtx_log.adi

Make sure you replace YOURUSERNAME with your MacOS username. The command is all on one line and not on two lines as shown above.

You can download v0.4 of searchwsjtxlog using the link below.



More soon …

adi2html v0.6 release

Following on from the adi2html v0.5 release I’ve now added a little more code to include a map of the contacts detailed in the wsjtx_log.adi file so that there is a visual representation of the data included in the webpage. (Map must be generated externally and JPEG/GIF/PNG uploaded to website to be included in the webpage).

See my WSJT-X log here

Just to recap, adi2html generates a HTML webpage from the wsjtx_log.adi file so that the log can be presented in a palatable format on a website.

As before the code can be downloaded using the link below.

If you use my code please consider leaving the footer in place so I get some credit, thanks!

Convert your RUMLogng radio logs to HTML

I’ve started using RUMLogng for logging on my MacBook Pro as it seems to be the most common logbook to use on the Apple Mac platform. I must admit that I’m not sure if I’ll carry on using it going forward as I’m not overly enamoured by it but, for the time being it’s all I have.

To get my logs on the blog I’ve written a small BASH shell script that reads the exported ADIF file from RUMLogng and creates a log in HTML format for each different mode.

You can see the output of the BASH script by selecting a log from the Logs menu at the top of this page.

If you want to be able to add your log to your own website then I’ve made the script available for download below.

Currently I’ve only tested the script with the few different modes that I have log entries for but, it should work for all modes. If you find any issues please contact me with all the details and I’ll look into resolving any problems.

As always, if you use my code to generate webpages on your website please consider leaving the footer in place so I get some credit, thanks!

adi2html v0.5 release

Following on from my original article where I detailed the adi2html Bash script that reads in the WSJT-X log and creates an HTML version of the data so that it can be presented in a palatable format on websites (See my WSJT-X log here), I’ve now released v0.5 for public consumption.

In adi2html v0.5 I’ve added colour to the webpage that is generated to make it easier on the eyes and rewritten the function process_log() so that it uses the column name to identify each field instead of the row position.

By making this change it should cope just fine if the order of the fields is ever altered in the WSJT-X log during its development.

As before the code can be downloaded using the link below.

If you use my code please consider leaving the footer in place so I get some credit, thanks!

Create HTML webpage from wsjtx_log.adi file

I had some spare time today so I finished a small BASH program that I started writing yesterday that reads the wsjtx_log.adi file and writes the data out in HTML format so that it can be incorporated into my website (See the Logs Menu).

(Sorry the font is so small but WordPress is crap at displaying code!)

It’s a fairly simple piece of code that anyone who is into Linux and has a basic understanding of the BASH shell will easily be able to comprehend. (Yes there’s a little awk and sed in it just to add to the entertainment value!).

There are a few places where the code can be improved which I’ll address in v0.3 when I have time but, for now I’ll put it online just incase anyone is interested in using it.

If you do use the code please consider leaving the footer in place so I get some credit.

More soon …