Skip to main content
Source note

Migrated from the SA:MUG Wiki.js page. Content has been lightly cleaned for Docusaurus and public readability; advanced operational settings should still be field-tested before being treated as hard defaults.

MeshCore CLI quick reference

This page is a practical quick reference for common MeshCore CLI commands used by SA:MUG companion, repeater, and room-server operators.

It is not a complete upstream command reference. For full command details, use the upstream MeshCore documentation/source.

Useful links:

Safety notes

  • Some commands are serial-only.
  • Some settings require a reboot to apply.
  • erase is destructive and should not be used casually.
  • Change one setting at a time and record what changed.
  • Do not paste repeater profile commands onto the wrong role/device.
  • Do not expose private keys, passwords, or full device secrets in public support channels.

Local SA, WA, and QLD radio settings

South Australia, Western Australia, and Queensland use:

SettingValue
Frequency923.125 MHz
Bandwidth62.5 kHz
Spreading factor8
Coding rate8

Set all radio parameters together:

set radio 923.125,62.5,8,8
reboot

Verify with:

get radio
get freq

Radio parameter changes require a reboot to apply.

First commands to run

These are useful when you connect to an unknown device:

ver
board
get role
get name
get radio
get public.key
get bootloader.ver
clock
stats-core
stats-radio

Use these before changing anything. They help identify firmware, board, role, radio settings, and current radio conditions.

Operational commands

CommandPurposeNotes
rebootReboot the nodeUse after settings that require reboot
poweroffPower off / shut down the nodeBoard support dependent; no return
shutdownAlias for poweroffBoard support dependent; no return
clkrebootReset clock and rebootUseful if clock state is bad
clockShow current UTC timeCheck time state
clock syncSync clock with remote deviceUse from a connected client/tool
time <epoch_seconds>Set timeUses Unix epoch seconds
advertSend a flood advertCan travel via repeaters
advert.zerohopSend a zero-hop advertDirect/local radio range only
start otaStart OTA firmware updateDevice/support dependent
eraseFactory reset / eraseSerial only; destructive

Radio commands

CommandPurpose
get radioShow radio parameters
set radio <freq>,<bw>,<sf>,<cr>Set frequency, bandwidth, spreading factor, and coding rate
get freqShow frequency
set freq <frequency>Set frequency only; serial only in upstream docs
get txShow transmit power setting
set tx <dbm>Set LoRa chip transmit power
tempradio <freq>,<bw>,<sf>,<cr>,<timeout_mins>Temporarily change radio settings until reboot/timeout
get radio.rxgainShow RX boosted gain mode where supported
set radio.rxgain onEnable boosted RX gain where supported
set radio.rxgain offDisable boosted RX gain where supported

Transmit power is not the same as legal EIRP. EIRP depends on transmitter power, board RF path, feedline loss, and antenna gain.

Identity and basic node settings

CommandPurpose
get nameShow node name
set name <name>Set node name
get latShow configured latitude
set lat <degrees>Set latitude
get lonShow configured longitude
set lon <degrees>Set longitude
get public.keyShow public key
get prv.keyShow private key; serial only
set prv.key <private_key>Set private key; requires reboot
password <new_password>Change admin password
get guest.passwordShow guest password
set guest.password <password>Set guest password
get owner.infoShow owner information
set owner.info <text>Set owner information
get roleShow configured role

Do not post private keys or passwords publicly.

Bootloader, power, and OTA commands

CommandPurposeNotes
get bootloader.verShow the bootloader versionnRF52 only; returns unknown if no bootloader version string is found
get pwrmgt.supportShow whether power management support is compiled inReturns supported/unsupported
get pwrmgt.sourceShow current power sourcenRF52 power-management builds; external or battery
get pwrmgt.bootreasonShow reset and shutdown reason stringsUseful for diagnosing watchdog, low voltage, or boot protection events
get pwrmgt.bootmvShow boot voltage in millivoltsUseful for battery/power debugging
start otaStart an OTA firmware updateDevice/support dependent

For nRF52-based repeaters, use get bootloader.ver after flashing the Oltaco DFU Bootloader so you can confirm what the device reports before formatting/flashing MeshCore repeater firmware.

The MeshCore source currently searches nRF52 flash for a UF2 Bootloader version string. On non-nRF52 builds, get bootloader.ver returns unsupported.

Power-management commands are especially useful for remote/solar repeaters because they can show boot voltage, power source, and reset/shutdown reasons.

Statistics and diagnostics

CommandPurposeNotes
stats-coreBattery, uptime, queue length, debug flagsSerial only
stats-radioNoise floor, last RSSI/SNR, airtime, receive errorsSerial only
stats-packetsPacket countersSerial only
clear statsClear statisticsUseful before a test window

Useful troubleshooting pattern:

clear stats
stats-core
stats-radio

Then perform a test, wait, and check stats-core / stats-radio again.

Logging commands

CommandPurposeNotes
log startBegin capture of RX log to node storageUse before a test
log stopEnd captureStop after test
logPrint captured logSerial only
log eraseErase captured logUse when done

Logs can be useful for debugging, but do not publish private details without checking the output.

Repeater essentials

CommandPurpose
get repeatShow repeater forwarding flag
set repeat onEnable repeater forwarding
set repeat offDisable repeater forwarding
get path.hash.modeShow advert path hash size
set path.hash.mode <0-2>Set path hash size used by this repeater's own adverts
get loop.detectShow loop detection mode
set loop.detect offDisable loop detection
set loop.detect minimalMinimal loop detection
set loop.detect moderateModerate loop detection
set loop.detect strictStrict loop detection
powersavingShow repeater power saving state
powersaving onEnable repeater power saving
powersaving offDisable repeater power saving

For SA:MUG repeater profile blocks, use Repeater settings profiles.

Flood and advert controls

CommandPurpose
get flood.advert.intervalShow flood advert interval in hours
set flood.advert.interval <hours>Set flood advert interval; typical allowed range is 3-168, or 0 to disable where supported
get advert.intervalShow zero-hop/local advert interval in minutes
set advert.interval <minutes>Set zero-hop advert interval; typically 60-240 minutes, rounded down to even minutes
get flood.maxShow maximum flood forwarding hop count
set flood.max <value>Set maximum flood forwarding hop count
get flood.max.unscopedShow maximum hop count for unscoped flood packets
set flood.max.unscoped <value>Limit unscoped flood propagation
get flood.max.advertShow maximum hop count for advert flood packets
set flood.max.advert <value>Limit advert flood propagation

Use conservative values unless the site role and field testing justify more forwarding.

Delay and collision controls

CommandPurposeNotes
get txdelayShow flood retransmit delay factorDefault upstream docs: 0.5
set txdelay <value>Set flood retransmit delay factorValid range in upstream docs: 0-2
get direct.txdelayShow direct/routed retransmit delay factorDefault upstream docs: 0.2
set direct.txdelay <value>Set direct/routed retransmit delay factorValid range in upstream docs: 0-2
get rxdelayShow received flood processing delay baseExperimental
set rxdelay <value>Set received flood processing delay baseUpstream docs range: 0-20
get multi.acksShow multi-acks stateDefault upstream docs: 0
set multi.acks <0 or 1>Disable/enable multi-acksKeep off by default unless deliberately testing

Important rxdelay warning:

  • rxdelay 0 disables rxdelay.
  • rxdelay 1 is a no-op.
  • rxdelay > 1 gives the intended weak-packet delay behaviour.
  • 0 < rxdelay < 1 inverts behaviour and should be avoided.

For details, see rxdelay and txdelay calculations.

Interference and duty-cycle controls

CommandPurpose
get int.threshShow local interference threshold
set int.thresh <value>Set local interference threshold
get dutycycleShow duty cycle limit
set dutycycle <value>Set duty cycle percentage
get afShow deprecated airtime factor
set af <value>Set deprecated airtime factor; use dutycycle on newer firmware
get agc.reset.intervalShow AGC reset interval
set agc.reset.interval <value>Set AGC reset interval in seconds, rounded down to multiple of 4

Be careful with int.thresh on noisy or high sites. If set too low, the repeater may keep treating the channel as busy.

Neighbor commands for repeaters

CommandPurpose
neighborsList nearby neighbors; limited to recent adverts
neighbor.remove <pubkey_prefix>Remove matching neighbor entries
discover.neighborsDiscover zero-hop neighbors

Neighbor output is encoded in the upstream docs as:

{pubkey-prefix}:{timestamp}:{snr*4}

Room server / ACL commands

CommandPurpose
get aclView current ACL; serial only
setperm <pubkey> <permissions>Add, update, or remove companion permissions
get allow.read.onlyShow room server read-only flag
set allow.read.only onEnable read-only mode
set allow.read.only offDisable read-only mode

Permission values:

ValueMeaning
0Guest
1Read-only
2Read-write
3Admin

If permissions is omitted from setperm, the entry is removed.

Region commands

Region management is more advanced. Do not change region rules casually on community repeaters.

CommandPurpose
region loadBulk-load region lists interactively
region load <name> [F]Load a region; optional F allows flooding
region saveSave region changes made since reboot
region allowf <name>Allow flooding for a region
region denyf <name>Block flooding for a region
region get <name>Show region information
region list allowedList flood-allowed regions
region list deniedList flood-denied regions
region homeShow home region
region home <name>Set home region
region defaultShow default scope region
region default <name>Set default scope region
region default <null>Clear default scope region
region put <name> [parent_name]Create a region

Wildcard * represents the wildcard region. Be careful: wildcard rules can affect unscoped traffic.

Common readback block for repeaters

After applying a repeater profile, read back:

ver
board
get role
get name
get radio
get repeat
get advert.interval
get flood.advert.interval
get flood.max
get flood.max.unscoped
get flood.max.advert
get path.hash.mode
get loop.detect
get txdelay
get direct.txdelay
get rxdelay
get multi.acks
stats-core
stats-radio

Common setup snippet for local radio settings

set radio 923.125,62.5,8,8
reboot

After reboot:

get radio
stats-radio

When asking for help

Include:

  • device model
  • firmware role and version if known
  • relevant get output
  • stats-core and stats-radio output if available
  • antenna and power setup
  • what you changed
  • what you expected
  • what happened instead

Do not include private keys, admin passwords, or other secrets.

Where to go next