mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-03 00:54:34 -04:00
2 lines
34 KiB
HTML
2 lines
34 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>How the Meshtastic Signal Meter Works | Meshtastic Android</title> <meta name="generator" content="Jekyll v4.4.1" /> <meta property="og:title" content="How the Meshtastic Signal Meter Works" /> <meta property="og:locale" content="ht_rHT" /> <meta name="description" content="How the signal meter rates quality from SNR relative to the LoRa modem preset — spread spectrum, presets, and what the bars really mean." /> <meta name="twitter:description" property="og:description" content="How the signal meter rates quality from SNR relative to the LoRa modem preset — spread spectrum, presets, and what the bars really mean." /> <link rel="canonical" href="/Meshtastic-Android/ht-rHT/user/signal-meter.html" /> <meta property="og:url" content="/Meshtastic-Android/ht-rHT/user/signal-meter.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="How the Meshtastic Signal Meter Works" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"How the signal meter rates quality from SNR relative to the LoRa modem preset — spread spectrum, presets, and what the bars really mean.","headline":"How the Meshtastic Signal Meter Works","url":"/Meshtastic-Android/ht-rHT/user/signal-meter.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">Kreyòl Ayisyen</span> </summary> <ul class="language-switcher-list"> <li><a href="/Meshtastic-Android/en/user/signal-meter" lang="en">English</a></li> <li><a href="/Meshtastic-Android/ar-rSA/user/signal-meter" lang="ar-rSA" dir="rtl">العربية</a></li> <li><a href="/Meshtastic-Android/be-rBY/user/signal-meter" lang="be-rBY" >Беларуская</a></li> <li><a href="/Meshtastic-Android/bg-rBG/user/signal-meter" lang="bg-rBG" >Български</a></li> <li><a href="/Meshtastic-Android/ca-rES/user/signal-meter" lang="ca-rES" >Català</a></li> <li><a href="/Meshtastic-Android/cs-rCZ/user/signal-meter" lang="cs-rCZ" >Čeština</a></li> <li><a href="/Meshtastic-Android/de-rDE/user/signal-meter" lang="de-rDE" >Deutsch</a></li> <li><a href="/Meshtastic-Android/el-rGR/user/signal-meter" lang="el-rGR" >Ελληνικά</a></li> <li><a href="/Meshtastic-Android/es-rES/user/signal-meter" lang="es-rES" >Español</a></li> <li><a href="/Meshtastic-Android/et-rEE/user/signal-meter" lang="et-rEE" >Eesti</a></li> <li><a href="/Meshtastic-Android/fi-rFI/user/signal-meter" lang="fi-rFI" >Suomi</a></li> <li><a href="/Meshtastic-Android/fr-rFR/user/signal-meter" lang="fr-rFR" >Français</a></li> <li><a href="/Meshtastic-Android/ga-rIE/user/signal-meter" lang="ga-rIE" >Gaeilge</a></li> <li><a href="/Meshtastic-Android/gl-rES/user/signal-meter" lang="gl-rES" >Galego</a></li> <li><a href="/Meshtastic-Android/iw-rIL/user/signal-meter" lang="iw-rIL" dir="rtl">עברית</a></li> <li><a href="/Meshtastic-Android/hr-rHR/user/signal-meter" lang="hr-rHR" >Hrvatski</a></li> <li><a href="/Meshtastic-Android/hu-rHU/user/signal-meter" lang="hu-rHU" >Magyar</a></li> <li><a href="/Meshtastic-Android/is-rIS/user/signal-meter" lang="is-rIS" >Íslenska</a></li> <li><a href="/Meshtastic-Android/it-rIT/user/signal-meter" lang="it-rIT" >Italiano</a></li> <li><a href="/Meshtastic-Android/ja-rJP/user/signal-meter" lang="ja-rJP" >日本語</a></li> <li><a href="/Meshtastic-Android/ko-rKR/user/signal-meter" lang="ko-rKR" >한국어</a></li> <li><a href="/Meshtastic-Android/lt-rLT/user/signal-meter" lang="lt-rLT" >Lietuvių</a></li> <li><a href="/Meshtastic-Android/nl-rNL/user/signal-meter" lang="nl-rNL" >Nederlands</a></li> <li><a href="/Meshtastic-Android/no-rNO/user/signal-meter" lang="no-rNO" >Norsk</a></li> <li><a href="/Meshtastic-Android/pl-rPL/user/signal-meter" lang="pl-rPL" >Polski</a></li> <li><a href="/Meshtastic-Android/pt-rBR/user/signal-meter" lang="pt-rBR" >Português (Brasil)</a></li> <li><a href="/Meshtastic-Android/pt-rPT/user/signal-meter" lang="pt-rPT" >Português</a></li> <li><a href="/Meshtastic-Android/ro-rRO/user/signal-meter" lang="ro-rRO" >Română</a></li> <li><a href="/Meshtastic-Android/ru-rRU/user/signal-meter" lang="ru-rRU" >Русский</a></li> <li><a href="/Meshtastic-Android/sk-rSK/user/signal-meter" lang="sk-rSK" >Slovenčina</a></li> <li><a href="/Meshtastic-Android/sl-rSI/user/signal-meter" lang="sl-rSI" >Slovenščina</a></li> <li><a href="/Meshtastic-Android/sq-rAL/user/signal-meter" lang="sq-rAL" >Shqip</a></li> <li><a href="/Meshtastic-Android/sr-rLatn/user/signal-meter" lang="sr-rLatn" >Српски (Latinica)</a></li> <li><a href="/Meshtastic-Android/srp/user/signal-meter" lang="srp" >Српски (Ћирилица)</a></li> <li><a href="/Meshtastic-Android/sv-rSE/user/signal-meter" lang="sv-rSE" >Svenska</a></li> <li><a href="/Meshtastic-Android/tr-rTR/user/signal-meter" lang="tr-rTR" >Türkçe</a></li> <li><a href="/Meshtastic-Android/uk-rUA/user/signal-meter" lang="uk-rUA" >Українська</a></li> <li><a href="/Meshtastic-Android/zh-rCN/user/signal-meter" lang="zh-rCN" >中文 (简体)</a></li> <li><a href="/Meshtastic-Android/zh-rTW/user/signal-meter" 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>How the Meshtastic Signal Meter Works</span></li> </ol> </nav> <div id="main-content" class="main-content"> <main> <div class="locale-page-banner" > <p class="locale-notice"> 🌐 <strong>Kreyòl Ayisyen</strong> — Community translation <a href="/Meshtastic-Android/en/user/signal-meter">View in English</a> </p> </div> <div lang="ht-rHT"> <h1 id="how-the-meshtastic-signal-meter-works"> <a href="#how-the-meshtastic-signal-meter-works" class="anchor-heading" aria-labelledby="how-the-meshtastic-signal-meter-works"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> How the Meshtastic Signal Meter Works </h1> <p>The Meshtastic signal meter — the familiar bars or status color in the app — is calculated very differently than the “bars” on a traditional cell phone or WiFi router.</p> <p>Most consumer devices simply measure how “loud” a signal is. However, because Meshtastic uses <strong>LoRa (Long Range)</strong> technology, its signal meter measures how <strong>clear</strong> the signal is, relative to the specific settings your mesh is using.</p><hr /> <h2 id="1-the-two-metrics-loudness-vs-clarity"> <a href="#1-the-two-metrics-loudness-vs-clarity" class="anchor-heading" aria-labelledby="1-the-two-metrics-loudness-vs-clarity"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 1. The Two Metrics: “Loudness” vs. “Clarity” </h2> <p>Every time the LoRa radio chip receives a message, it reports two measurements:</p> <ul> <li><strong>RSSI (Received Signal Strength Indicator):</strong> The <strong>loudness</strong> of the raw power hitting your antenna.</li> <li><strong>SNR (Signal-to-Noise Ratio):</strong> The <strong>clarity</strong> of the signal compared to the background static.</li> </ul> <blockquote> <p>💡 <strong>Tip:</strong> Here’s an analogy — imagine you are trying to hear a friend talking to you.</p> <ul> <li><strong>RSSI</strong> is how loud their voice is.</li> <li><strong>The Noise Floor</strong> is the background noise in the room (air conditioning, other people talking, traffic).</li> <li><strong>SNR</strong> is how easily you can distinguish your friend’s voice from the background noise.</li> </ul> </blockquote> <p>If your friend shouts at you at a deafening rock concert, the signal is incredibly loud (High RSSI), but you still can’t understand them because the background noise is louder (Bad SNR). Conversely, if your friend whispers to you in a dead-silent library, the signal is very weak (Low RSSI), but you can understand them perfectly (Great SNR).</p><hr /> <h2 id="2-the-magic-of-lora-hearing-below-the-noise-floor"> <a href="#2-the-magic-of-lora-hearing-below-the-noise-floor" class="anchor-heading" aria-labelledby="2-the-magic-of-lora-hearing-below-the-noise-floor"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 2. The Magic of LoRa: Hearing “Below the Noise Floor” </h2> <p>For standard radios (like FM or WiFi), if the background noise is louder than the signal (a negative SNR), the receiver just hears static.</p> <p>LoRa is special. It uses <strong>“Spread Spectrum”</strong> modulation, which allows the radio to mathematically pull a signal out of the air even when it is buried deep <em>underneath</em> the background noise. This is why you will frequently see <strong>negative SNR numbers</strong> in Meshtastic (e.g., -10 dB, which means the signal is 10 decibels weaker than the background static).</p> <p>Depending on which Meshtastic preset you are using (e.g., <code class="language-plaintext highlighter-rouge">LongFast</code> vs. <code class="language-plaintext highlighter-rouge">ShortFast</code>), the radio has a specific <strong>SNR Limit</strong> — the absolute maximum amount of noise it can tolerate before the message is completely lost to the static.</p><hr /> <h2 id="3-how-the-signal-meter-calculates-quality"> <a href="#3-how-the-signal-meter-calculates-quality" class="anchor-heading" aria-labelledby="3-how-the-signal-meter-calculates-quality"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 3. How the Signal Meter Calculates Quality </h2> <p>The app rates your signal quality (None, Bad, Fair, or Good) from <strong>SNR alone, measured relative to the preset’s SNR Limit</strong> — the demodulation floor described above. It deliberately does <strong>not</strong> factor RSSI into the rating: without the local noise floor, RSSI cannot tell you whether a signal is actually decodable, so SNR-versus-the-preset-limit is the meaningful measure. (RSSI is still displayed to you elsewhere.)</p> <p>Because the rating is relative to the preset limit, the <em>same</em> SNR can rate differently on different presets — <code class="language-plaintext highlighter-rouge">-15 dB</code> is healthy on <code class="language-plaintext highlighter-rouge">LongSlow</code> but unusable on <code class="language-plaintext highlighter-rouge">ShortFast</code>. Letting <code class="language-plaintext highlighter-rouge">limit</code> be the active preset’s SNR Limit, here is how the app picks the bars (or color):</p> <div class="table-wrapper"><table> <thead> <tr> <th>Level</th> <th>Bars</th> <th>Criteria</th> <th>Meaning</th> </tr> </thead> <tbody> <tr> <td>Bon</td> <td>3</td> <td>SNR <strong>above</strong> the preset’s <code class="language-plaintext highlighter-rouge">limit</code></td> <td>Signal is comfortably above the demodulation floor — healthy connection.</td> </tr> <tr> <td>Mwayen</td> <td>2</td> <td>less than <code class="language-plaintext highlighter-rouge">5.5 dB</code> below the <code class="language-plaintext highlighter-rouge">limit</code></td> <td>Decodable, but getting close to the floor.</td> </tr> <tr> <td>Move</td> <td>1</td> <td><code class="language-plaintext highlighter-rouge">5.5 dB</code> to <code class="language-plaintext highlighter-rouge">7.5 dB</code> below the <code class="language-plaintext highlighter-rouge">limit</code></td> <td>At the very edge of what the preset can recover.</td> </tr> <tr> <td>Pa gen</td> <td>0</td> <td>more than <code class="language-plaintext highlighter-rouge">7.5 dB</code> below the <code class="language-plaintext highlighter-rouge">limit</code></td> <td>Below the floor — transmission lost to noise.</td> </tr> </tbody> </table></div> <blockquote> <p><strong>Note:</strong> The fixed SNR thresholds you may have seen elsewhere (<code class="language-plaintext highlighter-rouge">-7 dB</code> / <code class="language-plaintext highlighter-rouge">-15 dB</code>) are now only used for coloring individual hops in traceroute results — not for the per-node signal meter described here.</p> </blockquote><hr /> <h2 id="4-what-this-means-for-you"> <a href="#4-what-this-means-for-you" class="anchor-heading" aria-labelledby="4-what-this-means-for-you"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> 4. What This Means for You </h2> <p>Because Meshtastic’s meter acts as a <strong>“Clarity Meter”</strong>, it behaves differently than what most people expect:</p> <blockquote> <p>💡 <strong>Tip:</strong> Don’t panic over low RSSI. You might see a seemingly terrible RSSI value like <code class="language-plaintext highlighter-rouge">-118 dBm</code>. On a cell phone, you would have zero bars. But if you have an SNR of <code class="language-plaintext highlighter-rouge">+2 dB</code>, Meshtastic will still show a strong signal! <em>The library is quiet, so the whisper is heard perfectly.</em></p> </blockquote> <blockquote> <p>⚠️ <strong>Warning:</strong> Watch out for local noise. If you hook up a massive antenna and see a great RSSI (e.g., <code class="language-plaintext highlighter-rouge">-90 dBm</code>) but your signal meter is only showing <strong>1 Bar (Bad)</strong>, you have a problem. It means you have local interference — perhaps a cheap power supply, a noisy computer, or a nearby radio tower — creating so much static that it is drowning out your mesh.</p> </blockquote> <h2 id="where-signal-information-appears"> <a href="#where-signal-information-appears" class="anchor-heading" aria-labelledby="where-signal-information-appears"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Where Signal Information Appears </h2> <p>In the app, signal data is shown in several places:</p> <ul> <li><strong>Node list</strong> — signal bars icon next to each node</li> <li><strong>Node detail</strong> — SNR, RSSI, and signal quality in the device metrics section</li> <li><strong>Traceroute</strong> — per-hop signal quality for each relay node</li> <li><strong>Signal metrics</strong> — historical SNR and RSSI data in the metrics charts</li> </ul> <p><img src="../../assets/screenshots/nodes_signal_info.png" alt="Node entry showing SNR, RSSI values and colored signal bars" /></p> <h2 id="related-topics"> <a href="#related-topics" class="anchor-heading" aria-labelledby="related-topics"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Related Topics </h2> <ul> <li><a href="nodes">Nodes</a> — where signal bars appear in the node list</li> <li><a href="node-metrics">Node Metrics</a> — SNR/RSSI history and the per-node signal quality reference</li> <li><a href="settings-radio-user">Settings — Radio & User</a> — modem presets and their SNR limits</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>
|