Repeater CLI Diagnostics
The MeshCore app exposes the everyday repeater functions through menus, and those are documented in MC Repeater Tools. The CLI goes further. It gives you the raw statistics and configuration flags the app does not surface, and it is what you want when a repeater is misbehaving in a way the GUI cannot explain.
Contents
- How to Reach the CLI
- Statistics Commands
- Neighbor Discovery
- Packet Logging
- Radio Configuration
- Diagnosing Deafness: the AGC Fix
- Routing Configuration
- Path Hash Mode
How to Reach the CLI
You can run these commands two ways:
- Over USB serial using config.meshcore.io or the console built into flasher.meshcore.io. Both need Chrome or another Chromium browser (they use the Web Serial API).
- Remotely over RF from the MeshCore app, if you have the repeater's admin password.
Some commands are serial only and are marked below. They print more output than will fit in an RF packet, so they cannot be run remotely.
The default admin password is
password. If you have not changed it on your repeater, do that now:password yournewpassword
Statistics Commands
These give you a snapshot of what the repeater is experiencing right now.
System Stats
stats-core
Serial only. Battery level, uptime, queue length, debug flags.
- Queue length above 0 means a backlog of packets waiting to send. A persistently high queue points to congestion or duty-cycle throttling.
- Very short uptime (seconds or minutes) means the repeater is crashing or browning out. Suspect power before anything else.
Radio Stats
stats-radio
Serial only. Noise floor, last RSSI, last SNR, total airtime, receive errors.
- Noise floor above -100 dBm means heavy local interference. The repeater is going deaf to weak, distant nodes. See the AGC fix.
- Receive errors climbing means packets are being heard but failing their CRC check. Suspect interference, a frequency mismatch with senders, or an antenna problem.
- Airtime at or near the duty cycle limit means the repeater is throttling its own transmissions. That is normal behaviour under heavy traffic, not a fault.
Packet Stats
stats-packets
Serial only. Total packets received and sent.
A healthy repeater in a populated area should show both counters climbing. If both are frozen at zero, the repeater is hearing nothing at all: check the antenna connection and the frequency setting.
Neighbor Discovery
List Neighbors
neighbors
Shows the most recent nodes heard directly (zero-hop) by this repeater. Each line reads:
{pubkey-prefix}:{timestamp}:{snr*4}
Note the SNR is multiplied by 4. A value of -40 means an SNR of -10 dB, which is marginal. A value of +20 means +5 dB, which is a solid link.
Discover New Neighbors
discover.neighbors
Forces the repeater to send a zero-hop advert and listen for responses, refreshing its neighbor table. Use this when the neighbor list is empty or looks stale.
An empty neighbor list on a repeater that should have neighbors is a strong signal. It means the repeater is not hearing anyone, which points at the antenna, the frequency, or a high noise floor.
Packet Logging
Repeaters can log every received packet to flash. This is the most powerful tool available for intermittent problems, the kind that never happen while you are watching.
log start
Begin capturing received packets to flash.
log stop
Stop capturing.
log
Serial only. Print the captured log to the serial console. Copy this output and bring it to Discord for analysis, or line the timestamps up against messages you sent during the capture.
log erase
Clear the stored log to free the space and start a clean capture.
A typical session: run log start, reproduce the problem over 10 to 30 minutes, run log stop, then connect over serial and run log.
Radio Configuration
Check Current Settings
get radio
get freq
get tx
For the Inland NW Mesh, get radio must return:
910.525,62.5,7,5
That is 910.525 MHz, 62.5 kHz bandwidth, spreading factor 7, coding rate 5. A node on any other setting is invisible to the rest of the network, and this is worth checking early because it produces symptoms that look like a hardware fault.
Transmit power depends on the board. Most Heltec V3 and RAK boards run 14 to 22 dBm. High-power hardware such as the Station G2 has different limits: do not exceed what your board is rated for.
Fix a Mismatch
set radio 910.525,62.5,7,5
reboot
Radio changes do not take effect until the node reboots.
Test Without Committing
tempradio 910.525,62.5,7,5,30
Applies those parameters for 30 minutes, then reverts to the saved config. Useful for testing a change on a repeater you cannot easily get back to if it drops off the mesh.
Diagnosing Deafness: the AGC Fix
If a repeater sits near a strong RF source such as a cell tower, TV transmitter, or busy WiFi, the SX1262 radio's Automatic Gain Control can latch and stop hearing LoRa traffic altogether.
Symptoms: the repeater is clearly online and responds to commands, but packet counters are frozen, the neighbor list is empty, and it forwards nothing.
Fix:
set agc.reset.interval 4
This resets the AGC every 4 seconds. It is a very cheap operation and it cures most cases of deafness. The value is in seconds, rounded to a multiple of 4.
Afterwards, run stats-radio and watch whether the noise floor and RSSI values start responding again.
Routing Configuration
Repeat Flag
get repeat
Must be on for a repeater. If it is off, the node hears everything and forwards nothing, which looks exactly like a routing black hole from the outside.
set repeat on
Flood Hop Limits
get flood.max
get flood.max.advert
get flood.max.unscoped
If flood.max is set very low, such as 1 or 2, traffic originating beyond that hop range will not propagate through this repeater. One misconfigured repeater with a low flood.max.advert can stop new members' adverts from ever reaching the wider network.
Duty Cycle
get dutycycle
The default is 50%. Set very low, the repeater throttles its transmissions hard and appears slow or unresponsive whenever the network gets busy.
Path Hash Mode
get path.hash.mode
0— 1-byte hash. The default. Maximum compatibility, up to 64 hops.1— 2-byte hash. Better disambiguation, up to 32 hops.2— 3-byte hash. Best disambiguation, up to 21 hops.
Setting this to 1 helps CoreScope tell apart repeaters whose public keys collide in the first byte.
set path.hash.mode 1
Only change this if the repeater is on firmware 1.14 or newer. Older firmware only forwards 1-byte paths, and a mismatch will silently break routing through that node. If you are not sure, leave it alone and ask in Discord first.
Checking Firmware Version
ver
Always confirm the firmware version before reporting a problem. Several issues people report are already fixed upstream. Update at flasher.meshcore.io.
Next: Using CoreScope shows you where your packets actually went.