APRSWeb connects to Direwolf (or any AGWPE-compatible server, in theory) and rendered received APRS frames onto a map in your web browser.
Unlike other APRS software, APRSWeb's target is to render into a web browser. You can think of APRSWeb as a self-hosted version of https://aprs.fi, except it can run on hardware as modest as a Raspberry Pi.
It uses Twirp to serialize those frames into JSON or protobuf objects, so it also doubles as an HTTP API for your APRS frames.
You'll need git
, golang
protoc-gen-twirp
, and protoc
per the
Twirp guide.
Once you have everything installed, run make
.
This will output aprsweb
as an ARMv6 Linux binary, and
aprsweb-native
as whatever architecture/OS you're compiling on now.
Set up Direwolf with a radio or an rtl_fm device. This exercise is left to the reader, but certainly can be run on a raspi co-locating this service.
Run ./aprsweb-native -p port -s server
substituting port and server
for the port and server of your AGWPE server.
If you set the environment variable DEBUG=1
aprsweb will log every
packet with base64
Note that we use git rev-parse HEAD --short
upon build so APRSWeb
versions are exposed in HTTP headers.
An example Kubernetes deployment is included at aprsweb.yml
for
those with letencrypt and nginx-ingress running.
I pipe the TNC test CD to Direwolf to play back synthetic packets, such as:
$ cat ~/direwolf.dummy
ADEVICE - null
CHANNEL 0
$ ffmpeg -i ~/TNC_Test_Ver-1.1.00.wav -f s16le -acodec pcm_s16le -ac 1 pipe: | direwolf -t 0 -r44100 -c ~/direwolf.dummy -
- Provide an easier way to customize:
- Map starting position
- Map zoom
- HTML template
- Provide a map provider picker for off-net usage
- Provide a filter for:
- Displaying a specific station's checkins only
- Automatically refresh the map every minute or so
Use specific icons for different station checkins(In progress)- Provide a way to swap out map API keys
- Integrate twirp / pb generation into Makefile better
- APRS test cd has some issues with Mic-E data, leading to screwed up lat/lng (specifically AC6VV-9)
- Write better docs :)