auto-sync: 2026-04-26 13:20:01

This commit is contained in:
Stream
2026-04-26 13:20:01 +03:00
parent 8752815045
commit e723e5baab
3 changed files with 84 additions and 15 deletions

View File

@@ -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 км), метрики M1M4, TQS
- **`analysis/adsb_quality_metrics.sql`** — SQL-запросы: гистограмма расстояний, M1M4, 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` — если нужна витрина подробно

View File

@@ -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 рейсы | 1921.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
| # | Проблема | Приоритет |

View File

@@ -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
```