Files
wiki/memory/2026-03-22.md
2026-04-12 21:55:33 +03:00

12 KiB
Raw Blame History

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() — реальные км на земле
  • Строятся посегментно для каждого сегмента трека
  • Зоны: 02 км, 25 км, 57 км, 711 км от самолёта

Физическая модель шума (теорема Пифагора):

  • 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ч → треки

  • Охват: ~1020%, стоимость ~3 100 кредитов/день/аэропорт
  • 7 дней × 4 аэропорта ≈ 87 000 кредитов

Стратегия Б (планируется): табло → все треки

  • Охват: ~100%, стоимость ~24 500 кредитов/день/аэропорт
  • Требует источник списка рейсов по дате
  • Исследование источников (19:1519:23 МСК):
    • FR24 сайт (api.flightradar24.com) — только текущие данные, исторические недоступны
    • FR24 Explorer API — нет endpoint для списка рейсов по аэропорту/дате
    • svo.aero — SPA (Angular), нет публичного JSON API
    • Яндекс.Расписания — нужен API ключ (бесплатный, требует аккаунт Яндекс)
    • OpenSky Network — нужна регистрация для исторических данных
    • Лучший вариант: Яндекс.Расписания — нужен ключ от Славы

Функциональность карты (итоговая)

  • Треки: градиент по высоте 🔴🟡🟢 (08500 м)
  • Шумовые зоны: реальные полигоны, чекбоксы для каждой зоны
  • Переключатель видимости треков (зоны остаются)
  • Фильтры: аэропорт (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 запросов первого запуска

Текущие данные на карте

Следующие шаги

  1. Дождаться запуска fetch_strategy_b_v2.py в 20:25 UTC, сообщить результат
  2. Фильтр по дате в UI
  3. Тепловая карта накопленного шума
  4. Модель шума v2 (учёт типа ВС)