Skip to main content

Fixed Position for Repeater Nodes

A repeater node that knows its own location serves the community in two ways: it appears accurately on coverage maps, and it lets neighbouring nodes calibrate their own position estimates. Without a fixed position, a GPS-less repeater either appears at coordinate (0, 0) in the ocean or does not appear on the map at all. This page explains how to configure a precise static position, how to reduce position precision for privacy, and how to minimise the air-time cost of periodic position broadcasts.


Why a Fixed Position Matters for Infrastructure Nodes

  • Coverage visibility - Community members and emergency coordinators use the network map to understand what areas are served. A repeater with an accurate position lets them trace coverage boundaries and identify gaps.
  • Traceroute path correlation - When operators run traceroutes, hop positions appear on the map. A correctly placed repeater gives a geographically meaningful path diagram.
  • SNR context - Signal-to-noise ratio reports are much more useful when the receiving node's coordinates are known, because operators can correlate signal strength with distance and terrain.
  • No GPS module required - Many dedicated repeater platforms (e.g. RAK WisBlock with no GPS module, T-Beam with GPS disabled) can broadcast a fixed configured position without incurring GPS power draw.

Configuring a Static GPS Position Without a GPS Module

Method 1: Meshtastic CLI (recommended)

The --setlat, --setlon, and --setalt flags write a fixed position directly to the device's configuration storage. Once set, this position is broadcast as the node's location even with no GPS hardware present. This is the documented, recommended way to set a fixed position.

# Set position for a repeater at the top of Mount Davidson, San Francisco
# Latitude: 37.7406, Longitude: -122.4538, Altitude: 282 metres
meshtastic --setlat 37.7406 --setlon -122.4538 --setalt 282

Determine the coordinates of your site using Google Maps, CalTopo, or any mapping tool that provides WGS84 decimal degrees (the standard Meshtastic expects). Right-click the exact antenna location on Google Maps to copy coordinates.

Method 2: Meshtastic Python API

If you prefer scripting, the Python API exposes setFixedPosition() on the local node, which takes decimal-degree latitude and longitude plus an integer altitude in metres:

from meshtastic.serial_interface import SerialInterface

import meshtastic.mesh_pb2 as mesh_pb2

iface = SerialInterface()

# BuildSet a Positionfixed protobufposition: poslatitude, =longitude mesh_pb2.Position()(decimal pos.latitude_idegrees), = int(37.7406 * 1e7) # stored as integer, scaled by 1e7
pos.longitude_i = int(-122.4538 * 1e7)
pos.altitude = 282
pos.time = 0 # will be filled in by firmware(metres)
iface.localNode.setPosition(pos.latitude_isetFixedPosition(37.7406, /-122.4538, 1e7, pos.longitude_i / 1e7, pos.altitude)282)

iface.close()

Method 3: Meshtastic Web UI

Connect to the node's web interface (available on ESP32-based devices at http://meshtastic.local or the device's IP when connected to Wi-Fi). Navigate to Config → Position, enable Fixed Position, and enter latitude, longitude, and altitude. Save and reboot.


Position Precision: Reducing Exact Location for Privacy

If the repeater is on private property and the owner does not want the exact address broadcast on the mesh, reduce position precision. Position precision is a per-channel setting (module_settings.position_precision), so it is configured against a specific channel index rather than globally. Meshtastic supports precision levels from full resolution (sub-metre) down to approximatelya 23heavily-rounded kmapproximation. radius.The exact bits-to-radius mapping is defined by the in-app precision slider; the values below are approximate and may shift between firmware versions - confirm against the current Meshtastic position-config docs.

Common choices for community repeaters:

  • Full precision (default) - broadcast exact coordinates. Acceptable for tower sites, mountain tops, and public-land installations.
  • ~11.5 km precision - rounds to theroughly nearesta kilometre.1.5 km radius. Identifies the general neighbourhood without revealing the specific building.
  • ~1012 km precision - rounds to theroughly nearesta 1011.7 km.km radius. Useful for regional-scale maps where sub-kilometre accuracy is unnecessary and the operator prioritises privacy.
# Position precision is per-channel; --ch-index selects the channel (0 = primary)
# Set position precision bits to 14 (approximately 1a 1.5 km (precision value 14)radius)
meshtastic --ch-index 0 --ch-set position.module_settings.position_precision 14

# Set position precision bits to 11 (approximately 10a 11.7 km (precision value 11)radius)
meshtastic --ch-index 0 --ch-set position.module_settings.position_precision 11

# Restore full precision (precision valuebits 32)
meshtastic --ch-index 0 --ch-set position.module_settings.position_precision 32

The position_precision value is a bit-field width - higher values mean more significant bits retained from the raw coordinate, i.e. higher accuracy. Values below about 10 round so aggressively that the position becomes almost meaningless for map purposes. Because this is a per-channel setting, you can carry different precision on different channels.


Position Broadcast Interval for Fixed Nodes

A fixed repeater does not move. BroadcastingBy default the node broadcasts its position everyon fewa minutesperiodic interval (the firmware default is 15 minutes), and smart position broadcast - thecontrolled by position.position_broadcast_smart_enabled (default behaviourtrue) - further reduces transmissions when position_broadcast_smart_disabledthe node is false - wastes significant air-time that could be used by mobile nodes.stationary. For a static infrastructure node,node setyou can simply lengthen the broadcast interval to at least 12 hours (43200 seconds), or even 24 hours (86400 seconds)., to avoid wasting air-time that could be used by mobile nodes.

# Set position broadcast interval to 12 hours (43200 seconds)
meshtastic --set position.position_broadcast_secs 43200

# Set position broadcast interval to 24 hours (86400 seconds) - recommended for fixed sites
meshtastic --set position.position_broadcast_secs 86400

# Disable smartSmart position updatesbroadcast (these are basedis on movement;by irrelevantdefault; forset fixedfalse nodes)only if you want to disable it
meshtastic --set position.position_broadcast_smart_disabledposition_broadcast_smart_enabled truefalse

With aan 24-hour86400-second interval, a fixed repeaternode broadcasts its position exactlyapproximately once per day on power-up (plus once perat dayboot). thereafter.The Comparefirmware thisdefault interval is 15 minutes; increasing it to the default12-24 whichh canrange producefor a positionstatic packetnode everysaves 5 - 15 minutes - saving dozens ofmany transmissions per day across a network with multiple infrastructure nodes.


Verifying the Fixed Position Was Applied

# Check position configuration on the device
meshtastic --get position

# Pull the device info including last known position
meshtastic --info | grep -A 5 position

After the node reboots following a position update, connect to the Meshtastic app and look at the node list. The repeater should appear at the correct location on the map within one position broadcast interval.


Altitude Accuracy

Altitude in Meshtastic is stored in whole metresmetres. aboveIt is commonly referenced to the WGS84 ellipsoid (notrather abovethan mean sea level).level, but the Position message also carries an ALTITUDE_MSL flag that indicates when a value is given relative to mean sea level - so do not assume the value is always ellipsoidal. For antenna-height accuracy, use the elevation of the antenna itself, not ground level at the base of the tower. For most community mapping purposes, ground-level elevation from a topo map is sufficient - the difference rarely affects coverage visualisations.

Find accurate elevation using the USGS National Map (apps.nationalmap.gov) or open-elevation.com/api/v1/lookup?locations=LAT,LON for non-US sites.