100 Countries in 2 weeks with 10 Watt

Posted by Fred C (W6BSD) on Mar 23 2023

FT8 Commander

Because this might be a controversial subject for some, please read the note below before reading the rest of the article.
For countries outside of the United States of America, consult your local rules.

FCC Part 97 about station control.

ยง97.109 Station control.

(d) When a station is being automatically controlled, the control operator need not be at the control point. Only stations specifically designated elsewhere in this part may be automatically controlled. Automatic control must cease upon notification by a Regional Director that the station is transmitting improperly or causing harmful interference to other stations. Automatic control must not be resumed without prior approval of the Regional Director.

WSJT-X is a popular software ham radio operators use to communicate using digital modes such as FT8, JT65, and FT4. With the automation of WSJT-X, operators can now set up the software to operate independently, with no need for manual intervention. With automation, the operator can program goals such as "contact" or "don't contact" stations from a specific continent, country, or grid square. The software can monitors the bands 24/7. When the DX station calls, the software tries to reach that rare station. The operator does not have to be near the radio for the contact to be made.

WSJT-X already runs most of the exchange automatically. Human intervention is necessary to select who to call from the list of stations calling CQ and click on the OK button to log the contact once the exchange is done. These two tasks could easily and more efficiently be done by software.

I wrote a software called FT8 Commander to control WSJT-X and manage the entire calling process. The software listens for any stations calling CQ and automatically calls back the station depending on the criterium defined by the user.

Typical exchange

In the following log, we see a typical FT8 Commander exchange. The software replies to the calling station DU4DXT.

The transmission is stopped when DU4DXT replies to JK1OUD. Once the exchange with JK1OUD is over, the software calls DU4DXT again, then stops because DU4DXT is responding to YB7DBP. This happened several times until DU4DXT finally takes our call, and the QSO is logged.

07:21:59 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -11, Distance: 11126
07:22:59 - INFO[127] - Stop Transmit: DU4DXT Replying to JK1OUD
07:26:29 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -7, Distance: 11126
07:26:56 - INFO[127] - Stop Transmit: DU4DXT Replying to YB7DBP
07:28:59 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -4, Distance: 11126
07:29:56 - INFO[127] - Stop Transmit: DU4DXT Replying to N5BGQ
07:32:59 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -4, Distance: 11126
07:33:26 - INFO[127] - Stop Transmit: DU4DXT Replying to AF5CC
07:35:59 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -7, Distance: 11126
07:36:26 - INFO[127] - Stop Transmit: DU4DXT Replying to KE6MYA
07:38:29 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -5, Distance: 11126
07:38:56 - INFO[127] - Stop Transmit: DU4DXT Replying to WB6RHC
07:42:29 - INFO[154] - Calling: DU4DXT, From: Philippines, SNR: -1, Distance: 11126
07:44:00 - INFO[116] - Logged call: DU4DXT, Grid: PK23, Mode: FT8

Plugins

An operation goal is defined by a series of plugins. For example, I have a plugin that calls back any station calling CQ. When several stations call simultaneously, the station with the strongest signal is selected. This increases the chances of making contact. With this plugin, a significant amount of random contacts can be made quickly.

I have written other plugins to contact specific locations such as continent, country, CQ zone, ITU zone, or Maidenhead grid square.

To ensure your exchanges can be confirmed, the user can ask the software to only reply to stations with a LOTW account and ignore everyone else.

The plugins are written in Python, and it is easy for anyone to write their own plugin.

The challenge: 100 countries with 10 watts

I wanted to see how long it would take to contact 100 countries using automated software and only 10 watts. For that challenge, I wrote a plugin that replies to any call from any country I haven't worked at least 4 times before. 4 is to increase the chances of having a valid confirmation.

I started my challenge on March 6, 2023, when the 10-meter band was wide open. Unfortunately, the next day the band began to close, and with only 10 watts, contacting faraway countries became harder. Also, to make things more difficult, during those 2 weeks, I had to stop transmitting because a storm hit California and caused a 2 days power outage.

The software worked 2/3 of the 100 countries in the first couple of days. Then it became a game of patience. For the rest of the 2 weeks, the software monitored the band listening for any call from a country that wasn't already in the log. Two weeks later, I had contacted 105 countries.

The only thing that wasn't automatic was the band selection. Every once in a while, I looked at the following graphs to see what band was active. Depending on the activity, I manually changed bands. It would be easy to add in the software the capability to automatically select the band based on activity.

Band Activity shows an opening towards EU on 15 meters
Band Activity shows openings on several bands towards Europe
Band Activity shows the bulk of contacts are on 10 meters between NA and EU
Band Activity shows the bulk of contacts are on 10 meters between North America and Europe

The following video shows the evolution of the band in North America over the last 5 days of the challenge. Other videos are available on bsdworld.org as well as band activity graphs.

The software

The software's source code that I wrote can be found on my github account. It comes as is, with no warranty and no support. It is intended for experimenters who know their way around computers. I wrote it on MacOS, and I have also tested it on Linux.

If you use this code, especially when developing new plugins or fixing bugs, send me an email or a note. I am interested in seeing what kind of plugin ideas brilliant people have.

Conclusion

FT8 automation has become increasingly popular among amateur radio operators. Some pieces of logging software, such as, RUMlogNG, DXLab Suite and WSJT-Z, are already capable of automatically calling stations. WSJT-X has a UDP API that enables automating many of the tasks involved in operating FT8. The automation of FT8 has also sparked debates amongst operators. Some argue that automation takes away from the traditional skills of radio operation.

The ARRL prohibits automated contacts in general and for DXCC awards. I think it is a lost battle. The ARRL has no way to verify end enforce that rule. I already know several hams who used software automation to work the few countries they were missing to claim their DXCC award.

I like FT8. It is a highly efficient mode of communication that uses advanced DSP1 techniques to extract signals well below the noise floor. It is a great mode to make impossible contacts, such as EME for example. It is also great for propagation analysis or antenna testing. I also don't think FT8 should be allowed for contests or Field Day. Operating FT8 in these conditions requires no skills, only more power and bigger antennas. A basic piece of software could work 100 countries in 2 weeks with 10 watts and a vertical antenna. I could have done it in one week with a better antenna and more power.

I dream of going on a DXpedition and having my computer working hundreds of stations worldwide while sipping Margaritas next to the swimming pool.


Miscellaneous tools for MacOS users

Logging

If you are using MacOS, the following AppleScript automatically clicks OK as soon as the WSJT-X Logging windows appear.

Both scripts below will stop running if the screen locks

#
# Click the OK button on the WSJT-X Logging window
# Works with WSJT-X 2.6.1
#
tell application "wsjtx" to activate
say "w s j t x is active"

tell application "System Events"
    repeat
        tell application process "WSJT-X"
            set winList to every window
        end tell
        repeat with win in winList
            tell application "System Events"
                get entire contents of win
            end tell
            set theTitle to name of win
            if theTitle contains "Log QSO" then
                tell application process "WSJT-X"
                    click button "Ok" of group 1 of win
                end tell
                say "Contact Logged"
            end if
        end repeat
        delay 2
    end repeat
end tell

Calling CQ

The following AppleScript calls CQ and logs any contact.
Courtesy of my friend JC (W6IPA)

The original version can be found on gist.

# Set Alternate F1-F6 bindings
# TX Watchdogs 3 Min
# Hold TX Freq
# CQ:Max Dist
# tested on WSJT v2.6.1

set bundleId to "org.k1jt.wsjtx"
tell application id bundleId to activate
set txPause to false
set txWD to false
set lastLog to ""

tell application "System Events"
    repeat
        tell application process "WSJT-X"
            set winList to every window
            set frontmost to true
        end tell
        repeat with win in winList
            set theTitle to name of win
            if theTitle contains "Log QSO" then
                tell application process "WSJT-X"
                    set call to value of text field "Call" of win
                    if call is not lastLog then
                        click button "Ok" of group 1 of win
                        set lastLog to call
                    else
                        click button "Cancel" of group 1 of win
                    end if
                end tell
                say "Contact Logged"
                set txPause to true
            else if theTitle starts with "WSJT-X" and theTitle does not contain "Wide Graph" then
                tell application process "WSJT-X"
                    perform action "AXRaise" of win
                    set chkBox to value of checkbox "Enable Tx" of win as boolean
                    if value of item 1 of static text of static text 8 of win starts with "Runaway" then
                        set txWD to true
                    else
                        set txWD to false
                    end if
                end tell

                if not chkBox then
                    if txPause and not txWD then delay 20

                    tell application process "WSJT-X"
                        click button "Set Rx frequency to Tx Frequency" of group 1 of win
                    end tell

                    say "Calling CQ"
                    tell application "System Events" to key code 122
                end if
            end if
            delay 1
        end repeat
        delay 5
    end repeat
end tell

  1. Digital Signal Processing 


 FT8      Automation      WSJT-X      Ham Radio      AppleScript