[Перевод] Wi-Fi без Интернета на рейсе Southwest

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

674401426486128dde3bb851becb7739.jpeg

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

Я нашел ошибочный запрос, но он не дал никаких полезных подсказок, которые указали бы мне путь к решению. Однако, там же я увидел еще один запрос, который привлек мое внимание: повторяющийся успешный запрос current.json.

96c74964b6b1b463af111e43a8120d0f.jpg

Вот пример ответа на один из таких запросов:

{
  "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, и она очень удобна, если вам нужно повторить запросы вашего браузера и вы хотите отправить все те же заголовки.

cfd6e94f3420587517ead2c2b74b640e.jpg

После некоторых экспериментов я обнаружил, что 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», но в данном случае это время — это текущее время в пункте назначения, а не текущее время в месте нахождения самолета.

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

Изменение высоты с течением времени

Говоря об этом, мне больше всего было любопытно посмотреть, насколько зашумленными будут данные о высоте.

da5ed8dedf66f26bde7beec7b78d53d6.png

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

d2e63af26e90c353edd8e4997b08236f.png

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

Изменение расчетного времени прибытия с течением времени

Я предполагал, что оно будет достаточно стабильным, и так оно и было. Полет прошел довольно гладко, по крайней мере, после начала.

b9e7406b2aa28b61b436f3005483633b.png

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

Изменение скорости с течением времени

Она также была стабильной, как и ожидалось.

d1d5783d2ea526b3044883d4fdb60784.png

дополнение: Первоначально я обозначил эти скорости как мили в час, но некоторые читатели HN услужливо отметили, что это, скорее всего, узлы.

Жаль, что я не начал собирать данные раньше в полете. Мне бы хотелось увидеть форму этой кривой при приближении к крейсерской скорости.

Ничего особенно полезного или удивительного я здесь не нашел, но провести полет было весело!

© Habrahabr.ru