Skip to main content

MeshCore Repeater Diagnostics via Serial Console

The MeshCore serial console provides direct access to repeater state and diagnostic information. Connecting via USB to a deployed repeater is the most reliable way to diagnose problems that cannot be addressed remotely.

Connecting to the Serial Console

On Windows: use PuTTY or the Arduino Serial Monitor. On Linux/Mac: use screen or minicom as a serial terminal.

# Linux/Mac
screen /dev/ttyUSB0 115200

# Windows (PuTTY): Connection Type = Serial, Speed = 115200, COM port varies

MeshCore boards use 115200 baud for the serial console, including RAK boards. (If you have configured an attached GPS module, that module's own UART may run at a different baud rate such as 9600 - but that is a separate interface from the console.)

Key Diagnostic Commands

These are commands from the on-device MeshCore serial CLI (see docs.meshcore.io/cli_commands). There is no single combined "status" command - health information is split across several get ... and stats-... commands.

CommandOutputUse for
verFirmware versionConfirm firmware build
stats-coreBattery voltage, uptime, queue depthOverall health check
get radio / get freqRadio config (frequency, bandwidth, SF, coding rate)Verify radio settings match the network
neighborsUp to the 8 most recently heard nodes, with timestamp and SNRVerify which nodes are reaching this repeater
stats-packetsPacket counters: Received and SentIdentify traffic/routing problems
stats-radioNoise floor, last RSSI/SNR, airtime, receive errorsSignal quality of last received packet
logPrints a captured rx log (must first be started with log start, stopped with log stop, cleared with log erase)Capture and review received-packet activity
reboot(restarts device)Recover from hung state

Note: contacts and list are companion/client-side concepts, not repeater serial commands - on a headless repeater, use neighbors instead. The log command is a packet/rx capture you start and stop, not an always-on event log.

Interpreting Stats Output

The stats-packets command is a useful diagnostic tool. The firmware exposes Received and Sent counters. A healthy repeater shows:

  • Sent count tracking received traffic - the repeater is relaying packets it is meant to forward. (The documented counters are Received and Sent; there is no separate "forwarded" or "dropped" counter, so judge activity from the Sent counter rising alongside Received rather than from a "forward rate" metric.)
  • Drops in MeshCore - MeshCore drops a flood packet when it exceeds the flood.max hop ceiling (default 64), and its loop detection (loop.detect) drops a packet whose path shows this repeater's own ID/hash repeated. This is not a Meshtastic-style per-packet hop counter decrementing to zero. In MeshCore's path-based routing, a repeater also intentionally does not retransmit packets whose embedded path does not include it - these appear as non-forwarded traffic but are correct behavior, not a loop. Distinguish this selective non-forwarding from a genuine duplicate-flood loop before acting.
  • Increasing received count over time - Confirms the repeater is hearing traffic from the network

Common Issues and Diagnostics

SymptomCheckFix
Received count stays at zeroCheck antenna connection, verify radio settings match networkReconnect antenna; verify radio parameters with get radio and get freq (frequency, bandwidth, SF, coding rate) and confirm they match the USA/Canada preset values shown in the app
Sent count zero despite receivesVerify device is running repeater firmware variant and that forwarding is enabledReflash with repeater firmware; confirm set repeat on
Battery voltage decliningCheck solar panel output, charge controller LVD settingClean panel, verify charge controller settings
Rebooting frequentlyCheck for low battery voltage causing brownoutSize battery correctly; check charge controller
Not appearing in client node listRepeater may not be sending flood adverts; check the flood advert interval with get flood.advert.intervalSend a flood advertisement with advert and confirm a flood advert interval is set, e.g. set flood.advert.interval 12 (hours). Zero-hop adverts (advert.zerohop / set advert.interval) are local only. There is no advert_hops parameter.