Solar & Power Systems

Solar panels, batteries, charge controllers, and mains power for field and permanent deployments.

📖 Start Here — Solar & Power Systems Guide

This book covers everything about powering LoRa mesh nodes - from USB-powered indoor nodes to fully autonomous solar installations capable of running for years between battery replacements. Note that all outdoor solar nodes still require routine periodic maintenance (panel cleaning, gasket and desiccant replacement, and battery health checks) - "autonomous" means it self-recharges, not that it is maintenance-free. See the Cold Weather Operation page for the seasonal inspection schedule.

🚀 Quick Answers

📚 What's In This Book

This book has grown several overlapping pages on the same topics (sizing, charge-controller selection, and mains power). To avoid confusion, the index below links every page and marks which one is canonical for each topic. When numbers disagree between an alternate page and the canonical one (for example derate factor, depth-of-discharge, or per-node energy), trust the canonical page. The alternates are retained for now but are being consolidated.

Power Fundamentals

Battery Selection

Solar System Design

Solar sizing: several sizing pages exist. Sizing a Solar System for Your Climate is the canonical sizing page - use its method and numbers.

Charge controllers: several charge-controller pages exist. Charge Controller Selection and Configuration is the canonical charge-controller page.

Wired Power

Mains power: two mains-power pages exist. AC Mains Power for Permanent Node Installations is the canonical mains page.

System Wiring and Safety

Power Fundamentals

Power Fundamentals

Current Draw & Power Budgets

Current Draw & Power Budgets

Understanding how much power your node consumes is the starting point for sizing batteries and solar panels. LoRa mesh nodes have variable current draw depending on what they are doing at any given moment.

Typical Current Draw by State

StateCurrent DrawNotes
Deep sleep (nRF52)2 - 20 µAHeltec Wireless Paper: ~20 µA; T-Echo: ~2 - 5 µA
Deep sleep (ESP32)10 - 100 µA (bare MCU); often hundreds of µA to a few mA at board levelBare-module figures; real ESP32 Meshtastic boards draw far more (community measurements show up to ~2.7 mA) due to regulators/peripherals
Idle / listeningnRF52: ~10 - 30 mA; ESP32: ~40 - 80 mARadio on, waiting for packets; display off. ESP32-based boards (e.g. Heltec V3) draw considerably more than nRF52 boards (e.g. RAK4631, T-Echo)
Active with display30 - 60 mAOLED adds ~10 - 20 mA; e-ink adds ~0 mA between refreshes
TransmittingRadio/PA ~50 - 120 mA; whole device commonly 150 - 330 mA at 22 dBmThe ~80 mA figure is radio-only on efficient boards (RAK nRF52840 ≈ 88 mA); full-board TX current at 22 dBm reaches ~163 - 332 mA depending on board (MCU + PA + regulator). Representative — measure your own
Transmitting (Station G2, 36.5 dBm)~800 - 1200 mA (estimate)36.5 dBm (≈4.46 W) RF output is the manufacturer spec; the current draw is an estimate (the vendor notes consumption does not scale strongly with PA output). Requires a 15 V PD supply (≥20 W). Note: 4.46 W EIRP/conducted may exceed license-free power limits in your band/jurisdiction — verify the legal limit before transmitting at full power

Average Current for a Repeater Node

A repeater node running MeshCore is mostly in idle/listening mode, with brief transmit bursts when relaying traffic. Typical average:

Calculating Daily Energy Use

Daily energy (Wh/day) = Average current (A) × Voltage (V) × 24 hours. Equivalently, Wh/day = average current (mA) × 24 h × system voltage (V) ÷ 1000. (Current in mA × hours gives mAh/Ah; you must multiply by voltage to get watt-hours.)

Example for an nRF52 (RAK4631) repeater:

An always-on ESP32 board (e.g. Heltec V3) averaging ~50 mA would instead consume 0.050 × 3.7 × 24 ≈ 4.4 Wh/day — roughly four times as much. Always size to your specific board.

This is the baseline figure used in solar sizing calculations. A Room Server running with active connections may draw more - budget 3 - 4 Wh/day for a heavily used Room Server node.

Power Budget Worksheet

ParameterYour ValueNotes
Average current draw (mA)___Measure with a USB power meter or estimate from table above
Supply voltage (V)3.7Standard LiPo/Li-ion nominal voltage
Daily energy (Wh/day)___= current(A) × 3.7 × 24
Days of battery reserve needed___General outdoor solar nodes: 3 - 5 days. Emergency-comms nodes: 5 - 7+ days (panels do not help during multi-day overcast)
Battery capacity needed (Wh)___= daily energy × reserve days ÷ (usable fraction × cold derate × end-of-life derate) × 1.2 safety margin. For a warm-climate LiFePO4 node the usable fraction alone is ~0.80; for a cold-climate node the combined derate is roughly 0.58, so the battery must be substantially larger. Do NOT size on 0.80 alone in freezing climates — see the Battery Sizing page for the full method (this worksheet’s simple 0.80 divisor undersizes a winter node by ~40%)
Worst-case peak sun hours___Look up your location’s worst-month (December) value from NREL PVWatts — do not assume a flat 4 PSH year-round. Northern-US winter is ~1 - 2.5 PSH (e.g. Seattle/Portland ~1.5, Chicago ~2.5)
Solar panel needed (W)___= daily energy ÷ (peak sun hours × 0.75). The 0.75 overall system derate covers controller, wiring, temperature and soiling losses. Use your location’s worst-month (winter) peak sun hours from NREL PVWatts — northern-US winter is ~1 - 2.5 PSH, not a flat 4

Measuring Real Current Draw

For accurate power budgeting, measure actual current with a USB power meter (for 5V USB-powered nodes) or a multimeter in series with the battery lead. A USB meter like the UM25C gives real-time current and accumulates energy over time. Log over a 24-hour period under typical traffic conditions for the most accurate average.

Reducing Power Consumption

Power Fundamentals

Battery Chemistry Guide

Battery Chemistry Guide

Choosing the right battery chemistry for your deployment is critical. The wrong choice leads to shortened battery life, safety hazards, or a node that fails in cold weather.

Li-ion 18650 Cells

The 18650 is the workhorse battery for DIY LoRa nodes. Named for its dimensions (18mm × 65mm), it is widely available, well-understood, and supported by most mid-range device designs with a holder.

Warning: Most 18650 cells sold on Amazon are counterfeit. The highest-capacity genuine 18650 cells on the market are roughly 3500mAh; anything advertised far above that (for example a 6000mAh cell from an unknown brand) is physically impossible and counterfeit. Buy from reputable electronics retailers only.

Prices below are approximate and volatile (as of 2026-06-08). Capacity and current ratings are from each manufacturer's datasheet.

CellPriceCapacityMax ContinuousNotes
Samsung 35E Protected$103500mAh8AGood all-around; protected circuit prevents overdischarge. 8A continuous per Samsung SDI INR18650-35E datasheet
Molicel M35A Protected$123450mAh typ (3500mAh rated)10ASlightly higher max current than Samsung 35E (per Molicel datasheet)
Panasonic NCR18650GA$143450mAh10AExcellent quality; established brand (3450mAh / 10A per Panasonic NCR18650GA datasheet)

All three options are equivalent for LoRa node use. Typical node average draw is <200 mA; brief TX bursts can reach several hundred mA momentarily but still far below the cells' 8 - 10A ratings, so any of these cells will work well. Buy protected cells - the protection circuit prevents over-discharge which can damage the cell - unless the device or holder already provides over-discharge protection (for example a DW01-based module), in which case unprotected cells are fine and fit holders better.

21700 Cells

21700 cells are slightly larger (21mm × 70mm) and offer higher capacity. Fewer devices have 21700 holders but they can be used in custom builds or with adapter sleeves.

CellPriceCapacityMax Continuous
Samsung 50S$8 (as of 2026-06-08)5000mAh25A
Molicel P50B$11 (as of 2026-06-08)5000mAh45A continuous (60A max)

LiPo Packs

Lithium polymer packs in various capacities with JST connectors are the standard battery choice for devices without 18650 holders (Heltec V3, many LilyGo boards). Match the connector type carefully.

PackPriceCapacityConnectorFits
3000mAh JST SH 1.25$113000mAhJST SH 1.25mmHeltec V3, V4 (verify LilyGo board connector separately)
3200mAh JST$153200mAhJST (verify pin count against RAKwireless datasheet)RAK19026
Rokland LiPo Packs$10 - $20Multiple sizesMicro JST 1.25Various; check listing for exact connector

LiPo caution: LiPo cells can swell, catch fire, or vent if overcharged, over-discharged, punctured, or charged at low temperatures. Use only with a proper charge controller. Never charge below 0°C - this 0°C charge floor applies to every lithium chemistry, including LiFePO4. For unattended outdoor deployments in cold climates, prefer Li-ion 18650 or LiFePO4 over LiPo, and use a BMS with a low-temperature charge cutoff regardless of chemistry.

LiFePO4 (Lithium Iron Phosphate)

LiFePO4 is strongly preferred for outdoor and cold-weather deployments. Key advantages over Li-ion/LiPo:

Trade-off: Lower energy density than Li-ion. A LiFePO4 pack of the same physical size will have less capacity than a Li-ion pack. At - 40°C (which equals - 40°F) plan for roughly 40 - 60% capacity loss even with LiFePO4 - this loss is temporary and recovers as the cells warm - and size accordingly.

Battery Chemistry Comparison

Note: all lithium chemistries below share the same 0°C charge floor. The "Cold Weather" rating reflects discharge/survival performance and thermal stability, not a difference in charge temperature - LiPo's disadvantage is its lower thermal stability and the rarer availability of a low-temperature-cutoff BMS, not a different minimum charge temperature.

ChemistryNominal VoltageCold WeatherSafetyCycle LifeBest For
LiPo3.7VPoorModerate300 - 500Indoor, portable, attended deployments
Li-ion 186503.7VModerateGood (protected)500 - 800General purpose; most DIY builds
LiFePO43.2VExcellentExcellent2000 - 4000Outdoor permanent, cold climate, unattended

Solar Systems

Solar Systems

Solar Panel & Charge Controller Selection

Solar Panel & Charge Controller Selection

Selecting the right panel and charge controller determines whether your solar node stays online year-round. This page covers available options and selection criteria. Prices are approximate and volatile (as of 2026-06-08).

Solar Panels

RAK Solar Panel 5V - ~$3.50 (as of 2026-06-08)

A small 5V RAK panel (SKU 920399, ~80 × 45mm) that connects to WisBlock base boards (and to the RAK19012 solar input). Convenient if you are already using RAK hardware, but limited in output compared to generic monocrystalline panels.

RAK19012 Solar Module - ~$6.90 (as of 2026-06-08)

An all-in-one module combining USB-C input, solar input, and battery management with an onboard linear battery-charger chip (not MPPT, and not a true solar charge controller). Solar input is limited to ~5.5V. Designed for RAK WisBlock systems. Simplifies the power system significantly - connect the solar panel and battery, plug the output into the WisBlock, done.

6W 6V Monocrystalline Panel - $15 - $20 (as of 2026-06-08)

The community standard for DIY solar repeater builds. 6V panels work directly with the CN3791 MPPT charger; the TP4056 is a linear charger best paired with 5V panels (a 6V panel works, but its open-circuit voltage nears the TP4056's limit and the excess is dissipated as heat). Monocrystalline cells are more efficient per unit area than polycrystalline, particularly in low-light conditions.

Charge Controllers

TP4056 - ~$1 - $3 (as of 2026-06-08)

A basic single-cell Li-ion/LiPo charger. The TP4056 chip alone provides CC/CV charge control (4.2V); over-discharge and short-circuit protection require the DW01-equipped module variant. It is a linear CC/CV charger (not MPPT and not PWM) - excess panel voltage above ~4.2V is dissipated as heat. The cheapest option and adequate for simple builds with moderate solar irradiance. A standalone TP4056 module does not have a load output - use the TP4056 with integrated DW01 protection IC, or add a separate protection module. Cold-weather warning: the TP4056 has no temperature sensing and no low-temperature charge cutoff, so it will attempt to charge the cell below 0°C, which causes lithium plating and permanent damage. For cold/winter deployments add a BMS with low-temp protection or a controller with a battery temperature sensor.

CN3791 MPPT - $3 - $5 (as of 2026-06-08)

A step up from the TP4056. The CN3791 is a switching MPPT-style charger that approximates Maximum Power Point Tracking using the constant-voltage method - it holds the panel near a preset Vmp (set by an external resistor divider) rather than continuously hill-climbing like a true perturb-and-observe MPPT. Simpler and less accurate than perturb-and-observe MPPT, but better than PWM, particularly under partial shading or variable irradiance. Recommended over TP4056 for serious solar builds. Like the TP4056, the CN3791 has no low-temperature charge cutoff - add BMS low-temp protection for cold-climate builds.

Taidacent MPPT Module - ~$10 (as of 2026-06-08)

A slightly larger MPPT module, commonly listed with ~1A charge current and 6V input support (confirm the exact specs against the specific module's listing). Some variants include onboard LED status indicators. Good choice when you want visibility into charge state without adding telemetry hardware.

RAK19012 All-in-One - ~$6.90 (as of 2026-06-08)

Integrated USB-C + solar + battery management for RAK WisBlock systems, using a simple onboard linear charger (not MPPT). Not suitable for non-RAK builds, but the simplest option for WisBlock deployments.

Charge Controller Comparison

ControllerPrice (as of 2026-06-08)MPPTMax ChargeBest For
TP4056$1 - $3No (linear CC/CV)1ABudget builds; good sun locations
CN3791$3 - $5Yes (constant-voltage)IC up to 4A; modules often ~2AMost DIY solar repeater builds
Taidacent MPPT~$10Yes~1A (confirm per module)When onboard monitoring is useful
RAK19012~$6.90No (linear charger)onboard linear chargerRAK WisBlock builds only

Panel Orientation and Mounting

Solar Systems

Sizing Your Solar System

Sizing Your Solar System

Proper solar sizing means the system reliably recharges within your worst-case season and holds enough battery reserve to survive your design number of consecutive no-sun days. No solar system runs unattended forever: cells fade with cycling, panels degrade, and a long overcast stretch can outlast any fixed reserve. Plan for battery replacement every few years and use remote monitoring (see Monitoring Battery State) so you catch a failing node before it dies.

Step-by-Step Sizing Process

Step 1: Determine Daily Energy Consumption

Daily energy depends heavily on platform, firmware, TX duty cycle, and whether the screen/Bluetooth/Wi-Fi are on, so always use your own measured value where possible. As representative planning figures (measure your own): an nRF52840 repeater (RAK4631, T-Echo) averages ~10–15 mA, while an always-on ESP32 board (Heltec V3) averages ~40–80 mA (higher with Wi-Fi/MQTT). Compute daily energy as: Daily energy (Wh/day) = average current (mA) × 24 h × system voltage (V) ÷ 1000. The worked example below uses a Heltec V3 (ESP32) repeater drawing a conservative ~25 mA average at 3.7 V: 25 × 24 × 3.7 ÷ 1000 = 2.22 Wh/day. A higher-duty ESP32 node can easily draw 2–3× this, so re-run the calculation with your measured current.

Step 2: Find Worst-Case Peak Sun Hours

Peak sun hours (PSH) vary by location and season. Size the panel against your worst month (December for the northern hemisphere). Do not assume a flat "4 PSH year-round" — northern-US winter PSH is often only ~1–2.5 h/day. Look up your exact site on the NREL PVWatts calculator (which uses the NREL NSRDB dataset) rather than relying on a single state-wide number, because PSH varies sharply by city and dataset. The values below are rough orientation only — replace them with a PVWatts result for your coordinates:

Location (approx.)December PSH (approx.)Annual Average PSH (approx.)
North Dakota / Fargo (~47°N)~2.5 h/day~4.5 h/day
Minnesota (~45°N)~2.8 h/day~4.6 h/day
Texas (~30°N) — varies widely by region; central/eastern TX (e.g. Austin) can be ~2.7 h in December~2.7–4.1 h/day~5.5 h/day
Pacific Northwest / Seattle, Portland (~47°N)~1.5 h/day~4.2 h/day
Florida (~28°N)~4.8 h/day~5.5 h/day

Note: winter PSH can run anywhere from ~7% to ~42% below the 12-month average depending on latitude and climate, and a single state (especially Texas) is too large to treat as one number. Always confirm your site in PVWatts. (Figures as of 2026-06-08.)

Step 3: Calculate Required Panel Size

Panel size (W) = Daily energy (Wh) ÷ (PSH × system derate factor)

Use a system derate factor of 0.75 — this single planning factor covers charge-controller, wiring, temperature, and soiling losses. (We use 0.75 consistently across all Mesh America sizing pages; size your panel against this and confirm production in PVWatts.)

Example (North Dakota repeater):
Panel = 2.22 Wh ÷ (2.5 h × 0.75) = 2.22 ÷ 1.875 = ~1.18 W minimum

A 6 W panel is roughly 5× the nameplate minimum — but treat this as a nameplate ratio, not real surplus. In deep winter at high latitude (low sun angle, cold, dirt, snow, and a cheap controller running off its maximum-power point), a panel rarely delivers anything close to its nameplate wattage, and a snow-covered panel produces essentially zero regardless of its rating. The large nominal oversize is therefore needed, not luxury: it buys back winter harvest losses and helps recover after a cloudy or snowy stretch. The real protection against multi-day storms and snow cover is battery reserve (Step 4), not panel margin.

Step 4: Calculate Battery Reserve

Battery capacity (Wh) = Daily energy × Reserve days ÷ Usable fraction

Example (3-day reserve, LiFePO4 at 0.80):
Battery = 2.22 × 3 ÷ 0.80 = 8.33 Wh minimum (nameplate)

A single 3500 mAh 18650 cell (e.g. Samsung INR18650-35E, 3500 mAh nominal, ~3.6–3.7 V nominal) = 3.5 Ah × 3.7 V = 12.95 Wh nameplate, or ~10.4 Wh usable at the 0.80 fraction. That comfortably satisfies the 3-day requirement (8.33 Wh) with margin. It does not satisfy the 5-day example below.

For a 5-day reserve (LiFePO4 at 0.80):
Battery = 2.22 × 5 ÷ 0.80 = 13.9 Wh minimum (nameplate)
→ Two 3500 mAh 18650 cells in parallel = 25.9 Wh nameplate (~20.7 Wh usable at 0.80) — comfortably covers the 13.9 Wh requirement with real positive margin. A single 12.95 Wh cell (~10.4 Wh usable) is not enough for 5 days.

Cold-climate charging warning: For any winter/cold-climate build, never charge lithium (including LiFePO4) below 0 °C (32 °F) — sub-freezing charging causes lithium plating, permanent capacity loss, and a hidden internal-short fire risk (discharging in the cold is fine). The CN3791 used in the example build has no low-temperature charge cutoff, so a cold-climate node built around it must add a BMS with low-temp protection or a charge controller with a battery temperature sensor. See the Cold-Weather Operation page.

Complete Sizing Example: North Dakota Year-Round Repeater

ParameterValue
NodeHeltec V3 (ESP32), MeshCore Repeater
Average current draw (representative — measure your own)~25 mA (conservative for an ESP32 board; higher-duty configs draw more)
Daily energy2.22 Wh/day
LocationFargo, ND (~47°N) — confirm PSH in PVWatts
December PSH (approx.)~2.5 h/day
System derate factor0.75 (controller + wiring + temperature + soiling)
Panel required (minimum)~1.18 W
Panel selected6 W 6 V monocrystalline
Panel margin~5× nameplate (effective winter margin far lower — this is the reason for the large nominal oversize, not surplus)
Battery usable fraction (LiFePO4)0.80
Battery reserve target5 days
Battery required (nameplate)13.9 Wh
Battery selected2× Samsung 35E 18650 in parallel = 25.9 Wh nameplate (~20.7 Wh usable at 0.80) — comfortable positive margin over the 13.9 Wh requirement
Charge controllerCN3791 (PWM switch-mode MPPT solar Li-ion charger). Has no low-temp cutoff — add a BMS with low-temperature charge protection for this cold-climate build.
Total build cost (rough, as of 2026-06-08)~$85–$100 (re-price the bill of materials from current store listings before ordering)
Solar Systems

Cold Weather Operation

Cold Weather Operation

Solar power systems in cold climates face challenges that warm-climate systems do not. This page consolidates solar-specific cold weather guidance. See also the DIY Build Guide > Cold Weather & Winter Operation page for enclosure and battery chemistry details.

Solar Panel Performance in Cold

Cold temperatures actually improve solar panel efficiency slightly. A standard silicon solar panel produces about 0.4% more power per degree Celsius below 25°C. At - 20°C (45° below the standard test condition), if the cell temperature actually reached - 20°C a 6W panel could produce roughly 7W (about +18%). In practice the gain is smaller because cell temperature under sunlight runs above ambient. Either way, this efficiency bump is minor compared with the real cold-weather problem below: far less light reaches the panel in winter, so net winter harvest is dramatically lower, not higher.

The main cold-weather solar challenge is reduced daylight hours and lower sun angle, not panel efficiency. A December day in North Dakota (~47°N) has only about 8.5 hours of daylight with the sun reaching a maximum elevation of only ~20° above the horizon, far less than the ~66° of midsummer. (Daylight length and solar elevation can be confirmed from a solar-position calculator for your latitude.)

Snow Accumulation on Panels

Snow covering the panel can reduce output to zero. Mitigation strategies:

Battery Temperature Management

Batteries lose usable capacity in cold, and charging is governed by a hard lower limit that is separate from how much capacity is available. The two columns below address these separately: discharge capacity falls gradually with temperature, while charging is simply prohibited below 0°C. The discharge figures are approximate and depend on cell and discharge rate; treat them as illustrative.

TemperatureApprox. discharge capacity (illustrative)Charging permitted?
+25°C (77°F)~100% (baseline)Yes
0°C (32°F)Reduced0°C is the practical lower charge limit - many BMS modules cut off charging at or just above 0°C. Charge only at a reduced rate; do not charge any colder.
- 10°C (14°F)ReducedDo not charge - charging here causes lithium plating, permanent capacity loss, and an internal-short / fire hazard (not merely capacity loss)
- 20°C ( - 4°F)Substantially reducedDo not charge
- 40°C ( - 40°F)Heavily reducedDo not charge. LiFePO4 is preferred for cold DISCHARGE and survival/storage only - it still must NOT be charged below 0°C without a heater.

A charge controller that monitors battery temperature and reduces or stops charging below 0°C is ideal. The CN3791 has NO low-temperature cutoff and no battery-temperature sensing (per its datasheet feature list) - on its own it will happily charge a frozen battery below 0°C, causing lithium plating and a hidden internal-short fire risk. The CN3791 is recommended elsewhere in this book as a default solar charger, so for any cold-climate or winter build you MUST add low-temperature charge protection: use a temperature-sensing charge controller, or a battery/BMS with built-in low-temperature charge cutoff, or a thermostat that disconnects charging below ~0 - 5°C.

Enclosure Thermal Behaviour

An enclosed node generates a small amount of heat (roughly 75 - 150 mW from the node and charge controller - for example ~25 mA at 3.7V is about 93 mW on the node side, plus charge-controller losses). In a sealed IP67 enclosure, this self-heating can keep the interior several degrees above ambient, which helps battery performance marginally. A black enclosure absorbs more solar heat during daylight, which can add a few more degrees of warmth. A white enclosure stays cooler in summer (preventing overheating) but provides less passive warming in winter.

For very cold deployments, a small Nichrome heating resistor (1 - 2W) inside the enclosure, powered from the battery via a thermostat relay, can keep the battery warm enough to charge. If the goal is to permit charging, set the thermostat to keep the cells above 0°C (target roughly +2 to +5°C) - NOT - 10°C, because charging is prohibited below 0°C and a battery sitting at - 8°C must not be charged. Note that a 1 - 2W heater may be too weak to warm a battery from deep-cold ambient to above freezing in a small outdoor enclosure, so verify the wattage against the enclosure's thermal mass and heat loss. Critically, the heater runs in winter - exactly when solar harvest is lowest - and its draw must be added to the power budget (a 1 - 2W heater can exceed the node's own consumption and flatten the battery it is protecting). Add a low-voltage cutoff so the heater cannot deep-discharge the pack. This adds complexity and power consumption but can be worthwhile for nodes at critical infrastructure sites.

Annual Maintenance Schedule

Cold-climate solar nodes require more frequent inspection than warm-climate nodes:

Wired & Mains Power

Wired & Mains Power

Mains Power for Permanent Installations

Mains Power for Permanent Installations

Where mains (AC grid) power is available, it is convenient and low-maintenance for routine operation: it provides essentially unlimited energy day-to-day, avoids battery-cycling wear, and simplifies the build. But for emergency communications, this framing has a critical caveat: in a disaster the grid is usually the first thing to fail. A node that depends solely on mains power will go dark in exactly the incidents the mesh exists to serve. For any node that must survive a grid-down event, treat mains as primary-with-battery-backup at best, and prefer solar + battery for nodes whose whole purpose is grid-down resilience. Mains is "reliable" only for normal-day uptime, not for disasters.

Safety: Any work on the 120/240 V AC side - adding a circuit, an outdoor outlet, or hard-wiring a supply - can be lethal and almost always requires a licensed electrician. Permit requirements vary by jurisdiction; check your local code. AC branch-circuit conductors must be sized per NEC (14 AWG for a 15 A circuit, 12 AWG for a 20 A circuit) regardless of the small load the node draws - never use thin wire on a branch circuit. The low-voltage DC guidance below applies only downstream of a listed AC adapter or power supply.

When to Use Mains Power

For any of the above that has an emergency-communications role, pair mains with battery backup sized for the expected outage (see Battery Backup, below) - a node's value during a disaster is exactly when grid power is most likely gone.

Power Supply Requirements by Device

Input requirements below follow each board's published documentation (Meshtastic hardware docs and the respective vendor datasheets, as of 2026-06-08). The current figures are minimums for a single node; confirm against your specific board revision.

DeviceInputPower Supply Needed
Heltec V3, V45V USB-CAny 5V USB-C charger, minimum 1A
LilyGo T-Beam, T-Deck5V USB-C or Micro USBAny 5V USB charger, minimum 1A
RAK WisBlock (RAK19007)5V USB or battery5V USB-A charger or 5V regulated supply
Station G215V USB-C PDUSB-C PD charger supporting 15V, ≥20W output (e.g. 15V/2A)
Any node with LiPoBattery + chargerPower the charger circuit; see device documentation

Station G2 Power Requirements

The Station G2 requires 15V USB-C Power Delivery. This is a specific PD negotiation - the charger must support 15V PD output, not just 5V. The manufacturer specifies a USB-C PD adapter that supports the 15V PD protocol with a maximum output power of 20W or more (i.e. ≥20W, e.g. 15V/2A). Compatible chargers include:

A 5V USB charger plugged into the Station G2 will not provide enough power. The device may appear to power on but will behave erratically or fail to transmit at full power.

Battery Backup for Mains Installations

For mission-critical nodes on mains power, a battery backup (UPS function) maintains operation during power outages. Match the backup capacity to the outage you actually need to survive: small UPS modules give only a few hours, which covers brief utility blips but NOT disaster-length outages, which routinely run days to weeks after major storms, wildfires, or earthquakes. For genuine grid-down resilience, size battery backup in days, or use solar + battery so the node self-recharges. Options:

Weatherproofing Mains-Powered Outdoor Nodes

If the node is outdoors on mains power, weatherproofing requirements are the same as for solar nodes:

Cable Run Considerations

For nodes mounted at height (rooftop, tower, pole), the cable run from power to the node may be significant. At 5V, voltage drop over long cables is a real concern. The voltage-drop figures below assume a modest node load of about 500 mA; drop scales with current, so a higher-draw node (e.g. ~1A during Wi-Fi/transmit) sees roughly double these values:

Cable RunCable GaugeVoltage Drop at ~500mAAction
<5m24 AWG USB cableNegligible (at ~0.5–1A)Standard USB cable fine
5 - 15m22 AWG or better0.3 - 0.9V (at ~0.5–1A)Use thicker cable or boost supply voltage
>15m18 AWG or higher, or 12V supplySignificant with 5VRun 12V and use a 12V→5V DC-DC converter at the node

For long cable runs, running 12V DC (lower current for same power, less voltage drop) and using a small buck converter at the node end is more efficient than running 5V USB over a long distance. (This 12V/24V/18V guidance is for low-voltage DC runs only - not AC mains branch circuits, which must follow NEC conductor sizing.)

Lightning Protection for Mains-Powered Sites

Mains-powered outdoor nodes are vulnerable to both direct lightning strikes and power line surges. Protect with:

Wired & Mains Power

AC Mains Power for Permanent Node Installations

For fixed infrastructure nodes at permanent sites with grid power access, AC mains power is the lowest-maintenance power solution for routine uptime, eliminating battery replacement cycles and enabling higher-power configurations. It is not the most reliable option in an emergency, however — the grid is commonly the first thing to fail in a disaster. Pair any mission-critical mains node with battery (and ideally solar) backup sized for the outage length you must survive.

Safety warning — AC mains can be lethal. Working on 120/240 V AC mains and breaker panels can kill you, and mistakes are unforgiving. AC mains and branch-circuit work should almost always be done by, or under the supervision of, a licensed electrician. Ensure proper equipment grounding/bonding of the enclosure and mast (NEC 250.x). This page describes the hardware involved, but it is not a substitute for a qualified electrician.

Power Supply Selection

Most ESP32/nRF52 LoRa mesh nodes regulate to 3.3V internally and accept 5V via USB or 3.7V from a single lithium cell. For AC-powered installations, you need a reliable AC/DC converter:

USB Wall Adapters

The simplest option for indoor nodes:

DIN Rail Power Supplies

For professional installations in electrical enclosures or server racks:

PoE (Power over Ethernet)

For nodes at locations with Ethernet infrastructure (commercial buildings, outdoor fixtures with Cat5e runs):

UPS Integration for Grid-Powered Nodes

Even grid-powered nodes benefit from battery backup:

Outdoor AC Power Runs

Running power to an outdoor enclosure requires weatherproof wiring:

Wired & Mains Power

Power-over-Ethernet for Outdoor Node Deployments

Power over Ethernet (PoE) is an excellent choice for outdoor nodes at sites with structured cabling infrastructure. It combines power delivery and network connectivity in a single cable, simplifying installation and enabling remote management.

PoE Standards

StandardMax Power (at PSE)Typical UseCommon in
IEEE 802.3af (PoE)15.4WIP cameras, VoIP phonesMost infrastructure
IEEE 802.3at (PoE+)30WPTZ cameras, APsModern switches
IEEE 802.3bt (PoE++)Type 3 = 60W; Type 4 = 90W (≈71W delivered at the powered device)Laptops, high-power APsNewer switches
Passive PoE (non-standard)VariesLow-cost IP cameras, some APsUbiquiti older hardware

The 802.3bt maximum is 90 W at the power-sourcing equipment (Type 4), not 100 W — "100 W PoE" is a marketing rounding, not the IEEE spec figure.

For mesh nodes, IEEE 802.3af is more than sufficient. Most nodes consume 1-5W.

Active vs. passive PoE — not interchangeable. Standard (802.3af/at/bt) PoE negotiates voltage between the switch and the device (roughly 44 - 57 V) and is safe for compliant gear. Passive PoE simply puts a fixed voltage (often 24 V or 48 V) on the cable with no negotiation, and can damage equipment if mismatched. Match injector, splitter, and node carefully — a passive 24 V injector paired with a splitter that expects active 48 V may deliver no power or fry the node.

Maximum Cable Run Distance

PoE follows the Ethernet 100m (328 ft) cable run limit. Choose by distance:

Note: independent of distance, a fiber optic break between the building and the node is also the strongest lightning isolation option (see below) because fiber is dielectric — consider it on any outdoor run in a high-lightning area, not only for long runs.

Lightning Protection for PoE Runs

An Ethernet cable run to an outdoor node creates a lightning risk - the cable can couple surge energy into your equipment:

Power Consumption Reference

Power Consumption Reference

Power Consumption by Platform

Understanding your node's actual power consumption is essential for correctly sizing a solar system. The current figures below are representative community benchmarks - always measure your own node, since values vary significantly by firmware version, radio activity, transmit-power setting, and configuration. Use one consistent figure per platform across your sizing calculations.

ESP32-based nodes

ESP32 nodes have higher baseline power draw than nRF52 devices but offer WiFi and faster processing. As a planning figure, treat an always-on optimized ESP32 (Heltec V3) node as drawing ~40-80 mA average (higher with WiFi/MQTT active).

StateFactory defaultsOptimized configNotes
Idle (radio listening)~150 mA~40 mARepresentative; WiFi off, screen off, BT power reduced. LoRa RX is ~40-80 mA; measure your own
Active receive (packet processing)~180 mA~55 mABrief peak during processing (approximate)
Transmitting (high power)~280 mA~280 mATX current is set by the LoRa module's PA, not the host MCU. ~280 mA is typical for a 1 W (SX126x + external PA) module; varies with supply voltage and PA design. Confirm against your module's datasheet, and verify the TX power is legal in your region
Display on (OLED)+15 - 20 mAN/A (disabled)Disable for any unattended deployment
WiFi active+60 - 120 mAN/A (disabled)Disable unless serving TCP bridge

Key optimizations for ESP32 repeaters:

nRF52840-based nodes

nRF52840 devices are the preferred choice for solar and battery-only deployments due to dramatically lower power draw. As a planning figure, treat an optimized always-on nRF52840 (RAK4631, T-Echo) router/repeater as drawing ~10-15 mA average. Note that the LoRa RX/TX current is dominated by the SX126x radio, not the nRF52840 MCU.

StateFactory defaultsOptimized configNotes
Idle (radio listening)~25 mA~5 mARepresentative; MCU sleep current plus SX126x LoRa RX (~4.6 mA boosted). Measure your own
Active receive~30 mA~8 mAProcessing packet (approximate)
Transmitting (high power)~120 mA~120 mATX current is set by the LoRa module's PA, not the host MCU. ~120 mA is typical for a module with an internal PA (e.g. RAK4631 ~22 dBm); a 1 W external-PA module draws far more (see ESP32 table). Confirm against your module's datasheet
Deep sleep (between polls)N/A~0.2 mAWith Repeater role sleep scheduling (bare-MCU System OFF can reach ~11 µA)
GPS active+25 mAN/A (disabled)Disable GPS for repeaters (typical GPS acquisition 20-40 mA)

Key optimizations for nRF52 repeaters:

Notable hardware benchmarks

These are representative community measurements for specific boards and firmware - measure your own node before sizing a system.

DeviceMCUAverage current (repeater, optimized)Notes
Heltec Mesh Node V4ESP32-S3~40 mAWi-Fi + BT disabled (representative)
Heltec V4.3ESP32-S3~5.5 mA idleEasySkyMesh (MeshCore-based) firmware with radio LNA/FEM off; specific config only
RAK4631 WisBlocknRF52840~10 - 15 mAActive MeshCore/Meshtastic repeater (community-measured; measure your own)
LilyGo T-EchonRF52840~8 mAGPS disabled, e-ink refresh minimal (community-measured; ~3-6 mA achievable with aggressive power saving)
Station G2ESP32-S3~45 mAHigh TX power option; powered from 15 V PD (≥20 W) input

Daily energy budget calculation example

To size your battery correctly, work in two steps. First find the daily charge in amp-hours, then convert to watt-hours by multiplying by the pack's nominal voltage:

Example: RAK4631 running optimized at ~12 mA average, 24 hours, on a 3.7 V cell:

Ah per day  = (12 mA × 24 h) / 1000 = 0.288 Ah/day
Wh per day  = 0.288 Ah × 3.7 V       = ~1.07 Wh/day

Battery sizing for 5-day autonomy:
 0.288 Ah/day × 5 days = 1.44 Ah of usable capacity needed
 With 80% usable (LiFePO4 DoD): 1.44 / 0.8 = 1.8 Ah rated minimum
 Apply further derating for cold-weather capacity loss and end-of-life
 fade, plus margin for TX spikes and extra cloudy-day reserve.
 Practical recommendation: 5 - 10 Ah LiFePO4 gives a comfortable margin
 for this ultra-low-power node. For higher-draw nodes (ESP32, Pi),
 rerun the full derate chain (usable DoD × cold × end-of-life × margin)
 so the method scales correctly.

Voltage and battery type reference

The temperature ranges below are discharge/operating ranges. The charge range is narrower for lithium chemistries: never charge any lithium battery (including LiFePO4) below 0°C (32°F) without a low-temperature charge cutoff - sub-freezing charging causes lithium plating, permanent capacity loss, and a hidden internal-short fire risk. A solar node charges every day, so for cold climates require a BMS with low-temp protection or a charge controller with a battery temperature sensor.

ChemistryNominal voltageDischarge temp rangeCharge temp rangeCycle lifeRecommended for
LiFePO43.2V/cell−20°C to +60°C0°C to +45°C (no charging below freezing without BMS lockout / self-heating)2000+ cyclesAll outdoor deployments
LiPo (LiCoO2)3.7V/cell~−20°C to +60°C0°C to +45°C300 - 500 cyclesIndoor/portable only
NiMH AA1.2V/cell−20°C to +50°C0°C to +45°C500 - 1000 cyclesUltra-budget temporary nodes

LiFePO4 is strongly recommended for permanent outdoor deployments: it handles temperature extremes (within the charge-temperature limit above) and has roughly 4× longer cycle life than LiPo. It is also much more resistant to thermal runaway than LiCoO2/NMC and rarely ignites - but it is not immune: severe overcharge, an internal short, or a puncture can still cause venting or fire. Always use a BMS and proper fusing.

Power Consumption Reference

Solar Sizing Guide

A correctly sized solar system can keep your repeater running for years with minimal maintenance - an undersized system fails within days during cloudy weather. Note that batteries are a wear item: they degrade over time and need periodic replacement, connectors corrode, panels soil, and a long enough run of overcast can exceed any finite battery reserve, so plan for periodic inspection (see the cold-weather page for a seasonal maintenance schedule).

The two goals of solar sizing

  1. Enough panel to fully recharge the battery on a typical sunny day
  2. Enough battery to run through several consecutive cloudy days (autonomy period)

Step 1: Calculate daily energy consumption

Use the power consumption tables on the previous page. The official Meshtastic power figures are use-case and duty-cycle dependent, so treat the numbers below as representative examples — measure your own node. For a typical optimized nRF52 (RAK4631 / T-Echo) repeater, a representative average is ~10 - 15 mA; we use 12 mA here:

Daily consumption = 12 mA × 24 h = 288 mAh = 0.288 Ah
At 3.7V: 0.288 Ah × 3.7 V = 1.07 Wh/day

For an ESP32 (Heltec LoRa 32 V3) repeater, a representative always-on average is ~40 - 80 mA (higher with Wi-Fi/MQTT). Using 40 mA: 40 × 24 = 960 mAh = 3.55 Wh/day. A stripped, Wi-Fi-off ESP32 can be ~25 - 30 mA; a full-featured one is higher.

Step 2: Size the battery

Rule of thumb: target 5 days of autonomy (no sun) for a general node, and 5 - 7+ days for an emergency-comms node (panels don't help during multi-day overcast). Use 80% usable depth-of-discharge for LiFePO4:

Battery (Ah) = (daily consumption × 5 days) / 0.8

nRF52 example: (0.288 Ah × 5) / 0.8 = 1.8 Ah minimum → use 5 - 10 Ah for margin
ESP32 example: (0.96 Ah × 5) / 0.8 = 6.0 Ah minimum → use 10 - 20 Ah

Step 3: Size the solar panel

Do not assume 4 peak sun hours per day — that is not conservative year-round. Look up your location's worst-month (December) peak sun hours (PSH) on NREL PVWatts: winter PSH can be as low as ~1.5 in the Pacific Northwest (Seattle/Portland), ~2.5 in the Midwest (Chicago), and ~0.5 in Alaska (Anchorage). Size the panel against that winter minimum, not a year-round average. Divide by an overall system derate factor of 0.75 (covering charge-controller inefficiency, wiring, temperature, soiling, and panel degradation):

Panel (W) = (daily Wh / winter PSH) / 0.75

nRF52 example at 1.5 PSH (PNW winter): (1.07 / 1.5) / 0.75 = 0.95W minimum → a 5W panel is the safer floor for any northern deployment
ESP32 example at 1.5 PSH (PNW winter): (3.55 / 1.5) / 0.75 = 3.16W minimum → 10W panel recommended

Re-run this calculation with your winter PSH before trusting a small panel. At a year-round-average 4 PSH the nRF52 minimum would be only ~0.36W, but at a real PNW winter 1.5 PSH it is ~0.95W, and once cold derate and snow-cover risk are added a 1 - 3W panel is marginal — a 5W panel is the safer floor for northern winters.

Typical community build: $108 - $290 (prices as of 2026-06-08, volatile)

This is a generic example build for a small solar-powered LoRa mesh node. Match the battery voltage to your node's input requirement and confirm current vendor listings before purchasing:

ComponentSpecCost
Solar panel5W, south-facing, 30 - 40° tilt (match your latitude)$15 - 25
Charge controllerMPPT — e.g. Victron SmartSolar MPPT 75/10 (Victron's smallest model; ~$50 - 65, a 12V-system controller) or a generic CN3791 board (a single-cell ~6V LiPo solar charger IC — not interchangeable; match it to your battery voltage)$15 - 65
BatteryLiFePO4 10 Ah — either a 4S 12.8V pack (~128 Wh) or a single 3.2V cell (~32 Wh). These are not equivalent: at the same Ah the 12.8V pack stores ~4× the energy, and a single 3.2V cell won't power a board needing 3.3V+. Match the battery voltage to your node.$25 - 60
Radio boardRAK4631 or Heltec LoRa 32 V3 or T-Echo$18 - 75
EnclosureIP65 ABS junction box, 200×120×75mm$10 - 20
Antenna5 dBi fiberglass, N-female mount$15 - 25
MiscCable glands, silicone, wiring, and a fuse on the battery-positive lead within a few inches of the terminal (see the Wiring page)$10 - 20
Total$108 - $290

Cold-climate note: LiFePO4 must never be charged below 0 °C (32 °F) — sub-freezing charging causes lithium plating and permanent damage. The CN3791 has no low-temperature charge cutoff, so for cold/winter builds use a BMS with low-temp protection, or a charge controller with a battery temperature sensor.

Panel mounting orientation

Charge controller: MPPT vs PWM

Strongly prefer MPPT for solar-powered mesh nodes:

Power Consumption Reference

Power Consumption Measurement Methods

Accurate power consumption measurements help you design realistic solar power systems and understand why your battery life differs from specifications. This page covers practical measurement techniques for mesh node operators.

Measurement Tools

Measuring Average vs. Peak Current

A critical distinction:

USB power loggers typically measure average current; this is what you want for battery sizing. Nordic PPK2 shows both.

Measuring nRF52840 Nodes (RAK4631, T-Echo)

# Using a small sense resistor in series with the battery:
# 1. Insert a SMALL shunt (e.g. 1 ohm or 0.1 ohm) in series with the
#    battery positive terminal. Size it so the voltage drop at MAX
#    current stays under ~50-100 mV, or the drop will brown out the
#    node mid-transmit and corrupt the reading.
#    WARNING: do NOT use a 10-ohm shunt for TX-peak measurement - at
#    80-120 mA TX it drops 0.8-1.2 V, which can reset the node. A large
#    (10-ohm) shunt is only acceptable for tiny uA-mA sleep currents.
# 2. Measure voltage across the resistor with an oscilloscope or fast
#    multimeter.
# 3. I = V / R. For a 1-ohm shunt: 5mV = 5mA, 10mV = 10mA, 100mV = 100mA.
#    For a 0.1-ohm shunt: multiply the implied current by 10.

# Using Nordic PPK2 (recommended - no brownout, handles TX peaks):
# Connect PPK2 between battery and node
# Run nRF Connect Power Profiler software
# Record average current over 10-minute period for steady-state measurement
# Record peak current during LoRa transmission

Real-World Measurements (Community Data)

These are community-reported measurements - actual values depend on firmware version, traffic, and config, so measure your own node. They are consistent with the ~10-15 mA representative nRF52840 repeater figure on the platform page.

NodeModeAvg CurrentBattery Life (2500mAh)
RAK4631 MeshCore REPEATERActive repeating, 1 hop/min12-15 mA7-8 days
RAK4631 Meshtastic ROUTERActive, LongFast10-14 mA7-10 days
T-Beam ESP32 Meshtastic CLIENTActive, WiFi off35-50 mA2-3 days
T-Echo nRF52840 MeshtasticPower saving on3-6 mA17-35 days
Heltec V3 ESP32-S3Active, WiFi off25-40 mA2.6-4 days

Note: Actual power consumption varies significantly with traffic load, transmit power setting, and environmental conditions (cold weather increases current draw).

Practical Power System Design

Practical Power System Design

Solar System Sizing Guide

Goal

Size your battery to survive N cloudy days, and size your panel to fully recharge that battery against your worst-month (winter) sun — with real positive margin, never sized "exactly" to the minimum.

Step 1 - Measure Your Device's Actual Current Draw

Use a coulomb-counting USB power meter (or a meter that logs mAh/Wh) over a multi-hour test. A plain multimeter in series reads only instantaneous current and will under-estimate average draw — radios spend most of their time receiving (low current) and only briefly transmitting (high current), so you must integrate consumption over time (mAh/Wh), not read a single instantaneous value. Do not rely solely on datasheet figures — real-world draw depends on firmware, radio duty cycle, and accessories.

Representative average current values (measure your own; these are examples, not specs):

DeviceAvg Current
ESP32 repeater (Heltec V3, no display, BT/Wi-Fi off)~40 - 80 mA (light traffic toward the low end; default/higher-traffic configs higher)
nRF52840 repeater (RAK4631 / T114), RX-mode average~10 - 15 mA (aggressive power-saving firmware can reach ~7.5 mA)
Pi Zero 2W gateway (idle/light load)~100 - 150 mA at 5V (an active gateway under Wi-Fi traffic can exceed 150 mA)
Pi 3B+ gateway (idle)~300 - 400 mA at 5V (a busy gateway draws 500 mA+, peaking near 950 mA under load)

Step 2 - Calculate Daily Energy

Work in watt-hours so device voltage is explicit. Daily energy: Wh/day = average current (mA) × 24 h × system voltage (V) ÷ 1000. To get amp-hours at a given bus voltage, divide Wh/day by that voltage. (mA × h alone gives Ah at the device's own voltage — you must multiply by voltage to get Wh, and account for voltage when sizing a battery at a different bus voltage.)

Example: a 60 mA ESP32 repeater on a 3.7 V single-cell bus = 60 × 24 × 3.7 ÷ 1000 ≈ 5.3 Wh/day, which is ~1.4 Ah/day at 3.7 V. If you instead power it from a 12 V LiFePO4 pack through a buck converter, the same 5.3 Wh/day is only ~0.44 Ah/day at 12 V, plus converter losses.

Step 3 - Size the Battery for Cloudy Days (with margin)

Multiply daily energy by the number of consecutive no-sun days you must survive. For general installs plan 3 - 5 days of reserve; for emergency-comms nodes plan 5 - 7+ days, because panels contribute nothing during a multi-day overcast or snow-covered stretch.

Example (5.3 Wh/day ESP32, 5-day reserve): 5.3 Wh/day × 5 days = 26.5 Wh of usable reserve needed.

For LiFePO4, plan to 80% depth of discharge for longevity — usable capacity = rated × 0.80. Sizing the pack exactly to the minimum leaves zero margin and ignores self-discharge, BMS/converter losses, cold-temperature capacity loss, and aging. Add real margin — roughly 1.3 - 2× the bare minimum. For the 5-day ESP32 case above (~26.5 Wh usable need ≈ a ~33 Wh pack at 80% DoD), step up to a ~50 - 65 Wh pack (e.g. an 8 - 10 Ah pack on a 6.4 V or 12.8 V bus) rather than sizing it razor-thin.

Step 4 - Size the Solar Panel

A solar panel produces roughly its rated wattage for a number of "peak sun hours" (PSH) per day. Do not assume a flat "4 PSH year-round." Use your location's winter PSH from NREL PVWatts: northern-US winter is only ~1 - 2.5 PSH (Seattle/Portland ~1.5, Chicago ~2.5, Anchorage ~0.5). Size the panel against the worst-month PSH and size the battery for cloudy-day reserve.

Energy harvested: Wh/day = panel watts × PSH × derate, where the overall derate factor is 0.75 (it lumps controller, wiring, temperature, and soiling losses). To convert to amp-hours at the battery, divide by the battery charging voltage. For a PWM controller, current into the battery is roughly the panel's Imp (PWM clips panel Vmp to battery voltage); for MPPT, use the power form (panel W × PSH × derate) ÷ battery charging voltage, since MPPT converts power rather than clipping voltage.

Example: a 5 W panel at a winter minimum of 2 PSH →
5 W × 2 h × 0.75 = 7.5 Wh/day harvested
That still covers a ~5.3 Wh/day ESP32 repeater, but with thin margin and no allowance for consecutive overcast days. At a northern latitude, step up to a 10 W panel for reliable winter recharge.

Step 5 - Account for Worst-Case Latitude and Season

Latitude >45° (northern US, Canada) in winter may have only ~1 - 2.5 peak sun hours — and that figure describes clear winter days. During storms, prolonged overcast, and snow cover, real harvest can fall to near zero for days at a time. Size the panel for the winter minimum and size the battery for 5 - 7+ consecutive no-sun days at high latitude. Check and clear snow from panels in winter.

Quick Reference Table

Device currents below are representative receive-mode/idle figures (measure your own). The mA values are at each device's own input voltage; the Ah/day column is computed at that voltage. When powering from a higher-voltage battery (e.g. 12 V LiFePO4) through a converter, convert via watt-hours and add converter loss. Battery and panel columns already include margin for cloudy-day reserve and winter PSH.

Device Avg mA Ah/day (at device V) Recommended Battery Recommended Panel
nRF52840 repeater ~12 mA 0.29 Ah @ device V 3 - 5 Ah LiFePO4 3 W minimum
ESP32 repeater ~60 mA 1.4 Ah @ device V 8 - 10 Ah LiFePO4 5 - 10 W
Pi Zero gateway (idle) ~125 mA @ 5V 3.0 Ah @ 5V (≈1.4 Ah/day at 12V + loss) 15 - 20 Ah LiFePO4 20 W
Pi 3B+ gateway (idle) ~350 mA @ 5V 8.4 Ah @ 5V (≈3.8 Ah/day at 12V + loss; active load draws more) 40 Ah LiFePO4 50 W
Practical Power System Design

Charge Controller Selection and Wiring

Why You Need a Charge Controller

Solar panels produce unregulated voltage - a nominally "12 V" panel can output up to 22 V open-circuit. A charge controller protects the battery from overcharge, manages the multi-stage charge profile (bulk, absorption, float), and in many cases provides a protected load output to prevent deep discharge.

PWM vs. MPPT

PWM (Pulse Width Modulation)

Simple and cheap. The controller connects the panel more or less directly to the battery and chops the current. Efficient only when the panel's operating voltage is close to the battery voltage. Fine for small, well-matched systems where cost matters more than harvest efficiency.

MPPT (Maximum Power Point Tracking)

Continuously sweeps the panel's voltage-current curve to find the operating point that yields maximum power output. Typically delivers 10 - 30% more energy than PWM, especially in cool or partly-cloudy conditions, or when panel voltage is significantly higher than battery voltage. MPPT recovers the most when the panel's Vmp is significantly higher than the battery voltage; PWM suits panels whose Vmp is close to the battery voltage. Recommended for any challenging installation.

Recommendations for LoRa Mesh Nodes

Small systems: 5 W panel + 3.7 V LiPo or small LiFePO4

A dedicated solar LiPo charging board with built-in MPPT is the simplest and cheapest approach. Examples:

These handle cell-level charging directly and fit neatly into a small enclosure alongside the node. Note: these small charger ICs have no low-temperature charge cutoff — never charge any lithium chemistry below 0 C (32 F), and add a BMS with low-temp protection or a controller with a battery temp sensor for cold-climate builds.

Medium systems: 10 - 20 W panel + 12 V LiFePO4

A dedicated MPPT controller is warranted. Good options at modest cost:

Wiring Sequence

Always follow this order to protect the controller:

  1. Connect battery to controller first
  2. Connect panel to controller
  3. Connect load to controller

Disconnect in reverse order: load → panel → battery.

LiFePO4 Charge Profile

LiFePO4 uses a different charge profile from lead-acid. Key voltages per cell (4S = 12.8 V nominal):

For a 4-cell (12 V nominal) pack: absorption = 14.4 V (range 14.2 - 14.6 V), float = 13.5 V (range 13.5 - 13.6 V). Do not float a LiFePO4 pack at 14.4 V. Also do NOT equalize LiFePO4.

Warning: Most cheap PWM controllers are factory-calibrated for lead-acid (14.4 - 14.8 V absorption, with a ~13.5 - 13.8 V float). Using lead-acid absorption settings on LiFePO4 can overcharge and damage the cells. Verify that your controller has a LiFePO4 mode or use a controller specifically designed for LiFePO4.

Load Output and Low-Voltage Disconnect (LVD)

Many charge controllers have a dedicated "load" terminal that automatically disconnects the load when the battery drops below a programmable voltage. Connect your node to this terminal rather than directly to the battery. Set the operating LVD to ~3.0 V/cell (a conservative recommended value; the acceptable range is roughly 2.8 - 3.0 V/cell):

This operating LVD is distinct from the hard BMS undervoltage cutoff (~2.5 - 2.7 V/cell, ~10 - 10.8 V for a 4S pack). The conservative 12.0 V LVD leaves reserve before the BMS cell-undervoltage cutoff and prevents deep discharge, which is a primary cause of premature LiFePO4 cell death.

Fusing

Always fuse the battery positive lead as close to the battery terminal as practical (ABYC: within ~7 inches). A short circuit without a fuse can dump hundreds of amps through wiring and cause a fire. Use automotive blade fuses. Size the fuse to protect the WIRE, not the load: the fuse rating must be at or below the ampacity of the smallest conductor it protects, AND at least ~125% of the continuous load current. Choose the next standard fuse size that satisfies both conditions. Never simply use "2× the load" or "the next size above the wire's ampacity."

Example: a node drawing 500 mA peak - a 2 A fuse on the battery lead is fine, because 2 A is above ~125% of the load and well within the ampacity of typical hookup wire. Always confirm the chosen fuse is at or below the conductor's ampacity.

Practical Power System Design

Sizing a Solar System for Your Climate

Solar panel sizing depends heavily on your geographic location. The same 5W panel produces dramatically different energy in Portland, Oregon vs. Phoenix, Arizona. This guide walks through climate-specific sizing calculations.

Peak Sun Hours by Region

Peak Sun Hours (PSH) is the number of hours per day when solar irradiance averages 1,000 W/m². It's the key variable in solar sizing calculations.

RegionWinter PSHSummer PSHAnnual Average PSH
Phoenix, AZ4.57.56.0
Los Angeles, CA4.06.05.2
Denver, CO3.86.55.1
Dallas, TX3.56.55.0
Atlanta, GA3.25.54.5
Chicago, IL2.55.54.0
Seattle, WA1.55.53.5
Portland, OR1.55.53.3
Anchorage, AK0.56.03.0

PSH source: values are conservative sizing-design figures derived from NREL PVWatts / NSRDB station data for representative cities in each region; look up your exact site in PVWatts before finalizing a build. Winter columns reflect the worst-month average (e.g. December). The "Annual Average" column is a design figure for rough comparison — NREL's pure annual mean runs a little higher in cloudy locations (e.g. Seattle's true annual mean is ~4.9 PSH, but its winter worst-month near 1.5 is what governs sizing). Always size the panel against the winter PSH, not the annual average. Phoenix winter is shown at a conservative 4.5; some sources put it nearer 5.0–5.5. (as of 2026-06-08)

Design for the worst month: Use winter PSH for sizing, not annual average. In most of the Northern Hemisphere, a system sized for the December PSH minimum will have surplus power in other months — but you still need battery autonomy for multi-day cloudy spells, and in snowy regions you must account for snow covering the panel.

Solar Sizing Calculation

# Formula: Panel watts needed = Daily energy need / (PSH * derate factor)
# Daily energy (Wh/day) = average current (mA) * system voltage (V) * 24 h / 1000
# Derate factor (~0.75) covers controller + wiring + temperature + soiling losses.
# This is a CLEAR-DAY average; the PSH figure assumes typical sun. Multi-day
# overcast is handled by BATTERY reserve (see Battery Sizing), not panel size.

# Example: RAK4631 (nRF52840) repeater in Chicago winter
# Representative average draw ~10-15 mA; measure your own node.
Daily energy: 15mA avg * 3.7V * 24hrs / 1000 = 1.33 Wh/day
PSH (Chicago winter, per NREL PVWatts): 2.5 hours
Derate factor: 0.75

Panel size = 1.33 Wh / (2.5 h * 0.75) = 0.71W

# This 0.71W is the clear-winter-day MINIMUM. A 1W panel meets the load only on
# a clear day and gives no headroom for the multi-day overcast that is normal in
# Chicago Nov-Feb. Cloudy-day survival comes from battery reserve, not panel size.
# Use at least a 5W panel (a ~7x safety multiple over the clear-day minimum, to
# recharge quickly between storms) AND size the battery for 5-7 no-sun days.

# For Raspberry Pi room server + RAK4631 in Chicago winter:
Pi Zero 2 W avg: 300mA * 5V = 1.5W = 36 Wh/day  # representative; verify your load
RAK4631 avg: 15mA * 3.7V = 0.055W = 1.33 Wh/day
Total: 37.33 Wh/day

# Computed minimum:
Panel needed: 37.33 / (2.5 * 0.75) = 19.9W
# Choose the next-larger standard size for margin -> use 25W panel minimum.

Battery Sizing for Autonomy

# Formula: Battery capacity (Ah) = Daily energy * Autonomy days / (usable fraction * voltage)
# Usable fraction (plan-to depth of discharge for longevity):
#   LiFePO4 ~0.80 (cells can do 0.80-0.90), LiPo/Li-ion ~0.80, SLA/lead-acid ~0.50
# For emergency-comms nodes, target 5-7+ days of autonomy: panels do not help
# during multi-day overcast, so the battery must carry the whole no-sun stretch.

# RAK4631 repeater with 3-day autonomy, 3.7V LiPo:
Battery Ah = (1.33 Wh/day * 3 days) / (0.80 * 3.7V)
 = 3.99 Wh / 2.96
 = 1.35 Ah minimum
# 3 days is a general minimum; for an emergency-comms node, size for 5-7 days.

# A 10Ah LiPo gives: 10Ah * 0.80 * 3.7V / 1.33 Wh/day = ~22 days of autonomy.
# That is a comfortable reserve for this very-low-draw node, but the reserve is
# only useful if the battery is kept above freezing and the panel can recharge it
# between cloudy spells. Do not treat panel size and battery reserve as
# interchangeable - the battery carries no-sun days, the panel recharges between them.

# For Pi + RAK at 3-day autonomy, 12V LiFePO4:
Battery Ah = (37.33 * 3) / (0.80 * 12V) = 11.7 Ah minimum
# Use a 20Ah battery for comfortable margin (and 5-7 day reserve if emcomm-critical).

Seasonal Charging Strategies

Practical Power System Design

Charge Controller Selection and Configuration

The charge controller is the brain of your solar power system - it manages battery charging, prevents overcharge and deep discharge, and in MPPT controllers, optimizes power extraction from the solar panel. Choosing the right charge controller significantly affects system efficiency and longevity.

PWM vs. MPPT: Which to Choose

FeaturePWMMPPT
Efficiency70-75%93-97%
Cost$5-20$30-150
Solar panel voltage matchingMust match battery voltage closelyWorks with any panel voltage above battery voltage
Best for small systemsUnder 5W with matched panel/battery5W+ or when panel voltage exceeds battery voltage
Cold weather performanceGoodExcellent (harvests more from cold-weather voltage boost)

Recommendation: Use MPPT for any permanent deployment. The efficiency gain pays for the cost premium within 1-2 years in most climates, and MPPT controllers last longer and provide better battery protection.

Victron SmartSolar MPPT 75/10: The Standard Choice

The Victron SmartSolar 75/10 ($45-55, as of 2026-06-08) is the most popular choice for LoRa mesh solar nodes:

# Victron MPPT configuration for LiFePO4 battery (12V system):
Charge algorithm: Li-Ion
Absorption voltage: 14.4V (range 14.2-14.6V; do not float here)
Float voltage: 13.5V
Low voltage disconnect: 12.0V (operating LVD for longevity, ~10-20% SoC remaining; this is NOT 80% DOD protection. The hard BMS under-voltage cutoff is lower, ~10-10.8V)
Temperature compensation: Disabled for LiFePO4 (temp compensation is a lead-acid feature)

# For LiPo (3.7V single cell, 4.2V max):
# Use a TP4056 Li-Ion charger module, not a Victron
# Victron 75/10 is designed for 12V+ systems

Load Output vs. Direct Battery Connection

Most MPPT controllers have a "load output" - a switched output that turns off automatically when the battery voltage drops below a set threshold:

Best practice: Connect your node through the load output for automatic low-voltage protection. Connect any monitoring equipment (Pi) directly to the battery with its own cutoff relay if the Pi exceeds the load output current limit.

Solar Panel Tilt Optimization

# A good annual-average tilt is approximately equal to your latitude.
# (A common refinement is latitude * ~0.76 per NREL studies, since the
# true annual optimum is somewhat below latitude.) The latitude * 0.9
# + offset formulas you may see elsewhere are season-specific (winter),
# not the annual-maximum rule.

# Annual-average examples (tilt ~ latitude):
# Portland (45.5°N): ~45 degrees from horizontal
# Dallas (32.8°N): ~33 degrees
# Phoenix (33.4°N): ~33 degrees
# Chicago (41.8°N): ~42 degrees

# For winter optimization (maximize December-February output):
# Tilt angle = latitude + 15 degrees

# For snow-shedding (prevents accumulation that blocks panel):
# Tilt angle = 45 degrees minimum; 60 degrees ideal in heavy snow climates

Battery Chemistry and Selection

Comparing LiFePO4, LiPo, and lead acid battery chemistries for LoRa deployments, plus sizing methodology and BMS protection.

Battery Chemistry and Selection

LiFePO4 vs LiPo vs Lead Acid for LoRa Deployments

Choosing the right battery chemistry for a LoRa mesh node is one of the most consequential hardware decisions you will make. The chemistry determines cycle life, safe operating temperature, charging behaviour, physical size, and total cost of ownership. This page provides a deep technical comparison of the three chemistries most commonly encountered in field deployments: Lithium Iron Phosphate (LiFePO4), Lithium Polymer (LiPo), and valve-regulated lead acid (VRLA/AGM).

Chemistry Overview

Property LiFePO4 LiPo (LiCoO₂/NMC) Lead Acid (AGM/VRLA)
Nominal cell voltage 3.2 V 3.7 V 2.0 V per cell (12 V = 6 cells)
Fully charged voltage 3.65 V 4.2 V 12.7 - 12.8 V (12 V battery)
Fully discharged cutoff 2.5 V (3.0 V recommended) 3.0 V (3.2 V recommended) 10.5 V (50% DoD recommended)
Usable energy density (Wh/kg) 90 - 120 Wh/kg 150 - 200 Wh/kg 30 - 40 Wh/kg
Cycle life (to 80% capacity) 2,000 - 4,000 cycles 300 - 500 cycles 200 - 500 cycles (50% DoD)
Self-discharge per month 1 - 3% 2 - 5% 3 - 5%
Thermal runaway risk Very low; cell-to-cell propagation is unlikely but not impossible under severe abuse in tightly packed packs High - flammable electrolyte Low - explosive H₂ gas if overcharged
Operating temperature (discharge) −20 °C to +60 °C −10 °C to +45 °C −15 °C to +50 °C (capacity drops >30% at 0 °C)
Charging temperature minimum 0 °C (lithium plating below) 0 °C ≈−20 °C at reduced rate, only if not frozen (never charge a frozen lead acid battery — it can rupture)
Typical cost (USD, approximate, as of 2024) $0.25 - $0.50 / Wh (cells); $0.60 - $1.20 / Wh (pack) $0.15 - $0.30 / Wh (pouch) $0.10 - $0.20 / Wh
Cost per cycle (at rated life) $0.0002 - $0.0006 / Wh / cycle $0.0006 - $0.0010 / Wh / cycle $0.0008 - $0.0020 / Wh / cycle

Cycle Life in Depth

LiFePO4 is the standout performer for longevity. A quality cell from EVE, CALB, or Headway will reliably deliver 2,000 cycles at 100% depth of discharge (DoD) and can exceed 4,000 cycles at 80% DoD per the manufacturers’ published cycle-life-vs-DoD curves (e.g. the EVE LF280K datasheet). At a 1-cycle-per-day charge rate typical of solar nodes, this translates to 5 - 11 years of service life.

LiPo cells (using LiCoO₂ or NMC cathodes as found in hobby packs and phone batteries) are rated for 300 - 500 full cycles. With daily cycling on a solar node, these cells will reach end-of-life in under 18 months. Permanent deployments in LiPo are therefore not economical.

Lead acid (AGM) ratings of 200 - 500 cycles assume 50% DoD. Discharging deeper (toward 80% DoD) shortens cycle life substantially; the cycle-life-vs-DoD relationship is nonlinear and varies by battery, so consult the manufacturer’s cycle-vs-DoD curve. Because solar systems routinely deep-discharge during extended cloudy periods, real-world lead acid life in solar applications is often only 2 - 3 years.

Temperature Performance

This is where LiFePO4 dominates cold climates. At −20 °C, LiFePO4 retains approximately 70 - 80% of rated capacity on discharge - usable, though not ideal. LiPo cells at −10 °C typically retain only 50 - 60% of rated capacity and internal resistance rises sharply, causing voltage sag under load. At −20 °C many LiPo cells effectively stop functioning. Lead acid loses approximately 30 - 40% of rated capacity at 0 °C, and at −20 °C a fully charged lead acid battery delivers only 40 - 50% of its 25 °C rating.

Critical charging constraint: Both LiFePO4 and LiPo must not be charged below 0 °C. Charging lithium cells in freezing temperatures causes metallic lithium plating on the anode, permanently reducing capacity and creating an internal short-circuit hazard. Solar systems in freezing climates must incorporate a low-temperature charge cutoff. Many commercial LiFePO4 BMS modules include this feature.

Safety

LiFePO4 uses an olivine phosphate cathode that is inherently stable. Even in nail-penetration and overcharge abuse tests, LiFePO4 cells typically vent mildly without fire or explosion. LiFePO4 is far more resistant to thermal runaway than LiPo/NMC, but it is not immune — still use a BMS and proper fusing. Its stability makes it much safer than LiPo for enclosed installs, but you must still observe ambient temperature limits (charge only between 0 °C and 45 °C — attics can exceed charge-temperature limits and cold walls can fall below the 0 °C charge floor), provide thermal management, and follow local fire/building codes.

LiPo cells with NMC or LiCoO₂ cathodes store significantly more energy per unit mass and release it rapidly in fault conditions. Thermal runaway in a LiPo pack can reach temperatures of several hundred °C and produces toxic hydrogen fluoride (HF) gas. Never install LiPo packs in sealed enclosures without adequate ventilation or thermal fusing. For unattended LoRa repeater deployments in public locations, LiPo represents a meaningful liability.

Lead acid produces hydrogen gas during overcharge. In sealed VRLA/AGM formats the recombination rate is high, but a faulty charge controller can still cause pressure build-up and case rupture. AGM batteries should not be enclosed in airtight boxes.

Voltage Curves and State-of-Charge Estimation

LiFePO4 has an extremely flat discharge curve - the cell voltage sits near 3.2 - 3.3 V for the majority of its capacity range, dropping steeply only in the last 10 - 15% of charge. This makes voltage-based SoC estimation imprecise in the mid-range, but the flat curve is beneficial because the node's voltage regulator sees a near-constant input for most of the discharge cycle.

SoC (%) LiFePO4 OCV (V/cell) LiPo OCV (V/cell) 12 V Lead Acid OCV (V)
100 (resting)3.35 - 3.454.18 - 4.2012.70 - 12.80
903.35 - 3.384.07 - 4.1012.50 - 12.60
803.32 - 3.343.98 - 4.0212.40 - 12.50
703.30 - 3.333.88 - 3.9212.30 - 12.40
503.27 - 3.303.73 - 3.7712.10 - 12.20
303.22 - 3.253.60 - 3.6511.90 - 12.00
203.18 - 3.223.55 - 3.6011.75 - 11.90
103.10 - 3.183.45 - 3.5511.50 - 11.75
0 (cutoff)2.5 - 3.03.0 - 3.210.5 - 11.2

All OCV values are resting (settled) open-circuit voltage with no load applied for at least 30 minutes. These are rest voltages, not charge/absorption voltages — a freshly-charged LiFePO4 cell sits near 3.6 V while charging but settles to roughly 3.35 - 3.45 V at rest. Under load, voltages will be lower due to internal resistance. Note that voltage-based SoC estimation is especially unreliable across the LiFePO4 mid-range because of the cell’s flat 3.25 - 3.30 V plateau, where small voltage changes span a large capacity range. For LiFePO4, Meshtastic firmware reports battery percentage based on voltage thresholds; refer to the telemetry page in this book for specific ADC configuration.

Specific Product Recommendations

LiFePO4 - Recommended Products

LiPo - Acceptable for Short-Deployment or Prototype Use

Lead Acid - Only Where Weight/Cost Dominates

Summary Recommendation

For any unattended LoRa repeater or mesh node intended for permanent or semi-permanent deployment, LiFePO4 is the correct choice. The superior cycle life, wide temperature tolerance, and thermal safety profile outweigh its higher per-Wh cost compared to LiPo. Lead acid remains viable only when cost is the dominant constraint and the installation allows for routine (annual) battery replacement. LiPo is acceptable for short-term field deployments, handheld nodes, and prototyping, but should not be used in sealed enclosures or unattended permanent installations.

Battery Chemistry and Selection

Battery Sizing for LoRa Mesh Nodes

Correctly sizing the battery for a solar-powered LoRa node prevents two failure modes: undersizing (the battery dies overnight or during cloudy periods) and oversizing (wasted cost and weight). This page walks through a systematic methodology and provides worked examples for three common node types.

Step 1 - Measure Actual Current Draw

Never rely solely on datasheet figures. Real-world current draw depends on firmware configuration, peripherals, GPS lock cycles, LoRa transmit duty cycle, and whether deep sleep is used. Measure with a USB power meter (e.g., UM25C, AT34) or an inline current shunt (e.g., INA219 module on the 3.3 V rail).

Take measurements in three states:

  1. Transmit peak: Current during an active LoRa TX burst (typically 80 - 120 mA at 3.3 V for SX1276-based modules at +17 dBm).
  2. Receive / idle: Firmware running, radio in RX mode, no TX. This is the whole-node draw (MCU + radio + regulator + peripherals), typically 30 - 80 mA on ESP32-class boards — the SX1276 radio alone is only ~11 - 14 mA in RX, the rest is the MCU and supporting circuitry. Confirm against a board-level power measurement for your platform.
  3. Deep sleep (if used): Microcontroller and radio in lowest power state, highly design-dependent (0.01 - 10 mA). An nRF52840 board with clean power management can reach low microamps, whereas an ESP32 board with a leaky regulator may sit in the milliamp range — measure your specific board (e.g. nRF52840 vs ESP32 T-Beam) rather than assuming.

Calculate a weighted average current based on the fraction of time spent in each state. The example below is illustrative, using an assumed duty cycle rather than measured T-Beam data — substitute your own measured currents and duty cycle. For a Meshtastic router node set to 5-minute heartbeat with 20-second sleep cycles:

Illustrative example (assumed duty cycle): T-Beam v1.1 (ESP32 + SX1276 + NEO-6M GPS)
 TX (0.5% of time at 120 mA) = 0.6 mA average
 RX active (79.5% at 80 mA) = 63.6 mA average
 Deep sleep (20% at 3 mA) = 0.6 mA average
 ─────────────────────────────────────────────────
 Weighted average ≈ 64.8 mA

Step 2 - Calculate Daily Watt-Hours

Multiply the average current (in amps) by the system voltage and by 24 hours. Use the voltage the node actually runs at when you measured the current — for a single-cell board that is ~3.7 V, even if the battery pack you eventually buy is a 12.8 V LiFePO4 pack. Energy (Wh) is conserved across the voltage conversion: you compute daily Wh at the node's running voltage, then later convert the required Wh to pack Ah using the pack's nominal voltage (Step 6). Do not mix the 3.7 V cell figure with a 12.8 V pack in the same multiplication.

Daily_Wh = I_avg(A) × V_system(V) × 24 h

Example: 64.8 mA × 3.7 V × 24 h = 5.75 Wh/day

If your system runs at 5 V (e.g., USB-powered node) or 12 V (e.g., Raspberry Pi gateway), substitute the appropriate system voltage.

Step 3 - Determine Required Autonomy Days

Autonomy is the number of consecutive days with no solar input (full cloud cover, snow burial, north-facing shade) the battery must sustain the node. Select based on your climate and criticality:

Deployment Type Recommended Autonomy Rationale
Sunny desert / Southwest US3 - 5 daysExtended low-sun periods are rare
Pacific Northwest / Northeast US5 - 7 daysMulti-day overcast events common Nov - Mar
High alpine / polar7 - 14 daysSnow burial possible; winter darkness
Non-solar (mains backup only)0.5 - 1 dayBridge a brief power outage

Step 4 - Calculate Raw Battery Capacity

Raw_Wh = Daily_Wh × Autonomy_days

Example (5 days autonomy): 5.75 Wh × 5 = 28.75 Wh

Step 5 - Apply Derating Factors

Real batteries deliver less than their nameplate capacity due to temperature, aging, and depth-of-discharge limits. Apply the following derating multipliers. The temperature factors below are conservative planning estimates for a −10 °C average low, not values pulled from a specific datasheet curve — check your battery's own capacity-vs-temperature curve where one is published:

Factor LiFePO4 LiPo Lead Acid
Max recommended DoD80% (use 0.80)80% (use 0.80)50% (use 0.50)
Temperature derating (cold climate, −10 °C avg low — conservative estimate)0.850.700.65
End-of-life capacity (design to still work at EOL)0.800.800.80
Combined derating factor0.80 × 0.85 × 0.80 = 0.5440.80 × 0.70 × 0.80 = 0.4480.50 × 0.65 × 0.80 = 0.260

Cold-charge warning: Never charge any lithium chemistry — including LiFePO4 — below 0 °C (32 °F); sub-freezing charging causes lithium plating and permanent damage. In cold climates require a BMS with low-temperature charge cutoff or a charge controller with a battery temperature sensor. (LiFePO4 may still discharge down to about −20 °C.)

Required_Wh = Raw_Wh / Combined_derating_factor

Example (LiFePO4, cold climate): 28.75 / 0.544 = 52.8 Wh → round up to 53 Wh

Step 6 - Add a 20% Safety Margin and Convert to Ah

Final_Wh = Required_Wh × 1.20 (20% safety margin)
Final_Ah = Final_Wh / V_nominal_pack

Example (LiFePO4, 12.8 V nominal pack):
 Final_Wh = 52.8 × 1.20 = 63.4 Wh
 Final_Ah = 63.4 / 12.8 = 4.95 Ah → use a 6 Ah pack

Worked Examples

Example A - ESP32 LoRa Repeater (T-Beam, indoor/outdoor enclosure)

PlatformTTGO T-Beam v1.1 (ESP32 + SX1276 + AXP192 PMIC)
Measured average current65 mA at 3.7 V = 0.240 Wh/h
Daily consumption5.76 Wh/day
Target autonomy5 days (Pacific NW)
Raw requirement28.8 Wh
After derating (LiFePO4, cold)28.8 / 0.544 = 52.9 Wh
With safety margin63.5 Wh → use 6 Ah at 12.8 V (76.8 Wh nominal)
Recommended batteryBioenno BLF-1206A (6 Ah, 12.8 V LiFePO4) or equivalent

Example B - nRF52840 Ultra-Low-Power Node (RAK4631 + solar harvest)

Note on chemistry: the LiPo sizing below is shown only to illustrate the LiPo derating column. For an unattended outdoor or permanent solar deployment, LiPo is not recommended — use a LiFePO4 (or a protected Li-ion) cell instead, per the battery-chemistry, LiFePO4-vs-LiPo, and cold-weather pages. The 8 mA average is an assumed measurement; the duty cycle behind it (mostly deep sleep with brief RX) must be confirmed on your own board.

PlatformRAK WisBlock Core RAK4631 + RAK12500 GPS (GPS duty-cycled off)
Measured average current8 mA at 3.7 V = 0.0296 Wh/h (assumed, with aggressive sleep — confirm duty cycle on your board)
Daily consumption0.71 Wh/day
Target autonomy7 days
Raw requirement4.97 Wh
After derating (LiPo, moderate climate — illustration only)4.97 / (0.80 × 0.80 × 0.80) = 9.71 Wh
With safety margin11.65 Wh → at 3.7 V = 3.15 Ah → use a 3.5 Ah cell
Recommended batteryEEMB LP905060 3.7 V 3500 mAh (meets the 3.15 Ah requirement). Note: Adafruit #328 is a 2500 mAh cell — below the 3.15 Ah needed here, so prefer the 3500 mAh option for outdoor use.

Example C - Raspberry Pi Zero 2W + SX1302 HAT Gateway

Gateway note: a gateway is the highest-value node in an incident (it bridges to internet/MQTT), so the 3-day / no-cold-derate figures below are a desert best-case, not a default. For a gateway, use at least 5-day autonomy even in sunny climates, and do not apply a 1.00 temperature factor unless you have confirmed the battery never sees sub-freezing nights. The 620 mA average is a representative estimate (Pi Zero 2W idles ~150 - 250 mA, the SX1302 HAT adds load) — measure your own build.

PlatformRPi Zero 2W + RAK2287 SX1302 HAT + LTE modem
Measured average current620 mA at 5 V = 3.1 W = 3.1 Wh/h (representative estimate — measure your build)
Daily consumption74.4 Wh/day
Target autonomy5 days (use ≥5 days for a gateway, even in sunny climates)
Raw requirement372 Wh
After derating (LiFePO4: 0.80 DoD × 0.85 temp × 0.80 EOL = 0.544)372 / 0.544 = 684 Wh
With safety margin821 Wh → at 12.8 V = 64 Ah → use a 100 Ah pack
Recommended batteryBattle Born BB10012 (100 Ah, 12 V LiFePO4) or 2× EVE LF50K-class packs in parallel

Rule of Thumb Quick Reference

These figures are computed from the Step 1-6 methodology (5-day autonomy, LiFePO4, with DoD/cold/EOL derate and a 20% margin). They are planning floors — run your own numbers from your measured daily Wh.

Node Type Typical Daily Wh Minimum Battery (5-day, LiFePO4)
nRF52840 sleepy node0.3 - 1.5 Wh~1 - 5 Ah @ 3.7 V
ESP32 Meshtastic router (no GPS)3 - 5 Wh~7 - 12 Ah @ 3.7 V (or ~2 - 4 Ah @ 12.8 V)
ESP32 + GPS always-on5 - 10 Wh~12 - 25 Ah @ 3.7 V (or ~4 - 7 Ah @ 12.8 V)
Pi Zero 2W gateway60 - 90 Wh~50 - 75 Ah @ 12 V
Pi 4 + LTE gateway100 - 150 Wh~80 - 120 Ah @ 12 V
Battery Chemistry and Selection

Battery Management Systems and Protection Circuits

A Battery Management System (BMS) is the electronic circuit that protects lithium cells from conditions that cause permanent damage or fire. Understanding what a BMS does - and detecting when one has failed - is essential for maintaining reliable solar-powered LoRa nodes.

What a BMS Does

A BMS monitors cell voltage, current, and temperature in real time and opens a protection MOSFET to disconnect the battery when it detects an out-of-bounds condition. The primary protection functions are:

Protection Function Trigger Condition Consequence if Missing
Overvoltage protection (OVP) Cell voltage > 3.65 V (LiFePO4) or 4.25 V (LiPo) Electrolyte decomposition, capacity fade, fire (LiPo)
Undervoltage protection (UVP) Cell voltage < 2.5 V (LiFePO4) or 3.0 V (LiPo) Copper dissolution, cell permanently damaged (cannot accept charge)
Overcurrent protection (OCP) Discharge current > rated maximum (the trip point is set per the cell's rating; 1C - 3C continuous is illustrative, not universal — some cells rate higher) Cell heating, electrolyte venting, cable fire
Short-circuit protection (SCP) Near-instantaneous high current spike Cell fire, explosion
Over-temperature protection (OTP) Cell temp > rated cutoff (commonly ~60 - 65 °C on charge; varies by module, and some BMS modules omit temperature sensing entirely) Accelerated aging, thermal runaway risk in LiPo
Low-temperature charge inhibit Cell temp < 0 °C Lithium plating on anode, internal shorts, reduced cycle life
Cell balancing (multi-cell packs only) Voltage delta between cells > 20 - 50 mV Weakest cell reaches cutoff early, reducing pack capacity

Why 18650 Cells Always Need a BMS

Bare cylindrical 18650 cells - including popular Samsung 30Q, LG HG2, and Panasonic NCR18650B - have no built-in protection. They are raw electrochemical cells. Connecting multiple 18650 cells in series or parallel without a BMS creates a serious hazard. If one cell has slightly lower capacity (as all real cells do), it will be over-discharged before the others during a deep cycle, permanently damaging it. On charge, it will be over-charged, potentially causing thermal runaway.

Even for a single 18650 used to power an ESP32 node via a TP4056 charging module, the TP4056 only protects during charging — it does not protect the cell from over-discharge (UVP) or over-current (OCP) when the node is drawing power. The cheapest safe fix is to buy an 18650 holder module that already includes a protection chip (look for "DW01A + FS8205A" or "with protection board" in the listing). A DW01A + FS8205A dual-MOSFET protection IC circuit (commonly integrated into 18650 holder modules sold on AliExpress) is the minimum acceptable protection for bare-cell usage.

Built-in BMS on LiPo Pouch Cells

Consumer LiPo pouch cells sold for drones, hobby use, and electronics (Adafruit, SparkFun, EEMB, Polymer Lithium) typically include a small protection circuit module (PCM/PCB) laminated between the cell and the outer casing. This PCM provides OVP, UVP, and OCP - but usually not balancing (since these are single-cell packs) and rarely temperature protection. The PCM is designed for the specific cell and chemistry, with cutoff voltages pre-set at the factory.

When purchasing LiPo cells, verify the datasheet explicitly states "with protection circuit" or "PCM included." Bare (unprotected) LiPo cells are also sold, typically labeled "battery" without "protection" in the listing. Bare cells require an external BMS.

LiFePO4 Packs - BMS Inclusion Varies

LiFePO4 prismatic cells (EVE, CALB, Winston) are sold bare. DIY packs require a separate BMS module. Common choices (prices approximate, as of 2026-06-08 — verify against the manufacturer's current product page):

BMS Module Cell Configuration Continuous Current Features Approximate Cost
Daly 4S 40A BMS 4S LiFePO4 (12.8 V) 40 A OVP, UVP, OCP, balancing, UART $8 - 12
JBD/Overkill Solar 4S 60A 4S LiFePO4 60 A Bluetooth app, UART, active balancing option $20 - 35
Ant BMS 4S 100A 4S LiFePO4 100 A CAN bus, SOC display, temp sensor $30 - 50
Texas Instruments BQ76920 3S - 5S Li-Ion/LiFePO4 Configurable IC-level, requires MCU interface; used in custom designs $4 - 8 (IC only)

Packaged LiFePO4 batteries from Bioenno, Dakota Lithium, and Battle Born include an integrated BMS that protects the cells. The integrated BMS does not replace external wiring protection: you still need an inline fuse on the battery-positive lead close to the terminal to protect the cable between the battery and the load from a short circuit, and you must use a correct charger and charge voltage.

Cell Balancing in Multi-Cell Packs

In a series-connected pack, cells must stay at nearly equal voltage. Over hundreds of cycles, manufacturing variations cause cells to drift apart. A balancing circuit periodically bleeds charge from higher-voltage cells (passive balancing) or shuttles charge from high to low cells (active balancing) to keep the pack uniform.

Passive balancing is simpler and more common. The BMS bleeds excess energy as heat through a resistor. Balance current is typically 50 - 200 mA, which is adequate for slowly drifting cells in solar nodes.

Active balancing (capacitor or inductor-based charge shuttling) is more efficient but more expensive. For LoRa nodes with <100 Ah packs, passive balancing from a Daly or JBD BMS is entirely sufficient.

Signs of BMS Failure

Parallel Cell Balancing Considerations

When connecting cells in parallel (e.g., 2P or 4P for higher capacity), cells must be at the same voltage before paralleling. Connecting cells with a voltage difference of >100 mV causes a large equalisation current spike that can damage cells and weld connectors. Always charge all cells to the same voltage (within 10 mV) before forming a parallel group.

Parallel cells naturally balance themselves during use because they share the same terminal voltage. Balancing circuits are only required for series-connected groups in a larger series-parallel pack (e.g., 4S2P). The BMS sees each parallel group as one "cell" and balances between groups.

Solar Panel Selection and Installation

Panel technologies, Wp ratings, geographic sizing, mounting hardware, orientation, and charge controller selection.

Solar Panel Selection and Installation

Choosing a Solar Panel for LoRa Nodes

Solar panel selection involves matching the panel's output to the node's energy needs while accounting for real-world efficiency losses, geographic location, and physical mounting constraints. This page covers panel technology, rating systems, derating factors, geographic sizing, and wiring configurations.

Panel Technologies

Technology Efficiency Range Temperature Coefficient Low-Light Performance Physical Best Use Case
Monocrystalline silicon 17 - 22% typical (up to ~24% for premium cells) −0.35% / °C above STC Good Rigid, glass-covered, aluminum frame Fixed installations, roof/pole mounts
Polycrystalline silicon 15 - 18% −0.40% / °C above STC Good Rigid, glass-covered, aluminum frame Budget fixed installations
Amorphous silicon (thin-film) 6 - 8% −0.20% / °C above STC Excellent (diffuse light) Flexible or glass, no frame Curved surfaces, low-light climates
CIGS thin-film 12 - 14% −0.32% / °C above STC Very good Flexible or rigid Curved surfaces where efficiency matters

For most LoRa node deployments, monocrystalline panels are the correct choice. Their higher efficiency means a smaller, lighter panel for the same power output - important when mounting on a mast or in a small enclosure. Thin-film flexible panels are useful when the panel must conform to a curved surface (conduit mast, cylindrical enclosure) or when severe vibration makes rigid glass panels impractical.

Understanding Wp (Watt-Peak) Ratings

Panel power is rated in Watts-peak (Wp) at Standard Test Conditions (STC): 1000 W/m² irradiance, 25 °C cell temperature, AM 1.5 spectrum. Real-world conditions deviate from STC in several important ways:

Real-World Adjustment Factors

Most rows below are losses (values below 1.0). One row — spectral mismatch in overcast — can slightly exceed 1.0 for amorphous panels (a small gain, not a loss). Do not blindly multiply every row together as if they were all losses; apply the spectral-mismatch row only to the panel technology it describes.

Adjustment Factor Typical Value Explanation
Temperature (hot day) 0.80 - 0.90 Cell temp in direct sun reaches 50 - 75 °C. Monocrystalline loses ~0.35%/°C above 25 °C. At 60 °C: 1 − (35 × 0.0035) = 0.878.
Dirt / dust / pollen 0.90 - 0.97 Uncleaned outdoor panel loses 3 - 10% annually. Clean panels every 6 - 12 months.
Wiring and connection losses 0.97 - 0.99 Resistance in MC4 connectors and cable runs. Use AWG 10 - 12 for runs over 5 m.
Charge controller harvest 0.65 - 0.97 This is the fraction of available panel energy delivered to the battery, not the controller's own conversion efficiency. PWM ties the panel to battery voltage, so a 18 V (12 V-nominal) panel charging a 13 V battery delivers roughly 65 - 75% of its rated energy — the mismatch is the loss, not the controller. MPPT tracks the panel's maximum-power point and delivers ~93 - 97%, recovering more when panel Vmp is well above battery voltage and in cold or low light. See Charge Controllers page.
Partial shading 0.50 - 1.00 Even 5% shadow on a cell in a string can reduce total output by 50%+ (bypass diodes mitigate but don't eliminate).
Spectral mismatch (overcast) — can exceed 1.0 1.0 - 1.05 for amorphous; ~0.95 for mono A gain, not a loss, for amorphous: amorphous panels outperform mono in overcast because the diffuse-light spectrum favors their bandgap. Apply only to the matching panel technology.
Combined typical derating (MPPT, clean, no shade) 0.70 - 0.80 Use 0.75 as a conservative planning factor

Peak Sun Hours by US Region

Peak sun hours (PSH) is the equivalent number of hours per day at 1000 W/m² irradiance that delivers the same daily energy as the actual variable irradiance. It is the single most important geographic variable in panel sizing.

Region Example Cities Annual Avg PSH Winter Worst-Month PSH
Southwest DesertPhoenix, Las Vegas, El Paso6.0 - 7.04.5 - 5.5
Mountain WestDenver, Salt Lake City, Albuquerque5.5 - 6.53.5 - 4.5
SoutheastMiami, Atlanta, Dallas5.0 - 6.04.0 - 5.0
Midwest / Great PlainsKansas City, Minneapolis, Chicago4.5 - 5.52.5 - 3.5
Mid-Atlantic / NortheastNYC, Philadelphia, Boston4.0 - 4.82.0 - 3.0
Pacific NorthwestSeattle, Portland, Eugene3.5 - 4.21.5 - 2.5 (Seattle worst-month ~1.5)
Alaska (Anchorage)Anchorage3.0 - 4.00.5 - 1.5

Always size for the worst-month PSH, not the annual average, to ensure year-round operation. Use a single worst-month PSH value per location across the whole book; the values here are representative and should be confirmed against NREL PVWatts for your exact site.

Panel Sizing Calculation

Required_Wp = Daily_Wh / (PSH_worst_month × overall_derating)

Example: 5.75 Wh/day node, Seattle (1.5 PSH worst-month winter), MPPT controller (0.95), other derating (0.85):
 Combined derating = 0.95 × 0.85 = 0.808
 Required_Wp = 5.75 / (1.5 × 0.808) = 5.75 / 1.212 = 4.74 Wp → use a 5 Wp panel (sized for the worst month; pair with several days of battery reserve for multi-day overcast)

Panel Sizing by Latitude (Rule of Thumb)

Latitude (°N) Panel Wp Required per 1 Wh/day node load Notes
25 - 30° (South Florida, Texas)0.5 - 0.7 WpYear-round high sun
30 - 37° (Southeast, Southwest)0.6 - 0.9 WpGood solar resource
37 - 42° (Mid-Atlantic, Midwest)0.9 - 1.3 WpModerate winter derating
42 - 48° (New England, Northwest)1.3 - 2.0 WpPoor winter sun
48 - 65° (Northern US, Alaska)2.0 - 5.0 WpSize for worst month or use large battery

Wiring: 5 V USB Charging vs 12 V Systems

5 V USB Charging (small panels, direct LiPo charging)

Panels rated 5 - 6 V open-circuit (e.g., 0.5 - 2 W "USB solar panels") are designed to pair with TP4056 or CN3791 LiPo charger ICs. These work only in full sun - the panel voltage drops below the charger's minimum input at partial cloud cover. Acceptable for supplemental trickle charging of small nodes but not reliable primary power. Note neither the TP4056 nor the CN3791 has a low-temperature charge cutoff, so for cold-climate builds add a BMS or charge controller with low-temp protection.

12 V Nominal Systems

Panels rated 18 V open-circuit (12 V nominal, e.g., 10 W, 20 W, 40 W monocrystalline) are the standard for serious solar deployments. These pair with a dedicated charge controller (PWM or MPPT) that regulates voltage down to the battery charge voltage. MC4 connectors are the industry standard for these panels.

Series vs Parallel Configuration

Configuration Effect on Voltage Effect on Current When to Use
Series (panels in series) Voltages add (2× 18 V = 36 V) Current stays same Higher voltage charge controllers; longer cable runs (less current = thinner wire)
Parallel (panels in parallel) Voltage stays same Currents add (2× 5 A = 10 A) Same voltage system but need more current; partial shading (each panel has independent MPPT)

For small LoRa deployments (5 - 40 Wp), a single panel in direct connection to a 12 V charge controller is the simplest and most reliable approach.

Panel Power Dimensions Best For Approximate Cost
Voltaic P110 (monocrystalline)2 W, 6 V132 × 91 mmnRF52840 trickle charge, USB-C output$25
Newpowa NPA10-12MBK (mono)10 W, 12 V nominal340 × 235 mmESP32 nodes, primary solar$20 - 25
Renogy RNG-100D-SS (mono, compact)100 W, 12 V nominal~1062 × 531 mmPi gateway installations$85 - 100
Flexible mono ~50 W (verify SKU/datasheet)~50 W, 12 V nominalper datasheetCurved mast mounting, marineconfirm current price
Flexible CIGS ~30 W (verify SKU/datasheet)~30 W, 12 V nominalper datasheetCurved enclosures, portableconfirm current price
Solar Panel Selection and Installation

Solar Panel Mounting and Orientation

The mechanical installation of a solar panel is as important as the panel selection itself. A correctly sized panel pointed in the wrong direction, partially shaded, or insufficiently secured will fail to meet its energy budget. This page covers orientation rules, mounting hardware options, shading avoidance, and special-purpose installations.

South-Facing Tilt: The Fundamental Rule

In the Northern Hemisphere, solar panels produce maximum annual energy when facing true south (azimuth 180°) and tilted at an angle approximately equal to the installation latitude. This is not magnetic south - use a compass corrected for magnetic declination or use a sun-path tool (NREL's PVWatts, Solargis) to confirm true south orientation at your specific location. This page is the canonical reference for panel tilt and orientation in this book. The single rule of thumb used throughout: optimal fixed tilt = latitude; winter-optimized tilt = latitude + 15°. The example tilt values in the table below are approximate and should be confirmed against NREL PVWatts output for your specific site.

Latitude (°N) Optimal Fixed Tilt Winter-Optimized Tilt Example Locations
25°25°~40°Miami FL, Key West FL
30°30°~45°Houston TX, Jacksonville FL
35°35°~50°Los Angeles CA, Memphis TN
40°40°~55°Denver CO, Columbus OH, NYC
45°45°~60°Minneapolis MN, Portland OR
47°47°~62°Seattle WA
61°~58°~73°Anchorage AK

Values are approximate (fixed ≈ latitude, winter ≈ latitude + 15°) and should be confirmed against NREL PVWatts for the exact location. Above roughly 55°N the annual optimum is typically a few degrees below latitude, which is why Anchorage's fixed value is shown slightly under its latitude.

For fixed-tilt installations in climates with significant winter operation (Pacific NW, New England, Mountain states), set the panel at approximately latitude + 15° to capture more low winter sun. This sacrifices some summer production but improves the worst-month (winter) performance critical for battery sizing.

A ±15° deviation from true south reduces annual yield by only 2 - 3%. A ±30° deviation reduces it by about 7 - 8%. East or west orientations (90° from south) reduce yield by approximately 20%.

Fixed Tilt vs Seasonal Adjustment

Single-axis seasonal adjustment (adjusting tilt twice a year - summer and winter) improves annual yield by 5 - 10% compared to a fixed optimal tilt. For most unattended LoRa deployments, this tradeoff is not worth the maintenance visit. The exception is a high-latitude deployment (above 45°N) where winter sun angles are very low and a steep winter tilt meaningfully improves worst-month performance.

Mounting Hardware Options

Pole and Mast Mounts

Mast mounting is ideal for LoRa repeaters that are already on a mast or tripod. The same structure that supports the LoRa antenna can support the solar panel, reducing site footprint. Two common approaches:

J-Mounts (Roof Rafter Mounts)

J-mounts bolt through the roof into rafters and hold the panel parallel to the roof surface, adding 2 - 4 inches of standoff for airflow. IronRidge, Unirac, and Quick Mount PV are the main suppliers. J-mounts fix the panel tilt to the roof pitch - generally acceptable for slopes between roughly 15° and 40° facing south. Note that on shallow slopes the panel sits well below latitude tilt, so annual yield is reduced compared with a latitude-tilt mount.

Flush Roof Brackets

For panels mounted flat on a low-slope roof or equipment enclosure lid, industrial hook-and-loop adhesive mounts (for example VELCRO Brand Industrial Strength or 3M VHB tape) or through-bolted HDPE brackets work for small panels up to about 40 Wp. Adequate ventilation between panel and surface is critical - at a cell temperature of 75 °C (about 50 °C above the 25 °C STC rating), a panel loses roughly 15 - 20% of its rated Wp, assuming a typical temperature coefficient of about −0.35 to −0.40%/°C.

Ground-Mount Frames

For larger gateway installations (100 - 400 Wp), commercial aluminum ground-mount frames (for example IronRidge's ground-mount / Osprey PowerRack line, or kits from MT Solar or Tamarack) provide adjustable tilt and, with proper engineering, wind resistance up to about 140 mph. The actual wind rating depends entirely on the specific anchoring, soil, and panel - do not assume the frame alone guarantees a high-wind rating; engineer the foundation for your site. Concrete ballast blocks or driven ground screws provide the foundation.

Keeping Panels Shadow-Free Throughout the Day

Shade is the single largest cause of underperforming solar nodes. A shadow covering just one cell in a 36-cell string drops the entire string's output by 50 - 70% (partial bypass diode protection reduces this but cannot eliminate it).

  1. Use the Sun Surveyor app or SOLMETRIC SunEye to measure shade at the proposed mounting location at both 9 AM and 3 PM local solar time on the worst day (December 21). Any obstruction that casts shadow during these hours will significantly reduce winter output.
  2. Trees grow. A tree 30 ft away that doesn't shade the panel today may shade it in 5 years. Add 30% to the estimated shadow cone radius when evaluating obstructions.
  3. Nearby LoRa antennas, lightning rods, conduit runs, and fence posts can all cast thin shadows that track across the panel during the day. Route everything above or well to the side of the panel.

Clearing Snow

In snow climates, steep tilt angles (above 45°) allow snow to slide off naturally. Panels tilted below 30° will accumulate snow and may be buried for days. Solutions:

Bird Deterrents

Bird droppings on panels cause significant localised shading. Common solutions:

Marine and Boat Mounting for Floating Nodes

Floating LoRa nodes on buoys, boats, or floating platforms require stainless steel or anodized aluminum hardware throughout. Standard steel J-mounts will rust within one season in saltwater. Key requirements:

Solar Panel Selection and Installation

Charge Controllers: PWM vs MPPT

The charge controller sits between the solar panel and the battery. It regulates current flow to prevent battery overcharge and manages the charging profile. Two fundamentally different control topologies are in common use: Pulse Width Modulation (PWM) and Maximum Power Point Tracking (MPPT). Selecting the wrong type typically costs 10 - 30% of available solar harvest (larger in cold or cloudy conditions, smaller when the panel's Vmp is close to the battery voltage) or can damage batteries.

How PWM Controllers Work

A PWM charge controller connects the solar panel directly to the battery through a switch (MOSFET or relay). When the battery voltage is low, the switch is fully on - the panel feeds the battery at whatever current the panel can supply at the battery's current voltage. As the battery approaches full charge, the controller begins pulsing the switch on and off at a duty cycle proportional to the difference between target and actual battery voltage. This reduces average current flow, preventing overcharge.

The critical limitation of PWM: the panel is forced to operate at battery voltage, not at its own maximum power point (MPP). A 12 V nominal panel has an MPP voltage (Vmpp) around 17 - 18 V but the battery sits at 12 - 14.6 V. The panel is clamped to the lower voltage, operating well off its power curve. This is the root cause of PWM's lower efficiency. PWM is well-matched only where the panel's Vmp is close to the battery voltage (e.g. a "12 V" PWM-type panel on a 12 V battery); the larger the gap between panel Vmp and battery voltage, the more an MPPT controller gains.

How MPPT Controllers Work

An MPPT controller inserts a DC-DC buck (or boost) converter between the panel and battery. The controller continuously monitors the panel's voltage and current output, computing P = V × I. It then incrementally adjusts the panel's operating point (by changing the duty cycle of the converter's switching transistor) to locate and track the voltage at which the panel delivers maximum power - the Maximum Power Point.

Because the converter can step voltage down (or up) at high efficiency, the panel operates at its optimal Vmpp (~17 - 18 V for a 12 V panel) while the battery receives the current it needs at battery voltage. This voltage step-down comes with a compensating current increase, delivering more total watts to the battery.

Efficiency Comparison

Parameter PWM Controller MPPT Controller
Typical conversion efficiency 65 - 75% of panel STC rating 93 - 97% of panel STC rating
Panel voltage utilisation Poor - clamped to battery voltage Excellent - panel at MPP
Cold weather advantage None Significant - cold panels have higher Voc/Vmpp, MPPT captures this gain
Partial cloud benefit None Moderate - can still track the shifted MPP under clouds
Typical cost (5 - 20 A range) $5 - 15 $20 - 60
Quiescent current consumption 5 - 15 mA 10 - 30 mA
Complexity / failure modes Low - simple circuit Moderate - switching converter can fail; firmware-dependent tracking

When the Difference Matters

Small Panels (under ~10 Wp)

For very small panels (2 - 5 Wp paired with a small LiPo and an ESP32 or nRF52840 node), the absolute watt improvement from MPPT is tiny - perhaps 1 - 2 W - and the MPPT controller's own quiescent current (20 - 30 mA = 0.07 - 0.11 Wh/h) becomes a significant fraction of the total load. For these micro-installations, a dedicated LiPo solar charger IC such as the CN3791 (switching MPPT-style solar charger IC, ~$1) or TP4056 (simple linear CC/CV, no MPPT, ~$0.30) is the appropriate solution. Full-featured MPPT controllers add cost, quiescent drain, and complexity with minimal return. Note: neither the TP4056 nor the CN3791 has a low-temperature charge cutoff - see the cold-climate warning below before using either in a build that may charge below freezing.

Medium Panels (10 - 100 Wp)

This is where MPPT begins to pay for itself. Using the efficiency figures in the table above, a 20 Wp panel with a PWM controller delivers approximately 14 W to the battery in ideal conditions (20 Wp × 0.70). The same panel with an MPPT controller delivers approximately 19 W (20 Wp × 0.95) - about a 36% improvement. (Here "W" is the actual delivered power; "Wp" is reserved for the panel's STC rating.) Over a 5-day winter week at Seattle's 1.8 PSH average:

PWM:  20 Wp × 0.70 × 1.8 PSH × 5 days = 126 Wh
MPPT: 20 Wp × 0.95 × 1.8 PSH × 5 days = 171 Wh
Difference: 45 Wh - roughly an extra day of autonomy

# Caveat: 1.8 PSH is an AVERAGE winter day. During a genuine multi-day
# Pacific-NW storm, harvest from BOTH controller types drops toward zero,
# so MPPT's advantage cannot be relied on to carry you through the storm.
# MPPT helps you RECOVER faster between storms; the BATTERY RESERVE - not
# the controller - must cover the no-sun stretch itself.

Large Panels (over 100 Wp) and Cold Climates

MPPT is the only correct choice. In cold climates (below freezing), panel Vmpp rises significantly - a 36-cell panel that has Vmpp = 17 V at 25 °C may have Vmpp = 20 - 21 V at −10 °C. A PWM controller cannot exploit this; an MPPT controller captures all of it.

Cold-climate charge cutoff (critical safety item): In sub-freezing conditions, ensure the LiFePO4 BMS or charge controller inhibits charging below 0 °C (32 °F). Never charge any lithium chemistry - including LiFePO4 - below 0 °C: sub-freezing charging causes lithium plating, leading to permanent capacity loss and a hidden internal-short fire risk. (Discharge is fine to much lower temperatures - LiFePO4 discharges to about −20 °C.) Use a BMS with low-temperature charge protection, or a charge controller with a battery temperature sensor. Bare charger ICs such as the TP4056 and CN3791 have no low-temperature cutoff, so add external low-temp protection for any cold-weather build.

LVD Settings for LiFePO4 Packs

Low Voltage Disconnect (LVD) is the battery voltage at which the charge controller cuts power to the load, protecting the battery from over-discharge. Setting LVD correctly for LiFePO4 is critical - these batteries have flat discharge curves that make "soft" voltage warnings less useful. Two distinct thresholds matter and should not be confused: the operating LVD (the load-disconnect you set for longevity, ~12.0 V / ~3.0 V per cell) and the BMS hard under-voltage protection (UVP) (an absolute floor, ~10.0 - 10.8 V / ~2.5 - 2.7 V per cell) that should only ever trip as a last-resort safety cutoff.

Parameter 12 V LiFePO4 (4S, 12.8 V nominal) 12 V Lead Acid (12 V nominal)
Operating LVD (load disconnect)~12.0 V (3.0 V/cell, ≈ 10 - 20% SoC remaining)11.4 - 11.8 V (≈ 40 - 50% SoC)
BMS hard UVP (absolute floor)10.0 - 10.8 V (2.5 - 2.7 V/cell) - last-resort cutoff only10.5 - 11.0 V
LVD reconnect voltage (hysteresis)12.8 - 13.0 V (well above the operating LVD to avoid relay chatter)12.2 - 12.5 V
Absorption charge voltage14.2 - 14.6 V (3.55 - 3.65 V/cell; ~14.4 V typical)14.4 - 14.8 V
Float voltage13.5 - 13.6 V (3.375 - 3.40 V/cell; use ~13.5 V)13.2 - 13.8 V
EqualizationDo NOT equalize LiFePO415.0 - 16.0 V periodically

SoC-from-voltage caveat: LiFePO4's discharge curve is very flat through the mid-range, so the percentage-of-charge values mapped to each voltage above are approximate - treat them as rough guidance, not a precise fuel gauge. Do NOT float a LiFePO4 pack at 14.4 V / 3.60 V per cell: that holds the pack near 100% and accelerates aging - use ~13.5 V. The reconnect/hysteresis thresholds shown are sensible defaults; confirm against your specific charge controller's manual (e.g. Victron, Epever, Morningstar) before relying on them. (as of 2026-06-08)

Critical: Many PWM controllers sold as "12 V" ship with default lead-acid charge profiles. If used with LiFePO4, the float voltage will be too low and the absorption voltage may be set for gel/AGM lead acid (14.1 V) which undercharges LiFePO4. Always verify and configure the LiFePO4 profile. Renogy Rover, Victron BlueSolar, and Epever controllers have configurable user-defined battery profiles.

Common Charge Controllers for Small LoRa Deployments

IC-Level (for integration into custom PCBs)

IC Type Input Voltage Max Charge Current Chemistry Cost
TP4056Linear CC/CV (no MPPT)4.5 - 8 V1 ALiPo (4.2 V cutoff)$0.25 - 0.40
CN3791MPPT-style, switching~4.5 - 28 V (PV)Up to ~4 A (IC capability; typical hobby boards limit to ~2 A via the sense resistor / external FET)LiPo (4.2 V cutoff)$0.80 - 1.20
BQ24650MPPT, synchronous buckUp to 28 VUp to 10 AConfigurable (Li, LiFePO4)$2 - 4
SPV1040MPPT, boost converter0.3 - 5.5 V (per STMicro SPV1040 datasheet)1.8 A outLiPo, NiMH~$1.50 - 2.50 (approx)

Notes: the CN3791's 2 A figure commonly quoted for hobby breakout boards is a board-specific limit set by the sense resistor and external FET, not the IC's maximum (the IC supports constant current up to ~4 A and a wide PV input range). SPV1040 input range and output current are per the STMicro SPV1040 datasheet; IC prices are approximate. (as of 2026-06-08)

Module-Level (drop-in for 12 V systems)

Module Type Panel Watts (max) Features Cost
Renogy Wanderer 10A PWMPWM120 WLCD, LVD, USB output$20
Epever Tracer AN 10A MPPTMPPT130 WRS485 MODBUS, LCD, configurable profiles$35 - 45
Victron SmartSolar 75/10MPPT145 W @ 12 VBluetooth, VictronConnect app, LiFePO4 profile$55 - 65
Genasun GVB-8 (8A MPPT)MPPT110 WPurpose-built LiFePO4 profiles, waterproof$75 - 90
SRNE ML2430 30A MPPTMPPT390 W @ 12 VLCD, multiple battery profiles, USB$45 - 55

For most LoRa gateway installations (20 - 100 Wp), the Victron SmartSolar 75/10 is the recommended choice: Bluetooth monitoring allows verifying charge behaviour remotely, and the LiFePO4 profile is well-tested. For budget-constrained multi-node deployments, the Epever Tracer AN 10A provides RS485 telemetry for integration with Grafana monitoring stacks.

Power System Wiring and Safety

Complete wiring diagrams, fusing, wire gauge selection, weatherproof connectors, and battery telemetry monitoring.

Power System Wiring and Safety

Wiring a Solar Power System for LoRa Repeaters

Proper wiring is the difference between a node that runs reliably for years and one that fails intermittently or becomes a fire hazard. (Battery life, not wiring, sets the maintenance interval — plan battery replacement per the chemistry's cycle life.) This page covers the complete wiring path from solar panel to LoRa load, including fusing strategy, wire gauge selection, connector types, weatherproofing, and cable management inside enclosures.

System Wiring Overview

A correctly wired solar system follows this signal path:

Solar Panel(s)
 │
 ├─── [Fuse #1: Panel → Controller] ── MC4 cable to controller PV input
 │
Charge Controller (MPPT/PWM)
 │
 ├─── [Fuse #2: Controller → Battery] ── to battery positive terminal
 │
Battery Pack (LiFePO4/LiPo + BMS)
 │
 └─── [Fuse #3: Battery → Load] ── to load (LoRa node, 5V regulator, etc.)

Fuse each wire segment at its source so the fuse protects that segment. A typical solar node uses three: PV-to-controller, controller-to-battery, and battery-to-load. Do not rely on one fuse to protect dissimilar-gauge segments. Each fuse protects the wire segment between it and the next power source, limiting fault current to what the wire can safely carry. (The binding requirement in code and standards is overcurrent protection sized to protect each conductor near its source — the exact number of fuses depends on the topology; PWM vs MPPT and parallel PV strings change what is needed.)

Fusing Requirements

Segment Fuse Type Rating (for 10 W panel, 7 Ah battery) Placement
Panel → Charge controller (PV in) Blade fuse or ANL Next standard size ≥ Isc × 1.56 (here ~10 A). Optional for a single panel — see note below. Per the controller manual, typically near the panel junction box positive terminal
Charge controller → Battery Blade fuse or ANL Next standard size at or below the conductor's ampacity, and ≥ charge controller rated output × 1.25 (here ~15 A for a ~10 A controller) Within 7 inches of battery positive terminal (ABYC E-11)
Battery → Load Blade fuse or resettable PPTC 3 - 5 A (sized to wire gauge, not load) Within 7 inches of battery positive terminal

Fuse ratings are sized to protect the wire, not the load. Size the wire for at least 125% of the continuous load current, then choose a fuse at or below the wire's ampacity (the next standard size that does not exceed the conductor's ampacity, per NEC 240.4 / 240.6) so the fuse trips before the wire can be overloaded. Do not set the fuse above the wire's ampacity. ANL/bolt-down fuses are commonly used above ~30 - 40 A; MAXI blade fuses cover up to ~80 A. For small LoRa systems (under 10 A total), a waterproof inline blade-fuse holder rated for outdoor use (~$2 as of 2026-06-08) is adequate.

About the PV-side fuse (Isc × 1.56): Isc is your panel's short-circuit current, printed on the panel label. The 1.56 multiplier comes from NEC 690.8 (1.25 × 1.25). This fuse exists mainly to protect against reverse current back-fed from other parallel panel strings; a single panel feeding one controller has no other source to push reverse current, so a series PV fuse is optional for a single-panel system. For parallel strings, size it to the next standard fuse at or above Isc × 1.56 and follow the controller manual for placement.

Wire Gauge Selection

AWG Conductor Area (mm²) Max Ampacity (60 °C insulation, bundled) Typical LoRa System Use
AWG 220.33 mm²3 ASensor wiring, signal lines
AWG 200.52 mm²5 ALoad output for single ESP32 node
AWG 180.82 mm²7 ALoad output for small system (5 A load)
AWG 161.31 mm²10 ABattery-to-controller runs under 3 m
AWG 142.08 mm²15 ABattery-to-controller runs 3 - 10 m; 10 W panel to controller
AWG 123.31 mm²20 A20 - 40 W panel runs; Pi gateway battery cables
AWG 105.26 mm²30 A40 - 100 W panel runs over 5 m
AWG 88.37 mm²40 A100 W+ systems; long battery cable runs

Always use stranded copper wire with UV-resistant and temperature-rated insulation (XLPE or THWN-2 for outdoor; silicone for inside enclosures near heat). Solid wire is not suitable for mobile or vibrating installations. Use tinned copper wire in marine environments.

For voltage drop calculation in long cable runs:

Voltage_drop (V) = 2 × I (A) × R_per_meter (Ω/m) × Length (m)

Target: keep drop to less than 3% of system voltage.
For 12 V system, 3% = 0.36 V maximum drop.

Example: 5 A load, 5 m one-way run, AWG 14 (0.0083 Ω/m):
 Drop = 2 × 5 × 0.0083 × 5 = 0.415 V (3.5% - marginal, upgrade to AWG 12)

Weatherproof Connectors

MC4 Connectors (Panel Wiring)

MC4 (Multi-Contact 4 mm) connectors are the industry standard for solar panel connections. Common MC4 connectors are rated IP67/IP68, UV-resistant, up to 1000 - 1500 V DC and 30 - 40 A depending on the specific part and cable gauge (current rating scales with conductor cross-section). Never use non-MC4 connectors on the panel-side wiring - the exposed conductors in DIY terminal connections will corrode and introduce resistance. Crimp MC4 connectors with the correct MC4 crimper (not pliers) to ensure proper contact retention. MC4 pairs from different manufacturers (e.g., Stäubli vs Amphenol) are nominally cross-compatible but may have reduced IP rating when mixed - use matched pairs.

Anderson Powerpole Connectors (Load Connections)

Anderson Powerpole connectors (PP15, PP30, PP45 contacts) are the amateur radio and telecom standard for DC power distribution. They are genderless, stackable, and all three contact sizes share the same housing. Wire range is per contact: PP15 ~16 - 20 AWG, PP30 ~12 - 16 AWG, PP45 ~10 - 14 AWG. Crimp the PP30 (30 A) contact onto 12 - 16 AWG wire with a Powerpole ratchet crimper (e.g., Powerwerx TRIcrimp) or similar. ARES (Amateur Radio Emergency Service) has standardized on red (+) and black (−) 30 A Powerpoles for all portable power connections.

Other Connectors

Connector Rating Use Case
XT60~30 A continuous (60 A surge)High-current battery connections in drone/RC-derived builds
JST PH 2.0 mm2 ALiPo cell to embedded board (standard on most Adafruit/SparkFun boards)
JST XH 2.54 mm3 ASensor connections inside enclosure
Dean's Ultra T-plug30 ALegacy RC packs; avoid for new designs

Polarity Protection

Reverse polarity can instantly damage unprotected charge controllers, LoRa boards, and BMS units. Many commercial controllers and BMS units include reverse-polarity protection and survive a miswire, but do not rely on it. Before first connection, verify polarity with a multimeter: set it to DC volts, put the red probe on the wire you believe is positive and the black probe on the negative; a positive reading confirms your assignment, a negative reading means the leads are swapped. Then implement at least one of the following:

  1. Asymmetric connectors: MC4 (panel), Powerpole (load), JST (board) are all polarised - they cannot be connected backwards if crimped correctly.
  2. Schottky diode on the input: A 3 A / 40 V Schottky diode (e.g., 1N5822) in series with the positive line blocks reverse connection. It wastes ~0.3 V at light load, rising to ~0.475 - 0.5 V near its 3 A rating, and continuously dissipates that voltage drop, so it is best for low-current inputs.
  3. P-channel MOSFET reverse protection: A P-channel MOSFET (e.g., AO3401, IRF9540) provides near-zero-drop reverse polarity protection. Standard in commercial MPPT charge controller input stages.

Cable Routing and Strain Relief in Enclosures

Inside IP65/IP67 enclosures (Polycase WQ series, Bud Industries NBF, PolyBox), cables enter through compression cable glands. Rules:

Power System Wiring and Safety

Monitoring Battery State via Meshtastic Telemetry

Meshtastic and MeshCore both include power telemetry features that allow a node to report its battery voltage and charge level over the mesh network. This page covers enabling these features, configuring voltage ADC pins for different hardware, interpreting voltage as state-of-charge for LiFePO4 batteries, setting low-battery alerts, and visualising data in Grafana. (Firmware command syntax and pin details are as of 2026-06-08; verify against your installed firmware version, as Meshtastic config keys change across 2.x releases.)

Enabling Power Telemetry in Meshtastic

In Meshtastic firmware (2.x), power metrics are part of the Telemetry Module. To enable battery reporting:

Via Meshtastic Python CLI

# Install CLI: pip install meshtastic
# Set the device-metrics broadcast interval (battery level, voltage, uptime,
# and any attached power sensor). This specifically controls the DEVICE/power
# telemetry cadence, not environment-sensor metrics.
meshtastic --set telemetry.device_update_interval 300
# Sets reporting interval to 300 seconds (5 minutes)

# Verify telemetry module settings
meshtastic --get telemetry

Note: per the official Meshtastic telemetry docs, device_update_interval configures the interval (in seconds) used to send device/power metrics over the mesh. CLI key names have changed across firmware versions — if the command above is rejected, check the current key names in the Meshtastic telemetry module docs for your firmware version.

Via Meshtastic Web App or Mobile App

  1. Open the Meshtastic app and connect to your node.
  2. Navigate to Config → Module Config → Telemetry.
  3. Enable Device Metrics.
  4. Set the update interval (300 - 3600 seconds; use longer intervals for battery-powered nodes to reduce TX duty cycle).
  5. Save and reboot the node.

Once enabled, the node broadcasts a meshtastic.Telemetry protobuf packet on the default channel at the configured interval. The packet includes:

Voltage ADC Pin Configuration on Different Boards

Not all Meshtastic hardware platforms use the same pin or divider ratio for battery voltage measurement. The firmware auto-detects the board type from compile-time defines, but custom builds or off-label hardware may need manual configuration. Verify the exact pin and divider against your board's schematic before relying on these values.

Board ADC Pin (GPIO) Voltage Divider Ratio Max Measurable Voltage Notes
TTGO T-Beam v0.7 GPIO35 1:2 (100 kΩ / 100 kΩ) ~8.4 V Measures raw single-18650 LiPo voltage (divider documented in community schematics)
TTGO T-Beam v1.1 (AXP192) AXP192 PMIC register Internal PMIC ADC Reported via I²C Reads VBAT register; very accurate
TTGO LoRa32 v2.1 GPIO35 1:2 ~8.4 V Same GPIO35 divider scheme as T-Beam v0.7 (confirm on the v2.1 schematic)
Heltec WiFi LoRa 32 v3 GPIO1 (VBAT_Read) ~4.9:1 divider (390 kΩ / 100 kΩ) Single-cell LiPo (~3.0–4.2 V) You must drive ADC_Ctrl (GPIO37) low first to enable the divider, then read battery voltage on GPIO1. It is not a 1:1 / no-divider input. Reads a single LiPo cell.
RAK WisBlock RAK4631 P0.04 (AIN2) 1:2 via RAK5005-O base board ~6 V Battery sense is on P0.04 / AIN2 (not P0.05/AIN3); reads via nRF52840 SAADC. Verify the AIN index against the WisBlock schematic.
Wispr / Custom ESP32 User-defined GPIO User-defined User-defined Set in platformio.ini or via power.adc_multiplier_override config key

If the reported voltage seems incorrect, verify with a multimeter at the battery terminals. Then check power.adc_multiplier_override (confirm this key exists in your firmware version):

meshtastic --set power.adc_multiplier_override 2.0
# Multiplies the raw ADC reading by 2.0 (use for 1:2 divider boards)

Interpreting Voltage as State-of-Charge for LiFePO4

Meshtastic's built-in SoC estimation uses LiPo voltage thresholds (3.0 - 4.2 V per cell). For LiFePO4 packs, these thresholds are incorrect - LiFePO4 cells operate in the 2.5 - 3.65 V range. The firmware will report incorrect percentages unless you compensate.

Important: A LiFePO4 cell's voltage during/just after charging is much higher than its rested open-circuit voltage. The 3.60–3.65 V "100%" row below is the charge/absorb voltage; a fully charged cell that has rested settles to roughly 3.35–3.45 V. Read SoC from rested voltage, not from voltage measured under charge or load.

LiFePO4 Single-Cell (3.2 V nominal) Voltage → SoC Table

Voltage (V) Approximate SoC (%) Interpretation
3.60 - 3.65 (under charge)100%Charge/absorb voltage; rested 100% OCV is ~3.35–3.45 V
3.40 - 3.4590%High charge, near rested-full plateau
3.30 - 3.3570 - 80%Mid-range - most of usable capacity here
3.27 - 3.3050%Flat region - voltage barely distinguishable from 70%
3.22 - 3.2530%Still flat; lower usable threshold approaching
3.18 - 3.2220%Low battery - alert threshold
3.10 - 3.1810%Critical - immediate recharge needed
< 3.10<5%BMS will soon disconnect; node will shut down

4S LiFePO4 Pack (12.8 V nominal) Voltage → SoC Table

Pack Voltage (V) SoC (%)
14.2 - 14.6 (under charge)100% (end of charge; rested-full ~13.4–13.8 V)
13.6 - 13.890%
13.2 - 13.470 - 80%
13.0 - 13.250%
12.8 - 13.030%
12.4 - 12.820%
12.0 - 12.410%
< 11.8<5% (BMS cutoff imminent)

Setting Low-Battery Alerts in Meshtastic

Meshtastic does not natively send alert messages when battery drops below a threshold, but there are two approaches to implement this:

Approach 1 - Node-Red / MQTT Alert Pipeline

  1. Configure Meshtastic MQTT uplink: meshtastic --set mqtt.enabled true --set mqtt.address YOUR_BROKER_IP
  2. In Node-Red, subscribe to msh/US/+/json/LongFast/# (adjust channel name as needed).
  3. When Meshtastic JSON-encoded MQTT output is enabled, battery voltage arrives as a flat field inside the telemetry payload, e.g. msg.payload.payload.voltage (the published JSON looks like "payload": {"air_util_tx":0, "battery_level":0, "channel_utilization":0, "voltage":0}). It is not nested under decoded.telemetry.deviceMetrics — that dotted path is the protobuf-decoded object shape used by the Python API, not the MQTT JSON shape. Filtering on the wrong layer returns undefined and the alert silently never fires. Check a real sample against the Meshtastic MQTT integration docs and filter on the field below your LVD threshold.
  4. Route low-voltage events to an alert node (email, PushOver, Telegram bot).

Approach 2 - Meshtastic Python Script (Autonomous Node)

import meshtastic
import meshtastic.serial_interface
from meshtastic.mesh_pb2 import MeshPacket

iface = meshtastic.serial_interface.SerialInterface()
LOW_VOLTAGE_THRESHOLD = 3.18 # V per cell for LiFePO4 (20% SoC)

def on_receive(packet, interface):
 if "decoded" in packet and "telemetry" in packet["decoded"]:
 m = packet["decoded"]["telemetry"].get("deviceMetrics", {})
 voltage = m.get("voltage", 0)
 node_id = packet["fromId"]
 if voltage > 0 and voltage < LOW_VOLTAGE_THRESHOLD:
 print(f"LOW BATTERY: Node {node_id} at {voltage:.2f} V")
 # Send alert message on mesh
 iface.sendText(f"⚠ Low battery: {node_id} {voltage:.2f}V", wantAck=False)

iface.localNode.setOwner("MonitorNode")
iface.addReceiveObserver(on_receive)
input("Press Enter to exit\n")
iface.close()

MeshCore Telemetry Equivalent

MeshCore also reports battery telemetry, but it does not use a "node YAML configuration file." MeshCore repeater and room-server firmware is configured over USB in the web config tool, or remotely over LoRa via the companion mobile app using the Remote Management feature, and via the MeshCore CLI commands. There is no YAML config mechanism in MeshCore firmware. Use the MeshCore Repeater & Room Server CLI Reference to set the telemetry/advert interval and review available battery-reporting commands for your firmware build.

When telemetry is bridged to MQTT, Grafana can consume it via the Grafana MQTT data source plugin or via InfluxDB (Node-Red → InfluxDB → Grafana).

Graphing Battery Data in Grafana

Architecture

Meshtastic Node
 │ (MQTT telemetry JSON)
 ▼
Mosquitto MQTT Broker
 │
 ▼
Node-Red (parse JSON → extract voltage/SoC → write to InfluxDB)
 │
 ▼
InfluxDB 2.x (time-series storage)
 │
 ▼
Grafana (dashboards, alerts)

InfluxDB Line Protocol (Node-Red write node)

measurement: node_battery
tags: node_id, node_name, location
fields: voltage (float), battery_pct (int), soc_lifepo4 (float)
timestamp: nanosecond UNIX timestamp from packet

Grafana Panel Configuration

A reference Grafana dashboard for Meshtastic power monitoring can be built from the panel configuration above. (A previous version of this page referenced a specific dashboard JSON file in the Mesh America GitHub repository; that path is not yet verified to exist, so treat it as planned rather than published — build your dashboard from the configuration described here until a confirmed repository link is available.)