feat: APRS export, USRP support, and MQTT data export (closes #222)

- GET /aprs/export?format=json|csv downloads all tracked APRS stations
- USRP (Ettus N200/B200/B210) detected via SoapyUHD and supported across
  all signal modes (FM demod, ADS-B, ISM, AIS, I/Q capture)
- Optional MQTT publisher broadcasts decoded events from every module;
  enabled by setting INTERCEPT_MQTT_BROKER, disabled by default
- paho-mqtt added to requirements.txt (optional dep)
- .gitignore: add *.kismet, aircraft_db.json/meta, SoapySDR/
- Bump version to 2.30.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
James Smith
2026-07-07 11:47:21 +01:00
parent 6d0b0437b3
commit dfab714104
12 changed files with 358 additions and 4 deletions
+7
View File
@@ -5,6 +5,7 @@ from __future__ import annotations
from typing import Any
from utils.alerts import get_alert_manager
from utils.mqtt import publish as mqtt_publish
from utils.recording import get_recording_manager
from utils.temporal_patterns import get_pattern_detector
@@ -54,6 +55,12 @@ def process_event(mode: str, event: dict | Any, event_type: str | None = None) -
# Alert failures should never break streaming
pass
try:
mqtt_publish(mode, event, event_type)
except Exception:
# MQTT failures should never break streaming
pass
def _extract_device_id(event: dict) -> str | None:
for field in DEVICE_ID_FIELDS: