Недавний перелёт я провел, пытаясь выяснить, что можно сделать, подключившись к Wi-Fi на борту самолета, но без доступа к Интернету.

Я возвращался домой со Strange Loop прямым рейсом из Сент-Луиса в Окленд. Это достаточно долгий перелет, и я планировал купить доступ в Интернет за 8 долларов и поработать, но Wi-Fi-портал Southwest не принял никакой формы оплаты. Веб-страница не выдала мне никаких полезных сообщений об ошибках, поэтому я открыл инструменты разработчика в браузере, чтобы посмотреть, смогу ли я выяснить, что же не так.
Я нашел ошибочный запрос, но он не дал никаких полезных подсказок, которые указали бы мне путь к решению. Однако, там же я увидел еще один запрос, который привлек мое внимание: повторяющийся успешный запрос current.json.

Вот пример ответа на один из таких запросов:
{
  "sat_commlink_portal": {
    "status": "conn_ok",
    "time": "Sun Sep 24 22:02:19 2023"
  },
  "pcent_flt_complete": 33,
  "altVal": "35998",
  "lon": "-100.755",
  "satcomm_status": {
    "commlink": "active",
    "linkparams": "not-stale"
  },
  "dtzone": "PDT",
  "within_us": true,
  "etad": "06:19 PM",
  "lat": "40.201",
  "gspdVal": "487",
  "ttgc": "2h 25m",
  "dist_remain": "1167",
  "actime24": "15:54"
}Похоже, именно эти данные нужны для страницы статуса рейса бортового Wi-Fi-портала. Поскольку это была одна из немногих вещей, к которым я мог получить доступ в этой сети, я решил извлечь из нее максимум пользы.
Я воспользовался функцией браузера "Copy as cURL", чтобы быстро получить команду для запроса. Между прочим, эта функция присутствует в Firefox и всех браузерах на основе Chromium, и она очень удобна, если вам нужно повторить запросы вашего браузера и вы хотите отправить все те же заголовки.

После некоторых экспериментов я обнаружил, что cookie или заголовки, включенные в запрос, не является обязательными, а это означает, что я могу получить данные с помощью простого curl 'https://getconnected.southwestwifi.com/current.json'. Я настроил цикл для вывода данных в лог-файл:
watch -n 30 "curl https://getconnected.southwestwifi.com/current.json | jq -c >> flight-logs"Я не знал, что буду делать с данными на этом этапе, но сразу начал их собирать, чтобы потом иметь как можно больше данных.
По ходу дела я решил повнимательнее посмотреть на ответы, чтобы понять, с чем именно мне предстоит работать. Вот пример ответа, снабженный моими предположениями о том, что представляют собой поля:
{
  // Похоже на информацию о спутниковом интернет-соединении.
  "sat_commlink_portal": {
    // С соединением всё хорошо!
    "status": "conn_ok",
    // Я не уверен что это за время.
    // Оно вообще не меняется.
    "time": "Sun Sep 24 22:02:19 2023"
  },
  // Процент прогресса текущего полета.
  // Я не знаю, про расстояние это или про время.
  "pcent_flt_complete": 33,
  // Текущая высота.
  "altVal": "35998",
  // Текущие координаты.
  "lat": "40.201",
  "lon": "-100.755",
  // Выглядит как (дополнительная?) информация о спутниковом интернет-соединении.
  "satcomm_status": {
    // Соединение активно!
    "commlink": "active",
    // Что-то не просрочено!
    "linkparams": "not-stale"
  },
  // Часовой пояс пункта назначения этого рейса — PDT.
  "dtzone": "PDT",
  // Этот рейс в пределах США.
  "within_us": true,
  // Наше предполагаемое время прибытия в пункт назначения.
  "etad": "06:19 PM",
  // Наша текущая скорость относительно земли.
  "gspdVal": "487",
  // Примерное оставшееся время. Может быть, "время до контакта с землей"?
  "ttgc": "2h 25m",
  // Оставшееся расстояние полета в милях.
  "dist_remain": "1167",
  // Текущее время в некотором часовом поясе.
  "actime24": "15:54"
}По большей части это просто, но мне интересно несколько частей:
- В чем разница между - sat_commlink_portal.statusи- satcomm_status.commlink?
- pcent_flt_complete— это расстояние или расчетное время?
- Насколько сильно меняются значения - altVal,- etadи- gspdValв течение полета?
- Что такое - acв- actime24? Я бы подумал "aircraft", но в данном случае это время — это текущее время в пункте назначения, а не текущее время в месте нахождения самолета.
В течение полета я работал над скриптами, которые могли бы визуализировать некоторые данные после того, как я закончу их сбор. Вот что у меня получилось:
Изменение высоты с течением времени
Говоря об этом, мне больше всего было любопытно посмотреть, насколько зашумленными будут данные о высоте.

Трудно увидеть шум на таком большом расстоянии. Вот те же данные, но без учета снижения самолета:

Согласно этим данным, высота самолета колебалась всего лишь примерно на 20-30 футов. Это более стабильно, чем я ожидал! Я предполагал, что увижу здесь гораздо больше изменений, но я не знаю, насколько это нормально, и не знаю, насколько точны эти данные.
Изменение расчетного времени прибытия с течением времени
Я предполагал, что оно будет достаточно стабильным, и так оно и было. Полет прошел довольно гладко, по крайней мере, после начала.

Мне любопытно, что было бы, если бы у нас была задержка приземления из-за погоды. Будет ли заявленное расчетное время прибытия постепенно увеличиваться по мере того, как будет расти уверенность авиакомпании в задержке, или оно резко возрастет ближе к концу?
Изменение скорости с течением времени
Она также была стабильной, как и ожидалось.

дополнение: Первоначально я обозначил эти скорости как мили в час, но некоторые читатели HN услужливо отметили, что это, скорее всего, узлы.
Жаль, что я не начал собирать данные раньше в полете. Мне бы хотелось увидеть форму этой кривой при приближении к крейсерской скорости.
Ничего особенно полезного или удивительного я здесь не нашел, но провести полет было весело!
Комментарии (21)
 - baldr04.10.2023 16:48+6- Я бы попробовал ещё поменять что-нибудь, например, высоту и отправить обратно через POST. А вдруг?  - GritsanY04.10.2023 16:48+1- Есть целый фильм, почему нельзя так делать :) - https://www.kinopoisk.ru/film/1368311/ Чёрный ящик  - DrGluck0704.10.2023 16:48- Да ничего не будет. Вряд ли можно из развлекательной сети добраться до шины ARINC в том смысле, чтоб можно было вмешиваться в её работу. А эти данные в сети гуляют наверное для отображения их на мониторах пассажиров. - Кстати фильм хороший. Очень рекомендую всем. Как и одни из лучших фильмов про авиацию "Whisky Romeo Zulu"  - niko_zvt04.10.2023 16:48+1- Так в этом и будет «забава», если дотянуться до всех мониторов и отобразить резкое изменение скорости/высоты. Особо впечатлительным на мониторы лучше не смотреть. 
 
 
 
 - Firsto04.10.2023 16:48+1- Первоначально я обозначил эти скорости как мили в час, но некоторые читатели HN услужливо отметили, что это, скорее всего, узлы. - Так, пждите, это разве не одно то же? (ʘ‿ʘ)  - ris58h Автор04.10.2023 16:48- Думаю, речь про милю и морскую милю. Это не одно и то же.  - unclear012204.10.2023 16:48+2- Я предположу, что координаты и параметры полета система берет с шины ARINC-429. В этом случае скрость будет в узлах (умножьте на 1,852 и получите км/ч). Высота в футах, но тут есть нюансы: может быть AGL (выше уровня суши), а может быть AMSL (выше среднего уровня моря). Высота AGL может давать заметную "шероховатость" в зависимост от повехности, над которой проходит полет, AMSL, как правило, дает более пологий график. - Оставшееся расстояние обычно считается по кратчайшей дуге от текущего местонахождения до места назначения. - Теперь про статусы. Опять же предположу, чтозsat_commlink_portal - это статус доступности наземного портала авторизации/платежей и т.п. А вот satcomm_status может быть статусом спутникового модема. - Все эти данные нужны чтобы корректно показывать положение самолета и статус доступа к Интернету на портале в самолете. - По поводу POST и т.п.: софт, устанавливаемый на борту самолета проходит сертификацию на соответствия требованиям безопасности. Развлекательные системы имеют исключтельно доступ на чтение с шины ARINC-429 и изолированы от систем управления полетом. Максимум, чего вы добъетесь своим POST запросом, это переместите отметку самолета на карте портала в произвольную точку, хотя я и в этом сомневаюсь, ибо неспользуемые методы должны быть заблокированы.  - santjagocorkez04.10.2023 16:48+2- Скорость в узлах — это всегда скорость относительно среды, а не точки на карте. Водное судно может делать 16 узлов прямолинейного хода и при этом оставаться в одной и той же географической координате. - То же самое с самолётом: он может, к примеру, иметь минимальную скорость отрыва от земли, выраженную в узлах. И при этом в каждом рейсе координатная скорость для этой же величины будет разная: то ветер попутный, то боковой, то встречный, и каждый раз ещё и скорость этого ветра разная. Тут я пока оставил в стороне температуру воздуха, которая тоже немного влияет на минимальную скорость отрыва (но уже на скорость в узлах). - Определение, даваемое нынче через угловую минуту меридиана, противоречит историческому смыслу этой единицы.  - unclear012204.10.2023 16:48+5- Нет, скорость не всегда указавается относительно среды (в случае самолета, воздуха). - Бывает приборная скорость, а бывает путевая. В примере выше - gspd, что с большой степенью вероятности указывает на скорость относительно земли (ground speed), то есть скорость путевую.- Не забывайте, для чего передаются эти данные - для отображения пассажиру. Пассажиру истинная воздушная скорость без надобности, ему интересна скорость приближения к аэропорту назначения. 
  - DrGluck0704.10.2023 16:48- Дополню предыдущих ораторов. У самолёта минимум три скорости: IAS (indicated airspeed), TAS (true airspeed) и GS (ground speed). - Обычно пилотов интересует только IAS, она же и отображается на PFD, т.е. на самом главном дисплее, на котором отображается авиагоризонт, высота и ещё некоторые полезные штуки. Но IAS зависит не только от скорости относительно воздуха, но и от высоты полёта. Поэтому на эшелоне IAS маленькая и там вообще отображаются не узлы, а махи. - TAS отображает реальную скорость относительно воздуха. Поэтому на эшелоне TAS может быть в два раза больше, чем IAS. - А GS это скорость относительно земли. Вычисляется по GPS и/или IRS. В полёте помогает оценить скорость ветра. 
 
  - DrGluck0704.10.2023 16:48- Высоты AGL на эшелоне не будет. Потому что радиовысотомер показывает высоту меньше чем 2500 футов. Зато он иногда может показать что-то вроде 1000 футов на эшелоне, сработав на пролетающем самолёте. - Скорость на графике скорее всего GS, а может TAS. Потому что IAS на эшелоне будет меньше 300 узлов. 
 
 
 
 - truebest04.10.2023 16:48- pcent_flt_complete - percent of flight complete - Процент выполнения полета считается по времени. 
 - DrGluck0704.10.2023 16:48- Почему удивляет изменение высоты 25-30 футов? Автопилот должен довольно точно выдерживать высоту. Учитывая, что до встречного самолёта всего лишь 1000 футов по вертикали.  - altman04.10.2023 16:48- Видимо была хорошая погода и спокойная атмосфера, потому что когда болтанка и просят пристегнуть ремни, самолёт может ощутимо терять несколько десятков метров высоты очень быстро. Вот это как раз было бы интересно увидеть, на сколько реально "проваливается" самолёт в "воздушную яму". Другое дело, что неизвестна частота обновления, сомневаюсь что она в реальном времени или хотя бы меньше минуты, скорее всего минут 5... 
 
 
           
 



AgentFire
прикольно. вот бы любой самолёт так умел
gxcreator
Качаете GPSTest на телефон и просто сами смотрите эти данные, лучше сидеть у окна.
Didimus
Использовал навигатор с навителем, он показывал скорость 600+ км/ч, кстати