Недавний перелёт я провел, пытаясь выяснить, что можно сделать, подключившись к 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 услужливо отметили, что это, скорее всего, узлы.
Жаль, что я не начал собирать данные раньше в полете. Мне бы хотелось увидеть форму этой кривой при приближении к крейсерской скорости.
Ничего особенно полезного или удивительного я здесь не нашел, но провести полет было весело!