Another post in my burst of amateur radio blog posts.

To say that the documentation for APRS is not great is an understatement. What should be the best source of information, aprs.org, is just a collection of angry rants by the inventor of APRS, angrily accusing implementations and operators of using his invention the wrong way. There’s no documentation about what the right way is, just that everyone is wrong.

So here I’ll attempt to write down what it is, in one place, in an effort to both teach others, and for people who know more than me to correct me.

The best source of APRS information for me has actually been Kenwood radio manuals. See resources at the bottom.

Update: My new favourite reference: Section 9.5 of the Direwolf user guide.

APRS in short

APRS is a way to send short pieces of digital information as packets of data. The messages are:

  • Status about you
    • Your position (optionally not exact)
    • Your heading
    • Your QSY (frequency you’re tuned to if someone wants to call)
  • Weather reports
  • Status about “items” and “objects”. This is objects that are not you, and aren’t a radio. For example where the meeting point is, or a hurricane.
  • Short messages

The protocol

As an operator you don’t have to care much about what AX.25 is, or how it relates to X.25. But no explanation is complete without mentioning it.

As on operator there’s no need to read up much about this, so while I have links in this section, you don’t need to follow them.

AX.25 is a modified version of X.25 for Amateur radio operators. It can be used for “connections” just like dialing into a BBS, but APRS only uses connectionless packets. So I’ll say no more about “connections”.

Unless you’re programming your own implementation of APRS there’s no need to read the protocol specs. Suffice to say that APRS uses AX.25 connectionless packets for everything it does.

Block diagram of operating APRS

APRS diagram

Components:

  • GPS satellites send data to GPS receivers to tell them what time it is, and where they are.

  • A GPS receiver takes those signals and provides time and position coordinates

  • The APRS implementation periodically (or on demand, or using fancy algorithms to decide when) constructs position reports as AX.25 packets, and gives them to the TNC for transmission. Also the other types of packets, such as messages and object locations, are constructed here.

  • The TNC is a modem that turns packets into analog sounds. The digital side of the TNC uses an interface called KISS.

  • The radio takes the sounds and turns them into radiowaves.

  • WIDE1 digipeaters (repeaters of packets) are more local collectors of information, and repeat them so that they can be seen by a WIDE2 repeater.

  • WIDE2 digipeters are in a position to cover a wider area, but are otherwise just like other digipeaters. Exactly how much WIDE1 & WIDE2 repeat a packet is described below.

  • An IGate is a digipeater that may not actually repeat your packet over radio, but reports to some place over the Internet. Eventually somehow (I’m not clear on exactly how) it’ll be visible on aprs.fi.

The receiving path is just the revers path (except of course you don’t broadcast back to the GPS satellites).

Different radios require more or less extra hardware or software. See “How to send/receive APRS”, below.

Packet path

An APRS packet sent out has a path. For a handheld it’s usually WIDE1-1,WIDE2-1. This means that it should be repeated by both WIDE1 and WIDE2 digipeaters, and that it should only be repeated once (per type).

To demonstrate the repeat counter I’ll use WIDE1-2,WIDE2-2. If your WIDE1-2,WIDE2-2 packet is seen by a WIDE1 digipeater, it’ll repeat it as WIDE1-1,WIDE2-2. The WIDE1 counter (the second number) was decreased by one. Let’s say it’s then picked up by a WIDE2 digipeater. It’ll rebroadcast as WIDE1-1,WIDE2-1 (the WIDE2 counter having now been decremented). Another WIDE2 repeater hears it, and repeats it as (I’m not sure) either WIDE1-1,WIDE2-0, or just WIDE1-1.

NOTE: I’m not sure about exactly the content of the PATH as it propagates, but that is the general idea of how the counter works.

Actually WIDE2 digipeaters can simultaneously act as WIDE1, so if you only have WIDE1-1 in your path, and a WIDE2 digipeater hears it, it’ll still process and repeat it.

SSID

In order to support multiple radios per call sign, all sources and destinations are in the format of the callsign, a dash, and a number. This number is the SSID. E.g. I set M0THC-7 on my Kenwood D74, and M0THC-2 on my Yaesu FT3D. They don’t have to be different numbers, since when out in the field you’re probably not using two at the same time, so there will be no confusion.

Especially you won’t use two handheld radios in two different locations. If someone else is using your radio then they should program in their call sign, not yours, so you can use the same SSID.

I set different numbers because I often experiment with the two, and need to have different addresses for them, so that I can send messages between them.

The SSID is supposed to have meaning (e.g 5 is “smartphone”, 8 is “boats or maritime mobile”, 15 is “generic other”), but it’s just convention and you won’t break anything (to my knowledge) if you have to use the “wrong” SSID. There are enough “generic” SSIDs that you should be able to follow it though.

How to send/receive APRS

This depends on what hardware you have. If you have a radio with APRS and GPS support (e.g. Kenwood D74, Yaesu FT3D, AnyTone 878UV) then it can act as GPS receiver, APRS implementation, TNC, and radio all in one. Except the AnyTone can only send its position, not receive anything. See your manual for how to set that up. It’s a more or less pleasant experience, as I mentioned in my FT3D vs D74 review.

If you have a regular analog radio, such as Baofeng UV-5R, then from the diagram above it only implements the “Radio” bit. That’s fine, you don’t need more. You can run a software TNC such as Dire Wolf, which implements both APRS and the TNC.

You can set your radio to VOX, meaning it’ll start transmitting when the TNC sends audio to it. That way you don’t need to worry about pressing PTT to transmit.

Or you can use a Mobilinkd TNC, and which connects to a “computer” (your phone, which has a GPS receiver) over bluetooth, and triggers PTT “properly” instead of using VOX.

The radio then simply takes the sound it’s provided, and broadcasts. And of course it works the other way too, it receiving the data for decoding by the TNC.

APRS is done on 144.800 MHz in most of the world. The US uses 144.390MHz, and some other places use other frequencies. That’s one piece of information that aprs.org actually does provide.

APRS over JS8Call

JS8Call is a great low power slow transmission digital messaging protocol usually run on HF frequencies. JS8Call is FT8 but made for doing more than just exchanging signal reports.

Specially formatted JS8Call messages are picked up by IGates and forwarded over the Internet. That way you can be in the middle of nowhere. Literally anywhere on the planet with a decent view of the sky, and if HF propagation is good enough that day and time of day, you should be able to send your position for aprs.fi to display.

Curiously though, when I send out my location it shows up wrong on aprs.fi. Not sure why, but it’s off by a bit.

So this sends APRS messages without encapsulating APRS in AX.25. An example message sending an APRS message APRS over JS8CALL is @ALLCALL APRS::M0THC-7 :hello{01} (the number of spaces matter). See this repo for how to construct these messages)

Messages

Simple messages can be sent between APRS-capable handhelds by simply using their APRS addresses. E.g. I can send between my two handhelds by sending from M0THC-7 to M0THC-2. The message is retried a couple of times, until an acknowledgement is received.

Email

Like IGates repeating your position to the Internet, and WIDE1/WIDE2 digipeaters repeating over RF, there are special recipients that will forward your message through other mediums.

E.g. you can send short emails by sending a message to EMAIL-2. The message must begin with the destination email address, but you can teach EMAIL-2 about aliases by sending foo foo@bar.com, making foo an alias for foo@bar.com. A short alias makes you able to send slightly longer messages.

You can also receive emails (well, the subject line) this way, but only from addresses you’ve programmed in as aliases. In the example of foo above the email would be:

From: foo@bar.com
To: aprsemail2@ae5pl.net
Subject: M0THC-7:Hello this is the message

In the email body I must somewhere have exactly this:
  userid:foo:
The body of the email is not part of the message. It only needs to
contain the line above

So you can’t merely forward your emails to APRS. These are for short messages.

Sending SMS

Similarly you can send SMS via APRS. You just send a message to SMSGTE with @447xxxxxxxxx test via APRS as content.

Items and Objects

Aside from reporting your own position, you can also report the position of other things. This could be base camp (or another meetup point), or a something that moves, like a storm or a car (without a radio, since a car with a radio can broadcast its own location).

APRS is a… not great designed protocol, at least by modern standards. It has “Items” and “Objects”, but the difference between them is only their semantic meaning. They’ll show up on most software exactly the same. The only technical difference is that Objects can have timestamps associated with them, and Items can’t. Both can have a course and speed, and other data associated with them.

The specs say that Objects are for moving objects, and Items are for “things that are occasionally posted on a map”. That… doesn’t actually mean anything. Essentially the Items/Objects distinction is a layer violation.

Messaging the International Space Station

VHF/UHF doesn’t have great reach. It only works line of sight (mostly true. There’s sporadic E but it’s… sporadic. VHF/UHF gets its reach through repeaters, or for APRS that’s digipeaters. But you need line of sight to the digipeater, and a path to your recipient.

This is where satellites come in, and in particular the International Space Station (ISS).

You can bounce messages off of the ISS. It has a digipeater. It’s not on the standard APRS frequency, but on 145.825 MHz. This way you can reach really far in one hop.

Sure, terrestrial digipeaters with a correctly configured PATH can reach very far too, but bouncing on the ISS is a different level of cool.

I’ve not done this yet though.

Digital APRS

Everything described in this post is “analog APRS”. “Digital APRS” is a term for putting the data in another digital protocol (such as DMR), and sending your position that way.

Probably the JS8Call APRS above would be classified as “digital APRS”.

To learn more, here are the resources I’ve found useful