Connect a radio: quick starts¶
This page takes one radio link at a time from nothing to packets on the map. It is for the sysop of an instance; each section ends with the log line that shows the link works.
Before you start¶
- An ingest box. The Self-host stack runs one already; a separate box next to the radio is set up in Set up an ingest box.
-
Where the settings go. In the Docker stack,
deploy/.env; from a checkout,.envat the top of the repository. After each change, restart the ingest. Indeploy/: -
Where the log is. In
deploy/,docker compose logs -f ingest(add-f compose.ingest-only.ymlon an ingest box on its own). Each section below names the line to look for. - Inside a container,
localhostis the container. Point a setting at the host's LAN address, for exampleKISS_TNC_HOST=192.168.1.20. Links that receive UDP need a published port: From a container.
Every link also counts its packets: https://<instance>/api/ports lists packets per port over the last 24
hours, and the map shows the stations under Search & filter → Live layers → Live stations. Every
setting is in RF ingest & transports. To connect a radio from a browser instead, see
Your radio in the browser.
APRS-IS (internet feed)¶
Receive APRS traffic for your area from the internet, with no radio. Everything from APRS-IS is Tier C.
-
Set your callsign and an area filter:
-1is a receive-only login, which is all the feed needs.r/lat/lon/kmis a circle around a point; any APRS-IS server filter works (b/,p/,t/, …). -
Restart the ingest. The log shows
[aprs-is] connected + filter sent. - The
aprs-isport counts packets, and stations appear on the map.
KISS TNC with Direwolf (soundcard or hardware TNC)¶
Direwolf turns a soundcard and a radio into a TNC and offers it as KISS over TCP. A hardware TNC with a KISS-over-TCP server works the same way.
-
Write a minimal
direwolf.conf(1200 baud APRS):ADEVICEis your USB soundcard (list them witharecord -l).PTTis needed only to transmit; with a serial interface it looks likePTT /dev/ttyUSB0 RTS. -
Start Direwolf and check in its own window that it decodes packets.
-
Point the ingest at it:
-
Restart the ingest. The log shows
[kiss] connected 127.0.0.1:8001. - The
kiss-tncport counts packets.
Without Direwolf, the box can be the modem itself: Soundcard port (no TNC).
Count it for find verification (optional). For a TNC you operate, add RF_SITE_CALL=OE8APR-10. The log
then shows [kiss] enabled — direct hearings name site OE8APR-10. What the receiving site does, and the
gateway setting that attests it, are in Receiving site and Tier A.
Receiving never transmits. The ingest transmits over KISS only when you turn on a digipeater, an IGate, the node or BBS forwarding.
Soundcard port (no TNC)¶
The ingest box can be the modem itself: a USB sound card or a sound HAT between the box and the radio, with no
Direwolf and no TNC. It needs ALSA's arecord and aplay (the Docker image has them).
- Find the card with
arecord -l:card 1: … device 0isplughw:1,0. -
Set it:
-
In Docker, pass the sound devices (and the PTT device, to transmit) into the ingest container (Turn the port on), then restart the ingest.
The log shows [soundcard:1] capturing plughw:1,0 at 48000 Hz; packets count on the soundcard port.
Receiving never transmits. To transmit, choose how the radio is keyed (CM108 GPIO, Linux GPIO, serial RTS or
DTR, CAT, rigctld or VOX) and set SOUNDCARD_TX=1 and SOUNDCARD_PTT: Soundcard port.
RF_SITE_CALL works here as for KISS.
AGWPE: Direwolf, SoundModem, UZ7HO¶
Programs that offer the AGW Packet Engine interface (port 8000) can feed the ingest instead of KISS:
The log shows [agwpe] connected 127.0.0.1:8000; packets count on the agwpe port. This link only
receives. RF_SITE_CALL works here as for KISS.
WA8DED hostmode (TheFirmware TNCs, TFPCX)¶
HOSTMODE_MYCALL is the callsign the TNC is set to. The log shows [hostmode] connected 127.0.0.1:3694;
packets count on the hostmode port. This link only receives. RF_SITE_CALL works here as for KISS.
Your own IGate¶
An IGate passes what your radio hears to APRS-IS and, when you allow it to transmit, APRS-IS messages for
nearby stations back to RF. It needs a working KISS TNC or
soundcard port; passing messages to RF also needs PTT and IGATE_TX=1. An IGate is an automatically controlled station: read
Automatic stations on the air first.
-
Add the IGate's callsign and its APRS-IS passcode:
-
To pass messages to RF as well, add
IGATE_TX=1. Leave it out for a receive-only IGate. -
Restart the ingest. The log shows
[igate] enabled as OE8APR-10, then[igate] APRS-IS connected. A message it sends to RF logs[igate] TX->RF message for ….
Without RF_SITE_CALL, the ingest names IGATE_CALL as the receiving site of what the TNC hears directly.
The copies the IGate passes to APRS-IS never count for Tier A:
Receiving site and Tier A says why. Which messages go to RF is in
IGate.
Digipeater¶
A digipeater is an automatically controlled station: read
Automatic stations on the air before you turn it on. It needs a KISS TNC
with PTT, or a soundcard port with its PTT and SOUNDCARD_TX=1.
The log shows [digi] enabled as OE8APR-10 (WIDE1,WIDE2), and [digi] repeated … for each repeat. Options
are in Digipeater.
Meshtastic¶
Only licensed Meshtastic nodes appear. A node must run Meshtastic's licensed (ham) mode, which sets its
licence flag and makes its long name your callsign (for example OE8APR-7). Positions show under that
callsign. Licence-free nodes are ignored: they have no callsign to show. Turn on licensed mode in the
Meshtastic app (Settings → User → Licensed amateur radio, callsign as the long name). It switches off
channel encryption, as amateur rules require.
The ingest reads the node's protobuf stream in one of two ways, or both:
A Meshtastic node on Wi-Fi or Ethernet serves its data on TCP port 4403.
The log shows [meshtastic] connected 192.168.1.60:4403.
A licensed node's positions appear once its node info has been heard; a node announces it every ten minutes.
Until then the ingest logs once that it drops positions from nodes not known to be licensed. Positions count
on the meshtastic port and are always Tier C. A Meshtastic node on USB can also be read from the browser:
Your radio in the browser.
MeshCom¶
MeshCom has its own guide: MeshCom. In short: --extudpip <ingest box IP> and --extudp on
on the node, MESHCOM_NODE=<node IP>=<node call> on the ingest.
AXUDP and AXIP (packet over the internet)¶
Link the ingest with other packet nodes (LinBPQ, JNOS, …) over the internet or HAMNET.
The log shows [axudp] port udp/10093 ↔ bpq.example.net:10093 (Tier C). The port then accepts frames only
from the peers' addresses and drops the rest. Without AXUDP_PEERS it only listens, from any host, and warns
about that at start; bind it to your LAN with AXUDP_BIND. The node, the BBS and FBB forwarding run over
this link even without a radio: Packet: BBS & NET/ROM node.
AXIP (raw IP protocol 93) is the same with AXIP_PEERS=host1,host2 (no ports). It needs the optional
raw-socket package and the CAP_NET_RAW privilege; without them the log shows [axip] disabled — ….
Between two 44Net addresses, see AXUDP and AXIP peering over 44Net.
Everything that arrives over the internet is Tier C.
Next¶
- RF ingest & transports: every transport setting, and how a receiving site reaches Tier A.
- MeshCom: a MeshCom node on your LAN.