English | Русский
Реальный расход, GPS-маршруты, автоматизация, AI-аналитика — локально, без облака.
Возможности | Скриншоты | Автоматизация | AI Инсайты | ABRP | Установка | Сборка | Поддержать
Штатный бортовой компьютер BYD занижает расход на 10-30%. BYDMate берёт данные напрямую из BMS (energydata) и показывает реальное потребление. Плюс данные, которых нет в штатной системе: расход на стоянке, баланс ячеек, стоимость поездок, AI-аналитика.
Приложение работает полностью локально на головном устройстве DiLink 5.0 — никакие данные не покидают автомобиль (кроме двух опциональных функций, которые включаются вручную: AI-инсайты через OpenRouter и телеметрия в A Better Route Planner).
| Функция | Описание | |
|---|---|---|
| BMS | Реальный расход | Данные BMS (energydata), не бортовой компьютер. Тренд по скользящему окну 25 км |
| GPS | Трекинг поездок | GPS-маршруты, дистанция, скорость |
| Charge | Зарядки | Автоматическая запись AC/DC, статистика за период и за всё время, ручное добавление и редактирование |
| AI | AI Инсайты | Анализ вождения через LLM (OpenRouter) |
| Idle | Расход на стоянке | Мониторинг idle drain из energydata |
| Bat | Здоровье батареи | Температура, SoH (на Leopard 3), баланс ячеек, 12V |
| Map | Карта маршрута | osmdroid (OpenStreetMap) в деталях поездки |
| Rules | Автоматизация | Правила WHEN→THEN: триггеры по параметрам → команды D+ |
| Widget | Плавающий виджет | 7 полей поверх других приложений: SOC, запас хода, расход + тренд, время, t° салона, t° батареи, 12V |
| Auto | Автозапуск | WorkManager, запускается при включении |
| CSV | Экспорт данных | Экспорт поездок и зарядок в CSV |
Вокруг SOC-кольца расположены четыре значения в стиле плавающего виджета: сверху длительность поездки, одометр и температура в салоне; снизу пробег текущей поездки, расчётный запас хода и расход текущей поездки со стрелкой тренда. Цвета и логика тренда такие же, как в плавающем виджете, поэтому информация читается одинаково и на главном экране, и поверх других приложений.
Ниже кольца: AI-инсайт, малая карточка здоровья батареи (SoH на Leopard 3, температура, 12V), расход на стоянке, последние поездки, фильтр периода.
Анализ эффективности вождения от LLM — расход, тренды, батарея, рекомендации
Температура, SoH (на Leopard 3), 12V аккумулятор, баланс ячеек, напряжение
Аккордеон Месяц > День > Поездка с фильтрами и цветовой индикацией расхода
Правила КОГДА→ТОГДА, редактор условий и действий, настройки срабатывания
Батарея, тарифы, валюта, AI-настройки (OpenRouter API), экспорт данных
Вкладка Автоматизация позволяет создавать правила для автоматического управления автомобилем через D+ API.
КОГДА условие выполняется → ТОГДА выполнить команду.
Примеры:
- SOC < 20% → включить внутреннюю циркуляцию
- Скорость > 0 → закрыть шторку
- Температура за бортом < 0 → включить подогрев зеркал
| Описание | |
|---|---|
| 25 триггеров | SOC, скорость, температура, двери, окна, давление шин, режим езды, точки-геозоны, время суток и др. |
| 41 команда | Окна (включая отдельные — водителя и пассажира), климат, свет, замки, люк, зеркала — всё через D+ API |
| 8 видов действий | D+ команда, тихое/звуковое уведомление, запуск приложения, звонок, навигация, URL, Яндекс.Музыка |
| Edge trigger | Срабатывает только при переходе false→true (не повторяется каждые 3 сек) |
| Cooldown | Настраиваемая пауза между срабатываниями |
| Overlay-подтверждение | Всплывающее окно «Отмена / Выполнить» перед действием. Таймаут 15 с → автоотмена |
| Безопасность | Окна не открываются на скорости > 80 км/ч, CAN/SHELL команды заблокированы |
| Журнал | Лог всех срабатываний с результатами |
| Шаблоны | 6 готовых правил для быстрого старта |
- AND — все условия должны выполняться
- OR — достаточно одного условия
- Только на P — правило срабатывает только когда авто на паркинге
Компактный overlay 260×108 dp поверх других приложений — видно на карте, в медиа, в BYD-приложениях.
Семь полей в 3 строки. Цвета: иконки серые, значения белые. Рамка и SOC% подсвечиваются цветом статуса (SOC или 12V — что хуже).
Верхняя строка (мелким, 13sp):
- ⏱ Длительность текущей поездки —
N минилиX ч Y мин(напр.47 мин,1 ч 12 мин). Старт — момент включения зажигания, конец — выключение. Простои с включённой машиной (стоишь с кондиционером, пассажир вышел купить воды, светофор) входят в поездку — пока электрика жива, счётчик не сбрасывается - 🚗 Температура в салоне — °C, с DiPlus
Центральная строка (крупно, главные значения):
- SOC % (18sp bold, цветной) — заряд тяговой батареи. Зелёный > 50%, жёлтый 20–50%, красный < 20%
- ~N км (28sp белым) — расчётный запас хода:
SOC × ёмкость батареи ÷ baseline-расход × 100. Тильда подчёркивает что это оценка, не показания БК. Подробнее про то, как считается baseline-расход, ниже в разделе «Запас хода» - X.X ↓ (18sp, цветной по тренду) — расход текущей поездки, кВт·ч/100км, со стрелкой тренда (см. ниже)
Нижняя строка (мелким, 13sp):
- 🔋 Температура батареи — °C, с DiPlus
- ⚡ 12V — напряжение бортовой сети, В. Норма 12.5–14.7 В, < 12.0 В = жёлтый, < 11.7 В = красный
Цифра справа — расход текущей поездки в кВт·ч/100км. Считается как энергия, потраченная с момента включения зажигания, делённая на пройденные с того же момента километры. По мере движения цифра сходится к тому значению, которое в итоге запишется в историю поездок: что видно в виджете в момент остановки, то и попадёт в карточку поездки.
Первые 2 километра виджет плавно переходит со среднего расхода прошлой поездки на расход текущей: до 300 м показывает прошлое значение, с 300 м до 2 км линейно подмешивает текущее, после 2 км показывает только текущее. Так не пугают резкие 50–60 кВт·ч/100км из холодного старта и разгона: пока поездка короткая, за основу берётся уже устоявшийся средний расход прошлой поездки, и только когда дистанция становится представительной, цифра уходит на собственный расход.
На стоянке (зажигание выключено) показывается средний расход прошлой завершённой поездки — то же значение, что было видно в её последний момент.
Запас хода ~N км считается по смеси: 50% веса берётся от последней завершённой поездки, 30% от предпоследней и 20% от той, что была до неё (короткие поездки до 3 км в расчёт не идут — это не репрезентативный пробег). Когда едешь длинную дорогу, к этой смеси добавляется ещё расход за последние 10 км текущей поездки: его доля растёт от нуля на первых трёх километрах до половины к 25 километрам. Так прогноз быстро подхватывает смену стиля (городской хвост перед трассой, обратно с трассы в город), но не дёргается на коротких заездах и стоянках с климатом.
Стрелка тренда появляется после 2 км пробега и сравнивает скользящее 25-километровое среднее с твоим обычным стилем (среднее по последним 10 поездкам):
- ↓ зелёная — едешь экономнее обычного
- → белая (стрелка прямая) — в пределах обычного
- ↑ жёлтая — расход выше обычного
Стрелка не дёргается от каждой остановки на светофоре — есть небольшая инерция: чтобы стрелка сменила цвет, расход должен заметно отличаться от обычного и держаться так минимум минуту.
Что такое «поездка» для этой цифры. Один цикл зажигания: включил → выключил. Стоянка с включённым кондиционером внутри поездки учитывается естественно — лишние кВт·ч попадают в общий знаменатель. Короткие блипы (светофор, переподключение) не раскалывают поездку на две. Если DiLink прибьёт приложение посреди трассы — после рестарта счёт продолжается с реального момента включения зажигания, а не с нуля.
- Обычный тап — открыть BYDMate
- Долгий тап (1.5 сек) — скрыть до следующего открытия BYDMate
- Перетащить в корзину — выключить совсем
- Включение, прозрачность, сброс позиции — в Настройки → Плавающий виджет
Вкладка Зарядки автоматически ведёт журнал реальных пополнений заряда: список зарядок по месяцам, статистика за период и за всё время, фильтры AC и DC. Не каждое подключение пистолета становится записью: запись создаётся только если SoC реально вырос. Если кто-то ткнул пистолет и вынул через минуту, в журнал ничего не попадёт.
Запись пишется, если за время сессии у машины выросла либо ёмкость батареи, либо SoC. BYDMate пробует три источника данных по очереди и берёт первое пригодное значение:
- Прирост ёмкости в кВт·ч, если бортовая система сообщила обновлённое значение.
- Прирост SoC за активную сессию, переведённый в кВт·ч по текущей ёмкости батареи.
- Грубая оценка по дельте SoC от полной номинальной ёмкости, если первые два варианта пустые.
Если BYDMate работает в момент зарядки, запись появляется сразу. Если подключение случилось до запуска приложения или машина уехала в глубокий сон, BYDMate догоняет запись на следующем старте, как только увидит, что SoC прыгнул вверх по сравнению с тем, что было до зарядки. Поэтому даже offline-зарядки в гараже попадают в журнал.
Тип зарядки определяется по двум сигналам, по приоритету:
- Тип разъёма от бортовой системы: gun-state 2 = AC, 3 или 4 = DC. На некоторых моделях BYD значение приходит не всегда, тогда работает следующий пункт.
- Средняя мощность сессии: больше 15 кВт = DC, иначе AC. AC-зарядка физически не выдаёт больше 11 кВт, DC-станции стартуют от 22 кВт (CCS slow), поэтому порог 15 кВт уверенно разделяет два режима.
На вкладке Зарядки три фильтра: «Все», «AC», «DC».
Если запись не появилась автоматически или цифры выглядят странно:
- Кнопка
+ зарядкав шапке вкладки: добавить сессию вручную с указанием даты, длительности, кВт·ч, тарифа. - Долгое нажатие на запись: открывается меню «Изменить» / «Удалить». В режиме редактирования можно поправить любое поле уже сохранённой зарядки.
Функция в активном тестировании. На Leopard 3 пишется стабильно. На других моделях BYD автоматика может сработать неточно: например, бортовая система не сообщит мощность или тип разъёма, тогда AC и DC может определиться неправильно. В таких случаях правьте записи вручную и при возможности присылайте логи в Issues.
BYDMate поддерживает две модели поставки данных — переключается в Настройки → Источник данных поездок или на шаге мастера первого запуска.
| Режим | Для каких машин | Что читается |
|---|---|---|
| BYD energydata | Leopard 3 (Fangchengbao Bao 3) и другие модели со встроенной BMS-базой energydata |
SQLite BYD: точный расход (BMS), пробег, длительность, заряды |
| DiPlus TripInfo | Song и другие модели без встроенной energydata | База DiPlus: список поездок, SOC start/end, средняя скорость |
Как выбрать: если после 2–3 поездок на машине список «Поездки» пустой — переключите режим. На Leopard 3 нужен energydata (точнее), на Song и аналогах — TripInfo (единственный доступный источник).
В режиме DiPlus TripInfo расход считается по разнице SOC — он на ~1 кВт·ч/100км грубее, чем BMS, но это компенсируется тем, что других данных у машины нет.
SoH (State of Health) — это процент «здоровья» тяговой батареи, который рассчитывает сама бортовая система автомобиля по своим внутренним алгоритмам.
На BYD Leopard 3 (Fangchengbao Bao 3) BYDMate берёт это значение напрямую из бортовой системы и показывает в карточке «Здоровье батареи». Это реальный SoH от машины, а не оценка по разнице SoC: BYDMate просто читает то, что пишет себе сама машина.
На других моделях BYD доступ к этому значению пока не подтверждён, поэтому SoH там не отображается. Остальные показатели карточки (температура батареи, 12V, баланс ячеек, минимальное и максимальное напряжение) работают на всех моделях, у которых есть DiPlus.
Если в вашей машине SoH доступен через DiPlus и вы хотите помочь добавить поддержку, заведите Issue с указанием модели и года выпуска.
SoH и автоматическая запись зарядок на Leopard 3 работают через дополнительный режим «Системные данные», который читает значения от бортовой системы автомобиля. Включается один раз:
- Откройте Настройки и включите переключатель «Системные данные (экспериментально)».
- DiLink покажет системный диалог разрешения ADB-отладки с отпечатком ключа. Нажмите «Allow» или «Разрешить», поставьте галочку «Always allow from this computer», чтобы DiLink не спрашивал заново при каждом старте приложения.
- После этого SoH появится в карточке «Здоровье батареи», а зарядки начнут записываться автоматически с реальными значениями кВт·ч.
Если вы не включите этот режим, остальные функции BYDMate (поездки, расход, плавающий виджет, автоматизация) работают как обычно. Только SoH и автоматическая запись зарядок не появятся.
Режим помечен «экспериментально», потому что протестирован на Leopard 3. На других моделях BYD доступ к этим данным не подтверждён.
BYDMate разрабатывается и тестируется на BYD Leopard 3 (Fangchengbao Bao 3). На других моделях BYD большинство функций тоже работает, но есть отличия. Перед первым запуском проверьте:
- Источник данных поездок: для моделей без встроенной BMS-базы energydata (Song, Yuan и аналоги) переключитесь на режим DiPlus TripInfo в Настройках или в мастере первого запуска. См. секцию «Источник данных поездок» выше.
- Ёмкость батареи: по умолчанию 72.9 кВт·ч под Leopard 3. Зайдите в Настройки → Батарея и поставьте свою ёмкость. Например, Atto 3 = 60.5 кВт·ч, Seal AWD = 82.5 кВт·ч, Han EV = 85.4 кВт·ч. Без этого расчёт запаса хода и стоимости поездок будет неточным.
- SoH: показывается только на Leopard 3. На других моделях карточка «Здоровье батареи» работает без поля SoH.
- Зарядки: алгоритм AC и DC проектировался под Leopard 3. На других моделях запись может появиться с задержкой или с неточной мощностью, особенно для DC. Используйте ручное добавление и редактирование, если автоматика промахнулась.
- Автоматизация и плавающий виджет: работают одинаково на любой модели, потому что используют DiPlus API.
Если что-то не работает или показывает странное, заведите Issue с указанием модели машины и версии прошивки DiLink. Нам нужны такие отчёты, чтобы расширять поддержку.
| Параметр | Значение |
|---|---|
| Платформа | DiLink 5.0 (Android 12, API 32) |
| Процессор | Snapdragon 780G |
| Экран | 15.6" landscape, 1920x1200 |
| GMS | Нет (AOSP без Google Play Services) |
| Протестировано | BYD Leopard 3 (Fangchengbao Bao 3) |
BYD energydata (BMS SQLite) → HistoryImporter → Room DB → Compose UI
DiPlus API (localhost:8988) → TrackingService ↗ ↓
Android LocationManager → TripTracker (GPS) ↗ AI (OpenRouter)
DiPlus sendCmd API ← AutomationEngine ← Rules (Room DB)
| Данные | Источник |
|---|---|
| Расход, пробег, длительность | BYD energydata (BMS) |
| SOC, скорость, температура | DiPlus API (getDiPars) |
| Напряжение ячеек, 12V | DiPlus API |
| GPS координаты | Android LocationManager |
| AI-аналитика | OpenRouter API (опционально) |
| Управление авто | DiPlus sendCmd API (автоматизация) |
Без OBD-адаптера — BYD блокирует сторонние OBD-устройства. BYDMate использует тот же API, что и встроенные приложения BYD.
Без ADB BYDMate работает в базовом режиме. Включённая ADB-отладка нужна для следующих фич:
- Здоровье батареи (SoH) — точное значение из BMS вместо прочерка.
- Автоматический журнал зарядок — приложение само фиксирует начало и конец сессии. Без ADB зарядки можно добавлять только вручную.
- Автоматизация — триггеры и действия (управление стёклами, климатом, светом и т.д.). Без ADB вкладка «Автоматизация» не работает.
Без ADB остаются доступны: трекинг поездок и пробега, расход энергии, виджет, AI-инсайты.
Чтобы включить эти фичи, после установки BYDMate откройте Настройки → «Системные данные (экспериментально)». DiLink один раз покажет диалог «Allow ADB debugging» — нажмите Allow и поставьте галочку «Always allow from this computer».
-
DiLink 3 / 4 — ADB можно активировать самостоятельно: установите BydDevelopmentTools, зайдите в Настройки → Version Management, 10 раз тапните по тексту Reset to factory default, активируйте Debug Mode when USB is Connected и Wireless adb debug switch. На обновлённых прошивках DiLink 3/4 ADB может быть так же закрыт, как на DiLink 5 — тогда придётся идти по пути ниже.
-
DiLink 5.0 — ADB-отладка заблокирована и открывается только удалённо из Китая. Сделать это можно через продавцов на TaoBao (поиск по
DiLink 5.0, ~40 ¥ внутри Китая / ~80 ¥ извне, оплата через AliPay). Продавец удалённо открывает инженерное меню по присланному QR-коду, после чего ADB включается штатно.Пошаговая инструкция: PDF-гайд (русский) — приложен в репозитории.
На головном устройстве должен быть установлен DiPlus (D+) — приложение-мост для доступа к данным автомобиля.
Самый простой способ (без ADB):
- Скачайте APK по ссылке выше
- Перенесите на USB-флешку (или скачайте напрямую через браузер DiLink)
- Откройте файл через файловый менеджер DiLink и установите
- Разрешите установку из неизвестных источников, если потребуется
Альтернативно через ADB (если активирован на шаге 1):
adb connect <IP-адрес DiLink>:5555
adb install DiPlus.apkIP-адрес DiLink можно найти в настройках Wi-Fi на головном устройстве.
- Скачайте BYDMate APK из Releases
- Перенесите на DiLink: через USB-флешку, по сети, или через ADB (
adb install BYDMate.apk) - Разрешите установку из неизвестных источников, если потребуется
- Откройте BYDMate — появится мастер настройки
- Выдайте разрешения на локацию и хранилище (для GPS и чтения energydata)
- Выберите источник данных поездок —
BYD energydataдля Leopard 3,DiPlus TripInfoдля Song и других моделей без встроенной BMS-базы (см. секцию выше) - Укажите тарифы на электроэнергию (для расчёта стоимости поездок)
Важно: отключите "Disable background Apps" для BYDMate, иначе DiLink будет убивать приложение:
DiLink > Settings > General > Disable background Apps > BYDMate = OFF
В Настройках можно изменить:
- Ёмкость батареи — по умолчанию 72.9 кВт·ч (Leopard 3)
- Тарифы — домашний (AC) и быстрая зарядка (DC), валюта
- Пороги расхода — границы для цветовой индикации (зелёный/жёлтый/красный)
BYDMate может анализировать вашу статистику вождения с помощью AI (LLM). Это опциональная функция — приложение полностью работает и без неё.
- Зарегистрируйтесь на OpenRouter (бесплатно)
- В личном кабинете OpenRouter создайте API Key (раздел Keys)
- В BYDMate откройте Настройки → раздел AI Инсайты
- Вставьте API-ключ в поле "OpenRouter API Key"
- Нажмите "Выбрать модель" — откроется список доступных LLM (есть бесплатные)
- Нажмите "Сохранить и получить инсайт"
AI получает обезличенную статистику за 7 и 30 дней и возвращает:
- Факты — метрики, рассчитанные из реальных данных (расход с трендом, % коротких поездок, idle drain)
- Инсайты — корреляции, аномалии и поведенческие рекомендации от LLM
Запрос отправляется раз в день. Результат кэшируется локально. Никакие персональные данные (GPS, маршруты) не передаются — только агрегированная статистика.
BYDMate может отправлять живые показатели машины в A Better Route Planner (ABRP) через официальный Iternio Telemetry API. ABRP использует эти данные, чтобы план маршрута и оценка остатка хода обновлялись по реальному состоянию батареи, а не по средним табличным значениям.
Функция опциональная, выключена по умолчанию и включается вручную в Настройках.
ABRP использует «Generic Live Data Token» — отдельный токен на каждую машину в гараже:
- Откройте abetterrouteplanner.com и войдите в аккаунт.
- Перейдите в гараж и откройте машину, на которой хотите видеть live-данные. Машина должна быть сохранена в гараж, иначе токен не появится.
- Шестерёнка «Настройки автомобиля» → раздел «Данные» → кнопка «Подключить актуальные данные».
- В списке провайдеров выберите «Generic» и нажмите «Привязать». Появится длинная строка-токен — это и есть
User Token.
Если в списке нет «Generic»: смените код модели машины в гараже ABRP на любую популярную модель BYD (например, BYD Atto 3 или BYD Seal), сохраните, и Generic появится. После привязки токена код модели можно вернуть обратно.
- Настройки → раздел «ABRP — телеметрия».
- Вставьте полученный токен в поле «Токен живых данных из ABRP».
- Опционально: код модели ABRP (если знаете точный код своей машины из библиотеки ABRP) и интервал отправки (5–120 сек, по умолчанию 12 сек — рекомендуемое значение Iternio).
- Нажмите «Сохранить ABRP», затем включите переключатель «Живые данные → A Better Route Planner». Без сохранённого токена переключатель остаётся неактивным.
- ABRP-приложение на DiLink (или браузер на телефоне) теперь будет видеть актуальный SOC, мощность, температуры, заряд.
Только агрегированные показатели машины, без идентификаторов:
- SOC — текущий процент заряда тяговой батареи
- Speed — скорость, км/ч
- Power — текущая мощность тяги (отрицательная при зарядке, как требует Iternio)
- Battery / cabin / exterior temp — температуры батареи, салона и за бортом
- Capacity — номинальная ёмкость батареи
- Odometer — пробег, км
- Tire pressures — давление в шинах (4 колеса)
- is_charging / is_parked — флаги состояния
- is_dcfc / kwh_charged — тип зарядной станции (DC vs AC) и количество кВт·ч в текущей сессии (только если включён режим «Системные данные» — иначе эти поля просто отсутствуют)
- soh — реальный SoH батареи (Leopard 3, при включённом режиме «Системные данные»)
- GPS-координаты не передаются. ABRP запускается как отдельное приложение Android прямо на DiLink и читает геопозицию из ОС сам. Дублировать координаты через сторонний канал не нужно — это лишь утечка позиции на чужой сервер.
- Не отправляются: VIN, идентификатор устройства, история поездок, маршруты, пользовательские настройки.
ABRP подбирает прогноз на основе модели машины из своей библиотеки + телеметрии: текущий SOC, температура батареи, скорость движения, ветер, профиль дороги, перепады высот. Свой собственный «расчётный остаток хода» BYDMate в ABRP не передаёт — у ABRP есть собственный, более точный расчёт под конкретный маршрут, в котором учитывается погода и рельеф.
# Требуется: JDK 17, Android SDK 34
git clone https://github.com/AndyShaman/BYDMate.git
cd BYDMate
./gradlew assembleDebug- Kotlin 2.1 + Jetpack Compose + Material 3
- Room (SQLite) + Hilt (DI) + OkHttp
- osmdroid (OpenStreetMap) + Coroutines/Flow
- Min SDK 29 / Target SDK 29 / Compile SDK 34
- BYD Trip Info (
org.jayb.bydapp) by jayb — оригинальное приложение для DiLink, вдохновение для BYDMate - DiPlus (迪加) by Van Design — приложение-мост к данным автомобиля
Проект некоммерческий, делаю как хобби. Если захочется поблагодарить, реквизиты в SUPPORT.md. Если нет, всё равно спасибо за доверие.
GPLv3 с дополнительными условиями атрибуции. См. LICENSE для деталей.
Copyright (C) 2026 AndyShaman
English version: README.en.md








