Mesh-Hunter
← Blog

From radio signal to map: node-hunting with Mesh-Hunter

13 July 2026 · Lees in het Nederlands

Every MeshCore antenna is somewhere. On a rooftop, up a tree, on a lamppost, in a shed loft… Mesh-Hunter helps you work out where, exactly.

The problem

Every MeshCore user knows the list in their contacts. A few trusted repeaters, some companions belonging to people you know, and scattered between them a couple of mysteries. The node that sends adverts every night without anyone knowing where it hangs. The repeater you can hear perfectly well but that appears on no map. Or, more annoyingly: a node flooding a public channel that you would really like to pin down.

That is what Mesh-Hunter is for. A MeshCore mesh is decentralised by design: nodes announce themselves with an advert if they choose to, messages find their own way through various repeaters, and nobody has to register anywhere where a device lives. Great for the network, awkward when you want to find one specific transmitter. The protocol tells you that a node exists and how to reach it, but not where it is.

Until now, the best you could do was narrow it down to roughly a region by "path-walking". In the investigation into one such channel flooder, a rough location was derived from the paths of relayed packets: which repeaters forwarded this, and what does that say about the source? You end up analysing paths at your desk when you would rather be in the car, driving toward the signal.

Mesh-Hunter turns that around: no reconstruction afterwards, but live measurement while you drive.

Why this is useful

The obvious scenario is the problem node: a transmitter misbehaving badly enough that the only way to silence it is to know where it stands.

But it is also simply fun to go on a hunt, a fox hunt: you want to know whether that unfamiliar repeater sits on a water tower or in somebody's attic, because that decides where your own next repeater should best go. You are curious who is behind the node with the odd name and fancy saying hello. Direction-finding is as old as amateur radio itself; a fox hunt, with a mesh network as the playing field.

Everything you hear along the way can, if you choose, feed a shared coverage map. Several hunters together build up a picture of where nodes can be heard and how strongly. Even when nobody is actively hunting, that picture is valuable: it shows where the mesh has coverage and where the gaps are.

How it works

When hunting, only one kind of reception counts: what you hear directly, so zero-hop. Only then does the signal strength (RSSI, along with the signal-to-noise ratio SNR) say anything about your distance to the transmitter itself. Mesh-Hunter records every direct reception with its signal strength and your phone's GPS position at that moment, and that measurement appears as a point on a heat-map.

So the map does not show where the target is, but where you were when you heard it and how strongly it came in. The target's position is an inference from radio measurements, not GPS tracking of someone else's device. You measure what a transmitter itself puts on the air, nothing more.

In practice

Mesh-Hunter runs as a webapp in the browser and installs as a PWA on your home screen. You need a MeshCore node running companion firmware, connected to your phone over Bluetooth, and nothing else out of the ordinary: Chrome on Android works, and on iOS the usual route is Bluefy, since Safari does not speak Web Bluetooth.

Open, pair, drive. Every direct reception appears live on the map, with a counter and signal meter on screen so you can tell whether you are getting warmer or colder without staring at the map. Hunting one specific node? Select it as the target and the view filters down to exactly that transmitter. For the road there is a compass mode that rotates the map with your direction of travel.

Silent repeaters can be woken up. A Discover request asks nodes in the immediate area to briefly announce themselves, and you can have that repeat automatically while driving. One caveat: airtime is a shared resource. LoRa frequencies have a limited duty cycle, and everything you put on the air is something someone else cannot. Mesh-Hunter deliberately keeps the rate low and only transmits when you ask it to. Listening is free; transmitting never quite is.

An account is optional, but you link it to your companion under "settings". With an account you get access to map.mesh-hunter.eu, where measurements from multiple hunters come together.

A hunt from start to finish

Take the scenario this project started with: a node flooding a public channel, evening after evening.

The first step still happens at home. From the relayed packets and their paths comes a rough suspicion: somewhere in that region, probably within a circle a few kilometres across. It will not get more precise from behind a desk, but it does not need to.

Then into the car, companion on the dashboard, Mesh-Hunter open with the flooder set as target. For the first few kilometres the map stays empty: everything coming in is relayed and so does not count. We are after zero-hop traffic, not the nearest repeater. Until, somewhere along a provincial road, a first direct reception comes in. Weak, deep in the blue, but direct: from here, the transmitter can be heard.

From that point on it is a matter of driving loops and letting the map fill in. Every street adds points and slowly a pattern takes shape: warmer to the north, cooling off west of the canal. The heat-map does not point like an arrow at one house; it is a gradient, and you are the needle following it. Half an hour later the search area is no longer a circle of kilometres, but a neighbourhood of a few streets where every reception comes in bright orange.

That is where the technology stops and judgement takes over. The last step is often surprisingly analogue: recognising an antenna on a roof, knowing that one street sits on high ground, or simply ringing a doorbell. For the spam situation in this story, it meant that a boot loop on a connected Home Assistant integration could be fixed, and so a fix for the mesh.

Further context and links

New to MeshCore, or keen to dig into the technology? The community has excellent starting material, much of it in Dutch:

Ready to try it yourself? Open the RX webapp and the shared map.

← Back to the blog