<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Philly Mesh</title><link>https://phillymesh.net/post/</link><description>Philly Mesh (Posts)</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 02 Sep 2026 00:00:01 +0000</lastBuildDate><atom:link href="https://phillymesh.net/post/index.xml" rel="self" type="application/rss+xml"/><item><title>FCC Regulations and MeshCore 500</title><link>https://phillymesh.net/2026/09/02/fcc-regulations/</link><pubDate>Wed, 02 Sep 2026 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2026/09/02/fcc-regulations/</guid><description>&lt;p>&lt;em>As a quick note, none of the Operations Division are lawyers, and none of us play lawyers on TV. Even though we discuss FCC regulations throughout this document, nothing in this document or FAQ is legal analysis or legal advice to anyone reading it. Please, for the love of heaven, always consult an actual lawyer when you have questions about the law, or FCC regulations.&lt;/em>&lt;/p>
&lt;h1 id="hey-phillymesh-community" >Hey PhillyMesh community,
&lt;span>
&lt;a href="#hey-phillymesh-community" title="Direct Link to Hey PhillyMesh community,">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 id="our-mesh-is-about-to-become-a-lot-more-fragmented" >Our mesh is about to become a lot more fragmented
&lt;span>
&lt;a href="#our-mesh-is-about-to-become-a-lot-more-fragmented" title="Direct Link to Our mesh is about to become a lot more fragmented">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>We, (along with many in the Meshtastic community) recently found out that &lt;strong>most of Meshtastic&amp;rsquo;s presets are not in compliance with the FCC&lt;/strong> when the newest build of the Meshtastic app changed the USA default preset to LongTurbo. We don&amp;rsquo;t yet have any official word from the Meshtastic developers about this, but the following is our understanding.&lt;/p>
&lt;p>Meshtastic uses a 250 kHz bandwidth by default, and &lt;a href="https://www.ecfr.gov/current/title-47/part-15/section-15.247#p-15.247(a)(2)">FCC regulations state&lt;/a> that devices in the 900 MHz ISM frequency band (that&amp;rsquo;s us) must use a bandwidth of 500 kHz or higher. The only Meshtastic preset that is in compliance and potentially viable for this area is LongTurbo, which we have tested extensively and determined doesn&amp;rsquo;t work well for long distance mesh communication in Philly. &lt;a href="https://github.com/meshcore-dev/MeshCore/issues/945#issuecomment-3408847889">Other metro areas&lt;/a> &lt;a href="https://github.com/meshcore-dev/MeshCore/issues/945#issuecomment-3408643590">have corroborated this&lt;/a>; &lt;strong>LongTurbo doesn&amp;rsquo;t work well just about anywhere&lt;/strong>.&lt;/p>
&lt;p>We have a &lt;a href="https://phillymesh.net/2026/08/12/freq-testing-report/">blog post&lt;/a> with all details of our LongTurbo test, but the summary is that there is a lot of interference within the ISM band, much of which is concentrated every 250 kHz (so, on .000, .250, .500, and .750 on each MHz frequency, with the worst of it being on .250/.750). Using only a 250 kHz slice of bandwidth (for example, from 915.000 to 915.250 MHz) allowed us to keep that interference on the edge of our communication spectrum. However, if we have to use 500 kHz bandwidth, we can&amp;rsquo;t avoid that interference (we&amp;rsquo;ve looked all over the ISM Band) and &lt;strong>we confirmed (with your help in this summer&amp;rsquo;s tests) that our ability to communicate with Meshtastic is severely compromised&lt;/strong>.&lt;/p>
&lt;h2 id="so-what-are-we-going-to-do" >So, what are we going to do?
&lt;span>
&lt;a href="#so-what-are-we-going-to-do" title="Direct Link to So, what are we going to do?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;strong>We&amp;rsquo;re wrapping up our LF910 test and now moving to compliant presets&lt;/strong>. Because our Meshtastic LongTurbo testing went so poorly, the OpsDiv started scrambling to find options that might work better to achieve the goal of a Philadelphia-area-wide mesh network that allows us to communicate from the city to the burbs. &lt;strong>We started informally testing some custom settings for MeshCore at 500 kHz (we&amp;rsquo;re calling it &amp;ldquo;MeshCore 500&amp;rdquo;) and found that it worked surprisingly well&lt;/strong>.&lt;/p>
&lt;p>One of the biggest reasons we&amp;rsquo;ve seen better results with MeshCore is because it is more resilient due to its message-prioritized routing. The settings we&amp;rsquo;ve been tweaking during this summer&amp;rsquo;s testing period to try to improve Meshtastic&amp;rsquo;s performance (reducing position, telemetry, nodeinfo announcements, and more) are pre-baked into the MeshCore firmware. The additional hops MeshCore allows should mitigate the loss of reach/distance nodes that is caused by operating with a bandwidth that has more interference.&lt;/p>
&lt;p>Based on that testing, going forward, &lt;strong>the handful of PhillyMesh infrastructure nodes that are currently installed will be tuned to MeshCore 500&lt;/strong> because we believe this gives us a better chance to create a Philadelphia-area-wide network. Additionally, we have leads on installing several dual-radio nodes at high sites and &lt;strong>these will feature both Meshtastic LongTurbo and MeshCore 500&lt;/strong>. We expect that given time, Meshtastic LongTurbo may become a more viable short-distance mesh network, especially as Meshtastic firmware matures and resolves some of the issues with overly-frequent position/telemetry/nodeinfo reports. However, MeshCore 500 is currently performing much better and will likely always be better for long-distance mesh communication. As has always been the case, &lt;strong>you&amp;rsquo;re welcome to install whatever preset and mesh technology you&amp;rsquo;re comfortable with running on your personal nodes&lt;/strong>.&lt;/p>
&lt;p>We considered announcing MeshCore 500 as a test, but we&amp;rsquo;ve been doing a lot of testing this summer and, honestly, a week-long test for something we already know initially shows promise won&amp;rsquo;t get us the results we need. We decided to announce this as a transition (kind of like our indefinite LF910 test) and let the people decide if they want to participate. If things go poorly with MeshCore 500 or the technology changes in six months or a year (or the Meshtastic project sorts this whole thing out next week and makes LongFast FCC-compliant in a way that doesn&amp;rsquo;t nuke its effectiveness) we might just go back to Meshtastic LongFast as our default. But we wanted to make one unified recommendation for right now, for those who want to test out something new with us, since we won&amp;rsquo;t be able to use LongFast for the foreseeable future. Plus, trying new mesh networks is fun!&lt;/p>
&lt;p>Unfortunately, &lt;strong>the days of defaulting to Meshtastic LongFast and everyone being on the same mesh network are likely behind us&lt;/strong>. We expect some people will stay on Meshtastic LongFast, and once Meshtastic&amp;rsquo;s default preset becomes LongTurbo, we expect many people new to the hobby (an estimated 20 people per week in our area) to be on LongTurbo. We also expect many of those who have been dabbling in MeshCore and seeing how well it performs to keep tinkering with MeshCore 500. There will likely not be one consensus network going forward, but we hope that you&amp;rsquo;ll try out MeshCore 500 with us.&lt;/p>
&lt;p>&lt;strong>&lt;u>You do not have to buy new hardware to try out MeshCore 500&lt;/u>: almost all Meshtastic node hardware models are compatible with MeshCore and you can flash between the two as easily as you can flash between versions of the Meshtastic firmware&lt;/strong>. If you try MeshCore and want to go back to Meshtastic, it&amp;rsquo;s completely and easily reversible in a minute or so. After reading the guide to flashing your node below, if you have any questions about converting your node and changing settings, please reach out on the #meshcore-philly channel in the Discord. We are happy to help guide folks through this transition!&lt;/p>
&lt;p>&amp;ldquo;But I thought this was a Meshtastic server?&amp;rdquo; Technically, the server name is just &amp;ldquo;Philly Radio &amp;amp; Mesh&amp;rdquo;&amp;hellip; and if you take a look at the PhillyMesh website, you&amp;rsquo;ll see posts as far back as 2016 (before Meshtastic was invented) exploring mesh networks in the Philadelphia area. Meshtastic has been a focus lately because it&amp;rsquo;s been more popular in the Philadelphia area. We&amp;rsquo;re here to have a good time with all kinds of mesh networks.&lt;/p>
&lt;h2 id="fractured-phillymesh-on-the-airwaves-unified-phillymesh-in-our-hearts" >Fractured PhillyMesh on the airwaves, unified PhillyMesh in our hearts
&lt;span>
&lt;a href="#fractured-phillymesh-on-the-airwaves-unified-phillymesh-in-our-hearts" title="Direct Link to Fractured PhillyMesh on the airwaves, unified PhillyMesh in our hearts">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>This is not a change we&amp;rsquo;re introducing lightly. Many of us have poured time, energy, passion, tears, and money into testing Meshtastic nodes and settings. We want to ensure that you (the mesh users), the PRM Ops Division, and especially the gracious hosts of our infrastructure nodes do not run astray of FCC regulations.&lt;/p>
&lt;p>Large mesh networks like PhillyMesh rely on the power of numbers and agreement between its users to work. We each rely on each other&amp;rsquo;s nodes to relay our messages. Most of us remember the days when you&amp;rsquo;d leave a node in your window and not see another node for weeks. &lt;strong>We knew a default preset change was coming and that it would cause our mesh to become fragmented, whether we wanted it to or not&lt;/strong>.&lt;/p>
&lt;p>We had been preparing for that preset change, like many other metro areas have been doing, by testing to find a preset that works best for our area.
With our better understanding of the rules, we realize that our previous choice of the best preset is no longer an option.
&lt;strong>We think that our best hope for FCC-compliant survival in the short term is MeshCore 500&lt;/strong>.&lt;/p>
&lt;p>Love,&lt;/p>
&lt;p>The PhillyMesh Operations Division&lt;/p>
&lt;h1 id="meshcore-and-meshtastic-fcc-compliant-settings" >MeshCore and Meshtastic FCC-Compliant Settings
&lt;span>
&lt;a href="#meshcore-and-meshtastic-fcc-compliant-settings" title="Direct Link to MeshCore and Meshtastic FCC-Compliant Settings">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 id="meshcore" >MeshCore
&lt;span>
&lt;a href="#meshcore" title="Direct Link to MeshCore">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;em>These are the settings we&amp;rsquo;re recommending for MeshCore 500. They are FCC-compliant and avoid the heaviest ISM band interference that we found during our testing in the Philadelphia area. Please make sure your MeshCore node is updated to the latest firmware before using these settings!&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Frequency: &lt;code>902.250 MHz&lt;/code>&lt;/li>
&lt;li>Bandwidth: &lt;code>500 kHz&lt;/code>&lt;/li>
&lt;li>Spreading Factor: &lt;code>11&lt;/code>&lt;/li>
&lt;li>Coding Rate: &lt;code>4/5&lt;/code> (some apps may just say &lt;code>5&lt;/code>)&lt;/li>
&lt;li>Path Hash Mode: &lt;code>1&lt;/code> (2-byte mode, some apps list this setting as &lt;code>1-2 byte&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>We also wrote these pages that might be of help if you&amp;rsquo;re new to MeshCore:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://phillymesh.net/2026/09/02/meshcore-intro">What you need to know about MeshCore coming from Meshtastic&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://phillymesh.net/2026/09/02/how-to-flash-meshcore">How to flash MeshCore coming from Meshtastic&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="meshtastic" >Meshtastic
&lt;span>
&lt;a href="#meshtastic" title="Direct Link to Meshtastic">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;em>These are the new default, FCC-compliant settings, that the Meshtastic project recommends for the US. Please update your firmware to the latest stable/beta version first!&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Frequency: &lt;code>908.75 MHz&lt;/code> (this is the default slot, which you can enter as &lt;code>0&lt;/code> or &lt;code>14&lt;/code>)&lt;/li>
&lt;li>Preset: &lt;code>LongTurbo&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="faq" >FAQ
&lt;span>
&lt;a href="#faq" title="Direct Link to FAQ">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I&amp;rsquo;m sure you have a lot more questions! Hopefully we answer a good number of them below, otherwise please ask/vent/grieve the loss of 250 kHz bandwidth in the Discord.&lt;/p>
&lt;h3 id="what-is-this-phillymesh-operations-divisionopsdiv-just-who-the-heck-are-you-folks" >What is this &amp;ldquo;PhillyMesh Operations Division&amp;rdquo;/&amp;ldquo;OpsDiv&amp;rdquo;? Just who the heck are you folks?
&lt;span>
&lt;a href="#what-is-this-phillymesh-operations-divisionopsdiv-just-who-the-heck-are-you-folks" title="Direct Link to What is this &amp;ldquo;PhillyMesh Operations Division&amp;rdquo;/&amp;ldquo;OpsDiv&amp;rdquo;? Just who the heck are you folks?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>The PhillyMesh Operations Division is some of the OGs from the Philly Radio &amp;amp; Mesh Discord server. The name &amp;ldquo;Operations Division&amp;rdquo; came about because the server admin is a Trekkie, and she couldn&amp;rsquo;t resist the name. If you&amp;rsquo;ve seen anyone teach a class about Meshtastic, foot the bill for the website, table for the group at a local event, organize a PhillyMesh happy hour, or coordinate an infrastructure node install with another local org; that was one of the Ops folks. Feel free to bribe us with good node locations, bad puns, and Malort.&lt;/p>
&lt;h3 id="what-are-presets-and-what-is-longfast" >What are presets and what is LongFast?
&lt;span>
&lt;a href="#what-are-presets-and-what-is-longfast" title="Direct Link to What are presets and what is LongFast?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Meshtastic has many settings that allow you to change what slice of frequency you send messages in. You can customize these settings almost indefinitely, but most of the time people choose between a few different presets which are a standardized set of settings. Other Meshtastic users must (for the most part) have the same settings as you in order to receive your messages and be on the same mesh network.&lt;/p>
&lt;p>Meshtastic&amp;rsquo;s default settings are a preset called LongFast. This preset uses a bandwidth of 250 kHz, which we now know is in violation of FCC regulations.&lt;/p>
&lt;h3 id="can-you-tell-me-more-about-this-bandwidth-thing" >Can you tell me more about this bandwidth thing?
&lt;span>
&lt;a href="#can-you-tell-me-more-about-this-bandwidth-thing" title="Direct Link to Can you tell me more about this bandwidth thing?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Meshtastic (and MeshCore) packets are sent across a frequency spectrum. That spectrum is determined by choosing a starting frequency (or, with Meshtastic, you often choose a &amp;ldquo;Frequency Slot&amp;rdquo; and the firmware uses that to &lt;a href="https://meshtastic.org/docs/overview/radio-settings/">calculate your starting frequency&lt;/a>) and then setting a bandwidth which determines how large the range of the spectrum wil be. For example if your frequency is 906.500 MHz and your bandwidth is 250 kHz (0.250 MHz), you will be transmitting from 906.500 MHz to 906.750 MHz.&lt;/p>
&lt;p>The only preset that uses a 500 kHz or higher bandwidth is LongTurbo, the rest use 250 kHz. In our region there is a lot of interference put off by devices using RFID, among many other things. The interference exists every 250 kHz (at the .000, .250, .500, and .750 points of each frequency) and is strongest at .250 and .750. Using a smaller bandwidth like 250 kHz, Meshtastic packets are able to keep that interference at the edges and not be affected too much by it. However, because LongTurbo uses 500 kHz, no matter what starting frequency is chosen, it will always overlap with some of the interference.&lt;/p>
&lt;h3 id="who-is-the-fcc-and-why-do-i-care-about-them" >Who is the FCC and why do I care about them?
&lt;span>
&lt;a href="#who-is-the-fcc-and-why-do-i-care-about-them" title="Direct Link to Who is the FCC and why do I care about them?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>The FCC makes and enforces the regulations regarding which frequency bands people and companies can use and what the rules are for the packets they send. As with all regulations in the US, it&amp;rsquo;s possible to get in trouble for unknowingly violating them (regardless of motive/intent), and that&amp;rsquo;s what we&amp;rsquo;ve all been doing while using Meshtastic on LongFast.&lt;/p>
&lt;p>The FCC requires all packets sent in the ISM band (the band Meshtastic and MeshCore use) to have a bandwidth of 500 kHz or more. The only Meshtastic preset that uses a 500 kHz bandwidth is called LongTurbo, and that&amp;rsquo;s now what the Meshtastic project will be suggesting as the default in the US. The default MeshCore setting uses a 62.5 kHz bandwidth and is even less compliant, hence the custom settings to use a 500 kHz bandwidth.&lt;/p>
&lt;h3 id="is-this-a-new-fcc-regulation" >Is this a new FCC regulation?
&lt;span>
&lt;a href="#is-this-a-new-fcc-regulation" title="Direct Link to Is this a new FCC regulation?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>No. It seems that most people did not understand the FCC regulations. This includes Meshtastic devs, MeshCore devs, and device manufacturers selling devices where the default settings were out of compliance.&lt;/p>
&lt;p>There was a misunderstanding among users that did read the regulations about how Meshtastic was operating, FHSS mode vs DTS mode, and the regulations are different for each. Those users who didn&amp;rsquo;t read the regulations figured if a project as big as this one was not in compliance with the FCC, we&amp;rsquo;d know about it. Well, now we know.&lt;/p>
&lt;h3 id="does-the-fcc-even-care-if-we-keep-using-meshtastic-longfast" >Does the FCC even care if we keep using Meshtastic LongFast?
&lt;span>
&lt;a href="#does-the-fcc-even-care-if-we-keep-using-meshtastic-longfast" title="Direct Link to Does the FCC even care if we keep using Meshtastic LongFast?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>At this point we don&amp;rsquo;t know what enforcement the FCC will have for these regulations. You, as an individual, can make your own determination if you want to continue to operate on Meshtastic LongFast and be in violation of FCC regulations. It is important to note that if you are a licensed ham radio operator your license could be at risk for knowingly operating devices in violation of FCC regulations. The risk of punishment for past actions is probably low in this case, however, you are now aware and must make your own decisions going forward.&lt;/p>
&lt;p>As the group that is Philly Radio &amp;amp; Mesh, we feel it is important to stay in compliance for many reasons. Besides the obvious fact that violating FCC regulations is illegal, we have been partnering with non-profits such as Philly Community Wireless to host nodes, and we don&amp;rsquo;t want to get them or any of the building owners in legal trouble. We&amp;rsquo;ve been asked by local businesses and libraries to do talks about Meshtastic; we can&amp;rsquo;t in good conscience encourage new users to try something that we now know is illegal, and if people think we&amp;rsquo;re doing that, we won&amp;rsquo;t be asked back. Many of us are also licensed ham radio operators, and don&amp;rsquo;t want that hobby to be put into jeopardy by affiliation with this group. Even for non-hams, using the ISM band irresponsibly could result in the privilege of using that spectrum being revoked for everyone, especially in today&amp;rsquo;s environment of companies looking for spectrum to pivot to cellular 5G use.&lt;/p>
&lt;h3 id="what-is-meshcore" >What is MeshCore?
&lt;span>
&lt;a href="#what-is-meshcore" title="Direct Link to What is MeshCore?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Meshtastic is a project that allows you to send messages over LoRa. There are other projects that do the same thing, one of which is MeshCore.&lt;/p>
&lt;p>MeshCore and Meshtastic have recently grown side by side, learning and improving based on the other&amp;rsquo;s work. In general, MeshCore has been optimized for nodes to be placed in a stationary routing and learns what the most efficient way to route messages between nodes is to get the furthest reach. Meshtastic has historically assumed that all nodes are mobile and hasn&amp;rsquo;t added that routing part until recently.&lt;/p>
&lt;p>In Philadelphia, Meshtastic has historically been more popular. In other areas, such as NE PA, MeshCore is more popular. And as an individual, it&amp;rsquo;s always more fun to join a mesh network that has more people on it, so the popularity is self-perpetuating.&lt;/p>
&lt;p>More details about why we think MeshCore 500 is performing better than Meshtastic LongTurbo are in another FAQ below.&lt;/p>
&lt;h3 id="what-is-meshcore-500" >What is MeshCore 500?
&lt;span>
&lt;a href="#what-is-meshcore-500" title="Direct Link to What is MeshCore 500?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Most people on MeshCore operate at a 62.5 kHz bandwidth (these are the USA default settings), which, it turns out, is also in violation of those pesky FCC regulations, but the technology supports a 500 kHz bandwidth just like Meshtastic does. We have been calling using MeshCore at 500 kHz &amp;ldquo;MeshCore 500&amp;rdquo; to differentiate it from the usual MeshCore at 62.5 kHz settings that most people are currently using.&lt;/p>
&lt;h3 id="i-dont-want-to-try-out-meshcore-but-i-do-want-to-make-sure-im-in-compliance-with-the-fcc-what-should-i-do" >I don&amp;rsquo;t want to try out MeshCore, but I do want to make sure I&amp;rsquo;m in compliance with the FCC. What should I do?
&lt;span>
&lt;a href="#i-dont-want-to-try-out-meshcore-but-i-do-want-to-make-sure-im-in-compliance-with-the-fcc-what-should-i-do" title="Direct Link to I don&amp;rsquo;t want to try out MeshCore, but I do want to make sure I&amp;rsquo;m in compliance with the FCC. What should I do?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>You should switch your Meshtastic node&amp;rsquo;s preset to LongTurbo. We recommend leaving your other frequency settings at default, so you can see as many other people on LongTurbo as possible. You will soon also see our dual-radio infrastructure nodes on Meshtastic LongTurbo as well, but the single-radio nodes will be on MeshCore 500.&lt;/p>
&lt;h3 id="do-i-have-to-pay-to-use-meshcore" >Do I have to pay to use MeshCore?
&lt;span>
&lt;a href="#do-i-have-to-pay-to-use-meshcore" title="Direct Link to Do I have to pay to use MeshCore?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>No. MeshCore, unlike Meshtastic, has many third-party apps you can use to interface with your nodes. Some are paid and some have paid features, but there are some great ones you can use that are entirely free.&lt;/p>
&lt;p>Dusty, who has been using MeshCore for a while, recommends the apps &lt;a href="https://apps.apple.com/us/app/meshcore-one/id6757419477">MeshCore One&lt;/a> for iOS and &lt;a href="https://play.google.com/store/apps/details?id=com.meshcore.meshcore_open">MeshCore Open&lt;/a> for Android. Both are entirely free to use.&lt;/p>
&lt;p>If you&amp;rsquo;re a power user, &lt;a href="https://github.com/jkingsman/Remote-Terminal-for-MeshCore">RemoteTerm&lt;/a> is a docker app like MeshMonitor and Kyle Yank has set up an instance of &lt;a href="https://corescope500.phlm.sh/#/packets">CoreScope&lt;/a>, which is like Malla. Feel free to turn MQTT on and contribute (as long as you&amp;rsquo;re on 500 kHz).&lt;/p>
&lt;h3 id="can-licensed-amateur-radio-operators-continue-to-use-meshtastic-and-meshcore-at-250-khz" >Can licensed amateur radio operators continue to use Meshtastic and MeshCore at 250 kHz?
&lt;span>
&lt;a href="#can-licensed-amateur-radio-operators-continue-to-use-meshtastic-and-meshcore-at-250-khz" title="Direct Link to Can licensed amateur radio operators continue to use Meshtastic and MeshCore at 250 kHz?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Yes. However, using Meshtastic as a licensed amateur radio operator requires you to not use encryption which means dropping packets from private channels and only using the default public channel (with the published key of AQ==). Setting your node to &amp;ldquo;ham mode&amp;rdquo; will do all of these things.&lt;/p>
&lt;p>This is not compatible with the default Meshtastic network and won&amp;rsquo;t allow you to chat with non-licensed users on LongFast. If you&amp;rsquo;re intersted in getting your ham radio license, JawnCon, Philly&amp;rsquo;s local cybersecurity conference in October, has free classes and exams most years.&lt;/p>
&lt;p>Amateur radio has several alternatives to the ISM band that have similar messaging functionality, including normal VHF APRS, UHF, LoRa APRS, FT8 (and derivatives), JS8 Call, VARA modes, Winlink, etc. Ask your friendly neighborhood ham in #amateur-radio in our Discord to learn more.&lt;/p>
&lt;h3 id="what-settings-are-being-recommended-for-meshcore-500" >What settings are being recommended for MeshCore 500?
&lt;span>
&lt;a href="#what-settings-are-being-recommended-for-meshcore-500" title="Direct Link to What settings are being recommended for MeshCore 500?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Some MeshCore apps have recommended presets and some don&amp;rsquo;t, but there are generally agreed upon default settings that most people use so they can communicate with each other. Those settings use 62.5 kHz as the bandwidth, which is in violation of FCC regulations.&lt;/p>
&lt;p>We have outlined our custom settings in the next section below, which use a 500 kHz bandwidth. This means that, for the time being, the only other MeshCore nodes you&amp;rsquo;ll be able to communicate with are folks who heard about these settings from PhillyMesh. We do anticipate that once word gets out about the FCC regulations, we will see some current MeshCore users transition to 500 kHz bandwidth and find us. We are not making this change to be isolated or exclusionary, we are making this change for FCC compliance and sharing the settings that worked best in hopes of re-connecting with neighboring meshes again.&lt;/p>
&lt;p>MeshCore&amp;rsquo;s reach is much wider than Meshtastic LongFast; the current most widely used (and non-FCC-compliant) settings result in Philly being reachable from as far north as New Hampshire and as far south as Kentucky, depending on the weather (check &lt;a href="https://corescope.mesh.yankani.ch/#/home">Kyle&amp;rsquo;s instance of CoreScope that uses MeshCore&amp;rsquo;s default settings&lt;/a> to see all the repeaters he&amp;rsquo;s seen recently and you&amp;rsquo;ll get an idea of the reach). In order to keep the community we&amp;rsquo;ve had on Meshtastic LongFast together, we recommend everyone joins the #prm channel and uses that as the default comms channel. Once other meshes join our settings and the Public channel gets busy again, #prm can be a way to ensure our area&amp;rsquo;s unique culture has a home.&lt;/p>
&lt;h3 id="why-do-we-expect-meshcore-to-perform-better-at-500-khz-than-meshtastic-does" >Why do we expect MeshCore to perform better at 500 kHz than Meshtastic does?
&lt;span>
&lt;a href="#why-do-we-expect-meshcore-to-perform-better-at-500-khz-than-meshtastic-does" title="Direct Link to Why do we expect MeshCore to perform better at 500 kHz than Meshtastic does?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>MeshCore has some key benefits compared to Meshtastic that will increase chances of success at this wider, more interference-heavy bandwidth.&lt;/p>
&lt;ul>
&lt;li>&lt;em>Reduced Non-Message Traffic&lt;/em>. Baked into the firmware are the settings we were asking Meshtastic users to change as part of this summer&amp;rsquo;s tests to reduce position reporting, telemetry, NodeInfo, etc. Without these packets clogging the mesh, there is more room for messages to reliably flow.&lt;/li>
&lt;li>&lt;em>Higher Hop Limit&lt;/em>. Where Meshtastic had a hop limit of 7 (and realistically only 4-5ish hops were viable), MeshCore has a hop limit of 64. We won&amp;rsquo;t need all 64 of those hops to talk across the Philly Mesh, but we know we will need more than the 4-5ish viable hops Meshtastic had. An increased hop limit will increase the functionality of the mesh to counter the degradation of node transmit/receive distance at 500 kHz bandwidth.&lt;/li>
&lt;li>&lt;em>Better Routing&lt;/em>. MeshCore prioritizes static routing compared to Meshtastic&amp;rsquo;s ad-hoc flood routing. There is still flood routing in MeshCore, but it uses it sparingly and instead focuses on building stable paths from router-to-router to reduce unnecessary retransmits. This means many nodes, especially in Center City who can reach a repeater, can stay in Bluetooth Companion mode (the equivalent of CLIENT_MUTE in Meshtastic). The reduction in unnecessary rebroadcasting also helps reduce packet collisions and noise floor, also mitigating the impacts of the higher interference on the 500 kHz bandwidth.&lt;/li>
&lt;li>&lt;em>Better Battery Life&lt;/em>. Because most nodes in Center City can stay in Bluetooth Companion mode, they won&amp;rsquo;t unnecessarily waste battery life rebroadcasting. This is a significant win for battery-run nodes, pocket nodes, small solar nodes, etc as they will live longer.&lt;/li>
&lt;/ul>
&lt;p>And we&amp;rsquo;ve seen this in practice. Compare our &lt;a href="https://api.phillymesh.net/map">Malla instance (Meshtastic)&lt;/a> to Kyle&amp;rsquo;s &lt;a href="https://corescope.mesh.yankani.ch/#/map">CoreScope instance (MeshCore)&lt;/a>. While on Meshtastic we see a couple of nodes further away, these are likely to be airplane nodes, or nodes that had their location incorrect. On MeshCore we see hundreds of repeaters further north than New York City and a handful down in North Carolina.&lt;/p>
&lt;h3 id="could-we-just-roll-our-own-meshtastic-firmware-to-make-meshtastic-on-500-khz-perform-better" >Could we just roll our own Meshtastic firmware to make Meshtastic on 500 kHz perform better?
&lt;span>
&lt;a href="#could-we-just-roll-our-own-meshtastic-firmware-to-make-meshtastic-on-500-khz-perform-better" title="Direct Link to Could we just roll our own Meshtastic firmware to make Meshtastic on 500 kHz perform better?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>We actually thought about this; we&amp;rsquo;ve been joking about making MalortCore for a while. However, in order to make Meshtastic on 500 kHz perform better we&amp;rsquo;d be doing things like increasing the number of allowed hops and improving routing, and we&amp;rsquo;d basically just be recreating MeshCore. We&amp;rsquo;d rather spend our energy building out local infrastructure that will benefit everyone in the area, instead of developing and administrating a third competing LoRa mesh project, which would just serve to further fragment the PhillyMesh.&lt;/p>
&lt;h3 id="i-havent-seen-anything-about-a-new-meshtastic-preset-whats-your-sourcing-on-this" >I haven&amp;rsquo;t seen anything about a new Meshtastic preset. What&amp;rsquo;s your sourcing on this?
&lt;span>
&lt;a href="#i-havent-seen-anything-about-a-new-meshtastic-preset-whats-your-sourcing-on-this" title="Direct Link to I haven&amp;rsquo;t seen anything about a new Meshtastic preset. What&amp;rsquo;s your sourcing on this?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>It seems a lot of this discussion has been happening in private Discords, so sourcing this is hard. However, it became clear when we saw that starting in Meshtastic version 2.8, the Meshtastic firmware will &lt;a href="https://github.com/meshtastic/firmware/pull/11637">default to LongTurbo for users in the US&lt;/a>. Mobile apps will warn users on the LongFast preset that their preset is violating FCC regulations and push them to move to LongTurbo. We believe this will cause many Meshtastic users, especially new ones, to use Meshtastic LongTurbo and effectively kill the current default Meshtastic LongFast network.&lt;/p>
&lt;p>Meshtastic&amp;rsquo;s leadership has discussed on other Discords that further &amp;ldquo;friction&amp;rdquo; will come in version 3.0 and later.&lt;/p>
&lt;h3 id="did-some-people-know-about-this-its-suspicious-that-we-did-longturbo-tests-a-month-before-we-found-out-that-longturbo-is-the-only-legal-default" >Did some people know about this? It&amp;rsquo;s suspicious that we did LongTurbo tests a month before we found out that LongTurbo is the only legal default.
&lt;span>
&lt;a href="#did-some-people-know-about-this-its-suspicious-that-we-did-longturbo-tests-a-month-before-we-found-out-that-longturbo-is-the-only-legal-default" title="Direct Link to Did some people know about this? It&amp;rsquo;s suspicious that we did LongTurbo tests a month before we found out that LongTurbo is the only legal default.">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Some folks who follow the Meshtastic firmware GitHub repo and are part of other Meshtastic Discords had heard rumors that the default preset might be changing. No one knew why; we&amp;rsquo;re not even sure if the default preset change was because of the FCC regulations or because of &lt;a href="https://meshtastic.org/blog/why-your-mesh-should-switch-from-longfast/">this meshtastic.org post&lt;/a> about LongFast not being the best default for cities.&lt;/p>
&lt;p>We realized this default change would fracture the mesh significantly and our Discord would play a key role in informing users about the changes and helping support users change their existing nodes. We thought about it and decided to take the opportunity to not blindly trust the new recommended default, but to find a preset and custom settings that would actually improve PhillyMesh&amp;rsquo;s performance.&lt;/p>
&lt;p>It wasn&amp;rsquo;t until we saw &lt;a href="https://github.com/meshtastic/firmware/pull/11637">version 2.8&lt;/a> and &lt;a href="https://github.com/meshcore-dev/MeshCore/issues/945">this heated discussion in the MeshCore Github&lt;/a> that the violation of FCC regulations became clear. This resulted in a few days of waiting to see if the Meshtastic project would say anything about it before we decided to stop waiting and make this post ourselves.&lt;/p>
&lt;h3 id="shouldnt-someone-be-fixing-this" >Shouldn&amp;rsquo;t someone be fixing this?
&lt;span>
&lt;a href="#shouldnt-someone-be-fixing-this" title="Direct Link to Shouldn&amp;rsquo;t someone be fixing this?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Meshtastic is a global project. Many of the developers are based in Europe, where the regulations are actually the opposite (in their 433 MHz frequency band the bandwidth must be less than 500 kHz). Only a small subset of the devices that hardware manufacturers sell are being used for Meshtastic, so they leave it up to the users to make sure their devices are in compliance. If there is a better solution to this issue, such as a different frequency band to use in North America for Meshtastic, we don&amp;rsquo;t see it arriving quickly.&lt;/p>
&lt;h3 id="could-lowering-the-power-on-meshtastic-transmissions-allow-us-to-still-have-a-bandwidth-of-250-khz-and-be-fcc-compliant" >Could lowering the power on Meshtastic transmissions allow us to still have a bandwidth of 250 kHz and be FCC-compliant?
&lt;span>
&lt;a href="#could-lowering-the-power-on-meshtastic-transmissions-allow-us-to-still-have-a-bandwidth-of-250-khz-and-be-fcc-compliant" title="Direct Link to Could lowering the power on Meshtastic transmissions allow us to still have a bandwidth of 250 kHz and be FCC-compliant?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Yes, but we&amp;rsquo;re pretty sure it would have to be lowered so much that Meshtastic LongFast would be completely useless. Some math by one of our members, KT3H, says that the power would be limited to something like 0.0006 Watts, which is tiny compared to the ~1 Watt we have been using. Lowering the power on Meshtastic LongFast that much would severely compromise our ability to communicate using Meshtastic. Messages wouldn&amp;rsquo;t be able to travel as far and the mesh would perform significantly worse. Using Meshtastic LongFast at a fraction of the power would be even worse than using Meshtastic LongTurbo.&lt;/p>
&lt;h3 id="that-00006-watt-number-is-very-specific-how-did-you-calculate-it-also-what-are-the-actual-regulations-were-discussing-here" >That 0.0006 Watt number is very specific, how did you calculate it? Also, what are the actual regulations we&amp;rsquo;re discussing here?
&lt;span>
&lt;a href="#that-00006-watt-number-is-very-specific-how-did-you-calculate-it-also-what-are-the-actual-regulations-were-discussing-here" title="Direct Link to That 0.0006 Watt number is very specific, how did you calculate it? Also, what are the actual regulations we&amp;rsquo;re discussing here?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Our understanding of the regulation is as follows (with the usual caveat that we are not lawyers and are awaiting official word on guidance): Unlicensed operation in the 902 MHz band is governed by 47 CFR Part 15 Subpart C. There are two sections that apply, and you must pick one to operate under. Under §15.247 the bandwidth must be no less than 500 kHz, but the power can be up to 1 Watt. Under §15.247 there is no bandwidth restriction, but the maximum field strength is 50 mV/m at a distance of 3 meters. This is equivalent to an output power of 0.0006 Watts.&lt;/p>
&lt;h3 id="can-we-move-to-another-frequency-band-that-has-different-regulations" >Can we move to another frequency band that has different regulations?
&lt;span>
&lt;a href="#can-we-move-to-another-frequency-band-that-has-different-regulations" title="Direct Link to Can we move to another frequency band that has different regulations?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Potentially. But that would require, first, a research effort to find one compatible with the Meshtastic project. Second, it would almost certainly require purchasing new antennas for all our nodes. And third, it would likely require us to purchase entirely new nodes (which would first need to be designed and manufactured) that are compatible with the new frequency. Unfortunately, we don&amp;rsquo;t see that happening anytime soon.&lt;/p>
&lt;h3 id="is-there-a-chance-the-fcc-will-change-their-regulations" >Is there a chance the FCC will change their regulations?
&lt;span>
&lt;a href="#is-there-a-chance-the-fcc-will-change-their-regulations" title="Direct Link to Is there a chance the FCC will change their regulations?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>The FCC is largely concerned with regulating the frequency bands that they license for commercial use. While using amateur bands brings us nerds a lot of joy, it actually results in less money in licensing for the government. Furthermore, &lt;a href="https://meshtastic.org/blog/meshtastic-opposition-to-nextnav-proposed-changes/">NextNav has been lobbying the FCC&lt;/a> to further restrict amateur usage of the 900 MHz ISM band and reserve parts of it for commercial use. We consider ourselves lucky that NextNav hasn&amp;rsquo;t succeeded thus far, and unless an independently wealthy Meshtastic user wants to fund their own lobbying campaign, we see a change in FCC regulation to be unlikely.&lt;/p>
&lt;h3 id="do-we-expect-meshtastic-longturbo-to-perform-better-in-the-future-than-it-did-during-our-testing" >Do we expect Meshtastic LongTurbo to perform better in the future than it did during our testing?
&lt;span>
&lt;a href="#do-we-expect-meshtastic-longturbo-to-perform-better-in-the-future-than-it-did-during-our-testing" title="Direct Link to Do we expect Meshtastic LongTurbo to perform better in the future than it did during our testing?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>We do expect Meshtastic LongTurbo to perform marginally better once more people switch over to it. We didn&amp;rsquo;t have a large number of nodes participating in this test, and because LongTurbo messages don&amp;rsquo;t go very far we needed more nodes than we had to get a proper mesh going. We expect that as Meshtastic LongTurbo adoption increases (and as we install more well-placed infrastructure dual-radio nodes that support LongTurbo) we will be able to communicate better over short distances using LongTurbo. The reason we&amp;rsquo;re also focusing on building out MeshCore at 500 kHz is because those messages seem to be able to go a lot further, and that gives us the best shot to be able to communicate across our wide metro area, from Jersey to Delco and beyond.&lt;/p>
&lt;p>A core goal of the group is to be accessible to those who are new to mesh networks and be in touch with whatever is most used in our area. That&amp;rsquo;s why our dual-radio infrastructure nodes will have one radio tuned to whatever the current Meshtastic default preset is (as long as it&amp;rsquo;s FCC-compliant) and the other will be on MeshCore at 500 kHz. We may move somewhere else in the future, but that&amp;rsquo;s what we expect to be using until the next big revelation or new technology release.&lt;/p>
&lt;h3 id="i-have-a-good-place-for-a-node-or-a-resourceskill-i-can-bring-to-phillymesh" >I have a good place for a node, or a resource/skill I can bring to PhillyMesh!
&lt;span>
&lt;a href="#i-have-a-good-place-for-a-node-or-a-resourceskill-i-can-bring-to-phillymesh" title="Direct Link to I have a good place for a node, or a resource/skill I can bring to PhillyMesh!">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Please let the Ops Division know by tagging @PhillyMesh Operations Division on Discord! For node locations to be officially associated with PhillyMesh, you must have explicit permission from the property owner to install the node, and if you have internet and/or power at the location that&amp;rsquo;s a huge plus.&lt;/p></description></item><item><title>How to Flash MeshCore</title><link>https://phillymesh.net/2026/09/02/how-to-flash-meshcore/</link><pubDate>Wed, 02 Sep 2026 00:00:01 +0000</pubDate><author>RightSizedAlpaca</author><guid>https://phillymesh.net/2026/09/02/how-to-flash-meshcore/</guid><description>&lt;h1 id="how-to-flash-a-meshtastic-node-to-meshcore" >How to flash a Meshtastic node to MeshCore
&lt;span>
&lt;a href="#how-to-flash-a-meshtastic-node-to-meshcore" title="Direct Link to How to flash a Meshtastic node to MeshCore">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 id="1-back-up-your-previous-meshtastic-settings" >1. Back up your previous Meshtastic settings
&lt;span>
&lt;a href="#1-back-up-your-previous-meshtastic-settings" title="Direct Link to 1. Back up your previous Meshtastic settings">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>Before doing anything, it is recommended to backup your current Meshtastic node config.&lt;/li>
&lt;li>From your phone app while connected to your Meshtastic node, go to Settings &amp;gt; Export Configuration, select all toggles, and then save that .cfg file somewhere safe.&lt;/li>
&lt;li>If ever you want to change your node back to Meshtastic, you can use this config file with the &amp;ldquo;Import Configuration&amp;rdquo; to more quickly return it to its current state.&lt;/li>
&lt;/ul>
&lt;h2 id="2-grab-your-node-and-a-good-data-enabled-usb-cable" >2. Grab your node and a GOOD data-enabled USB cable
&lt;span>
&lt;a href="#2-grab-your-node-and-a-good-data-enabled-usb-cable" title="Direct Link to 2. Grab your node and a GOOD data-enabled USB cable">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>Just like when doing firmware updates via serial, you&amp;rsquo;re going to want a good cable that enables data transmission (many cables are charge-only).
&lt;ul>
&lt;li>If you have a cable that worked for Meshtastic flashing, it should work for MeshCore as well.&lt;/li>
&lt;li>So many instances of &amp;ldquo;flashing failed&amp;rdquo; are cable-related. If the thing is old, wobbly, been chewed on by your cat, filled with lint, been through the washing machine, been used by Gritty, etc&amp;hellip; get a better cable, otherwise you&amp;rsquo;re gonna have a bad time.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="3-connect-your-node-to-your-computer" >3. Connect your node to your computer
&lt;span>
&lt;a href="#3-connect-your-node-to-your-computer" title="Direct Link to 3. Connect your node to your computer">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If it&amp;rsquo;s USB-A, it&amp;rsquo;s upside-down, flip it. Now flip it again.
GUESS WHAT, IT WAS RIGHT THE FIRST TIME, flip it one more time.&lt;/p>
&lt;h2 id="4-open-the-meshcore-flasher" >4. Open the MeshCore Flasher
&lt;span>
&lt;a href="#4-open-the-meshcore-flasher" title="Direct Link to 4. Open the MeshCore Flasher">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Go to &lt;a href="https://flasher.meshcore.io/">https://flasher.meshcore.io/&lt;/a>&lt;/p>
&lt;p>Note that you&amp;rsquo;ll need to use a Chromium-based browser, like Chrome or Edge.
Firefox isn&amp;rsquo;t going to work.&lt;/p>
&lt;h2 id="5-select-device-type" >5. Select Device Type
&lt;span>
&lt;a href="#5-select-device-type" title="Direct Link to 5. Select Device Type">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Find your exact node (exact model) and click on it.&lt;/p>
&lt;p>If you can&amp;rsquo;t find your exact model, ask in the Discord.&lt;/p>
&lt;h2 id="6-select-device-role" >6. Select Device Role
&lt;span>
&lt;a href="#6-select-device-role" title="Direct Link to 6. Select Device Role">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Unlike Meshtastic where you could change between CLIENT and CLIENT_MUTE in the app, MeshCore requires specific firmware for each role.&lt;/p>
&lt;ul>
&lt;li>If you only have one single device/node, select &amp;ldquo;Companion Bluetooth&amp;rdquo;.&lt;/li>
&lt;li>If you have a multi-node setup
&lt;ul>
&lt;li>Select &amp;ldquo;Companion Bluetooth&amp;rdquo; for your pocket node.&lt;/li>
&lt;li>Select &amp;ldquo;Repeater&amp;rdquo; for the powerful/stationary node (the node on your roof, in your tree, in your attic, etc.)
&lt;ul>
&lt;li>Note that repeater nodes cannot be configured via bluetooth, but once configured over USB you can make changes from your companion node.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="7-flash-the-meshcore-firmware" >7. Flash the MeshCore Firmware
&lt;span>
&lt;a href="#7-flash-the-meshcore-firmware" title="Direct Link to 7. Flash the MeshCore Firmware">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="for-nrf-based-nodes" >For NRF-based nodes
&lt;span>
&lt;a href="#for-nrf-based-nodes" title="Direct Link to For NRF-based nodes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>There is a warning at the top that says &amp;ldquo;We strongly recommend installing OTAFIX BOOTLOADER … for more reliable Bluetooth OTA DFU.&amp;rdquo; Click on &amp;ldquo;OTAFIX BOOTLOADER&amp;rdquo; and it will download a .uf2 file that does this. Follow the instructions here: &lt;a href="https://blog.meshcore.io/2026/04/06/otafix-bootloader">Installing the OTAFix Bootloader - MeshCore Blog&lt;/a>. When it comes time to update the node, you will be happy you did this.&lt;/li>
&lt;li>Click &amp;ldquo;Enter DFU Mode&amp;rdquo; (in theory there is no need to double click the reset button anymore). If nothing happens (no pop up), ensure you are using a Chromium based browser like Chrome or Edge.&lt;/li>
&lt;li>When the pop-up with devices shows up, select the COM port of your device. It is typically something like &amp;ldquo;nRF Serial&amp;rdquo; but may be something different depending on your device. When it is connected, the previous &amp;ldquo;Enter DFU Mode&amp;rdquo; button will now have a check and say &amp;ldquo;DFU Mode Active&amp;rdquo;.&lt;/li>
&lt;li>Click &amp;ldquo;Erase Flash&amp;rdquo;. When complete, a popup will show &amp;ldquo;Device erase firmware has been flashed and flash has been erased. You can flash MeshCore now.&amp;rdquo; Click OK.&lt;/li>
&lt;li>Click the Flash button. A similar popup with COM ports will allow you to select the device. A warning that the COM port number and/or device name may have changed now that it has been erased.&lt;/li>
&lt;/ul>
&lt;h3 id="for-esp32-based-nodes" >For ESP32-based nodes
&lt;span>
&lt;a href="#for-esp32-based-nodes" title="Direct Link to For ESP32-based nodes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>Select &amp;ldquo;Erase Device&amp;rdquo; because the current firmware on your node is Meshtastic and must be erased.&lt;/li>
&lt;li>Click &amp;ldquo;Flash&amp;rdquo;&lt;/li>
&lt;li>In the pop-up, select your node based on the COM port. Click OK.&lt;/li>
&lt;li>Watch the progress. Beware that erasing flash may take some time (minutes) where it appears little progress is occurring, then it will then progress to flashing.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>DON&amp;rsquo;T CLOSE THE WINDOW OR DISCONNECT THE DEVICE YET&lt;/strong>&lt;/p>
&lt;h2 id="8-configure-your-new-meshcore-node" >8. Configure your new MeshCore Node
&lt;span>
&lt;a href="#8-configure-your-new-meshcore-node" title="Direct Link to 8. Configure your new MeshCore Node">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="for-companion-nodes" >For Companion Nodes
&lt;span>
&lt;a href="#for-companion-nodes" title="Direct Link to For Companion Nodes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>After flashing in step 7, disconnect the node from your computer and pair it to your phone using Bluetooth.
&lt;ul>
&lt;li>If the device has a screen, the PIN is displayed there as a randomized six digit number.&lt;/li>
&lt;li>If the device has no screen, 123456 is the default PIN.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Configure the radio to match the settings listed in &lt;a href="https://phillymesh.net/2026/09/02/fcc-regulations/#meshcore-and-meshtastic-fcc-compliant-settings">our post about &amp;ldquo;MeshCore500&amp;rdquo;&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="for-repeater-nodes" >For Repeater Nodes
&lt;span>
&lt;a href="#for-repeater-nodes" title="Direct Link to For Repeater Nodes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>After flashing in step 7, DO NOT DISCONNECT the node from your computer. Initial settings must be made over serial first!&lt;/li>
&lt;li>Click on &amp;ldquo;Configure via USB&amp;rdquo;.&lt;/li>
&lt;li>A new window will pop up. Click &amp;ldquo;Connect&amp;rdquo; in the top right. Yet another pop up will let you select the device via COM port, and yet again the number and/or name may have changed.&lt;/li>
&lt;li>The repeater setup page has a few settings you MUST setup before you disconnect, we&amp;rsquo;ll start with those:
&lt;ul>
&lt;li>Under ACCESS, create a new admin password and keep it somewhere safe. This is how you will access your repeater via LoRa. If you lose this, you can&amp;rsquo;t get back into the repeater without plugging it back into your computer again.&lt;/li>
&lt;li>Under RADIO SETTINGS, change the settings to match the settings listed in &lt;a href="https://phillymesh.net/2026/09/02/fcc-regulations/#meshcore-and-meshtastic-fcc-compliant-settings">our post about &amp;ldquo;MeshCore500&amp;rdquo;&lt;/a>. These settings (freq, bandwidth, SF, coding rate) must match your companion node for the two to see each other and the rest of the mesh.&lt;/li>
&lt;li>Click SAVE SETTINGS at the bottom. A toast message with &amp;ldquo;Data successfully saved&amp;rdquo; should pop up for a second.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>At this point you can disconnect your repeater and configure the rest over LoRa (using the password you just set), or finish setting it up here on a bigger screen while you&amp;rsquo;re already connected.
&lt;ul>
&lt;li>Copy the Public and Private keys and keep them somewhere safe.&lt;/li>
&lt;li>In NAME &amp;amp; LOCATION, at least change the name to something unique. A warning that when you set the location (now or later on) it will truncate the name from 32 bytes to 24 bytes.&lt;/li>
&lt;li>Under ADVERTISING, change the Advert Interval to 240. Leave the Flood Advert at 47.&lt;/li>
&lt;li>In Owner Info, feel free to put in your Discord username or Ham call sign or leave it blank, whatever you&amp;rsquo;re comfortable with!&lt;/li>
&lt;li>Click on the SHOW ADVANCED SETTINGS checkbox and change LOOP DETECTION to Minimal. Change PATH HASH MODE from 1-byte (0) to 2-byte (1).&lt;/li>
&lt;li>Hit SAVE SETTINGS in the bottom left.&lt;/li>
&lt;li>Hit Reboot in the top middle (some of the settings don&amp;rsquo;t take effect until after a reboot). Rebooting also has the effect of disconnecting the device from the computer. You can now unplug and place the repeater back into its strategic location!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Your repeater should now be automatically repeating packets, and when you send a message using your companion node, you should see your repeater as the first hop out.&lt;/li>
&lt;/ul>
&lt;h3 id="update-time-and-location" >Update Time and Location
&lt;span>
&lt;a href="#update-time-and-location" title="Direct Link to Update Time and Location">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Look for a setting similar to &amp;ldquo;sync/set device clock to phone time&amp;rdquo; and click it.&lt;/p>
&lt;ul>
&lt;li>MeshCore can be weird with time settings, it is a good practice to occasionally do this so your node&amp;rsquo;s clock doesn&amp;rsquo;t become too out-of-sync with the mesh.&lt;/li>
&lt;li>Some apps have a setting to sync automatically.&lt;/li>
&lt;/ul>
&lt;p>Set a location for your node, especially if it&amp;rsquo;s a repeater.&lt;/p>
&lt;ul>
&lt;li>The easiest way to do this is from the map view, where you can select a location and set it as your node location.&lt;/li>
&lt;li>Note that the location does not get &amp;ldquo;fuzzed&amp;rdquo; like in Meshtastic, please do not use your exact home address if you are not comfortable doing so.&lt;/li>
&lt;/ul>
&lt;h2 id="done-unless" >Done! Unless&amp;hellip;
&lt;span>
&lt;a href="#done-unless" title="Direct Link to Done! Unless&amp;hellip;">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>For any step, when in doubt, feel free to reach out! We&amp;rsquo;re happy to help on the Discord.&lt;/p></description></item><item><title>MeshCore Intro</title><link>https://phillymesh.net/2026/09/02/meshcore-intro/</link><pubDate>Wed, 02 Sep 2026 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2026/09/02/meshcore-intro/</guid><description>&lt;h1 id="meshcore-settings" >MeshCore Settings
&lt;span>
&lt;a href="#meshcore-settings" title="Direct Link to MeshCore Settings">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>&lt;em>These are the settings we&amp;rsquo;re recommending for MeshCore 500. They are FCC-compliant and avoid the heaviest ISM band interference that we found during our testing in the Philadelphia area. Please make sure your MeshCore node is updated to the latest firmware before using these settings!&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Frequency: &lt;code>902.250 MHz&lt;/code>&lt;/li>
&lt;li>Bandwidth: &lt;code>500 kHz&lt;/code>&lt;/li>
&lt;li>Spreading Factor: &lt;code>11&lt;/code>&lt;/li>
&lt;li>Coding Rate: &lt;code>4/5&lt;/code> (some apps may just say &lt;code>5&lt;/code>)&lt;/li>
&lt;li>Path Hash Mode: &lt;code>1&lt;/code> (2-byte mode, some apps list this setting as &lt;code>1-2 byte&lt;/code>)&lt;/li>
&lt;/ul>
&lt;h1 id="what-you-need-to-know-about-meshcore-coming-from-meshtastic" >What you need to know about MeshCore coming from Meshtastic
&lt;span>
&lt;a href="#what-you-need-to-know-about-meshcore-coming-from-meshtastic" title="Direct Link to What you need to know about MeshCore coming from Meshtastic">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 id="bluetooth-companion-node-or-repeater" >Bluetooth Companion Node or Repeater
&lt;span>
&lt;a href="#bluetooth-companion-node-or-repeater" title="Direct Link to Bluetooth Companion Node or Repeater">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>In Meshtastic most devices are configured as &amp;ldquo;client&amp;rdquo;. The network is designed so that every node can not only send messages but also repeat messages sent to them for others to hear. In order to reduce traffic on the network, it was recommended that nodes that are carried with you, ones that you don&amp;rsquo;t expect to be bridging gaps in the mesh all by themselves, be configured as &amp;ldquo;client_mute&amp;rdquo;. These nodes don&amp;rsquo;t repeat messages, they&amp;rsquo;re only used to send messages.&lt;/p>
&lt;p>In MeshCore that concept is built into the beginning. When flashing a node you have to choose whether it will be a &amp;ldquo;Bluetooth Companion&amp;rdquo; node (equivalent to client_mute) or a &amp;ldquo;Repeater&amp;rdquo; (client). Repeaters can&amp;rsquo;t be connected to with Bluetooth, so if you only have one node you&amp;rsquo;ll want it to be a Bluetooth Companion node. If you live close enough that your Bluetooth Companion can reach someone else&amp;rsquo;s Repeater node, you won&amp;rsquo;t need your own. But you may still want to invest in a Repeater node.&lt;/p>
&lt;p>Since you can&amp;rsquo;t connect to a Repeater via Bluetooth, Repeaters must be administered from a Bluetooth Companion node or via USB. In the initial set-up for a Repeater you&amp;rsquo;ll be prompted to set an admin password. Leaving this field blank will result in anyone being able to change settings on your Repeater. The guest password setting is only for restricting other people from seeing read-only telemetry data about your Repeater. You can feel free to leave this blank.&lt;/p>
&lt;h2 id="encryption" >Encryption
&lt;span>
&lt;a href="#encryption" title="Direct Link to Encryption">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Just as with Meshtastic, all MeshCore traffic is encrypted. Just as with Meshtastic, there&amp;rsquo;s just a default &amp;ldquo;public&amp;rdquo; channel with a known key baked in.&lt;/p>
&lt;h2 id="chats-and-channels" >Chats and Channels
&lt;span>
&lt;a href="#chats-and-channels" title="Direct Link to Chats and Channels">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>You can make a private channel in MeshCore just like you can in Meshtastic. MeshCore only requires that you know the key to join it, whereas in Meshtastic you need the correct combination of the name and private key.&lt;/p>
&lt;p>MeshCore also introduces a feature called &amp;ldquo;Hashtag channels&amp;rdquo;. These are joinable by name-only (aka no key/password), for example: &amp;ldquo;#prm&amp;rdquo;. These are used much more heavily than private channels are in Meshtastic, since they&amp;rsquo;re easier to share and join. Add some common terms like &amp;ldquo;#philly&amp;rdquo;, &amp;ldquo;#bot&amp;rdquo;, &amp;ldquo;#weather&amp;rdquo;, or &amp;ldquo;#test&amp;rdquo; to see them.&lt;/p>
&lt;h2 id="announcements" >Announcements
&lt;span>
&lt;a href="#announcements" title="Direct Link to Announcements">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>On Meshtastic your node would announce itself periodically and your node database would fill over the course of a day. On MeshCore, only the repeaters announce themselves. You can force searching for repeaters by using a &amp;ldquo;Scan for Repeaters&amp;rdquo; tool in most MeshCore apps.&lt;/p>
&lt;p>You can force your node to advertise itself across the MeshCore network by using the &amp;ldquo;Send Flood Advert&amp;rdquo; feature in most MeshCore apps.&lt;/p>
&lt;h2 id="reach" >Reach
&lt;span>
&lt;a href="#reach" title="Direct Link to Reach">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The maximum Hop Limit on Meshtastic is seven, and by default it&amp;rsquo;s set to three. In MeshCore, the default Hop Limit is 64, meaning your messages can travel much further than with Meshtastic. It is recommended to use the Path Hash Mode of &amp;ldquo;1&amp;rdquo;, aka a 2-byte path hash, which has the downside of limiting your hops to 32 instead of 64. The upside is that your repeater ID in flood path / loop-detects is encoded with 65,536 possible variations instead of only 256, making for a much more stable overall mesh. This setting is commonly used in MeshCore-default meshes as well.&lt;/p></description></item><item><title>Medium Slow and Long Turbo Testing in Philadelphia</title><link>https://phillymesh.net/2026/08/12/freq-testing-report/</link><pubDate>Wed, 12 Aug 2026 00:00:01 +0000</pubDate><author>Seth</author><guid>https://phillymesh.net/2026/08/12/freq-testing-report/</guid><description>&lt;p>As a review, two weeks ago we tested MediumSlow 22 for one week and then we moved to LongTurbo 12 for a week. &lt;a href="https://phillymesh.net/freq-test/">Read more about that in our explainer article here&lt;/a>. We now wanted to update everyone with the results of our testing.&lt;/p>
&lt;p>First, a HUGE thank you to everyone who has been so helpful, patient, and willing to share time/effort getting nodes into these test modes. Including this week&amp;rsquo;s frantic &amp;ldquo;uhhhhhh everyone update firmware nowwww&amp;rdquo;. Y&amp;rsquo;all have been awesome with all these changes and tests and we sincerely thank you all. These tests would not work without your help. We acknowledge the ask to change Lora settings frequently has been&amp;hellip; tiring to put it nicely.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/gandalf-dayswithout.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/gandalf-dayswithout_hu_9fa53303d74485e0.webp" alt="Memes" width="100%">
&lt;/a>&lt;h1 id="why-did-we-conduct-the-tests" >Why did we conduct the tests?
&lt;span>
&lt;a href="#why-did-we-conduct-the-tests" title="Direct Link to Why did we conduct the tests?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>So a quick reminder on the WHY. Our mesh on LongFast 20 (LF20) has become super congested. The past few months most of us have noticed our messages traveling shorter and shorter distances, more and more Trace Routes (TRs) failing, and just the general functionality decline over time.&lt;/p>
&lt;p>Regardless of each of our use cases for Meshtastic (emcomms, private comms with family/friends, public message board, or if you&amp;rsquo;re named Kyle Y - undiluted, high-octane shitposting), this congestion is preventing the mesh and the technology from fulfilling its promise.&lt;/p>
&lt;h1 id="why-did-we-pick-mediumslow-and-longturbo" >Why did we pick MediumSlow and LongTurbo?
&lt;span>
&lt;a href="#why-did-we-pick-mediumslow-and-longturbo" title="Direct Link to Why did we pick MediumSlow and LongTurbo?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>The default preset of LF20 wasn&amp;rsquo;t really designed for big, dense cities like Philly. There&amp;rsquo;s a Meshtastic &lt;a href="https://meshtastic.org/blog/why-your-mesh-should-switch-from-longfast/">blog post from over a year ago&lt;/a> describing this nicely and is worth a read if you haven&amp;rsquo;t yet. Our goal in testing different presets was to move up this chart to gain more bandwidth for additional traffic. More bandwidth means more room for messages and less congestion. Kinda like expanding a highway to add more lanes.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/preset-chart.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/preset-chart_hu_35842e694068ceb8.webp" alt="Meshtastic Default Preset Chart" width="100%">
&lt;/a>&lt;p>But the downside of doing that is that as you can see in the rightmost column, these faster presets travel less far (aka less link budget). So you&amp;rsquo;re trading off speed for distance. Kinda like upgrading from 2.4 GHz wifi to 5 GHz wifi, it ain&amp;rsquo;t gonna reach out into the back yard or shed or whatnot. So these tests were designed to see how links degraded at faster presets.&lt;/p>
&lt;p>We picked FreqSlots that were non-default as well as requested setting changes so that we could further reduce congestion. This would help fix the pie chart in the Malla summarizing our traffic. SO much of it was non-message traffic and we wanted to address that so that the larger highway would prioritize cars with people, not just empty Waymos lol.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/malla-pie-chart.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/malla-pie-chart_hu_26c73fe4ed059570.webp" alt="Past Malla Pie Chart" width="100%">
&lt;/a>&lt;p>&lt;em>For those newbies among us, Meshtastic sends a lot of packets in the background. Messages are just one small part of the pie (called TEXT_MESSAGE_APP in the chart above). Many of our recommended settings changes from the tests aimed to reduce all of the other packets being sent so there&amp;rsquo;s more bandwidth for those messages to be sent.&lt;/em>&lt;/p>
&lt;p>We also picked freq slots to be kind to those with AirFrames Cavity filters. This is why we didn&amp;rsquo;t just change to the default MediumSlow frequency but instead asked people to use FreqSlot 22. The two reasons for this were:&lt;/p>
&lt;ol>
&lt;li>Because it&amp;rsquo;s non-default, we are unlikely to encounter anyone who isn&amp;rsquo;t explicitly partipating in our test and therefore aren&amp;rsquo;t using our recommended settings.&lt;/li>
&lt;li>It&amp;rsquo;s in an area close to, but not immediately next to, LF20 so folks with cavity filters don&amp;rsquo;t need to retune them.&lt;/li>
&lt;/ol>
&lt;p>If you&amp;rsquo;re curious, below is a chart showing the actual frequencies that result when you use a particular frequency slot with a preset. LongFast 20 (the current default) gives you the 906.750 - 907.000 slot. MediumSlow 22 is nearby, around 907.250 - 907.500. The purple bar on the right shows what range the Airframe Cavity Filters are tuned for out of the box. They work best toward the center of that purple band.&lt;/p>
&lt;p>You&amp;rsquo;ll also notice the LongTurbo &amp;ldquo;14 - New Default?&amp;rdquo; note. Meshtastic is considering moving their default preset from LF20 to LT14, which I&amp;rsquo;ll touch on a little later.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/freq-preset-chart.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/freq-preset-chart_hu_e747679161102f59.webp" alt="Freq Preset Chart" width="75%">
&lt;/a>&lt;h1 id="challenges-we-must-overcome" >Challenges we must overcome
&lt;span>
&lt;a href="#challenges-we-must-overcome" title="Direct Link to Challenges we must overcome">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>Other cities like NYC, which are pretty flat, have it easy compared to Philly. We have this unique mix of dense urban, flat topography&amp;hellip; and then suburban, hilly terrain with tall hills blocking the city in.&lt;/p>
&lt;p>In addition to geologic challenges, to date our mesh has been pretty ad-hoc. We don&amp;rsquo;t have many infra nodes, meaning we&amp;rsquo;re relying on users like you and me to act as infra nodes if we have a good vantage point and pass traffic to the less fortunate in valleys, riverbeds, etc.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/3pathetic.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/3pathetic_hu_ddb4caf2a39d9aa1.webp" alt="Meme" width="75%">
&lt;/a>&lt;p>We also have a LOT of nodes that were set up, maybe used for a week or two, and then left on. Which is, in theory, helpful because it&amp;rsquo;s a mesh and they pass on traffic. BUT they are running older firmware (we&amp;rsquo;ll get to that with LongTurbo) and in the mindset of congestion - the Meshtastic defaults and/or what many users set is creating needless congestion.&lt;/p>
&lt;p>Many of these older nodes are blasting position every hour (or more frequent) as a stationary node. Or sending out telemetry like battery stats, air temp, etc. And in some cases they&amp;rsquo;re set to the wrong role (like ROUTER) when they should be CLIENT, so they&amp;rsquo;re locally negatively impacting the mesh.&lt;/p>
&lt;p>During our tests and with the upcoming changes that will be announced once we decide on them, we would be leaving them behind in the short term, with the hope that those node owners will realize we&amp;rsquo;ve moved on and they can join us once they update and fix their nodes. This change was never intended to be exclusionary, but instead a catalyst for node owners to fix their nodes to be more mesh-friendly, congestion-wise.&lt;/p>
&lt;h1 id="so-what-did-we-find-during-our-tests" >So what did we find during our tests?
&lt;span>
&lt;a href="#so-what-did-we-find-during-our-tests" title="Direct Link to So what did we find during our tests?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>MediumSlow 22 (MS22) was chosen first because it was the higher bandwidth of the two presets we wanted to test and we thought it was less likely to work given the mesh challenges described above. We had a VERY WEIRD few days of very degraded links and noise floor issues that we could not figure out, and we finished the week with the Ops Div going &amp;ldquo;wellllll that didn&amp;rsquo;t go great but that was the stretch preset so no biggie, let&amp;rsquo;s move to Long Turbo.&amp;rdquo;&lt;/p>
&lt;p>LongTurbo 12 (LT12) started unofficially a day early and even within the OpsDiv we struggled to get it to work. We uncovered a latent issue with legacy firmware where your app can set LongTurbo as a preset&amp;hellip; the node takes that preset setting and then tells the app &amp;ldquo;I&amp;rsquo;m good boss&amp;rdquo; but then has zero idea what it is doing.&lt;/p>
&lt;p>We think we may have seen a node or two doing this that was also blasting out garbage traffic due to elevated noise floors from neighboring nodes but (we&amp;rsquo;ll get to noise floor in a bit) we&amp;rsquo;re not sure.&lt;/p>
&lt;p>Ultimately though, strike one for LongTurbo - it requires only the most recent alpha/beta in firmware to work but won&amp;rsquo;t tell you that when you set it. If we made this our default preset for Philly Mesh, we would be troubleshooting LongTurbo f*ckery in the Discord day and night forever. We want something that you set and it works, so this was already a near-disqualifying issue with LongTurbo.&lt;/p>
&lt;p>Once we got nodes updated firmware-wise, things still weren&amp;rsquo;t going great. If you look at the chart of presets above, LongTurbo is kinda unique as it&amp;rsquo;s one of only two presets that uses a 500 kHz bandwidth (the other being ShortTurbo). To continue the wifi analogy, it&amp;rsquo;s like setting a 160 MHz width channel when everyone else is on 80 MHz. Some devices straight up won&amp;rsquo;t communicate with it. The device has to TX and RX on 2x the width of spectrum.&lt;/p>
&lt;p>We noticed that some of the devices seem to struggle to make connections where MS22 had previously worked, which made no sense. It seemed there were particular issues with RAK4631 devices (which make up about 20% of the devices on our mesh), but other RAK4631s worked fine. And one T096 had issues.&lt;/p>
&lt;p>Looking at the SDR plots we think some of the devices have some serious spurious emissions (blasting RF outside where the TX bandwidth of 500 kHz). This is early testing from yesterday so not confident in the results, but we&amp;rsquo;re noticing that qualitatively some of these nodes just straight up don&amp;rsquo;t like a 500 kHz bandwidth.&lt;/p>
&lt;p>What is more concerning is that a few of us kicked on our SDRs to look at traffic and noticed something we shoulda seen coming. Enter new villain into this testing: NON-MESH RF INTERFERENCE&amp;hellip;&lt;/p>
&lt;h1 id="non-mesh-rf-interference-boooooooo-hissssss" >Non-Mesh RF Interference (boooooooo hissssss)
&lt;span>
&lt;a href="#non-mesh-rf-interference-boooooooo-hissssss" title="Direct Link to Non-Mesh RF Interference (boooooooo hissssss)">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>Here&amp;rsquo;s a video recording of my SDR. For those unfamiliar, there&amp;rsquo;s a spectroscope at the top showing the live reading, with the y-axis being intensity / sound level and the x-axis being frequency. I&amp;rsquo;m listening to a couple of MHz of the ISM band here, moved up away from LongFast to show you what we&amp;rsquo;re picking up.&lt;/p>
&lt;p>It is A LOT. And it&amp;rsquo;s everywhere on the ISM band, including where LongFast is, where LongTurbo12 is, where MediumSlow22 is, insert whatever preset you want&amp;hellip; it&amp;rsquo;s got SO much chirps. All the chirps.&lt;/p>
&lt;video controls>
&lt;source src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/sdr-recording.mp4" type="video/mp4">
&lt;/video>
&lt;p>One of our members, Dusty, lives next to [REDACTED MANUFACTURING FACILITY] and had picked up a LOT of this and OpsDiv was like &amp;ldquo;wellllll I&amp;rsquo;m sorry that sucks for your location&amp;rdquo;. Little did we know we don&amp;rsquo;t have to live next to [REDACTED MANUFACTURING FACILITY] to be seeing this.&lt;/p>
&lt;p>But the interesting find from Dusty is that the RFID card readers seem to use specific frequencies. And the loudest, most frequent chirps we are all seeing on our SDR scopes matches these frequencies. Very specifically at the 9XX.25 and 9XX.75 intersections.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/rfid-freqs.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/rfid-freqs_hu_922b07a2a87fdcae.webp" alt="RFID Freqs" width="100%">
&lt;/a>&lt;p>We see this all over the greater Philadelphia area - PA burbs, Jersey burbs - and while it&amp;rsquo;s much stronger in Center City, it&amp;rsquo;s still bad enough everywhere to be a huge issue. Here&amp;rsquo;s an SDR image capture from Center City:&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/sdr-from-cc.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/sdr-from-cc_hu_aab2e6a3bf63972b.webp" alt="SDR screen cap from CC" width="100%">
&lt;/a>&lt;p>While you might be able to avoid some of this if you&amp;rsquo;re using a skinnier bandwidth like 250 kHz, you can&amp;rsquo;t avoid it with the wider 500 kHz bandwidth used by the Turbo presets. You&amp;rsquo;ve got multiple interference points with the 9XX.25 and 9XX.75 RFID stuff, as well as all the other little chirps in-between.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/wrestler-unoreverse.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/wrestler-unoreverse_hu_bc20a4f154dc2e2f.webp" alt="meme" width="100%">
&lt;/a>&lt;p>So yeah, all of us looking at our SDRs came to the conclusion that LongTurbo on any slot is doomed from the start for us. We thought we were being cutesy avoiding mesh packet collisions &amp;hellip; but we were getting packet collisions no matter what from the ISM Band being the ISM Band, and in LongTurbo&amp;rsquo;s case &amp;hellip; double the packet collisions.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/kyle-demo.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/kyle-demo_hu_b203c5e03bfd2d2c.webp" alt="kyle being kyle" width="100%">
&lt;/a>&lt;h1 id="so-what-now" >So&amp;hellip; what now?
&lt;span>
&lt;a href="#so-what-now" title="Direct Link to So&amp;hellip; what now?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>We&amp;rsquo;ve kinda come to the conclusion that LongTurbo ain&amp;rsquo;t gonna work. As a preset it is demonstrably worse than LF/MS due to the firmware issue as well as the 2x interference issue.&lt;/p>
&lt;p>We wanted to update the wider Discord on our findings and open it up to y&amp;rsquo;all to vote on next steps&amp;hellip; But before that vote, we have one more science experiment we&amp;rsquo;re cooking up based on our findings.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/toystory-7.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/toystory-7_hu_32e42f805f11f03.webp" alt="meme" width="100%">
&lt;/a>&lt;h1 id="one-last-test-to-try" >One last test to try
&lt;span>
&lt;a href="#one-last-test-to-try" title="Direct Link to One last test to try">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>All of us were trying to be nice to AirFrames users, but other meshes have comfortably asked them to retune to new presets. I think we have got to that point too. With the 9XX.25 and 9XX.75 interference being the most common, widespread, and impactful interference &amp;hellip; we CAN play frogger with a 250 kHz bandwidth. But the default slots all line up with one of them at one end of the slot, no matter what. Take a look at the below chart and you can see, every single preset touches a 9XX.25 and 9XX.75.&lt;/p>
&lt;p>Buuuuuuuuuuuuuut if we use a &lt;em>frequency override&lt;/em>, we can slot the 250 kHz slice right in-between the 9XX.25 and 9XX.75 blips and avoid the interference. By strategically picking one of those slots close to both the pending new Meshtastic preset of LT14 and the Meshcore 910.525 default, we would be asking AirFrames users to retune once and then be able to use that filter for Philly Meshtastic, LT14 soon-to-be-new-default Meshtastic, AND Meshcore.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/new-freq-presets-chart.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/new-freq-presets-chart_hu_1f171a0927f62119.webp" alt="Preset chart with LF910 and Meshcore" width="50%">
&lt;/a>&lt;p>So the science experiment since the conclusion of LT12 and MS22 has been to try out LF-910. Basically it doesn&amp;rsquo;t use a Freq Slot but centers its 250 kHz bandwidth at 910 (again, see green box on the chart).&lt;/p>
&lt;p>It&amp;rsquo;s easy to change, you just type in &amp;ldquo;910&amp;rdquo; into the frequency override box in the Lora Settings. It does not require firmware updates (oh thank goodness). And we are picking LongFast because we want to keep it apples to apples compared to LF20 preset (during our testing phase) so that we can compare links with interference vs links without interference. If this works we can evaluate in the future if we want to stay on LF910 or use MS910.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/see-ya-meme.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/see-ya-meme_hu_e83d4a54caa1a355.webp" alt="see ya presets we’re doing our own thing now" width="50%">
&lt;/a>&lt;p>We aren&amp;rsquo;t asking everyone to participate in this, we realize there might be a little bit of testing fatigue after two weeks of this, but here&amp;rsquo;s the plan if you&amp;rsquo;d like to participate:&lt;/p>
&lt;h1 id="third-and-final-hopefully-test-plan---extended-lf-910-test" >Third and final (hopefully) test plan - EXTENDED LF-910 TEST
&lt;span>
&lt;a href="#third-and-final-hopefully-test-plan---extended-lf-910-test" title="Direct Link to Third and final (hopefully) test plan - EXTENDED LF-910 TEST">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>After a few days, a majority of the ~50 or so nodes currently on LF910 (at the time of this post) report that it is working surprisingly well. Links are significantly improved compared to LF20 and mesh users are having stable/reliable conversations that were not previously possible on LF20. As a result, Philly Mesh OpsDiv has decided to conduct an extended test of LF910. If this is where we want to be long term, we want to stay on it longer to make sure there aren&amp;rsquo;t any critical flaws/issues with this change. And to support this being an extended test, we have not chosen a specific end date for this test. We will have an update on the Discord as well as a new blog post when we are ready to recommend a permanent change, and will communicate more details then. It is also possible that during this extended test we &lt;em>may&lt;/em> find a specific frequency better (with less non-mesh interference) than 910.000 MHz, but for now this is the best we&amp;rsquo;ve found and we encourage mesh node owners to hop over and voluntarily try this extended test with us!&lt;/p>
&lt;p>To do so, switch your node to LF910 using these settings:&lt;/p>
&lt;ul>
&lt;li>Modem Preset: Long Range / Fast&lt;/li>
&lt;li>Frequency Slot: 0 (doesn&amp;rsquo;t matter because we&amp;rsquo;re going to override it)&lt;/li>
&lt;li>Frequency Override: 910.000 MHz&lt;/li>
&lt;li>Bandwidth: 250 kHz (if asked, but should be set by the Long Range / Fast preset)&lt;/li>
&lt;/ul>
&lt;p>Here is what the settings should look like in your app. Android on the left, and iOS in the center and on the right.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/lf910-app-settings.png">&lt;img src="https://phillymesh.net/images/uploads/2026-08-12-freq-testing-report/lf910-app-settings_hu_43a0690dd5b56154.webp" alt="App settings" width="50%">
&lt;/a>&lt;p>Keep all other settings from the previous test active. The iOS app and Android apps can be confusing, so we recommend installing the Meshtastic CLI and querying your nodes settings that way to verify they&amp;rsquo;re correct. Here&amp;rsquo;s a sanitized version of what your settings should look like:&lt;/p>
&lt;p>&lt;em>The following is an example of the settings you should have if you&amp;rsquo;re participating in the test. If a setting is omitted, it&amp;rsquo;s up to you what you want to set it as.&lt;/em>&lt;/p>
&lt;p>&lt;em>Notes: &lt;code>role&lt;/code> should be set to &lt;code>Client Mute&lt;/code> if you&amp;rsquo;re in a position where a particular node doesn&amp;rsquo;t need to rebroadcast messages to other nodes, and &lt;code>position&lt;/code> settings can be turned off if you don&amp;rsquo;t want to send position to the mesh&lt;/em>&lt;/p>
&lt;pre tabindex="0">&lt;code>Preferences: {
&amp;#34;device&amp;#34;: {
&amp;#34;nodeInfoBroadcastSecs&amp;#34;: 10800,
&amp;#34;role&amp;#34;: &amp;#34;CLIENT&amp;#34;,
&amp;#34;rebroadcastMode&amp;#34;: &amp;#34;CORE-PORTNUMS-ONLY&amp;#34;,
},
&amp;#34;position&amp;#34;: {
&amp;#34;positionBroadcastSecs&amp;#34;: 3600,
},
&amp;#34;lora&amp;#34;: {
&amp;#34;usePreset&amp;#34;: true,
&amp;#34;modemPreset&amp;#34;: &amp;#34;LONG_FAST&amp;#34;,
&amp;#34;bandwidth&amp;#34;: 0,
&amp;#34;spreadFactor&amp;#34;: 0,
&amp;#34;codingRate&amp;#34;: 0,
&amp;#34;region&amp;#34;: &amp;#34;US&amp;#34;,
&amp;#34;hopLimit&amp;#34;: 3,
&amp;#34;txEnabled&amp;#34;: true,
&amp;#34;txPower&amp;#34;: 30,
&amp;#34;channelNum&amp;#34;: 0,
&amp;#34;sx126xRxBoostedGain&amp;#34;: true,
&amp;#34;frequencyOffset&amp;#34;: 0.0,
&amp;#34;overrideFrequency&amp;#34;: 910.0,
&amp;#34;configOkToMqtt&amp;#34;: true,
}
}
Module preferences: {
&amp;#34;telemetry&amp;#34;: {
&amp;#34;deviceUpdateInterval&amp;#34;: 2147483647,
&amp;#34;environmentUpdateInterval&amp;#34;: 0,
&amp;#34;environmentMeasurementEnabled&amp;#34;: false,
&amp;#34;environmentScreenEnabled&amp;#34;: false,
&amp;#34;environmentDisplayFahrenheit&amp;#34;: false,
&amp;#34;airQualityEnabled&amp;#34;: false,
&amp;#34;airQualityInterval&amp;#34;: 0,
&amp;#34;powerMeasurementEnabled&amp;#34;: false,
&amp;#34;powerUpdateInterval&amp;#34;: 0,
&amp;#34;powerScreenEnabled&amp;#34;: false,
&amp;#34;healthMeasurementEnabled&amp;#34;: false,
&amp;#34;healthUpdateInterval&amp;#34;: 0,
&amp;#34;healthScreenEnabled&amp;#34;: false,
&amp;#34;deviceTelemetryEnabled&amp;#34;: false,
&amp;#34;airQualityScreenEnabled&amp;#34;: false
}
}
&lt;/code>&lt;/pre>&lt;h1 id="what-if-i-dont-want-to-participate" >What if I don&amp;rsquo;t want to participate
&lt;span>
&lt;a href="#what-if-i-dont-want-to-participate" title="Direct Link to What if I don&amp;rsquo;t want to participate">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>You are not obligated to test out LF-910 with us, feel free to switch your radio back to default LT20 presets!&lt;/p>
&lt;p>Modem Preset: Long Range / Fast
Frequency Offset: 0&lt;/p>
&lt;p>Verify that your primary channel is set to LongFast / AQ== or Primary.&lt;/p>
&lt;p>If you want to change each setting, below shows the particular settings you&amp;rsquo;ll need to change.&lt;/p>
&lt;pre tabindex="0">&lt;code>Preferences: {
&amp;#34;lora&amp;#34;: {
&amp;#34;usePreset&amp;#34;: true,
&amp;#34;modemPreset&amp;#34;: &amp;#34;LONG_FAST&amp;#34;,
&amp;#34;bandwidth&amp;#34;: 0,
&amp;#34;spreadFactor&amp;#34;: 0,
&amp;#34;codingRate&amp;#34;: 0,
&amp;#34;region&amp;#34;: &amp;#34;US&amp;#34;,
&amp;#34;txEnabled&amp;#34;: true,
&amp;#34;txPower&amp;#34;: 30,
&amp;#34;channelNum&amp;#34;: 0,
&amp;#34;frequencyOffset&amp;#34;: 0.0,
&amp;#34;overrideFrequency&amp;#34;: 0.0,
}
}
&lt;/code>&lt;/pre>&lt;p>&lt;em>This shows you only the settings you need to change to get back to talking on the default LF20. If a setting is omitted, it&amp;rsquo;s because it&amp;rsquo;s personal preference.&lt;/em>&lt;/p>
&lt;p>&lt;em>However, for example, we asked people to limit telemetry during the test so your current telemetry settings might be different than default. Now that you&amp;rsquo;re going back to LF20 you can change any settings not included here to whatever you want and still be able to communicate with LF20.&lt;/em>&lt;/p></description></item><item><title>Updated Low Priced Solar Node (Harbor Breeze)</title><link>https://phillymesh.net/2026/07/10/harbor-breeze-node-updated/</link><pubDate>Fri, 10 Jul 2026 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2026/07/10/harbor-breeze-node-updated/</guid><description>&lt;p>After building my &lt;a href="https://phillymesh.net/2025/05/14/medium-priced-solar-node">Medium Priced Solar Node&lt;/a>, I wanted to explore cheaper options. I wanted to be able to build nodes to give to friends or community members to place in advantageous locations, and not feel like I was losing $100+ if it doesn&amp;rsquo;t work out.&lt;/p>
&lt;p>If you&amp;rsquo;ve been around the Meshtastic community for more than a month, you&amp;rsquo;ve almost certainly heard of the Harbor Breeze Solar Light hack. This involves using the solar panel, solar management board, battery, and enclosure from a low-cost solar light available in the USA at Lowes for less than $10. The availability of these lights can vary, but if you search hard enough you can find them.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted_hu_9a9f588bda428df8.webp" alt="A Harbor Breeze solar light modified to include a Meshtastic node" width="50%">
&lt;/a>&lt;h3 id="variations" >Variations
&lt;span>
&lt;a href="#variations" title="Direct Link to Variations">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>I&amp;rsquo;ve seen &lt;em>many&lt;/em> variations of this hack. I believe the first came from Tavis Gustafson. This is the one that is documented in the &lt;a href="https://meshtastic.org/docs/community/enclosures/rak/harbor-breeze-solar-hack/">Meshtastic docs&lt;/a> and was &lt;a href="https://hackaday.com/2024/01/21/garden-light-turned-mesh-network-node/">featured on Hackaday&lt;/a>.&lt;/p>
&lt;p>Since this hack exploded in popularity, Harbor Breeze no longer manufacturers the original version of the Solar Light and has been replaced with a new version that has slightly different wiring, but is the same price. It has a smaller battery because the light is more efficient, and there were originally concerns that the battery wouldn&amp;rsquo;t be able to sustain a Meshtastic node. We have done almost a year of testing with the new light and we can confidently say the new version works just as well as the old version!&lt;/p>
&lt;p>These instructions work great with &lt;strong>the RAK4631 board&lt;/strong>. We have explored using a Seeed Studio Xiao, but we have found that the cheaper board is prone to brownouts (where the battery charges just enough to boot up the Xiao, but then the battery drains fully during start-up and the node gets stuck in a boot loop until a human intervenes). Mitigating this would require adding a battery management system (BMS) to the circuit, which would negate the cost savings of using a Xiao.&lt;/p>
&lt;p>We also have found that the battery pads on the Xiao are very difficult to solder to, even for those experience in soldering. Since this is a beginner-friendly guide, we decided to recommend using the RAK4631 board which requires minimal soldering.&lt;/p>
&lt;p>The approach I&amp;rsquo;m going with today can be applied to just about any solar light.&lt;/p>
&lt;h2 id="parts-list" >Parts List
&lt;span>
&lt;a href="#parts-list" title="Direct Link to Parts List">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="essential-parts" >Essential Parts
&lt;span>
&lt;a href="#essential-parts" title="Direct Link to Essential Parts">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/wisblock-starter-kit?srsltid=AfmBOoqGNa6h2MSgg5oLSWXtv6xPEiVNtHl4h6oP_BMcHh4kBFPVji3x&amp;amp;variant=41786685063366">WisBlock Starter Kit&lt;/a>&lt;/td>
&lt;td>$24.99&lt;/td>
&lt;td>This is the Meshtastic node. You want the RAK19007+RAK4631 (not -R) version. Pick the frequency for your region, USA is 915. This node does not come pre-flashed, you will need to flash it yourself. For $5 more &lt;a href="https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit?variant=43884034654406">you can purchase this version that comes pre-flashed with Meshtastic firmware&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.lowes.com/pd/Harbor-Breeze-1-Watt-Black/5015598033">Harbor Breeze Solar Light&lt;/a>&lt;/td>
&lt;td>$9.98&lt;/td>
&lt;td>Make sure you verify that the Item number is 1234868. If you purchase in person, the item number will be displayed on the packaging. This is technically $14.98, but it&amp;rsquo;s almost always on sale for $9.98&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://heltec.org/project/gt-800-whip-antenna/">Heltec GT-800 868, 915 MHz Whip Antenna&lt;/a>&lt;/td>
&lt;td>$3.90&lt;/td>
&lt;td>These are cheap clones of the MuziWorks 17cm Whip Antenna that have tested just as well. You can also use the more expensive 8dbi antenna from the Medium Price Solar Node, but in Philly this will be all that is necessary for a roof node.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Essential parts cost: $38.87 + shipping&lt;/strong>&lt;/p>
&lt;h3 id="parts-you-maymay-not-need-or-already-have-laying-around" >Parts you may/may not need or already have laying around
&lt;span>
&lt;a href="#parts-you-maymay-not-need-or-already-have-laying-around" title="Direct Link to Parts you may/may not need or already have laying around">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;em>I break this section out because 1) you may already have some of these parts laying around, 2) you could get many of them individually for very cheap if you buy local, 3) if you do have to buy online and in bulk, you will have some on hand and they will not contribute to the cost of your next build, and 4) you may not need some of these parts.&lt;/em>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/dp/B09GJGNPQX">IPEX to SMA Female Cable&lt;/a>&lt;/td>
&lt;td>$6.94 for 2&lt;/td>
&lt;td>The RAK kit comes with a cable, but it&amp;rsquo;s not long enough if you intend to run the antenna through existing holes. You&amp;rsquo;ll need a cable that&amp;rsquo;s at least 8 inches. Make sure to buy a cable that matches your antenna; this one works with the Muzi antenna from above.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/20Pair-JST-PH-Connector-Female-Cables/dp/B09JP1S2RD?th=1">JST PHR-2 2mm connector&lt;/a>&lt;/td>
&lt;td>$8.39 for 20&lt;/td>
&lt;td>The WisBlock board uses a 2mm JST connector. You will need one of these to solder to the solar board and connect to the Wisblock battery terminal.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/dp/B01B5RBOA6">Waterproof Sealant&lt;/a>&lt;/td>
&lt;td>$6.34 for lots&lt;/td>
&lt;td>You will need to seal up some holes in the case to make them waterproof if you want to install this outside. You can also get this from Lowes if you want to reduce shipping costs, just make sure the variety you go with works with plastic.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Total cost: $60.54 + shipping (or about $43 per node if you make lots)&lt;/strong>&lt;/p>
&lt;h2 id="instructions" >Instructions
&lt;span>
&lt;a href="#instructions" title="Direct Link to Instructions">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;a href="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/harbor-breeze-unopened.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/harbor-breeze-unopened_hu_b6395780f48903df.webp" alt="The light before modification" width="50%">
&lt;/a>&lt;ol>
&lt;li>Before opening up the node, make sure the power button is off. Face the solar panel flat on a table to make sure it doesn&amp;rsquo;t charge while you&amp;rsquo;re working on it.&lt;/li>
&lt;/ol>
&lt;p>Press the power button and verify that the light comes on, then press it again to power it off. If the light doesn&amp;rsquo;t come on, charge it up and then make sure it does.&lt;/p>
&lt;ol start="2">
&lt;li>Unscrew the plastic stake and the light.&lt;/li>
&lt;/ol>
&lt;p>You may snip the light wires off close to the board. Make sure they don&amp;rsquo;t touch any other part of the board accidentally now or when you close it back up!&lt;/p>
&lt;ol start="3">
&lt;li>Open up the node.&lt;/li>
&lt;/ol>
&lt;p>Unscrew the four screws on the underside of the board.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/harbor-breeze-screws.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/harbor-breeze-screws_hu_a166b868aefab6c.webp" alt="The screws" width="50%">
&lt;/a>&lt;p>Remove the battery and turn the solar panel upside down on a flat surface to ensure there won&amp;rsquo;t be any electricity running through the circuits while you solder.&lt;/p>
&lt;ol start="4">
&lt;li>Cut and remove the cables to the light.&lt;/li>
&lt;/ol>
&lt;p>You can cut them close to the circuit board.&lt;/p>
&lt;ol start="5">
&lt;li>Review the intended wiring.&lt;/li>
&lt;/ol>
&lt;a href="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/detailed-wiring.png">&lt;img src="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/detailed-wiring_hu_4cffa8ca95434b1b.webp" alt="Wiring" width="50%">
&lt;/a>&lt;p>Plug in the JST connector to the port that says &amp;ldquo;battery&amp;rdquo; on the RAK4631. Take a look at which wire is on the side with &amp;ldquo;+&amp;rdquo; etched into the board. This is the positive wire! This positive wire is the one we want to connect to the positive side of the battery holder.&lt;/p>
&lt;p>&lt;strong>Are you experienced at wiring up circuits? Do not skip reading this paragraph!&lt;/strong> The RAK&amp;rsquo;s polarity is backwards for some reason! Do not assume the red wire on your JST connector is the positive one or you will let out the magic smoke when you power on the RAK and you&amp;rsquo;ll need to buy a replacement of the most expensive component in this build.&lt;/p>
&lt;p>Again, look to see which wire is on the side with the &amp;ldquo;+&amp;rdquo; etched into the board. That is the positive wire! Solder that one into the positive side of the battery holder. Solder the other wire into the negative side.&lt;/p>
&lt;ol start="6">
&lt;li>Test fit the wiring.&lt;/li>
&lt;/ol>
&lt;p>I usually place the RAK4631 upsidedown to the left of the circuit board inside the light housing. See if the JST connectors will reach the battery holder for solering, or if you need to extend the wiring.&lt;/p>
&lt;p>If you need to extend the wiring, use wire from the female JST cables that came in your JST wiring pack. You won&amp;rsquo;t need those.&lt;/p>
&lt;ol start="7">
&lt;li>With the JST wire disconnected from the RAK, solder the JST connector wires to the battery holder.&lt;/li>
&lt;/ol>
&lt;p>Solder the negative wire from the JST connector to the spot marked negative on the battery holder and the positive end to the tab on the positive side the battery holder.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/wiring.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/wiring_hu_7dc2bae979b84eb7.webp" alt="spots circled" width="50%">
&lt;/a>&lt;ol start="8">
&lt;li>Plug in LoRa and bluetooth antennas.&lt;/li>
&lt;/ol>
&lt;a href="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/antennas.png">&lt;img src="https://phillymesh.net/images/uploads/2026-07-10-harbor-breeze-node-updated/antennas_hu_369ce5c66b7cbe3a.webp" alt="antennas" width="50%">
&lt;/a>&lt;p>Your Bluetooth antenna will be plugged in to the push connector labelled &amp;ldquo;BLE&amp;rdquo;. Push the two circular parts of the antenna and connector right on top of each other. It&amp;rsquo;ll require quite a bit of force, but too much force can break it.&lt;/p>
&lt;p>Your RAK4631 kit came with a tiny LoRa antenna, but we&amp;rsquo;re going to use the better one we ordered.&lt;/p>
&lt;p>Snake the IPEX to SMA Female antenna cable you ordered through the hole where the light cable was and connect the circular end to your RAK where it says LoRa. Screw the antenna into the other end.&lt;/p>
&lt;ol start="6">
&lt;li>Plug the JST connector into the RAK4631.&lt;/li>
&lt;/ol>
&lt;p>&lt;em>Warning: if you accidentally power on your RAK board without the antenna connected, you can irreversibly damage the board!&lt;/em>&lt;/p>
&lt;p>Place the battery back into the holder and verify the RAK powers on.&lt;/p>
&lt;p>If it doesn&amp;rsquo;t power on right away, you may want to allow the battery to charge for a little while. While you wait you can verify the RAK is working and set it up by powering it with a USB-C cable. Again, make sure the antenna is connected when you do this.&lt;/p>
&lt;ol start="7">
&lt;li>Waterproofing&lt;/li>
&lt;/ol>
&lt;p>You will want to waterproof any holes that you&amp;rsquo;ve made in your case, including the original one that the light cables were running through. I also ended up adding a little extra sealant to the screws on the rear of the case.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted-waterproofing.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted-waterproofing_hu_4dccc4f72f8c0bc7.webp" alt="Rear view to include waterproofing" width="50%">
&lt;/a>&lt;h2 id="mounting" >Mounting
&lt;span>
&lt;a href="#mounting" title="Direct Link to Mounting">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If you plan to mount to wood or something else you can screw into, &lt;a href="https://www.printables.com/model/1442246-bracket-for-harbor-breeze-mesh-solar-node-with-gea">this mount&lt;/a> will work well.&lt;/p></description></item><item><title>Cat Solar Node</title><link>https://phillymesh.net/post/2026-05-24-cat-solar-node/</link><pubDate>Sun, 24 May 2026 22:00:12 -0400</pubDate><author>Joe Mac</author><guid>https://phillymesh.net/post/2026-05-24-cat-solar-node/</guid><description>&lt;h2 id="introduction" >Introduction
&lt;span>
&lt;a href="#introduction" title="Direct Link to Introduction">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The solar light used for this build has distinctive &amp;lsquo;cat ears&amp;rsquo;, giving this build its strange name.
You will need to purchase &lt;a href="https://www.amazon.com/dp/B0FKGR8YS1">this solar light from Amazon&lt;/a>, approximately $7 per light.&lt;/p>
&lt;p>Case dimensions: 5&amp;quot;(h) (not counting antenna height) x 4&amp;quot;(w) x 4&amp;quot;(d) (to rear of the mounting post).&lt;/p>
&lt;p>Solar panel dimensions: 4 3/8&amp;quot; x 2 1/4&amp;quot;&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Intro.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Intro_hu_f32ddd10498093a8.webp" alt="Solar light being measured from different angles">
&lt;/a>&lt;p>This is a simple build and the case pairs perfectly with the RAK 4631 Mini board. Do not get the larger 4631 on the 19007 base because it&amp;rsquo;s too large and will not fit.&lt;/p>
&lt;p>The case includes an 18650 1200 mAh battery which works great with the RAK 4631. The lowest the battery level I&amp;rsquo;ve seen on 2 cloudy days is 85%.&lt;/p>
&lt;p>Note: the pictures here show an upgrade battery because this node is going to be remotely deployed and I wanted a little extra fuel but I currently have 3 of these nodes running the stock battery and they work great.&lt;/p>
&lt;p>Note: for this build you will need to do some soldering for the solar and battery connectors. You will need to supply the following parts: RAK 4631 Mini, antenna port and your antenna of choice, silicone caulk, hot glue gun, drill and small drill bit, and a small desiccant (optional).&lt;/p>
&lt;h2 id="instructions" >Instructions
&lt;span>
&lt;a href="#instructions" title="Direct Link to Instructions">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="step-1-remove-front-panel" >Step 1: Remove Front Panel
&lt;span>
&lt;a href="#step-1-remove-front-panel" title="Direct Link to Step 1: Remove Front Panel">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Remove the 4 screws holding the clear front panel.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-1.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-1_hu_c69ed20755419fc.webp" alt="Annotated photo of the front panel, with red “Remove” arrows pointing to the 4 screw holes">
&lt;/a>&lt;/p>
&lt;h3 id="step-2-disassemble-led-board" >Step 2: Disassemble LED Board
&lt;span>
&lt;a href="#step-2-disassemble-led-board" title="Direct Link to Step 2: Disassemble LED Board">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Remove the 2 screws to free the LED light board (retain the screws; you will need 1 to mount the RAK 4631).
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%281%29.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%281%29_hu_ad99361c82c694ec.webp" alt="Annotated photo of the disassembled front panel, with the focus lens crossed out as “discard”">
&lt;/a>&lt;/p>
&lt;p>Cut the 4 wires attached to the board (2 for battery and 2 for solar).
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%282%29.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%282%29_hu_2e0f8c76c058dab6.webp" alt="LED board with 4 cut wires attached. Black wires are connected to “S-” and “B-”, a white wire is connected to “S&amp;#43;”, and a red wire is connected to “B&amp;#43;”">
&lt;/a>
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%283%29.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-2%283%29_hu_e0efd369dcd72a9b.webp" alt="Before and after cutting the 4 wires on the LED panel">
&lt;/a>&lt;/p>
&lt;p>Note the polarity from the board - the solar white wire is positive and the battery uses standard red/black for +/-.
Check the battery and make sure it is secure with glue (most of mine were but a few were not so I used a hot glue gun to secure the battery).&lt;/p>
&lt;h3 id="step-3-seal-weep-holes" >Step 3: Seal Weep Holes
&lt;span>
&lt;a href="#step-3-seal-weep-holes" title="Direct Link to Step 3: Seal Weep Holes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>There are 9 small weep holes that need to be filled with silicone:&lt;/p>
&lt;ul>
&lt;li>4 on the back&lt;/li>
&lt;li>2 on the top of the solar panel&lt;/li>
&lt;li>not sure these are actual holes but I sealed them and recommend you do too&lt;/li>
&lt;li>2 on the clear front lens on the bottom, opposite of each Cat ear&lt;/li>
&lt;li>1 in the handle mount which requires removing the handle to get to the hole (see pic below).&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%281%29.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%281%29_hu_c52ffeed7221d93f.webp" alt="Remove rear handle mount and fill in hole">
&lt;/a>
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%282%29.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%282%29_hu_fa5e631f0d75f524.webp" alt="“Caulk Here” arrows pointing to the 4 holes on the back and 2 on the top">
&lt;/a>
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%283%29.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-3%283%29_hu_dc3f109af79682e5.webp" alt="Arrow pointing to small hole on front lens">
&lt;/a>&lt;/p>
&lt;h3 id="step-4-remove-the-rubber-switch-grommet" >Step 4: Remove the Rubber Switch Grommet
&lt;span>
&lt;a href="#step-4-remove-the-rubber-switch-grommet" title="Direct Link to Step 4: Remove the Rubber Switch Grommet">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Take advantage of the existing hole for the pusbutton switch by removing the rubber grommet.
This is where the antenna will be mounted.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-4.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-4_hu_3ce6ed02c0942c95.webp" alt="Tweezers grabbing rubber switch grommet and “Antenna port” pointing to the now exposed hole">
&lt;/a>&lt;/p>
&lt;h3 id="step-5-solder-solar-and-battery-connections-leads" >Step 5: Solder Solar and Battery Connections Leads
&lt;span>
&lt;a href="#step-5-solder-solar-and-battery-connections-leads" title="Direct Link to Step 5: Solder Solar and Battery Connections Leads">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Shrink wrap the connections and install the antenna connector in the existing hole.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-5.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-5_hu_a0340415803c4331.webp" alt="JST connectors installed for the solar panel and battery leads">
&lt;/a>&lt;/p>
&lt;h3 id="step-6-update-the-rak-firmware" >Step 6: Update the RAK Firmware
&lt;span>
&lt;a href="#step-6-update-the-rak-firmware" title="Direct Link to Step 6: Update the RAK Firmware">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>After installing the included bluetooth and LoRa antennas, plug the RAK into a PC.
Flash the board with the latest build from the &lt;a href="https://flasher.meshtastic.org/">Meshtastic Web Flasher&lt;/a>.
After updating disconnect the small LoRa antenna, but leave the bluetooth antenna connected.&lt;/p>
&lt;h3 id="step-7-trim-the-case" >Step 7: Trim the Case
&lt;span>
&lt;a href="#step-7-trim-the-case" title="Direct Link to Step 7: Trim the Case">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>You will need to trim off a small tab next one of the mounting holes (see pics).
I used a pair of wire cutters to remove it.
Trimming this piece will allow the board to fit evenly.
Use one of the small screws that held the LED light to secure the RAK 4631 board in place.
The board will align with a screw mount inside of the case.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-7.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-7_hu_6b601513b6b16ffe.webp" alt="Annotations indicating to cut the tab in the middle of the enclosure">
&lt;/a>&lt;/p>
&lt;h3 id="step-8-connections" >Step 8: Connections
&lt;span>
&lt;a href="#step-8-connections" title="Direct Link to Step 8: Connections">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Connect the external antenna to the RAK, then connect the solar and the battery connectors to their appropriate ports on the RAK. Make sure the antenna is connected before the power!
Use the small screw that held the LED light in place to secure the RAK in place.&lt;/p>
&lt;p>IMPORTANT: The RAK 4631 positive(+) is marked in red and goes on the inside (toward the center). I had to repin the power connector for the correct orientation. Incorrect polarity will kill the board.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-8.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-8_hu_87181213b6d1ee38.webp" alt="Arrows pointing to the screw securing the board to the case, and highlighting the polarity of the power leads">
&lt;/a>&lt;/p>
&lt;h3 id="step-9-add-a-dessicant-optional" >Step 9: Add a Dessicant (Optional)
&lt;span>
&lt;a href="#step-9-add-a-dessicant-optional" title="Direct Link to Step 9: Add a Dessicant (Optional)">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>This step is optional but recommended.
Adding a small dessicant packet will help mitigate any condensation inside the case from temperature changes
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-9.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-9_hu_7106d62c717603d1.webp" alt="Dessicant packet on top of the RAK inside the case">
&lt;/a>&lt;/p>
&lt;h3 id="step-10-add-silicone-to-seal-the-case" >Step 10: Add Silicone to Seal the Case
&lt;span>
&lt;a href="#step-10-add-silicone-to-seal-the-case" title="Direct Link to Step 10: Add Silicone to Seal the Case">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Apply a bead of silicone caulk around the inside groove of the case where the lens seats.
This step is very important because I found that the clear lens is not water tight and even though you will most likely be mounting it with the lens upside-down water can (and will) find its way in.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-10.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-10_hu_7e59bf61c37a34e0.webp" alt="Thin bead of silicone around the case edge">
&lt;/a>&lt;/p>
&lt;h3 id="step-11-add-drainage-holes" >Step 11: Add Drainage Holes
&lt;span>
&lt;a href="#step-11-add-drainage-holes" title="Direct Link to Step 11: Add Drainage Holes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Before mounting clear front lens, drill 2 small holes in the &amp;ldquo;Cat&amp;rdquo; ears to allow water to drain.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-11.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-11_hu_df0f10c75caa964e.webp" alt="“drill holes” pointing to two spots in the cat ear portions of the front lens">
&lt;/a>&lt;/p>
&lt;h3 id="step-12-reassemble-the-case" >Step 12: Reassemble the Case
&lt;span>
&lt;a href="#step-12-reassemble-the-case" title="Direct Link to Step 12: Reassemble the Case">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Install the 4 screws on the clear lens and apply silicone caulk over them.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-12.jpg">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-12_hu_52f040e6eddd67c9.webp" alt="“caulk screw holes” pointing to the 4 holes in the front lens">
&lt;/a>&lt;/p>
&lt;h3 id="step-13-caulk-the-antenna" >Step 13: Caulk the Antenna
&lt;span>
&lt;a href="#step-13-caulk-the-antenna" title="Direct Link to Step 13: Caulk the Antenna">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>The orientation of the case will allow rain to contact the antenna port so I use a generous amount of caulk to insure the antenna port will not leak.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-13.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-13_hu_8a4199e7f44ca4c4.webp" alt="External antenna with a lot of caulk around it">
&lt;/a>&lt;/p>
&lt;h3 id="step-14-mounting" >Step 14: Mounting
&lt;span>
&lt;a href="#step-14-mounting" title="Direct Link to Step 14: Mounting">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>When installing the completed unit outdoor I use the round mount with 2 or 3 screws. I have installed these units on trees, fences, and even used rope for a high tree mount.
&lt;a href="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-14.png">&lt;img src="https://phillymesh.net/images/uploads/2026-05-24-cat-solar-node/Step-14_hu_eb996874444d6594.webp" alt="final assembly mounted on a fence">
&lt;/a>&lt;/p>
&lt;h3 id="total-cost" >Total Cost
&lt;span>
&lt;a href="#total-cost" title="Direct Link to Total Cost">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>Solar light, including case, battery and solar panel - $6&lt;/li>
&lt;li>RAK 4631 Mini - $31&lt;/li>
&lt;li>Antenna - $7&lt;/li>
&lt;/ul>
&lt;p>Total $44 (does not include your supplied silicone caulk, shrink wrap, solder, connectors, or hot glue).&lt;/p></description></item><item><title>Attic Vent Antenna Mast Mount</title><link>https://phillymesh.net/2026/01/17/attic-vent-antenna-mast-mount/</link><pubDate>Sat, 17 Jan 2026 00:00:01 +0000</pubDate><author>DustyHeatsink</author><guid>https://phillymesh.net/2026/01/17/attic-vent-antenna-mast-mount/</guid><description>&lt;p>As someone who is averse to high unsecured locations and wobbly ladders, I faced a problem. My attic node was underperforming. I tried a quick test with the antenna sticking out the louvered vent and saw a marked improvement, but it was still well below the roof line, and the house itself was shadowing a large portion of the signal.&lt;/p>
&lt;p>I needed a way to get an antenna outside, and above the ridge line, without drilling into siding or doing anything that felt permanent. I also didn&amp;rsquo;t want it to look temporary or sketchy once it was in place. It had to pass the spouse and neighborhood sniff test.&lt;/p>
&lt;p>This ended up being a simple solution using conduit and off-the-shelf fittings. It&amp;rsquo;s been solid, easy to deploy, easy to adjust, and easy to remove if I ever need to.&lt;/p>
&lt;p>This was built around a louvered attic vent, but could possibly be adapted to other vent styles and window types.&lt;/p>
&lt;figure>&lt;img src="https://phillymesh.net/images/uploads/2026-01-17-attic-vent-antenna-mast-mount/2026-01-17-attic-vent-antenna-mast-mount-installed-inline.jpg"
alt="Attic vent antenna mast mount installed">&lt;figcaption>
&lt;p>Mast installed through the attic vent, with the antenna up above the roof line.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h2 id="materials" >Materials
&lt;span>
&lt;a href="#materials" title="Direct Link to Materials">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Most of this came from a big box hardware store, nothing exotic. I used a 1 inch outer diameter non-conductive electrical conduit in a 10 foot length. It was under $10 and gave me plenty of room to cut and adjust without worrying about being short. One length was more than enough to complete the project, and then build a second one to document for this guide.&lt;/p>
&lt;figure>&lt;img src="https://phillymesh.net/images/uploads/2026-01-17-attic-vent-antenna-mast-mount/2026-01-17-attic-vent-antenna-mast-mount-parts.jpg"
alt="Attic vent antenna mast mount parts">&lt;figcaption>
&lt;p>The basic parts pile. Conduit, fittings, the feedthrough parts, and the access panel box.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>For bracing, I used standard pivot T fittings sized for the OD of the conduit. They allow you to adjust the angle to match your install location exactly. The exact number depends on how you want to support the mast. For my build, I used one main T for the side arms and a pipe hanger from the plumbing aisle near the top as a guide and secondary support. You could also use a second T fitting if you want everything to match, or to provide additional support. I was not able to locate the T fitting at the local store but was able to purchase them online for next day delivery.&lt;/p>
&lt;p>You&amp;rsquo;ll also need an end cap or similar fitting to drill for the antenna mount, or find one that already supports your connector size. In this guide I used a bulkhead style SMA connector, but Type N would work just as well. In fact, that is what I used for my installed build.&lt;/p>
&lt;p>For coax, use the lowest loss cable you can reasonably get and keep it short. Four to six feet max if possible. Shorter is always better here and makes a big difference with these devices. But remember, height usually wins. You may suffer some loss but gain more from the improved antenna position.&lt;/p>
&lt;p>Beyond that, it&amp;rsquo;s mostly just basic hardware. A few screws to secure the side arms to the vent frame, and some sealant to protect the antenna connector if it&amp;rsquo;s recessed or exposed to moisture. Self sealing tape is your friend. The pipe fittings also have secondary holes that you can put a short self tapping screw into for peace of mind.&lt;/p>
&lt;h2 id="before-you-start-cutting" >Before you start cutting
&lt;span>
&lt;a href="#before-you-start-cutting" title="Direct Link to Before you start cutting">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Before cutting conduit or tightening anything down, think through where the antenna connector and coax are going to live.&lt;/p>
&lt;p>If you&amp;rsquo;re mounting the antenna in a recessed fitting, drill a small drain hole at the lowest point. Water will find its way in eventually, and giving it a way out is easier than pretending sealant alone will solve it forever.&lt;/p>
&lt;p>Plan your coax path. The cleanest route is down the inside of the conduit, exiting at the bottom. Leave some slack to form a drip loop before it enters the vent. That loop becomes very important over time.&lt;/p>
&lt;p>Also think about connectors. Every adapter adds loss and another failure point. Pick SMA or Type N and keep the run as short as you can manage.&lt;/p>
&lt;h2 id="access-panel-option-top-mounted-node" >Access Panel Option (Top Mounted Node)
&lt;span>
&lt;a href="#access-panel-option-top-mounted-node" title="Direct Link to Access Panel Option (Top Mounted Node)">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>There is also the option of adding an access fitting at the top of the mast, mounting your node there, and running power up the mast vs bringing coax down and into the space.&lt;/p>
&lt;p>There are inline straight-through and right-angle access panel options. My local store did not have the straight-through option, and online pricing was running three to four times higher than the right-angle option, so that&amp;rsquo;s what I used for this guide.&lt;/p>
&lt;figure>&lt;img src="https://phillymesh.net/images/uploads/2026-01-17-attic-vent-antenna-mast-mount/2026-01-17-attic-vent-antenna-mast-mount-feedthrough-exploded.jpg"
alt="Feedthrough exploded view">&lt;figcaption>
&lt;p>Exploded view of the access-panel feedthrough before it got assembled and sealed up.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;figure>&lt;img src="https://phillymesh.net/images/uploads/2026-01-17-attic-vent-antenna-mast-mount/2026-01-17-attic-vent-antenna-mast-mount-feedthrough.jpg"
alt="Feedthrough assembled">&lt;figcaption>
&lt;p>Same feedthrough assembled, with the coax pigtail running to the node inside the box.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>If you go this route, make sure the power cable is rated for outdoor use and long enough to run the full length of the mast and into your space without tension.&lt;/p>
&lt;p>Ensure all fittings are properly sealed. If this fitting leaks, your node is most likely done for.&lt;/p>
&lt;p>For my use case, I needed interior access to the node in the attic and planned to add a cavity filter, so I went with a short run of KMR240 instead of this variant for my final install.&lt;/p>
&lt;h2 id="assembly" >Assembly
&lt;span>
&lt;a href="#assembly" title="Direct Link to Assembly">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I started by cutting the conduit to a length that made sense for the vent location and roof line. There&amp;rsquo;s no exact number here. You are better off leaving yourself extra length and trimming some off versus going too short and cutting a whole new piece. If that does happen you could use the bad piece as material for the arm(s).&lt;/p>
&lt;p>The main mast gets a T fitting with a short side arm, about a foot. That arm is what braces against the inside of the vent frame. I adjusted the angle so it roughly matched the angle of the louvers. Hold off on any threadlocker until you have done a test fit.&lt;/p>
&lt;p>If, like me, you can&amp;rsquo;t easily reach the outside of the vent, tighten the bottom fitting fully and carefully slide most of the assembly out through the vent opening. This part is interesting, because you feed it downward to get it out the vent. I positioned it one or two louvers up from the bottom so the base of the mast lined up with the bottom of the vent. That left room for the coax to exit cleanly and form a small loop downward before feeding back through the lowest louver.&lt;/p>
&lt;p>Once it was roughly where I wanted it, I slowly rotated the mast until it was vertical. Take your time here, you don&amp;rsquo;t want to drop it. A second set of hands or a firm hold on the antenna cable may alleviate any anxiety.&lt;/p>
&lt;p>For the top support, I used a simple pipe hanger. I slid it out through the top of the vent, hooked it onto the conduit, and gently pulled until it snapped into place. It&amp;rsquo;s smaller and less noticeable than a full second T fitting bracket, and with the bottom fitting tightened down, the top support is there mostly to keep the mast vertical. Either method works.&lt;/p>
&lt;p>With the mast held in position, I ran screws through the pre drilled holes in the side arms and into the interior vent frame. I avoided over tightening. The assembly already felt solid. If you have a gap between the vent opening and inner frame a small block of wood or plastic standoff may be needed. I added a couple of screws to the pipe hanger up top as well.&lt;/p>
&lt;h2 id="cable-routing-and-power-up" >Cable routing and power up
&lt;span>
&lt;a href="#cable-routing-and-power-up" title="Direct Link to Cable routing and power up">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I ran the coax inside the conduit and exited at the bottom of the mast, avoiding drilling any additional holes. From there it loops downward before heading back into the vent. That drip loop is intentional. It keeps water from following the cable inside.&lt;/p>
&lt;p>Once inside, route the cable to your setup. The less coax you use, the better.&lt;/p>
&lt;figure>&lt;img src="https://phillymesh.net/images/uploads/2026-01-17-attic-vent-antenna-mast-mount/2026-01-17-attic-vent-antenna-mast-mount-assembly.jpg"
alt="Full mast assembly">&lt;figcaption>
&lt;p>Full mast assembly laid out before the install. This is the part you end up feeding through the vent.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Power the node up before closing anything up, you may need to make adjustments, my node is in a simple IP65 case right inside the vent. RSSI and SNR were showing improved values over the old setup. Once everything looked stable and reasonable, I buttoned it up and double checked the mounts and connections.&lt;/p>
&lt;h2 id="final-notes" >Final notes
&lt;span>
&lt;a href="#final-notes" title="Direct Link to Final notes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>For a higher wind location or a taller mast, I&amp;rsquo;d skip the pipe hanger and go with a second T fitting for the top brace. This setup has been solid where it is, but extra support never hurts if conditions are harsher or if you don&amp;rsquo;t like the look of the hanger.&lt;/p>
&lt;p>Some folks will want to add a lightning arrestor here, and that&amp;rsquo;s fair. An inline arrestor tied into a proper ground can help with static and nearby activity, but it&amp;rsquo;s not magic. A direct strike is still a direct strike. I chose to keep this install simple, but if your location or risk tolerance is different, it&amp;rsquo;s an easy addition.&lt;/p>
&lt;p>Getting the antenna fully outside and above the roof line was my main goal. Currently, the vent louvers haven&amp;rsquo;t shown any meaningful impact on performance. There may be a more elegant or permanent way to do this, but this hit a good balance for me. It solved an RF problem without turning into a home improvement project, and it blends in well with the siding of the house. It&amp;rsquo;s also easy to undo if I ever need to move or rethink it.&lt;/p>
&lt;p>I also did and alternative version with another vent to mount a weather sealed yagi. It provided an easy way to mount the yagi, and allowed for easy adjustment/rotation.&lt;/p></description></item><item><title>Real-Time Meshtastic Decoding with Scapy and Wireshark</title><link>https://phillymesh.net/2026/01/10/scapy-meshtastic-decoder/</link><pubDate>Sat, 10 Jan 2026 21:19:45 -0500</pubDate><author>Caleb Frey</author><guid>https://phillymesh.net/2026/01/10/scapy-meshtastic-decoder/</guid><description>&lt;h1 id="the-goal" >The Goal
&lt;span>
&lt;a href="#the-goal" title="Direct Link to The Goal">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>When I powered on my first Meshtastic node, I was blown away at the ability to exchange messages with people over multiple hops without even needing a license.
That awe lasted about a week before I noticed that sometimes the intended recipient never saw it.
Or the messages would often go unacknowledged, leaving me to wonder whether anyone saw it at all.
So I decided to do some digging to figure out why the message delivery was so inconsistent.&lt;/p>
&lt;p>I dug into the Meshtastic &lt;a href="https://meshtastic.org/docs/introduction/">documentation&lt;/a> to learn about the &amp;ldquo;managed flooding&amp;rdquo; broadcase approach to understand how a packet gets transmitted.
In summary, the stronger a signal is for a given packet, the longer a node will wait before transmitting it, and it won&amp;rsquo;t transmit if it already heard others rebroadcast it.
Theoretically this helps a signal travel as far as possible, with the assumption that weaker signal corresponds to a further distance.
But since we don&amp;rsquo;t live in a perfect spherical vacuum, you end up with strange routes like a node in someone&amp;rsquo;s basement becoming the preferred hop when it&amp;rsquo;s the least useful.
It seems chaotic and strange but it makes sense when the system is designed for a group of nodes in constantly changing conditions and locations (and outdoor usage).
However, I wasn&amp;rsquo;t content to just read about the broadcast approach, I wanted to see it in real time, from the perspective of my node here in Philly.&lt;/p>
&lt;p>The Meshtastic client apps (at least for web and android) are designed first and foremost for usability, and as a result hide away a lot of the underlying networking.
I wanted to be able to see all the Meshtastic packets in the air, shown live in a tool like Wireshark for dissection and analysis.
It&amp;rsquo;s possible to enable debugging mode in the app, but that requires a consistent connection to the phone app, where the data isn&amp;rsquo;t particularly easy to parse.
There is also the option to enable serial debugging, but it wouldn&amp;rsquo;t use the existing usb c link and I didn&amp;rsquo;t love the idea of running flying leads to a USB serial converter.
Thankfully, since the Meshtastic protocol is open source, there wasn&amp;rsquo;t any requirement that I even use a Meshtastic node.
I&amp;rsquo;ll write my own receive-only client! How hard could it be?&lt;/p>
&lt;h1 id="hardware-pulling-lora-from-the-airwaves" >Hardware: Pulling LoRa from the Airwaves
&lt;span>
&lt;a href="#hardware-pulling-lora-from-the-airwaves" title="Direct Link to Hardware: Pulling LoRa from the Airwaves">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>All Meshtastic Devices amount to a LoRa modem and something to run the meshtastic device code, usually a microcontroller.
So if I wanted to decode Meshtastic, I needed some form of LoRa modem that could be plugged into my PC.
Thankfully, someone in the PhillyMesh Community had already purchased a &lt;a href="https://electroniccats.com/store/catwan-usb-stick/">CatWaN USB Stick&lt;/a> with similar intentions and let me borrow it.
This USB device consists of an RP2040 microcontroller, a RFM95W Modem and not much else, which is exactly what I wanted.&lt;/p>
&lt;p>To get the data from USB Stick to the computer, I wrote some simple firmware as for the CatWAN as if it were a Raspberry Pi Pico, since it&amp;rsquo;s the same underlying chip.
I configured the LoRa module with the parameters to match the &lt;a href="https://meshtastic.org/docs/overview/radio-settings/#presets">LongFast Radio Preset&lt;/a>, along with the default frequency (906.875MHz) and sync word (&lt;code>0x2B&lt;/code>).
Every time a new LoRa signal with those parameters arrived, it was encapsulated with &lt;a href="https://github.com/eriknl/LoRaTap/">LoRaTap&lt;/a>, which is mostly a header with some radio information, and written to USB Serial.
To distinguish the end of one transmission from the start of another (and avoid the &lt;code>\n&lt;/code> vs &lt;code>\r\n&lt;/code> conflict) I terminated each packet with a special byte sequence unlikely to be in the real data.&lt;/p>
&lt;h1 id="software" >Software
&lt;span>
&lt;a href="#software" title="Direct Link to Software">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>Now that I had an incoming stream of LoRa packets I had to learn how to decode them.
The wonderful folks selling the &lt;a href="https://www.hackerpager.net/">HackerPager&lt;/a> had already written a Meshtastic decoder plugin for Wireshark to be used on captured .pcap files, but I didn&amp;rsquo;t have pcap files.
After reading the &lt;a href="https://ietf-opsawg-wg.github.io/draft-ietf-opsawg-pcap/draft-ietf-opsawg-pcap.html">specifications for a pcap file&lt;/a> I wrote a script that encapsulated the incoming LoRaTap stream into a valid stream of pcap data.
Each pcap data stream must begin with a pcap header that includes the correct &lt;a href="https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-pcaplinktype-16">link type&lt;/a> (270 for LoRaTap),
followed by the individual packets, each of which had to be wrapped with timestamp and other capture information.&lt;/p>
&lt;p>Once I was generating valid pcap files and followed the guide to install the HackerPager plugin, I was finally able to see all the Meshtastic traffic happening around me during that capture.
Wireshark supports pcap streams via stdin, so after a few tweaks (and discovering that powershell doesn&amp;rsquo;t do normal byte-friendly piping) I had a live view of all the meshtastic traffic around me.
This was an amazing sight, being able to see &amp;ldquo;hello world&amp;rdquo; messages pinging back and forth between nodes, but I didn&amp;rsquo;t plan to stop at Wireshark.
I wanted data collection and analytics, and I wasn&amp;rsquo;t planning to do it all using Wireshark and Lua.&lt;/p>
&lt;p>Enter: &lt;a href="https://scapy.net/">Scapy&lt;/a> - a packet manipulation library for Python. Think of it like Wireshark but with the ability to assemble and modify packets, not just read them.
Scapy decodes packets into individual layers, and includes many built-in layers, from HTTP and the OSI model to CAN bus protocols.
Unsurprisingly, it doesn&amp;rsquo;t include anything for Meshtastic, so I had to add those layers myself.&lt;/p>
&lt;h2 id="dissecting-a-meshtastic-packet" >Dissecting a Meshtastic Packet
&lt;span>
&lt;a href="#dissecting-a-meshtastic-packet" title="Direct Link to Dissecting a Meshtastic Packet">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Using the Meshtastic documentation to understand the protocol, the HackerPager Wireshark plugin as a reference implementation,
and many many tabs of Scapy documentation, I was able to identify and decode the contents of each layer in the meshtastic packet.
I&amp;rsquo;ll walk you through them.&lt;/p>
&lt;h3 id="layer-1-loratap" >Layer 1: LoRaTap
&lt;span>
&lt;a href="#layer-1-loratap" title="Direct Link to Layer 1: LoRaTap">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>Mostly just an encapsulation format that Wireshark and other tools can decode&lt;/li>
&lt;li>Includes received radio information including LoRa config and SNR/RSSI&lt;/li>
&lt;li>Sync Word - byte that can be used to set a protocol
&lt;ul>
&lt;li>Need all your LoRa devices to have the same sync word&lt;/li>
&lt;li>Meshtastic = 0x2B, LoRaWan uses 0x34&lt;/li>
&lt;li>Think of this like a VLAN ID&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Message size&lt;/li>
&lt;/ul>
&lt;h3 id="layer-2-meshpacket" >Layer 2: MeshPacket
&lt;span>
&lt;a href="#layer-2-meshpacket" title="Direct Link to Layer 2: MeshPacket">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>Unencrypted protobuf that all nodes can read&lt;/li>
&lt;li>Routing information so other nodes can relay the packet
&lt;ul>
&lt;li>Source and destination radio IDs&lt;/li>
&lt;li>Packet ID (used for deduplication and encryption)&lt;/li>
&lt;li>Hop information
&lt;ul>
&lt;li>Hop limit is how many hops are &amp;ldquo;left&amp;rdquo;&lt;/li>
&lt;li>Hop start is how many hops it started with&lt;/li>
&lt;li>Last hop data to do some intelligent routing&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Channel hash to speed up decryption&lt;/li>
&lt;/ul>
&lt;h3 id="layer-3-meshpayload" >Layer 3: MeshPayload
&lt;span>
&lt;a href="#layer-3-meshpayload" title="Direct Link to Layer 3: MeshPayload">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>Encrypted protobuf containing the actual data&lt;/li>
&lt;li>Encrypted with AES256-CTR stream cipher
&lt;ul>
&lt;li>Uses the channel key and packet ID to encrypt/decrypt&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&amp;ldquo;Port Number&amp;rdquo; determines what app protocol is being used&lt;/li>
&lt;li>Additional metadata like request/reply IDs and the source/dest ID&lt;/li>
&lt;/ul>
&lt;h3 id="layer-4-meshapp-or-meshtext" >Layer 4: MeshApp or MeshText
&lt;span>
&lt;a href="#layer-4-meshapp-or-meshtext" title="Direct Link to Layer 4: MeshApp or MeshText">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>This is the end-user functionality of the device&lt;/li>
&lt;li>Remaining data in the LoRa packet is decoded as a protobuf according to the port number&lt;/li>
&lt;li>Applications include:
&lt;ul>
&lt;li>Node info&lt;/li>
&lt;li>Position&lt;/li>
&lt;li>Telemetry&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Text messages (port number = 1) contain the message as a binary string&lt;/li>
&lt;/ul>
&lt;p>For each layer I had to define all the fields to be extracted and write the dissection logic to set the values of those fields, including decryption and protobuf decoding.
After I had created each layer I had to &amp;ldquo;register&amp;rdquo; them with the scapy interpreter so it knew to associate the incoming data and subsequent payloads with the correct dissector.&lt;/p>
&lt;p>Once Scapy fully dissected a packet I was able to access the individual fields in each packet as if it were a typical Python object.
Every packet that was processed (if it could be decoded) was added to an SQLite database to record network traffic and create a collection of known nodes based on their periodic NodeInfo broadcasts.
This let me take a look at stats such as airtime utilization by different nodes, protocols, and in general perform long-term trend observation.
I could even grow beyond my single data source with volunteers hosting another instance and sending the results to a central database
in an to get a holistic view of all the Meshtastic traffic in the city.&lt;/p>
&lt;h1 id="the-results" >The Results
&lt;span>
&lt;a href="#the-results" title="Direct Link to The Results">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>Now that I had a process to collect and record all Meshtastic traffic happening around me, without the limits of using a proper Meshtastic node,
I could determine the cause of the inconsistent connectivity if I knew where to look.&lt;/p>
&lt;p>Unfortunately, I didn&amp;rsquo;t see anything obviously symptomatic of an unreliable network and adding advanced analytics, a webUI, and distributed data collection was beyond my skills and interest.
Lucky I was introduced to a tool called &lt;a href="https://github.com/zenitraM/malla">Malla&lt;/a>,
which can collect data from multiple sources using MQTT and display them all in a much slicker WebUI than I would have been able to make.
So rather than reinvent the wheel I started a &lt;a href="https://api.phillymesh.net/">PhillyMesh Malla Instance&lt;/a> with a number of gateways feeding data into the platform.
The one limitation of Malla over the raw LoRa decoding is that by default, nodes don&amp;rsquo;t have &amp;ldquo;Ok to MQTT&amp;rdquo; enabled so we don&amp;rsquo;t have a complete picture,
but I doubt I could convince multiple people to setup a whole mini PC for raw LoRa sniffing, so I think the trade-off is worth it.&lt;/p>
&lt;p>While I didn&amp;rsquo;t end up using this project long-term to learn about our Mesh, I did learn plenty of new things along the way:&lt;/p>
&lt;ul>
&lt;li>I hadn&amp;rsquo;t done embedded development in a very long time and learned about platform.io&lt;/li>
&lt;li>This was my first time dealing with binary data, bitmasking, and endianness&lt;/li>
&lt;li>I had never dealt with protobufs before but now understand why they&amp;rsquo;re used everywhere&lt;/li>
&lt;li>I finally used a proper database, and I&amp;rsquo;m coming around to tolerating SQL after resisting for so long&lt;/li>
&lt;li>I learned that I should continue avoiding low-level cryptography
&lt;ul>
&lt;li>It&amp;rsquo;s a bad sign when you start calling functions with &amp;ldquo;hazmat&amp;rdquo; in the name&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>I also got to show off my project at Jawncon 0x2 and it was so cool to see people interested in something I worked on,
especially those working on the &lt;a href="https://www.kismetwireless.net/">Kismet&lt;/a> RF analysis suite.
The idea that something I wrote as a side project could get integrated into a larger project is very exciting.&lt;/p>
&lt;p>For now it&amp;rsquo;s a mostly-stanalone set of scripts that are tedious to get working, but it&amp;rsquo;s as feature-complete as I plan to make it.
All the source code for this project, including the firmware, build instructions, and sample SQL queries,
are available at &lt;a href="https://github.com/calefrey/scapy-meshtastic">https://github.com/calefrey/scapy-meshtastic&lt;/a>.&lt;/p></description></item><item><title>Low Priced Solar Node (Harbor Breeze)</title><link>https://phillymesh.net/2025/06/21/harbor-breeze-node/</link><pubDate>Sat, 21 Jun 2025 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2025/06/21/harbor-breeze-node/</guid><description>&lt;h2 id="update" >UPDATE
&lt;span>
&lt;a href="#update" title="Direct Link to UPDATE">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>You can no longer buy this particular Harbor Breeze node! As a result, we need slightly new wiring. &lt;a href="https://phillymesh.net/2026/07/10/harbor-breeze-node-updated/">We have a new article with new instructions here&lt;/a>.&lt;/p>
&lt;h2 id="original-post" >Original Post
&lt;span>
&lt;a href="#original-post" title="Direct Link to Original Post">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>After building my &lt;a href="https://phillymesh.net/2025/05/14/medium-priced-solar-node">Medium Priced Solar Node&lt;/a>, I wanted to explore cheaper options. I wanted to be able to build nodes to give to friends or community members to place in advantageous locations, and not feel like I was losing $100+ if it doesn&amp;rsquo;t work out.&lt;/p>
&lt;p>If you&amp;rsquo;ve been around the Meshtastic community for more than a month, you&amp;rsquo;ve almost certainly heard of the Harbor Breeze Solar Light hack. This involves using the solar panel, solar management board, battery, and enclosure from a low-cost solar light available in the USA at Lowes for less than $10. The availability of these lights can vary, but if you search hard enough you can find them.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted_hu_9a9f588bda428df8.webp" alt="A Harbor Breeze solar light modified to include a Meshtastic node" width="50%">
&lt;/a>&lt;h3 id="variations" >Variations
&lt;span>
&lt;a href="#variations" title="Direct Link to Variations">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>I&amp;rsquo;ve seen &lt;em>many&lt;/em> variations of this hack. I believe the first came from Tavis Gustafson. This is the one that is documented in the &lt;a href="https://meshtastic.org/docs/community/enclosures/rak/harbor-breeze-solar-hack/">Meshtastic docs&lt;/a> and was &lt;a href="https://hackaday.com/2024/01/21/garden-light-turned-mesh-network-node/">featured on Hackaday&lt;/a>. This one is tried and true, but does not allow the user to press the included power button to turn on/off the node.&lt;/p>
&lt;p>These instructions work great with the RAK4631 board. We are exploring a new version that uses a Seeed Studio Xiao. Unfortunately, if you wire up a Xiao the way we have in these instructions, the node can often suffer from brownouts (where the battery charges just enough that the Xiao powers on, but then the battery drains fully during start-up and the node gets stuck in a permanent boot loop until you can go and charge it up yourself).&lt;/p>
&lt;p>There is an alternate wiring to avoid these brownouts that requires scraping off the R6 resistor so you can use the Harbor Breeze node&amp;rsquo;s internal solar management system (which may or may not have a brownout-preventing feature, we&amp;rsquo;re still testing it) but prevent the board from turning the node off during the day. I&amp;rsquo;d consider scraping off a resistor and wiring to the Xiao&amp;rsquo;s absolutely miniscule battery pads to be a &amp;ldquo;hard mode&amp;rdquo; node, so once we vet that this way prevents brownouts, we will make a new article for the Dirt Cheap Hard Mode Solar Node.&lt;/p>
&lt;p>The approach I&amp;rsquo;m going with today is very beginner friendly. It is the one that I found in the description of this &lt;a href="https://www.printables.com/model/1275240-minimalist-sma-harbor-breeze-meshtastic-off-grid-s">3D printed mount for the light&lt;/a>. This allows us to use the power button and doesn&amp;rsquo;t require any modifications to the included solar management board. Even if you&amp;rsquo;re new to soldering, this should be pretty easy.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/labels.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/labels_hu_698abf44859cf99a.webp" alt="I had to go to a bunch of different stores so when I finally found them I bought many" width="80%">
&lt;/a>&lt;h2 id="parts-list" >Parts List
&lt;span>
&lt;a href="#parts-list" title="Direct Link to Parts List">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="essential-parts" >Essential Parts
&lt;span>
&lt;a href="#essential-parts" title="Direct Link to Essential Parts">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/wisblock-starter-kit?srsltid=AfmBOoqGNa6h2MSgg5oLSWXtv6xPEiVNtHl4h6oP_BMcHh4kBFPVji3x&amp;amp;variant=41786685063366">WisBlock Starter Kit&lt;/a>&lt;/td>
&lt;td>$24.99&lt;/td>
&lt;td>This is the Meshtastic node. You want the RAK19007+RAK4631 (not -R) version. Pick the frequency for your region, USA is 915.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.lowes.com/pd/Harbor-Breeze-60LM-Solar-Flood-Light-0-6-Watt-Black-Solar-LED-Flood-Light/1002689960">Harbor Breeze Solar Light&lt;/a>&lt;/td>
&lt;td>$9.98&lt;/td>
&lt;td>Make sure you verify that the Item number is 2483282. If you purchase in person, the item number will be displayed on the packaging. There is a newer version of this light and whether it works with this hack has not yet been verified.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://heltec.org/project/gt-800-whip-antenna/">Heltec GT-800 868, 915 MHz Whip Antenna&lt;/a>&lt;/td>
&lt;td>$2.99&lt;/td>
&lt;td>These are cheap clones of the MuziWorks 17cm Whip Antenna that have tested just as well. You can also use the more expensive 8dbi antenna from the Medium Price Solar Node, but in Philly this will be all that is necessary for a roof node.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Essential parts cost: $37.96 + shipping&lt;/strong>&lt;/p>
&lt;h3 id="parts-you-maymay-not-need-or-already-have-laying-around" >Parts you may/may not need or already have laying around
&lt;span>
&lt;a href="#parts-you-maymay-not-need-or-already-have-laying-around" title="Direct Link to Parts you may/may not need or already have laying around">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;em>I break this section out because 1) you may already have some of these parts laying around, 2) you could get many of them individually for very cheap if you buy local, 3) if you do have to buy online and in bulk, you will have some on hand and they will not contribute to the cost of your next build, and 4) you may not need some of these parts.&lt;/em>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/dp/B09GJGNPQX">IPEX to SMA Female Cable&lt;/a>&lt;/td>
&lt;td>$6.94 for 2&lt;/td>
&lt;td>The RAK kit comes with a cable, but it&amp;rsquo;s not long enough if you intend to run the antenna through existing holes. You&amp;rsquo;ll need a cable that&amp;rsquo;s at least 8 inches. Make sure to buy a cable that matches your antenna; this one works with the Muzi antenna from above.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/20Pair-JST-PH-Connector-Female-Cables/dp/B09JP1S2RD?th=1">JST PHR-2 2mm connector&lt;/a>&lt;/td>
&lt;td>$8.39 for 20&lt;/td>
&lt;td>The WisBlock board uses a 2mm JST connector. You will need one of these to solder to the solar board and connect to the Wisblock battery terminal.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/dp/B01B5RBOA6">Waterproof Sealant&lt;/a>&lt;/td>
&lt;td>$6.34 for lots&lt;/td>
&lt;td>You will need to seal up some holes in the case to make them waterproof if you want to install this outside. You can also get this from Lowes if you want to reduce shipping costs, just make sure the variety you go with works with plastic.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Total cost: $59.63 + shipping (or about $42 per node if you make lots)&lt;/strong>&lt;/p>
&lt;h2 id="instructions" >Instructions
&lt;span>
&lt;a href="#instructions" title="Direct Link to Instructions">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ol>
&lt;li>Before opening up the node, make sure the power button is off&lt;/li>
&lt;/ol>
&lt;p>Press the power button and verify that the light comes on, then press it again to power it off. If the light doesn&amp;rsquo;t come on, charge it up and then make sure it does.&lt;/p>
&lt;ol start="2">
&lt;li>Open up the node&lt;/li>
&lt;/ol>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/before_modification.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/before_modification_hu_cfe6239b065ebdec.webp" alt="The inside of the light with the battery removed" width="50%">
&lt;/a>&lt;p>Remove the battery and turn the solar panel upside down on a flat surface to ensure there won&amp;rsquo;t be any electricity running through the circuits while you solder.&lt;/p>
&lt;ol start="3">
&lt;li>Cut and remove the cables to the light. Remove the weather-proofing here, too.&lt;/li>
&lt;/ol>
&lt;p>You can cut them close to the circuit board.&lt;/p>
&lt;ol start="4">
&lt;li>Determine which is the positive and which is the negative side of the JST connector&lt;/li>
&lt;/ol>
&lt;p>Don&amp;rsquo;t skip this step! The JST connectors don&amp;rsquo;t have a standard and the one&amp;rsquo;s you ordered are likely BACKWARDS from the standard that RAK uses. This means it is likely that the red cable is negative and the black cable is positive. Plug the JST connector into the Battery connector on the RAK, look at which color is on the side with the plus symbol. This color is positive and the other color is negative.&lt;/p>
&lt;ol start="5">
&lt;li>Solder the JST connector to the light circuitry.&lt;/li>
&lt;/ol>
&lt;p>Solder the negative end of the JST connector to the spot marked negative and the positive end to the tab on the positive side the battery. You might need the JST connector cable to be a little longer (do a test fit before soldering), if so you can use the wire from one of the extra female JST cables that you don&amp;rsquo;t need.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/wiring.png">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/wiring_hu_5150403b7a667d45.webp" alt="Wiring diagram" width="50%">
&lt;/a>&lt;p>The above picture is instructions I found online, the color of your wires may be reversed!&lt;/p>
&lt;ol start="6">
&lt;li>Make sure you haven&amp;rsquo;t accidentally turned on the power button and plug in the JST connector to the battery connector on the RAK&lt;/li>
&lt;/ol>
&lt;p>&lt;em>Warning: if you accidentally power on your RAK board without the antenna connected, you can irreversibly damage the board!&lt;/em>&lt;/p>
&lt;p>To be safe, you should connect your antenna to the RAK before plugging the JST connector into the battery connector. Verify that the RAK didn&amp;rsquo;t power on (that the power button is still off) and then unplug the IPEX connector and feed it though the hole where the light cables used to be, then plug it back into the RAK. Then put the battery back into the battery holder and hit the power button.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/after_modification.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/after_modification_hu_8435c3718e25e22f.webp" alt="Full assembly" width="50%">
&lt;/a>&lt;p>You can see the original IPEX antenna cable at the top of the image, it was not long enough to reach back out the pre-drilled antenna cable hole.&lt;/p>
&lt;p>You can also see that in my case, the wire running to the positive end of the battery is black. That&amp;rsquo;s because my JST connector is reverse from the standard and my positive wire is black. In this picture I left the original light cables long in case I wanted to try a different variation. However, I got lucky and this variation worked well!&lt;/p>
&lt;ol start="7">
&lt;li>Waterproofing&lt;/li>
&lt;/ol>
&lt;p>You will want to waterproof any holes that you&amp;rsquo;ve made in your case, including the original one that the light cables were running through. I also ended up adding a little extra sealant to the screws on the rear of the case.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted-waterproofing.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/finished-node-mounted-waterproofing_hu_4dccc4f72f8c0bc7.webp" alt="Rear view to include waterproofing" width="50%">
&lt;/a>&lt;h2 id="mounting" >Mounting
&lt;span>
&lt;a href="#mounting" title="Direct Link to Mounting">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If you have a pole to mount to, you may be interested in printing a &lt;a href="https://www.printables.com/model/1335438-pole-mount-for-harbor-breeze-solar-meshtastic-node">remix of the original 3D printed mount&lt;/a> that I made. If you plan to mount to wood or something else you can screw into, the &lt;a href="https://www.printables.com/model/1275240-minimalist-sma-harbor-breeze-meshtastic-off-grid-s">original 3D printed mount&lt;/a> would be better.&lt;/p>
&lt;p>Many of the 3D printed mounts online, such as the example below that another Philly Mesh member made, do not include an antenna mount, so you&amp;rsquo;re required to drill an antenna hole directly into the case. Oftentimes this requires the antenna to be bent 90-degrees. The Muzi antenna I linked does not offer this option and in practice many of the cheap plastic antennas have reduced range when bent. Make sure you test your antenna and confirm that it still performs well when bent, if that&amp;rsquo;s how you plan to use it.&lt;/p>
&lt;!-- ![Another Philly mesh member made this](/images/uploads/2025-06-21-harbor-breeze-node/mounted.jpg)
{width="50%"} -->
&lt;a href="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/mounted.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-06-21-harbor-breeze-node/mounted_hu_a34d4c8ac5449da1.webp" alt="Another Phillymesh member made this" width="50%">
&lt;/a></description></item><item><title>Getting Started with Meshtastic in Philly</title><link>https://phillymesh.net/2025/06/16/getting-started/</link><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2025/06/16/getting-started/</guid><description>&lt;p>&lt;a href="https://phillymesh.net/getting-started">Hello! We moved the getting started guide to its own page so it can stay a &amp;ldquo;living document&amp;rdquo;.&lt;/a>&lt;/p>
&lt;p>Please update your bookmarks accordingly.&lt;/p>
&lt;p>If you came here from an external link please let us know so we can get that updated. Thanks!&lt;/p></description></item><item><title>Stealthy Water Bottle Node</title><link>https://phillymesh.net/2025/05/16/water-bottle-node/</link><pubDate>Fri, 16 May 2025 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2025/05/16/water-bottle-node/</guid><description>&lt;p>For most of the day, I can be found carrying a T-1000e in my pocket. My home has (or will have) a node on the roof with a longer range antenna, and my T-1000e works perfectly to keep myself connected to the mesh, even if my phone can&amp;rsquo;t connect all the way to my roof node via bluetooth. However, when I travel outside of the house the tiny antenna in the T-1000e leaves something to be desired.&lt;/p>
&lt;p>To fill this gap, I came up with a plan for a portable node with a longer range antenna that I could easily stick in a backpack or leave on my bike that wouldn&amp;rsquo;t raise any alarms. While I&amp;rsquo;m not averse to carrying around large antennas, I like to save this activity for radio meetups or cons, and be a little less obvious in my day to day life. I realized this bike water bottle I had was exactly the right length for the whip antenna I had laying around.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle_side.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle_side_hu_2297c6243257d982.webp" alt="Stealthy water bottle node" width="80%">
&lt;/a>&lt;p>Since I built and started using this water bottle node, I don&amp;rsquo;t know how more people don&amp;rsquo;t do something like this! You can stick it in a water bottle pocket of a backpack and it stays vertically polarized. The antenna doesn&amp;rsquo;t get bent or unscrewed in your bag. It&amp;rsquo;s entirely waterproof so you don&amp;rsquo;t have to worry about getting caught in the rain. And it doesn&amp;rsquo;t get any curious looks from cursory bag checks at hospitals or museums. As a general disclaimer, I would NOT recommend bringing this to any high security location like an airport. TSA is generally fine with radio and Meshtastic equipment, but something like this might get you pulled into a room and interrogated about why you&amp;rsquo;re hiding wires, batteries, and antennas in a normal looking object.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle_top.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle_top_hu_fafb1253180bb455.webp" alt="Easy charging at the top" width="80%">
&lt;/a>&lt;p>The WisBlock with a 1200mAh battery lasts about a week between charges. This is plenty for me, but feel free to use a battery with more capacity to make it last longer, there&amp;rsquo;s plenty of extra space in the water bottle!&lt;/p>
&lt;h2 id="parts-list" >Parts list
&lt;span>
&lt;a href="#parts-list" title="Direct Link to Parts list">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="essential-parts" >Essential parts
&lt;span>
&lt;a href="#essential-parts" title="Direct Link to Essential parts">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/wisblock-starter-kit?srsltid=AfmBOoqGNa6h2MSgg5oLSWXtv6xPEiVNtHl4h6oP_BMcHh4kBFPVji3x&amp;amp;variant=41786685063366">WisBlock Starter Kit&lt;/a>&lt;/td>
&lt;td>$24.99&lt;/td>
&lt;td>This is the Meshtastic node. You want the RAK19007+RAK4631 (not -R) version. Pick the frequency for your region, USA is 915.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.specialized.com/us/en/purist-moflo-22oz/p/157653">Water Bottle&lt;/a>&lt;/td>
&lt;td>$11.99&lt;/td>
&lt;td>I had a Specialized MoFlo 22oz bike water bottle lying around. It barely fits this 17cm Gizont whip antenna (that&amp;rsquo;s actually slightly less than 17cm) that I had, but may not fit other 17cm whip antennas. I&amp;rsquo;d recommend grabbing whatever antenna you have available and finding a water bottle that fits that.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://ovvys.com/products/gizont-long-range-whip-antenna?srsltid=AfmBOorSCCA6EwAnSAkfMoFwI7ncjHl4AFluoO8OGU7GVjI1yp73MW33">Antenna&lt;/a>&lt;/td>
&lt;td>$13.00&lt;/td>
&lt;td>I can&amp;rsquo;t vouch for this particular distributer, but I&amp;rsquo;ve used Gizont whip antennas for many projects and always had good results. I think I bought this one on eBay, so just search the name of the antenna and find it wherever is most convenient.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://muzi.works/products/h1-battery?srsltid=AfmBOorybyZ_2L17M_H8qQfEdhiu6lNvZm79b52aTs1dyez0qWbZaAZX">MuziWorks H1 Battery (1200 mAh)&lt;/a>&lt;/td>
&lt;td>$9.90&lt;/td>
&lt;td>I had a couple of these because I made some of their 3D printed nodes previously&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Essential parts cost: $59.88 + shipping&lt;/strong>&lt;/p>
&lt;h3 id="parts-you-may-already-have-laying-around" >Parts you may already have laying around
&lt;span>
&lt;a href="#parts-you-may-already-have-laying-around" title="Direct Link to Parts you may already have laying around">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;em>I break this section out because 1) you may already have some of these parts laying around, 2) you could get many of them individually for very cheap if you buy local, and 3) if you do have to buy online and in bulk, you will have some on hand and they will not contribute to the cost of your next build.&lt;/em>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/Female-Right-Angle-Coaxial-12inch/dp/B098QFZ2DB?th=1">Right angle SMA to IPEX cable&lt;/a>&lt;/td>
&lt;td>$10.99&lt;/td>
&lt;td>If you have tight clearances you&amp;rsquo;ll need one of these right angle cables rather than the usual straight ones.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>JST Connectors &lt;a href="https://www.amazon.com/Upgraded-Connector-Battery-Inductrix-Eachine/dp/B07NWD5NTN/">2mm male&lt;/a> and &lt;a href="https://www.amazon.com/Chanzon-Connector-Electrical-Terminal-Lighting/dp/B0B2DBTVJC/">1.25mm female&lt;/a>&lt;/td>
&lt;td>$14.98&lt;/td>
&lt;td>The battery is 1.25mm JST and the WisBlock is 2mm JST, so you&amp;rsquo;ll need to solder two connectors together to make them connect.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/HVAZI-M1-2-M1-4-M1-6-M2-5/dp/B0CJJFFCW2/">M2.5 screws and nuts&lt;/a>&lt;/td>
&lt;td>$7-18&lt;/td>
&lt;td>You can get just M2.5 screws and nuts for much cheaper, but if you don&amp;rsquo;t already have a set of metric screws and nuts, it&amp;rsquo;s worth it to get a variety pack, which is what I have linked.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.printables.com/model/1346010-stealthy-rak4630-water-bottle-meshtastic-node">3D Printed Node/Battery/Antenna Holder&lt;/a>&lt;/td>
&lt;td>free&lt;/td>
&lt;td>This holds everything together&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Total cost: $92.85 + shipping&lt;/strong>&lt;/p>
&lt;h2 id="assembly" >Assembly
&lt;span>
&lt;a href="#assembly" title="Direct Link to Assembly">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I threw together a 3D printed bracket that holds all of the components together and to charge all you have to do is unscrew the top to plug into the WisBlock&amp;rsquo;s USB-C port. If any of your parts are different than mine you will need to make your own. You can also just duct tape all the pieces together and throw them in the water bottle if you&amp;rsquo;d like, I did this for a month or so until I designed the bracket.&lt;/p>
&lt;p>Screw the antenna into the bracket and feed the end of the pigtail through the top. The WisBlock goes on the side where the antenna pigtail feeds. It should slot in and then you can screw it in with the M2.5 screws and nuts to secure it.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/interior.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/interior_hu_d343614b2d6a883f.webp" alt="Interior, WisBlock side" width="80%">
&lt;/a>&lt;p>You will need to solder the two JST connectors you got together to make a connector for the battery to the WisBlock. The connector will be 1.25mm female to 2mm male. &lt;em>Pay attention to the positive and negative terminals on the WisBlock!!&lt;/em> It will likely be the &lt;em>reverse&lt;/em> of what the battery sends out. You may need to solder the red leads of one connector to the black of the other and vice versa. If you mess this up, you will likely kill your WisBlock.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/interior_rear.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/interior_rear_hu_56a4feea48540e94.webp" alt="Interior, battery side" width="80%">
&lt;/a>&lt;p>Slide the battery into the other side of the bracket and you&amp;rsquo;re good to go!&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-16-water-bottle-node/water_bottle_hu_e91240085258e9ba.webp" alt="All assembled" width="80%">
&lt;/a></description></item><item><title>Medium Priced Solar Node</title><link>https://phillymesh.net/2025/05/14/medium-priced-solar-node/</link><pubDate>Wed, 14 May 2025 00:00:01 +0000</pubDate><author>Emily Boda</author><guid>https://phillymesh.net/2025/05/14/medium-priced-solar-node/</guid><description>&lt;p>I&amp;rsquo;m calling this a &amp;ldquo;medium priced&amp;rdquo; node because I didn&amp;rsquo;t really budget and just bought parts as they became necessary. There are also many examples of cheaper nodes, such as the &lt;a href="https://phillymesh.net/2025/06/21/harbor-breeze-node">Low Priced Solar Node (Harbor Breeze)&lt;/a>. The low cost node depends on the availability of the Harbor Breeze solar lights, whereas this node uses more generic parts that will almost surely be available in the future.&lt;/p>
&lt;p>For now, here&amp;rsquo;s a reasonably reliable node that costs around $110 for just the essential parts.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-front.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-front_hu_3e96311107090989.webp" alt="Medium priced solar node" width="50%">
&lt;/a>&lt;h2 id="parts-list" >Parts List
&lt;span>
&lt;a href="#parts-list" title="Direct Link to Parts List">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 id="essential-parts" >Essential Parts
&lt;span>
&lt;a href="#essential-parts" title="Direct Link to Essential Parts">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/wisblock-starter-kit?srsltid=AfmBOoqGNa6h2MSgg5oLSWXtv6xPEiVNtHl4h6oP_BMcHh4kBFPVji3x&amp;amp;variant=41786685063366">WisBlock Starter Kit&lt;/a>&lt;/td>
&lt;td>$24.99&lt;/td>
&lt;td>This is the Meshtastic node. You want the RAK19007+RAK4631 (not -R) version. Pick the frequency for your region, USA is 915.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/unify-enclosure-ip67-150x100x45mm-with-pre-mounted-m8-5-pin-and-rp-sma-antenna-ip-rated-connectors?variant=42861623738566">Unify Enclosure 150x100x45mm&lt;/a>&lt;/td>
&lt;td>$46.00&lt;/td>
&lt;td>This one comes with pre-drilled antenna holes and is the right size for our RAK4631 and some batteries.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://store.rakwireless.com/products/unify-enclosure-mounting-kit?variant=42457063424198">Enclosure Mounting Kit&lt;/a>&lt;/td>
&lt;td>$4.00&lt;/td>
&lt;td>I picked type A, the vertical mounting version. This is optional, but great if you want to mount on a pole. Keep an eye on the recommended pole diameter (65-89mm).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://store.rokland.com/products/alfa-aoa-915-5acm-5-dbi-omni-outdoor-915mhz-802-11ah-mini-antenna-for-lora-halow-application?srsltid=AfmBOop9lzm8PeK3QjFWUSCN1gY2lYVX7E8y4QnfFWo_uJd6ewXJo9St">Alfa 915 5dbi antenna&lt;/a>&lt;/td>
&lt;td>$17.97&lt;/td>
&lt;td>I picked this one because I&amp;rsquo;ve tested a couple and they seem to be well-tuned and the quality seems consistent. YMMV.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/Goupchn-Connectors-Polarity-Convertor-Transceiver/dp/B08Q2TQMTR?source=ps-sl-shoppingads-lpcontext&amp;amp;ref_=fplfs&amp;amp;psc=1&amp;amp;smid=A39XGWEDWDBDR&amp;amp;gQT=0">Adapter from RP SMA Female to N Type Male&lt;/a>&lt;/td>
&lt;td>$8.99&lt;/td>
&lt;td>The enclosure comes with a waterproofed RP SMA female adapter (reverse polarity) which is atypical, and the Alfa antennas are N Type Male. The included is an example, but you may also want one with a length of cable between them so as to separately attach the antenna to wherever you&amp;rsquo;re mounting it.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Two 18650 rechargeable batteries&lt;/td>
&lt;td>varies, maybe $10?&lt;/td>
&lt;td>I bought mine from Amazon, but this is not recommended. Check out &lt;a href="http://batteries.parametrek.com/index.html?size=18650">this list&lt;/a> that someone made of reputable distributors.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Essential parts cost: $111.95 + shipping&lt;/strong>&lt;/p>
&lt;h3 id="parts-you-may-already-have-laying-around" >Parts you may already have laying around
&lt;span>
&lt;a href="#parts-you-may-already-have-laying-around" title="Direct Link to Parts you may already have laying around">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;em>I break this section out because 1) you may already have some of these parts laying around, 2) you could get many of them individually for very cheap if you buy local, and 3) if you do have to buy online and in bulk, you will have some on hand and they will not contribute to the cost of your next build.&lt;/em>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parts&lt;/th>
&lt;th>Price&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://store.rokland.com/products/tape-helium-antenna-and-coaxial-cable-self-fusing-silicone-heat-water-resistant?srsltid=AfmBOop-whs6Uw0qzwS5PTJkUya-_C6Og1qUdySATHus-7WdkKyOgMxJ">Antenna Tape&lt;/a>&lt;/td>
&lt;td>$8.80&lt;/td>
&lt;td>Although the antenna connector on the top is waterproofed, your adapter connections are not. This is a great option to waterproof your connections.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/dp/B00LSG5BKO?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1">Battery holders&lt;/a>&lt;/td>
&lt;td>$7.99&lt;/td>
&lt;td>I bought this pack of a million from Amazon. I had to solder them in series. If you&amp;rsquo;re not good at soldering find one that you don&amp;rsquo;t need to solder. Make sure the ones you buy are in parallel (not in series!). When I doubt, check the voltage with a multimeter before installation.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.amazon.com/20Pair-JST-PH-Connector-Female-Cables/dp/B09JP1S2RD?th=1">JST PHR-2 2mm connector&lt;/a>&lt;/td>
&lt;td>$8.39&lt;/td>
&lt;td>The WisBlock board uses a 2mm JST connector. Depending on what kind of battery pack you buy, you may need to solder these JST connectors on.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Total cost: $137.13 + shipping&lt;/strong>&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-interior.jpg">&lt;img src="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-interior_hu_bdfcca9e56907db1.webp" alt="Interior of the node" width="80%">
&lt;/a>&lt;h2 id="picking-a-meshtastic-node" >Picking a Meshtastic Node
&lt;span>
&lt;a href="#picking-a-meshtastic-node" title="Direct Link to Picking a Meshtastic Node">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>nRF Meshtastic devices (like the RAK4631) are far superior to other types when it comes to power efficiency. While an ESP32 Meshtastic device (like a Heltec v3) might last 24 hours on a battery, that same battery will power a RAK4631 device for a week. For that reason, for solar powered devices, the RAK4631 is a great pick.&lt;/p>
&lt;p>You may also wish to add environmental sensors to your RAK4631. See &lt;a href="https://meshtastic.org/docs/hardware/devices/rak-wireless/wisblock/peripherals/?rakmodules=Sensors">this page&lt;/a> on Meshtastic&amp;rsquo;s website for supported sensors. This will allow your device to report measurements like temperature and humidity. Keep in mine those measurements will be from &lt;em>inside&lt;/em> the enclosure, so they&amp;rsquo;re better for reporting the status of your node&amp;rsquo;s environment than the outside weather.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-wis-close.JPG">&lt;img src="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/solar-wis-close_hu_1fa5ed40d701863e.webp" alt="Close up of the WisBlock" width="80%">
&lt;/a>&lt;h2 id="what-about-highlow-temps" >What about high/low temps?
&lt;span>
&lt;a href="#what-about-highlow-temps" title="Direct Link to What about high/low temps?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>18650 batteries generally have a stated temperature range for charging between 0 and 45C (32 to 113F). While your summer might top out at 90F, the temperatures inside a sealed enclosure in the direct sunlight might be closer to 135F. I&amp;rsquo;ve actually seen nodes in the &lt;a href="pvmesh.org">Pioneer Valley&lt;/a> reporting that temperature in the summer. On the other end of the spectrum, most of North America reaches below 32F in the winter for weeks at a time.&lt;/p>
&lt;p>From what I understand, these recommended charging temperatures aren&amp;rsquo;t as big of a deal as they might seem to be at first glance. A group from Alberta wrote a &lt;a href="https://yycmesh.com/2025/04/19/cold-weather-charging-of-lithium-ion-batteries-real-world-lessons-from-the-meshtastic-community/">great article&lt;/a> about their node deployments in the frozen Canadian winters. They recommend overspeccing the battery capacity (three 18650s instead of two) in your node due to reduced charging performance during the winter, but other than that their nodes are pretty much fine. There&amp;rsquo;s no long term capacity effects.&lt;/p>
&lt;p>I&amp;rsquo;m not as worried about high heat either. I&amp;rsquo;m of the opinion that I&amp;rsquo;m likely going to have to open up this node probably once a year to do firmware updates, so I might as well take that opportunity to replace the 18650s as well. If you buy them in bulk, the cost will be closer to $2-3 each, so it&amp;rsquo;s a relatively small maintenance cost.&lt;/p>
&lt;h2 id="installation-location" >Installation Location
&lt;span>
&lt;a href="#installation-location" title="Direct Link to Installation Location">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The best place to install a node is very high up. Unfortunately for most of us, this means mounting the node somewhere like the roof, which is difficult to get to.&lt;/p>
&lt;p>Wherever you mount your node, plan to have to update the firmware at least once a year, perhaps more often.&lt;/p>
&lt;h2 id="updating-firmware" >Updating firmware
&lt;span>
&lt;a href="#updating-firmware" title="Direct Link to Updating firmware">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Currently there are two options to update your firmware:&lt;/p>
&lt;ol>
&lt;li>Connect to the device via a USB-C cable&lt;/li>
&lt;li>Connect to the device via Bluetooth and update OTA.&lt;/li>
&lt;/ol>
&lt;p>Option one isn&amp;rsquo;t very practical in a solar node: if you&amp;rsquo;re already keeping your node connected to your computer, why not just power it from there? Some builds install a Raspberry Pi in the enclosure and connect that to the node via USB-C, but Raspberry Pis are very power-hungry and not a good fit for a solar node. Neither will work well for this particular build.&lt;/p>
&lt;p>Option two is outlined &lt;a href="https://meshtastic.org/docs/getting-started/flashing-firmware/nrf52/ota/">in the Meshtastic docs here&lt;/a>. There are a few disclaimers to consider before trying this. First, as of the time of writing, this only works with the iOS app. And second, if the firmware update fails, you&amp;rsquo;re SOL. Your device isn&amp;rsquo;t bricked, but you will need to connect it to a computer to get the firmware back up and running.&lt;/p>
&lt;p>There currently are no other options. Even if you power your node via POE, there is no way to update the node via Ethernet. You may be able to power a Pi via POE and use option one from a more suitable location, however it is likely the Pi will not be able to survive summer heat in the enclosure. I am testing that this summer to see. Regardless, the Pi takes too much power for a solar node.&lt;/p>
&lt;p>As a result, at least for me, I am planning to retrieve my solar node from its mounting spot and update its firmware about once a year.&lt;/p>
&lt;h2 id="management" >Management
&lt;span>
&lt;a href="#management" title="Direct Link to Management">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If your node is easily within bluetooth range, you can manage it from your phone. However, if your solar node is installed somewhere where it&amp;rsquo;s inconvenient to connect via bluetooth (say, on the roof of a public building you don&amp;rsquo;t have regular access to), it&amp;rsquo;s recommended to set up an admin channel on your node so you can manage it via the mesh.&lt;/p>
&lt;p>The Meshtastic docs explain this &lt;a href="https://meshtastic.org/docs/configuration/remote-admin/">here&lt;/a>.&lt;/p>
&lt;h2 id="other-best-practices-for-unattended-nodes" >Other best practices for unattended nodes
&lt;span>
&lt;a href="#other-best-practices-for-unattended-nodes" title="Direct Link to Other best practices for unattended nodes">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If this device is outside the range of bluetooth and you won&amp;rsquo;t be able to regularly check DMs, it&amp;rsquo;s recommended that you make sure a casual mesh user will be able to figure out how to contact you. For example, if the node is your roof node and you also have a handheld mobile node, you might want to make the long name &amp;ldquo;JS Base Station&amp;rdquo; and the mobile node&amp;rsquo;s long name &amp;ldquo;JS Mobile&amp;rdquo; so users can try to contact you on the mobile node if you don&amp;rsquo;t respond to the base station. If you have a personal domain or an identifiable username, you could put the URL or your handle in your long name. A recent version of the Meshtastic firmware (2.6.8) allows you to designate your node as &amp;ldquo;unmessagable&amp;rdquo;. This is located in the User section of the settings.&lt;/p>
&lt;p>In Philly, all of our phillymesh.net nodes are named as such! This solar node is phillymesh.net-08. We also add secondary and tertiary management keys of other members so that if one member is out of town or unable to reach the mesh, the nodes can be administered by other trusted members.&lt;/p>
&lt;p>All of these best practices make the mesh a friendlier place!&lt;/p>
&lt;h2 id="putting-all-the-pieces-together" >Putting all the pieces together
&lt;span>
&lt;a href="#putting-all-the-pieces-together" title="Direct Link to Putting all the pieces together">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The WisBlock board has a spot in the top left of the enclosure where it screws into the backplate. I printed a small plate to hold my two battery holders together, and they fit snugly at the bottom of the enclosure. They fit so snugly that duct tape might also work. I don&amp;rsquo;t think that more than two batteries will fit inside this enclosure, so if you want more buy a bigger enclosure.&lt;/p>
&lt;p>When soldering the battery holders together, you want them to be in parallel. Some battery holders on Amazon don&amp;rsquo;t specify whether they&amp;rsquo;re in series or parallel. It&amp;rsquo;s worth checking the voltage with a multimeter before connecting to your WisBlock, as your WisBlock will let out magic smoke if you connect too high a voltage. The voltage should be around 3.7V (if it&amp;rsquo;s closer to 7.4V, that means the batteries are in series and you do &lt;em>not&lt;/em> want that).&lt;/p>
&lt;p>You battery holder will likely not come with the correct JST connector for the WisBlock board. Even if you buy a battery with JST connectors, they&amp;rsquo;re usually smaller than the correct size. Also, very important to note: the WisBlock battery connections are &lt;em>reversed&lt;/em> from the standard (the solar connectors are normal). Rak claims &amp;ldquo;there is no standard&amp;rdquo;, but considering all the JST connectors I order on Amazon are the opposite of Rak&amp;rsquo;s choice, I disagree. Check the connectors you buy! I had to solder the red lead to the black lead and the reverse to make the connector attach properly, which continues to confuse me every time I open the enclosure. To reduce confusion, I wrote in sharpie on the interior of my enclosure which color is positive and which is negative. You &lt;em>will&lt;/em> kill your board if you reverse the connectors.&lt;/p>
&lt;a href="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/rak-voltage-connectors.png">&lt;img src="https://phillymesh.net/images/uploads/2025-05-14-medium-priced-solar-node/rak-voltage-connectors_hu_6940fbac8ec8141e.webp" alt="Voltage and connector diagram from the Meshtastic docs" width="80%">
&lt;/a>&lt;p>&lt;em>Source: &lt;a href="https://meshtastic.org/docs/hardware/devices/rak-wireless/wisblock/base-board/">https://meshtastic.org/docs/hardware/devices/rak-wireless/wisblock/base-board/&lt;/a>&lt;/em>&lt;/p>
&lt;h2 id="update-6212025" >Update 6/21/2025
&lt;span>
&lt;a href="#update-6212025" title="Direct Link to Update 6/21/2025">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I&amp;rsquo;ve had this node outside for about a month and each time I&amp;rsquo;ve opened it up I&amp;rsquo;ve noticed water inside the supposedly sealed node. This is likely due to humidity, Philly is very humid. I plan to add a weep valve to the node before installing on the roof. I will test for a while and then update the page again with more details.&lt;/p>
&lt;h2 id="happy-meshing" >Happy Meshing!
&lt;span>
&lt;a href="#happy-meshing" title="Direct Link to Happy Meshing!">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2></description></item><item><title>MQTT Bridge Setup</title><link>https://phillymesh.net/2025/03/24/mqtt-bridge-setup/</link><pubDate>Mon, 24 Mar 2025 00:00:02 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2025/03/24/mqtt-bridge-setup/</guid><description>&lt;p>In August 2024 Meshtastic made changes to their official MQTT server due to potential safety issues of third parties tracking and storing user location data. While one of the main Meshtastic node mapping websites &lt;a href="https://meshmap.net/">meshmap.net&lt;/a> continues to rely on the official MQTT server, another popular site &lt;a href="https://meshtastic.liamcottle.net/">meshtastic.liamcottle.net&lt;/a> now runs their own separate MQTT server.&lt;/p>
&lt;p>While MQTT can be leveraged to connect Meshtastic nodes to one another over-the-Internet to bridge separated networks or isolated nodes, many people instead use this feature specifically for contributing to node maps so others can see what nodes may be operating in their area. As already outlined, there are now two separate MQTT servers for node maps. However, the Meshtastic application only allows one MQTT server to be configured per node, which requires the user to make a choice of which one they will use and ultimately which site they will not contribute to.&lt;/p>
&lt;p>Luckily, there is another approach that can be used to reliably send data to multiple MQTT servers: creating an MQTT bridge. This bridge can act as an intermediary, allowing Meshtastic nodes to send it data which is then forwarded to other servers.&lt;/p>
&lt;p>Here we can see how to set up a server that feeds to both &lt;code>mqtt.meshtastic.org&lt;/code> and &lt;code>mqtt.meshtastic.liamcottle.net&lt;/code>.&lt;/p>
&lt;h2 id="installation--base-config" >Installation &amp;amp; Base Config
&lt;span>
&lt;a href="#installation--base-config" title="Direct Link to Installation &amp;amp; Base Config">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>This guide assumes a Debian Linux system with a non-root, &lt;code>sudo&lt;/code> user.&lt;/p>
&lt;p>First, we will install &lt;code>mosquitto&lt;/code> as our MQTT server of choice:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo apt install mosquitto
&lt;/code>&lt;/pre>&lt;p>Now we will add the initial configuration:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo cat /etc/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
allow_anonymous false
listener 1883 0.0.0.0
pid_file /run/mosquitto/mosquitto.pid
persistence true
persistence_file mosquitto.db
persistence_location /var/lib/mosquitto/
# Uncomment for logging
# log_dest file /var/log/mosquitto/mosquitto.log
# log_type all
include_dir /etc/mosquitto/conf.d
password_file /etc/mosquitto/pwfile
&lt;/code>&lt;/pre>&lt;p>Now we will generate a password for the &lt;code>phillymesh&lt;/code> user to authenticate with:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo touch /etc/mosquitto/pwfile
$ sudo mosquitto_passwd -c /etc/mosquitto/pwfile phillymesh
&lt;/code>&lt;/pre>&lt;h2 id="adding-bridges" >Adding Bridges
&lt;span>
&lt;a href="#adding-bridges" title="Direct Link to Adding Bridges">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Additional configuration can be added to &lt;code>/etc/mosquitto/conf.d/&lt;/code>, so let&amp;rsquo;s create a file for each of our bridges:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo cat /etc/mosquitto/conf.d/mqtt.meshtastic.org.conf
connection mqtt_meshtastic.org
address mqtt.meshtastic.org:1883
# Username and password for the upstream server
remote_username meshdev
remote_password large4cats
# MQTT version to use
bridge_protocol_version mqttv311
# Forward all traffic from msh/*/2/map/ to the remote server
topic msh/+/2/map/# out 0
topic msh/# out 0
# Enable encryption
use_identity_as_username false
bridge_insecure true
# Bridge settings to manage the connection
cleansession true
notifications false
start_type automatic
try_private true
restart_timeout 10
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code>$ sudo cat /etc/mosquitto/conf.d/mqtt.meshtastic.liamcottle.net.conf
connection mqtt_meshtastic_liamcottle_net
address mqtt.meshtastic.liamcottle.net:1883
# Username and password for the upstream server
remote_username uplink
remote_password uplink
# MQTT version to use
bridge_protocol_version mqttv311
# Forward all traffic from msh/*/2/map/ to the remote server
topic msh/+/2/map/# out 0
topic msh/# out 0
# Enable encryption
use_identity_as_username false
bridge_insecure true
# Bridge settings to manage the connection
cleansession true
notifications false
start_type automatic
try_private true
restart_timeout 10
&lt;/code>&lt;/pre>&lt;h2 id="finishing-touches" >Finishing Touches
&lt;span>
&lt;a href="#finishing-touches" title="Direct Link to Finishing Touches">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;code>mosquitto&lt;/code> leverages &lt;code>systemd&lt;/code> to run as a service, so let&amp;rsquo;s start it up:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo systemctl enable --now
&lt;/code>&lt;/pre>&lt;p>Make sure that port &lt;code>1883&lt;/code> is open in the firewall for client connections:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo iptables -L | grep 1883
ACCEPT tcp -- anywhere anywhere tcp dpt:1883
&lt;/code>&lt;/pre>&lt;h2 id="client-configuration" >Client Configuration
&lt;span>
&lt;a href="#client-configuration" title="Direct Link to Client Configuration">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>We will assume that the Meshtastic node is connected to the Internet already via WiFi/ethernet.&lt;/p>
&lt;p>Client configuration can be set as follows for &lt;strong>MQTT&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>MQTT enabled: &lt;em>on&lt;/em>&lt;/li>
&lt;li>Address: IP or FQDN of your server&lt;/li>
&lt;li>Username: Username you defined&lt;/li>
&lt;li>Password: Password you defined&lt;/li>
&lt;li>Encryption enabled: &lt;em>on&lt;/em>&lt;/li>
&lt;li>JSON output enabled: &lt;em>off&lt;/em>&lt;/li>
&lt;li>TLS enabled: &lt;em>off&lt;/em>&lt;/li>
&lt;li>Root topic: &lt;em>msh/country/state&lt;/em> (Needs to be specific for &lt;code>mqtt.meshtastic.org&lt;/code>, for example: &lt;em>msh/US/PA&lt;/em>)&lt;/li>
&lt;li>Proxy to client enabled: &lt;em>off&lt;/em>&lt;/li>
&lt;li>Map Reporting: &lt;em>on&lt;/em>&lt;/li>
&lt;li>Precise location &lt;em>off&lt;/em> and minimum of &lt;em>1194 ft&lt;/em> to comply with &lt;code>mqtt.meshtastic.org&lt;/code>&lt;/li>
&lt;li>Map reporting interval (seconds): &lt;em>900&lt;/em>&lt;/li>
&lt;/ul>
&lt;p>Client configuration can be set as follows for &lt;strong>Channels &amp;gt; LongFast&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Uplink enabled: &lt;em>on&lt;/em>&lt;/li>
&lt;li>Downlink enabled: &lt;em>off&lt;/em>&lt;/li>
&lt;li>Position enabled: &lt;em>on&lt;/em>&lt;/li>
&lt;li>Precise location &lt;em>off&lt;/em> and minimum of &lt;em>1194 ft&lt;/em> to comply with &lt;code>mqtt.meshtastic.org&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="sources" >Sources
&lt;span>
&lt;a href="#sources" title="Direct Link to Sources">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.reddit.com/r/meshtastic/comments/1f04xdu/is_it_possible_to_connect_to_two_mqtt_servers_at/">https://www.reddit.com/r/meshtastic/comments/1f04xdu/is_it_possible_to_connect_to_two_mqtt_servers_at/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://cedalo.com/blog/mosquitto-bridge-configuration/#Bridging_multiple_brokers">https://cedalo.com/blog/mosquitto-bridge-configuration/#Bridging_multiple_brokers&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://adrelien.com/blog/how-to-host-your-own-mqtt-for-your-meshtastic-nodes/">https://adrelien.com/blog/how-to-host-your-own-mqtt-for-your-meshtastic-nodes/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://meshtastic.org/docs/configuration/module/mqtt/#connect-to-the-default-public-server">https://meshtastic.org/docs/configuration/module/mqtt/#connect-to-the-default-public-server&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.reddit.com/r/meshtastic/comments/1cneou7/deleted_by_user/">https://www.reddit.com/r/meshtastic/comments/1cneou7/deleted_by_user/&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Station G2 Node Installation</title><link>https://phillymesh.net/2025/03/24/station-g2-node-installation/</link><pubDate>Mon, 24 Mar 2025 00:00:01 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2025/03/24/station-g2-node-installation/</guid><description>&lt;p>Last year I documented the process of upgrading the PM03 Meshtastic node to use a Station G2 and outdoor-rated 5.8 dBi antenna (though it was installed indoors).&lt;/p>
&lt;p>The hardware used for this installation is:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://shop.uniteng.com/product/meshtastic-mesh-device-station-edition/">Station G2&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://store.rokland.com/products/5-8-dbi-n-male-omni-outdoor-915-mhz-antenna-large-profile-32-height-for-helium-rak-miner-2-nebra-indoor-bobcat?srsltid=AfmBOopSqi63aAtLLUefZoacu5dKMQpltDRCYIgll_Tej2sz8fP8w7tm">Rokland 5.8 dBi Outdoor Antenna&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.amazon.com/gp/aw/d/B0D7WBM1DF">Antenna Mount Bracket&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.amazon.com/dp/B07DC2B295">SMA Antenna Adapter N-Type to SMA&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.amazon.com/Anker-Charger-2-Pack-Foldable-Samsung/dp/B0CPDMQW5B">Anker USB C Charger with USB C Cable, 20W (2-pack)&lt;/a>&lt;/li>
&lt;/ul>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/TDg8m4Wa1so?si=EXf2z38juwSFPpPn" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe></description></item><item><title>Installing Yggdrasil – A Toy Implementation of an Encrypted IPv6 Network</title><link>https://phillymesh.net/2018/01/05/installing-yggdrasil-a-toy-implementation-of-an-encrypted-ipv6-network/</link><pubDate>Fri, 05 Jan 2018 14:46:04 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2018/01/05/installing-yggdrasil-a-toy-implementation-of-an-encrypted-ipv6-network/</guid><description>&lt;p>&lt;em>&lt;strong>2018-08-29 Update: This tutorial is now very out of date. The Yggdrasil team now maintains great installation guides &lt;a href="https://yggdrasil-network.github.io/platforms.html">here&lt;/a>.&lt;/strong>&lt;/em>&lt;/p>
&lt;p>At Philly Mesh, we like to play around with pieces of technology that aren&amp;rsquo;t directly related to our core software stack. One such piece of software is &lt;a href="https://github.com/Arceliar/yggdrasil-go">Yggdrasil&lt;/a>, an encrypted IPv6 networking implementation developed by &lt;a href="https://github.com/Arceliar">Arceliar&lt;/a>. Yggdrasil borrows many ideas from &lt;a href="https://github.com/cjdelisle/cjdns">cjdns&lt;/a>, but was primarily written to test a new routing scheme developed by Arceliar. While it is not production-ready software, Yggdrasil is an interesting foray into encrypted networking and fun to experiment with.&lt;/p>
&lt;p>For this installation guide, we assume a Debian Stretch (or similar) Linux system with a non-root, sudo user.&lt;/p>
&lt;p>First, we need to make sure we have a recent version of &lt;code>go&lt;/code>. We can check our version using the following command:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ go --version
go version go1.9.2 linux/amd64
&lt;/code>&lt;/pre>&lt;p>Yggdrasil is built with Go 1.9. At the time of writing, Debian Stretch only comes with Go 1.3. If you need to install a more recent version of Go, you can do so manually. Below is an example installing Go 1.9.2 for the amd64 architecture using a download link from &lt;a href="https://golang.org/dl/">https://golang.org/dl/&lt;/a>:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ sudo apt-get remove golang
$ cd /usr/local
$ sudo wget https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-amd64.tar.gz
$ sudo tar -xzf go1.9.2.linux-amd64.tar.gz
$ sudo ln -s /usr/local/go/bin/go /usr/local/bin/go
&lt;/code>&lt;/pre>&lt;p>Now we will set up some environment variables to use Go:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ mkdir ~/go
$ export GOROOT=/usr/local/go
&lt;/code>&lt;/pre>&lt;p>Now we are ready to install Yggdrasil:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ cd ~
$ git clone https://github.com/Arceliar/yggdrasil-go.git
$ cd yggdrasil-go/
$ ./build
&lt;/code>&lt;/pre>&lt;p>If all goes well, Yggdrasil will have built successfully with no errors. Now we are ready to generate a config file:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ ./yggdrasil --genconf &amp;gt; conf.json
&lt;/code>&lt;/pre>&lt;p>The config file is pretty basic and allows for some customization:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ cat conf.json
{
&amp;#34;Listen&amp;#34;: &amp;#34;[::]:0&amp;#34;,
&amp;#34;Peers&amp;#34;: [],
&amp;#34;BoxPub&amp;#34;: &amp;#34;46d18cbcfa0d510fcd226f323efe279525c50eb15db925d4879ee675b99b0724&amp;#34;,
&amp;#34;BoxPriv&amp;#34;: &amp;#34;727213ecb3caf601ee49596fa77469674bed177f10d8607ee76ec1f35e942310&amp;#34;,
&amp;#34;SigPub&amp;#34;: &amp;#34;08565493e805e905dbcc22cdaa7e60bd6cb6fc1df21d1b807b46f6285f8b86fd&amp;#34;,
&amp;#34;SigPriv&amp;#34;: &amp;#34;4173f91e08ab2b6f7c5ae96cf9d61f7ac30b36be7a5eff298e00e0d08f6f5c9608565493e805e905dbcc22cdaa7e60bd6cb6fc1df21d1b807b46f6285f8b86fd&amp;#34;,
&amp;#34;Multicast&amp;#34;: true
}
&lt;/code>&lt;/pre>&lt;p>If you want Yggdrasil to listen on a static port, you can change the &lt;code>Listen&lt;/code> attribute to use an IP and/or port of your choosing like &lt;code>&amp;quot;12.34.57.78:1234&amp;quot;&lt;/code>. You can add entries to the &lt;code>Peers&lt;/code> attribute by listing them as strings (IP:PORT) in the array (comma-separated). The &lt;code>Multicast&lt;/code> attribute is currently set to &lt;code>true&lt;/code>, but you could set this to &lt;code>false&lt;/code> if you didn&amp;rsquo;t want to auto-peer for some reason.&lt;/p>
&lt;p>Here is a sample config that listens on port &lt;code>1234&lt;/code> on all interfaces and connects to a peer at &lt;code>12.34.57.78:1234&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>cat conf.json
{
&amp;#34;Listen&amp;#34;: &amp;#34;[::]:1234&amp;#34;,
&amp;#34;Peers&amp;#34;: [&amp;#34;12.34.57.78:1234&amp;#34;],
&amp;#34;BoxPub&amp;#34;: &amp;#34;46d18cbcfa0d510fcd226f323efe279525c50eb15db925d4879ee675b99b0724&amp;#34;,
&amp;#34;BoxPriv&amp;#34;: &amp;#34;727213ecb3caf601ee49596fa77469674bed177f10d8607ee76ec1f35e942310&amp;#34;,
&amp;#34;SigPub&amp;#34;: &amp;#34;08565493e805e905dbcc22cdaa7e60bd6cb6fc1df21d1b807b46f6285f8b86fd&amp;#34;,
&amp;#34;SigPriv&amp;#34;: &amp;#34;4173f91e08ab2b6f7c5ae96cf9d61f7ac30b36be7a5eff298e00e0d08f6f5c9608565493e805e905dbcc22cdaa7e60bd6cb6fc1df21d1b807b46f6285f8b86fd&amp;#34;,
&amp;#34;Multicast&amp;#34;: true
}
&lt;/code>&lt;/pre>&lt;p>Now, we can start Yggdrasil in the background:&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo ./yggdrasil --useconf &amp;lt; conf.json &amp;amp;
&lt;/code>&lt;/pre>&lt;p>You should now have a &lt;code>tun&lt;/code> interface up for your Yggdrasil node:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ ip a
43: tun1: &amp;lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP&amp;gt; mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet6 fd00:4645:d147:7c16:98f2:20ea:d0ba:7174/8 scope global
valid_lft forever preferred_lft forever
&lt;/code>&lt;/pre>&lt;p>Now, you can ping other Yggdrasil nodes on the network:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ ping6 -c4 fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e
PING fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e(fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e) 56 data bytes
64 bytes from fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e: icmp_seq=1 ttl=64 time=14.4 ms
64 bytes from fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e: icmp_seq=2 ttl=64 time=12.6 ms
64 bytes from fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e: icmp_seq=3 ttl=64 time=15.1 ms
64 bytes from fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e: icmp_seq=4 ttl=64 time=12.9 ms
--- fd1f:dd73:7cdb:773b:a924:7ec0:800b:221e ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 12.673/13.783/15.105/1.017 ms
&lt;/code>&lt;/pre>&lt;p>Further documentation for Yggdrasil is available &lt;a href="https://github.com/Arceliar/yggdrasil-go/blob/master/doc/README.md">here&lt;/a>, and a whitepaper draft is available &lt;a href="https://github.com/Arceliar/yggdrasil-go/blob/master/doc/Whitepaper.md">here&lt;/a>.&lt;/p></description></item><item><title>Building DIY Community Mesh Networks (2600 Article)</title><link>https://phillymesh.net/2016/12/21/building-diy-community-mesh-networks-2600-article/</link><pubDate>Wed, 21 Dec 2016 23:08:09 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/12/21/building-diy-community-mesh-networks-2600-article/</guid><description>&lt;p>&lt;em>Now that the article has been printed in &lt;a href="https://www.amazon.com/2600-Magazine-Hacker-Quarterly-ebook/dp/B01M1NJI3U/2600magazi-20">2600 magazine, Volume 33, Issue 3&lt;/a> (2016-10-10), I’m able to republish it on the web. The article below is my submission to 2600 with some slight formatting changes for hyperlinks.&lt;/em>&lt;/p>
&lt;h1 id="building-diy-community-mesh-networks" >Building DIY Community Mesh Networks
&lt;span>
&lt;a href="#building-diy-community-mesh-networks" title="Direct Link to Building DIY Community Mesh Networks">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>By Mike Dank&lt;br>
&lt;a href="mailto:Famicoman@gmail.com">Famicoman@gmail.com&lt;/a>&lt;/p>
&lt;p>Today, we are faced with issues regarding our access to the Internet, as well as our freedoms on it. As governmental bodies fight to gain more control and influence over the flow of our information, some choose to look for alternatives to the traditional Internet and build their own networks as they see fit. These community networks can pop up in dense urban areas, remote locations with limited Internet access, and everywhere in between.Whether you are politically fueled by issues of net neutrality, privacy, and censorship, fed up with an oligarchy of Internet service providers, or just like tinkering with hardware, a wireless mesh network (or “meshnet”) can be an invaluable project to work on. Numerous groups and organizations have popped up all over the world, creating robust mesh networks and refining the technologies that make them possible. While the overall task of building a wireless mesh network for your community may seem daunting, it is easy to get started and scale up as needed.&lt;/p>
&lt;h2 id="what-are-mesh-networks" >What Are Mesh Networks?
&lt;span>
&lt;a href="#what-are-mesh-networks" title="Direct Link to What Are Mesh Networks?">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Think about your existing home network. Most people have a centralized router with several devices hooked up to it. Each device communicates directly with the central router and relies on it to relay traffic to and from other devices. This is called a hub/spoke topology, and you’ll notice that it has a single point of failure. With a mesh topology, many different routers (referred to as nodes) relay traffic to one another on the path to the target machine. Nodes in this network can be set up ad-hoc; if one node goes down, traffic can easily be rerouted to another node. If new nodes come online, they can be seamlessly integrated into the network. In the wireless space, distant users can be connected together with the help of directional antennas and share network access. As more nodes join a network, service only improves as various gaps are filled in and connections are made more redundant. Ultimately, a network is created that is both decentralized and distributed. There is no single point of failure, making it difficult to shut down.&lt;/p>
&lt;p>When creating mesh networks, we are mostly concerned with how devices are routing to and linking with one another. This means that most services you are used to running like HTTP or IRC daemons should be able to operate without a hitch. Additionally, you are presented with the choice of whether or not to create a darknet (completely separated from the Internet) or host exit nodes to allow your traffic out of the mesh.&lt;/p>
&lt;h2 id="existing-community-mesh-networking-projects" >Existing Community Mesh Networking Projects
&lt;span>
&lt;a href="#existing-community-mesh-networking-projects" title="Direct Link to Existing Community Mesh Networking Projects">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>One of the most well-known grassroots community mesh networks is &lt;a href="https://freifunk.net">Freifunk&lt;/a>, based out of Germany, encompassing over 150 local communities with over 25,000 access points. &lt;a href="https://guifi.net">Guifi.net&lt;/a> based in Spain, boasts over 27,000 nodes spanning over 36,000 km. In North America we see projects like &lt;a href="http://hyperboria.net">Hyperboria&lt;/a> which connect smaller mesh networking communities together such as &lt;a href="https://www.seattlemesh.net">Seattle Meshnet&lt;/a>, &lt;a href="https://nycmesh.net">NYC Mesh&lt;/a>, and&lt;a href="https://tomesh.net">Toronto Mesh&lt;/a>. We also see standalone projects like &lt;a href="http://www.pittmesh.net">PittMesh&lt;/a> in Pittsburgh, &lt;a href="http://gowasabi.net">WasabiNet&lt;/a> in St. Louis, and &lt;a href="https://sudoroom.org">People’s Open Network&lt;/a> in Oakland, California.&lt;/p>
&lt;p>While each of these mesh networks may run different software and have a different base of users, they all serve an important purpose within their communities. Additionally, many of these networks consistently give back to the greater mesh networking community and choose to share information about their hardware configurations, software stacks, and infrastructure. This only benefits those who want to start their own networks or improve existing ones.&lt;/p>
&lt;h2 id="picking-your-hardware--os" >Picking Your Hardware &amp;amp; OS
&lt;span>
&lt;a href="#picking-your-hardware--os" title="Direct Link to Picking Your Hardware &amp;amp; OS">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>When I was first starting out with &lt;a href="http://mesh.philly2600.net">Philly Mesh&lt;/a>, I was faced with the issue of acquiring hardware on a shoestring budget. Many will tell you that the best hardware is low-power computers with dedicated wireless cards. This however can incur a cost of several hundred dollars per node. Alternatively, many groups make use of SOHO routers purchased off-the-shelf, flashed with custom firmware. The most popular firmware used here is OpenWRT, an open source alternative that supports a large majority of consumer routers. If you have a relatively modern router in your house, there is a good chance it is already supported (if you are buying specifically for meshing, consider consulting &lt;a href="https://wiki.openwrt.org">OpenWRT’s wiki&lt;/a> for compatibility. Based on Linux, OpenWRT really shines with its packaging system, allowing you to easily install and configure packages of networking software across several routers regardless of most hardware differences between nodes. With only a few commands, you can have mesh packages installed and ready for production.&lt;/p>
&lt;p>Other groups are turning towards credit-card-sized computers like the BeagleBone Black and Raspberry Pi, using multiple USB WiFi dongles to perform over-the-air communication. Here, we have many more options for an operating system as many prefer to use a flavor of Linux or BSD, though most of these platforms also have OpenWRT support.&lt;/p>
&lt;p>There are no specific wrong answers here when choosing your hardware. Some platforms may be better suited to different scenarios. For the sake of getting started, spec’ing out some inexpensive routers (aim for something with at least two radios, 8MB of flash) or repurposing some Raspberry Pis is perfectly adequate and will help you learn the fundamental concepts of mesh networking as well develop a working prototype that can be upgraded or expanded as needed (hooray for portable configurations). Make sure you consider options like indoor vs outdoor use, 2.4 GHz vs. 5 GHz band, etc.&lt;/p>
&lt;h2 id="meshing-software" >Meshing Software
&lt;span>
&lt;a href="#meshing-software" title="Direct Link to Meshing Software">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>You have OpenWRT or another operating system installed, but how can you mesh your router with others wirelessly? Now, you have to pick out some software that will allow you to facilitate a mesh network. The first packages that you need to look at are for what is called the data link layer of the OSI model of computer networking (or OSI layer 2). Software here establishes the protocol that controls how your packets get transferred from node A to node B. Common software in this space is &lt;a href="https://www.open-mesh.org/projects/batman-adv/wiki">batman-adv&lt;/a> (not to be confused with the layer 3 &lt;a href="https://www.open-mesh.org/projects/batmand/wiki">B.A.T.M.A.N. daemon&lt;/a>), and &lt;a href="https://www.open80211s.org/">open80211s&lt;/a>, which are available for most operating systems. Each of these pieces of software have their own strengths and weaknesses; it might be best to install each package on a pair of routers and see which one works best for you. There is currently a lot of praise for batman-adv as it has been integrated into the mainline Linux tree and was developed by Freifunk to use within their own mesh network.&lt;/p>
&lt;p>Revisiting the OSI model again, you will also need some software to work at the network layer (OSI layer 3). This will control your IP routing, allowing for each node to compute where to send traffic next on its forwarding path to the final destination on the network. There are many software packages here such as &lt;a href="http://www.olsr.org/mediawiki/index.php/Main_Page">OLSR&lt;/a> (Optimized Link State Routing), B.A.T.M.A.N (Better Approach To Mobile Adhoc Networking), &lt;a href="https://www.irif.fr/~jch//software/babel/">Babel&lt;/a>, &lt;a href="https://github.com/bmx-routing/bmx6">BMX6&lt;/a>, and &lt;a href="https://github.com/cjdelisle/cjdns">CJDNS&lt;/a> (Caleb James Delisle’s Networking Suite). Each of these addresses the task in its own way, making use of a proactive, reactive, or hybrid approach to determine routing. B.A.T.M.A.N. and OLSR are popular here, both developed by Freifunk. Though B.A.T.M.A.N. was designed as a replacement for OLSR, each is actively used and OLSR is highly utilized in the Commotion mesh networking firmware (a router firmware based off of OpenWRT).&lt;/p>
&lt;p>For my needs, I settled on CJDNS which boasts IPv6 addressing, secure communications, and some flexibility in auto-peering with local nodes. Additionally, CJDNS is agnostic to how its host connects to peers. It will work whether you want to connect to another access point over batman-adv, or even tunnel over the existing Internet (similar to Tor or a VPN)! This is useful for mesh networks starting out that may have nodes too distant to connect wirelessly until more nodes are set up in-between. This gives you a chance to lay infrastructure sooner rather than later, and simply swap-out for wireless linking when possible. You also get the interesting ability to link multiple meshnets together that may not be geographically close.&lt;/p>
&lt;h2 id="putting-it-together" >Putting It Together
&lt;span>
&lt;a href="#putting-it-together" title="Direct Link to Putting It Together">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>At this point, you should have at least one node (though you will probably want two for testing) running the software stack that you have settled on. With wireless communications, you can generally say that the higher you place the antenna, the better. Many community mesh groups try to establish nodes on top of buildings with roof access, making use of both directional antennas (to connect to distant nodes within the line of sight) as well as omnidirectional antennas to connect to nearby nodes and/or peers. By arranging several distant nodes to connect to one another via line of sight, you can establish a networking backbone for your meshnet that other nodes in the city can easily connect to and branch off of.&lt;/p>
&lt;h2 id="gathering-interest" >Gathering Interest
&lt;span>
&lt;a href="#gathering-interest" title="Direct Link to Gathering Interest">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Mesh networks can only grow so much when you are working by yourself. At some point, you are going to need help finding homes for more nodes and expanding the network. You can easily start with friends and family – see if they are willing to host a node (they probably wouldn’t even notice it after a while). Otherwise, you will want to meet with like-minded people who can help configure hardware and software, or plan out the infrastructure. You can start small online by setting up a website with a mission statement and making a post or two on Reddit (&lt;a href="https://www.reddit.com/r/darknetplan/">/r/darknetplan&lt;/a> in particular) or Twitter. Do you have hackerspaces in your area? Linux or amateur radio groups? A 2600 meeting you frequent? All of these are great resources to meet people face-to-face and grow your network one node at a time.&lt;/p>
&lt;h2 id="conclusion" >Conclusion
&lt;span>
&lt;a href="#conclusion" title="Direct Link to Conclusion">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Starting a mesh network is easier than many think, and is an incredible way to learn about networking, Linux, micro platforms, embedded systems, and wireless communication. With only a few off-the-shelf devices, one can get their own working network set up and scale it to accommodate more users. Community-run mesh networks not only aid in helping those fed up with or persecuted by traditional network providers, but also those who want to construct, experiment, and tinker. With mesh networks, we can build our own future of communication and free the network for everyone.&lt;/p></description></item><item><title>CJDNS on OpenWRT – Part 3: Installing &amp; Configuring CJDNS</title><link>https://phillymesh.net/2016/04/21/cjdns-on-openwrt-part-3-installing-configuring-cjdns/</link><pubDate>Thu, 21 Apr 2016 21:49:08 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/04/21/cjdns-on-openwrt-part-3-installing-configuring-cjdns/</guid><description>&lt;p>Now that we have OpenWRT installed and ensured that we have enough space to experiment and install packages, we can proceed to install and configure cjdns.&lt;/p>
&lt;p>I have opted to install a GUI package to allow for easier configuration (though I also wanted to see what it had to offer over editing configuration files). The package used here is &lt;strong>luci-app-cjdns&lt;/strong>, relying on the LuCI interface that comes default in most OpenWRT images. If you want to install cjdns without the GUI or do not use LuCI, you can install the regular &lt;strong>cjdns&lt;/strong> package. &lt;em>Note: The standard cjdns package was left out of OpenWRT 15.05.1, but should be in the older 15.05 image. The luci-app-cjdns package should be available in both versions, so you won’t have any issue with the remainder of this guide.&lt;/em>&lt;/p>
&lt;p>Now we are ready to install cjdns for LuCI. SSH into the access point and run the following command to update and install luci-app-cjdns.&lt;/p>
&lt;pre tabindex="0">&lt;code>opkg update &amp;amp;&amp;amp; opkg install luci-app-cjdns
&lt;/code>&lt;/pre>&lt;p>After this finishes, leave the SSH session open and then load up the OpenWRT web console in a browser and log in. By default, this interface can be reached via http://192.168.1.1. Now that we’re in the console, select &lt;strong>cjdns&lt;/strong> from the &lt;em>Services&lt;/em> dropdown on the top menu. An &lt;em>Overview&lt;/em> page for cjdns will load (and look rather empty). Now, click the &lt;strong>Peers&lt;/strong> sub-tab link near the top of this page.&lt;/p>
&lt;p>Now, we can enter in the peering information for any number of peers to connect to. You will likely want to populate the &lt;strong>Authorized Passwords&lt;/strong> and &lt;strong>Outgoing UDP Peers&lt;/strong> sections as I have below.&lt;/p>
&lt;figure>&lt;a href="https://phillymesh.net/images/uploads/2017/03/cjdns01_clean.png">&lt;img src="https://phillymesh.net/images/uploads/2017/03/cjdns01_clean-768x679.png"
alt="CJDNS Peers Tab">&lt;/a>&lt;figcaption>
&lt;p>CJDNS Peers Tab&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>When finished, press the &lt;strong>Save &amp;amp; Apply&lt;/strong> button to commit any changes and restart cjdns. These steps can be repeated to add as many peers as needed.&lt;/p>
&lt;p>Now, navigate back to the &lt;strong>Overview&lt;/strong> page by clicking on the &lt;strong>Overview&lt;/strong> sub-tab link.&lt;/p>
&lt;p>After loading, we should now have connection information about the configured peers as shown below.&lt;/p>
&lt;figure>&lt;a href="https://phillymesh.net/images/uploads/2017/03/cjdns02_clean.png">&lt;img src="https://phillymesh.net/images/uploads/2017/03/cjdns01_clean-768x679.png"
alt="CJDNS Overview Page">&lt;/a>&lt;figcaption>
&lt;p>CJDNS Overview Page&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>That’s all there is to it! Back in our SSH session, we can try pinging a machine on Hyperboria to confirm a connection:&lt;/p>
&lt;pre tabindex="0">&lt;code>ping6 h.peer0.famicoman.com
PING h.peer0.famicoman.com (fc9f:990d:2b0f:75ad:8783:5d59:7c84:520b): 56 data bytes
64 bytes from fc9f:990d:2b0f:75ad:8783:5d59:7c84:520b: seq=0 ttl=42 time=4072.631 ms
64 bytes from fc9f:990d:2b0f:75ad:8783:5d59:7c84:520b: seq=1 ttl=42 time=3800.924 ms
64 bytes from fc9f:990d:2b0f:75ad:8783:5d59:7c84:520b: seq=2 ttl=42 time=4594.193 ms
64 bytes from fc9f:990d:2b0f:75ad:8783:5d59:7c84:520b: seq=3 ttl=42 time=4329.846 ms
^C
--- h.peer0.famicoman.com ping statistics ---
9 packets transmitted, 4 packets received, 55% packet loss
round-trip min/avg/max = 3800.924/4199.398/4594.193 ms
&lt;/code>&lt;/pre>&lt;p>If all went as expected, you now have cjdns running on your OpenWRT router! This can be expanded in the future by copying an OpenWRT configuration onto several routers, and then linking them together wirelessly.&lt;/p></description></item><item><title>CJDNS on OpenWRT – Part 2: Configuring Extroot for More Storage</title><link>https://phillymesh.net/2016/04/11/cjdns-on-openwrt-part-2-configuring-extroot-for-more-storage/</link><pubDate>Mon, 11 Apr 2016 21:46:56 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/04/11/cjdns-on-openwrt-part-2-configuring-extroot-for-more-storage/</guid><description>&lt;p>If you have any low-memory OpenWRT device (4MB of flash) you will probably fill up any free space quickly after the initial OpenWRT install and need more room to grow. Luckily, you can transfer your root file system to a flash drive and boot off of it as long as your access point has a USB port.&lt;/p>
&lt;p>If you are following along with our Western Digital N600, you probably don’t need to do this. The N600 comes equipped with 12MB of built-in flash, more than enough to accommodate the software packages we will install in the future. If you have less than this or want to have a nice learning exercise, read on!&lt;/p>
&lt;p>You are going to need a Linux machine and a flash drive. The flash drive size shouldn’t matter too much. A lot of people run OpenWRT off of 8MB of internal flash, so any small drive should have plenty of room.&lt;/p>
&lt;p>On your Linux machine, plug in the flash drive (mine is a ~10 year old 64MB), and run &lt;em>dmesg&lt;/em> to get the kernel message buffer.&lt;/p>
&lt;pre tabindex="0">&lt;code>dmesg
&lt;/code>&lt;/pre>&lt;p>You should get a lot of output, but importantly at the end, we should see our flash drive being recognized:&lt;/p>
&lt;pre tabindex="0">&lt;code>[26913.782811] usb 1-1.4: new high-speed USB device number 4 using dwc_otg
[26913.883754] usb 1-1.4: New USB device found, idVendor=0457, idProduct=0151[26913.883779] usb 1-1.4: New USB device strings: Mfr=0, Product=2, SerialNumber=3
[26913.883796] usb 1-1.4: Product: USB Mass Storage Device
[26913.883812] usb 1-1.4: SerialNumber: 00000000004FDE
[26913.884913] usb-storage 1-1.4:1.0: USB Mass Storage device detected
[26913.887282] usb-storage 1-1.4:1.0: Quirks match for vid 0457 pid 0151: 80
[26913.887450] scsi host0: usb-storage 1-1.4:1.0
[26914.884185] scsi 0:0:0:0: Direct-Access Staples 0.00 PQ: 0 ANSI: 2
[26914.886688] sd 0:0:0:0: [sda] 124000 512-byte logical blocks: (63.4 MB/60.5 MiB)
[26914.887210] sd 0:0:0:0: [sda] Write Protect is off
[26914.887235] sd 0:0:0:0: [sda] Mode Sense: 00 00 00 00
[26914.887748] sd 0:0:0:0: [sda] Asking for cache data failed
[26914.887771] sd 0:0:0:0: [sda] Assuming drive cache: write through
[26914.916959] sda: sda1
[26914.920057] sd 0:0:0:0: [sda] Attached SCSI removable disk
[26914.922645] sd 0:0:0:0: Attached scsi generic sg0 type 0
&lt;/code>&lt;/pre>&lt;p>We see that our physical device is &lt;em>sda&lt;/em>, with one partition &lt;em>sda1&lt;/em>. Your drive/partition may be labeled differently depending on how many drives you have installed or plugged into your machine, and how many partitions your flash drive has. We can verify we are looking at our flash drive by listing via &lt;em>fdisk&lt;/em>.&lt;/p>
&lt;pre tabindex="0">&lt;code>fdisk -l /dev/sda
&lt;/code>&lt;/pre>&lt;p>You will get a lot of informative output about the device:&lt;/p>
&lt;pre tabindex="0">&lt;code>Disk /dev/sda: 63 MB, 63488000 bytes
16 heads, 32 sectors/track, 242 cylinders, total 124000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x91f72d24
Device Boot Start End Blocks Id System
/dev/sda1 * 32 123999 61984 b W95 FAT32
&lt;/code>&lt;/pre>&lt;p>Now we will go ahead and format the drive as ext4. First however, we need to create a partition by running the &lt;em>fdisk&lt;/em> command on the drive (without the -l option).&lt;/p>
&lt;pre tabindex="0">&lt;code>fdisk /dev/sda
&lt;/code>&lt;/pre>&lt;p>This is an interactive utility, so when prompted, enter &lt;i>d&lt;/i> to delete the current partition on the drive. Then enter &lt;em>n&amp;lt;&lt;/em> for a new partition (taking the defaults by pressing the return key). Finally, enter &lt;em>w&lt;/em> to apply the changes to the disk and exit.&lt;/p>
&lt;p>Now, we can make a file system on the partition we just created, formatting it as ext4:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkfs.ext4 /dev/sda1
&lt;/code>&lt;/pre>&lt;p>Afterwards we can list with &lt;em>fdisk&lt;/em> again to see our changes:&lt;/p>
&lt;pre tabindex="0">&lt;code>fdisk -l /dev/sda
Disk /dev/sda: 63 MB, 63488000 bytes
3 heads, 32 sectors/track, 1291 cylinders, total 124000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x91f72d24
Device Boot Start End Blocks Id System
/dev/sda1 2048 123999 60976 83 Linux
&lt;/code>&lt;/pre>&lt;p>You can now remove your USB drive from your Linux machine and plug it into your OpenWRT device.&lt;/p>
&lt;p>Next, we ssh into our OpenWRT device and login as root. We need to install a few utilities with &lt;em>opkg&lt;/em> before we can switch over the root filesystem.&lt;/p>
&lt;pre tabindex="0">&lt;code>opkg update &amp;amp;&amp;amp; opkg install block-mount kmod-fs-ext4 kmod-usb-storage fdisk nano
&lt;/code>&lt;/pre>&lt;p>Now we will run &lt;em>fdisk&lt;/em> to see that our drive is recognized:&lt;/p>
&lt;pre tabindex="0">&lt;code>root@OpenWrt:~# fdisk -l
Disk /dev/mtdblock0: 256 KiB, 262144 bytes, 512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock1: 64 KiB, 65536 bytes, 128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock2: 64 KiB, 65536 bytes, 128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock3: 64 KiB, 65536 bytes, 128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock4: 15.5 MiB, 16252928 bytes, 31744 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock5: 1.3 MiB, 1310720 bytes, 2560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock6: 14.3 MiB, 14942208 bytes, 29184 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock7: 12.1 MiB, 12648448 bytes, 24704 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock8: 64 KiB, 65536 bytes, 128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 60.6 MiB, 63488000 bytes, 124000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x91f72d24
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 123999 121952 59.6M 83 Linux
&lt;/code>&lt;/pre>&lt;p>My drive registers as /dev/sda1, and this is used through the commands below. Make sure you take note of yours and make the necessary changes when running additional commands.&lt;/p>
&lt;p>Next, we will copy our filesystem over and set the device to boot from the flash drive. If you are squeamish about making this change via a terminal, scroll down and view the sources referenced at the end of this tutorial. There is a way to perform this configuration using OpenWRT’s default graphical interface: LuCI. If you prefer to issue commands over ssh, read on.&lt;/p>
&lt;p>Now, we will actually mount the drive, and copy the root filesystem to it:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -
umount /tmp/cproot
&lt;/code>&lt;/pre>&lt;p>After we have moved the filesystem over, we can modify the &lt;em>fstab&lt;/em> with our editor of choice.&lt;/p>
&lt;pre tabindex="0">&lt;code>nano /etc/config/fstab
&lt;/code>&lt;/pre>&lt;p>Paste the following at the top the file and save it. This will use the flash drive as the primary filesystem and preserve this configuration even after reboot.&lt;/p>
&lt;pre tabindex="0">&lt;code>config mount
option device &amp;#39;/dev/sda1&amp;#39;
option target &amp;#39;/&amp;#39;
option fstype &amp;#39;ext4&amp;#39;
option enabled &amp;#39;1&amp;#39;
&lt;/code>&lt;/pre>&lt;p>Finally, we reboot the device by issuing the &lt;em>reboot&lt;/em> command:&lt;/p>
&lt;pre tabindex="0">&lt;code>reboot
&lt;/code>&lt;/pre>&lt;p>After the system comes back up, ssh into it once more and run the &lt;em>df&lt;/em> command.&lt;/p>
&lt;pre tabindex="0">&lt;code>df -h
&lt;/code>&lt;/pre>&lt;p>In the output, pay attention to the &lt;em>Size&lt;/em> column to make sure it matches up closely to your flash drive’s capacity to verify that you are actually running off of the flash drive.&lt;/p>
&lt;pre tabindex="0">&lt;code>Filesystem Size Used Available Use% Mounted on
rootfs 53.7M 9.7M 39.8M 20% /
/dev/root 2.3M 2.3M 0 100% /rom
tmpfs 61.6M 628.0K 61.0M 1% /tmp
/dev/sda1 53.7M 9.7M 39.8M 20% /
tmpfs 512.0K 0 512.0K 0% /dev
&lt;/code>&lt;/pre>&lt;p>That&amp;rsquo;s all there is to it! Now, you are booting directly off of the flash drive and have more room to install packages. Additionally, you may want to save an image of your drive for future use. You never know when you will be trying something out and need to restore from a backup!&lt;/p>
&lt;p>&lt;strong>Sources&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://samhobbs.co.uk/2013/11/more-space-for-packages-with-extroot-on-your-openwrt-router">https://samhobbs.co.uk/2013/11/more-space-for-packages-with-extroot-on-your-openwrt-router&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://blog.lincomatic.com/?p=1287">http://blog.lincomatic.com/?p=1287&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>CJDNS on OpenWRT – Part 1: Installing OpenWRT on the WD N600</title><link>https://phillymesh.net/2016/03/31/cjdns-on-openwrt-part-1-installing-openwrt-on-the-wd-n600/</link><pubDate>Thu, 31 Mar 2016 21:42:38 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/03/31/cjdns-on-openwrt-part-1-installing-openwrt-on-the-wd-n600/</guid><description>&lt;p>I was lucky enough to snag a &lt;a href="http://www.amazon.com/N600-Dual-Router-Wireless-Accelerate/dp/B007KZQM9G">Western Digital N600&lt;/a> router recently for $10 via Woot and have been working through the process of getting it configured with &lt;a href="http://openwrt.org/">OpenWRT&lt;/a> and cjdns.&lt;/p>
&lt;p>For $10, I didn’t think I was getting a whole lot, but these devices sport a popular Atheros chipset and are perfectly compatible with OpenWRT’s latest version (Chaos Calmer 15.05 at the time of writing). For the uninitiated, OpenWRT is an alternative firmware for routers that allows for an advanced set of features and more customization.&lt;/p>
&lt;figure>&lt;a href="https://phillymesh.net/images/uploads/2017/03/20160331_214547.jpg">&lt;img src="https://phillymesh.net/images/uploads/2017/03/20160331_214547.jpg"
alt="My N600, happily chugging away.">&lt;/a>&lt;figcaption>
&lt;p>My N600, happily chugging away.&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The first (and sometimes daunting) task in this process is to flash the firmware on to the device, but this is easy to accomplish with the help of the &lt;a href="https://wiki.openwrt.org/toh/wd/n600">OpenWRT Wiki page for the N600&lt;/a>.&lt;/p>
&lt;p>One issue I’ve found is that the page states that the web updater doesn’t work on most N600 devices and that it is preferable to use telnet. Being the console junkie I am, I tried the telnet method first but had no way to configure or enable it! I found I couldn’t use telnet but ultimately was able to flash via the web interface.&lt;/p>
&lt;p>Adapted from the wiki, here are the steps I took to flash my device. Any additions/modifications by me are in &lt;strong>bold&lt;/strong>:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>0) Turn on and configure the device. I couldn&amp;rsquo;t do anything until i completed the initial setup.&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Download the file openwrt-ar71xx-generic-mynet-n600-squashfs-factory.bin. &lt;strong>I pulled it down from &lt;a href="https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-mynet-n600-squashfs-factory.bin">https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-mynet-n600-squashfs-factory.bin&lt;/a>&lt;/strong>&lt;/li>
&lt;li>Configure your computers IP address to 192.168.1.10 and connect to a LAN port in the router.&lt;/li>
&lt;li>Turn the router off.&lt;/li>
&lt;li>Using a paperclip, press and hold the reset button on the bottom of the router and turn it on. Hold the reset button for at least 15 seconds. Wait until the power light on the front is slowly flashing on and off.&lt;/li>
&lt;li>On your computer, visit http://192.168.1.1 NOTE: You will not be able to ping this address.&lt;/li>
&lt;li>Upload the file openwrt-ar71xx-generic-mynet-n600-squashfs-factory.bin as downloaded earlier.&lt;/li>
&lt;li>The router will now flash OpenWRT. This will take a couple of minutes to achieve. You can ping 192.168.1.1 and watch for ping replies to see when your router has rebooted into OpenWRT.&lt;/li>
&lt;/ol>&lt;/blockquote>
&lt;p>That’s all there is to it. After OpenWRT boots for the first time, you&amp;rsquo;ll be able to configure it to work on your local network. At most,I suggest setting a root password!&lt;/p>
&lt;p>This process is pretty adaptable to other hardware, and the OpenWRT wiki is invaluable when it comes to specific steps to flash OpenWRT on any device you may have around. Don&amp;rsquo;t feel like you have to get an N600 because I did, a lot of hardware is supported (I would recommend something with two radios and 8MB of flash for maximum hackery)!&lt;/p>
&lt;p>This tutorial is just the first in a series where we will get cjdns configured on your OpenWRT router. The more meshing, the merrier!&lt;/p></description></item><item><title>Hyperboria 101 Article Published at N-O-D-E</title><link>https://phillymesh.net/2016/02/17/hyperboria-101-article-published-at-n-o-d-e/</link><pubDate>Wed, 17 Feb 2016 22:30:20 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/02/17/hyperboria-101-article-published-at-n-o-d-e/</guid><description>&lt;p>Earlier this week I had an article published discussing Hyperboria and how the network works at a high level. It is titled &lt;em>Hyperboria 101 – Moving Through the Mesh&lt;/em>, and is available to view &lt;a href="https://n-o-d-e.net/hyperboria.html">here&lt;/a> through &lt;a href="https://n-o-d-e.net/">n-o-d-e.net&lt;/a>.&lt;/p></description></item><item><title>Running cjdns on Raspbian Jessie</title><link>https://phillymesh.net/2016/02/08/running-cjdns-on-raspbian-jessie/</link><pubDate>Mon, 08 Feb 2016 22:17:03 +0000</pubDate><author>Mike Dank (Famicoman)</author><guid>https://phillymesh.net/2016/02/08/running-cjdns-on-raspbian-jessie/</guid><description>&lt;p>If you’re like me, you have a few &lt;a href="https://www.raspberrypi.org/">Raspberry Pis&lt;/a> kicking around, waiting for a job to do. I adopted early and purchased (at least one) original Model B with 256MB of RAM. This was a nifty little box four years ago, but has since been overshadowed by its older brother, the revised Model B with 512MB of RAM, and its cousins: the B+ and RPi 2. These originals still have life left in them, and can often be found below the original $35 price tag. When it comes to running cjdns, they do a fantastic job!&lt;/p>
&lt;p>This post assumes you have a Raspberry Pi, power adapter, sd card, and enough smarts to hook the Pi up to your network and feed it a Raspbian image. This should work for any Model B Raspberry Pi, from the original up to the Raspberry Pi 2.&lt;/p>
&lt;h2 id="installation" >Installation
&lt;span>
&lt;a href="#installation" title="Direct Link to Installation">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The Hyperboria documentation offers &lt;a href="https://docs.meshwith.me/install/debian-jessie.html">a guide on installing for Debian Jessie&lt;/a>, but it fails on the Raspberry Pi out of the box. Prior to this, I was running Raspbian Wheezy with few issues in relation to cjdns, but other work I wanted to do had me yearning for a more up-to-date distribution. I grabbed Raspbian Jessie from &lt;a href="https://www.raspberrypi.org/downloads/raspbian/">the official download site&lt;/a> (Release date 2015-11-21), loaded it onto my SD card, and booted up.&lt;/p>
&lt;p>On an original Raspberry Pi, this process takes a while. At this point, start yourself a pot of coffee and then log on to your pi using the default username and password, &lt;strong>pi/raspberry&lt;/strong>. I run headless, so everything will be done from the console over ssh, but that shouldn’t matter too much.&lt;/p>
&lt;p>We are going to install cjdns as a service, so let’s change over into root to make this a little more comfortable.&lt;/p>
&lt;pre tabindex="0">&lt;code>su -
&lt;/code>&lt;/pre>&lt;p>If you have a fresh installation, be sure to run config and expand to fit the full size of your SD card, overclock if you want, and restart the pi when done. After restarting, log in again and change back to root.&lt;/p>
&lt;pre tabindex="0">&lt;code>raspi-config
&lt;/code>&lt;/pre>&lt;p>I also cannot express how important it is to change the default user and root passwords.&lt;/p>
&lt;pre tabindex="0">&lt;code>passwd pi
passwd root
&lt;/code>&lt;/pre>&lt;p>Now, we want to update, upgrade, and install some dependencies.&lt;/p>
&lt;pre tabindex="0">&lt;code>apt-get update
apt-get upgrade
apt-get install nodejs build-essential git
&lt;/code>&lt;/pre>&lt;p>Somewhere during these commands, your coffee should have finished. Go pour a cup and come back to watch the console until everything is tidied up.&lt;/p>
&lt;p>Afterwards, we are going to start building cjdns by pulling down the latest code and building.&lt;/p>
&lt;pre tabindex="0">&lt;code>cd /opt
git clone https://github.com/cjdelisle/cjdns.git
cd cjdns
NO_TEST=1 Seccomp_NO=1 ./do
&lt;/code>&lt;/pre>&lt;p>Pay close attention to this last line. We need to execute ./do in this fashion because of &lt;a href="https://github.com/hyperboria/cjdns/issues/6#issuecomment-162244016">a current issue with the kernel on Raspbian Jessie&lt;/a>.&lt;/p>
&lt;p>After a little wait, the build should finish successfully. Now we want to configure cjdns to run as a daemon, so let’s create a link to the binary, generate a configuration file, and copy over the service file.&lt;/p>
&lt;pre tabindex="0">&lt;code>ln -s /opt/cjdns/cjdroute /usr/bin
(umask 077 &amp;amp;&amp;amp; ./cjdroute --genconf &amp;amp;gt; /etc/cjdroute.conf)
cp contrib/systemd/cjdns.service /etc/systemd/system/
&lt;/code>&lt;/pre>&lt;p>All that’s left is to enable the service and start it up. Afterwards, it should start on every boot-up automatically.&lt;/p>
&lt;pre tabindex="0">&lt;code>systemctl enable cjdns
systemctl start cjdns
&lt;/code>&lt;/pre>&lt;p>If you want to edit your cjdroute.conf for adding peers or… well… anything else, simply edit the file in &lt;strong>/etc/cjdroute.conf&lt;/strong> and restart the service.&lt;/p>
&lt;pre tabindex="0">&lt;code>nano /etc/cjdroute.conf
systemctl restart cjdns
&lt;/code>&lt;/pre>&lt;p>At any point, you can check the status of the service:&lt;/p>
&lt;pre tabindex="0">&lt;code>systemctl
&lt;/code>&lt;/pre>&lt;p>In the output, you should see the following:&lt;/p>
&lt;pre tabindex="0">&lt;code>cjdns.service loaded active running cjdns: routing engine designed for sec...
&lt;/code>&lt;/pre>&lt;h2 id="troubleshooting--debugging" >Troubleshooting &amp;amp; Debugging
&lt;span>
&lt;a href="#troubleshooting--debugging" title="Direct Link to Troubleshooting &amp;amp; Debugging">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>If at any point you want to check the output generated by starting cjdns, stop the service and run &lt;strong>cjdroute&lt;/strong> manually.&lt;/p>
&lt;pre tabindex="0">&lt;code>systemctl stop cjdns
/opt/cjdns/cjdroute &amp;lt; /etc/cjdroute.conf
&lt;/code>&lt;/pre>&lt;p>Occasionally, you may get a &lt;em>Configurator&lt;/em> error like this below:&lt;/p>
&lt;pre tabindex="0">&lt;code>1454470218 CRITICAL Configurator.c:97 Failed to make function call [Timed out waiting for a response], error: [UDPInterface_beginConnection]
&lt;/code>&lt;/pre>&lt;p>If this happens, run the following before starting cjdroute again to ensure that the ipv6 kernel module is loaded:&lt;/p>
&lt;pre tabindex="0">&lt;code>modprobe ipv6
&lt;/code>&lt;/pre>&lt;h1 id="conclusion" >Conclusion**
&lt;span>
&lt;a href="#conclusion" title="Direct Link to Conclusion**">
&lt;svg viewBox="0 0 28 23" height="100%" width="19" alt="" xmlns="http://www.w3.org/2000/svg">&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/>&lt;/svg>
&lt;/a>
&lt;/span>
&lt;/h1>
&lt;p>That&amp;rsquo;s all it takes, you now have a node capable of connecting to Hyperboria! Now, all you need to do is find some peers, add them to your configuration file, and join the network!&lt;/p></description></item></channel></rss>