← LORA Tunnel beta installer · User guide

Release 0.2.2-beta.1 · Public beta · 794956a35501

LORA Tunnel Recon

Wardriver is the primary capture mode. Recon uses passive observations to classify particular broadcast formats and vendor/name evidence. Selecting Recon changes its display, filtering and alert behavior; a category name does not establish that a device is recording, that it is hostile, or who owns it.

The classifier is based on the owner's MIT Dragon Detector parsers and the Apache-2.0 OpenDroneID decoder. SquachWatch is the feature and signature-fact reference; its GPL application implementation is not included. Exact source revisions, hashes and notices are in lib/recon/UPSTREAM.md and lib/opendroneid/UPSTREAM.md.

What a result means

Category key Observed evidence Interpretation
flock Flock accessory service, battery/name patterns, transmitter vendor facts and a composite probe fingerprint A specific accessory signature is stronger than a shared module prefix. An accessory does not prove an adjacent camera.
alpr Motorola/Genetec and related registered vendor prefixes ALPR-vendor candidate; other products from those vendors exist.
axon TASER/Axon company/service IDs, BWCDEVICE payload marker, body-camera vendor facts, setup names Company + service is stronger than either alone. Model and recording state remain unknown.
ibeacon Valid Apple iBeacon manufacturer block UUID, major, minor and measured power are available. Ordinary proximity beacons are common and often benign.
ring / camera Registered vendor prefixes or camera-like names Camera-vendor candidate. Generic radio or parent-company prefixes receive weaker grades.
drone Decoded BLE, Wi-Fi beacon or supported NAN Remote ID; otherwise drone-vendor evidence A decoded broadcast supplies reported aircraft fields. Vendor evidence alone does not establish an aircraft or flight.
airtag Find My format or Apple pairing-size advertisement AirTag/Find My candidate; other accessories, including AirPods for pairing patterns, may match.
tracker Samsung, Tile, Find Hub, Chipolo or DULT protocol identifiers Tracker/protocol evidence; ownership and intent are unknown.
glasses Meta/Luxottica/Snap/Vuzix identifiers and service combinations Candidate product family; recording state is unknown.
raven Exact research service IDs or acoustic-sensor vendor evidence Candidate sensor; field acceptance remains separate.
skimmer Serial-module names or services Generic serial-module candidate, never proof of a card skimmer. ESP32-S3 cannot perform Bluetooth Classic inquiry.
hacker Radio-tool services, peer beacon fields or names Candidate radio tool; ordinary use and spoofed broadcasts are possible.
custom A configured SD rule User-supplied evidence, explicitly identified as an SD rule.

Confidence has three evidence grades, not percentage probabilities:

Randomized BLE addresses and locally administered addresses never provide OUI vendor evidence. BLE payload signatures can still match those advertisements. Their addresses remain observations, not permanent device identities.

Receive and parser boundaries

The pure API is include/recon.h. Wi-Fi accepts an AP BSSID/SSID or a full raw 802.11 frame without its trailing FCS. BLE accepts a bounded advertisement and optional boundary between ADV and SCAN_RSP. Raw limits are 1,024 Wi-Fi bytes and 512 BLE bytes. The classifier allocates no heap and does no radio, SD, UI or network work. It is called from application processing, outside radio ISRs.

Ordinary AP scans do not contain client probe/data observations or Remote ID vendor elements. Those detections require the application's promiscuous receiver to supply raw frames. The parser supports BLE service-data Remote ID, Wi-Fi beacon message packs and its supported NAN descriptor format. Parser support does not prove that a particular aircraft/transmitter was received. This hardware remains scoped to 2.4 GHz Wi-Fi and BLE. Extended/coded BLE reception is not enabled by this classifier.

Remote ID results keep ID type, aircraft type and operator-location type. Binary IDs remain hex rather than being treated as text. Missing fields are explicit, with independent altitude and speed validity. System coordinates can describe takeoff, fixed or live locations; they must not all be described as the pilot's present position. All advertised locations are separate from the receiver's GNSS fix. Results are stateless per observation. A device summary that accumulates fields must retain independent sighting times and mark stale data.

Malformed complete AD streams and invalid frame lengths do not produce decoded-protocol claims. Unknown traffic still belongs in Wardriver capture. Recon only selects evidence-bearing observations according to its enabled categories and configured display/alert thresholds.

SD configuration

In /lora-tunnel/config.json:

{
  "ui": {"buttons_enabled": true},
  "recon": {
    "buzzer": true,
    "display_min": "low",
    "alert_min": "medium",
    "categories": ["flock", "alpr", "axon", "ibeacon", "ring", "camera", "drone", "airtag", "tracker", "glasses", "raven", "skimmer", "hacker", "custom"]
  }
}

Merge these fields into the complete configuration; this excerpt does not replace the required schema and lora sections. An omitted category list enables every category, and an empty list disables all. Invalid optional values retain their defaults. The existing strict radio validation and primary/backup configuration recovery are unchanged. Physical-button shortcuts default to enabled; their touchscreen equivalents remain available.

The built-in detector works with the supplied empty detection_rules.json. Optional custom rules are loaded from that file after reboot. There are at most 64 valid rules and a 16 KiB file/document limit. Accepted types:

Type match Transport
name Exact case-insensitive advertised name Wi-Fi SSID or BLE name
ssid_prefix Case-insensitive prefix, at most 32 UTF-8 bytes Wi-Fi only
oui Three hexadecimal bytes, e.g. 00:04:7D Globally assigned Wi-Fi or public/public-identity BLE address only
service16 Four hex digits, optionally 0x prefixed Valid BLE service list/data, including the exact Bluetooth Base UUID representation
manufacturer Four hex digits, optionally 0x prefixed BLE manufacturer-specific company ID

Each rule may contain label, category, confidence and Boolean alert. Match/label fields allow at most 47 UTF-8 bytes, reject embedded NUL/control characters, and never split displayed UTF-8 sequences. Unknown categories, invalid numeric fields and malformed entries are skipped. BLE identifier rules validate the complete advertisement framing and do not interpret arbitrary 128-bit UUID substrings as assigned services.

Legacy name/OUI rules without category remain custom/low matches. An SD rule only replaces a result when its configured grade is strictly stronger; equal grades keep the earlier built-in result. A winning rule's alert:false disables its alert, but a weaker rule is not a mute for stronger built-in evidence. Custom confidence is a user's setting, not validation by the project.

The source/SD examples include an editable 201-row vendor-prefixes.csv with evidence, category and confidence plus its MIT notice. It is a reference; firmware uses the compiled table and does not silently import the CSV. Runtime additions or explicit overrides use detection_rules.json.

Validation evidence

Fourteen direct-GCC C++14 Unity parser tests and nine settings/rule tests passed on 2026-11-01. Fixtures are synthetic, including valid/truncated Remote ID, NAN nested lengths, ID/operator-location semantics, randomized addresses, ambiguous Apple accessories, iBeacon fields, malformed AD segments, custom UUIDs, configuration bounds and stronger-evidence selection.

These results do not claim physical capture, detection range, buzzer behavior, GNSS accuracy, uploads or UI acceptance. Firmware compilation and the hardware checklist remain separate validation steps in docs/VALIDATION.md and the project's practical test checklist.