Complete Build Walkthroughs End-to-end build guides for common repeater and gateway configurations, from budget solar nodes to mountain-top high-power installations. Budget Solar Repeater Build (~$80) This guide walks through assembling a low-cost, outdoor solar-powered LoRa repeater using the RAK4631 WisBlock platform. The build is weatherproof, low-power, and deployable on a single weekend afternoon. (Component prices below are approximate and volatile — verify with current retailer listings as of 2026-06-08.) Parts List Part Approx. Cost RAK4631 WisBlock Core (nRF52840 + SX1262) — RAKwireless store ~$18–24 RAK19007 WisBlock Base Board — see RAK19007 product page ~$15 5W 6V solar panel ~$10 CN3791 MPPT solar charger board (5V/6V in, 3.7V LiPo out) ~$8 3.7V 3000 mAh LiPo battery (flat pack) — rough estimate, cite a vendor SKU ~$10 Hammond 1554C enclosure (IP67 polycarbonate, 120×65×40mm) ~$15 M12 cable glands (×2) ~$3 SMA female bulkhead connector ~$2 5 dBi 915 MHz fiberglass antenna + SMA pigtail cable — cite a vendor SKU, price approximate ~$15 Misc: wire, shrink tubing, desiccant packet ~$5 Total ~$108 as configured. A bare-bones ~$80 build is only reachable by omitting the fiberglass antenna (~$15) and substituting cheaper parts for the enclosure and battery; the antenna alone does not close the gap. Treat ~$108 as the realistic figure and ~$80 as a minimal variant. Assembly Steps Flash firmware. Connect RAK4631 to your computer via USB. Double-tap the RESET button to enter the bootloader; the board then appears as a USB drive named RAK4631. Drag the MeshCore repeater .uf2 firmware file (a UF2 firmware image — a flashable binary the bootloader recognizes) onto that drive; the board reboots automatically when flashing completes. Wire the CN3791 charger board. Connect the solar panel leads to the IN+ / IN- pads. Connect the LiPo battery to BAT+ / BAT-. Run the charger output (labeled OUT+ / OUT- or VCC/GND) to the RAK19007 5V and GND supply pads. Double-check polarity before applying power. Add an inline fuse on the battery positive lead. Prepare the enclosure. Mark and drill two M12 knockouts in the enclosure: one in a side wall for the antenna SMA pigtail, one for the solar cable entry. An M12 gland threads into a ~12 mm hole and accepts cable ODs of roughly 3–6.5 mm; if your solar lead is thicker, step up to an M16 gland and hole. Deburr holes cleanly. Install cable glands. Thread M12 glands into both holes, finger-tight plus a quarter turn. Route the SMA pigtail through one gland and the solar cable through the other. Apply 2–3 wraps of PTFE thread tape on the gland threads before tightening fully (PTFE tape, not thread-sealant compound, to match the cable-glands page and avoid plastic-incompatible sealants). Mount the RAK19007. Attach M2.5 brass standoffs to the enclosure floor using self-tapping screws or nuts. Secure the RAK19007 to the standoffs. Affix the LiPo battery to the enclosure wall with double-sided foam tape, away from the standoff hardware. Battery safety: use a quality LiPo with built-in protection. Do not let the charger charge the cell below 0°C (use a low-temp-cutoff charger, or a LiFePO4 pack with an appropriate charger, in cold climates) or while the sealed enclosure is baking above ~45°C in direct sun — both can damage the cell or cause a fire. Shade or use a white/light-colored enclosure and keep the inline fuse on the battery lead. Route the SMA pigtail. Connect the SMA pigtail's u.FL end to the RAK4631 antenna port. u.FL/IPEX connectors are fragile — align the plug directly over the board socket and press straight down until it clicks; never pull on the cable, and never solder near it. A mis-seated u.FL means no antenna connection and can damage the radio. Route the cable through the gland to the external SMA bulkhead connector and tighten the bulkhead nut. Seal and protect. Apply silicone RTV around all cable-gland entry points and the bulkhead fitting flange. Drop a desiccant packet into the enclosure before sealing. Test charging. Connect the solar panel externally and expose it to light. The CN3791 module has two indicator LEDs: one for charging, one for charge-complete (confirm against your specific module's manual, as silkscreen and LED behavior vary by board variant). Verify both states cycle correctly. Configure the node. The Repeater role on MeshCore is set by flashing the Repeater firmware (step 1) — the companion app/CLI is used to set the node name, coordinates, and admin password, not to switch roles. Power on the board. Using a phone or laptop, open the MeshCore app and connect via Bluetooth. Confirm the device is in the Repeater role, enter your callsign or node name, and input the GPS coordinates of the deployment site (or enable GPS fix if a GPS module is attached). Also confirm the region is set to US (915 MHz) so firmware TX power stays within the FCC Part 15 limit; the 5 dBi antenna and ~22 dBm SX1262 radio are compliant. Deploy and mount. Close the enclosure lid and engage the IP67 latches. Mount the enclosure at the chosen site using UV-stable zip ties or a small bracket. Attach the external antenna to the SMA bulkhead and angle the solar panel toward the equator. A good year-round tilt is approximately equal to your latitude; steeper (latitude +15°) favors winter and sheds snow. (See the Solar & Power book for the full tilt guidance rather than a single fixed range.) Expected Performance Average current draw: roughly 8–15 mA for the RAK4631 in repeater mode, depending heavily on whether the receiver is always on versus duty-cycled and on transmit frequency. Measure your own build for an accurate figure rather than relying on this estimate. Battery runtime without sun (ideal upper bound): 3000 mAh ÷ ~10 mA ≈ 300 hours ≈ 12+ days. This is an idealized ceiling. After derating for ~70–80% usable capacity, converter efficiency, self-discharge, transmit spikes, and cold, plan for roughly 60–70% of this figure in practice. Solar recharge time: with roughly 4–5 peak-sun-hours per day in clear conditions, a 5W panel can replace a small repeater's daily consumption with margin. Actual recharge depends on peak-sun-hours and load, not a fixed number of days. RF range: a higher-gain antenna and greater mounting height improve range. A 5 dBi antenna adds roughly 3 dB over a typical 2 dBi stubby, but the resulting distance depends on terrain, line-of-sight, spreading factor, and noise floor — it cannot be stated as a fixed number of kilometers. Tips & Troubleshooting If the CN3791 does not charge, verify the solar panel open-circuit voltage is within the 4.5 - 6.5V input range of the board. (That 4.5–6.5V figure applies to the 6V-panel CN3791 module variant; modules configured for a 12V panel use a higher MPPT setpoint.) Use self-amalgamating tape over the SMA bulkhead nut as an extra moisture barrier. If Bluetooth pairing fails, confirm the firmware was flashed correctly — on typical MeshCore RAK4631 builds a solid blue LED indicates the BLE stack is running, but LED behavior depends on the specific firmware build, so verify against your firmware's documented behavior. For areas with heavy frost, consider replacing the LiPo with a LiFePO4 cell; LiPos lose significant capacity below 0°C. Important: if you switch to LiFePO4 you must also switch to a LiFePO4-rated charger — the CN3791 charges to 4.2V and will overcharge a LiFePO4 cell (LiFePO4 needs ~3.6V/cell). And regardless of chemistry, do not charge LiPo, Li-ion, OR LiFePO4 below 0°C (32°F) without a charger that has a low-temperature charge cutoff (or a self-heating LiFePO4 pack). Note that low-temperature limits apply to charging; discharge works to much lower temperatures. High-Power Mountain Repeater Build (~$200) ⚠ FCC COMPLIANCE WARNING — READ BEFORE BUILDING: Under FCC Part 15 (47 CFR §15.247) the 902–928 MHz band has a hard conducted-output ceiling of 1 W (30 dBm) at the coax, referenced to an antenna of up to 6 dBi. This conducted limit applies before antenna gain is considered, and the derived EIRP ceiling is 36 dBm (4 W) with a 6 dBi antenna (above 6 dBi, conducted power must be reduced 1 dB for every 1 dB of gain). An external RF amplifier almost always pushes conducted output over 30 dBm, which is illegal for unlicensed Part 15 operation. A "2 W" (33 dBm) amplifier exceeds the limit outright and must not be used unlicensed. Higher power is only lawful under an amateur (Part 97) license — and Part 97 prohibits encryption (47 CFR §97.113(a)(4)), so Meshtastic/MeshCore default AES channels must be turned OFF, and you must identify by callsign at least every 10 minutes (§97.119). Measure your conducted output with a power meter before deploying. This build is designed for demanding deployments - mountain summits, ridge lines, or any site that needs extended range and the ability to survive winter conditions. It pairs a LilyGO T-Beam with a LiFePO4 battery bank and a robust MPPT charge controller. Note that any external RF amplifier option must be operated within the FCC limits described in the warning above — under Part 15 the total conducted output may not exceed 1 W (30 dBm), and most "1 W" amplifier modules will only be legal if the modem drive is reduced so the amplifier's output stays at or below 30 dBm conducted. A 2 W amplifier cannot be operated legally under Part 15. Parts List Prices are approximate and volatile (as of 2026-06-08); verify current pricing and component availability before ordering. Part Approx. Cost LilyGO T-Beam v1.1 (ESP32 + SX1276/SX1262 + GPS + 18650 holder). Note: v1.1 has been largely superseded by v1.2; SX1276 variants max ~17-20 dBm vs SX1262 ~22 dBm. ~$35 Documented LoRa power-amplifier module (verify the datasheet — e.g. a RAKwireless 1 W LoRa booster or a documented E22-900M30S module). A 1 W (30 dBm) PA is the maximum that can be made Part-15-legal, and only if the modem drive is reduced so the PA output does not exceed 30 dBm conducted. Do NOT use a 2 W (33 dBm) module for unlicensed operation — it exceeds the FCC limit.) ~$40 - 60 10W 12V monocrystalline solar panel ~$20 Genasun GVB-8 or Victron SmartSolar 75/10 MPPT charge controller (the ~$35 low end may be optimistic for a genuine MPPT unit) ~$35 - 90 LiFePO4 battery, 12V 10Ah ~$45 Inline fuse (3-5 A) for the battery positive lead, plus a battery disconnect/switch ~$5 Fibox TEMPO weatherproof polycarbonate enclosure (confirm the exact part number, dimensions, and stated IP rating — Fibox TEMPO is rated IP65/IP66/IP67 depending on the listing) ~$30 LMR-200 low-loss coax, 1m + N-type connectors (crimped or soldered) ~$15 6 dBi fiberglass omni antenna, N-type, 915 MHz (real gain must be at or below 6 dBi to stay within 36 dBm EIRP at full legal conducted power) ~$25 Mounting hardware (J-pipe mount, stainless U-bolts, mast) ~$20 Total ~$200 - 250 Key Design Considerations Power Amplifier & Heat Management A LoRa power-amplifier module requires a supply rail (typically 12V, taken from the LiFePO4 battery or a regulated bus — check the specific module's input voltage and current spec). At ~1W RF output with a typical class-AB PA efficiency around 25%, the amplifier draws ~4W DC and dissipates roughly 3W as heat (actual figure depends on the module's efficiency, typically 2-4W). Mount the amplifier board against an aluminum bracket that contacts the enclosure wall, or add a small heatsink with thermal paste. Without adequate thermal management, output power will derate and long-term reliability will suffer. EIRP & Regulatory Compliance Under FCC Part 15 at 902-928 MHz (47 CFR §15.247) the limit is 30 dBm (1 W) conducted at the coax with an antenna of up to 6 dBi gain. For antennas above 6 dBi, conducted power must be reduced 1 dB for every 1 dB of gain above 6 dBi. Combining a true 1W (30 dBm) conducted output with a 6 dBi antenna yields 36 dBm EIRP — and that 36 dBm EIRP figure is the derived ceiling only with a 6 dBi antenna at full legal conducted power; it is not a universal fixed limit. Confirm the antenna gain rating is measured (not marketing-inflated), and treat 36 dBm EIRP as a target to stay under (with margin), accounting for feedline and connector loss. Verify by measurement rather than trusting nameplate numbers. The conducted limit governs first: an external amplifier that produces more than 30 dBm at the coax is non-compliant regardless of antenna gain. If you hold an amateur radio license (Technician or above), you may operate at higher power under Part 97, but with important conditions: (1) you must DISABLE all encryption — Meshtastic/MeshCore default AES channels are prohibited under 47 CFR §97.113(a)(4); use an unencrypted/open channel; (2) you must transmit station identification by callsign at least every 10 minutes per §97.119; (3) the 33 cm band is secondary for amateurs and automatic-control and content rules apply; and (4) you must perform an RF-exposure (MPE) evaluation per FCC §1.1310, as a high-power amplifier at antenna height creates an exposure zone requiring a keep-away/safe-distance assessment. Do not operate default-encrypted mesh firmware at amateur power levels. See the regulatory guidance page before transmitting at amateur power levels. LiFePO4 Chemistry for Cold Deployments LiPo (Li-ion) cells can lose roughly 20-30% of usable capacity near 0°C and must NOT be charged below freezing (0°C / 32°F) — charging below 0°C causes lithium plating, which permanently damages the cell and creates a fire risk. LiFePO4 cells discharge to about -20°C with reduced capacity, but should not be charged below 0°C at normal rates either. Some BMS-equipped or self-heating LiFePO4 packs permit charging below freezing only at drastically reduced current (≈0.1C below 0°C, then ≈0.05C below -10°C). Critically, a LiFePO4 pack must be paired with a LiFePO4-appropriate charger/controller (3.6 V/cell charge profile) and a low-temperature charge cutoff; charging LiFePO4 on a standard 4.2 V Li-ion charge profile will overcharge it. The single safe rule to remember: do not charge any lithium chemistry below 0°C. For any deployment above 1500m elevation or at latitudes above 40°N, LiFePO4 (with a correct charger and low-temp cutoff) is strongly recommended over LiPo. Winter Solar Harvest A 10W panel mounted at a 30° south-facing tilt at 45°N latitude may deliver on the order of 15 - 20 Wh/day at winter solstice under clear skies, but this is a rough estimate — actual yield is highly site- and weather-dependent and should be modeled for your specific location with a tool such as PVWatts or PVGIS. Note that 30° tilt is suboptimal for winter at 45°N (≈60° captures more low-angle winter sun), and on overcast winter days small panels in low-sun regions (e.g. the Pacific Northwest "Big Dark") can produce only ~3-5 Wh/day. The system draws roughly 5W peak during transmit (≈1W RF plus PA inefficiency + ESP32 + GPS) and far less on average with duty-cycling; produce a measured, itemized peak and average power budget rather than relying on the estimate. Whether this harvest sustains a 24/7 repeater with multi-day overcast reserves depends entirely on the verified site-specific harvest figure and the real average load. Tie the conclusion to a measured days-of-autonomy calculation; in low-sun regions deployed builders use larger or multiple panels precisely because small panels underperform in overcast winters, so a single 10W panel may be insufficient — size the panel and the 10Ah battery to your modeled worst case. Coax Loss at 915 MHz At ~915 MHz, RG-58 loses approximately 0.5 dB/m (~16.5 dB/100 ft) and LMR-200 about 0.33 dB/m (~9.9 dB/100 ft). Over a short 1 m run the difference between the two is only about 0.2 dB (~5% more radiated power) — effectively negligible. Coax choice matters on longer runs: at ~10 m the difference grows to roughly 2 dB, so use LMR-240/LMR-400 for runs of several meters or more. Keep the feedline run as short as practical. Important EIRP note: recovering coax loss increases EIRP — if the build is already near the 30 dBm conducted / 36 dBm EIRP ceiling, reducing feedline loss can push EIRP over the legal limit unless conducted power is correspondingly reduced. Safety: Grounding, Lightning & Working at Height Summit and ridge sites are high lightning-exposure locations and elevated-mast installs carry serious physical hazards. Before and during installation: Lightning/grounding: Bond the mast, enclosure, and the antenna's ground rod to the site grounding system, and bond that ground rod to the building grounding electrode system where one exists (NEC 810.21 / 250). Install a coax surge arrestor on the feedline. Never install during approaching weather. Power-line clearance: Keep the mast's full fall-radius clear of overhead power lines — contact with lines is the leading cause of installer fatalities. Working at height: Use fall protection for any elevated mast or tower work (OSHA height triggers are 4 ft in general industry, 6 ft in construction). Tower climbing requires training, certified anchors, 100% tie-off, and a spotter. RF exposure: At amplifier power levels, maintain a keep-away/safe distance per the MPE evaluation (FCC §1.1310) on rooftop/tower mounts. Assembly Overview Mount the MPPT controller and LiFePO4 battery in the lower half of the Fibox enclosure using DIN rail or bracket mounts. Connect the solar panel input to the MPPT controller following the manufacturer's polarity labeling. Connect the battery output terminals. Install an inline fuse (sized to the wiring, typically 3-5 A) at the battery positive terminal, ahead of the MPPT load/amplifier wiring, plus a battery disconnect/switch. The fuse must be at the battery, protecting the whole run. Never wire a LiFePO4 battery to the amplifier without overcurrent protection. Then wire a regulated output (per the amplifier's input-voltage spec) from the MPPT load terminals to the amplifier input and to a 5V step-down converter powering the T-Beam. Connect the amplifier to the T-Beam following the amplifier module's documentation. Note this is the most demanding part of the build: the T-Beam's onboard SX1262/SX1276 normally feeds the board's own antenna port, so the radio's RF output must be redirected into the amplifier's RF input (the correct cable, connector, and any required board modification are specified in the amplifier module's docs — follow them). Drive the modem only to the level the PA datasheet specifies as its input (often ~10-17 dBm — the SX1262 maxes at +22 dBm and cannot itself reach 27-30 dBm). Thermal-pad the amplifier to the enclosure wall. Run LMR-200 from the amplifier RF output through a weatherproof N-type bulkhead in the enclosure wall. Terminate with an N-type connector - do not use SMA at this power level. Attach the 6 dBi fiberglass antenna to the external N-type bulkhead. Wrap the connector joint with self-amalgamating tape. Flash and configure firmware (see below), then seal the enclosure with silicone RTV on all penetrations. Mount the enclosure on the J-pipe mast with stainless U-bolts. Orient the solar panel to true south at the appropriate tilt angle for your latitude (a steeper, near-60° tilt favors winter harvest at higher latitudes). Firmware Configuration Flash the T-Beam with either Meshtastic (broader community compatibility) or MeshCore repeater firmware depending on your network's protocol stack. The T-Beam is an ESP32 board — flash it with esptool or a web flasher (it is not flashed via meshcore-cli, which only connects to an already-running node). Set the modem TX power so the amplifier's CONDUCTED OUTPUT (at the coax) does not exceed 30 dBm / 1 W. The Part 15 conducted limit is independent of, and additional to, the EIRP limit. Set the T-Beam modem TX power to the level the amplifier module specifies as its input (often ~10-17 dBm — check the PA datasheet); the SX1262 maxes at +22 dBm and cannot itself produce 27-30 dBm. The amplifier provides the final ~1 W output — size the modem drive to the PA input spec, then measure the conducted output with a power meter and verify total EIRP before deployment. Operating an amplifier "with its gain on top" of a 27-30 dBm modem is not legal under Part 15 and would also overdrive most PA modules. Disable the OLED display after configuration to save roughly 10-20 mA continuously (depending on displayed content). Disable Bluetooth after initial setup (reduces attack surface and saves ~5 mA). Set a fixed GPS position manually once the site coordinates are known, then disable live GPS polling to save ~20 mA and extend GPS module life. Use a smartphone app on-site to capture precise coordinates before sealing. Set the node role to Repeater (or Router) and configure the hop limit appropriately so the node forwards distant packets. (Note: the ROUTER_CLIENT role was retired in firmware 2.3.15.) Rooftop Gateway Build (Pi + LoRa) A rooftop gateway bridges your local LoRa mesh to the internet, enabling remote monitoring via meshmap.net, MQTT integration with Home Assistant, and APRS forwarding. This build uses a Raspberry Pi Zero 2W paired with a USB-connected LoRa node as the simplest, most maintainable approach. ⚠ ROOFTOP WORK SAFETY - READ FIRST: Rooftop installation carries serious fall and electrical risk. Fall protection: Use a full-body harness with a fall-arrest anchor when working within 6 ft of any roof edge or skylight. Never work on wet, icy, steep, or fragile roofs. Power lines: Survey for overhead service-drop power lines before raising any mast or antenna. Keep the antenna/mast clear of all lines by at least its full height plus a margin (the mast's full fall-radius) - contact with a power line is the leading cause of installer fatalities. Never work alone: Have a second person present. Grounding: Bond the antenna ground rod to the building grounding electrode system (per NEC 810.21 / 250). If in doubt, hire a qualified installer. Parts List Part Approx. Cost Raspberry Pi Zero 2W ~$15 Heltec LoRa 32 V3 (SX1262, USB-C) - acts as the LoRa radio ~$15 - $25 (street price varies; as of 2026-06-08) LoRa antenna (915 MHz, SMA, matched to the Heltec) + pigtail ~$8 - $15 5V PoE splitter (802.3af to micro-USB/USB-C) or USB power supply ~$10 MicroSD card, 16 GB (Class 10 / A1 or better) ~$8 Weatherproof outdoor enclosure (IP65 or better, fits Pi + Heltec) - light-colored / shaded ~$25 Short USB-A to USB-C cable (internal, ~15 cm) ~$3 Total ~$84 - 115 (estimate, subject to current street pricing) Connect the antenna to the Heltec before powering it on (good practice for any LoRa radio). Thermal note: a sealed enclosure in direct rooftop sun can reach 70-80 °C internally - well above a Raspberry Pi's reliable operating range and hard on SD-card lifespan. Use a light-colored or white enclosure, mount it in shade where possible, and add rain-protected ventilation. See the Thermal Management for Outdoor Enclosures page for details. Alternative radio option: For LoRaWAN instead of Meshtastic, substitute the Heltec with a RAK2287 Pi HAT (SX1302 8-channel concentrator, ~$80 as of 2026-06-08) and use the ChirpStack network server. This guide focuses on the Meshtastic MQTT gateway path. Setup: Meshtastic MQTT Gateway 1. Prepare the Pi Flash Raspberry Pi OS Lite (64-bit) to the microSD card using Raspberry Pi Imager. In the Imager advanced settings, pre-configure your Wi-Fi credentials, enable SSH, and set a hostname (e.g. mesh-gateway). This avoids needing a display or keyboard on first boot. 2. Connect the Heltec Connect the Heltec LoRa 32 V3 to the Pi Zero 2W via the short USB-C cable. The Pi will enumerate the Heltec as a USB serial device. The Heltec V3's USB-serial bridge usually appears as /dev/ttyUSB0 (native-USB nRF boards appear as /dev/ttyACM0). Confirm which one you actually have with: ls /dev/tty{USB,ACM}* Important: In every command below, substitute the port you actually found here (shown as /dev/ttyXXX). If your Heltec appeared as /dev/ttyUSB0, use that instead of /dev/ttyACM0, or the commands will silently fail against the wrong port. 3. Install Software sudo apt update && sudo apt upgrade -y pip install meshtastic sudo apt install -y mosquitto mosquitto-clients 4. Configure the Heltec via Meshtastic CLI Connect to the node over USB serial and enable MQTT. Note that uplink_enabled and downlink_enabled are per-channel settings (use --ch-index / --ch-set), not fields on the mqtt module: # Replace /dev/ttyXXX with the port you found in step 2 # Set MQTT server to localhost (the Pi itself) meshtastic --port /dev/ttyXXX --set mqtt.address localhost meshtastic --port /dev/ttyXXX --set mqtt.enabled true # Uplink/downlink are PER-CHANNEL - set them on the primary channel (index 0) meshtastic --port /dev/ttyXXX --ch-index 0 --ch-set uplink_enabled true meshtastic --port /dev/ttyXXX --ch-index 0 --ch-set downlink_enabled true # Enable JSON output (optional, for Home Assistant compatibility) meshtastic --port /dev/ttyXXX --set mqtt.json_enabled true 5. Configure Mosquitto Edit /etc/mosquitto/mosquitto.conf. Use authentication by default - configure a username/password rather than an open anonymous listener: listener 1883 allow_anonymous false password_file /etc/mosquitto/passwd Create the password file with sudo mosquitto_passwd -c /etc/mosquitto/passwd meshuser. An anonymous, unauthenticated broker ( allow_anonymous true) is only acceptable on a fully trusted local network. ⚠ Do NOT expose the MQTT broker to the public internet. Open brokers are constantly scanned and abused. Never port-forward an unauthenticated broker. For remote access, use a VPN (e.g. WireGuard / Tailscale) into your network, or bridge to the community meshmap MQTT server - do not open port 1883 to the internet. Restart Mosquitto: sudo systemctl restart mosquitto sudo systemctl enable mosquitto 6. Network Connectivity Options in order of preference: PoE Ethernet: Use a PoE splitter to power the Pi over the same Ethernet cable that connects it to your router. Most reliable and simplest. Wi-Fi: The Pi Zero 2W has 2.4 GHz Wi-Fi. Works well if the rooftop is within range of your router. Add a second 2.4 GHz AP if needed. Ethernet-over-USB (USB gadget mode): Configure the Pi as a USB network adapter - plug a USB cable to a computer or router port. Useful when no other connectivity is available near the Pi. 7. Optional: Node-RED for Local Processing bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) Node-RED provides a visual flow editor for filtering, transforming, and routing mesh packets to Home Assistant, InfluxDB, or external webhooks without writing code. 8. Auto-Start on Boot (systemd) The Meshtastic node's own firmware MQTT client publishes to the broker - this happens on the node itself, not via a service on the Pi. For packets to publish, you need both mqtt.enabled = true and at least one channel with uplink_enabled = true (set in step 4). When both are in place and Mosquitto is running, no custom systemd service is needed; but if you skipped the per-channel uplink step you will see no packets. If you add a custom Python script (e.g. for APRS forwarding), create a systemd service: # /etc/systemd/system/mesh-bridge.service [Unit] Description=Mesh MQTT Bridge After=network.target mosquitto.service Requires=mosquitto.service [Service] ExecStart=/usr/bin/python3 /home/pi/mesh_bridge.py Restart=always RestartSec=10 User=pi [Install] WantedBy=multi-user.target sudo systemctl enable mesh-bridge sudo systemctl start mesh-bridge 9. Verify Packet Flow Subscribe to all Meshtastic topics on the local broker and confirm packets are arriving: mosquitto_sub -h localhost -t 'msh/#' -v You should see JSON or binary payloads appearing whenever a node in range transmits. If nothing appears, check USB serial connectivity and that the channel uplink is enabled on the Heltec. Use Cases meshmap.net visibility: Configure Mosquitto to bridge to the public meshmap MQTT server so your nodes appear on the community map. See the meshmap.net documentation for bridge configuration details. Home Assistant integration: Use the Mosquitto add-on in Home Assistant and subscribe to msh/2/json/# for parsed telemetry and position data. Create automations triggered by mesh events. APRS gateway: Run aprx or a custom script to re-encode position packets as APRS-IS frames and upload to aprs.fi for interoperability with the ham radio APRS network. Uploading to APRS-IS requires a valid amateur callsign and passcode. If you also gate this traffic onto APRS RF, Part 97 rules apply to the transmitted traffic - you must identify your station (97.119) and must not transmit encrypted content (97.113). Remote node monitoring: Query node telemetry via MQTT to check battery voltage, SNR, and uptime of your remote repeaters. Access this over a VPN into your network rather than exposing the broker to the internet (see the security warning in step 5).