Files
wiki/tasks/flightradar24/PROJECT.md
2026-04-25 13:50:01 +03:00

152 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проект: FR24 / noisemap + RTL-SDR ingest
## 1. Назначение
Проект строит карту шумового загрязнения авиации для Московской области и развивает её в сторону локального ADS-B контура на RTL-SDR.
Сейчас проект состоит из двух связанных частей:
- **noisemap / FR24-прототип** — визуализация и расчёт шумовой плотности на базе исторических данных Flightradar24
- **RTL-SDR ingest-контур** — приём ADS-B с локального приёмника, хранение в PostgreSQL/PostGIS и восстановление данных после сбоев
## 2. Статус
- **Старт проекта:** 22 марта 2026
- **Текущий статус:** активен
- **Текущий фокус:** переход от FR24-only к локальному RTL-SDR контуру с PostgreSQL/PostGIS
- **Последнее обновление:** 25 апреля 2026
## 3. Текущая часть: noisemap / FR24-прототип
### URL
- https://openclaw.mva154.duckdns.org/noisemap/
### Расположение
- `tasks/flightradar24/prototype/`
### Стек
- Flask
- OpenLayers 10
- Turf.js
- Canvas2D
- flask-compress
### Что уже реализовано
- слой "Плотность пролётов"
- метрика рейсов/час
- радиусы влияния по высоте
- кэш плотности
- слайдер по дням
- легенда и попап по рейсам
- `/api/dates` и `/api/density`
- загрузка табло через Яндекс.Расписания
### Ограничения текущей части
- FR24 кредиты закончились
- охват данных неполный
- ночные рейсы и часть траекторий не покрываются
## 4. Новая часть: RTL-SDR ingest-контур
### Цель
Построить локальный контур приёма ADS-B с RTL-SDR, который:
- принимает поток в real time
- сохраняет сырьё с retention 3 дня
- догоняет пропуски после сбоя
- хранит данные в PostgreSQL/PostGIS
- отдаёт данные для визуализации на карте
### Архитектурные рамки
- 1 VM в PVE
- USB RTL-SDR пробрасывается в VM
- Docker Compose
- отдельные контейнеры для компонентов
- PostgreSQL + PostGIS
- сырьё и core-данные в одной БД, но логически разделены
### Согласованные ограничения VM
- CPU: до 6 vCPU
- RAM: 1012 GB
- SSD: 80100 GB max
### Режимы работы
- live
- recovery
- overlap recovery
### Базовые сущности хранения
- `captures`
- `raw_packets`
- `aircraft`
- `flights`
- `track_points`
- `tracks`
- `processing_state`
- `noise_results`
## 5. Данные и источники
### FR24
- исторические данные использовались для прототипа noisemap
- FR24 API ключ хранится в `~/.openclaw/.env`
- ключи и секреты не хранятся в проектных файлах
### ADS-B / RTL-SDR
- локальный источник для ingest-контура
- основной переходной источник после исчерпания FR24-only подхода
## 6. Бэклог
### ✅ Выполнено (апрель 2026)
- [x] RTL-SDR ingest контур (capture + preprocess + api + monitoring + backup)
- [x] PostgreSQL/PostGIS схема fr24
- [x] Leaflet карта с треками и фильтром периода
- [x] Мониторинг дашборд
- [x] Батчевая запись, фильтр onground, кеш скорости с TTL
- [x] Callsign из MSG1
### ✅ Фаза 2, Шаг 1: Внешние источники данных (выполнено 20.04.2026)
- [x] Контейнер `fr24-schedule` запущен
- [x] Схема `fr24_ext` (таблицы `schedule`, `load_state`)
- [x] Яндекс.Расписания API: SVO, DME, VKO, ZIA
- [x] Backfill 01.0419.04.2026: **28 690 рейсов**
- [x] Cron T-1 в 02:00 UTC
- [x] UI табло: `http://192.168.2.67:8080/schedule`
- [x] Экспорт CSV
- [ ] OpenSky отключён (исторические данные платные)
### ✅ Фаза 2, Шаг 2: Витрина данных (выполнено 21.04.2026)
- [x] Схема `fr24_mart` (flights, track_points, noise_grid, source_coverage)
- [x] Контейнеры fr24-mart, fr24-tracks-fr24, fr24-tracks-fa
- [x] build_mart.py: мэтчинг по приоритету RTL-SDR > FR24 > FA
- [x] Шумовая сетка noise_grid (ячейки 0.01°×0.01°)
- [x] Метрики source_coverage
- [x] FR24 API: 1 трек загружен и проверен (FV6807)
- [x] FA API: 5 треков загружено (тест)
- [x] Мэтчинг RTL-SDR/FA в витрине исправлен (ICAO vs IATA фикс, 21.04.2026)
- [x] DDL fix: VARCHAR(5) → VARCHAR(20) в flight_tracks_fa (21.04.2026)
- [ ] ⚠️ Яндекс backfill 0619.04 не завершён (rate limit)
- [ ] Bulk rebuild витрины за 0219.04
### ✅ UI enrichment (выполнено 24.04.2026)
- [x] Таблица `fr24_ext.flight_actual` (FR24 summary/full данные)
- [x] UI расписания: 13 колонок (fr24_id, actual_takeoff, actual_landed, delay_*, flight_category, registration)
- [x] `aircraft_type` через `COALESCE(mf.aircraft_type, s.aircraft_type)` — fallback на расписание (25.04.2026)
### 🔜 Фаза 2, Шаг 3: Перенос noisemap на VM-FR24
- [ ] Адаптация прототипа под fr24_mart
- [ ] Live режим из RTL-SDR
- [ ] Фильтр по источнику данных
- [ ] ТЗ: `docs/PHASE2_STEP3_NOISEMAP_MIGRATION.md`
## 7. Документация
- **`tasks/flightradar24/docs/SYSTEM_OVERVIEW.md`** — полное актуальное описание системы (читать первым)
- `tasks/flightradar24/PROJECT.md` — статус и бэклог
- `tasks/flightradar24/docs/INDEX.md` — индекс всех документов
- `tasks/flightradar24/docs/ARCHITECTURE.md` — контейнерная архитектура (базовая)
- `tasks/flightradar24/docs/PHASE2_STEP2_DATA_MART.md`ТЗ витрины fr24_mart
- `tasks/flightradar24/docs/VM_SETUP.md` — инструкция по VM
- `tasks/flightradar24/prototype/docs/NOISE_MODEL.md` — шумовая модель
## 8. Критерий направления
Проект считается развивающимся правильно, если:
- noisemap остаётся рабочим и полезным
- ingest-контур получает данные без дырок
- recovery умеет догонять сырьё автоматически
- БД не раздувается сверх лимитов VM
- карта продолжает получать данные для визуализации