# Проект: 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: 10–12 GB - SSD: 80–100 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.04–19.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 06–19.04 не завершён (rate limit) - [ ] Bulk rebuild витрины за 02–19.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 - карта продолжает получать данные для визуализации