PageSourceSearch

https://meshtastic-bice.vercel.app/assets/js/a5e2abb7.bac498c4.js

js meshtastic-bice.vercel.app collected 2026-10-03 07:21:12 UTC 16,602 bytes, 2 lines download raw bytes

1"use strict";(self.webpackChunkmeshtastic=self.webpackChunkmeshtastic||[]).push([["24973"],{24222(e,t,n){n.r(t),n.d(t,{metadata:()=>i,default:()=>g,frontMatter:()=>u,contentTitle:()=>c,toc:()=>m,assets:()=>h});var i=JSON.parse('{"id":"configuration/module/neighbor-info","title":"Neighbor Info Module Usage","description":"This module allows you to send information about your immediate(0 hop) neighbors.","source":"@site/docs/configuration/module/neighbor-info.mdx","sourceDirName":"configuration/module","slug":"/configuration/module/neighbor-info","permalink":"/docs/configuration/module/neighbor-info","draft":false,"unlisted":false,"editUrl":"https://github.com/meshtastic/meshtastic/edit/master/docs/configuration/module/neighbor-info.mdx","tags":[],"version":"current","lastUpdatedBy":"rcarteraz","frontMatter":{"id":"neighbor-info","title":"Neighbor Info Module Usage","sidebar_label":"Neighbor Info","description":"This module allows you to send information about your immediate(0 hop) neighbors."},"sidebar":"Sidebar","previous":{"title":"MQTT","permalink":"/docs/configuration/module/mqtt"},"next":{"title":"Paxcounter","permalink":"/docs/configuration/module/paxcounter"}}'),o=n(91987),r=n(67008),a=n(87622),l=n(42506),s=n(69671),d=n(82374);let u={id:"neighbor-info",title:"Neighbor Info Module Usage",sidebar_label:"Neighbor Info",description:"This module allows you to send information about your immediate(0 hop) neighbors."},c,h={},m=[{value:"Neighbor Info Module Config Values",id:"neighbor-info-module-config-values",level:2},{value:"Enabled",id:"enabled",level:3},{value:"Update Interval",id:"update-interval",level:3},{value:"Transmit Over LoRa",id:"transmit-over-lora",level:3},{value:"Neighbor Info Module Client Availability",id:"neighbor-info-module-client-availability",level:2},{value:"Android",id:"android",level:3},{value:"Apple",id:"apple",level:3},{value:"CLI",id:"cli",level:3},{value:"Web",id:"web",level:3}];function f(e){let t={admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:["The Neighbor Info Module is for sending information on each node's 0-hop neighbors to the mesh. Config options are: Enabled, Update Interval and Transmit Over ",(0,o.jsx)(a.A,{term:"LoRa",definition:"A low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastructures.",routePath:"/docs/terms/",children:"LoRa"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Neighbor Info is informative only and does not affect the routing behavior of the mesh network. It is therefore optional and disabled by default."})}),"\n",(0,o.jsxs)(t.p,{children:['In order to save bandwidth, Meshtastic does not keep track of the route a packet is taking to get to the destination, except when using Traceroute. When enabling this module and enabling "Transmit Over ',(0,o.jsx)(a.A,{term:"LoRa",definition:"A low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastructures.",routePath:"/docs/terms/",children:"LoRa"}),'", your node will periodically send out a packet with a list of its direct neighbors and the quality (',(0,o.jsx)(a.A,{term:"SNR",definition:"A measure used in communications to quantify the level of a desired signal to the level of background noise. In Meshtastic and other wireless systems, a higher SNR indicates a clearer signal that can enhance the reliability and quality of data transmission.",routePath:"/docs/terms/",children:"SNR"}),") of the corresponding link. If you enable this on all nodes, you can build up a graph of the full network to see how it is connected. At the time of writing, there are no clients visualizing it for you, but you can use e.g. ",(0,o.jsx)(a.A,{term:"MQTT",definition:"A lightweight messaging protocol designed for small sensors and mobile devices, enabling efficient data transmission in the Meshtastic network for Internet connectivity and integration with IoT platforms. See https://en.wikipedia.org/wiki/MQTT. In Meshtastic, MQTT is used to connect a node to the internet, and can be used to connect multiple meshes to each other.",routePath:"/docs/terms/",children:"MQTT"})," to gather all the data."]}),"\n",(0,o.jsx)(t.p,{children:"In order to use it, make sure your devices use firmware version 2.2.0 or higher. From 2.3.2 on, the module can detect neighbors even if other nodes do not have the module enabled."}),"\n",(0,o.jsx)(t.h2,{id:"neighbor-info-module-config-values",children:"Neighbor Info Module Config Values"}),"\n",(0,o.jsx)(t.h3,{id:"enabled",children:"Enabled"}),"\n",(0,o.jsx)(t.p,{children:"Enables the Neighbor Info Module."}),"\n",(0,o.jsx)(t.h3,{id:"update-interval",children:"Update Interval"}),"\n",(0,o.jsx)(t.p,{children:"How often the neighbor info is sent to the mesh. This cannot be set lower than 4 hours (14400 seconds). The default is 6 hours (21600 seconds)."}),"\n",(0,o.jsx)(t.h3,{id:"transmit-over-lora",children:"Transmit Over LoRa"}),"\n",(0,o.jsxs)(t.p,{children:["Available from firmware 2.5.13 and higher. By default, neighbor info will only be sent to ",(0,o.jsx)(a.A,{term:"MQTT",definition:"A lightweight messaging protocol designed for small sensors and mobile devices, enabling efficient data transmission in the Meshtastic network for Internet connectivity and integration with IoT platforms. See https://en.wikipedia.org/wiki/MQTT. In Meshtastic, MQTT is used to connect a node to the internet, and can be used to connect multiple meshes to each other.",routePath:"/docs/terms/",children:"MQTT"})," and a connected app. If enabled, the neighbor info will be sent on the primary channel over ",(0,o.jsx)(a.A,{term:"LoRa",definition:"A low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastru
1ctures.",routePath:"/docs/terms/",children:"LoRa"}),". Only available when the primary channel is not the public channel with default key and name."]}),"\n",(0,o.jsx)(t.h2,{id:"neighbor-info-module-client-availability",children:"Neighbor Info Module Client Availability"}),"\n",(0,o.jsxs)(l.A,{groupId:"settings",defaultValue:"apple",values:[{label:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.In,{icon:"mdi:android",height:"1.5rem",style:{marginRight:"0.25rem"}})," Android"]}),value:"android"},{label:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.In,{icon:"mdi:apple",height:"1.5rem",style:{marginRight:"0.25rem"}})," Apple"]}),value:"apple"},{label:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.In,{icon:"mdi:terminal",height:"1.5rem",style:{marginRight:"0.25rem"}})," CLI"]}),value:"cli"},{label:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.In,{icon:"mdi:internet",height:"1.5rem",style:{marginRight:"0.25rem"}})," Web"]}),value:"web"}],children:[(0,o.jsxs)(s.A,{value:"android",children:[(0,o.jsx)(t.h3,{id:"android",children:"Android"}),(0,o.jsxs)(t.admonition,{type:"info",children:[(0,o.jsx)(t.p,{children:"All Neighbor Info Module config options are available for Android in app version 2.2.0 and higher."}),(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Open the Meshtastic App"}),"\n",(0,o.jsxs)(t.li,{children:["Navigate to: ",(0,o.jsx)(t.strong,{children:"Settings >  Neighbor Info"})]}),"\n"]})]})]}),(0,o.jsxs)(s.A,{value:"apple",children:[(0,o.jsx)(t.h3,{id:"apple",children:"Apple"}),(0,o.jsx)(t.p,{children:"Not yet implemented."})]}),(0,o.jsxs)(s.A,{value:"cli",children:[(0,o.jsx)(t.h3,{id:"cli",children:"CLI"}),(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"All Neighbor Info Module config options are available in the python CLI version 2.2.0 and higher."})}),(0,o.jsx)(t.p,{children:"Example commands are below:"}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",metastring:'title="Enable/Disable the Neighbor Info Module"',children:"meshtastic --set neighbor_info.enabled true\nmeshtastic --set neighbor_info.enabled false\n"})}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",metastring:'title="Set the update interval to 5 hours"',children:"meshtastic --set neighbor_info.update_interval 18000\n"})}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",metastring:'title="Set transmit over LoRa to true"',children:"meshtastic --set neighbor_info.transmit_over_lora true\n"})}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",metastring:'title="Get the Neighbor Info Module Configuration"',children:"meshtastic --get neighbor_info\n"})})]}),(0,o.jsxs)(s.A,{value:"web",children:[(0,o.jsx)(t.h3,{id:"web",children:"Web"}),(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"All Neighbor Info module config options are available in the Web UI."})})]})]})]})}function g(e={}){let{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(f,{...e})}):f(e)}},69671(e,t,n){n.d(t,{A:()=>l});var i=n(91987);n(71763);var o=n(13526),r=n(13897);function a({children:e,className:t,hidden:n}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,o.A)("tabItem_q_8M",t),hidden:n,children:e})}function l({children:e,className:t,value:n}){let{selectedValue:o,lazy:s}=(0,r.uc)(),d=n===o;return!d&&s?null:(0,i.jsx)(a,{className:t,hidden:!d,children:e})}},42506(e,t,n){n.d(t,{A:()=>h});var i=n(91987);n(71763);var o=n(13526),r=n(66977),a=n(13897),l=n(42714),s=n(66928);function d({className:e}){let{selectedValue:t,selectValue:n,tabValues:r,block:s}=(0,a.uc)(),u=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.a_)(),h=e=>{let i=e.currentTarget,o=r[u.indexOf(i)].value;o!==t&&(c(i),n(o))},m=e=>{let t=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{let n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{let n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1]}}t?.focus()};return(0,i.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":s},e),children:r.map(({value:e,label:n,attributes:r})=>(0,i.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{u.push(e)},onKeyDown:m,onClick:h,...r,className:(0,o.A)("tabs__item","tabItem_Nk8A",r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function u({children:e}){return(0,i.jsx)("div",{className:"margin-top--md",children:e})}function c({className:e,children:t}){return(0,i.jsxs)("div",{className:(0,o.A)(r.G.tabs.container,"tabs-container","tabList_m28i"),children:[(0,i.jsx)(d,{className:e}),(0,i.jsx)(u,{children:t})]})}function h(e){let t=(0,s.A)(),n=(0,a.OC)(e);return(0,i.jsx)(a.O_,{value:n,children:(0,i.jsx)(c,{className:e.className,children:(0,a.vT)(e.children)})},String(t))}},13897(e,t,n){n.d(t,{OC:()=>h,O_:()=>g,uc:()=>f,vT:()=>u});var i=n(91987),o=n(71763),r=n(66532),a=n(98532),l=n(50191),s=n(10644),d=n(16957);function u(e){return o.Children.toArray(e).filter(e=>"\n"!==e)}function c({value:e,tabValues:t}){return t.some(t=>t.value===e)}function h(e){let t,{defaultValue:n,queryString:i=!1,groupId:u}=e,h=function(e){let{values:t,children:n}=e;return(0,o.useMemo)(()=>{let e=t??o.Children.toArray(n).flatMap(e=>{if(!e)return[];if((0,o.isValidElement)(e)&&function(e){let{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return[e];
1let t="string"==typeof e.type?e.type:e.type.name;throw Error(`Docusaurus error: Bad <Tabs> child <${t}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.
2If you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:t,attributes:n,default:i}})=>({value:e,label:t,attributes:n,default:i})),i=(0,s.XI)(e,(e,t)=>e.value===t.value);if(i.length>0)throw Error(`Docusaurus error: Duplicate values "${i.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`);return e},[t,n])}(e),[m,f]=(0,o.useState)(()=>(function({defaultValue:e,tabValues:t}){if(0===t.length)throw Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!c({value:e,tabValues:t}))throw Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}let n=t.find(e=>e.default)??t[0];if(!n)throw Error("Unexpected error: 0 tabValues");return n.value})({defaultValue:n,tabValues:h})),[g,p]=function({queryString:e=!1,groupId:t}){let n=(0,r.W6)(),i=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,l.aZ)(i),(0,o.useCallback)(e=>{if(!i)return;let t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})},[i,n])]}({queryString:i,groupId:u}),[b,v]=function({groupId:e}){let t=e?`docusaurus.tab.${e}`:null,[n,i]=(0,d.Dv)(t);return[n,(0,o.useCallback)(e=>{t&&i.set(e)},[t,i])]}({groupId:u}),x=c({value:t=g??b,tabValues:h})?t:null;return(0,a.A)(()=>{x&&f(x)},[x]),{selectedValue:m,selectValue:(0,o.useCallback)(e=>{if(!c({value:e,tabValues:h}))throw Error(`Can't select invalid tab value=${e}`);f(e),p(e),v(e)},[p,v,h]),tabValues:h,lazy:e.lazy??!1,block:e.block??!1}}let m=(0,o.createContext)(null);function f(){let e=o.useContext(m);if(!e)throw Error("useTabsContext() must be used within a Tabs component");return e}function g(e){return(0,i.jsx)(m.Provider,{value:e.value,children:e.children})}},87622(e,t,n){n.d(t,{A:()=>a});var i=n(71763),o=n(37773),r=n(91987);function a({term:e,definition:t,abbreviation:n,routePath:l="/glossary",children:s}){let[d,u]=(0,i.useState)(!1),[c,h]=(0,i.useState)(null),[m,f]=(0,i.useState)("top"),g=(0,i.useRef)(null),p=(0,i.useRef)(null),b=(0,i.useCallback)(()=>{let e;if(!g.current||!p.current)return;let t=g.current.getBoundingClientRect(),n=p.current.getBoundingClientRect(),i=window.innerWidth,o=window.innerHeight,r=document.querySelector(".navbar"),a=r?r.getBoundingClientRect().bottom:0,l=t.top-a>=n.height+8,s=o-t.bottom>=n.height+8,d=l||!s?"top":"bottom";e="top"===d?t.top-n.height-8:t.bottom+8;let u=t.left+t.width/2-n.width/2;u=Math.max(8,Math.min(u,i-n.width-8)),f(d),h({top:Math.max(a+4,e),left:u})},[]);(0,i.useEffect)(()=>{let e;if(!d)return;let t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>{b()})}),n=()=>b(),i=()=>b();return window.addEventListener("scroll",n,!0),window.addEventListener("resize",i),()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e),window.removeEventListener("scroll",n,!0),window.removeEventListener("resize",i)}},[d,b]);let v=(0,o.P_)("docusaurus-plugin-glossary"),x=(0,i.useMemo)(()=>{if(t&&"string"==typeof t&&t.length>0)return t;let n=(v&&v.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());return n&&n.definition?n.definition:void 0},[t,v,e]),w=(0,i.useMemo)(()=>{let t=n;if(!t){let n=(v&&v.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());t=n&&n.abbreviation}if("string"!=typeof t)return;let i=t.trim();if(i&&i.toLowerCase()!==String(e).toLowerCase())return i},[n,v,e]),y=(0,i.useMemo)(()=>l&&"string"==typeof l&&l.length>0?l:v&&v.routePath||"/glossary",[v,l]),j=s||e,T=e.toLowerCase().replace(/\s+/g,"-");return(0,r.jsxs)("span",{ref:g,className:"glossaryTermWrapper_ud7W",children:[(0,r.jsx)("a",{href:`${y}#${T}`,className:"glossaryTerm_x2nJ",onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),onFocus:()=>u(!0),onBlur:()=>u(!1),"aria-describedby":`tooltip-${T}`,children:j}),x&&(0,r.jsxs)("span",{ref:p,id:`tooltip-${T}`,className:`tooltip_WjgA ${d?"tooltipVisible_AjfD":""} ${"top"===m?"tooltipTop_uMN4":"tooltipBottom_U9P5"} tooltipFloating_nLk7`,role:"tooltip",style:d&&c?{top:`${c.top}px`,left:`${c.left}px`}:void 0,children:[(0,r.jsx)("strong",{children:e}),w?` (${w}). `:"",x]})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.