auto-sync: 2026-04-26 13:20:01
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# FR24 / noisemap docs index
|
||||
|
||||
> Обновлено: 2026-04-21
|
||||
> Обновлено: 2026-04-26
|
||||
|
||||
## 🔑 Главный документ
|
||||
- **`SYSTEM_OVERVIEW.md`** — полное актуальное описание системы: контейнеры, БД, ETL, UI, статус данных
|
||||
@@ -21,7 +21,14 @@
|
||||
- `tasks/flightradar24/prototype/docs/UI.md`
|
||||
- `tasks/flightradar24/prototype/docs/DEVLOG.md`
|
||||
|
||||
## Метрики и анализ ADS-B
|
||||
- **`analysis/ZUP_DEFINITION.md`** — зона уверенного приёма (35 км), метрики M1–M4, TQS
|
||||
- **`analysis/adsb_quality_metrics.sql`** — SQL-запросы: гистограмма расстояний, M1–M4, TQS, RHI
|
||||
- **`analysis/diagram_adsb_pipeline.png`** — схема тракта данных ADS-B → PostgreSQL
|
||||
- **`specs/SPEC_M4_FILTER.md`** — ТЗ на M4-фильтр выбросов координат
|
||||
|
||||
## Что читать в каком порядке
|
||||
1. `SYSTEM_OVERVIEW.md` — текущее состояние системы целиком
|
||||
2. `PROJECT.md` — задачи и backlog
|
||||
3. `PHASE2_STEP2_DATA_MART.md` — если нужна витрина подробно
|
||||
2. `analysis/ZUP_DEFINITION.md` — метрики качества ADS-B
|
||||
3. `PROJECT.md` — задачи и backlog
|
||||
4. `PHASE2_STEP2_DATA_MART.md` — если нужна витрина подробно
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# FR24 Noisemap — Полное описание системы
|
||||
|
||||
> Актуально на: 2026-04-21
|
||||
> Актуально на: 2026-04-26
|
||||
|
||||
## Назначение проекта
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
| Контейнер | Порт | Назначение |
|
||||
|---|---|---|
|
||||
| `fr24-capture` | — | Читает ADS-B поток с dump1090 (SBS port 30003). Пишет сырые пакеты в `fr24.raw_packets`. Retention 3 дня. |
|
||||
| `fr24-preprocess` | — | Читает `fr24.raw_packets`, строит нормализованные `fr24.flights`, `fr24.tracks`, `fr24.track_points`. Поддерживает recovery после сбоя. |
|
||||
| `fr24-preprocess` | — | Читает `fr24.raw_packets`, строит нормализованные `fr24.flights`, `fr24.tracks`, `fr24.track_points`. Поддерживает recovery после сбоя. **M4-фильтр выбросов координат** (26.04.2026). |
|
||||
|
||||
### Слой внешних треков
|
||||
|
||||
@@ -105,9 +105,24 @@ fr24_mart.source_coverage — покрытие по источникам (% ре
|
||||
|
||||
### 1. RTL-SDR pipeline (real-time)
|
||||
```
|
||||
Антенна → dump1090 SBS:30003 → fr24-capture → fr24.raw_packets
|
||||
→ fr24-preprocess → fr24.flights/tracks/track_points
|
||||
РТЛ-SDR RTL2838 (USB, 1090 МГц)
|
||||
→ dump1090-fa (SBS-1 декодер)
|
||||
→ TCP :30003
|
||||
→ fr24-capture → fr24.captures + fr24.raw_packets (base64, partitioned/date)
|
||||
→ fr24-preprocess → fr24.aircraft + fr24.flights + fr24.tracks + fr24.track_points
|
||||
```
|
||||
|
||||
**Алгоритм preprocess:**
|
||||
- MSG1 = callsign, MSG3 = позиция (lat/lon/alt), MSG4 = скорость/курс (кешируется 30 сек, обогащает MSG3)
|
||||
- gap > 30 мин без точек → закрыть рейс, создать новый
|
||||
- `onground=1` → точку пропустить
|
||||
- **M4-фильтр (26.04.2026):** скорость между точками > 350 м/с (Mach 1) → выброс, точка не записывается
|
||||
|
||||
**Антенна:**
|
||||
- Местоположение: д. Хоругвино, Солнечногорский р-н, МО
|
||||
- Координаты: 56.121°N, 37.216°E
|
||||
- Оборудование: RTL-SDR RTL2838 DVB-T
|
||||
|
||||
- **Покрытие:** ~230 рейсов/день (~9.6% от расписания)
|
||||
- **Задержка:** 1-2 сек
|
||||
- **Throughput:** ~3000 пакетов/5 мин
|
||||
@@ -215,19 +230,38 @@ GET /api/data-sources/airport-load
|
||||
|
||||
---
|
||||
|
||||
## Текущий статус данных (на 21.04.2026)
|
||||
## Текущий статус данных (на 26.04.2026)
|
||||
|
||||
| Что | Количество |
|
||||
|---|---|
|
||||
| Расписание в fr24_ext | 01.04 – 19.04.2026 (~26K рейсов) |
|
||||
| FR24 треки | 1 рейс (FV6807, тест) |
|
||||
| FA треки | 5 рейсов (CSN, тест) |
|
||||
| RTL-SDR рейсы | 19–21.04 (~730 рейсов) |
|
||||
| RTL-SDR треки (ЗУП 35 км) | 684 трека, avg TQS=0.951 |
|
||||
| RTL-SDR: dump1090 | ⚠️ нестабилен (rc=1 цикл), возможна проблема USB/прав |
|
||||
| Витрина fr24_mart | 01.04 только (1399 рейсов, 1 с треком) |
|
||||
| Noise grid | 688 ячеек за 01.04 |
|
||||
|
||||
---
|
||||
|
||||
## Метрики качества ADS-B захвата
|
||||
|
||||
Детали: `analysis/ZUP_DEFINITION.md`, SQL: `analysis/adsb_quality_metrics.sql`
|
||||
|
||||
**Зона уверенного приёма (ЗУП):** радиус **35 км** от антенны.
|
||||
|
||||
| Метрика | Описание | Значение в ЗУП |
|
||||
|---|---|---|
|
||||
| M1 — шаг между точками | Медианное расстояние между последовательными точками трека | 26 м |
|
||||
| M2 — временной интервал | Медианный dt между точками; gap rate (gap>30 сек) | 0.8 сек; 2.2% |
|
||||
| M3 — точек на трек | Кол-во точек трека в ЗУП | медиана 70, max 706 |
|
||||
| M4 — выбросы координат | Доля точек со скоростью > 350 м/с | ~4% (до фильтра) |
|
||||
| TQS | Track Quality Score (0..1) | 0.951 среднее |
|
||||
|
||||
**M4-фильтр** добавлен в `fr24-preprocess` 26.04.2026 — выбросы отсекаются до записи в БД.
|
||||
|
||||
---
|
||||
|
||||
## Известные ограничения и backlog
|
||||
|
||||
| # | Проблема | Приоритет |
|
||||
|
||||
@@ -6,16 +6,31 @@ Reads unprocessed `raw_packets` from PostgreSQL and builds aircraft, flights, tr
|
||||
|
||||
1. Waits for PostgreSQL to be ready
|
||||
2. Reads `fr24.processing_state` to find the last processed `raw_packet_id`
|
||||
3. Fetches the next batch of unprocessed packets
|
||||
4. For each packet: upserts `aircraft`, creates/reuses a `flight`, appends a `track_point`
|
||||
3. Fetches the next batch of unprocessed packets (BATCH_SIZE, default 500)
|
||||
4. For each packet:
|
||||
- Decodes base64 SBS-1 payload
|
||||
- Parses MSG type: MSG1=callsign, MSG3=position, MSG4=speed/heading/vrate
|
||||
- MSG4 velocity is cached per icao24 (30 sec TTL) and used to enrich MSG3
|
||||
- Skips ground-stationary aircraft (`onground=1`)
|
||||
- **M4 outlier filter:** if computed speed between consecutive points > `MAX_SPEED_MS` (350 m/s) — point is dropped, warning logged
|
||||
- Upserts `aircraft`, creates/reuses a `flight` (gap 30 min → new flight), appends a `track_point`
|
||||
5. Advances the cursor in `processing_state`
|
||||
6. Touches `/tmp/preprocess-ready` for Docker healthcheck
|
||||
|
||||
Data is fake/test for this stage — real ADS-B decoding comes later.
|
||||
## M4 outlier filter (added 2026-04-26)
|
||||
|
||||
Filters coordinate outliers caused by corrupted dump1090 decodes. Algorithm:
|
||||
|
||||
- Caches `last_lat/lon/last_point_ts` per icao24 in `aircraft_state`
|
||||
- On each MSG3 point: computes `haversine_m(last, current) / dt`
|
||||
- If `dt ≤ 30s` and computed speed > `MAX_SPEED_MS` → skip point, log WARNING
|
||||
- If `dt > 30 min` (gap/new flight) → reset last_point cache before checking
|
||||
- Backup of original: `/home/fr24/backups/openclaw/20260426-100236_main.py.bak`
|
||||
|
||||
## Dependencies
|
||||
|
||||
- `psycopg2-binary`
|
||||
- stdlib only (`math`, `os`, `base64`, `json`, etc.) — no extra packages
|
||||
|
||||
## Environment variables
|
||||
|
||||
@@ -27,7 +42,8 @@ Data is fake/test for this stage — real ADS-B decoding comes later.
|
||||
| `POSTGRES_USER` | required | DB user |
|
||||
| `POSTGRES_PASSWORD` | required | DB password |
|
||||
| `POLL_INTERVAL_SECONDS` | `5.0` | How often to poll for new packets |
|
||||
| `BATCH_SIZE` | `20` | Packets per processing batch |
|
||||
| `BATCH_SIZE` | `500` | Packets per processing batch |
|
||||
| `MAX_SPEED_MS` | `350.0` | M4 outlier threshold, m/s (Mach 1) |
|
||||
|
||||
## Run locally
|
||||
|
||||
@@ -40,6 +56,18 @@ python main.py
|
||||
## Build & run via Docker
|
||||
|
||||
```bash
|
||||
docker build -t fr24-preprocess .
|
||||
docker run --env-file ../../compose/.env fr24-preprocess
|
||||
cd /home/fr24/projects/fr24/compose
|
||||
sg docker -c 'docker compose build preprocess && docker compose up -d preprocess'
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
Normal operation:
|
||||
```
|
||||
2026-04-26T10:00:00 [preprocess] INFO Processed 46 packets (cursor→5384624, total=4002247)
|
||||
```
|
||||
|
||||
M4 outlier detected:
|
||||
```
|
||||
2026-04-26T10:00:01 [preprocess] WARNING M4 outlier icao24=ABC123 speed=1240 m/s — skipping
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user