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

164 lines
12 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.
# 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 запросов первого запуска
### Текущие данные на карте
- 147 рейсов / 29 487 точек (стратегия А, все аэропорты, 2021.03)
- URL: https://openclaw.mva154.duckdns.org/noisemap/
- Flask работает на порту 5555
### Следующие шаги
1. ⏳ Дождаться запуска fetch_strategy_b_v2.py в 20:25 UTC, сообщить результат
2. Фильтр по дате в UI
3. Тепловая карта накопленного шума
4. Модель шума v2 (учёт типа ВС)