Files
Meshtastic-Android/en/user/discovery.html
T

3 lines
41 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <link rel="stylesheet" href="/Meshtastic-Android/assets/css/just-the-docs-default.css"> <link rel="stylesheet" href="/Meshtastic-Android/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet"> <style id="jtd-nav-activation"> .site-nav > ul.nav-list:first-child > li > a, .site-nav > ul.nav-list:first-child > li > ul > li:not(:nth-child(12)) > a, .site-nav > ul.nav-list:first-child > li > ul > li > ul > li a { background-image: none; } .site-nav > ul.nav-list:not(:first-child) a, .site-nav li.external a { background-image: none; } .site-nav > ul.nav-list:first-child > li:nth-child(2) > ul > li:nth-child(12) > a { font-weight: 600; text-decoration: none; }.site-nav > ul.nav-list:first-child > li:nth-child(2) > button svg, .site-nav > ul.nav-list:first-child > li:nth-child(2) > ul > li:nth-child(12) > button svg { transform: rotate(-90deg); }.site-nav > ul.nav-list:first-child > li.nav-list-item:nth-child(2) > ul.nav-list, .site-nav > ul.nav-list:first-child > li.nav-list-item:nth-child(2) > ul.nav-list > li.nav-list-item:nth-child(12) > ul.nav-list { display: block; } </style> <script src="/Meshtastic-Android/assets/js/vendor/lunr.min.js"></script> <script src="/Meshtastic-Android/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Begin Jekyll SEO tag v2.9.0 --> <title>Discovery | Meshtastic Android</title> <meta name="generator" content="Jekyll v4.4.1" /> <meta property="og:title" content="Discovery" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="Explore your mesh network — the Local Mesh Discovery scanner, traceroute paths, neighbor maps, and node discovery tools." /> <meta name="twitter:description" property="og:description" content="Explore your mesh network — the Local Mesh Discovery scanner, traceroute paths, neighbor maps, and node discovery tools." /> <link rel="canonical" href="/Meshtastic-Android/en/user/discovery.html" /> <meta property="og:url" content="/Meshtastic-Android/en/user/discovery.html" /> <meta property="og:site_name" content="Meshtastic Android" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="Discovery" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"Explore your mesh network — the Local Mesh Discovery scanner, traceroute paths, neighbor maps, and node discovery tools.","headline":"Discovery","url":"/Meshtastic-Android/en/user/discovery.html"}</script> <!-- End Jekyll SEO tag --> <!-- Inter font from Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> <style> /* M3-inspired typography */ :root { --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace; } body, .site-title, .search-input { font-family: var(--font-sans) !important; } code, pre, .highlight { font-family: var(--font-mono) !important; font-size: 0.875em; } /* M3 surface elevation & rounding */ .main-content table { border-radius: 12px; overflow: hidden; } .main-content blockquote { border-radius: 12px; padding: 1rem 1.25rem; border-left-width: 4px; } .main-content pre { border-radius: 12px; } .main-content code { border-radius: 6px; padding: 0.15em 0.4em; } /* Smooth transitions for theme switching */ body, .side-bar, .main, .main-content, .site-header, .search-input, .search-results, a { transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; } /* Theme toggle button styling */ .theme-toggle { background: none; border: 1px solid var(--border-color, #D5D6E0); border-radius: 20px; padding: 6px 12px; cursor: pointer; font-family: var(--font-sans); font-size: 0.75rem; font-weight: 500; display: inline-flex; align-items: center; gap: 6px; color: inherit; margin: 0 auto; transition: background-color 0.2s ease, border-color 0.2s ease; } .theme-toggle:hover { background-color: rgba(128, 128, 128, 0.1); } .theme-toggle-wrap { text-align: center; padding: 12px 0 4px; } /* Heading weight refinement */ h1, h2, h3, h4, h5, h6 { font-weight: 600; letter-spacing: -0.01em; } h1 { font-weight: 700; letter-spacing: -0.02em; } /* Smooth anchor scroll */ html { scroll-behavior: smooth; } /* Language switcher */ .language-switcher { display: inline-block; position: relative; margin-left: 8px; } .language-switcher-btn { cursor: pointer; font-size: 0.8rem; font-weight: 500; font-family: var(--font-sans); list-style: none; padding: 4px 10px; border: 1px solid var(--border-color, #D5D6E0); border-radius: 16px; display: inline-flex; align-items: center; gap: 4px; transition: background-color 0.2s ease; } .language-switcher-btn:hover { background-color: rgba(128, 128, 128, 0.1); } .language-switcher[open] .language-switcher-list { display: block; } .language-switcher-list { position: absolute; top: 100%; right: 0; left: auto; z-index: 100; list-style: none; padding: 8px 0; margin: 4px 0 0; min-width: 140px; background: var(--body-background-color, #fff); border: 1px solid var(--border-color, #D5D6E0); border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); } .language-switcher-list li { padding: 0; } .language-switcher-list a { display: block; padding: 6px 16px; text-decoration: none; font-size: 0.85rem; color: inherit; } .language-switcher-list a:hover { background-color: rgba(103, 234, 148, 0.15); } /* Version switcher (shares the language-switcher dropdown styling) */ .version-switcher { margin-left: 8px; } .version-switcher[hidden] { display: none; } /* Link out to the upstream meshtastic.org docs */ .upstream-docs-link { display: inline-flex; align-items: center; margin-left: 8px; padding: 4px 10px; border: 1px solid var(--border-color, #D5D6E0); border-radius: 16px; font-size: 0.8rem; font-weight: 500; font-family: var(--font-sans); text-decoration: none; color: inherit; transition: background-color 0.2s ease; } .upstream-docs-link:hover { background-color: rgba(128, 128, 128, 0.1); } </style> <script> // Respect OS preference on first visit, then remember user choice (function() { var stored = localStorage.getItem('jtd-theme'); if (stored) return; // will be applied by jtd.setTheme below if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { localStorage.setItem('jtd-theme', 'meshtastic-dark'); } })(); </script> </head> <body> <a class="skip-to-main" href="#main-content">Skip to main content</a> <svg xmlns="http://www.w3.org/2000/svg" class="d-none"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE --> <symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"> <title id="svg-external-link-title">(external link)</title> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md --> <symbol id="svg-copy" viewBox="0 0 16 16"> <title>Copy</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> </svg> </symbol> <symbol id="svg-copied" viewBox="0 0 16 16"> <title>Copied</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16"> <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/> </svg> </symbol> </svg> <header class="side-bar"> <div class="site-header"> <a href="/Meshtastic-Android/" class="site-title lh-tight"> Meshtastic Android </a> <button id="menu-button" class="site-button btn-reset" aria-label="Menu" aria-expanded="false"> <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> </button> </div> <nav aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="/Meshtastic-Android/en/" class="nav-list-link">Home</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="User Guide submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/Meshtastic-Android/en/user.html" class="nav-list-link">User Guide</a><ul class="nav-list"><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/onboarding.html" class="nav-list-link">Getting Started</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/connections.html" class="nav-list-link">Connections</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/messages-and-channels.html" class="nav-list-link">Messages & Channels</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/nodes.html" class="nav-list-link">Nodes</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/node-metrics.html" class="nav-list-link">Node Metrics</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/map-and-waypoints.html" class="nav-list-link">Map & Waypoints</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/settings-radio-user.html" class="nav-list-link">Settings — Radio & User</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/settings-module-admin.html" class="nav-list-link">Settings — Modules & Admin</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/telemetry-and-sensors.html" class="nav-list-link">Telemetry & Sensors</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/tak.html" class="nav-list-link">TAK Integration</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/mqtt.html" class="nav-list-link">MQTT</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/discovery.html" class="nav-list-link">Discovery</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/firmware.html" class="nav-list-link">Firmware Updates</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/desktop.html" class="nav-list-link">Desktop App</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/signal-meter.html" class="nav-list-link">How the Meshtastic Signal Meter Works</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/units-and-locale.html" class="nav-list-link">Units, Measurement & Locale</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/translate.html" class="nav-list-link">Translate the App</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/android-auto.html" class="nav-list-link">Android Auto</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/app-functions.html" class="nav-list-link">App Functions</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/widget.html" class="nav-list-link">Home Screen Widget</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/help-and-docs.html" class="nav-list-link">Help & In-App Docs</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/user/debug-logs.html" class="nav-list-link">Debug Logs</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Developer Guide submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/Meshtastic-Android/en/developer.html" class="nav-list-link">Developer Guide</a><ul class="nav-list"><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/architecture.html" class="nav-list-link">Architecture</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/codebase.html" class="nav-list-link">Codebase</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/adding-a-feature-module.html" class="nav-list-link">Adding a Feature Module</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/navigation-and-deep-links.html" class="nav-list-link">Navigation & Deep Links</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/transport.html" class="nav-list-link">Transport</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/persistence.html" class="nav-list-link">Persistence</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/testing.html" class="nav-list-link">Testing</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/contributing.html" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/measurement.html" class="nav-list-link">Measurement & Formatting</a></li><li class="nav-list-item"><a href="/Meshtastic-Android/en/developer/test-builds.html" class="nav-list-link">Test Builds & Obtainium</a></li></ul></li></ul> </nav> <div class="d-md-block d-sm-none"> <div class="site-footer"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </div> </div> </header> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search" role="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Meshtastic Android" autocomplete="off"> <label for="search-input" class="search-label"> <span class="sr-only">Search Meshtastic Android</span> <svg viewBox="0 0 24 24" class="search-icon" aria-hidden="true"><use xlink:href="#svg-search"></use></svg> </label> </div> <div id="search-results" class="search-results"></div> </div> <div class="theme-toggle-wrap"> <button class="theme-toggle" id="theme-toggle" aria-label="Toggle dark mode" title="Toggle light/dark theme" onclick="toggleMeshtasticTheme()"> <span id="theme-icon">🌙</span> <span id="theme-label">Dark</span> </button> <details class="language-switcher version-switcher" id="version-switcher" aria-label="Documentation version" hidden> <summary class="language-switcher-btn" title="Switch documentation version"> 🏷️ <span id="version-current"></span> </summary> <ul class="language-switcher-list" id="version-switcher-list"></ul> </details> <script> (function() { var baseurl = '/Meshtastic-Android'; var root = baseurl; var channel = 'latest'; // /main/, /vX.Y.Z/ or a prerelease snapshot like /v2.8.0-open.1/. var match = baseurl.match(/^(.*)\/(main|v\d+\.\d+\.\d+(?:-(?:open|closed)\.\d+)?)$/); if (match) { root = match[1]; channel = match[2]; } fetch(root + '/versions.json') .then(function(res) { return res.ok ? res.json() : Promise.reject(); }) .then(function(data) { var switcher = document.getElementById('version-switcher'); var list = document.getElementById('version-switcher-list'); var current = document.getElementById('version-current'); if (!switcher || !list || !current) return; // Keep the reader on the same page when switching channels; a page // that doesn't exist in the target version lands on the 404 page. var relativePath = location.pathname.slice(baseurl.length) + location.hash; var entries = []; if (data.latest) { entries.push({ id: 'latest', label: 'latest (v' + data.latest + ')', base: root }); } // Prereleases are documented ahead of general availability, so the track // is always spelled out — a reader must not mistake a closed-testing // snapshot for a shipped release. (data.prereleases || []).forEach(function(p) { entries.push({ id: p.dir, label: p.dir.replace(/^v/, 'v') + ' — ' + p.track + ' testing', base: root + '/' + p.dir }); }); if (data.hasMain) { entries.push({ id: 'main', label: 'main (unreleased snapshot)', base: root + '/main' }); } (data.versions || []).forEach(function(v) { entries.push({ id: 'v' + v, label: 'v' + v, base: root + '/v' + v }); }); var currentEntry = entries.filter(function(e) { return e.id === channel; })[0]; current.textContent = currentEntry ? currentEntry.label : channel; var others = entries.filter(function(e) { return e.id !== channel; }); if (others.length === 0) return; others.forEach(function(e) { var li = document.createElement('li'); var a = document.createElement('a'); a.href = e.base + relativePath; a.textContent = e.label; li.appendChild(a); list.appendChild(li); }); switcher.hidden = false; }) .catch(function() { /* no manifest (local build) — leave switcher hidden */ }); })(); </script> <details class="language-switcher" aria-label="Language options"> <summary class="language-switcher-btn" title="View in another language"> 🌐 <span class="lang-current">English</span> </summary> <ul class="language-switcher-list"> <li><a href="/Meshtastic-Android/ar-rSA/user/discovery" lang="ar-rSA" dir="rtl">العربية</a></li> <li><a href="/Meshtastic-Android/be-rBY/user/discovery" lang="be-rBY" >Беларуская</a></li> <li><a href="/Meshtastic-Android/bg-rBG/user/discovery" lang="bg-rBG" >Български</a></li> <li><a href="/Meshtastic-Android/ca-rES/user/discovery" lang="ca-rES" >Català</a></li> <li><a href="/Meshtastic-Android/cs-rCZ/user/discovery" lang="cs-rCZ" >Čeština</a></li> <li><a href="/Meshtastic-Android/de-rDE/user/discovery" lang="de-rDE" >Deutsch</a></li> <li><a href="/Meshtastic-Android/el-rGR/user/discovery" lang="el-rGR" >Ελληνικά</a></li> <li><a href="/Meshtastic-Android/es-rES/user/discovery" lang="es-rES" >Español</a></li> <li><a href="/Meshtastic-Android/et-rEE/user/discovery" lang="et-rEE" >Eesti</a></li> <li><a href="/Meshtastic-Android/fi-rFI/user/discovery" lang="fi-rFI" >Suomi</a></li> <li><a href="/Meshtastic-Android/fr-rFR/user/discovery" lang="fr-rFR" >Français</a></li> <li><a href="/Meshtastic-Android/ga-rIE/user/discovery" lang="ga-rIE" >Gaeilge</a></li> <li><a href="/Meshtastic-Android/gl-rES/user/discovery" lang="gl-rES" >Galego</a></li> <li><a href="/Meshtastic-Android/iw-rIL/user/discovery" lang="iw-rIL" dir="rtl">עברית</a></li> <li><a href="/Meshtastic-Android/hr-rHR/user/discovery" lang="hr-rHR" >Hrvatski</a></li> <li><a href="/Meshtastic-Android/ht-rHT/user/discovery" lang="ht-rHT" >Kreyòl Ayisyen</a></li> <li><a href="/Meshtastic-Android/hu-rHU/user/discovery" lang="hu-rHU" >Magyar</a></li> <li><a href="/Meshtastic-Android/is-rIS/user/discovery" lang="is-rIS" >Íslenska</a></li> <li><a href="/Meshtastic-Android/it-rIT/user/discovery" lang="it-rIT" >Italiano</a></li> <li><a href="/Meshtastic-Android/ja-rJP/user/discovery" lang="ja-rJP" >日本語</a></li> <li><a href="/Meshtastic-Android/ko-rKR/user/discovery" lang="ko-rKR" >한국어</a></li> <li><a href="/Meshtastic-Android/lt-rLT/user/discovery" lang="lt-rLT" >Lietuvių</a></li> <li><a href="/Meshtastic-Android/nl-rNL/user/discovery" lang="nl-rNL" >Nederlands</a></li> <li><a href="/Meshtastic-Android/no-rNO/user/discovery" lang="no-rNO" >Norsk</a></li> <li><a href="/Meshtastic-Android/pl-rPL/user/discovery" lang="pl-rPL" >Polski</a></li> <li><a href="/Meshtastic-Android/pt-rBR/user/discovery" lang="pt-rBR" >Português (Brasil)</a></li> <li><a href="/Meshtastic-Android/pt-rPT/user/discovery" lang="pt-rPT" >Português</a></li> <li><a href="/Meshtastic-Android/ro-rRO/user/discovery" lang="ro-rRO" >Română</a></li> <li><a href="/Meshtastic-Android/ru-rRU/user/discovery" lang="ru-rRU" >Русский</a></li> <li><a href="/Meshtastic-Android/sk-rSK/user/discovery" lang="sk-rSK" >Slovenčina</a></li> <li><a href="/Meshtastic-Android/sl-rSI/user/discovery" lang="sl-rSI" >Slovenščina</a></li> <li><a href="/Meshtastic-Android/sq-rAL/user/discovery" lang="sq-rAL" >Shqip</a></li> <li><a href="/Meshtastic-Android/sr-rLatn/user/discovery" lang="sr-rLatn" >Српски (Latinica)</a></li> <li><a href="/Meshtastic-Android/srp/user/discovery" lang="srp" >Српски (Ћирилица)</a></li> <li><a href="/Meshtastic-Android/sv-rSE/user/discovery" lang="sv-rSE" >Svenska</a></li> <li><a href="/Meshtastic-Android/tr-rTR/user/discovery" lang="tr-rTR" >Türkçe</a></li> <li><a href="/Meshtastic-Android/uk-rUA/user/discovery" lang="uk-rUA" >Українська</a></li> <li><a href="/Meshtastic-Android/zh-rCN/user/discovery" lang="zh-rCN" >中文 (简体)</a></li> <li><a href="/Meshtastic-Android/zh-rTW/user/discovery" lang="zh-rTW" >中文 (繁體)</a></li> </ul> </details> <a class="upstream-docs-link" href="https://meshtastic.org/docs/" title="Official Meshtastic documentation (meshtastic.org)">Meshtastic Docs ↗</a> </div> <script> function toggleMeshtasticTheme() { var current = localStorage.getItem('jtd-theme') || 'meshtastic'; var next = (current === 'meshtastic-dark') ? 'meshtastic' : 'meshtastic-dark'; if (typeof jtd !== 'undefined' && typeof jtd.setTheme === 'function') { jtd.setTheme(next); } localStorage.setItem('jtd-theme', next); var icon = document.getElementById('theme-icon'); var label = document.getElementById('theme-label'); if (icon && label) { icon.textContent = (next === 'meshtastic-dark') ? '☀️' : '🌙'; label.textContent = (next === 'meshtastic-dark') ? 'Light' : 'Dark'; } } // Apply stored/OS theme on page load (function() { var theme = localStorage.getItem('jtd-theme') || 'meshtastic'; // Sync toggle label immediately var icon = document.getElementById('theme-icon'); var label = document.getElementById('theme-label'); if (icon && label) { icon.textContent = (theme === 'meshtastic-dark') ? '☀️' : '🌙'; label.textContent = (theme === 'meshtastic-dark') ? 'Light' : 'Dark'; } // Apply theme once jtd is ready function tryApply() { if (typeof jtd !== 'undefined' && typeof jtd.setTheme === 'function') { jtd.setTheme(theme); } else { setTimeout(tryApply, 50); } } tryApply(); })(); </script> </div> <div class="main-content-wrap"> <nav aria-label="Breadcrumb" class="breadcrumb-nav"> <ol class="breadcrumb-nav-list"> <li class="breadcrumb-nav-list-item"><a href="/Meshtastic-Android/en/user.html">User Guide</a></li> <li class="breadcrumb-nav-list-item"><span>Discovery</span></li> </ol> </nav> <div id="main-content" class="main-content"> <main> <h1 id="discovery"> <a href="#discovery" class="anchor-heading" aria-labelledby="discovery"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Discovery </h1> <p>Discovery tools help you understand <strong>how</strong> your mesh network is connected — which nodes can hear each other, what paths messages take, and where bottlenecks or weak links exist.</p> <p>The app offers two complementary approaches:</p> <ul> <li><strong>Local Mesh Discovery (Scanner)</strong> — an automated mode that cycles your connected radio through different LoRa presets, listens on each, and ranks which preset performs best at your location.</li> <li><strong>Manual exploration</strong> — traceroute, Neighbor Info, and the node list, which you can use at any time to investigate specific paths and topology.</li> </ul><hr /> <h2 id="local-mesh-discovery-scanner"> <a href="#local-mesh-discovery-scanner" class="anchor-heading" aria-labelledby="local-mesh-discovery-scanner"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Local Mesh Discovery (Scanner) </h2> <p>Local Mesh Discovery is a dedicated scanning mode that helps you find the best LoRa modem preset for your location and see which nodes are active on each preset. It cycles your connected radio through one or more presets you choose, listens (or “dwells”) on each one for a set time to collect packets, then analyzes and ranks the results.</p> <p>Open it from <strong>Settings → Advanced → Local Mesh Discovery</strong>. On desktop, it has its own <strong>Settings → Local Mesh Discovery</strong> entry.</p> <blockquote> <p>⚠️ <strong>Note:</strong> Discovery temporarily changes your radio’s LoRa settings while it scans, then restores your original configuration when it finishes. Your device must be connected to run a scan.</p> </blockquote> <h3 id="setting-up-a-scan"> <a href="#setting-up-a-scan" class="anchor-heading" aria-labelledby="setting-up-a-scan"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Setting Up a Scan </h3> <p>Before starting, configure these controls:</p> <div class="table-wrapper"><table> <thead> <tr> <th>Control</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><strong>LoRa preset picker</strong></td> <td>Select one or more presets to scan. Discovery dwells on each selected preset in turn.</td> </tr> <tr> <td><strong>Dwell time</strong></td> <td>Time to listen on each preset. Choose from 1, 5, 15, 30, 45, 60, 90, 120, or 180 minutes. Longer dwell times collect more packets and give a clearer picture, but take longer.</td> </tr> <tr> <td><strong>Keep screen awake</strong></td> <td>Optional toggle that prevents the screen from sleeping during a long scan.</td> </tr> </tbody> </table></div> <p>The <strong>Start</strong> button stays disabled — with an explanation of why — until the scan can run. Common reasons it’s disabled:</p> <ul> <li>The device is <strong>not connected</strong>.</li> <li><strong>No presets</strong> have been selected to scan.</li> <li>The selected preset uses <strong>2.4 GHz</strong>, which your hardware doesn’t support.</li> </ul> <h3 id="live-progress"> <a href="#live-progress" class="anchor-heading" aria-labelledby="live-progress"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Live Progress </h3> <p>While a scan runs, Discovery shows its current stage:</p> <div class="table-wrapper"><table> <thead> <tr> <th>Stage</th> <th>What’s happening</th> </tr> </thead> <tbody> <tr> <td><strong>Preparing</strong></td> <td>Saving your current configuration and getting ready to scan.</td> </tr> <tr> <td><strong>Shifting to &lt;preset&gt;</strong></td> <td>Switching the radio to the next preset to test.</td> </tr> <tr> <td><strong>Reconnecting</strong></td> <td>Re-establishing the connection after the preset change.</td> </tr> <tr> <td><strong>Dwell</strong></td> <td>Listening on the current preset to collect packets, with a countdown to the next step.</td> </tr> <tr> <td><strong>Analysis</strong></td> <td>Processing the collected packets and ranking the presets.</td> </tr> <tr> <td><strong>Restoring</strong></td> <td>Putting your original LoRa configuration back.</td> </tr> </tbody> </table></div> <p><img src="../../assets/screenshots/discovery_dwell_progress.png" alt="Dwell countdown showing time remaining on the current preset" /></p> <h3 id="reading-the-results"> <a href="#reading-the-results" class="anchor-heading" aria-labelledby="reading-the-results"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Reading the Results </h3> <p>When the scan completes, Discovery presents a per-preset result card for each preset it tested, plus an overall summary.</p> <p><img src="../../assets/screenshots/discovery_preset_result.png" alt="Per-preset result card with ranking and collected metrics" /></p> <p>Metrics include:</p> <div class="table-wrapper"><table> <thead> <tr> <th>Metric</th> <th>What it tells you</th> </tr> </thead> <tbody> <tr> <td>RF health</td> <td>Overall quality of the radio environment on that preset.</td> </tr> <tr> <td>Channel utilization</td> <td>How busy the airwaves were during the dwell.</td> </tr> <tr> <td>Airtime</td> <td>Transmission time observed.</td> </tr> <tr> <td>Direct vs. relayed nodes</td> <td>How many mesh nodes were heard directly versus via a relay.</td> </tr> <tr> <td>Bad / duplicate packets</td> <td>Counts of corrupt and repeated packets, indicating congestion or interference.</td> </tr> </tbody> </table></div> <p>Additional features available from the results:</p> <ul> <li><strong>Scan History</strong> — saved sessions you can revisit; view or delete past scans.</li> <li><strong>Discovery Map</strong> — a map of the nodes found during the scan.</li> <li><strong>Report export</strong> — export a report as a PDF on Android, or as text on other platforms.</li> </ul> <blockquote> <p>💡 <strong>Tip:</strong> On Android, Discovery can generate an on-device AI summary (Gemini Nano) of your results. If the on-device model isn’t available, an algorithmic summary is used instead — so you always get a readable interpretation of the scan.</p> </blockquote><hr /> <h2 id="mesh-beacon"> <a href="#mesh-beacon" class="anchor-heading" aria-labelledby="mesh-beacon"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Mesh Beacon </h2> <p>Mesh Beacon lets nodes invite others to join their mesh. A beaconing node periodically broadcasts an invitation — optionally advertising a channel, region, and modem preset — that nearby devices can hear even before they share a configuration.</p> <p>Configure it under <strong>Settings → Module Config → Mesh Beacon</strong>:</p> <ul> <li><strong>Listen for beacons</strong> — receive invitations broadcast by other nodes.</li> <li><strong>Broadcast beacon</strong> — send your own invitation at a set interval, with an optional message and an offered channel.</li> </ul> <p>Received invitations appear as <strong>Mesh invitations</strong> cards on the Discovery screen. Each card shows the sender’s message plus the offered channel, region, preset, and signal quality, with these actions:</p> <ul> <li><strong>Join</strong> — switch to the offered channel and preset (retunes the radio and reboots). When the offer matches your current frequency slot, an <strong>Add channel</strong> action adds it without a reboot.</li> <li><strong>Discover</strong> — seed a Discovery scan with the offered preset so you can survey that mesh before joining (shown only when the beacon offers a preset).</li> <li><strong>Dismiss</strong> — ignore the invitation.</li> </ul> <p>Channels advertised by beacons also show up in the scan setup as <strong>Beacon channels</strong> — select one to include it as a scan target.</p><hr /> <h2 id="manual-exploration"> <a href="#manual-exploration" class="anchor-heading" aria-labelledby="manual-exploration"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Manual Exploration </h2> <p>The tools below are available at any time from the node list and node detail screens. Use them to investigate specific paths and build a topology picture, alongside or instead of a full scan.</p> <h2 id="traceroute"> <a href="#traceroute" class="anchor-heading" aria-labelledby="traceroute"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Traceroute </h2> <p>Traceroute reveals the exact path a message takes from your node to any other node on the mesh. It’s the single most useful tool for debugging connectivity problems.</p> <h3 id="running-a-traceroute"> <a href="#running-a-traceroute" class="anchor-heading" aria-labelledby="running-a-traceroute"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Running a Traceroute </h3> <ol> <li>Navigate to <strong>Nodes</strong> and tap the node you want to trace.</li> <li>On the node detail screen, tap <strong>Traceroute</strong>.</li> <li>The app sends a traceroute request and waits for the response.</li> <li>Results display each hop in order, with signal quality at every step.</li> </ol> <h3 id="reading-the-results-1"> <a href="#reading-the-results-1" class="anchor-heading" aria-labelledby="reading-the-results-1"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Reading the Results </h3> <p>A traceroute result looks like this:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You → Node A (SNR: 8.5, RSSI: -95) → Node B (SNR: 5.2, RSSI: -108) → Target
</code></pre></div></div> <p>Each hop represents a relay node that forwarded the message. The SNR and RSSI values at each hop tell you about the link quality on that specific segment.</p> <div class="table-wrapper"><table> <thead> <tr> <th>What to look for</th> <th>What it means</th> </tr> </thead> <tbody> <tr> <td>All hops show Good SNR (≥ −7 dB, green)</td> <td>Healthy path — messages flow reliably</td> </tr> <tr> <td>One hop shows Bad SNR (&lt; −15 dB, red)</td> <td>Weak link — this relay segment is fragile</td> </tr> <tr> <td>Many hops (4+)</td> <td>Long path — consider repositioning a node to shorten it</td> </tr> <tr> <td>Different path on retry</td> <td>Mesh is adapting — multiple routes exist (this is good!)</td> </tr> </tbody> </table></div> <blockquote> <p>💡 <strong>Tip:</strong> Run traceroute several times over a few minutes. If the path changes, your mesh has redundant routes — a sign of a well-connected network.</p> </blockquote> <h3 id="troubleshooting-with-traceroute"> <a href="#troubleshooting-with-traceroute" class="anchor-heading" aria-labelledby="troubleshooting-with-traceroute"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Troubleshooting with Traceroute </h3> <ul> <li><strong>“No route found”</strong> — The target node may be offline, out of range, or on a different channel. Check that both nodes share at least one channel with the same encryption key.</li> <li><strong>Traceroute times out</strong> — The path may be too long (exceeds hop limit) or a relay node is congested. Try increasing the hop limit in <strong>Settings → LoRa Config</strong>.</li> <li><strong>Asymmetric paths</strong> — A traceroute from A→B may take a different path than B→A. This is normal — radio propagation is not always symmetric.</li> </ul><hr /> <h2 id="neighbor-info"> <a href="#neighbor-info" class="anchor-heading" aria-labelledby="neighbor-info"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Neighbor Info </h2> <p>The Neighbor Info module lets each node broadcast a list of the nodes it can <strong>directly hear</strong> (single-hop). When multiple nodes share their neighbor lists, you can piece together a topology map of the entire mesh.</p> <h3 id="enabling-neighbor-info"> <a href="#enabling-neighbor-info" class="anchor-heading" aria-labelledby="enabling-neighbor-info"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Enabling Neighbor Info </h3> <ol> <li>Navigate to <strong>Settings → Module Config → Neighbor Info</strong>.</li> <li>Enable the module.</li> <li>Set the broadcast interval (default: 900 seconds / 15 minutes).</li> </ol> <p>Once enabled, your node periodically broadcasts its neighbor table. Other nodes with Neighbor Info enabled do the same.</p> <h3 id="viewing-neighbor-data"> <a href="#viewing-neighbor-data" class="anchor-heading" aria-labelledby="viewing-neighbor-data"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Viewing Neighbor Data </h3> <ul> <li>Open any node’s detail screen and look for the <strong>Neighbors</strong> section.</li> <li>Each neighbor entry shows the node that was directly heard and its signal quality.</li> <li>Combine neighbor data from multiple nodes to understand the full mesh topology.</li> </ul> <blockquote> <p>⚠️ <strong>Note:</strong> Neighbor Info increases airtime usage because every enabled node periodically broadcasts its neighbor list. On busy meshes with many nodes, consider longer broadcast intervals (3600 seconds or more) to avoid congestion.</p> </blockquote><hr /> <h2 id="node-list-as-a-discovery-tool"> <a href="#node-list-as-a-discovery-tool" class="anchor-heading" aria-labelledby="node-list-as-a-discovery-tool"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Node List as a Discovery Tool </h2> <p>The node list itself is a powerful discovery tool when you use its filtering and sorting features effectively.</p> <h3 id="finding-new-nodes"> <a href="#finding-new-nodes" class="anchor-heading" aria-labelledby="finding-new-nodes"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Finding New Nodes </h3> <ul> <li>Sort by <strong>Last heard</strong> to see the most recently active nodes at the top.</li> <li>Enable <strong>Include unknown</strong> to see nodes that have appeared on the mesh but haven’t sent user info yet — these are often newly powered-on devices.</li> </ul> <h3 id="assessing-connectivity"> <a href="#assessing-connectivity" class="anchor-heading" aria-labelledby="assessing-connectivity"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Assessing Connectivity </h3> <ul> <li>Sort by <strong>Hops away</strong> to see which nodes are directly reachable (0 hops) versus relayed.</li> <li>Sort by <strong>Distance</strong> to find nearby nodes and verify they’re reachable.</li> <li>Use <strong>Exclude MQTT</strong> to focus on nodes reachable over radio (not via internet bridge).</li> </ul> <h3 id="infrastructure-audit"> <a href="#infrastructure-audit" class="anchor-heading" aria-labelledby="infrastructure-audit"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Infrastructure Audit </h3> <ul> <li>Disable <strong>Exclude infrastructure</strong> to see Router, Router Late, and Client Base nodes.</li> <li>Check their signal quality and last-heard times to verify your infrastructure nodes are healthy.</li> </ul> <p>See <a href="nodes">Nodes</a> for full details on filtering and sorting options.</p><hr /> <h2 id="tips-for-mesh-exploration"> <a href="#tips-for-mesh-exploration" class="anchor-heading" aria-labelledby="tips-for-mesh-exploration"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Tips for Mesh Exploration </h2> <ul> <li><strong>Start with traceroute</strong> — it gives you immediate, actionable information about a specific path.</li> <li><strong>Enable Neighbor Info on key nodes</strong> — especially routers and repeaters, to build a picture of the backbone.</li> <li><strong>Check the map</strong> — node positions on the <a href="map-and-waypoints">Map</a> combined with signal data help you understand why some links are strong and others are weak.</li> <li><strong>Compare signal over time</strong> — use the <a href="signal-meter">Signal Meter</a> guide to interpret SNR and RSSI values correctly.</li> </ul><hr /> </main> <hr> <footer> <footer class="site-footer"> Copyright &copy; 2026 Meshtastic LLC. Distributed under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPL v3 License.</a> </footer> <div class="d-sm-block d-md-none"> <div class="mt-4 fs-2"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </div> </div> </footer> </div> </div> <div class="search-overlay"></div> </div> </body> </html>