# ТЗ: Приём, хранение и обработка данных с RTL-SDR для FR24 / noisemap ## 1. Цель Построить локальный контур приёма ADS-B данных с RTL-SDR, их предобработки, хранения в PostgreSQL/PostGIS и дальнейшего использования для: - восстановления данных после сбоев без потерь, - формирования сущностей рейсов и треков, - расчёта производных шумовых данных, - визуализации на карте в рамках проекта FR24 / noisemap. ## 2. Целевой контур Система разворачивается на одной VM в PVE. ### Ограничения VM - CPU: до 6 vCPU - RAM: 10–12 GB - SSD: 80–100 GB max ### Аппаратный вход - RTL-SDR подключён к физической машине по USB - PVE-хост пробрасывает USB в VM ### Развёртывание - Docker Compose - каждый компонент в отдельном контейнере ## 3. Архитектура ### Компоненты внутри VM - postgres + postgis - capture - preprocess - api/viewer - optional: monitoring ### Принцип - одна VM - одна PostgreSQL база - сырьё и обработанные данные живут в одной БД, но логически разделены - сырьё хранится с небольшим retention и используется для догоняющей обработки ## 4. Режимы работы ### 4.1 Live mode - система принимает поток в реальном времени - записи сохраняются в сырьевой слой - данные сразу уходят в предобработку ### 4.2 Recovery mode - если обработка отстала или упала, - но сырьё ещё доступно, - система автоматически догоняет пропущенный диапазон ### 4.3 Overlap mode - при догоняющей обработке допускается небольшой перекрывающийся участок - это нужно, чтобы не терять данные на границах и компенсировать сбои ## 5. Хранение данных ### 5.1 Retention - сырьё хранится 3 дня - после этого raw-слой чистится автоматически - 3 дня — минимальный гарантированный горизонт для восстановления ### 5.2 База - PostgreSQL - PostGIS обязателен ### 5.3 Принцип хранения - raw-данные отделены от core-данных - core-данные очищены и оптимизированы под запросы карты и расчётов - схема должна быть компактной, без лишних таблиц и тяжёлой нормализации ## 6. Объекты хранения Минимальный набор сущностей: ### `captures` Сессии приёма. Хранят: - старт и конец сессии - источник приёма - статус - покрытый диапазон времени - признаки сбоя / восстановления ### `raw_packets` Сырой поток. Хранят: - timestamp - payload/packet data - signal metadata при наличии - привязку к capture/session ### `aircraft` Справочник бортов. Хранят: - ICAO24 - callsign - тип/категорию при наличии - оператор/авиакомпанию при наличии ### `flights` Сущность рейса. Хранят: - flight id / number - aircraft - время начала и конца - маршрут / аэропорты при наличии - состояние заполненности ### `track_points` Точки трека. Хранят: - время - координаты - высоту - скорость - курс - принадлежность к flight/track ### `tracks` Сводка трека. Хранят: - bbox - длительность - min/max altitude - количество точек - краткое описание маршрута ### `processing_state` Состояние пайплайна. Хранят: - последний успешный checkpoint - обработанный диапазон - отставание - состояние recovery ### `noise_results` Производные данные для карты. Хранят: - расчётные зоны/радиусы - интенсивность/плотность - геометрию для визуализации - привязку к рейсу/треку/времени ## 7. Основные требования к обработке ### 7.1 Приём - принимать ADS-B поток от RTL-SDR - сохранять сырьё до обработки - не терять данные при временном сбое downstream ### 7.2 Предобработка - нормализовать записи - выделять рейсы - строить треки - обновлять state обработки ### 7.3 Восстановление - после сбоя искать недостающий диапазон - добирать пропущенные записи из raw-слоя - допускается overlap ### 7.4 Оптимизация - обработка должна быть лёгкой по CPU и памяти - БД и схема должны быть компактными - лишних промежуточных слоёв не заводить ## 8. Карта и визуализация Система должна поддерживать данные, нужные для: - отображения треков рейсов - отображения шумовых зон - анализа плотности пролётов - фильтрации по времени - отрисовки результатов на карте ## 9. Требования к инфраструктуре - запуск через Docker Compose - отдельные контейнеры для ключевых частей - автозапуск после ребута VM - возможность мониторить состояние приёма и БД - логирование по каждому компоненту отдельно ## 10. Критерии приёмки Система считается готовой, если: - RTL-SDR отдаёт поток в VM через USB passthrough - raw-данные сохраняются в PostgreSQL - raw retention работает на 3 дня - при сбое система может догнать пропущенный диапазон - в БД присутствуют рейсы, треки и точки треков - PostGIS используется для геоданных - данные доступны для визуализации на карте - контейнеры поднимаются через Docker Compose ## 11. Открытые вопросы, которые ещё стоит уточнить позже - точный формат сырьевых пакетов - нужен ли отдельный UI мониторинга - нужен ли архив beyond 3 days - какие индексы и партиционирование делать на старте - где именно будет жить API noisemap после переноса ## 12. Итерация 2 — обязательный список улучшений Следующая итерация ТЗ должна включать: - мониторинг отвалившегося RTL-SDR и автоперезапуск capture - healthcheck контейнеров и БД - политика ротации логов и объёма диска - схема индексов и партиционирования raw/track tables - unique key / dedup стратегия для overlapping recovery - экспорт/импорт исторических данных при миграции - резервное копирование PostgreSQL и восстановление - уведомления о деградации приёма или заполнении диска - контракт между ingest-слоем и noisemap UI, если они остаются раздельными ## 13. Анализ: ничего ли не упущено Дополнительно стоит проверить перед реализацией: - нужен ли отдельный UI мониторинга - где живёт API после переноса - как именно партиционируются `raw_packets` и `track_points` - нужен ли отдельный архив после 3 дней - какую политику дедупликации выбрать для overlap на границах - как восстанавливать БД после полного падения VM --- Подготовлено на основе текущей архитектуры FR24/noisemap и согласованных ограничений VM.