# 2026-03-22 ## Обсуждение Flightradar24 и техстека ### Flightradar24 Explorer подписка - Слава сообщил, что у него оформлена подписка на тарифный план Explorer в Flightradar24 - Попросил проверить возможности этой подписки и ответить на второй вопрос - Проведён анализ API подписок Flightradar24: - Три уровня подписки API: Explorer (entry-level), Essential, Advanced - Explorer предоставляет 60,000 data credits в месяц (по промоции до 120,000 до 31 мая 2026) - Доступные endpoints: - Статические данные: аэропорты (light), авиакомпании (light) - Live данные: позиции самолетов (light и full) - Исторические данные: события полетов (light и full), позиции (light и full) - Сводки полетов (light и full) - Треки полетов - Отчет об использовании API - Ограничения: нет доступа к airports full, live/historic flight positions count, flight summary count ### Техстек - Слава согласен с моим предложением по техстеку (контекст предыдущего обсуждения) - 22 марта 13:24 - Слава подтвердил согласование подхода и предложил приступать к работе ### Голосовые сообщения - Успешно протестирована отправка голосовых сообщений через скилл voice-tts - Получено тестовое голосовое сообщение от Славы, отправлен ответ голосом - Получено подтверждение согласования подхода (голосовое сообщение) - Представлено ТЗ по интеграции Flightradar24 API (голосовое + файл) ### Flightradar24 API - Карта шумового загрязнения - 22 марта 13:44 - Получена детальная постановка задачи от Славы: веб-страница с картой шумового загрязнения от самолётов на основе исторических данных Flightradar24 - 22 марта 13:45 - Получены ответы на уточняющие вопросы: - География: Московская область - Период: до одного года (начать с 6 или 12 месяцев в зависимости от доступности данных) - Типы самолётов: все доступные в Flightradar24 - Модель шума: на первом этапе учитывать только высоту (тип самолёта, время суток, ветер - в бэклог) - Визуализация: траектория полёта + шумовая граница (зависит от высоты) на карте - Интерактивность: зум, фильтры по времени, при наведении показывать рейс, высоту, скорость, аэропорты - Точность: без привязки к реальным замерам шума, санитарные нормы - в бэклог - Технологии: простые, доступные, без жёстких предпочтений - Доступ к данным: ключ и подписка Explorer уже есть - 22 марта 14:06 - Создано новое ТЗ: `tasks/flightradar24/reports/ТЗ_Карта_шумового_загрязнения_Flightradar24.md` - 22 марта 14:10 - Произведена очистка проекта: удалены все файлы, не относящиеся к новой задаче, оставлены только: - `config.json` (обновлён под новую задачу) - `README.md` (полностью переписан) - `scripts/check_api.py` (скрипт проверки API) - `scripts/flightradar24_explorer.py` (базовый клиент API) - `requirements.txt` (зависимости Python) - `reports/ТЗ_Карта_шумового_загрязнения_Flightradar24.md` (основное ТЗ) - Создана структура проекта: папки `backend/`, `frontend/`, `data/`, `docs/` - Создан файл `.env.example` с шаблоном конфигурации - 22 марта 14:15 - Получен sandbox API ключ от Славы: `9d4d192b-8641-4420-b00e-09e3d935badf|fIMdnj8WixjDqyaUTHLKPlgHU9d5JiOZwJJWGiVHdcda602e` - 22 марта 14:20 - Создано виртуальное окружение Python, установлены зависимости (requests, python-dotenv) - 22 марта 14:21 - Обнаружено, что для sandbox нужен другой базовый URL (`https://fr24api.flightradar24.com/api`) и заголовок `Accept-Version: v1` - 22 марта 14:22 - Успешно протестирован sandbox API: - Endpoint `/static/airlines/AAL/light` вернул данные American Airlines - Endpoint `/live/flight-positions/light` с параметром bounds вернул 2 тестовых полёта - Sandbox возвращает статические тестовые данные, что подходит для прототипа - Отправлено голосовое сообщение Славе о начале работы над прототипом --- ## Прототип v0.2 — Карта шумового загрязнения (22 марта 2026, вечер) ### Ключевые технические решения **Картографическая библиотека:** - Leaflet → отклонён (слабая производительность) - MapLibre GL → отклонён (WebGL заблокирован в sandbox-браузере Славы: `Sandboxed = yes`) - OpenLayers 10 (Canvas2D) → выбран ✅ работает везде без WebGL **Геометрия шумовых зон:** - Turf.js `buffer()` + `difference()` — реальные км на земле - Строятся посегментно для каждого сегмента трека - Зоны: 0–2 км, 2–5 км, 5–7 км, 7–11 км от самолёта **Физическая модель шума (теорема Пифагора):** - D = √(R² − H²), где R — граница зоны (сфера), H — высота, D — ширина на карте - Чем выше самолёт — тем уже зона - При H ≥ R зона исчезает **Доступ к карте:** - nginx proxy: `https://openclaw.mva154.duckdns.org/noisemap/` → Flask :5555 - location /noisemap/ → proxy_pass http://172.19.0.2:5555/ ### Данные (загружено) **Production API FR24, 4 аэропорта, 2 дня:** - SVO 21.03: 33 рейса (вылеты + прилёты) - DME 21.03: 15 рейсов - VKO 21.03: 21 рейс - ZIA 21.03: 1 рейс (WZ560 TBS→ZIA) - SVO/DME/VKO/ZIA 20.03 +1.5ч смещение: загружены - **Итого: 147 рейсов / 29 487 точек** **Критически важное замечание по FR24 API:** - bounds формат: `lat_max,lat_min,lon_min,lon_max` (НЕ lat_min,lon_min!) - Ошибочный формат возвращал самолёты над США вместо МО - `flight-tracks` не поддерживает фильтр по времени — весь трек ~700 точек/10сек - Стоимость треков: ~74 кредита/запрос ### Стратегии загрузки **Стратегия А (реализована):** снимки каждые 3ч → треки - Охват: ~10–20%, стоимость ~3 100 кредитов/день/аэропорт - 7 дней × 4 аэропорта ≈ 87 000 кредитов ✅ **Стратегия Б (планируется):** табло → все треки - Охват: ~100%, стоимость ~24 500 кредитов/день/аэропорт - Требует источник списка рейсов по дате - Исследование источников (19:15–19:23 МСК): - FR24 сайт (api.flightradar24.com) — только текущие данные, исторические недоступны - FR24 Explorer API — нет endpoint для списка рейсов по аэропорту/дате - svo.aero — SPA (Angular), нет публичного JSON API - Яндекс.Расписания — нужен API ключ (бесплатный, требует аккаунт Яндекс) - OpenSky Network — нужна регистрация для исторических данных - **Лучший вариант: Яндекс.Расписания** — нужен ключ от Славы ### Функциональность карты (итоговая) - Треки: градиент по высоте 🔴→🟡→🟢 (0–8500 м) - Шумовые зоны: реальные полигоны, чекбоксы для каждой зоны - Переключатель видимости треков (зоны остаются) - Фильтры: аэропорт (SVO/DME/VKO/ZIA/все), тип (вылет/прилёт), высота (м), период - Карточка рейса: тип 🛫/🛬, название города (Сочи (AER)), дата, вход/выход из МО в МСК - Флажки: несколько, переименование (dblclick), удаление (клик), разные цвета - Линейка: мультисегментная, Haversine, двойной клик = завершить - Прокрутка боковой панели ✅ ### Документация проекта Создана полная документация в `tasks/flightradar24/prototype/docs/`: - ARCHITECTURE.md — схема системы, стек, поток данных - DATA_LOADING.md — обе стратегии с расчётом кредитов, FAQ - NOISE_MODEL.md — физическая модель, формула, таблица зон - FR24_API.md — endpoints, bounds gotcha, rate limits - UI.md — слои, фильтры, флажки, линейка, nginx конфиг - DEVLOG.md — хронология решений, технические долги ### Расход кредитов FR24 (на конец дня) - Итого потрачено: ~16 161 из 120 000 промо (~13.5%) - Остаток: ~103 839 кредитов ### Стратегия Б — статус (22.03.2026 вечер) - Яндекс.Расписания ключ получен: `788c6840-5f85-4a04-bfb5-4e20c003cffc` - Сохранён в `.env` как `YANDEX_RASP_API_KEY`, код станции SVO: `s9600213` - Собрано табло SVO 21.03: 750 рейсов → `data/tablo_SVO_2026-03-21.json` - После дедупликации: 66 совпадений (треки уже есть), 684 новых - **fetch_strategy_b.py** (v1) — ПРОВАЛИЛСЯ: алгоритм искал fr24_id в снимке в момент вылета, но самолёт ещё на земле → 0 результатов - **fetch_strategy_b_v2.py** — ИСПРАВЛЕН: ищет через +15/+30/+45 мин после вылета (или -30/-20/-10 мин до прилёта), расширенный bbox 200 км вокруг SVO - Запуск v2 запланирован на 20:25 UTC через cron (cron job ID: 63c2c8ce) — ждём сброса rate limit - FR24 rate limit сейчас активен из-за ~684 запросов первого запуска ### Текущие данные на карте - 147 рейсов / 29 487 точек (стратегия А, все аэропорты, 20–21.03) - URL: https://openclaw.mva154.duckdns.org/noisemap/ - Flask работает на порту 5555 ### Следующие шаги 1. ⏳ Дождаться запуска fetch_strategy_b_v2.py в 20:25 UTC, сообщить результат 2. Фильтр по дате в UI 3. Тепловая карта накопленного шума 4. Модель шума v2 (учёт типа ВС)