Skip to content

RF ingest & transports

The ingest box is how real radio enters an instance. It is a Node process (apps/ingest) that runs on the operator's own machine, next to the radio or TNC — never in the cloud gateway. Only the box that physically touched RF can attest first-party reception, which is why ingest is always local.

How the box works

Every transport decodes into a normalized packet and pushes it into one batch. Every BATCH_MS (default 1500 ms) the box POSTs the batch as JSON to INGEST_URL (default http://127.0.0.1:8787/ingest) with the x-ingest-secret header. Set INGEST_SECRET to match your gateway; point INGEST_URL at a gateway on localhost, your LAN, or a remote cloud — the box is gateway-location-agnostic.

The APRS-IS feed is always available: set APRSIS_FILTER (and optionally APRSIS_CALLSIGN / APRSIS_PASSCODE for a logged-in feed). Every transport below is opt-in and starts only when its variable is present. Each stamps its own port, visible at GET /api/ports.

Transports

Transport Enable with What it does
KISS-over-TCP KISS_TNC_HOST (+ KISS_TNC_PORT, 8001) Connects to a KISS TNC (e.g. Direwolf). Decodes AX.25, emits RF-heard packets, and exposes TX for the digipeater / IGate / node. This transport gates the digipeater, NET/ROM node, BBS, IGate, and forwarder blocks.
AGWPE AGWPE_HOST (+ port, radio-port) Connects to an AGW Packet Engine (Direwolf, SoundModem, UZ7HO); raw monitor in, keying out.
WA8DED hostmode HOSTMODE_HOST (+ HOSTMODE_MYCALL) A TF-firmware TNC or TFPCX over TCP; monitor headers become APRS lines.
Meshtastic MESH_HOST (+ MESH_PORT, 1883) Reads newline-delimited JSON over TCP (an MQTT→TCP bridge / mosquitto_sub -F %j) and maps mesh positions to APRS. The native Meshtastic protobuf decoder (ServiceEnvelope / FromRadio → position / text / node-info) ships in the library and drives the browser-direct serial/BLE path.
TAK / CoT in TAK_COT_PORT A UDP listener that parses inbound Cursor-on-Target events into APRS positions.
AXUDP AXUDP_PORT (+ AXUDP_PEERS) AX.25 over UDP (BPQ mesh, port 10093). Without peers it's an RX-only listener; with AXUDP_PEERS it's a bidirectional port carrying NET/ROM crosslinks and FBB forwarding over the internet leg.
AXIP AXIP_ENABLE or AXIP_PEERS AX.25 in raw IP protocol 93 (JNOS/BPQ AXIP). Needs the optional raw-socket package and CAP_NET_RAW; absent, it logs and stays inert. RX-only with AXIP_ENABLE; bidirectional (RX + TX) with AXIP_PEERS.

Tunnelled frames are always Tier C

AXUDP and AXIP frames are forwarded as heardVia: aprs_is on their own port, so the gateway's provenance derivation stamps firstPartyAttested = false. A tunnelled frame can never reach Tier A — transport is not trust. AXUDP/AXIP transmit is operator-config-gated node transport (you set *_PEERS), which is distinct from on-air keying (that is the separate, verified-callsign gate).

IGate

An IGate bridges RF and APRS-IS in both directions. It needs a KISS TNC and both IGATE_CALL and IGATE_PASS:

  • RX-IGate relays each RF frame up to APRS-IS with a qAR,<yourcall> construct — this is what makes a find you personally gated eligible for Tier A corroboration by others.
  • TX-IGate gates APRS-IS messages down to RF, but only to stations heard locally within IGATE_LOCAL_TTL (default 30 min), honouring the standard do-not-gate tokens (TCPIP, TCPXX, NOGATE, RFONLY), skipping third-party frames, own beacons, and bare acks.

Digipeater

Set DIGI_CALL (and optionally DIGI_ALIASES, default WIDE1,WIDE2) to repeat traffic over a KISS TNC using the new n-N paradigm — insert your call with the has-been-repeated bit, decrement WIDEn-N, with a loop guard and a dedupe window.

Set DIGI_CONNECTED=1 to also repeat connected-mode frames (SABM / I / RR …) whose next un-repeated hop is your call — this relays NET/ROM crosslinks and FBB traffic through you. DIGI_VISCOUS_MS enables viscous digipeating: hold a repeat briefly and cancel it if a better-placed digi is heard repeating the same frame.

Off-grid

Point INGEST_URL at a gateway on the same machine (http://localhost:8787/ingest) and run a Node gateway beside the box: RF in, map out, no internet. A cloud VM may also run an APRS-IS-only ingest for a baseline global feed, but that is never the only path for RF.

On-air legality

Every transmit path above (digipeat, IGate, node, gated user TX) makes your station a control-operated — and, when automatic, unattended — amateur station. Before you enable TX, read Amateur-radio compliance: encryption is prohibited (aprscaching signs but never conceals), identification and automatic-station rules apply, and you are the responsible control operator.