H3 Telemetry: данные на приборной панели Haval H3
Как я вывел топливо, температуру двигателя и напряжение АКБ на приборную панель Haval H3 через Android-приложение для штатной ГУ.
Обновлено 29 октября 2026 г.
Содержание
Я сделал H3 Telemetry, чтобы вывести остаток топлива, температуру двигателя и напряжение аккумулятора на приборную панель Haval H3. Приложение устанавливается на штатное головное устройство и показывает показания на дополнительном дисплее.
В этом проекте я использую локальный системный сервис ГУ gwm_adapter. Home Assistant и облачный аккаунт для вывода показаний не нужны.
На 29 октября 2026 года у меня есть расхождение между кодом и релизом: в основной ветке уже 1.7.0, а опубликованный в GitHub Releases APK — 1.2.1. Здесь описываю текущую реализацию. Все её настройки не следует автоматически ожидать в старом APK.
Под какую конфигурацию я делаю приложение
Проект рассчитан на Haval H3 со штатной ГУ на Android 9, кодом проекта 203 и приборной панелью 1920 × 720. Именно эта конфигурация зафиксирована в проекте как проверенная.
Для чтения данных нужен системный интерфейс gwm_adapter и разрешение com.gwm.android.adapter.permission.GET_DATA. Обычного Android-смартфона для работы приложения недостаточно: на нём нет этого сервиса и автомобильного дополнительного дисплея.
Совместимость с другой прошивкой или моделью требует отдельной проверки. Совпадение марки автомобиля само по себе ничего не гарантирует.
Три основных показателя
По умолчанию включены остаток топлива, температура охлаждающей жидкости и напряжение 12-вольтового аккумулятора. У каждого показателя можно отдельно изменить видимость, координаты и размер текста.
Кроме трёх основных показателей я добавил выбор дополнительных сигналов: температуры салона, пробега, расхода, состояния двигателя, данных коробки передач и TPMS, а также текущей даты. Наличие пункта в настройках означает, что приложение умеет его запросить и отобразить. Это не подтверждение того, что конкретная ГУ возвращает осмысленное значение. Отсутствующий показатель отображается прочерком.
Как получаются литры топлива
От ГУ я получаю процент остатка. Для отображения в литрах использую фиксированную константу 55 л:
литры = процент × 55 / 100
Это расчёт, а не прямое измерение объёма топлива. Например, при 40% получится 22 л. Значение 55 л я задал в приложении; его нельзя переносить на другой автомобиль как универсальную характеристику бака.
В своей интеграции GWM RU я использую другую схему: получаю литры из облака и рассчитываю проценты по переданной облаком ёмкости. Поэтому показания двух проектов могут не совпадать.
Как я организовал чтение и вывод
Чтение данных я вынес в GwmAdapterClient. Он подключается к Android Binder-сервису, подписывается на изменения и дополнительно опрашивает набор сигналов раз в 2 секунды. При потере соединения предусмотрено повторное подключение.
TelemetryService поддерживает работу фонового сервиса, принимает обновления и запускает ClusterActivity на дополнительном дисплее. В первую очередь выбирается дисплей с ID 2; если его нет — другой дисплей, отличный от основного. Окно рассчитано на область 1920 × 720.
ClusterActivity создаёт прозрачное окно с текстовыми показателями. Оно не принимает касания. Положение элементов и размер шрифта сохраняются в настройках приложения; текущий код допускает размер текста от 18 до 48 пикселей.
Сетевой обмен я в приложение не добавлял: в манифесте нет разрешения INTERNET. Данные приходят от локального системного сервиса и отображаются на приборке.
APK и запуск
Готовый APK я опубликовал в релизе 1.2.1. После подключения к своей ГУ через уже настроенный ADB его можно установить или обновить:
adb install -r .\Haval-H3-Telemetry-v1.2.1-release.apk
adb shell monkey -p app.havalh3.telemetry -c android.intent.category.LAUNCHER 1
Эти команды относятся именно к APK 1.2.1. Для версии 1.7.0 потребуется сборка текущих исходников либо соответствующий подписанный релиз, когда он будет опубликован. Инструкция установки не означает, что совместимость с вашей ГУ уже проверена.
Для сборки текущего кода нужны JDK 17, Android SDK 35 и Gradle 8.9:
gradle --no-daemon assembleDebug
Результат — app/build/outputs/apk/debug/app-debug.apk. Debug-подпись может отличаться от подписи установленного релизного приложения; её нельзя считать обычным обновлением с сохранением настроек.
Автозагрузка и диагностика
В 1.7.0 я включил автозагрузку по умолчанию и добавил обработку обычной, ранней и быстрой загрузки Android, а также обновления пакета. Если приборный дисплей ещё недоступен, приложение повторяет попытки запуска с интервалом 5 секунд, до 120 попыток.
На главном экране предусмотрены команды «Показать» и «Скрыть», переключение автозагрузки и настройка отдельных показателей.
Для проверки подключения и загрузки используются теги журнала:
adb logcat -d |
Select-String "H3GwmAdapter|H3TelemetryService|H3TelemetryBoot|SecurityException"
Обновление прошивки ГУ может изменить системный интерфейс или конфигурацию дисплеев. Первую настройку положения текста и проверку новой версии проводите на неподвижном автомобиле: показатели не должны перекрывать штатные предупреждения.
Код
Мои исходники на момент публикации: GwmAdapterClient, TelemetryService, ClusterActivity, TelemetryStore, OverlaySettings и манифест приложения.
Для дистанционной работы с автомобилем я делаю два других проекта: GWM RU и Cesar Smart ReadOnly. У H3 Telemetry своя задача — показания непосредственно на приборной панели.