A simple receive-only HF APRS IGate howto

There seems to be a lack of simple, up-to-date tutorials/howtos on APRS, and even less for APRS over HF.
This is my attempt to fill that gap. I'm still learning about APRS, so if there's anything wrong, please get in touch, and I'll update it.

This howto will only cover running a receive-only IGate. Once I get successful regular decodes, I might investigate what all the WIDE stuff is and add a second tutorial for digipeating.

Because I run Linux, I'm not going to use any Windows- or Mac-only software so I'm going to use Direwolf, which seems to be the "industry standard" for APRS on Linux.

If you've done APRS on VHF/UHF before, it's a slightly different beast. Those are done over FM, so being slightly off-frequency doesn't matter.
On HF, it's done via SSB, and being off frequency can mean you don't make a decode.
Also, APRS doesn't have any Forward Error Correction in it, so you have to have fairly strong clear signals to decode.
You'll often hear an APRS squawk, and nothing will be decoded.

Install direwolf

I cloned the repository from GitHub and compiled it myself.
Hamlib support is only needed for transmitting, so you can ignore that for now.
I think it was as easy as:

git clone https://github.com/wb2osz/direwolf
cd direwolf/

I think I only needed to install a single dependency - your mileage may vary

sudo apt-get install libasound2-dev

The config

Save the following config in a file

ADEVICE  plughw:2,0

MODEM 300 1600:1800 7@30 /4


#       noam.aprs2.net          - for North America
#       soam.aprs2.net          - for South America
#       euro.aprs2.net          - for Europe and Africa
#       asia.aprs2.net          - for Asia
#       aunz.aprs2.net          - for Oceania
IGSERVER euro.aprs2.net

Select the correct soundcard

I do this by running arecord -l and using the correct value from there.
If you're like me, you only have two soundcards - the normal one in the computer , and the one supplied by the USB connection to the radio , so there can't be too many options.
However, you don't want to spend days waiting for a decode only to find that you were listening to the wrong input, so it's worth getting right.
They can change too. If I start my laptop with the radio switched off or not plugged in, the laptop soundcard is 1,0. Then when I plug the radio in, it appears as 2,0.
But if I start it with the radio on, and the USB connected, the USB soundcard is 1,0, and the laptop soundcard is 2,0.
It's worth checking each time. This has caught me out before and has wasted a lot of time. There must be a way to tell Linux what order you want the soundcards in - I will investigate.

Set callsign

Replace XXXXX with your callsign at the MYCALL and IGLOGIN lines

Set the internet gateway

Select the appropriate IGSERVER from the list above.
You'll also need to generate a passcode for your login (shown as 000000 in the example config file). Search online, and you'll find a way of doing this. No-one else seems to link directly to it for some reason, so I won't either.

Tune the radio

Direwolf doesn't do any radio control, other than (optionally) PTT.
Tune radio to 14099.6, 10147.6, or 7032.6 USB as desired.

Run it!

Start it with the following command line:
direwolf -t 0 -p -B 300 -c /path/to/direwolf-igate.conf
You should see something that looks like this:

Dire Wolf version 1.5
Includes optional support for:  hamlib

Reading config file /path/to/direwolf-igate.conf
Audio device for both receive and transmit: plughw:1,0  (channel 0)
Channel 0: 300 baud, AFSK 1600 & 1800 Hz, D, 44100 sample rate / 3.
        0.0: D 1510 & 1710
        0.1: D 1540 & 1740
        0.2: D 1570 & 1770
        0.3: D 1600 & 1800
        0.4: D 1630 & 1830
        0.5: D 1660 & 1860
        0.6: D 1690 & 1890
Ready to accept AGW client application 0 on port 8000 ...
Ready to accept KISS TCP client application 0 on port 8001 ...
Virtual KISS TNC is available on /dev/pts/3
Created symlink /tmp/kisstnc -> /dev/pts/3

Now connected to IGate server euro.aprs2.net (
Check server status here

[ig] # aprsc 2.1.4-g408ed49
[ig] # logresp XXXXXX-0 verified, server T2EUSKADI

Waiting, waiting, waiting

Now you sit back, and wait for hours and hours for someone to transmit some APRS clearly enough for a decode.
If you're used to digimodes like PSK, Olivia, FT-8 or WSPR, it'll be very frustrating how many times you hear some APRS, and it doesn't decode.
A single pop/crackle and the decode fails. Because of this, short APRS messages are more likely to be picked up

Decoded APRS

If you're lucky enough to decode some APRS successfully, it's my understanding that it should be sent to the IGate server specified by IGSERVER.
It then appears on https://aprs.fi/
30m seems to have the most activity on it.

APRS clients

Xastir is an APRS client for Linux. It looks pretty ugly, and is a bit clunky, but it's free, and seems to work.
You can now run Xastir, and connect it to the running direwolf server.
To configure it to connect to Direwolf Interface -> Interface Control, Add Serial KISS TNC

Don't forget to "Start" the interface.
There other configuration options, but these should be fairly obvious

Still to find out


If this works for you, you could set up a digipeater.