Show Source

For fun, I run a rx-only APRS iGate at home. My setup consists of:

All told, it’s about $100 in parts (including case and SD card and all that), which doesn’t seem so bad. The rtl_fm and direwolf processes take about 3-5% of the CPU power of the board, or about 10-20% of one core; a more modest CPU could certainly function, but my brief attempt at using a 600MHz Kirkwood found that it could not keep up with the audio stream.

I don’t have a great view of the sky in my flat, but I hear the local environs reasonably well, at least, as well as a local WIDE digi.

Ultimately, though, I hope to have the RTL-SDR able to listen to several channels as well as pushing its data into direwolf for igate operation. I have not figured out how to do that yet, sadly.

RTL-SDR Calibration

I made use of https://github.com/viraptor/fm_tune and https://github.com/steve-m/kalibrate-rtl to measure the crystal error in my RTL-SDR (the -p parameter to rtl_fm, below). These tools are delightfully straightforward.

Direwolf Configuration

Since this is an RX-only IGATE and does not use a traditional radio+soundcard setup, most features are turned off. Some parameters have been [omitted]:

# No audio device
ADEVICE null null
CHANNEL 0

IGSERVER euro.aprs2.net
IGLOGIN KD8GIN [omitted]

# no incoming packets, ideally
IGFILTER

# it is not possible to explicitly state that we cannot tx, but the default
# configuration is to load ->tx_chan with -1, so by omitting igtxvia, we
# will indicate our rx-only nature
# IGTXVIA -1

# Every 120 minutes, send a position report to the IGate connection
# R& is RX-only IGATE
PBEACON EVERY=120 SENDTO=IG LAT=[omitted] LONG=[omitted] SYMBOL=R& COMPRESS=1 COMMENT=[omitted]

runit scripts

Direwolf is overseen by runit. The main run script is

#!/bin/bash

mkdir -p /var/log/direwolf
chown direwolf:direwolf /var/log/direwolf

abort() { kill -s TERM -$(jobs -p) ; }

set -m
trap abort EXIT

# Use 144.8M for UK, 144.38M for USA
chpst -u direwolf:direwolf:plugdev rtl_fm -o 4 -p 11.060 -f 144.8M |
  chpst -u direwolf:direwolf direwolf -c /etc/direwolf/sdr-igate.conf -r 24000 -D 1 -