← Guides 🧰 SET UP A SENSOR step by step

Set up a sensor

Step‑by‑step setup for each hardware feed. For what to buy or build first, see /sensors. Already have a camera? Those guides are Add a camera, Add an IP camera, RF scanner, and the API.

First: a node token 📡 Radar ✈️ Planes 🛸 Drones 📻 Police radio

First: get a node token

Every hardware feed is authenticated — a live dot on the map is always tied to a node, never an anonymous tap. So each feeder needs your node id and its token.

  1. Enrol a node (it can be the same Pi you're using for sensors — a node is just an account here, it doesn't have to be a camera).
  2. Note the node id (n_…) and save its token to a file, e.g. mynode.token. Keep it private.
  3. Every command below takes --node n_… --key mynode.token.
All feeder scripts live under tools/sensors/ in the source (radar is tools/radar_bridge.py). Run any of them with --simulate first to watch the payloads without hardware.

📡 Radar / speed traps beta

You need

A radar detector with Bluetooth output (Uniden R7/R8, Escort, or Radenso), and a device to run the bridge (a phone hotspot + laptop, or a Pi in the car). A USB GPS or gpsd gives position; otherwise pass a fixed one.

Easiest: in your browser

  1. Pair the detector to your phone or computer (it usually appears as a COM port, or a Bluetooth LE device).
  2. Open the browser connect page, paste your node id + token, pick your location, and hit Connect via Serial (or Bluetooth LE). That's it — no scripts.
Chrome/Edge on a computer or Android only — Apple blocks browser‑to‑hardware on iPhone. There, use the PC bridge below.

Or: the PC bridge (any detector, incl. iPhone users' setups)

  1. Pair the detector so it shows up as a serial port (COM5 on Windows, /dev/rfcomm0 on Linux).
  2. Run the bridge (great for a fixed detector on an always‑on PC):
    python tools/radar_bridge.py --hub https://map.sparrowmap.com \
        --node n_abcd1234 --key mynode.token \
        --serial COM5 --gpsd
    For a fixed spot, drop --gpsd and pass --lat/--lon.
  3. Watch it on the radar screen, or turn on Layers → radar / speed traps on the map.
Bands matter. Ka (33–35 GHz) is police‑only and reads red. K (24 GHz) also comes from cars' blind‑spot radar and X is mostly doors, so those need a second reporter before they're trusted. Detecting is legal in 48 states (not VA/DC, not commercial vehicles); jammers are illegal everywhere — we only receive.

✈️ Planes & police aircraft beta

You need

An RTL‑SDR dongle + 1090 MHz antenna on a Raspberry Pi running dump1090 (or PiAware).

Steps

  1. Install dump1090‑fa; confirm it serves JSON at http://localhost:8080/data/aircraft.json.
  2. Run the feeder:
    python tools/sensors/adsb_feed.py --hub https://map.sparrowmap.com \
        --node n_abcd1234 --key mynode.token \
        --dump1090 http://localhost:8080/data/aircraft.json
  3. Your locally‑received aircraft merge into the aircraft layer, and an orbit over one spot is flagged automatically.
The aircraft layer is a staged preview, so the hub may return 404 on ingest until it's switched on for the network. The feeder is ready either way. Receiving ADS‑B is legal — receive‑only, no transmitting.

🛸 Drones (Remote ID) beta

You need

An ESP32‑S3 flashed with open‑source OpenDroneID / WiFi‑RemoteID firmware (it prints one JSON object per drone it hears), on USB. A phone app like Drone Scanner works too if you'd rather pipe its output.

Steps

  1. Flash the ESP32 and confirm it prints Remote ID JSON over serial.
  2. Run the feeder pointed at that port:
    python tools/sensors/drone_feed.py --hub https://map.sparrowmap.com \
        --node n_abcd1234 --key mynode.token --serial COM6
  3. Turn on Layers → drones (Remote ID). Each drone shows as a live point that fades when it stops broadcasting.
Local and state police drones must broadcast Remote ID; federal can fly dark and home‑built ones may not comply — so this shows "drones that announced themselves," not every drone.

📻 Police radio activity beta

You need

An RTL‑SDR + trunk‑recorder following your county's P25 system, and the receiver's fixed location.

Steps

  1. Get trunk‑recorder decoding calls (check your county isn't fully encrypted first — many are).
  2. Point the feeder at its call output and give your location:
    python tools/sensors/p25_feed.py --hub https://map.sparrowmap.com \
        --node n_abcd1234 --key mynode.token \
        --lat 42.73 --lon -84.55 --calls /var/trunk-recorder/calls
  3. Turn on Layers → police radio activity. A soft pulse appears where your scanner is hearing dispatch.
This is an area, not a pinpoint. Scanner audio tells you a department is active near a receiver — it does not locate a specific car. Encryption is spreading, so coverage varies a lot by county.

Every feed is receive‑only and node‑authenticated. Only government/marked vehicles are ever published; a private vehicle's plate is removed on the device before anything is uploaded. Questions? See /sensors or all guides.