Help test the RF scanner BETA

Find surveillance cameras β€” and help confirm police vehicles β€” by the wifi they broadcast. No plates, no faces, just signal.

πŸ“· The Flock / ALPR camera layer

The map now has a Flock / ALPR camera layer β€” automated licence-plate readers pulled from OpenStreetMap (the DeFlock project). Turn it on with Layers β†’ β€œFlock / ALPR cameras” and zoom in. Each camera is a red cone that points the way it faces, so you can see what it's watching.

Keeping it honest β€” you have to be there. Cities add and remove these cameras, so every one has β€œβœ“ Still here” and β€œβœ— Removed” buttons. Tapping them uses your phone's location, and the report is refused unless you're standing at the camera. That's on purpose: nobody can sit at home and mass-report cameras gone (or invent ones that aren't there).

What happens to a report. It's a vote, not an edit β€” a camera only comes off the map after it's reviewed. And this is where the RF beta closes the loop: when a scanner hears a real Flock camera's wifi next to a mapped one, that camera is marked βœ“ confirmed present. So the layer trends toward the cameras that are actually still out there.

No hardware? If you just want to report a camera you can see, skip all of this β€” photograph it from your browser. No app, no ESP32, no Pi. A reviewer checks every photo before it reaches the map.

πŸ”’ What it does, and what it never does

Two things, both by wifi/Bluetooth only:

Every other device your scanner sees β€” homes, other phones, ordinary cars β€” is counted and thrown away instantly, never shown, never saved, never sent. Same rule SparrowMap uses for licence plates: the private side is destroyed on your device.

Honest limit: RF alone can't name a cop car β€” some in-car gear also lives in work trucks. It confirms what a camera already saw; it never invents a sighting, and it uploads nothing on its own. Nothing hits the map without a person reviewing it.

πŸ“± What you need

▢️ Setup (one time, ~2 minutes)

Open Termux and paste:

pkg install -y python termux-api
curl -O https://map.sparrowmap.com/rf/phone_scan.py

Then install the Termux:API app from F-Droid if you haven't (it's what lets the script read wifi).

πŸš— Run it

python phone_scan.py            # one scan, right where you are
python phone_scan.py --watch   # keep scanning while you walk or drive

Best test: drive or walk past a spot you know has a Flock or ALPR camera (intersections, town entrances, parking lots). If it broadcasts wifi, you'll see a 🚨 SURVEILLANCE line.

When you're done, it prints a block starting --- copy everything below ---. Copy that and send it to us, along with roughly where you were (a cross street is plenty).

⚠️ What we're actually testing

πŸ“€ Sending results (phone)

For the phone beta, just paste the copied block to us (DM or email) with a rough location. It's reviewed before anything goes on the map.

πŸš” Confirming police vehicles (not just cameras)

The scanner also flags police in-car equipment β€” Axon body/dash cameras and docks especially, which are police-dominant. It reports those with a confidence tag alongside the camera finds.

On its own that isn't proof β€” some in-car gear also lives in work trucks. But mounted in a moving vehicle (a Pi on the dash), hearing patrol gear right where a camera already saw a police vehicle is a strong second signal. That's the goal: RF confirms a visual police sighting, it never names a cop car by itself.

So a Pi in a car does double duty: it maps surveillance cameras as you drive, and it corroborates police sightings along the same route. All of it human-reviewed before anything publishes.

πŸ›Έ Drones

Since 2023 most drones must broadcast Remote ID over the same 2.4/5 GHz wifi and Bluetooth this scanner reads β€” so it flags drones too (DJI, Skydio, Autel and friends). A drone alone isn't proof of a police drone, and agencies fly the same models everyone else does, so it's treated like the in-car gear: it corroborates when it shows up over a police presence.

A plain scan catches the drone's control link and maker. The full Remote ID broadcast (its id and the operator's location) needs monitor mode β€” an Alfa adapter on a Pi, or an ESP32 in promiscuous mode β€” which is the next step. For manned aircraft (police helicopters and surveillance planes) the tool is different: a ~$25 RTL-SDR reading ADS-B on 1090 MHz. That's a separate build; get in touch on Contribute if you want to help with it.

πŸ–₯️ Raspberry Pi (auto-upload)

If you have a Pi (or any Linux box) it can scan and upload on its own, no copy-paste. It flags surveillance cameras and police in-car gear; every private network is dropped on the box. Uploads land in a review pen β€” nothing goes on the public map without a person confirming it.

1. Get the scanner:

sudo apt install -y network-manager python3
curl -O https://map.sparrowmap.com/rf/rf_scan.py

2. Enroll once to get a node id + token (save the token, shown once):

curl -X POST https://map.sparrowmap.com/api/enroll \
  -H "Content-Type: application/json" \
  -d '{"name":"My RF Pi","lat":XX.XXXX,"lon":-YY.YYYY,"kind":"rf"}'

3. Run it (loops, scans, uploads surveillance + police gear only):

python3 rf_scan.py --post --node n_YOURID --token YOURTOKEN

Mount it in a vehicle (best for confirming patrol cars) or a window overlooking a road. A GPS dongle is optional now (position is added in the next version); for a fixed spot the enroll location is enough. A monitor-mode + Bluetooth upgrade (an Alfa adapter) comes later β€” plain wifi scanning already catches broadcasting cameras and Axon gear.

πŸ”§ ESP32 (about $5)

An ESP32 is a tiny cheap chip that scans wifi and Bluetooth β€” a matchbox you leave in a car or a window. There's a ready-to-flash sketch: it keeps only surveillance cameras and police gear and uploads them, dropping everything private on-chip, same rule as the rest.

1. Enroll once (from any computer) for a node id + token:

curl -X POST https://map.sparrowmap.com/api/enroll \
  -H "Content-Type: application/json" \
  -d '{"name":"My ESP32","lat":XX.XXXX,"lon":-YY.YYYY,"kind":"rf"}'

2. Flash it with the Arduino IDE (install the "esp32" boards package):

# get the sketch, open it in Arduino IDE
curl -O https://map.sparrowmap.com/rf/esp32_sparrow.ino

Fill in the CONFIG block at the top (the wifi it uploads through, plus your node id + token), then upload. Open the Serial Monitor at 115200 to watch it scan. For a moving sensor, tether it to a phone hotspot. Honest note: the sketch is new and hasn't been proven on real hardware in the field yet β€” if you flash one, tell us what it catches.

πŸ› οΈ Other hardware

Any device that can see wifi/Bluetooth can feed SparrowMap β€” another microcontroller, an SDR, a router, whatever you've got. The upload endpoint is open and documented on the Contribute page. Build with it and get in touch; if it works, we'll add a guide for it. The goal is to use any hardware that works, not lock people to one board.

πŸ”œ What's next

Once field tests confirm the scanner reliably spots real cameras and police gear, two things turn on, both behind the same human review: a dedicated surveillance map layer for confirmed cameras, and police-sighting confirmation β€” when the scanner hears patrol gear right where a camera saw a police vehicle, that sighting gets a second, independent confirmation before it's published. Cheap ESP32 sensors are how this scales past hobbyists.

Open source, free, government and surveillance hardware only. Your neighbours and your own devices are destroyed at the edge and never leave your phone. That's the whole point.