Свой Audi Connect

Ранее я уже писал, что очень хотел иметь рабочий Audi Connect (не путать с myAudi) в машине, но тогда узнал, что Audi эти сервисы уже не предоставляет и купить подписку нельзя, и отложил это дело в долгий ящик.

Я знал, что существуют кастомные приватные серверы и за 100–150 долларов в год тебя могут к ним подключить, но мне эта идея не очень нравилась: никаких гарантий.

Прошло два года с тех пор, как я последний раз пытался разобраться, и сейчас, с активным внедрением AI в нашу жизнь, я решил попробовать ещё раз и сделать свой сервер для сервисов Audi Connect.

Я уже когда-то общался с людьми, у которых были свои кастомные серверы или которые были к таким подключены. Естественно, владельцы серверов готовым решением не делились — они на этом зарабатывали или использовали чисто для себя, да и, наверное, распространять такое и брать за это деньги может быть незаконно. Но эти люди дали небольшие подсказки: что в файле hosts можно подставить свои серверы, добавить параметр no-ssl-cert-check и т. д.

С помощью Claude AI я начал исследовать это дело. Я подставил свой хост в hosts и добавил no-ssl-cert-check, но оказалось, что на моём MIB это не работает — наверное, в новых прошивках это уже закрыли. MIB игнорирует no-ssl-cert-check и пытается проверять сертификат домена, который, само собой, не Audi.

Попросил Claude поискать способы обойти это, и он нашёл. Оказалось, что адрес бэкенда голова берёт вовсе не из hosts, а из конфига одного из своих служебных модулей — там прописано больше двадцати профилей бэкенда: боевой Live, тестовые Development_1, Development_2 и т. д. И часть тестовых профилей ходит по обычному HTTP, без всякого TLS. Раз голова это допускает, то достаточно было заменить в активном профиле адрес сервера Audi на адрес моего сервера по http — и проверка сертификата отпала сама собой. Заодно выяснилось, что на голове нет даже настроек DNS: без них она в принципе не может разрешить ни одно доменное имя, так что их пришлось создать.

Далее Claude написал примитивный бэкенд на PHP, чтобы наш сервер мог отвечать и логировать запросы. Мы подставили наш бэкенд в голове, и она пошла на него: достучалась до нашего сервера и запросила авторизацию.

Ранее у меня был бэкап моей прошивки, где лежали кеши сервисов Audi Connect (ещё с тех времён, когда они работали в США), а также я достал подобные кеши у знакомых. В кешах были всякого рода картинки сервисов, ServiceList.txt, XML- и SCXML- + HTML-ответы серверов. Самый ценный файл — ServiceList.txt: по нему можно было проследить всю цепочку обращений автомобиля к серверу. Claude очень быстро разобрался, как это работает, и сразу же накидал всю цепочку на нашем бэкенде. Голова успешно достучалась и авторизовалась на нашем бэкенде, а дальше — дело техники: надо было отдать какой-то сервис. Из простых сервисов в кеше была «Погода»; Claude бегло глянул на формат и, использовав бесплатный API погоды, добавил её к нам. Кроме самого ответа сервиса, надо ещё выдать лицензию на то, что данный сервис нам доступен, — делается одной строчкой в ответе.

MIB успешно пошёл на наш бэкенд, авторизовался, получил лицензию и вывел на экран какую-то информацию.

Дальше надо было детальнее разобрать формат ответов, добавить графику и логику экранов. Я вживую нигде не видел работающий Audi Connect: у нас в стране половина машин из США, и по приезде в Украину эти сервисы не работают — другие частоты LTE, да и сама голова прописана на американский бэкенд, который давно выключен. Даже официально купленные в Украине авто практически не имеют этих сервисов. Но в качестве референса я взял статью Алексея (AlexDark) https://mqb-blog.com/ru/2019/12/29/mib2-high-pt4/ — у него в статье было множество фото этих сервисов, и я теперь мог хотя бы увидеть, как оно выглядело в оригинале. У него тоже был Audi Connect через кастомный сервер, но, по сути, тот просто проксировал запросы на оригинальный Audi Connect.

Сперва я решил довести до ума сервис «Погода». Всех иконок и подложек у меня не было, поэтому я нашёл максимально похожие на оригинал векторные иконки и сгенерировал всевозможные подложки (растровые картинки с погодой в версиях день/ночь).

Получилось вроде бы похоже на оригинал.

Доделанная «Погода» на собственном сервере Audi Connect

Дальше по отработанной схеме и по тому, что я нашёл в кешах, я сделал другие сервисы: новости, цены на топливо, расписание поездов и самолётов, зарядки, парковки. Само меню Audi connect, кстати, тоже отдаётся с сервера — какие сервисы в нём есть и в каком порядке, решаю я. В качестве провайдеров данных использовал Open-Meteo, RSS-ленты новостей, свой парсер украинских заправок, Укрзалізницю (расписание поездов), AeroDataBox (рейсы), OpenStreetMap (парковки), HERE (зарядные станции, а также поезда за границей). Везде используются бесплатные тарифы, лимитов хватает для одной машины.

С этими сервисами провозился, наверное, около недели. Но из сервисов мне очень хотелось ещё отображение автомобильного трафика на штатной карте и спутниковый вид.

И вроде бы источник данных найти несложно — такие данные предоставляет HERE, но у HERE нет данных дорожного трафика для Украины: это стало недоступно с февраля 2022 года из-за вторжения России в Украину, этот функционал просто выключили.

Я долго думал, как бы его реализовать. У TomTom тоже есть трафик, но в их готовом TPEG-фиде для автопрома Украины тоже нет. Однако Claude сказал, что если машина поддерживает OpenLR, то трафик можно собрать самим из других эндпоинтов TomTom — Traffic Flow (векторные тайлы) и Traffic Incidents, — а там данные для Украины есть. Я почти сразу побежал в машину, мы сделали несколько тестов с фейковыми данными, и подтвердилось, что для Украины это работает. Дальше Claude сделал энкодер, который собирает на сервере поток TPEG2 с привязкой участков дорог через OpenLR, а голова уже сама раскладывает их по своей карте. За границей, где у HERE данные есть, трафик берётся у него. Патчить саму голову для этого не пришлось: штатный модуль трафика берёт адрес сервера из ответа нашего же бэкенда.

Следующим на очереди был спутниковый вид карты. Сначала я немного пошёл не по тому следу: в прошивке вся обвязка вокруг Google Earth, и я подумал, что надо искать свежую прошивку P51XX, где провайдер изменился на HERE. По факту же выяснилось, что изменился только эндпоинт, а формат ответа сервера остался тем же. Долго не мог понять, почему не выводятся тестовые тайлы, — оказалось, если не отдать в ответе лого провайдера, MIB тайлы просто игнорирует. Ещё один нюанс: клиент спутниковых тайлов, в отличие от остальных сервисов, ходит только по HTTPS и проверяет сертификат по своему списку корневых центров 2018 года, в котором Let’s Encrypt ещё не было, — пришлось дописать этот корень в список на голове.

После удачного вывода тестовых тайлов Claude перевёл всё на провайдера HERE, а также добавил на нашем сервере кеширование тайлов, чтобы не выйти за месячные лимиты HERE: один город весит порядка 150 МБ в паре вариантов зума.

На этом всё! Планирую доделать ещё пару сервисов: путеводитель по достопримечательностям на данных Wikipedia уже собран, но в машине пока не проверен. Для остальных у меня на данный момент нет примеров ответов, и делать их не из чего.

Также, предугадывая ваши вопросы: я не планирую предоставлять доступ для других автомобилей — ни бесплатно, ни за деньги. Не ожидайте и того, что я где-то выложу готовое решение публично или больше подробностей о подкапотном функционале сервера. Было потрачено много времени, труда и токенов, и дальше использования на своей машине распространять это я не планирую — по крайней мере, пока что.