← RFC

Flagging Elevated Nodes by Altitude (role-independent high-site detection)

Status: Real-data tooling + observation. Date: 2026-06-09. Reproduce: python3 tools/snapshot_nodedb.py <host> then python3 tools/elevated_nodes.py.

UPDATE 2026-06-10 (fresh snapshot, noon-eval-20260610.md): now 9 elevated nodes of 113 with altitudeb76c (+80 m, role unset) joins the table below; 5 of 9 are role-missed.

A node's configured role (CLIENT / ROUTER / REPEATER) does not tell you whether it sits on a high site — and high sites are exactly the elevated relays that worsen the hidden-node problem (stone-mountain-hidden-node-hub.md). Meshtastic nodes do report altitude, which lets us flag elevated nodes independently of role.

Where the data is

Altitude is not in the static Meshview export (lat/long only), but it is in the live node DB via the Meshtastic API: of 200 nodes the KD4HME gateway knows, 109 report altitude (snapshot_nodedb.py dumps the DB with it).

Scoring — altitude relative to local neighbors

Meshtastic altitude is ASL, not height-above-terrain, so a raw number is misleading (metro Atlanta's base is ~250–320 m ASL). We instead score each node by altitude − median altitude of its neighbors within 8 km (elevated_nodes.py); a node well above its neighbors is a real high site regardless of terrain.

Result — 8 elevated nodes, and role would have missed half of them

Node Role Alt (m ASL) Above local (m)
LMC3 ROUTER 624 +351
EDP1 CLIENT_MUTE 612 +330
Rky CLIENT_MUTE 497 +244
RFM1 ROUTER_LATE 487 +234
BSRG ROUTER 520 +195
FtBk (unset) 527 +170
0b3b (Nano Newt / Stone Mtn) ROUTER 420 +128
FIVE (unset) 400 +96

4 of the 8 are role-missedEDP1 and Rky are labeled CLIENT_MUTE, FtBk/FIVE have no role, yet all sit 96–330 m above their neighbors. EDP1 (+330 m, a "client") is one of the highest sites in the whole network. This confirms the hypothesis: altitude catches elevated hubs that the role field misses. (Nano Newt on Stone Mountain shows +128 m — clearly elevated, as expected.)

Why it matters

Caveats