Files
2026-10-27 03:21:26 +00:00

3137 lines
60 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the open source MeshCore firmware">
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/telemetry_decoder/">
<link rel="prev" href="../filter_tool/">
<link rel="next" href="../management_decoder/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.8.0">
<title>Telemetry decoder - MeshCore Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.57a0d79d.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../_stylesheets/notification_builder.css?v=20261006-channel9">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<link rel="stylesheet" href="../_stylesheets/extra.css">
<link rel="stylesheet" href="../_stylesheets/firmware_picker.css?v=20261013-pick-first-1">
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css?v=20261022-noise-history">
<link rel="stylesheet" href="../_stylesheets/management_decoder.css">
<link rel="stylesheet" href="../_stylesheets/filter_tool.css">
<link rel="stylesheet" href="../_stylesheets/preset_test.css?v=20260923-2">
<link rel="stylesheet" href="../_stylesheets/esp32_partition_catalog.css?v=20261001-1">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#telemetry-decoder" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="MeshCore Docs" class="md-header__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
<img src="../_assets/meshcore.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
MeshCore Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Telemetry decoder
</span>
</div>
</div>
</div>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
mikecarper/MeshCore
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="MeshCore Docs" class="md-nav__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
<img src="../_assets/meshcore.svg" alt="logo">
</a>
MeshCore Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
mikecarper/MeshCore
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Firmware and tools
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Firmware and tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../firmware_picker/" class="md-nav__link">
<span class="md-ellipsis">
Firmware picker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../notifications/" class="md-nav__link">
<span class="md-ellipsis">
Notifications
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../preset_test/" class="md-nav__link">
<span class="md-ellipsis">
Preset test
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../filter_tool/" class="md-nav__link">
<span class="md-ellipsis">
Filter tool
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Telemetry decoder
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Telemetry decoder
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#send-raw-telemetry-packets" class="md-nav__link">
<span class="md-ellipsis">
Send raw telemetry packets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#find-telemetry-packets" class="md-nav__link">
<span class="md-ellipsis">
Find telemetry packets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#decode-a-packet" class="md-nav__link">
<span class="md-ellipsis">
Decode a packet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#analyzer-hex-examples" class="md-nav__link">
<span class="md-ellipsis">
Analyzer hex examples
</span>
</a>
<nav class="md-nav" aria-label="Analyzer hex examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#temperature" class="md-nav__link">
<span class="md-ellipsis">
Temperature
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#battery-voltage" class="md-nav__link">
<span class="md-ellipsis">
Battery voltage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#external-i2c-voltage" class="md-nav__link">
<span class="md-ellipsis">
External I2C voltage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#radio1-noise-floor" class="md-nav__link">
<span class="md-ellipsis">
Radio1 noise floor
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#cli-history-pages" class="md-nav__link">
<span class="md-ellipsis">
CLI history pages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reading-the-table" class="md-nav__link">
<span class="md-ellipsis">
Reading the table
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../management_decoder/" class="md-nav__link">
<span class="md-ellipsis">
Management decoder
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Documentation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" >
<label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
<span class="md-ellipsis">
Getting started and features
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1">
<span class="md-nav__icon md-icon"></span>
Getting started and features
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../faq/" class="md-nav__link">
<span class="md-ellipsis">
Faq
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../full_profiles/" class="md-nav__link">
<span class="md-ellipsis">
Full profiles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../role_feature_switches/" class="md-nav__link">
<span class="md-ellipsis">
Role feature switches
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../full_companion_features/" class="md-nav__link">
<span class="md-ellipsis">
Full companion features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../companion_radio_full/" class="md-nav__link">
<span class="md-ellipsis">
Companion radio full
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../full_companion_usb_switcher/" class="md-nav__link">
<span class="md-ellipsis">
Full companion usb switcher
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../companion_offline_queue/" class="md-nav__link">
<span class="md-ellipsis">
Companion offline queue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../halo_keymind_settings/" class="md-nav__link">
<span class="md-ellipsis">
Halo keymind settings
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" >
<label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
<span class="md-ellipsis">
Firmware updates and partitions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Firmware updates and partitions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../upgrading_1.17.1.8_to_1.17.1.9/" class="md-nav__link">
<span class="md-ellipsis">
Upgrading 1.17.1.8 to 1.17.1.9
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_user_guide/" class="md-nav__link">
<span class="md-ellipsis">
Ota user guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_easy/" class="md-nav__link">
<span class="md-ellipsis">
Ota easy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_wizard/" class="md-nav__link">
<span class="md-ellipsis">
Ota wizard
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lora_ota_automation/" class="md-nav__link">
<span class="md-ellipsis">
Lora ota automation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_station_g2_to_ikoka_stick/" class="md-nav__link">
<span class="md-ellipsis">
Ota station g2 to ikoka stick
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_nrf52_bootloader_update/" class="md-nav__link">
<span class="md-ellipsis">
Ota nrf52 bootloader update
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_nrf52_qspi/" class="md-nav__link">
<span class="md-ellipsis">
Ota nrf52 qspi
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
<span class="md-ellipsis">
Ota meshtower v2 sdcard
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../esp32_partition_catalog/" class="md-nav__link">
<span class="md-ellipsis">
Esp32 partition catalog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../esp32_wifi_partition_migration/" class="md-nav__link">
<span class="md-ellipsis">
Esp32 wifi partition migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../heltec_v4_wifi_partition_migration/" class="md-nav__link">
<span class="md-ellipsis">
Heltec v4 wifi partition migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../host_cli_service/" class="md-nav__link">
<span class="md-ellipsis">
Host cli service
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
<label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
<span class="md-ellipsis">
Radio, networking, and power
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Radio, networking, and power
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../radio_profiles/" class="md-nav__link">
<span class="md-ellipsis">
Radio profiles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../radio_presets/" class="md-nav__link">
<span class="md-ellipsis">
Radio presets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../fleet_management/" class="md-nav__link">
<span class="md-ellipsis">
Private fleet management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../room_services/" class="md-nav__link">
<span class="md-ellipsis">
Room services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../carrier_wave/" class="md-nav__link">
<span class="md-ellipsis">
Carrier wave
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../espnow_bridge_setup/" class="md-nav__link">
<span class="md-ellipsis">
Espnow bridge setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rs232_bridge_setup/" class="md-nav__link">
<span class="md-ellipsis">
Rs232 bridge setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../udp_bridge_setup/" class="md-nav__link">
<span class="md-ellipsis">
Udp bridge setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../WiFi/" class="md-nav__link">
<span class="md-ellipsis">
WiFi
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../flood_filtering/" class="md-nav__link">
<span class="md-ellipsis">
Flood filtering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gps_tracking/" class="md-nav__link">
<span class="md-ellipsis">
Gps tracking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../companion_lost_reply/" class="md-nav__link">
<span class="md-ellipsis">
Companion lost reply
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sensor_tracker/" class="md-nav__link">
<span class="md-ellipsis">
Sensor tracker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nrf52_power_management/" class="md-nav__link">
<span class="md-ellipsis">
Nrf52 power management
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" >
<label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0">
<span class="md-ellipsis">
CLI and protocol reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
CLI and protocol reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cli_commands/" class="md-nav__link">
<span class="md-ellipsis">
Cli commands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli_build_matrix/" class="md-nav__link">
<span class="md-ellipsis">
Cli build matrix
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli_command_availability/" class="md-nav__link">
<span class="md-ellipsis">
Cli command availability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../terminal_chat_cli/" class="md-nav__link">
<span class="md-ellipsis">
Terminal chat cli
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../companion_protocol/" class="md-nav__link">
<span class="md-ellipsis">
Companion protocol
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../kiss_modem_protocol/" class="md-nav__link">
<span class="md-ellipsis">
Kiss modem protocol
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../packet_format/" class="md-nav__link">
<span class="md-ellipsis">
Packet format
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../payloads/" class="md-nav__link">
<span class="md-ellipsis">
Payloads
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ota_protocol/" class="md-nav__link">
<span class="md-ellipsis">
Ota protocol
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../management_reports/" class="md-nav__link">
<span class="md-ellipsis">
Management reports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../stats_binary_frames/" class="md-nav__link">
<span class="md-ellipsis">
Stats binary frames
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../number_allocations/" class="md-nav__link">
<span class="md-ellipsis">
Number allocations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qr_codes/" class="md-nav__link">
<span class="md-ellipsis">
Qr codes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../docs/" class="md-nav__link">
<span class="md-ellipsis">
Docs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../research/" class="md-nav__link">
<span class="md-ellipsis">
Research
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Releases
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../releases/1.18.0.1/" class="md-nav__link">
<span class="md-ellipsis">
Current - 1.18.0.1 USA Cascade
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-ellipsis">
Previous releases
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
Previous releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../releases/1.17.1.9/" class="md-nav__link">
<span class="md-ellipsis">
1.17.1.9 USA Cascade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../releases/1.17.1.8/" class="md-nav__link">
<span class="md-ellipsis">
1.17.1.8 USA Cascade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../old-releases/" class="md-nav__link">
<span class="md-ellipsis">
Older releases
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../test-results/" class="md-nav__link">
<span class="md-ellipsis">
Test Results
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#send-raw-telemetry-packets" class="md-nav__link">
<span class="md-ellipsis">
Send raw telemetry packets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#find-telemetry-packets" class="md-nav__link">
<span class="md-ellipsis">
Find telemetry packets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#decode-a-packet" class="md-nav__link">
<span class="md-ellipsis">
Decode a packet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#analyzer-hex-examples" class="md-nav__link">
<span class="md-ellipsis">
Analyzer hex examples
</span>
</a>
<nav class="md-nav" aria-label="Analyzer hex examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#temperature" class="md-nav__link">
<span class="md-ellipsis">
Temperature
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#battery-voltage" class="md-nav__link">
<span class="md-ellipsis">
Battery voltage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#external-i2c-voltage" class="md-nav__link">
<span class="md-ellipsis">
External I2C voltage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#radio1-noise-floor" class="md-nav__link">
<span class="md-ellipsis">
Radio1 noise floor
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#cli-history-pages" class="md-nav__link">
<span class="md-ellipsis">
CLI history pages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reading-the-table" class="md-nav__link">
<span class="md-ellipsis">
Reading the table
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/telemetry_decoder.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<!-- meshcore-hosted-doc-link:start -->
<p class="meshcore-hosted-doc-link"><a href="https://mikecarper.github.io/MeshCore/telemetry_decoder/">View this page on MeshCore Docs</a>.</p>
<!-- meshcore-hosted-doc-link:end -->
<h1 id="telemetry-decoder">Telemetry decoder</h1>
<p>The decoder runs on the documentation website. GitHub's Markdown preview shows
the instructions but cannot run the decoder's buttons or JavaScript.</p>
<p>Paste raw hexadecimal packet data copied from the
<a href="https://analyzer.letsmesh.net/packets">Let's Mesh packet analyzer</a> to decode a
repeater's temperature, battery-voltage, external I2C-voltage, or radio noise-floor
snapshot. The decoder also accepts the payload hex without its MeshCore packet
header and the Base64 pages returned by repeater or room-server CLI commands.
Decoding happens entirely in this browser; pasted data is not uploaded or sent
anywhere.</p>
<p>The <strong>Source ID</strong> in a raw-packet result is the first eight bytes of the sending
repeater's public key. Match that 16-character hex value against the public-key
prefix recorded for your repeaters. It comes from the telemetry payload itself,
so it is available even when only the payload was copied.</p>
<h2 id="send-raw-telemetry-packets">Send raw telemetry packets</h2>
<p>These transmission commands and packet-type selections are repeater-only.
Room servers provide local history and CLI reads without transmission batches.</p>
<p>From an administrator CLI session, first configure a direct route to the MQTT
observer that will receive and upload the raw packets. Use <code>direct</code> when the
observer is a zero-hop neighbor:</p>
<pre><code class="language-text">set data.tx path direct
send telemetry.tx now
</code></pre>
<p>For a routed observer, provide its comma-separated hop hashes instead:</p>
<pre><code class="language-text">set data.tx path A1B2,C3D4
send telemetry.tx now
</code></pre>
<p>Telemetry with a non-empty hop path uses the existing direct-message echo
retries, following <code>direct.retry</code>, <code>direct.retry.count</code>, <code>direct.retry.heard</code>,
and the direct-retry coding-rate policy. Retries stop when a matching downstream
forwarding echo is heard. The default zero-hop <code>direct</code> route does not use echo retries.
Updated relays can retry their own forwarding hop; stock relays remain compatible
and their forwarding can provide the echo. This adds no packet format or ACK:
an echo confirms forwarding, not final delivery to the observer. A queue failure
still retries only the packet that failed to queue, after 30 minutes.</p>
<p>The shared route does not enable telemetry. Automatic telemetry is off on a
fresh install; to explicitly keep the route manual-only before sending:</p>
<pre><code class="language-text">set telemetry.tx schedule off
send telemetry.tx now
</code></pre>
<p>Choose which packet types to send with these saved settings:</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Data</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>telemetry.tx.temp</code></td>
<td>Temperature (<code>TTB1</code>)</td>
</tr>
<tr>
<td><code>telemetry.tx.volt</code></td>
<td>Battery voltage (<code>TVB1</code>)</td>
</tr>
<tr>
<td><code>telemetry.tx.volt.i2c</code></td>
<td>External I2C voltage (<code>IVB1</code>), all channels</td>
</tr>
<tr>
<td><code>telemetry.tx.noise</code></td>
<td>Main-radio noise floor (<code>N1B1</code>)</td>
</tr>
<tr>
<td><code>telemetry.tx.noise2</code></td>
<td>Radio2 noise floor (<code>N2B1</code>)</td>
</tr>
</tbody>
</table>
<p>All five default to <code>on</code>. Read one with <code>get telemetry.tx.temp</code>, change it
with <code>set telemetry.tx.temp &lt;on|off&gt;</code>, or inspect all five with
<code>get telemetry.tx.types</code>. <code>set telemetry.tx.types on|off</code> changes all five.
The choices apply to manual and scheduled sends. They do not enable the master
schedule or stop history collection and CLI reads. GPS is never included in
these packets.</p>
<p>For example, send only battery voltage:</p>
<pre><code class="language-text">set telemetry.tx.types off
set telemetry.tx.volt on
send telemetry.tx now
</code></pre>
<p>With all types off, a manual send returns
<code>Err - no telemetry packet types enabled</code>. If the selected types have no data
available, it returns <code>Err - no enabled telemetry data available</code>.</p>
<p>With all types selected, <code>send telemetry.tx now</code> queues one <code>TTB1</code> temperature
packet, one <code>TVB1</code> battery-voltage packet, and <code>IVB1</code> chunks for every connected
I2C voltage channel. <code>TTB1</code> and <code>TVB1</code> carry up to 165 samples. Each <code>IVB1</code>
carries 64, so a full 192-point/four-day channel takes three packets. Channels
whose retained history is entirely zero are treated as disconnected and are
not sent. The
command works even when the automatic schedule is off. Selected I2C or noise
data can be sent without a collected temperature or battery sample.</p>
<p>Packets in manual and scheduled batches are queued 90 seconds apart. Channel
activity and airtime limits can delay actual transmission further. Turning a
type off cancels only its batch work that has not yet been queued; packets
already queued can still transmit. Remaining work keeps the same pacing.
Turning a type on includes it in the next batch.</p>
<p>When selected, it also queues a <code>N1B1</code> noise-floor packet once the main radio
has completed a 15-minute history bucket. With radio2 enabled and <code>noise2</code>
selected, it queues a separate <code>N2B1</code> packet once that profile has a completed
bucket. Each holds the latest 255 positions: up to 63 hours 45 minutes at
15-minute resolution. A position can be Missing; failed measurements do not
silently shorten the timeline.
The automatic transmission cadence and startup wait for 165 half-hour base
positions (about 82.5 hours) are unchanged, including when only noise or I2C
transmission is selected. Recording a new noise-floor position every 15 minutes
does not transmit a packet every 15 minutes.</p>
<p>Use <code>get telemetry.tx</code> to see the source ID, path, and <code>last=30s</code>, <code>last=30m</code>,
or <code>last=2h</code> for the age of this node's latest completed telemetry transmission.
The age includes completed retries and manual sends while the schedule is off,
but excludes queue acceptance and relayed packets; it does not confirm observer
receipt. It shows <code>last=never</code> until the first completed send after each reboot.
The age uses uptime rather than the clock, and durations of a day or more remain
in hours, such as <code>last=48h</code>.</p>
<p>Schedule changes are saved transactionally; a failed write does not truncate
the previous preferences. A legacy route must be successfully migrated into
<code>data.tx</code> before its schedule can run. Corrupt, unreadable, or ambiguously
committed preferences stop automatic and pending sends. <code>get telemetry.tx</code>
shows <code>fault=prefs</code>, and manual sends return an error instead of acknowledging
work that cannot run. Such a storage fault must be repaired before settings
can be changed; the firmware does not overwrite an unmigrated legacy file.</p>
<h2 id="find-telemetry-packets">Find telemetry packets</h2>
<p><a href="https://analyzer.cascadiamesh.org/#/packets?timeWindow=2880&amp;filter=type%20%3D%3D%20RAW_CUSTOM%20%26%26%20age%20%3C%202d%20%26%26%20%28payload.raw%20starts_with%20%2254544231%22%20%7C%7C%20payload.raw%20starts_with%20%2254564231%22%20%7C%7C%20payload.raw%20starts_with%20%2249564231%22%20%7C%7C%20payload.raw%20starts_with%20%224E314231%22%20%7C%7C%20payload.raw%20starts_with%20%224E324231%22%29">Open the two-day telemetry view in CascadiaMesh Analyzer</a>.
The link selects RAW_CUSTOM packets whose data starts with
any of the five telemetry prefixes below. To use the filter box directly, paste
this as one line:</p>
<pre><code class="language-text">type == RAW_CUSTOM &amp;&amp; age &lt; 2d &amp;&amp; (payload.raw starts_with &quot;54544231&quot; || payload.raw starts_with &quot;54564231&quot; || payload.raw starts_with &quot;49564231&quot; || payload.raw starts_with &quot;4E314231&quot; || payload.raw starts_with &quot;4E324231&quot;)
</code></pre>
<table>
<thead>
<tr>
<th>Data</th>
<th>Payload tag</th>
<th>Hex prefix</th>
</tr>
</thead>
<tbody>
<tr>
<td>Temperature</td>
<td><code>TTB1</code></td>
<td><code>54544231</code></td>
</tr>
<tr>
<td>Battery voltage</td>
<td><code>TVB1</code></td>
<td><code>54564231</code></td>
</tr>
<tr>
<td>External I2C voltage</td>
<td><code>IVB1</code></td>
<td><code>49564231</code></td>
</tr>
<tr>
<td>Main-radio noise floor</td>
<td><code>N1B1</code></td>
<td><code>4E314231</code></td>
</tr>
<tr>
<td>Radio2 noise floor</td>
<td><code>N2B1</code></td>
<td><code>4E324231</code></td>
</tr>
</tbody>
</table>
<p><code>&amp;&amp;</code> requires every condition; <code>||</code> accepts any listed prefix.
<code>payload.raw</code> starts at the application data, after the routing bytes.</p>
<p>The URL uses <code>timeWindow=2880</code> (two days in minutes). The explicit
<code>age &lt; 2d</code> condition preserves that cutoff when refreshing, since the analyzer's
time dropdown only offers fixed windows up to 24 hours. Packet retention and
loading limits still apply: the current server returns at most 10,000 packets,
and mobile clients load at most 1,000, so a busy network may show less than
two days.</p>
<h2 id="decode-a-packet">Decode a packet</h2>
<p>If you are reading this on GitHub, <a href="https://mikecarper.github.io/MeshCore/telemetry_decoder/#decode-a-packet">open the working decoder on the documentation
website</a>
to paste a packet, load an example, or download CSV.</p>
<div class="telemetry-tool" data-telemetry-decoder>
<p>Enable JavaScript on the documentation website to use the decoder.</p>
</div>
<h2 id="analyzer-hex-examples">Analyzer hex examples</h2>
<p>The buttons load synthetic, protocol-valid zero-hop RAW_CUSTOM packets. A real
snapshot can contain many more samples. Routed packets
also contain path bytes before the telemetry payload magic; the decoder
finds and validates the payload automatically.</p>
<h3 id="temperature">Temperature</h3>
<pre><code class="language-text">3E00545442311122334455667788800092651E0008000102354A4E5082
</code></pre>
<h3 id="battery-voltage">Battery voltage</h3>
<pre><code class="language-text">3E00545642311122334455667788800092651E000800010264C8FEFFDC
</code></pre>
<h3 id="external-i2c-voltage">External I2C voltage</h3>
<pre><code class="language-text">3E00495642311122334455667788800092651E00020800000004019026927109C427107FFF
</code></pre>
<h3 id="radio1-noise-floor">Radio1 noise floor</h3>
<pre><code class="language-text">3E004E3142311122334455667788800092650F00080044CB77DF
</code></pre>
<p>All four examples identify the source as <code>1122334455667788</code>.</p>
<h2 id="cli-history-pages">CLI history pages</h2>
<p>The same page continues to decode the padded Base64 returned by these
administrator commands:</p>
<table>
<thead>
<tr>
<th>Data</th>
<th>Newest page</th>
<th>Older-page example</th>
<th>Samples per page</th>
</tr>
</thead>
<tbody>
<tr>
<td>MCU temperature</td>
<td><code>get telemetry.temp</code></td>
<td><code>get telemetry.temp 2</code></td>
<td>48 (24 hours)</td>
</tr>
<tr>
<td>Battery voltage</td>
<td><code>get telemetry.volt</code></td>
<td><code>get telemetry.volt 3</code></td>
<td>48 (24 hours)</td>
</tr>
<tr>
<td>I2C voltage</td>
<td><code>get telemetry.volt.i2c 2</code></td>
<td><code>get telemetry.volt.i2c 2 4</code></td>
<td>48 (24 hours)</td>
</tr>
<tr>
<td>GPS position</td>
<td><code>get telemetry.gps</code></td>
<td><code>get telemetry.gps 2</code></td>
<td>24 (12 hours)</td>
</tr>
<tr>
<td>Main-radio noise floor</td>
<td><code>get telemetry.noise</code></td>
<td><code>get telemetry.noise 2</code></td>
<td>Up to 176 (44 hours)</td>
</tr>
<tr>
<td>Radio2 noise floor</td>
<td><code>get telemetry.noise2</code></td>
<td><code>get telemetry.noise2 2</code></td>
<td>Up to 176 (44 hours)</td>
</tr>
</tbody>
</table>
<p>Paste either the complete reply beginning with <code>&gt;</code> or Base64 alone. For
noise replies, the optional two-character CLI correlation prefix is accepted
too (<code>01|Base64</code> or <code>01|&gt; Base64</code>). For example:</p>
<pre><code class="language-text">get telemetry.volt 1
&gt; EkDUcWoeMAAB5+bl5eTj4uLh4ODf3t7d3Nvb2tnZ2NfX1tXU1NPS0tHQ0M/Ozc3My8vKycnI/w==
</code></pre>
<p>Run <code>get telemetry.volt.i2c</code> without a channel first to list connected
channels. For each channel, collect pages <code>1</code> through <code>4</code>. Paste all four reply
lines into the decoder at once; it merges their timestamps into one 192-point,
four-day table and downloads them as one CSV. The same merging works for the
three <code>IVB1</code> analyzer packets from a full channel. Inputs must have the same
telemetry type, source, LPP channel, radio profile, and sample interval.</p>
<p>Noise history retains eight days (768 quarter-hour positions) per profile in
RAM and resets on reboot. Page <code>1</code> is newest; up to five pages are available
as history fills. Paste the replies for one radio together to merge them.
Main-radio and radio2 pages remain separate. A full noise CLI page is 117
decoded bytes or 156 Base64 characters, fitting the current CLI reply buffer
over USB and administrator LoRa CLI. Radio2 history is read with
<code>get telemetry.noise2</code>, including when it is not being transmitted.</p>
<p>An INA3221 exposes its three enabled hardware inputs as three consecutive LPP
channels. When it is the only external sensor these are normally <code>2</code>, <code>3</code>, and
<code>4</code>, in hardware-input order. Other sensors can shift the numbers, so copy the
IDs reported by <code>get telemetry.volt.i2c</code> rather than assuming them.</p>
<h2 id="reading-the-table">Reading the table</h2>
<ul>
<li>Timestamps default to UTC. Select <strong>Show browser-local time</strong> to convert
them for display and CSV export.</li>
<li><code>TTB1</code> means a raw temperature snapshot, <code>TVB1</code> a raw battery-voltage
snapshot, and <code>IVB1</code> a packed external I2C-voltage chunk. The input summary
also reports the MeshCore route and path-hop count when a complete packet was
pasted.</li>
<li>Temperature preserves exact whole degrees from <code>-50 C</code> through <code>+77 C</code>, plus
missing, below-range, and above-range states.</li>
<li>Voltage preserves hundredths of a volt from <code>1.88 V</code> through <code>4.40 V</code>, plus
missing and out-of-range states.</li>
<li>External I2C voltage uses a 15-bit code at <code>0.02 V</code> resolution. Code <code>0</code> is
missing/disconnected; codes <code>1</code> through <code>32767</code> cover <code>0.02 V</code> through
<code>655.34 V</code>. The LPP channel remains part of every page and raw chunk so
multiple monitor inputs cannot be mixed accidentally.</li>
<li><code>N1B1</code> is main-radio noise history; <code>N2B1</code> is radio2 history. The chart and
table use dBm. Codes <code>0</code>, <code>1</code>, and <code>2</code> mean <code>-120</code>, <code>-119</code>, and <code>-118 dBm</code>;
codes <code>3</code> through <code>29</code> continue in 2 dB steps through <code>-64 dBm</code>. Code <code>30</code>
is <strong>MAX</strong>, displayed as <code>&gt;-64 dBm</code>, and code <code>31</code> is <strong>Missing</strong>. CSV uses
separate <code>radio_profile</code>, <code>status</code>, and <code>noise_floor_dbm</code> columns. MAX and
Missing have an empty numeric field and leave gaps in the chart.</li>
<li>GPS positions are reconstructed from signed 10-meter differentials. A zero
differential after the page origin is inherently ambiguous: it can represent
an unchanged fix, movement below the encoded resolution, or no fix. The table
labels those rows rather than inventing a coordinate.</li>
<li>A GPS clipping warning means at least one movement exceeded the differential
range, so positions after that point can be less accurate.</li>
</ul>
<p>Each noise position combines three fresh noise-floor estimates collected
roughly five minutes apart within its UTC-aligned 15-minute bucket. If any
estimate is <code>-100 dBm</code> or lower, the minimum wins, including a bucket containing
both low and high values. Otherwise, if any estimate is <code>-80 dBm</code> or higher,
the maximum wins. Otherwise the three estimates are averaged. Minimums round
downward, maximums upward, and averages to the nearest encodable value. Values
below <code>-120 dBm</code> clamp to <code>-120 dBm</code>; values above <code>-64 dBm</code> become MAX.
Fewer than three fresh, valid estimates produce Missing. These are idle RSSI
noise estimates, not received-packet RSSI measurements.</p>
<p>GPS history remains available through the administrator CLI, but <code>telemetry.tx</code>
never puts GPS in RAW_CUSTOM packets. Location data therefore must come from a
CLI Base64 page rather than analyzer hex.</p>
<p>For the byte-level layouts, see
<a href="../cli_commands/#read-repeater-telemetry-history">Read repeater telemetry history</a>.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.a7633da7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.c21346df.min.js"></script>
<script src="../_javascript/release_features.js?v=20261024-1"></script>
<script src="../_javascript/hosted_doc_links.js?v=20261007-1"></script>
<script src="../_javascript/notification_builder.js?v=20261006-channel9"></script>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script src="../_javascript/firmware_picker.js?v=20261024-included-bootloader"></script>
<script src="../_javascript/telemetry_decoder.js?v=20261022-noise-history"></script>
<script src="../_javascript/management_decoder.js"></script>
<script src="../_javascript/filter_tool.js?v=20261002-hashbytes-2plus"></script>
<script src="../_javascript/preset_test.js?v=20260923-2"></script>
<script src="../_javascript/esp32_partition_catalog.js?v=20261001-1"></script>
</body>
</html>