mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-03 00:54:34 -04:00
3 lines
40 KiB
HTML
3 lines
40 KiB
HTML
<!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 li a { background-image: none; } </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>尋找 | Meshtastic Android</title> <meta name="generator" content="Jekyll v4.4.1" /> <meta property="og:title" content="尋找" /> <meta property="og:locale" content="zh_rTW" /> <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/zh-rTW/user/discovery.html" /> <meta property="og:url" content="/Meshtastic-Android/zh-rTW/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="尋找" /> <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":"尋找","url":"/Meshtastic-Android/zh-rTW/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">中文 (繁體)</span> </summary> <ul class="language-switcher-list"> <li><a href="/Meshtastic-Android/en/user/discovery" lang="en">English</a></li> <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> </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"><span>尋找</span></li> </ol> </nav> <div id="main-content" class="main-content"> <main> <div class="locale-page-banner" > <p class="locale-notice"> 🌐 <strong>中文 (繁體)</strong> — Community translation <a href="/Meshtastic-Android/en/user/discovery">View in English</a> </p> </div> <div lang="zh-rTW"> <h1 id="尋找"> <a href="#尋找" class="anchor-heading" aria-labelledby="尋找"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 尋找 </h1> <p>探索工具可協助您了解 mesh 網路的連線方式——哪些節點彼此可以收到訊號、訊息所經過的路徑,以及哪裡存在瓶頸或訊號薄弱的連結。</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>描述說明</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 <preset></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="解讀結果"> <a href="#解讀結果" class="anchor-heading" aria-labelledby="解讀結果"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 解讀結果 </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>公制(公里/公尺)</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>頻道使用率</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="路由追蹤"> <a href="#路由追蹤" class="anchor-heading" aria-labelledby="路由追蹤"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 路由追蹤 </h2> <p>路由追蹤可顯示訊息從您的節點到 mesh 網路上任一節點所經過的確切路徑。 這是診斷連線問題最有效的工具。</p> <h3 id="執行路由追蹤"> <a href="#執行路由追蹤" class="anchor-heading" aria-labelledby="執行路由追蹤"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 執行路由追蹤 </h3> <ol> <li>前往「節點」,並點選您要追蹤的節點。</li> <li>在節點詳細資訊畫面上,點選「路由追蹤」。</li> <li>應用程式將發送路由追蹤請求並等待回應。</li> <li>結果將依序顯示每一個跳躍點,並呈現每個步驟的訊號品質。</li> </ol> <h3 id="解讀結果-1"> <a href="#解讀結果-1" class="anchor-heading" aria-labelledby="解讀結果-1"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 解讀結果 </h3> <p>路由追蹤結果的顯示方式如下:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你 → 裝置 A (SNR: 8.5, RSSI: -95) → 裝置 B (SNR: 5.2, RSSI: -108) → 目標
|
||
</code></pre></div></div> <p>每個跳躍點代表一個轉送該訊息的中繼節點。 每個跳躍點的 SNR 與 RSSI 數值可反映該路段的連線品質。</p> <div class="table-wrapper"><table> <thead> <tr> <th>判讀重點</th> <th>代表意義</th> </tr> </thead> <tbody> <tr> <td>All hops show Good SNR (≥ −7 dB, green)</td> <td>路徑狀況良好 — 訊息可穩定傳送</td> </tr> <tr> <td>One hop shows Bad SNR (< −15 dB, red)</td> <td>訊號薄弱 — 此中繼路段不穩定</td> </tr> <tr> <td>跳躍點過多(4 個以上)</td> <td>路徑過長 — 建議調整節點位置以縮短路徑</td> </tr> <tr> <td>重試時走不同路徑</td> <td>Mesh 網路正在自動調整 — 存在多條路由(這是好現象!)</td> </tr> </tbody> </table></div> <blockquote> <p>💡 提示:請在幾分鐘內多次執行路由追蹤。 若路徑發生變化,代表您的 mesh 網路具備備援路由 — 這是網路連線良好的象徵。</p> </blockquote> <h3 id="使用路由追蹤進行疑難排解"> <a href="#使用路由追蹤進行疑難排解" class="anchor-heading" aria-labelledby="使用路由追蹤進行疑難排解"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 使用路由追蹤進行疑難排解 </h3> <ul> <li>「找不到路由」— 目標節點可能已離線、超出範圍,或使用不同的頻道。 請確認兩個節點至少共用一個使用相同加密金鑰的頻道。</li> <li>「路由追蹤逾時」— 路徑可能過長(超過跳躍限制),或某中繼節點發生壅塞。 請嘗試在「設定 → LoRa 設定」中提高跳躍限制。</li> <li>非對稱路徑 — 從 A → B 的路由追蹤路徑,可能與 B → A 不同。 這屬於正常現象 — 無線電訊號的傳播並不總是對稱的。</li> </ul><hr /> <h2 id="鄰近節點資訊"> <a href="#鄰近節點資訊" class="anchor-heading" aria-labelledby="鄰近節點資訊"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 鄰近節點資訊 </h2> <p>鄰近節點資訊模組可讓每個節點廣播其可直接收到訊號的節點清單(單跳躍)。 當多個節點共享各自的鄰近節點清單時,您便可拼湊出整個 mesh 網路的拓撲圖。</p> <h3 id="啟用鄰近節點資訊"> <a href="#啟用鄰近節點資訊" class="anchor-heading" aria-labelledby="啟用鄰近節點資訊"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 啟用鄰近節點資訊 </h3> <ol> <li>前往「設定 → 模組設定 → 鄰近節點資訊」。</li> <li>啟用此模組。</li> <li>設定廣播間隔(預設:900 秒 / 15 分鐘)。</li> </ol> <p>啟用後,您的節點將定期廣播其鄰近節點列表。 其他已啟用鄰近節點資訊的節點也會執行相同動作。</p> <h3 id="檢視鄰近節點資料"> <a href="#檢視鄰近節點資料" class="anchor-heading" aria-labelledby="檢視鄰近節點資料"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 檢視鄰近節點資料 </h3> <ul> <li>開啟任一節點的詳細資訊畫面,並尋找「鄰近節點」區段。</li> <li>每筆鄰近節點記錄會顯示可直接收到訊號的節點及其訊號品質。</li> <li>結合多個節點的鄰近節點資料,以了解完整的 mesh 網路拓撲。</li> </ul> <blockquote> <p>⚠️ 注意:鄰近節點資訊會增加無線電佔用時間,因為每個已啟用的節點會定期廣播其鄰近節點清單。 在節點眾多的繁忙 mesh 網路中,建議設定較長的廣播間隔(3600 秒以上)以避免壅塞。</p> </blockquote><hr /> <h2 id="將節點清單作為探索工具"> <a href="#將節點清單作為探索工具" class="anchor-heading" aria-labelledby="將節點清單作為探索工具"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 將節點清單作為探索工具 </h2> <p>善用節點清單的篩選與排序功能,即可將其作為強大的探索工具。</p> <h3 id="尋找新節點"> <a href="#尋找新節點" class="anchor-heading" aria-labelledby="尋找新節點"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 尋找新節點 </h3> <ul> <li>依「最後收到訊號」排序,可將最近有活動的節點顯示於頂部。</li> <li>啟用「包含未知節點」,可顯示已出現於 mesh 網路但尚未傳送使用者資訊的節點 — 這些通常是剛開機的裝置。</li> </ul> <h3 id="評估連線狀況"> <a href="#評估連線狀況" class="anchor-heading" aria-labelledby="評估連線狀況"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 評估連線狀況 </h3> <ul> <li>依「跳躍距離」排序,可區分可直接到達的節點(0 個跳躍點)與需中繼轉送的節點。</li> <li>依「距離」排序,可找出附近的節點並確認是否可到達。</li> <li>使用「排除 MQTT」,可專注於透過無線電(而非網際網路橋接)可到達的節點。</li> </ul> <h3 id="基礎架構稽核"> <a href="#基礎架構稽核" class="anchor-heading" aria-labelledby="基礎架構稽核"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 基礎架構稽核 </h3> <ul> <li>Disable <strong>Exclude infrastructure</strong> to see Router, Router Late, and Client Base nodes.</li> <li>檢查其訊號品質與最後收到訊號的時間,以確認基礎架構節點運作正常。</li> </ul> <p>請參閱〔節點〕(nodes) 以了解完整的篩選與排序選項說明。</p><hr /> <h2 id="mesh-網路探索技巧"> <a href="#mesh-網路探索技巧" class="anchor-heading" aria-labelledby="mesh-網路探索技巧"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Mesh 網路探索技巧 </h2> <ul> <li>從路由追蹤開始 — 可立即取得特定路徑的具體可行資訊。</li> <li>在關鍵節點上啟用鄰近節點資訊 — 尤其是路由器與中繼器,以建立骨幹網路的整體概況。</li> <li>查看地圖 —〔地圖〕(map-and-waypoints) 上的節點位置結合訊號資料,有助於了解為何某些連結訊號強,而其他連結訊號弱。</li> <li>比較訊號變化趨勢 — 請參閱〔訊號儀表〕(signal-meter) 指南,以正確解讀 SNR 與 RSSI 數值。</li> </ul><hr /> </div> <style> .locale-page-banner { background: rgba(103, 234, 148, 0.1); border: 1px solid rgba(103, 234, 148, 0.3); border-radius: 12px; padding: 10px 16px; margin-bottom: 1.5rem; font-size: 0.85rem; } .locale-notice a { margin-left: 12px; font-weight: 500; } </style> </main> <hr> <footer> <footer class="site-footer"> Copyright © 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>
|