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