Range Expectations

General Guides

About those record-distance claims

LoRa record shots (hundreds of km) are real, and they are also mountaintop-to-mountaintop or balloon-to-ground stunts with perfect line of sight. They say nothing about two handhelds in a neighborhood. Marketing quotes the records; your terrain does not care.

Line of sight is the whole game

At 868/915 MHz, radio range is dominated by what sits between the two antennas. The signal needs more than a visual sightline: it needs clearance of an ellipsoid around that line (the Fresnel zone), which is tens of meters thick at mid-path on longer links. On a 10 km link at 915 MHz the mid-path clearance requirement is roughly 30 meters. Trees, buildings, and terrain inside that zone attenuate the link even when you can literally see the far end.

The radio horizon is set by antenna height: roughly 4.1 times the square root of the height in meters, in km. Some working numbers for one end (add both ends together):

This is why one well-placed node on a ridge or tall building transforms a whole area's mesh, and why a pile of ground-level nodes does not.

Honest numbers

Typical real-world reports, assuming stock-class antennas:

Terrain scatter is huge, so treat these as orders of magnitude, not promises. LoRa's saving grace is sensitivity: at slow spreading factors receivers decode signals well below the noise floor, which is how a 100 mW-class radio outruns much stronger analog voice gear.

Power is the weakest lever

Doubling transmit power adds 3 dB, which in free space is about a 40% range increase, and obstructed paths eat it without noticing. Raising an antenna above the local clutter can be worth 10 to 20 dB. The priority order from the antenna guide holds: height, then antenna, then power, and power is mostly there to disappoint you.

Mesh changes the question

Point-to-point range matters less than reach-a-relay range. You do not need to span 15 km yourself; you need to reach any node that can. Before concluding your area is hopeless, check the public node maps, then test against the nodes that exist rather than against physics in the abstract.

How to test without fooling yourself