-
Notifications
You must be signed in to change notification settings - Fork 0
APRS
Crow can bridge APRS text messages through a configurable APRS backend, allowing AREDN nodes to send and receive messages with APRS stations. The default backend is APRS-IS, but Crow also supports Dire Wolf KISS-over-TCP and Xastir/YAAC-style TCP text streams.
⚠️ Important: APRS is public amateur-radio traffic. Keep transmit (tx_enabled) disabled until the station callsign, APRS-IS login/passcode or local TNC path, and operator control requirements are fully understood.
Add an aprs block to your crow.conf and include an APRS channel in the channels array:
{
"callsign": "N0CALL-10",
"aprs": {
"enabled": true,
"callsign": "N0CALL-10",
"channel": "APRS og==",
"default_group": "APRSgroup1",
"inline_max_members": 10,
"backend": {
"type": "aprsis",
"host": "rotate.aprs2.net",
"port": 14580,
"tx_enabled": false
},
"groups": [
{
"name": "APRSgroup1",
"members": ["N0CALL-4", "N0CALL-7"],
"repeat_member_messages": false,
"rate_limit_seconds": 20,
"max_members": 10
}
]
},
"channels": [
{ "namekey": "AREDN og==", "telemetry": false },
{ "namekey": "APRS og==", "telemetry": false }
]
}| Field | Description |
|---|---|
callsign |
Your station callsign with SSID |
channel |
The Crow channel name that carries APRS traffic |
default_group |
The group used when no group is specified |
inline_max_members |
Maximum stations allowed in an inline address list |
backend |
Connection details for the APRS backend (see below) |
groups |
Pre-configured station groups for group messaging |
Crow supports three APRS backend types. Choose the one that matches your station setup.
Connect to the internet APRS gateway. This is the only backend that requires a passcode — see APRS-IS Passcode below.
For receive only, no passcode is needed (Crow defaults to -1, which gives read-only access). To transmit, set a valid APRS-IS passcode and enable tx_enabled.
"backend": {
"type": "aprsis",
"host": "rotate.aprs2.net",
"port": 14580,
"passcode": "REPLACE_WITH_APRS_IS_PASSCODE",
"filter": "b/N0CALL-4/N0CALL-7",
"tx_enabled": true
}| Field | Default | Description |
|---|---|---|
host |
rotate.aprs2.net |
APRS-IS server hostname |
port |
14580 |
APRS-IS server port |
passcode |
-1 (read-only) |
APRS-IS passcode for your callsign (required for TX) |
filter |
(none) | Optional server-side filter (e.g. b/N0CALL-4/N0CALL-7) |
tx_enabled |
false |
Enable transmitting messages to APRS-IS |
Connect to a local Dire Wolf TNC via KISS-over-TCP. No passcode is needed — authentication is handled by the TNC/radio path.
"backend": {
"type": "kiss_tcp",
"host": "127.0.0.1",
"port": 8001,
"kiss_port": 0,
"path": [],
"tx_enabled": true
}| Field | Default | Description |
|---|---|---|
host |
127.0.0.1 |
Dire Wolf host |
port |
8001 |
KISS TCP port |
kiss_port |
0 |
KISS port number (0–15) |
path |
[] |
Digipeater path (e.g. ["WIDE1-1", "WIDE2-1"]) |
tx_enabled |
false |
Enable transmitting |
Connect to an APRS application that exposes a TNC2-style TCP text interface. No passcode is needed — the connected application handles its own authentication to APRS-IS or RF.
"backend": {
"type": "tcp_text",
"host": "127.0.0.1",
"port": 14580,
"tx_enabled": true
}| Field | Default | Description |
|---|---|---|
host |
127.0.0.1 |
Application host |
port |
14580 |
TCP text port |
tx_enabled |
false |
Enable transmitting |
The APRS-IS passcode is a numeric hash derived from your callsign (without SSID). It is used only by the APRS-IS backend to authenticate for transmit access. The other backends (KISS TCP, TCP Text) do not use or need a passcode.
When Crow connects to an APRS-IS server, it sends a login line:
user N0CALL-10 pass 12345 vers Raven 0.1
- If the passcode is omitted or set to
-1, the server grants read-only access — you can receive APRS messages but cannot transmit. - If a valid passcode is provided and
tx_enabledistrue, the server grants read-write access.
The APRS-IS passcode is a simple hash of your base callsign (without SSID). Many tools can generate it:
- Online: Search for "APRS-IS passcode generator" (e.g. aprs-passcode)
- Command line: Various scripts exist — the algorithm is a public, well-known hash
Note: The passcode is not a security secret — it is a simple validation that you are using your own callsign. Anyone can compute the passcode for any callsign. APRS-IS transmissions are public amateur radio traffic and all standard FCC Part 97 rules apply.
| Backend | Passcode needed? | Why |
|---|---|---|
aprsis — receive only |
❌ No | Default passcode -1 gives read-only access |
aprsis — transmit enabled |
✅ Yes | APRS-IS server requires valid passcode for write access |
kiss_tcp (Dire Wolf) |
❌ No | Direct TNC connection, no APRS-IS login |
tcp_text (Xastir/YAAC) |
❌ No | The application handles its own APRS-IS auth |
All APRS messaging happens on the configured APRS channel (e.g. APRS og==).
@N0CALL-4 message text
#APRSgroup1 message text
#APRSgroup1 N0CALL-4, N0CALL-7 message text
join #APRSgroup1 N0CALL-4, N0CALL-7 message text
The join command creates the group if it does not exist, replaces its member list with the listed stations, and sends the message to all of them.
Each group can optionally repeat a received APRS message from one member back out to the other members of the group. Enable this with repeat_member_messages:
{
"name": "APRSgroup1",
"members": ["N0CALL-4", "N0CALL-7"],
"repeat_member_messages": true,
"rate_limit_seconds": 20,
"max_members": 10
}When enabled, a message received from one group member is forwarded to the other members — not echoed back to the sender. Crow applies duplicate suppression and rate limiting to prevent loops.
- Home
- Change Log
- Configuration
- Configuring Channels
- Backend Selection and Test Deployment
- Command Reference
- APRS Bridge
- LoRa Gateway Tags
- Meshtastic API Backend
- Memory Use
- Strict Gatekeeper
- Winlink
- USB Storage
APRS.mdBackend-Selection-and-Deployment.mdChange-Log.mdCommand-Reference.mdConfiguration.mdConfiguring-Channels.mdHome.mdLoRa-Gateway-Tags.mdMeshtastic-API.mdMemory-Use.mdStrict-Gatekeeper.mdUSB-Storage.mdWinlink.md_Sidebar.md
- Keep every
.mdwiki page linked here. - Keep
Home.mdand_Sidebar.mdin sync. - When a wiki page is removed, remove it from both the Home page inventory and this sidebar.