Troubleshooting a Misbehaving Repeater
Infrastructure repeaters are expected to operate unattended for months. When behaviour deviates from normal - excessive channel utilisation, duplicate node entries, relay failures, or complete silence - rapid and systematic diagnosis avoids unnecessary site visits and minimises community impact. This page catalogues the most common symptoms, their likely causes, and the remediation steps including serial console diagnostics.
Symptom 1: High Channel Utilisation Caused by This Node
Diagnosis
In the Meshtastic app or web UI, open the node list and check the channel utilisation
percentage. If it is above 25% and you suspect a specific node is the primary contributor,
runinspect aeach traceroutecandidate fromnode's multiplereported pointsairtime/channel-utilisation telemetry, or watch the
serial/debug log of the suspect node to see how often it is transmitting and rebroadcasting.
(Traceroute shows the routing path/hops to a destination - it does not measure which node
rebroadcasts most frequently, orso it is not the right tool for isolating a chatty node.) You can
also check the MQTT stream for an unusually high publication rate from one node ID.
# On the suspect node: check current telemetry broadcast interval
meshtastic --get telemetry.device_update_interval
meshtastic --get telemetry.environment_update_interval
# Check position broadcast interval
meshtastic --get position.position_broadcast_secs
Common causes and fixes
Short telemetry intervals: If device_update_interval ishas setbeen toshortened 60well secondsbelow (the minimum),default,
a single node generates onea telemetry packet perevery minuteinterval plus the corresponding rebroadcasts. Increase(Note: a connected
client app always receives device metrics once per minute regardless of this setting - that local behaviour is
separate from the over-mesh broadcast interval, whose default is 1800 seconds / 30 minutes.) Set it back to
30 minutes for infrastructure nodes:
meshtastic --set telemetry.device_update_interval 1800
meshtastic --set telemetry.environment_update_interval 1800
Short position broadcast interval: A fixed repeater broadcasting position every 5 minutes generates 288 position packets per day. Increase to 24 hours:
meshtastic --set position.position_broadcast_secs 86400
Smart broadcast enabled on a non-moving node: Smart position broadcasting transmits whenever the node moves more than a configured distance. On a fixed node, GPS jitter can cause false movement detection and trigger frequent transmissions. Disable it:
meshtastic --set position.position_broadcast_smart_disabledposition_broadcast_smart_enabled truefalse
Symptom 2: Node Appearing Twice in the Node List
Diagnosis
Two entries in the node list with the same name or similar names, but different node IDs, indicates that the same physical device has been flashed or configured with two different node identities. This typically happens when:
- A backup config from device A was imported onto device B, causing B to broadcast device A's NodeInfo until B's radio generates its own unique ID advertisement.
- A node was factory-reset, generating a new node ID, but other mesh nodes still have the old ID cached.
- Two devices were cloned by copying the flash image directly (not supported - never duplicate node configurations this way).
Remediation
If two physical devices have the same node ID (the critical case - never do this): One device must be factory-reset to generate a new unique ID. Factory reset clears all configuration including channel keys - re-configure from scratch:
Warning: A factory reset erases the channel PSK and all configuration - the node will fall off your mesh and emergency channel until it is manually re-keyed, which on a remote node means a site visit. NEVER factory-reset a sole-path or remote infrastructure node without (a) a current exported config backup (meshtastic --export-config > config.yaml) and (b) physical or admin access to restore it. Do not perform this during an active incident.
meshtastic --factory-reset
If stale entries persist after a legitimate device reset: Other mesh nodes cache node
entries and only expire themstale afterones on their own over time - there is no fixed published TTL, but the configured node info broadcast interval. The stale
entry will disappearage onout itswithout own once the cache TTL expires. This can take 4 - 8 hours by default.intervention. There is no remote command to force-clear another node's
cache,cache. butNote youthat can--remove-position clearonly unsets a specific device's own fixed position (latitude/longitude/altitude) -
it does NOT clear the node DB:database. To reset a node's own NodeDB requires either the dedicated NodeDB-reset
command or a factory reset; clearing a node's own DB does not remove a stale entry that other nodes are
caching, which simply expires on its own.
# Clears only this device's own fixed position - NOT the node database:
meshtastic --remove-position
Symptom 3: Node Offline Despite Power Being Present
Diagnosis
The node is powered (LEDs lit, no alarm on power supply) but is not appearing in the mesh and is not publishing to MQTT. This indicates a firmware hang, a radio module fault, or a configuration issue that prevents the radio from transmitting.
Step 1: Attempt remote recovery
Remote administration over --dest supports only the --set and --get commands - there is no supported remote --reboot command, so a hung node generally cannot be rebooted over the air. You can remotely read or adjust settings if the radio stack is still responding:
# From any node withRemote admin channelsupports configuredonly --get / --set over --dest:
meshtastic --dest '!abcd1234' --rebootget device.role
If the radio stack is functional but the application layer is hung, thisremote reads may succeed.still respond. If the node comesis backfully afterunresponsive, you will need a rebootphysical command,power enablecycle theor hardwareserial console access (below). Meshtastic has no configurable hardware-watchdog setting to prevent future hangs
requiring manual intervention:enable.
meshtastic --dest '!abcd1234' --set device.watchdog_secs 300
Step 2: Serial console inspection
Connect via USB and open a serial terminal at 115200 baud:
screen /dev/ttyUSB0 115200
# or on macOS:
screen /dev/cu.usbserial-0001 115200
# or using meshtastic CLI:
meshtastic --port /dev/ttyUSB0 --debug
Look for these patterns in the serial output:output (exact log wording varies by firmware version):
assertorGuru Meditation Error- firmware crash, followed by register dump. Note the crash address for reporting to the Meshtastic GitHub issues.NoMessages indicating no packets are being receivedin-X seconds-the radio module may be locked up. Try power cycling.nvs_flasherrors - NVS (non-volatile storage) corruption. Full flash erase followed by re-flash and reconfiguration is required.- Looping reboot messages without the firmware reaching
completed-boot state - this can indicate a hardwareMeshtasticainitialisedfaultfault;(commononewithpossible cause is a damaged SPI bus between the ESP32 and the LoRamodule).module.
Step 3: Full power cycle
Disconnect power completely (including USB) for 10 seconds. Many transient LoRa module hang states clear only with a full power cycle, not a software reset.
Symptom 4: Node Not Relaying Packets
Diagnosis
The node appears in the node list and is visible on the map, but traceroutes confirm it is not serving as a relay hop - packets that should transit through it are not being forwarded.
Check the device role
This is the most common cause. A node configured as does not relay packets from
other nodes. CLIENTCLIENT_MUTEConfirm:A plain CLIENT node DOES relay - it rebroadcasts packets when no other node has already done so - so a CLIENT role is not, by itself, the reason a node fails to forward. Confirm the role:
meshtastic --get device.role
If the role returns (which suppresses rebroadcasting), change CLIENTCLIENT_MUTEit:it. For a well-placed stationary infrastructure node, ROUTER is the recommended role:
meshtastic --set device.role ROUTER
Check the rebroadcast mode
meshtastic --get device.rebroadcast_mode
ValidThe relayrebroadcast modesmode areis set under the device. namespace (device.rebroadcast_mode). The valid values are:
ALL ALL_SKIP_DECODING - same as ALL but skips packet decoding and simply rebroadcasts. This only takes effect on the REPEATER role; it is not a general relay mode for other roles.
LOCAL_ONLY - ignore packets from foreign meshes (other regions/modem presets), relaying only local-mesh traffic.
KNOWN_ONLY - relay only packets from nodes already in the NodeDB, filtering out unknown/foreign nodes.
NONE - do not rebroadcast CORE_PORTNUMS_ONLY - rebroadcast only core protocol port numbers.
A mode of LOCAL_ONLY or KNOWN_ONLY restrictsfilters whichforeign-mesh packets are relayedtraffic and may explain why some transit traffic is being dropped.
Check hop count on arriving packets
If packets arrive at this node with a remaining hop count of 0, they are consumed and not forwarded - this is correct behaviour, not a fault. Verify by enabling debug output and watching the hop_limit field in received packets:
meshtastic --debug 2>&1 | grep "hop_limit"
If all arriving packets have hop_limit = 0, the originating nodes may need their
lora.hop_limit increased.increased (default 3, maximum 7). Raising the hop limit increases airtime and can worsen congestion, so do this cautiously and watch channel utilisation.
Check channel configuration
TheA repeaterrelay mustforwards sharepackets based on the unencrypted packet header (sender NodeID + packet ID), and it
deduplicates using that same header - so a node can and does rebroadcast packets even when it does not hold the
channel 0PSK. credentialsThis is exactly why ALL_SKIP_DECODING can relay channels it cannot decrypt. A PSK mismatch
prevents reading the message content, not relaying it. To actually exchange and read messages with the nodes ityou
isare relaying for. Ifserving, the channel 0 PSK doesmust not match, the node cannot decode the packet to check the duplicate-detection hash, and
behaviour is undefined (most implementations drop it).match:
meshtastic --info | grep -A 5 "channel_0"
Serial Console Diagnostic Reference
When physically on-site, the following serial console commands provide rapid triage:
# Full device info dump (version, channels, config, node DB)
meshtastic --info
# ShowExport allthe full current configuration into structureda outputYAML backup file
meshtastic --export-config > config.yaml
# Watch live packet events (requires --debug flag)
meshtastic --debug
# Check for NVS storage health (ESP32 only, via monitor output)
# Look for: "NVS Stats: used=X, free=Y" - free should be > 20%
# Low free NVS can cause intermittent config save failures
# Factory reset if(last NVSresort corruption- iswipes confirmedconfig and channel keys; back up first)
meshtastic --factory-reset
Reading the debug log for relay events
When --debug is active, relay events appear asin linesthe like:log. The exact wording varies by firmware version, but conceptually you will see rebroadcast events (the node forwarding a packet with a decremented hop limit) and duplicate-suppression events (the node ignoring a packet it has already heard), for example:
(illustrative, not verbatim)
Rebroadcasting packet from !abcd1234,abcd1234 hopLimit=2...
Ignoring duplicate packet from !abcd1234 (id=0x12345678)
If you see only duplicate-suppression lines and no Ignoring duplicate packetrebroadcast lines, the node
is receiving packets but treating them all as duplicates. This can happen if the duplicate
detection window (stored in RAM) has stale entries from a previous session - a reboot typically
clears this.Rebroadcasting
If neither message type appears for packets that other nearby nodes are hearing, the LoRa receive path is not functioning. Check antenna connection (a disconnected antenna is the single most common field repair) and SPI bus integrity.