Skip to content

Latest commit

 

History

History
745 lines (464 loc) · 45 KB

File metadata and controls

745 lines (464 loc) · 45 KB
BYDMate 图标

BYDMate

BYD DiLink 5.0 行程记录与能耗分析

Android Kotlin Jetpack Compose License GitHub release Sponsor

真实能耗、GPS 路线、自动化、AI 分析 — 本地优先,云端功能可选。

分屏 1/3 和 2/3,仪表盘导航投射,前挡风玻璃上的 Yandex 导航提示,转向灯盲区摄像头,俄语语音助手,ABRP 遥测。

已在 Leopard 3(方程豹 钛3)上测试,支持 Sea Lion 07、宋、Atto 3、Seal、汉。适配 DiLink 3.0、5.0、5.1 及搭载新版 UI7 界面的固件(OTA V1.6)。

中文 | English | Русский

功能 | 截图 | 自动化 | 投射到仪表盘 | HUD | 分屏 | AI 洞察 | ABRP | 安装 | 编译 | 赞助


关于

BYDMate 是一款运行在 BYD DiLink 5.0 车机(方程豹 钛3)上的 Android 应用。它可以记录行程、GPS 路线、BMS 真实能耗、充电记录,并提供 AI 驱动的驾驶分析。无需 Google Play Services。

原车车载电脑低估能耗约 10-30%。BYDMate 直接从 BMS(energydata SQLite)读取数据并显示真实数值。此外还提供了原车系统没有的数据:停车耗电、电芯均衡、行程费用、AI 洞察。

核心功能(行程、充电、自动化、本地洞察、离线语音助手)完全在车机本地运行,无需联网。云端功能默认关闭,仅在手动输入密钥后启用。数据流向详见数据与网络章节。


更新内容

v3.0 之后 BYDMate 新增的主要功能。

UI7 固件上的分屏。 固件更新后,分屏由车辆自己完成:1/3 与 2/3 面板、分隔线和滑动交换手势都是原生的,BYDMate 只负责启动所选的两个应用。在这类固件上,设置里不会出现机制选择项,因为只有一种方式。

"方向盘按键"触发器。 任意方向盘按键都可以绑定自己的动作:自动化,添加触发器,"方向盘按键",在学习模式下按下需要的按键。关闭或删除规则后,按键恢复出厂功能。

导航提示投射到前挡风玻璃(HUD)。 转向动作、到转向点的距离、道路名称、到达时间和限速标志会显示在原车抬头显示器上。即使导航被最小化或投射到仪表盘,引导也会继续。需要带 HUD 的配置。详见"HUD"章节。

分屏 1/3 + 2/3。 两个应用同时显示:宽侧放导航,窄侧放音乐或聊天应用。可通过悬浮窗、自动化或语音启动。如果你的固件不支持 BYDMate 窗口,还有"原生分屏"模式,由固件自己完成分屏。详见"分屏"章节。

盲区摄像头。 打开转向灯后,侧方摄像头画面会自动出现在仪表盘或屏幕上的小窗中。如果检测到侧后方有车辆,窗口会以橙色边框高亮。

俄语语音 AI 助手。 语音识别完全在车机本地运行,无需联网。简单指令即时执行,其余交给 AI 助手:读取车辆数据、控制车身和空调、规划路线、运行自动化并用语音回答。该助手仅支持俄语:BYD 原车助手已覆盖英语和中文,BYDMate 只补齐车机缺失的俄语。完整说明见俄语 README

手动计算续航。 如果按行程历史自动估算不合适,可在电池设置中填写自己的能耗表(按电池温度)。


功能

功能 描述
BMS 真实能耗 来自 BMS(energydata)的数据,而非原车估算。以 25 公里滑动窗口显示趋势
GPS 行程记录 GPS 路线、距离、速度
Charge 充电记录 自动记录 AC/DC 充电,周期与累计统计,支持手动添加和编辑
AI 洞察 驾驶分析:设备端规则(默认)或通过 OpenRouter 的 LLM
TRIP TRIP 1/2 计数器 里程、电耗(含停车耗电)、行驶时间和费用,从上次重置起计;长按重置,点按查看详情
Bat 电池健康 温度、SoH( 钛3)、电芯均衡、12V 电压
Map 路线地图 行程详情中使用 osmdroid(OpenStreetMap)
Rules 自动化 WHEN→THEN 规则:参数触发 → 车辆命令
Cluster 投射到仪表盘 通过方向盘按键将所选应用投射到仪表盘(默认右星键)
HUD 抬头显示 将 Yandex 导航的转向动作、距离和限速标志显示在原车抬头显示器上
Split 分屏 两个应用同时显示:BYDMate 窗口的 1/3 与 2/3 布局,或固件自带的分屏
Cam 盲区摄像头 转向灯打开时显示对应一侧的摄像头画面:在仪表盘上或屏幕上的小窗中
Voice 语音助手 俄语离线助手:车机本地语音识别、AI 助手(32 个工具)、神经网络语音合成
Widget 悬浮窗 7 字段悬浮窗叠加在其他应用之上:SOC、续航、能耗+趋势、时间、车内温度、电池温度、12V
Auto 自启动 WorkManager 开机自启
CSV 数据导出 行程和充电记录导出为 CSV

截图

仪表盘

仪表盘

SOC 圆环周围有四个悬浮窗风格的字段:上方是行程时长、里程表和车内温度;下方是当前行程距离、预估续航和当前行程能耗(带趋势箭头)。颜色和趋势逻辑与悬浮窗保持一致,确保在主屏幕和其他应用之上信息阅读体验一致。

圆环下方:AI 洞察、电池健康小卡片( 钛3 上的 SoH、温度、12V)、两个 TRIP 1/TRIP 2 计数器、最近行程、周期筛选。每个计数器显示里程、电耗(含停车耗电)、行驶时间和费用,从上次重置起计。长按计数器可重置,点按可查看详情弹窗。

AI 洞察

AI 洞察展开

驾驶效率分析 — 能耗、趋势、电池、建议(本地或 LLM)

电池健康

电池健康

温度、SoH( 钛3)、12V 蓄电池、电芯均衡、电压

行程

行程手风琴列表

月份 > 日期 > 行程 手风琴式列表,带筛选和能耗颜色标识

自动化

自动化

WHEN→THEN 规则,条件和动作编辑器,触发配置

设置

设置

电池、电价、货币、洞察来源(本地 / OpenRouter)、数据导出

分屏

分屏:左侧 Yandex Music,右侧 Yandex Navigator

1/3 与 2/3 两个面板,BYDMate 悬浮窗在上层


自动化

自动化标签页允许你创建规则,通过车辆系统接口直接控制车辆。

工作原理

条件满足 → 则 执行命令。

示例:

  • SOC < 20% → 开启内循环
  • 速度 > 0 → 关闭遮阳帘
  • 车外温度 < 0 → 开启后视镜加热

能力

描述
25 种触发器 SOC、速度、温度、车门、车窗、天窗、胎压、驾驶模式、地理围栏、时段、精确时间和时间范围(含星期选择)、方向盘按键、点击小组件、语音指令、服务启动、网络连接恢复等
41 条命令 车窗(包括单独控制驾驶位和乘客位)、空调、灯光、门锁、天窗、后视镜。直接通过车辆系统接口
17 种动作类型 车辆命令、通知、启动应用、拨打电话、Yandex 导航路线、打开 URL、Yandex Music、暂停、媒体音量、哨兵模式、Wi-Fi 热点、朗读文本、向助手提问、投射到仪表盘、分屏(启动、关闭、切换)
边沿触发 仅在 false→true 转换时触发(不是每 3 秒重复触发)
冷却时间 可配置的两次触发之间的间隔
悬浮窗确认 动作执行前弹出"取消/执行"窗口,15 秒超时 → 自动取消
安全保护 车速 > 120 km/h 时禁止开窗,> 80 km/h 时禁止开天窗,> 30 km/h 时禁止解锁车门;CAN/SHELL 命令已屏蔽
日志 完整的触发历史及结果
模板 6 个预设规则快速上手
立即运行 在编辑器中手动运行规则,跳过触发器和冷却时间

逻辑

  • AND — 所有条件必须同时满足
  • OR — 任一条件满足即可
  • 仅 P 档 — 规则仅在车辆处于 P 档时触发

悬浮窗

紧凑的 260×108 dp 悬浮窗,叠加在其他应用之上。在地图、媒体播放器和 BYD 应用中均可见。

悬浮窗图例:各区域说明

显示内容

三行共七个字段。颜色:图标灰色,数值白色。边框和 SOC% 以状态颜色高亮(SOC 或 12V 中较差的那个)。

顶行(小字,13sp):

  • 当前行程时长N 分钟X 小时 Y 分钟(如 47 分钟1 小时 12 分钟)。从点火开启开始计时,熄火结束。行车中的停车(开空调等人、等红灯)计入行程 — 只要电气系统仍在工作,计时器就不会重置
  • 🚗 车内温度 — °C

中间行(大字,关键数值):

  • SOC %(18sp 加粗,彩色)— 动力电池电量。绿色 > 50%,黄色 20-50%,红色 < 20%
  • ~N 公里(28sp,白色)— 预估续航:SOC × 电池容量 ÷ 基准能耗 × 100。波浪号表示这是估算值,而非原车读数。基准能耗的计算方式见下方"续航"小节
  • X.X ↓(18sp,趋势颜色)— 当前行程能耗,kWh/100km,带趋势箭头(详见下文)

底行(小字,13sp):

  • 🔋 电池温度 — °C
  • 12V — 蓄电池电压,V。正常 12.5-14.7 V,< 12.0 V = 黄色,< 11.7 V = 红色

能耗与趋势箭头(右侧区块)

右侧数字为当前行程能耗,单位 kWh/100km。计算方式为点火以来消耗的能量除以同期行驶的公里数。随着行驶,该数值会逐渐收敛到最终写入行程记录的值:熄火时悬浮窗显示的数值,就是最终存入行程卡片的值。

前 2 公里内,悬浮窗会从上一次行程的平均能耗平滑过渡到当前行程的能耗:300 米以下显示上次数值,300 米到 2 公里之间线性混合当前数值,2 公里之后仅显示当前数值。这样做避免了冷启动和加速时出现的 50-60 kWh/100km 的吓人尖峰:在行程还很短时,以上次行程已经稳定的平均值为准,只有当距离足够有代表性后,数值才会切换到本次行程的实际能耗。

停车时(熄火状态)悬浮窗显示上次完整行程的平均能耗 — 即该行程最后一刻显示的数值。

续航 ~N 公里 采用加权混合计算:50% 来自上次完整行程,30% 来自上上次,20% 来自再上一次(3 公里以下的短行程不计入,因为不具有代表性)。长途行驶时,当前行程最近 10 公里的能耗也会纳入混合:其权重从最初 3 公里时的零开始,到 25 公里时增长至一半。这样在驾驶风格变化时(市区末段上高速、高速回到市区),预估能快速跟上,但又不会因短途或开空调停车而频繁跳动。

这是自动计算的结果。如果不合适,可在 设置 → 车辆与电池 →"续航计算方式" 中选择"手动":自己填写 5 个点的表格,电池温度从 +20 到 -20 °C 及对应能耗,并可选填 100% 电量时的续航里程。

趋势箭头在行驶 2 公里后出现,将 25 公里滑动平均值与你的常用风格(最近 10 次行程的平均值)进行比较:

  • ↓ 绿色 — 驾驶比平时更节能
  • → 白色(直线)— 在常用范围内
  • ↑ 黄色 — 能耗高于平时

箭头不会因每个红灯而跳动 — 有一定的惯性:要改变颜色,能耗必须明显偏离基准并保持至少一分钟。

此处"一次行程"的定义。一次点火循环:启动 → 熄火。行程中开空调停车自然会计入 — 多消耗的 kWh 会反映在分母中。短暂的停顿(红绿灯、重连)不会将行程拆分为两段。如果在高速上 DiLink 杀掉了应用,重启后会从真实的点火时刻继续计算,而非从零开始。

操作

  • 点击 — 打开 BYDMate
  • 长按(1.5 秒) — 隐藏,直到再次打开 BYDMate
  • 拖入垃圾桶 — 完全关闭
  • 开关、透明度、重置位置 — 在 设置 → 小组件

投射到仪表盘

BYDMate 可以将所选应用(默认导航)投射到驾驶员前方的仪表盘上,这样地图和导航指示就在视线正中,中控屏可以腾出来做别的事。

方向盘按键控制

  • 短按所选按键:将应用投射到仪表盘。
  • 再次短按:切回中控屏。
  • 长按右星键:保持原车行为(车机菜单);BYDMate 不会拦截。

开启方式

打开 设置 → 显示,开启"投射到仪表盘"。应用会自动启用所需的服务(需在安装时完成 ADB 激活,见"安装"章节),并自动将仪表盘切换到投射模式:由"立即显示到仪表盘"开关控制,默认开启。车机上无需手动设置。

之后,短按所选方向盘按键(默认右星键)即可将所选应用投射到仪表盘或切回中控屏。

如果关闭"立即显示到仪表盘",需要自己把仪表盘切换到投射模式一次:点击车机主屏上的投射图标,然后在出现的地图上按 IPC 按钮。

设置 → 显示:仪表盘投屏各选项说明

投射模式:"出厂"与"扩展"

设置 → 显示 中,投射开关旁边可以选择投射模式。共两种,区别在于应用是否改动车辆的系统设置。

"出厂"(默认)。 应用不改动任何系统设置:投射通过虚拟显示器实现(画面镜像到仪表盘),窗口调节滑块工作更精确。安装与卸载不留任何痕迹。限制:投射期间语音助手和 HUD 看不到导航画面,助手的引导信息仅来自导航通知。

"扩展"。 导航以独立窗口直接运行在仪表盘显示器上,因此投射期间语音助手和 HUD 可以看到路线。为此应用会开启系统的自由窗口设置(enable_freeform_support)。该模式仅能通过带说明的确认对话框开启,开启后需一次性重启车机(长按音量旋钮)。新模式在下次投射时生效。

如何恢复出厂设置。 将模式切回"出厂":应用会立即把系统设置写回出厂值,重启车机后恢复完全生效。此后系统与安装 BYDMate 之前的状态完全一致。

如果你在 3.7 之前的版本中使用过投射,升级后原有行为会自动保留:模式保持"扩展"。从未开启过投射的用户,应用完全不会改动系统设置。

投射哪个应用

默认投射 Yandex 导航。开启开关下方有应用选择器:可选择任意已安装的应用(其他导航、媒体播放器等)。新选择在下次按下星键时生效。

窗口大小与位置

设置 → 显示 → "仪表盘窗口大小" 中共有五个滑块。如果你的车辆上投射画面本来就占满整个仪表盘(例如 Leopard 3),无需调整任何内容:默认值就是原来的全屏效果。

  • 宽度高度(20%-100%)- 窗口占仪表盘的比例。缩小窗口可以腾出空间,周围会透出原生仪表盘内容。
  • 水平偏移(0%-100%)- 窗口位置:0 为左边缘,50 为居中,100 为右边缘。仅在宽度小于 100% 时生效。
  • 垂直偏移(0%-100%)- 垂直方向同理:0 为顶部,50 为居中,100 为底部。
  • 缩放(50%-150%)- 投射应用界面的字体和元素大小:数值越小,文字越小,地图显示的范围越大。

调整会立即生效,投射过程中拖动滑块即可在仪表盘上看到效果。

带仪表盘迷你窗口的车型(Sea Lion 07 等)

部分车型的原厂仪表盘并非全屏显示投射画面,而是显示在一个固定区域内(Sea Lion 07 上是右侧三分之一)。全屏窗口在这些车型上会被裁切。解决方法:用上面的滑块缩小窗口并将其移动到可见区域。

Sea Lion 07 车主验证过的数值:宽度 32%,高度 92%,水平偏移 100%,垂直偏移 6%,缩放 90%

Sea Lion 07 的窗口设置

Yandex 导航在 Sea Lion 07 仪表盘迷你区域中显示

在这类车型上无法让窗口占满整个仪表盘:显示区域由仪表盘固件决定,无法控制。

工作原理

投射以上述两种模式之一运行。"出厂"模式下,BYDMate 创建虚拟显示器并将所选应用镜像过去,不改动任何系统设置。"扩展"模式下,应用以独立窗口直接运行在仪表盘显示器上,因此投射期间语音助手和 HUD 可以看到路线。为拦截方向盘按键,应用启用了自身的无障碍服务。仅在开关开启时工作,仅用于星键功能。不会修改固件或车辆本身,完全可逆。


HUD

如果车辆配备原车抬头显示器,BYDMate 会把 Yandex 导航的提示投射到前挡风玻璃上:转向图标、到转向点的距离、道路名称和到达时间。限速标志由单独的开关控制,以数字形式发送。当导航提示前方有测速摄像头时,转向箭头会替换为摄像头图标和距离。即使导航被最小化或投射到仪表盘,引导也会继续;Yandex 地图与 Yandex 导航同样可以作为提示来源。

设置 → 显示 的"HUD(抬头显示器)"栏目中开启:"HUD 导航"开关,以及单独的"箭头下方显示限速标志"。提示通过 HUD 自身的原车通道传输,因此需要配备抬头显示器的车型。如果车上没有该通道,应用会在设置中如实说明,并且不会启用该功能。


盲区摄像头

打开转向灯后,BYDMate 会自动显示侧方摄像头画面:左转向灯将左侧摄像头显示在仪表盘上,右转向灯在主屏幕上显示一个小窗。如果传感器发现侧后方有车辆,窗口会以橙色边框高亮。

设置 → 显示 → 盲区

设置 → 显示 的"盲区"栏目中开启(默认关闭)。同一处还可设置低于该速度不显示摄像头的速度阈值、小窗宽度及其位置:"设置位置"按钮会显示一个空窗口,用手指把它拖到摄像头画面应该出现的地方。需要配备全景影像的车型。


分屏

两个应用同时显示在屏幕上:一个占三分之二,另一个占三分之一。典型搭配是宽侧放导航、窄侧放音乐或聊天应用。左右两侧可以互换,应用可以随时更换,所选的应用组合会被记住。

分屏 1/3 + 2/3

开启

  1. 打开 设置 → 分屏,开启"分屏 1/3 + 2/3"开关。
  2. 如果开关下方出现需要重启的提示,请重启一次车机(长按音量旋钮)。如果你已经在使用"扩展"投射模式,则无需重启。

功能关闭时,应用不会改动任何系统设置。关闭开关会将设置恢复为出厂值;但如果"扩展"投射模式也在使用该窗口设置,则需要把该模式也关闭后,设置才会恢复为出厂值。

设置 → 分屏

分屏机制

开关下方可以选择由谁来分屏:"BYDMate 窗口"(默认)或"原生分屏"。

  • BYDMate 窗口 - 即下文描述的 1/3 与 2/3 布局,带底部胶囊按钮。
  • 原生分屏 - 由车辆固件自己分屏。即使 BYDMate 窗口不可用(DiLink 5.1),这种方式仍然有效。显示效果取决于固件:支持三分之一比例的固件会打开 1/3 与 2/3 两个面板,其余固件则将屏幕平分,第二个应用通过系统窗口选择。

在搭载新版 UI7 界面的固件上不会出现机制选择项:分屏由车辆自己完成,1/3 与 2/3 面板是原生的,开启时无需重启车机。

启动方式

共三种。设置里分屏栏目标题旁的"?"图标在车内随时可以查看说明。

  • 通过小组件(最方便)。在设置的"点击小组件"栏目开启"点击区域",并将"左侧点击操作"设为"启动分屏"。之后点击小组件左侧三分之一区域即可打开分屏,再次点击关闭。
  • 通过自动化。 规则中有三个动作:"分屏"、"关闭分屏"、"切换分屏"。例如可以在启动导航时自动开启分屏。
  • 语音。 直接让语音助手打开分屏。

首次启动与选择应用

首次启动时会依次选择宽侧(2/3)和窄侧(1/3)的应用。组合会被记住,下次直接打开。之后可以通过底部胶囊按钮或在设置中更换应用,设置里还有"重置上次组合"。

底部胶囊按钮

分屏激活期间,屏幕底部有一个小胶囊按钮。点击打开菜单:切换位置、交换应用、为左右任一侧选择其他应用、退出到普通全屏。分屏关闭后胶囊自动消失。

与其他功能的兼容

  • 如果有全屏内容覆盖(倒车影像、摄像头、视频),分屏会自动关闭。用平常的方式即可恢复:点击小组件或语音命令。
  • 从 BYDMate 按返回键会回到分屏。
  • 如果启动 DiLink 原生分屏,本应用的分屏会自动干净地退出,两种分屏不能同时运行。

充电记录

充电记录标签页自动记录每次实际的电量补充:按月列出充电记录、周期和累计统计、AC 与 DC 筛选。并非每次插入充电枪都会生成记录:只有当 SoC 确实上升时才会创建记录。如果有人刚插上枪一分钟就拔掉,日志中不会有任何记录。

什么算一次充电

如果充电期间电池容量或 SoC 有所增长,就会写入记录。BYDMate 依次尝试三个数据源,取第一个可用的值:

  1. 容量增量(kWh),如果车载系统报告了更新后的值。
  2. SoC 增量(活跃充电期间),按当前电池容量换算为 kWh。
  3. 粗略估算,根据 SoC 增量与标称容量计算,如果前两种方式均无数据。

如果 BYDMate 在充电期间运行,记录会立即出现。如果插枪发生在应用启动之前,或者车辆进入了深度睡眠,BYDMate 会在下次启动时发现 SoC 相比充电前有所跃升,然后补上记录。因此即使是在车库中离线充电,也会出现在日志中。

如何区分 AC 与 DC

充电类型按优先级由两个信号决定:

  1. 车载系统的枪状态:gun-state 2 = AC,3 或 4 = DC。某些 BYD 车型上该值不一定始终存在,此时进入下一步。
  2. 会话平均功率:大于 15 kW = DC,否则为 AC。AC 充电物理上不超过 11 kW,DC 充电站最低从 22 kW(CCS 慢充)起步,因此 15 kW 的阈值可以可靠地区分两种模式。

充电记录标签页有三个筛选器:"全部"、"AC"、"DC"。

手动添加与编辑

如果某条记录缺失或数据看起来异常:

  • 标签页顶部的 + 充电 按钮:手动添加充电记录,填写日期、时长、kWh、电价。
  • 长按某条记录:弹出"编辑"/"删除"菜单。编辑模式允许修改已有记录的任意字段。

此功能正在积极测试中。在 钛3 上运行稳定。在其他 BYD 车型上自动检测可能出现偏差:例如车载系统可能不报告功率或枪类型,导致 AC/DC 判断错误。遇此情况请手动编辑记录,如有可能请将日志发送至 Issues


电池健康(SoH)

SoH(State of Health,健康状态)是动力电池的"健康"百分比,由车辆的车载系统按其内部算法计算。

BYD (方程豹 钛3) 上,BYDMate 直接从车载系统读取此值并显示在"电池健康"卡片中。这是来自车辆的真正 SoH,而非根据 SoC 差值估算的数值:BYDMate 只是读取车辆自己记录的数据。

在其他 BYD 车型上,对此值的访问尚未确认,因此 SoH 不显示。卡片中的其他指标(电池温度、12V、电芯均衡、最低/最高电压)在所有支持的车型上均可用。

如果你的车暴露了 SoH 并且你希望帮助添加支持,请提交 Issue,附上车型和出厂年份。


SoH 和自动充电记录( 钛3)

在 钛3 上,SoH 和自动充电记录直接从车辆的车载系统读取数据。默认开启,无需手动切换或设置。应用首次访问车载系统时,DiLink 会弹出系统 ADB 调试权限对话框,显示密钥指纹。点击 "允许"(Allow),勾选 "始终允许来自此计算机的连接"(Always allow from this computer),这样 DiLink 不会在每次应用启动时重复询问。

之后,SoH 会出现在"电池健康"卡片中,充电记录开始以真实的 kWh 数值自动记录。

对于无法访问车载系统的车型(旧固件、非 DiLink),应用会优雅降级:BYDMate 的其他功能(行程、能耗、悬浮窗、自动化)照常工作,仅 SoH 和自动充电记录不可用。


如果你不是 钛3

BYDMate 在(方程豹 钛3)上开发和测试。在其他 BYD 车型上大多数功能仍然可用,但存在一些差异。首次启动前请检查:

  • 行程记录:在 钛3 上,行程来自内置 BMS energydata 数据库。在没有该数据库的车型(宋、元及类似车型)上,BYDMate 从实时数据流原生记录行程,行程列表会自动填充。通过 SOC 差值计算的能耗比 BMS 粗略一些,但列表不再是空的。
  • 电池容量:默认为 72.9 kWh( 钛3)。前往 设置 → 车辆与电池 设置你自己的容量。例如:Atto 3 = 60.5 kWh,Seal AWD = 82.5 kWh,汉 EV = 85.4 kWh。否则续航和行程费用计算将不准确。
  • SoH:仅在 钛3 上显示。在其他车型上"电池健康"卡片正常显示,但不含 SoH 字段。
  • 充电记录:AC/DC 判断算法针对 钛3 调校。在其他车型上记录可能出现延迟或功率不准确,尤其是 DC 充电。当自动判断不准时,请使用手动添加和编辑。
  • 自动化和悬浮窗:在所有车型上表现一致,因为它们使用车辆系统服务。

如果有功能不工作或显示异常数据,请提交 Issue,附上你的车型和 DiLink 固件版本,并附上你车辆的参数目录:设置 → 服务与数据 → "保存 fid 目录"。文件 fid-dump-….txt 会出现在 Download 文件夹中。文件里只有技术参数标识符,不含 VIN、不含位置信息、不含任何个人数据。

为什么需要它:不同 BYD 车型的参数集不同。在 钛3 上开启座椅通风的命令,在宋上可能是另一个编号,甚至不存在。这正是部分功能在其他车型上失效的原因。你车辆的参数目录能显示这些参数在你的固件上的名称和编号,这样我们就能依据你车辆的数据修复问题,而无需盲猜。


目标设备

参数
平台 DiLink 5.0(Android 12,API 32)
芯片 Snapdragon 780G
屏幕 15.6" 横屏,1920x1200
GMS 无(AOSP,不含 Google Play Services)
测试车型 BYD 钛3(方程豹 钛3)

工作原理

BYD energydata (BMS SQLite)  →  HistoryImporter    →  Room DB  →  Compose UI
autoservice (系统 Binder)     →  TrackingService     ↗     ↓
Android LocationManager       →  TripTracker (GPS)   ↗   LocalInsightEngine / OpenRouter
autoservice (命令写入)         ←  AutomationEngine   ←  Rules (Room DB)
数据 来源
能耗、里程、时长 BYD energydata (BMS)
SOC、速度、温度 车辆系统服务 (autoservice Binder)
电芯电压、12V、SoH 车辆系统服务 (autoservice Binder)
GPS 坐标 Android LocationManager
AI 分析 设备端规则(默认)或 OpenRouter API(可选)
车辆控制 车辆系统服务(命令写入)

无需 OBD 适配器,也无需第三方 D+。BYDMate 通过 autoservice 系统服务(原车 BYD 系统使用的同一服务)在无线 ADB 的 shell 权限下直接读取数据和控制车辆。


数据与网络

功能 目标服务 发送内容 启用条件
云端 AI 洞察 OpenRouter 7/30 天行程和充电聚合统计 仅在输入 API 密钥后
语音助手(LLM) OpenRouter / z.ai / 自建服务器 指令文本、车辆状态(SOC、空调等),导航请求时包含 GPS 坐标 仅在配置提供商后
助手网络搜索 Exa / z.ai / OpenRouter 搜索查询文本 已输入密钥且助手调用了该工具
天气(助手) Open-Meteo GPS 坐标或地点名称(地理编码) 助手调用了该工具
充电站(助手) Overpass(overpass-api.de / maps.mail.ru) GPS 坐标 助手调用了该工具
在线 TTS 语音 MiniMax / fal.ai / Replicate / OpenRouter 语音回答文本 仅选择在线语音时
行程详情地图 OpenStreetMap 瓦片服务器(若设置中选择了高德地图,则为高德服务器) 可见地图区域坐标 打开行程地图或地点编辑器时
更新检查 GitHub API 无(仅获取发布列表,版本比较在本地进行) 自动
ABRP 实时遥测 abetterrouteplanner.com SOC、功率、车速、温度、里程、胎压、充电状态、电池容量、SoH、本次充电量(kWh)、车辆型号(GPS 不发送) 仅在输入令牌后
遥测 Webhook 设置 → 集成 → Webhook 与 ABRP 相同的 JSON,POST 到你的 URL,每 1/8/30 秒发送一次(行驶/充电/停车);GPS 坐标仅在单独开关开启时发送 默认关闭

未配置任何密钥时,仅更新检查(GitHub)和查看行程路线时的地图瓦片会离开车机,以及在用户明确请求时下载语音模型(github.com)。API 密钥仅存储在应用本地数据库中,除发送给相应提供商外不会传输至任何地方。


安装

1. 开启 ADB

没有 ADB 时,BYDMate 作为离线行程日志运行:来自原车数据库的历史记录、路线地图、CSV 导出、基于已有数据的 AI 洞察。

开启 ADB 调试是读取或写入车辆参数的一切功能所必需的:悬浮窗和仪表盘上的实时数值(SOC、续航、温度、12V)、SoH、自动充电日志、自动化、投射到仪表盘、分屏、HUD 提示、盲区摄像头、语音控制车辆以及日志记录。

这些功能默认开启,无需手动切换。应用首次访问车载系统时,DiLink 会弹出一次"允许 ADB 调试"对话框 — 点击 允许(Allow) 并勾选 "始终允许来自此计算机的连接"(Always allow from this computer)

  • DiLink 3 / 4 — 可自行开启 ADB:安装 BydDevelopmentTools,进入 设置 → 版本管理,连续点击 恢复出厂设置 10 次,启用 USB 连接时开启调试模式无线 ADB 调试开关。在更新版本的 DiLink 3/4 固件上,ADB 可能和 DiLink 5 一样被锁定 — 此时请按以下方式处理。

  • DiLink 5.0 — ADB 调试已被锁定,只能从中国远程解锁。通常通过 淘宝 卖家完成(搜索 DiLink 5.0,国内约 ¥40 / 国外约 ¥80,支付宝付款)。卖家通过你提供的二维码远程打开工程菜单,之后 ADB 即可正常启用。

    详细步骤:PDF 指南(俄语) — 已包含在仓库中。

2. DiPlus(D+)不再需要

自 v3.0.0 起,BYDMate 直接与车辆系统通信,不再需要第三方 D+(迪加)应用。所有数据读取和命令发送均通过车辆系统服务完成。

如果你使用过早期版本并安装了 D+,在确认 BYDMate 正常工作后可以从 DiLink 上卸载 D+。

3. 安装 BYDMate

  1. Releases 下载 BYDMate APK
  2. 传输到 DiLink:通过 U 盘、网络或 ADB(adb install BYDMate.apk
  3. 如有提示,允许安装未知来源应用

4. 首次启动

  1. 打开 BYDMate — 出现设置向导
  2. 授予位置存储权限。随着功能陆续开启,应用还会请求:语音助手所需的麦克风、盲区摄像头所需的相机、按姓名拨打电话所需的通讯录、悬浮窗和通知所需的悬浮窗权限,以及用于识别当前活动应用的使用情况访问权限
  3. 设置电价(用于行程费用计算)

5. 后台运行

重要: 关闭 BYDMate 的"禁止后台应用",否则 DiLink 会杀掉应用:

禁止后台应用 — BYDMate 设为 OFF

DiLink > 设置 > 通用 > 禁止后台应用 > BYDMate = OFF

6. 配置(可选)

设置 中可以修改:

  • 电池容量 — 默认 72.9 kWh( 钛3)
  • 电价 — 家庭充电(AC)和快充(DC),货币
  • 能耗阈值 — 颜色标识的边界值(绿色/黄色/红色)

车辆系统

设置 → 服务与数据 → 车辆系统 中有两个选项,改变的是车辆本身的行为,而不是应用的行为。

方向盘音量旋钮。 开启此开关后,按下旋钮会暂停/继续播放,而不是切换音源。适用于固件更新后按下旋钮变成切换音源的情况。默认关闭。

车机界面语言。 仅适用于 UI7 固件。此按钮会打开 BYD 隐藏的原厂语言对话框,包含完整语言列表,含俄语、乌克兰语和波兰语。语言由固件本身更改,应用不写入任何内容。部分车主切换为俄语后自动泊车会失效,此时用同一按钮切回 English 即可。


AI 洞察

仪表盘卡片分析最近 7 天的统计数据(与之前 7 天对比),显示标题、简要总结、指标表和最多 5 条建议。默认模式无需联网

两种模式

模式 开启位置 网络 API 密钥
本地(离线) 默认 不需要 不需要
OpenRouter(云端) 设置 → 集成 →「OpenRouter(云端)」 需要 OpenRouter API Key

设置 → 集成 中使用 「分析来源」 开关。本地模式下可点击 「刷新洞察」 手动重算。自动更新为每天一次(结果缓存在车机)。

数据来源

全部从本地 Room 数据库计算 — 不含 GPS、路线或个人标识

  • 行程 — 公里、千瓦时、平均能耗、速度、短途(< 5 公里)、最佳/最差能耗、费用
  • 发动机怠速 — 千瓦时和小时数(idle_drains
  • 夜间怠速 — 在 22:00–06:00 开始的会话
  • 充电 — 交流/快充千瓦时、次数、每千瓦时价格、本周充电总费用
  • 12V — 当前电压和一周趋势(最多 7 天历史)
  • 电芯 — 来自实时车辆数据的最大−最小压差(mV)
  • 温度 — 行程平均室外温度

分析最低要求: 最近 7 天至少 5 次行程。否则卡片显示「数据不足」。

卡片结构

  1. 标题和总结 — 本周最重要的一条信息,由最高优先级规则决定(见下表)。
  2. Dynamics — 周环比表:能耗、行程数、短途占比、平均距离、发动机怠速、夜间怠速(仅本地模式)。
  3. 建议 — 最多 5 条符合规则的要点,按优先级排序。

本地逻辑在 LocalInsightEngine.kt:确定性阈值 + 字符串模板(local_insight_*)。已本地化为 6 种语言(ru / en / zh / pt / pl / be)。

标题优先级(本地模式)

优先级 条件 示例标题
90 12V < 11.8 V 「12V 电压过低」
85 电芯压差 > 50 mV 「电芯压差过大」
80 能耗较上周上升 > 15% 「能耗上升 15%」
78 夜间耗电 ≥ 4 kWh 且占怠速 ≥ 35% 「夜间怠速耗电」
70 能耗上升 > 5% 「能耗上升 8%」
60 能耗下降 > 5% 「能耗下降 10%」
10 其他 「能耗稳定」

建议(bullets)

并行检查多条规则,展示优先级最高的 5 条。主题包括:

主题 触发条件
夜间怠速 夜间发动机开启耗电 ≥ 0.3 kWh
快充更贵 交流与快充均 ≥ 3 kWh,快充贵 15%+
快充为主 ≥ 2 次快充,快充 > 交流×1.5
短途偏多 ≥ 40% 行程不足 5 公里
发动机怠速 怠速耗电 ≥ 2 kWh
12V 偏低/下降 11.8–12.4 V 或一周下降趋势
电芯压差 31–50 mV
冬季能耗上升 ≤ 5°C 且能耗上升
最佳/最差行程 差距 ≥ 5 kWh/100
能耗改善 较上周下降 > 5%
高速行驶 平均速度 ≥ 75 km/h
高/低能耗 ≥ 28 或 ≤ 16 kWh/100
里程/行程增加 较上周 +20%
高温空调 ≥ 25°C,能耗 ≥ 22
混合充电 同一周有交流与快充
费用 每 100 公里费用或本周充电费用
良好习惯 夜间/日间怠速占比低,12V/电芯正常

完整规则见 LocalInsightEngine.ktLocalInsightEngineTest.kt

云端模式(OpenRouter)

可选:由 LLM 生成文本而非模板。设置步骤:

  1. OpenRouter 注册(免费)
  2. 在 OpenRouter 控制台创建 API Key(Keys 部分)
  3. 在 BYDMate:设置 → 集成 → 选择 「OpenRouter(云端)」
  4. 将 API 密钥粘贴到「OpenRouter API Key」
  5. 点击 「选择模型」 — 显示可用 LLM 列表(含免费模型)
  6. 点击 「保存并获取洞察」

云端模式仅发送聚合统计数据(与本地规则相同的指标)— 不含 GPS 和路线。请求每天一次,响应本地缓存。Dynamics 表与本地模式相同;标题、总结和建议措辞由 LLM 生成。


ABRP — 实时遥测

BYDMate 可以通过官方 Iternio Telemetry API 将实时车辆数据发送到 A Better Route Planner(ABRP)。ABRP 利用这些数据根据你真实的电池状态来更新路线规划和剩余续航,而非使用平均理论值。

设置 → 集成:ABRP

此功能可选,默认关闭,需在设置中手动开启。

如何获取 Token

ABRP 使用"通用实时数据 Token(Generic Live Data Token)"— 车库中每辆车一个独立的 Token:

  1. 打开 abetterrouteplanner.com 并登录。
  2. 进入车库,选择你要获取实时数据的车辆。车辆必须已保存在车库中,否则 Token 不会出现。
  3. 齿轮图标 → "车辆设置""数据""连接实时数据"
  4. 在提供商列表中选择 "Generic",点击 "关联"(Link)。显示一长串 Token 字符串 — 这就是 User Token

如果列表中没有"Generic":在 ABRP 车库中将车辆型号代码切换到任何常见的 BYD 车型(如 BYD Atto 3 或 BYD Seal),保存后 Generic 即会出现。关联 Token 后,可以将型号代码改回。

在 BYDMate 中设置

  1. 设置 → 集成"ABRP — 遥测" 区域。
  2. 将获取的 Token 粘贴到 "来自 ABRP 的实时数据 Token" 字段。
  3. 可选:ABRP 车型代码(如果你知道在 ABRP 库中你车辆的确切代码)和发送间隔(5-120 秒,默认 12 秒 — Iternio 推荐值)。
  4. 点击 "保存 ABRP",然后打开 "实时数据 → A Better Route Planner" 开关。未保存 Token 时开关不可用。
  5. DiLink 上的 ABRP 应用(或手机浏览器)现在可以看到实时的 SOC、功率、温度、充电状态。

发送的内容

仅发送聚合的车辆指标,不含标识符:

  • SOC — 当前动力电池电量百分比
  • Speed — 速度,km/h
  • Power — 当前牵引功率(充电时为负值,按 Iternio 要求)
  • Battery / cabin / exterior temp — 电池、车内和车外温度
  • Capacity — 标称电池容量
  • Odometer — 里程,km
  • Tire pressures — 四个轮胎的气压
  • is_charging / is_parked — 状态标志
  • is_dcfc / kwh_charged — 充电站类型(DC vs AC)和当前会话的 kWh(当车辆暴露车载系统数据时发送,否则这些字段直接省略)
  • soh — 真实电池 SoH( 钛3)

不会发送的内容

  • 不传输 GPS 坐标。 ABRP 作为独立的 Android 应用直接在 DiLink 上运行,会自己从操作系统读取位置。通过第三方渠道重复发送坐标只会将位置泄露给外部服务器。
  • 也不会发送:VIN、设备标识符、行程历史、路线、用户设置。

ABRP 如何计算剩余续航

ABRP 结合其车型库模型与遥测数据(当前 SOC、电池温度、行驶速度、风力、道路剖面、海拔)来得出预测。BYDMate 不会发送自己计算的"预估续航"— ABRP 有自己更精确的路线感知估算,还会考虑天气和海拔因素。

Webhook:把同样的数据发到自己的服务器

发送给 ABRP 的同一份 JSON 可以 POST 到你自己的地址:Home Assistant、Node-RED、VPS 上的脚本。没有队列:服务器不可用时该样本丢失,一分钟后再次尝试。

设置

  1. 设置 → 集成"Webhook — 遥测" 区域。
  2. URL:仅支持 https://。普通的 http:// 不可用(Android 阻止明文流量,仅 localhost 允许)。若服务器没有证书,可在前面放 Caddy 或 nginx 配合 Let's Encrypt,或使用 Cloudflare Tunnel 之类的隧道。
  3. 密钥(可选):通过 Authorization: Bearer <密钥> 请求头发送,服务器据此区分你的车和其他请求。
  4. "向 Webhook 发送坐标":默认关闭。仅当服务器是你自己的时再开启:JSON 中会加入 latlonheading
  5. 点击 "保存 Webhook",然后打开 "实时数据 → 自己的服务器" 开关。

收到的内容

POST <你的 URL>Content-Type: application/json,请求体为一条样本:

{"utc":1756040000,"soc":67,"speed":52.0,"power":18.4,"batt_temp":29.0,"ext_temp":24.5,
 "capacity":72.9,"odometer":12345.6,"cabin_temp":22.0,
 "tire_pressure_fl":2.5,"tire_pressure_fr":2.5,"tire_pressure_rl":2.4,"tire_pressure_rr":2.4,
 "is_charging":0,"is_parked":0,"soh":98.5,"car_model":"byd:leopard3"}

字段和单位与 Iternio Telemetry API 一致:utc 为秒,power 为 kW(按车辆上报的值),温度为 °C,胎压为 bar,odometer 为 km。没有数据的字段(如停车时的 speed,非充电时的 kwh_charged)直接不出现。频率:行驶时每秒一次,充电时每 8 秒一次,停车时每 30 秒一次。不解析响应内容,只看是否为 2xx 状态;失败后 60 秒再试。

Webhook 与 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 — 车辆数据桥接应用,早期 BYDMate 版本使用(v3.0.0 起不再需要)

赞助项目

本项目非商业性质,仅为爱好开发。如果你想表示感谢,详见 SUPPORT.md。如果不想,也感谢你的信任。


许可证

PolyForm Noncommercial 1.0.0 — 源码开放,仅限非商业使用。 详见 LICENSE

Copyright (C) 2026 AndyShaman