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 altitude —b76c(+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.
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).
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.
| 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-missed — EDP1 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.)
snapshot_nodedb.py is re-runnable per host.