fix(adsb): fix aircraft photo display and add Drone Intelligence docs

- Fix stale DOM refs in fetchAircraftPhoto: elements were captured before
  await fetch(), but showAircraftDetails rebuilds innerHTML on every RAF
  update, leaving the async path writing to detached nodes. Now re-queries
  the DOM after await, and the cache (synchronous) path queries inline so
  refs are always fresh.
- Add thumbnail fallback in aircraft_photo route: fall back to thumbnail
  when thumbnail_large.src is absent rather than returning null.
- Add Drone Intelligence to nav, help modal, cheat sheets, README, and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
James Smith
2026-05-05 09:24:30 +01:00
parent 333c5cf8d3
commit 62e53c5dfa
9 changed files with 654 additions and 469 deletions
+36
View File
@@ -354,6 +354,42 @@ Technical Surveillance Countermeasures (TSCM) screening for detecting wireless s
- No cryptographic de-randomization
- Passive screening only (no active probing by default)
## Drone Intelligence
Multi-vector UAV detection and identification system combining three complementary detection methods into unified contact tracking.
### Detection Vectors
- **Remote ID (WiFi/BLE)** — Parses ASTM F3411-22a broadcast frames from WiFi Beacon and BLE Advertisement packets. Extracts drone ID, operator ID, drone type, GPS position, altitude, speed, and emergency status. Mandatory for all drones >250g in the US/EU since 2023.
- **RTL-SDR RF (433/868 MHz)** — Monitors ISM bands for control link and telemetry signals characteristic of consumer and FPV drones. Detects DJI OcuSync, FrSky, FlySky, and generic FSK/GFSK drone control protocols.
- **HackRF (2.4/5.8 GHz)** — Wide-scan of video downlink and telemetry bands used by most consumer drones. Detects power above noise floor across 2.4002.483 GHz and 5.7255.875 GHz ISM bands.
### Contact Correlation
The `DroneCorrelator` merges raw observations from all three vectors into unified `DroneContact` objects:
- **TTL-based store** — contacts expire after 120 seconds of no activity
- **Multi-vector fusion** — a single contact can be seen on 13 vectors simultaneously
- **Deduplication** — observations from the same vector within 5 seconds are collapsed
### Risk Scoring
| Level | Criteria |
|-------|----------|
| High | No Remote ID broadcast (non-compliant) or ASTM non-conformant frame |
| Medium | Multiple detection vectors active, or RSSI delta >15 dB between vectors |
| Low | Compliant Remote ID present, single detection vector |
### Live Map
Remote ID contacts with GPS position data are plotted on a Leaflet map. Markers show drone ID and last known coordinates. Map updates in real time via SSE.
### Requirements
- WiFi adapter capable of monitor mode (for BLE/WiFi Remote ID)
- RTL-SDR dongle (for 433/868 MHz RF detection)
- HackRF One (optional, for 2.4/5.8 GHz detection)
- Python package: `opendroneid>=1.0`
## Meshtastic Mesh Networks
Integration with Meshtastic LoRa mesh networking devices for decentralized communication.
+29
View File
@@ -446,6 +446,35 @@ Digital Selective Calling monitoring runs alongside AIS:
- Full functionality requires WiFi adapter, Bluetooth adapter, and SDR hardware
- Threat detection uses a database of 47K+ known tracker fingerprints
## Drone Intelligence
1. **Open Mode** - Select "Drone Intel" from the Intel group in the navigation bar
2. **Configure Interfaces** - Enter your WiFi interface name (must support monitor mode) for Remote ID detection
3. **Set RTL-SDR Index** - If you have multiple RTL-SDR devices, enter the device index (default: 0)
4. **Start** - Click "Start Scan" to activate all available detection vectors simultaneously
5. **Monitor Contacts** - Detected drone contacts appear in the contact list with ID, vectors, risk level, and last seen time
6. **View Map** - Contacts with GPS data from Remote ID are plotted on the live map
### Detection Vectors
- **Remote ID (WiFi/BLE)** — Passive sniff of 802.11 beacon frames and BLE advertisements. Decodes ASTM F3411 payloads: drone GPS, operator ID, drone type, speed, altitude, and emergency status
- **433/868 MHz RF** — RTL-SDR scans ISM bands for drone control link and telemetry RF signatures
- **2.4/5.8 GHz** — HackRF (if present) sweeps video downlink bands for active drone transmissions
### Risk Levels
- **High** — Drone operating without Remote ID (non-compliant) or malformed ASTM frame. Warrants immediate attention.
- **Medium** — Contact detected on multiple RF vectors, or significant RSSI difference between vectors (>15 dB). May indicate evasion or multi-radio platform.
- **Low** — Compliant Remote ID broadcast, single detection vector. Standard consumer drone.
### Tips
- Remote ID is mandatory for drones >250g in the US (FAA) and EU (EU 2019/945) — absence of Remote ID is itself a significant indicator
- WiFi adapter must support monitor mode; run `airmon-ng check kill` if other processes interfere
- The contact map only shows drones that broadcast GPS coordinates via Remote ID
- Contacts expire after 120 seconds of inactivity — the list shows only currently active drones
- HackRF detection is passive (receive-only); no transmission occurs
## Spy Stations
1. **Browse Database** - View the full list of documented number stations and diplomatic networks
+6 -1
View File
@@ -36,7 +36,7 @@
</div>
<div class="hero-stats">
<div class="stat">
<span class="stat-value">34</span>
<span class="stat-value">35</span>
<span class="stat-label">Modes</span>
</div>
<div class="stat">
@@ -202,6 +202,11 @@
<h3>TSCM</h3>
<p>Counter-surveillance with baseline recording, threat detection, device correlation, and risk scoring.</p>
</div>
<div class="feature-card" data-category="intel">
<div class="feature-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="18" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="18" r="2"/><rect x="9" y="9" width="6" height="6" rx="1"/><line x1="8" y1="8" x2="9" y2="9"/><line x1="16" y1="8" x2="15" y2="9"/><line x1="8" y1="16" x2="9" y2="15"/><line x1="16" y1="16" x2="15" y2="15"/></svg></div>
<h3>Drone Intelligence</h3>
<p>Multi-vector UAV detection via ASTM F3411 Remote ID (WiFi/BLE), RTL-SDR 433/868 MHz RF fingerprinting, and HackRF 2.4/5.8 GHz scanning with live contact map and risk scoring.</p>
</div>
<div class="feature-card" data-category="wireless">
<div class="feature-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg></div>
<h3>Meshtastic</h3>