Skip to content
项目

AndyShaman/BYDMate has 500 GitHub stars and 94 forks. GitHot measured +26 in 7 days. Last checked 2026-11-11 00:28 UTC. Last push 2026-11-06.

这些数字如何统计

BYD DiLink app (3.0/5.0/5.1, UI7): split screen 1/3+2/3, navigation on instrument cluster, Yandex Navigator on HUD, blind-spot cameras, Russian voice AI agent, real BMS consumption, trips/charges journal, automation, ABRP telemetry. EVs and DM-i/DM-o hybrids: Leopard 3 / Bao 3, Leopard 5, Sea Lion 07, Song, Song Pro DM-i, Atto 3.

实测星标增长

24小时
更新延迟
7天
+26
15天
正在收集历史
1个月
正在收集历史

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README.zh.md

原文
BYDMate 图标

BYDMate

BYD DiLink 行程记录、能耗分析与一点魔法

Android Kotlin Jetpack Compose License GitHub release Sponsor

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

真实能耗、GPS 路线、自动化、本地 AI 分析。

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

已在 Leopard 3(方程豹豹3)上测试,支持 Sea Lion 07、Song、Atto 3、Seal、Han,以及 DM-i 和 DM-o 混动车型(Song Pro DM-i、Leopard 5、Leopard 8、Sealion 06)。适配 DiLink 3.0、4.0、5.0、5.1 及搭载新版 UI7 界面的固件(OTA V1.6)。

功能 | 截图 | 自动化 | 投射到仪表盘 | HUD | 分屏 | 语音AI助手 | 技术 | 诊断 | AI 洞察 | ABRP | 安装 | 编译 | 发布 | 赞助


为什么需要它

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

所有核心功能(行程、充电、自动化、本地洞察、离线语音助手)都在 DiLink 本地运行,不需要联网。云端功能默认关闭,只有手动输入密钥后才会启用。具体哪些数据在什么情况下会联网,见「数据与网络」一节。


更新内容

4.1.0 版本的主要更新。

模块故障码及其说明。 「技术」界面新增「诊断」卡片。「扫描」按钮读取车辆各个模块里的故障码,仅在 P 挡、仅在按下按钮时进行,不会改动车上的任何东西。故障码的写法与比亚迪手册和维修用诊断仪一致,按模块分组,每个码旁边附有来自比亚迪诊断手册的说明,不需要联网。故障码可以发送到你自己的 Telegram。同一张卡片里还有仪表警告和距下次保养的时间。已在 Leopard 3 上验证。详见下文「诊断:模块故障」一节。

「车辆状态」卡片。 空调和轮胎合并到一张卡片里。轮胎画在车辆示意图上,每个车轮有自己的胎压和胎温。如果车上有 PM2.5 传感器,这里还会显示车内和车外的空气质量。

自动化里的后排座椅加热。 左右分开设置,关、1 挡或 2 挡。只有车辆自己报告带有后排加热时,这些动作才会显示。

修复。 连续两次短途行程不再合并成一次。Han 2022 及类似车型的仪表盘上重新显示 Yandex 导航的转向箭头。在 DiLink 3 和 4 上按下音量滚轮也能暂停音乐。使用「按充电」电价时,当前行程按电池里电能的价格计算,而不是按家用电价。

完整的更新列表见 CHANGELOG。


功能

功能 说明
BMS 真实能耗 BMS(energydata)数据,而非车载电脑估算。以 25 公里滑动窗口显示趋势
GPS 行程追踪 GPS 路线、距离、速度
Charge 充电记录 自动记录 AC/DC,周期与累计统计,支持手动添加和编辑
AI 洞察 驾驶分析:车机本地规则,不联网
TRIP TRIP 1/2 计数器 里程、能耗、时间和费用,从上次重置起计(与车辆自带的一致);长按重置,点按查看详情
Bat 电池健康和「技术」 卡片:SoH(Leopard 3、DiLink 3.0)、温度、12V、电芯均衡、绝缘电阻。点按打开「技术」界面,查看电池、电机、空调和轮胎的实时参数,包括前后功率分配百分比
DTC 模块故障 「技术」界面的「诊断」卡片:车辆各模块的故障码及来自比亚迪手册的说明、仪表警告、距下次保养的时间。仅在 P 挡、仅在按下按钮时扫描,不改动车上的任何东西
DM-i 混动车型 应用根据车辆自身的计数器自动识别混动车型。显示车辆提供的纯电续航和燃油续航,「燃油」卡片(油箱、续航、转速、发动机里程和纯电里程),按车辆计数器统计每次行程的油耗升数和燃油行驶公里数,在电价周期中填写每升油价。电动车不受任何影响
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,开机自动启动
Backup 保存配置 行程、充电记录、设置和密钥打包成一个压缩包保存到 Download,可分部分恢复,支持按计划自动保存并发送到你的 Telegram 机器人
Share 自动化分享 把规则保存为文件,不含电话号码、联系人和地点;导入他人规则前可先预览
Aa 文字大小 应用界面和语音助手窗口的文字可选标准、大或特大

截图

主页

主页

SOC 圆环周围分布着四个悬浮窗风格的数值:上方是本次行程时长、里程表读数,以及车内和车外温度(共用一个位置;如果车辆不上报车外温度,这个位置就只显示车内温度,和以前一样);下方是当前行程里程、预估续航和当前行程能耗,带趋势箭头。颜色和趋势逻辑与悬浮窗完全一致,因此不管是在主页还是叠加在其他应用之上,信息读起来都一样。混动车型上,圆环下方显示车辆自己给出的纯电续航,没有我们自己的估算;再往下是「燃油」卡片:油箱油量和燃油续航,点按可以看到发动机转速、发动机里程和纯电里程、累计升数以及当前周期的每升油价。混动车型上周期能耗显示为按全部里程计的 L/100 和 kWh/100,与仪表盘一致。

圆环下方是:AI 洞察、电池健康小卡片(Leopard 3 和 DiLink 3.0 上的 SoH、温度、12V)、TRIP 1 和 TRIP 2 两个计数器、最近行程、周期筛选。每个计数器显示里程、以 kWh 计的能耗(含停车耗电)、行驶时间和从上次重置起的费用。长按重置计数器,点按查看详情。在计数器窗口里可以开启充电后自动重置:任意一次充电后、只在交流充电后、只在直流充电后,或只在充满到 100% 后。

AI 洞察

AI 洞察展开

驾驶效率分析:能耗、趋势、电池、建议(车机本地计算)

技术

「技术」界面

电池、电机、BMS 限值、电芯、电池历史、空调、轮胎、诊断。在首页点按电池卡片打开

行程

行程手风琴列表

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

列表上方的「温度」筛选按钮会打开「能耗与温度」界面:每趟超过 5 公里的行程对应一个点,按 5 度一档画出中位数连线,分别给出寒冷(低于 0°C)、过渡季(0-15°C)和温暖(高于 15°C)三段的中位数,并说明寒冷天气下能耗高出百分之多少。短于 5 公里的行程不计入图表,因为全被预热消耗了。至少需要 8 趟带温度数据的行程,且温度跨度不少于 15°C,否则界面会如实说明还差什么。

行程详情窗口能看到起点和终点的里程表读数、行驶时间、每 100 公里费用、电量变化百分比,以及起点和终点的车外温度。里程表数值只记录更新之后的行程。

混动车型的行程列表里多一列“升”。在“/100”列里,用了汽油的行程显示每 100 公里升数,带“升”标记且不着色;纯电行程仍显示带颜色的 kWh/100。升数取车辆燃油计数器在行程起止时刻的差值,步长 0.1 升;任一端缺少快照就显示短横线,不会把别人的油算到这趟行程上。行程详情窗口里,升数、发动机和纯电行驶公里数、燃油费用各占一行。

自动化

自动化

当→则规则,条件和动作编辑器,触发设置

设置

设置

分区:语音智能体、小组件、显示、分屏、车辆与电池、集成、服务与数据、应用

分屏

分屏:左侧 Yandex Music,右侧 Yandex 导航

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


自动化

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

运作方式

当条件成立 → 则执行命令。

示例:

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

能力

说明
触发器 SOC、车速、温度、转向灯、挡位、车门、车窗、天窗、后备箱、胎压、驾驶模式、地点地理围栏、时段、精确时间和带星期选择的时间范围、方向盘按键、点击小组件、语音短语、服务启动、网络恢复等。转向灯、挡位、车门、车窗、后备箱和盲区传感器是事件触发即时上报给应用的,不是靠轮询
命令 车窗(含驾驶位、乘客位单独控制)、空调、灯光、门锁、天窗、后视镜,直接通过车辆系统接口下发。有方向盘加热的车型还可以控制方向盘加热
17 种动作类型 车辆命令、通知、启动应用、拨打电话、Yandex 导航路线、打开 URL、Yandex Music、在 YouTube 播放视频、暂停、媒体音量、哨兵模式、Wi-Fi 热点、朗读文本、向智能体提问、打开 BYDMate 主页、投射到仪表盘、分屏(启动、关闭、切换)。车辆命令、哨兵模式和投射到仪表盘还带有「切换」选项
边沿触发 只在 false→true 的变化时触发一次(不会每 3 秒重复触发)
冷却时间 两次触发之间的间隔,可自行设置
悬浮窗确认 动作执行前弹出「取消 / 执行」窗口,15 秒超时自动取消
安全保护 车速 > 120 km/h 时车窗不会打开,> 80 km/h 时天窗不会打开,> 30 km/h 时车门不会解锁,CAN/SHELL 命令已屏蔽
日志 所有触发记录及其结果
模板 6 个现成规则,方便快速上手
立即运行 在编辑器中手动运行规则,跳过触发器和冷却时间

「切换」是动作旁边的第三个选项,不是单独的一项。 命令列表中「开 / 关」这对旁边会有一行「后备箱:切换」,哨兵模式和投射到仪表盘在「开启」和「关闭」按钮之外也多了「切换」按钮。

支持切换的有:后备箱、前备箱、天窗、车门锁、双闪、空调、驾驶位和乘客位座椅加热与通风、方向盘加热、投射到仪表盘、哨兵模式。状态取自车辆本身:打开的会被关闭,关闭的会被打开。正在工作的座椅会被关闭,关闭的座椅会恢复到你上次设定的档位(默认第三档)。如果车辆不上报状态,动作会如实说明无法执行,不会猜测。

以前版本创建的规则照常运行,也照常可以打开编辑,不需要做任何改动。

命令和参数列表按分区折叠。 只展开当前已选中的分区,其余分区点击标题即可展开。

试运行。 在规则编辑器中,「试运行」按钮会像条件已满足一样立即执行所有动作,但不计入触发次数。如果没有较新的车速数据(服务运行中不超过 10 秒),开车窗、开天窗、开前备箱和解锁车门会被跳过。无法识别的命令也会被跳过,并给出说明。关闭编辑器会停止试运行。

列表或卡片。 标签页顶部的切换开关可以把规则显示为紧凑列表,或三列卡片,选择会被记住。每条规则都能看到触发次数和最近一次触发时间。

地点。 「地点」按钮从设置搬到了「自动化」标签页顶部,就在「日志」旁边。添加和修改地点可以直接在这里完成。

方向盘加热。 「方向盘加热」动作可以开启、关闭和切换加热。执行结果按车辆状态核实;没有方向盘加热的车型,动作会如实说明车上没有这个功能。有方向盘加热的车型上,这个命令暂时还没有得到验证,等待反馈。

逻辑

  • AND:所有条件都要成立
  • OR:满足其中一个条件即可
  • 仅 P 挡:只有车辆挂在 P 挡时规则才会触发

每次上车时检查条件

规则只在应用运行期间、数值越过阈值的那一刻触发。如果上车时车内已经是 32 度,而阈值是 29,就没有发生「越过」,规则不会触发。想让每次上车都检查条件,就在原规则旁边再建一条规则:

  1. 第一个条件:「BYDMate 启动」。
  2. 第二个条件:**「车内温度」**大于 29。
  3. 选择**「全部条件」**。
  4. 动作与第一条规则相同。

不要选**「任一条件」**:那样规则每次启动都会触发,不管温度是多少。

分享自动化与导入

做好的规则可以分享给其他车主,别人的规则也可以添加到自己的应用里。

如何分享

  1. 在规则卡片或编辑器中点击**「分享」**。
  2. 保存前先看一下,窗口会显示这份文件里会包含什么内容。
  3. 点击**「继续」**。规则会保存到 Download 文件夹,文件名为 bydmate_rule_<名称>.json,弹出的提示会显示文件名,随后打开系统的「分享」窗口。

应用会从文件中删除:

  • 电话号码和联系人姓名;
  • 与你的地点的关联;
  • 链接里的登录名和密码,以及看起来像密钥的链接参数(token、api_key 之类)。普通参数会保留。

文件中会保留:链接地址、通知和语音文本、向智能体提出的问题、路线点。发送前请自己检查一遍。

如何添加别人的规则

  1. 把 bydmate_rule_*.json 文件放到 DiLink 的 Download 文件夹。
  2. 在「自动化」标签页顶部点击**「导入」**,从列表中选择文件。
  3. 在预览窗口中检查规则。这里显示的是真实参数:是「满足所有条件」还是「满足任一条件」、电话号码和是否自动拨打、链接地址、车辆命令、向智能体提出的问题文本、路线实际会去哪里,以及应用是否会自己点「出发」。
  4. 如果规则里的地点或联系人你没有,用**「选择地点」和「选择联系人」**按钮换成自己的。
  5. 点击**「添加」**。规则默认以关闭状态添加,勾选「立即启用」则会立刻启用。

带链接、且地址需要重新填写的规则只能以关闭状态添加。如果链接中删除了看起来像密钥的参数,窗口会提示你检查地址。嵌套层数过多或字符串过长的文件,应用不会接受。


投射到仪表盘

BYDMate 可以把选定的应用(默认是导航)投射到方向盘正前方的仪表盘上,这样地图和转向提示就在视线正中,中控屏可以空出来做别的事。

方向盘按键控制

  • 短按所选按键:把导航投射到仪表盘。
  • 再次短按:切回中控屏。
  • 长按右星键:保留原车行为(车机菜单),BYDMate 不会拦截。

默认由右星键开启投射,按键也可以改分配,见下文「选择按键」。

开启

打开设置 → 显示,开启「投射到仪表盘」开关。应用会自动激活所需的服务(需要在安装时完成 ADB 激活,见「安装」一节),并自动把仪表盘切到投射模式:这由默认开启的「立即显示到仪表盘」开关负责。车机上不需要手动做任何设置。

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

如果关闭「立即显示到仪表盘」,就需要自己把仪表盘切到投射模式一次:点击车机主屏上的投射图标,然后在弹出的地图上点 IPC 按钮。如果投射之后 ADAS 或原车小组件从仪表盘消失且不会自己恢复(部分 DiLink 5.0 固件上,投射画面是显示在原车小地图内的),建议关闭这个开关:关闭后应用完全不碰仪表盘模式,盲区摄像头也是一样,画面会显示在小地图里。

设置 → 显示:投射到仪表盘,各选项的作用

投射模式:出厂与扩展

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

出厂(默认)。 应用不改动任何系统设置:投射通过虚拟显示器实现(画面镜像到仪表盘),窗口调节滑块也更精确。安装和卸载都不留痕迹。限制:投射期间语音助手和 HUD 看不到导航画面,助手只能从导航的通知里获取转向提示。

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

部分固件(DiLink 4.0、Song Plus 2021 等)上,仪表盘屏幕对应用是不可见的,「出厂」模式在这些固件上无法工作:应用会自己通过内部通道找到仪表盘,用「扩展」模式投射导航,与你选择的模式无关。DiLink 4.0 上已经上车验证过。这个模式下「仪表盘窗口大小」设置里的「缩放」滑块不起作用。

如何恢复出厂设置。 把模式切回「出厂」:应用会立即把系统设置改回出厂值,重启 DiLink 后回滚彻底完成。之后系统状态和安装 BYDMate 之前完全一样。

同一处,模式选择下方还有「仪表盘全屏」开关。默认地图占据仪表盘上半部分,下方保留原车的速度和主要信息条。开启这个开关,地图会铺满整个仪表盘,不再显示这条信息条。只在新版界面固件上生效,其他固件上不会有变化;在下次投射时应用。

如果你在 3.7 之前的版本就用过投射,升级后原有行为会自动保留:模式仍然是「扩展」。从未开启过投射的用户,应用完全不会碰系统设置。

选择按键

默认由方向盘右星键开启投射。如果没有这个按键,或者想用别的按键更顺手,在开关下方点「更改」,然后按下方向盘上想用的按键,应用会记住它。系统能识别的任意方向盘按键都可以分配。系统按键(音量、电源等)、360 全景和仪表盘轮播键不能分配。

投射哪个应用

默认投射 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 能看到路线。为了拦截方向盘按键,应用会开启自己的无障碍服务(accessibility)。这个服务只在开关开启时工作,只用于所选的按键。不会改动固件或车辆本身,一切都是可逆的。


HUD

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

在设置 → 显示的「HUD(抬头显示器)」分区中开启:「导航投射到 HUD」开关,以及单独的「箭头下方的限速标志」开关。在那里还可以选择在玻璃上显示的方式:方式 1 是默认,方式 2 和 3 用于方式 1 下玻璃上什么都没有的车辆。提示走 HUD 自身的原车通道,所以需要配有抬头显示器的车型。如果车上没有这个通道,应用会在设置里如实说明,并且不会启用这个功能。

应用会改动车辆的什么。 方式 1 不改动任何设置:提示走 HUD 自身的通道。在方式 2 和 3 下,只要「导航投射到 HUD」开着,并且导航正在引导路线,BYDMate 就会在车辆上打开导航模式,并把箭头、距离和道路名称写入仪表盘上的导航卡片。方式 3 还会把到路线终点的剩余时间和距离以及到达时间写到那里。路线结束、方式被更换或关闭开关后,一切都会恢复原样。开关关闭时,应用不会改动车辆的任何设置。

如果挡风玻璃上什么都没显示。 打开设置 → 服务与数据的「数据」分区,点击「HUD 检测」这一行旁边的**「开始」**。车辆需要静止,导航里也不能有正在进行的路线。检测大约持续两分钟,会依次在玻璃上显示数字 111、222、333 和 444,每个数字用各自的方式。最后它会问你看到了哪个数字,并自动设置合适的方式。如果玻璃上什么都没显示,请用日志录制按钮录一份日志,连同车型一起发到 GitHub 的 issue 里。

需要哪个导航。 转向箭头由 Yandex Navigator 31.0.2 及更新版本提供。旧版本(24.5.1)只给出距离和街道名,没有箭头。Yandex Maps 的箭头时有时无,因此 HUD 和仪表盘请使用 Navigator。


盲区摄像头

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

设置 → 显示 → 盲区

在设置 → 显示的「盲区」分区中开启(默认关闭)。同一处还可以设置低于该速度就不显示摄像头的速度阈值、小窗宽度及其位置:「调整位置」按钮会显示一个空窗口,用手指把它拖到摄像头画面应该出现的位置。如果仪表盘上的左侧摄像头影响观看,可以在同一处开启「两侧摄像头都显示在主屏」:两个画面都会显示在平板上,仪表盘不受影响。左侧小窗默认与右侧镜像对称,开关下方的「左侧摄像头位置」按钮可以给它单独定位。「竖向摄像头窗口」开关会把小窗变成竖向,并把画面旋转 90 度,像镜子一样:如果开启后画面方向不对,请在 issue 里反馈。需要配有全景影像的车型。部分 DiLink 4.0 车型的固件不允许应用访问摄像头,这些车上该功能无法使用。


语音AI助手

BYDMate 内置一个功能完整的俄语语音助手。语音识别直接在车机本地完成,无需联网:GigaAM v3 神经网络负责俄语听写和理解。简单指令由本地解析立即执行,其余全部交给 AI 智能体处理:一个带有 32 个工具的语言模型,能自己读取车辆数据、控制车身功能、规划路线、运行场景并用语音回答。

为什么只支持俄语

BYD 原车语音助手已经原生支持英语和中文,再做一个英语助手没有意义。BYDMate 补上的是车机里完全没有的语言:俄语。因此语音识别、指令解析和语音合成都是专门为俄语打造的,暂不计划推出英语版本的智能体。

如何开启

  1. 设置 → 语音智能体:开启**「语音AI助手」**开关。*应该发生什么:*下方会出现名字、性格和性别的选项。
  2. 设置语言模型密钥:设置 → 集成 → AI 连接。推荐用 OpenRouter(在 openrouter.ai 注册,付费,每次提问只要几分钱的零头)配合快速模型,比如 Gemini Flash。也有免费方案 z.ai,模型 glm-4.7-flash,但响应明显更慢。第三种方式:自建 OpenAI 兼容服务器。*应该发生什么:*连接旁边会出现密钥已设置的标记。也可以同时设置两个连接:主连接出问题时,智能体会自动切换到第二个。
  3. 回到语音智能体的「智能体」分区,点击**「测试模型」**。应该发生什么:按钮下方会出现模型名称、响应时间和智能体的一句简短回复。如果按钮是灰色的,说明密钥没有保存,去「集成」里检查。旁边的「智能体聊天(调试)」**按钮可以在用麦克风之前先用文字测试回复。
  4. 在**「语音识别」分区点击「下载(226 MB)」,建议用 Wi-Fi 下载。应该发生什么:会显示下载进度百分比,完成后文字会变成「模型已就绪」。
  5. 在**「按键与麦克风」分区开启「语音指令」开关,并允许使用麦克风。应该发生什么:下方会显示当前的方向盘按键。Leopard 3 上已经预先分配好了,其他车型点击「分配按键」,然后按一下方向盘上的按键。
  6. 按下方向盘按键,说「Сколько заряда?」(还剩多少电?)。*应该发生什么:*出现「正在聆听」的悬浮提示,说完话后有一声短提示音,一两秒后收到回答。
  7. 如果需要语音回复:在**「智能体回复」**分区开启开关并下载语音(普通语音 18-21 MB,或者更自然的 Марк / Софья,两个加起来 145 MB)。*应该发生什么:*智能体会开始用语音回答,不下载语音的话,回复只会以文字显示在屏幕上。
设置 → 语音智能体:智能体、名字、性格、语音

如何对话

  • 按下方向盘上的语音按键。Leopard 3 开箱即用,其他车型可以在设置里训练任意一个按键(拦截按键需要无障碍服务,会自动开启)。
  • 屏幕上会出现「正在聆听」的悬浮提示。可以把它拖到屏幕任意位置,位置会被记住。悬浮提示里能看到最近的对话内容:「你:」和「智能体:」。
  • 用日常语言说话就行。会话是连续的:智能体回答完可以直接接着说,不用再按一次按键。
  • 静默 30 秒后会话自动结束,并有一声单独的提示音。对话时长没有限制:只要在对话,智能体就会一直听。短促的提示音用来确认收到命令,或者提示出错。
  • 喊名字打断。 如果在设置里给智能体设置了名字(「智能体名字」字段),回答过程中喊一声这个名字,智能体就会停下来重新聆听。句子开头的名字会被忽略(«Штурман, открой окна»会被理解成«открой окна»,也就是“打开车窗”)。注意:这不是 Алиса 那种“唤醒词”,不按按键的话智能体不会监听麦克风。默认名字为空,喊名字打断功能不生效。

智能体能做什么

智能体拥有 32 个工具。以下是一些例句:

车辆和空调

  • «Сколько заряда?»(还剩多少电?)、«Какая температура за бортом?»(车外温度多少?)、«Какой запас хода?»(续航还有多少?)(车辆实时状态)
  • «Открой окна»(打开车窗)、«Включи подогрев сиденья»(打开座椅加热)、«Поставь климат на 22»(把空调设到 22 度)(完整命令目录共 110 条,见下文)
  • «Сделай музыку громче»(把音乐调大声)、«Потише»(小声一点)(媒体音量)

行程、充电、统计

  • «Покажи поездки за неделю»(显示本周的行程)、«Сколько я проехал за месяц?»(这个月开了多少公里?)
  • «Когда я последний раз заряжался?»(我上次充电是什么时候?)
  • «Запиши зарядку на 30 киловатт-часов за 200 рублей»(记一笔充电,30 度电,200 卢布)(手动写入充电记录)
  • «Какой у меня средний расход?»(我的平均能耗是多少?)

导航和地点

  • «Поехали домой»(回家)、«Поехали на работу»(去公司)、«Поехали на дачу»(去别墅)(已保存的地点)。说「поехали」(出发)时智能体会自己在 Yandex 导航里点「出发」,说«построй маршрут домой»(规划回家的路线)只会规划路线,不会自动出发
  • 分屏开启时,智能体会先关闭分屏,规划好路线后再把面板恢复原位:不这样做的话固件会重建导航应用,路线就丢了。这需要开启 BYDMate 的无障碍服务
  • 加一句「в картах」(在地图里):比如«поехали домой в картах»(在地图里回家)、«найди заправку в яндекс картах»(在 Yandex 地图里找加油站),路线、搜索和显示位置就会走 Yandex 地图;不加这几个字,路线会走「导航路线使用的应用」设置里选定的导航应用(设置 → 语音智能体 → 智能体),默认是 Yandex 导航,也可以选 2GIS、Yandex 地图或 Waze
  • «Найди зарядки рядом»(找附近的充电站)
  • «Хватит ли заряда до Казани?»(到喀山的电量够不够?)、«Сколько ехать до аэропорта?»(到机场要开多久?)
  • «Запомни это место как дача»(把这个地方记为“别墅”)、«Какие места сохранены?»(都保存了哪些地点?)
  • «Выведи навигацию на приборку»(把导航投射到仪表盘)、«Убери с приборки»(从仪表盘撤下来)(Yandex 导航的投射)

媒体和应用

  • «Включи мою волну»(播放我的私人电台)、«Включи джаз»(播放爵士乐)(Yandex Music)
  • «Включи на ютубе лекции по истории»(在 YouTube 上播放历史讲座)
  • «Открой навигатор»(打开导航)、«Открой камеры»(打开摄像头)、«Открой регистратор»(打开行车记录仪)、«Открой браузер»(打开浏览器),以及其他用俄语名字打开的应用

自动化

  • «Запусти сценарий домой»(运行“回家”场景)、«Какие у меня сценарии?»(我都有哪些场景?)
  • «Выключи автоматизацию прогрева»(关闭预热自动化)
  • «Создай сценарий: когда приезжаю домой, открывай окна»(创建一个场景:到家时打开车窗)(智能体会自己从触发条件和动作拼出规则)

联网功能

  • «Какая погода?»(现在天气怎么样?)、«Какая погода в Москве завтра?»(明天莫斯科天气怎么样?)
  • «Поищи в интернете, когда выйдет обновление DiLink»(帮我搜一下 DiLink 什么时候更新)

车辆控制:110 条命令目录

分组 可用内容
车窗 全部、前排、后排、驾驶位、乘客位、左后和右后;打开、关闭、开一半、通风缝隙,可整组操作也可单独操作每扇窗
空调 开启、关闭、温度 16 到 33 度
座椅加热 驾驶位和乘客位,1-5 档和关闭
座椅通风 驾驶位和乘客位,1-5 档和关闭
后视镜 加热开/关
方向盘 加热开/关,仅限有方向盘加热的车型
灯光 车内灯、氛围灯等其他模式(6 条命令)
门锁 上锁、解锁
天窗和遮阳帘 打开、关闭、中间位置
后备箱 打开、关闭
前备箱 打开、关闭
车载冰箱 制冷 -6 到 +6 度,制热 35 到 50 度,关闭
双闪 开启、关闭
驾驶模式 ECO、普通、运动;雪地、沙地、泥地、山地、岩石和智能模式仅在 15 km/h 以下
HUD 挡风玻璃投影:开启、关闭
电池预热 开启、关闭

安全限制:车速超过 120 km/h 时车窗打开会被阻止,超过 80 km/h 天窗打开会被阻止,超过 30 km/h 车门解锁会被阻止;前备箱只有在车辆静止时才能打开。

无需智能体、无需联网的快捷命令

常用命令无需语言模型、无需联网即可立即执行。为此应用内置了一份固定的俄语短语列表:车窗和天窗、座椅加热和通风、方向盘加热、后视镜、空调、风扇、音量、门锁、后备箱和灯光。

工作原理:

  • 只有完整地说出列表里的原话,才会离线执行。换一种说法会交给智能体处理。
  • 客气话不影响识别:«пожалуйста»(请)、«можешь»(能不能)、«слушай»(喂)、«спасибо»(谢谢)会被直接忽略。
  • 「A 和 B」会同时执行两个命令,只要两个都在列表里:比如«открой окно водителя и закрой люк»(打开驾驶位车窗并关闭天窗)。
  • 车窗和天窗可以按比例打开:«наполовину»(一半)、«на 50 процентов»(百分之五十)、«чуть-чуть»(一点点)、«полностью»(全部)、«на треть»(三分之一)。百分比会向下取整到最接近的支持档位,车窗永远不会比说出的比例开得更大。
  • 其余情况都会交给云端 AI 智能体处理(如果已开启)。没有开启智能体时,这类短语会得到「没听懂」的回复,列表里的短语依然照常执行。

以下是列表里的一些例句,完整列表和各种说法见 docs/VOICE_COMMANDS.md。

短语 会发生什么
«Открой окна»(打开车窗) 所有车窗完全打开
«Открой окно на 50 процентов»(把车窗打开百分之五十) 驾驶位车窗打开一半
«Приоткрой окно водителя»(把驾驶位车窗开条缝) 驾驶位车窗开到通风缝隙
«Режим проветривания»(通风模式) 所有车窗开到通风缝隙,天窗微微抬起
«Выключи режим проветривания»(关闭通风模式) 车窗和天窗关闭
«Открой люк наполовину»(把天窗打开一半) 天窗打开一半
«Включи подогрев сиденья пассажира на второй уровень»(把乘客座椅加热开到二档) 乘客座椅加热,二档
«Включи подогрев руля»(打开方向盘加热) 方向盘加热
«Поставь температуру 22»(把温度设到 22 度) 空调调到 22 度
«Громкость 20»(音量 20) 音乐音量调到 20
«Включи Яндекс Музыку», «Яндекс Музыка»(打开 Yandex 音乐) 在 Yandex 音乐里播放「我的浪潮」
«Запри машину»(锁车) 车门上锁

英语的离线命令已经取消,列表只支持俄语。应用界面语言不影响这一点:不管应用是什么语言,离线命令和智能体都照常工作。

密钥:哪些要填,哪些可以不填

密钥 是否必需 作用
OpenRouter 只需要任意一个 LLM 密钥;追求速度推荐用 OpenRouter 智能体的大脑。快速模型(比如 Gemini Flash)几乎瞬间响应,价格是每次请求几分钱的零头
z.ai 免费替代方案 智能体的大脑,模型 glm-4.7-flash,免费,但响应明显更慢
自建服务器 替代方案 任意 OpenAI 兼容接口:URL、密钥、模型
Exa 否 增强版网络搜索。不填的话,「帮我搜一下」会走 LLM 供应商自带的搜索
MiniMax 否 仅用于 MiniMax 在线语音,不影响智能体本身的运行

所有密钥都在应用里填写,只保存在本地,代码和代码仓库里不含任何密钥。

语音

离线语音(无需联网,逐个下载):

语音 性别 大小 音质
Дмитрий(默认) 男声 21 MB 普通
Алёна 女声 18 MB 普通
Руслан 男声 21 MB 普通
Ирина 女声 21 MB 普通
Марк 男声 145 MB 高品质
Софья 女声 145 MB 高品质

Марк 和 Софья(Supertonic 引擎)听起来比普通语音自然得多,但体积更大,两个共用一个安装包:下载了其中一个,就不用再单独下载另一个。语速和语调的生动程度可以用滑块调整,旁边有「试听示例」按钮。

在线语音(可选,听起来更自然):Gemini 和 OpenAI 通过 OpenRouter 密钥使用,MiniMax 用自己的密钥(三种接入方式:官方 API、fal.run、replicate)。没有离线兜底:如果在线语音无响应或失败,这句话仍会以文字显示在语音悬浮球里,但不会读出来。

关于音量:智能体的语音回答走 BYD 的语音通道(和原车提示音一样),音量由系统的语音音量设置控制。«сделай громче»(调大声)这句命令调的是音乐音量,不是智能体的语音音量。如果觉得智能体声音太小或太大,请调整系统的语音音量。

响应速度取决于什么

智能体分三步工作,每一步都会累加延迟。

  1. 语音转文字。 完全在设备本地完成,不联网。速度取决于车机的处理器。
  2. 理解语句。 内置列表里的短语几乎瞬间执行。其余的都要交给语言模型:模型思考的时间加上到服务商的网络延迟,这是主要的延迟来源。通过 OpenRouter 的 Gemini Flash 响应只要零点几秒,免费的 glm-4.7-flash 明显更慢。
  3. 合成语音回答。 离线语音轻量快速,但也需要一点时间。在线语音更慢,同样受网络延迟影响。

想要最快的响应速度:关闭「智能体回复」开关。这样就没有语音播报,回复只以文字显示在屏幕上,只运行前两步。快捷命令本身完全不需要联网。

智能体的性格

设置里可以选择三种回答风格之一(默认「领航员」),以及智能体的性别(男或女),这会影响措辞和语音回答的方式。喊名字打断用的名字也是在这里设置的。

隐私

  • 麦克风录音不会离开车辆:语音识别完全离线完成。
  • 只有文字会发送到云端(LLM 服务商):你说的话,以及智能体用工具查到的、用来回答的数据。
  • 语音日志(最近 50 次识别及其结果,用于自我诊断)只保存在车机本地,重启后依然保留。它会出现在日志录制文件里:车机听到了什么、变成了什么命令、为什么被拒绝。日志界面在:设置 → 语音智能体 → 「语音日志」,可以看到每句话是如何被识别的、发去了哪里、结果如何。
  • 想在不用麦克风的情况下测试智能体,可以用文字聊天(设置里的调试界面)。

关闭 BYD 原车语音助手

「语音智能体」分区底部有一个开关,可以关闭 BYD 原车语音助手,避免它和 BYDMate 智能体同时被唤醒。完全可逆,开启和关闭都需要重启车辆后生效。默认关闭。

原车助手是在车辆系统里被关闭的,所以卸载 BYDMate 之前请先关闭这个开关,否则原车助手会一直保持关闭状态。如果 BYDMate 已经卸载了,想恢复原车助手:重新安装 BYDMate,关闭这个开关,然后重启车机。

系统要求

  • 存储空间:语音识别模型 226 MB,加上语音包(普通语音 18-21 MB,或者高品质的 Марк/Софья,两个共 145 MB)。总共大约 245 到 370 MB。
  • 联网:只有 AI 智能体(语言模型)、天气、搜索和在线语音需要联网。语音识别、快捷命令和离线语音都不需要联网。
  • 权限:麦克风(开启功能时会请求)和方向盘按键所需的无障碍服务(自动开启)。
  • 已在 Leopard 3(DiLink 5.0)上验证。语音方向盘按键出厂已针对 Leopard 3 配置好,其他车型请在设置里训练自己的按键。

记住车主的信息

告诉智能体你的名字或者平时的习惯偏好,它会在之后的对话中记住。说«Забудь …»(忘记……)可以删掉某一条记忆。记忆列表和「全部忘记」按钮在:设置 → 语音智能体 → 智能体。这些信息只保存在车机本地,只会随请求发送给你选择的语言模型。


悬浮窗

一个紧凑的 260×108 dp 悬浮窗,可以叠加显示在其他应用之上:在地图上、媒体播放器里、BYD 自带应用中都能看到。

悬浮窗图例:各区域说明

显示内容

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

顶行(小字体,13sp):

  • ⏱ 本次行程时长:N 分钟或X 小时 Y 分钟(例如 47 分钟、1 小时 12 分钟)。起点是点火开启的时刻,终点是熄火。车辆开着但停下不动的情况(开空调等人、乘客下车买水、等红灯)都算在行程里:只要电气系统还在工作,计时器就不会重置
  • 🚗 车内温度:°C

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

  • SOC %(18sp 加粗,彩色):动力电池的电量。绿色 > 50%,黄色 20-50%,红色 < 20%
  • ~N km(28sp 白色):预估续航,计算方式是SOC × 电池容量 ÷ 基准能耗 × 100。波浪号提醒这是估算值,不是车辆自带电脑的读数。基准能耗的具体算法见下方「续航」小节
  • 混动车型上:~N km 是车辆自己给出的纯电续航,不是我们的估算;原来显示能耗的位置改为车辆给出的燃油续航,油箱油量显示在上排。
  • 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 km 由三部分加权得出:50% 权重来自最近一趟完整行程,30% 来自上上一趟,20% 来自再往前一趟(3 公里以内的短途行程不计入,因为不具代表性)。跑长途的时候,会再加入当前行程最近 10 公里的能耗:这部分的权重从最初 3 公里时的零,逐渐涨到 25 公里时的一半。这样预测能很快跟上驾驶风格的变化(市区尾段接上高速、下高速回到市区),又不会因为短途行程或开着空调的停车而乱跳。

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

趋势箭头在行驶 2 公里后出现,把 25 公里滑动平均值和你平时的驾驶风格(最近 10 趟行程的平均值)做比较:

  • ↓ 绿色:比平时更省电
  • → 白色(直线箭头):在平时的范围内
  • ↑ 黄色:能耗比平时高

箭头不会因为每次红灯停车就乱跳,有一定的惯性:能耗要明显偏离平时水平,并且至少保持一分钟,箭头才会变色。

这个数字里“一趟行程”的定义:一次完整的点火周期,从打火到熄火。行程中途开着空调停车会被自然计入:多耗的 kWh 会算进分母里。短暂的中断(红灯、重新连接)不会把一趟行程拆成两趟。如果 DiLink 在高速上把应用杀掉了,重启后会从真实的点火时刻继续计时,而不是从零开始。

操作

  • 单击:打开 BYDMate
  • 长按(1.5 秒):隐藏,直到下次打开 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 自带的分屏,BYDMate 的分屏会自动干净退出,两种分屏不能同时工作。

充电记录

充电记录标签页自动记录每一次真实的电量补充:按月列出充电记录、周期和累计统计、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、电价。
  • 长按一条记录:会打开「编辑」/「删除」菜单。编辑模式下可以修改已保存充电记录的任意字段。

这个功能正在积极测试中。在 Leopard 3 上运行稳定。在其他 BYD 车型上,自动判断可能不准:比如车辆系统没有上报功率或枪的类型,这时 AC 和 DC 可能会判断错误。遇到这种情况请手动修改记录,方便的话也请把日志发到 Issues。


电价与费用

每一次充电和每一趟行程的费用,都是 BYDMate 自己算出来的。要让数字准确,需要两样东西:你的每度电价格,以及这个价格从哪天开始生效。在混动车型上还有每升油价。

在哪里设置电价

设置 → 车辆与电池 → 「电价与时段」 → 「打开」。会打开一个单独的窗口,里面是时段列表,不会占用设置本身的空间。

「时段」的意思是“这个价格从哪天开始生效”。一个时段包含:生效日期、家充价格(AC)、快充价格(DC)、混动车型上的每升油价、损耗,以及行程的计价规则。时段没有结束日期:它一直生效到下一个时段开始,如果没有下一个时段,就一直生效到今天。最早的那个时段会覆盖它之前的全部历史,所以老行程也不会没有价格。

第一次设置电价(或者从旧版本升级上来)时,BYDMate 会自动建一个“从历史最早开始”的时段,用你当前填的数字。在你添加第二个时段之前,一切都和以前一样。

如何补录之前涨价的电价

9 月 1 日就涨价了,但你 16 号才想起来?没关系。

  1. 打开「电价与时段」,点击**「添加时段」**。
  2. 在**「生效日期」**里选 9 月 1 日。
  3. 填入新的价格并保存。

9 月 1 日之后发生的一切都会自动重新计算:充电和行程都会。8 月的记录仍按旧价格。没有单独的“重新计算”按钮,也不需要:保存时段时会自动触发重算。

汽油也是同样的道理。以新价格加了油:从加油那天起添加一个时段,填入每升油价。这个日期之前的行程仍按原价格,从这天起的行程按新价格计算。历史不会被改写。

修改也是同样的道理:如果改动一个已有时段里的价格,从这个时段的生效日期到历史末尾的记录都会重新计算。

充电损耗

车里充进去 50 kWh,家里电表却走了 55 kWh。差的这部分被充电器和发热吃掉了:一部分电根本没到电池里。你付的是 55 度的钱,BYDMate 只看得到 50 度,如果不做修正,算出来的费用就会偏低。

每个时段都有两个字段:AC 损耗和DC 损耗。默认家充(AC)10%,快充(DC)5%,这是 ADAC 实测和 DLR 研究里的典型数值:通过车载充电器的慢充损耗大约 10%,直流快充损耗更小,大约 5%,因为电流是直接进电池的,损耗自然更少。

费用是这样算的:充进电池的电量除以(1 − 损耗),再乘以每度电的价格。损耗 10% 的情况下,50 kWh 相当于付费 55.6 kWh。

如何按自己的实际情况校准。 记下充电前后家里电表的读数,打开这次充电的卡片(长按记录 → 「编辑」),把差值填进**「电表」**字段。这次充电 BYDMate 就会用你填的数字,而不是估算值。攒够几次这样的记录后,电价窗口会出现一行「你的实测损耗:AC …%,DC …%」,也就是你几次实测的平均值。把它填进损耗字段,之后所有充电都会按你的真实数字计算。

行程费用是怎么算的

行程没有发票,它的电价只能从别处推算。每个时段可以选择四条规则中的一条:

规则 计算方式 适合谁
家充 按时段的家充价格算 主要在家充电,这是默认值
快充 按时段的快充价格算 完全不在家充电
自定义 按你自己填的数字算 知道自己的平均电价,想固定下来
按充电记录 按实际充进电池的电价算 家里和路上都充电,想要更精确

「按充电记录」规则会跟踪电池里能量的价格:每次充电后,新充进去的电会和电池里剩下的电混合,价格变成加权平均值。便宜的夜间充电会拉低每度电的价格,贵的快充会推高它。如果行程之前还没充过电,或者上一次充电是 60 天以前,BYDMate 会用时段的家充价格,这样行程就不会没有费用。

在混动车型上,费用在电费之外再加上燃油费:行程的升数乘以行程所属时段的每升油价。如果时段里没有每升油价,燃油部分不计,行程费用只含电费;如果行程没有升数,就按纯电车型计算。

什么情况不会被重新计算

只要是你手动设定过价格的充电记录,重新计算永远不会碰它:

  • 用**「+ 充电」**按钮添加、并且填了电价的充电记录;
  • 你在卡片里手动改过电价的充电记录;
  • 你填写过电表读数的充电记录。

这是故意这样设计的:你看到了发票和电表,应用没看到。不管电价怎么变,这些记录都会保持原样。

如何把记录改回按时段自动计算。 打开它的卡片,点击**「按时段计算」**。电表读数和手动标记会被清除,费用会按时段的电价和损耗重新计算,之后这条记录就会跟着其他记录一起变化。

保存配置和 Telegram 机器人

你配置和积累的一切都会打包成一个压缩包保存。可以用它在重装后找回数据、把 BYDMate 迁移到另一台车机,或者只是在 Telegram 里留一份副本。

所有相关设置都在**设置 → 服务与数据 → 数据 → 「配置」**里。

保存配置

  1. 在「保存配置」这一行点击**「保存」**。
  2. 在「保存内容」窗口里勾选需要的部分:
    • 表格数据:行程、充电记录、统计。
    • 车辆和应用设置:设置、电价、自动化、地点、悬浮窗、语音。
    • 密钥和令牌:OpenRouter、ABRP、Telegram 机器人等。默认不勾选。如果要把文件交给别人,请不要勾选这一项。
  3. 点击**「保存」**。压缩包 bydmate_backup_<日期>.zip 会出现在 Download 文件夹。如果已连接 Telegram 机器人,副本也会发送到那里。
  4. 在「已保存」窗口里可以直接点**「分享」**。压缩包里有行程历史,所以只分享给你信任的人。

恢复配置

  1. 在「恢复配置」这一行点击**「选择文件」**。会打开 Download 文件夹里 bydmate_backup_*.zip 压缩包的列表,自动生成的副本也在里面。这是应用自己的文件列表,不是系统的文件选择器,所以在系统文件选择器无法访问文件的固件上也能用。
  2. 选择一个压缩包。
  3. 在「恢复内容」窗口里勾选需要的部分。压缩包里没有的部分无法勾选。没勾选的部分会保持不变。
  4. 点击**「恢复」**。勾选的数据会被压缩包里的内容替换,应用会重启。

在全新安装的情况下操作一样:装好 BYDMate,把压缩包放进 Download,然后恢复它。悬浮窗的“显示在其他应用上层”权限,只要 ADB 能用,应用会自己恢复。还需要手动处理的部分,会在一个「恢复之后」窗口里列出来:麦克风、通讯录、语音识别模型、语音包、重启车机。每一项旁边都有「允许」和「下载」按钮。

自动保存

  1. 在**「自动保存」**这一行选择频率:「每天」「每周」或「每月」。「关闭」会停用自动保存。
  2. 用「表格数据」「设置」「密钥」这几个标签选择副本里包含什么。默认包含表格数据和设置,不含密钥。

副本会在车辆启动时生成,前提是距上一次保存已经超过所选的周期。「每天」的意思是:车辆本次启动时,距上一份副本已经过了一整天。Download 里保留最近 5 份自动副本,更旧的会被删除。用按钮手动保存的压缩包不受影响。

如果已连接 Telegram 机器人,每一份副本都会发到你和机器人的对话里。因为网络问题没发成功的话,应用会稍后重试。这一行下方能看到最近一次保存的时间和结果:已发送到 Telegram、已保存到本地,或者出错。

如何连接 Telegram 机器人

需要用你自己的机器人:副本只会发到你和机器人的私聊里,或者你把机器人加入的群组里。

  1. 在 Telegram 里打开**@BotFather**,发送 /newbot,起一个名字和地址。BotFather 会发给你一个令牌:一长串类似 123456789:AA… 的字符串。
  2. 在 BYDMate 里打开设置 → 服务与数据 → 数据,找到**「Telegram 机器人」区块。把令牌粘贴进「机器人令牌」字段,点击「检查」**。
  3. 应用会显示一个数字验证码。在 Telegram 里打开你自己机器人的对话,把这个验证码发过去。也可以用「复制验证码」按钮复制。如果想让报告和副本发到共享聊天,比如所有开这辆车的人都能看到,可以把机器人加入你的私密群组,并在群里发送 /start@机器人用户名 验证码。
  4. 回到 BYDMate,再次点击**「检查」**。机器人会在对话里发一条“BYDMate 已连接,之后的备份会发到这里”的消息,区块里会显示「已连接」,并带上机器人和对话的名称。

错误信息会直接显示在按钮下方:令牌不对、没有网络、验证码还没收到、文件超过 50 MB 等等。验证码步骤的「返回」按钮会回到令牌那一步,「断开」会忘记这个机器人,之后副本就只会保存在 Download。

压缩包没有加密。机器人和聊天必须只属于你自己。如果这个机器人已经连接了 webhook 或其他程序,Telegram 就不会把带验证码的消息转发给应用:请先关闭 webhook。


电池健康(SoH)

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

在BYD Leopard 3(方程豹豹3)上,BYDMate 直接从车载系统读取这个数值,显示在主页的电池卡片里。这是来自车辆本身的真实 SoH,不是按 SoC 差值估算的:BYDMate 只是读取车辆自己记录的数据。

在其他 BYD 车型上,能否读到这个数值还没有得到确认,所以那里不显示 SoH。卡片里的其他内容(电池温度、12V、电芯均衡、绝缘电阻)在所有支持的车型上都能用。

点按卡片会打开**「技术」**界面,里面有电池、电机、空调、轮胎的详细数据和诊断,详见「技术」界面一节。

如果你的车能读到 SoH,并且愿意帮忙添加支持,请提交 Issue,注明车型和出厂年份。


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

在 Leopard 3 上,SoH 和自动充电记录会自动工作,不需要单独开启什么。只要无线 ADB 调试处于激活状态,BYDMate 就会直接从车辆的车载系统读取这些数值。

  1. 确认 ADB 调试已经激活(见「安装」一节)。
  2. SoH 会出现在主页的电池卡片里,充电记录也会开始自动写入,使用真实的 kWh 数值。

这些功能已在 Leopard 3 上验证过。在其他 BYD 车型上,能否读到这些数据还没有确认,这种情况下 SoH 和精确的充电功率可能不会出现,但 BYDMate 的其他功能照常工作。


「技术」界面

「技术」是显示车辆详细数据的界面:电池、电机、电池限值、空调、轮胎和诊断。数值直接来自车辆,实时更新。

怎么打开

  1. 打开**「首页」**标签页。
  2. 点按电池卡片:就是显示 SoH、电池温度、12V、电芯压差和绝缘电阻的那一行。图中用黄色框标出。
  3. 会打开**「技术」**界面。点左上角的箭头返回。
首页:点按电池卡片打开「技术」

截图里的应用是英文界面;中文界面里的文字就是下文引号中的内容。

界面上有什么

完整的「技术」界面

六张卡片,每行三张。顺序可以调整:长按卡片并拖动。

  • 电池 · 当前:电量(SoC)、电池自己估算的剩余电量(kWh)、SoH、电池温度、动力电池电压、电机功率、电池此刻输出的功率以及每小时消耗百分之几的电量、12V 车载电网、绝缘电阻。
  • 电机与逆变器:前后分开显示。电机和逆变器温度(带刻度条)、转速、油门和刹车踏板、功率。
  • BMS 限值:电池控制器(BMS)此刻允许的充电和放电功率,以及电池能输出多少功率。下面是电芯:最弱的、最强的,以及两者的差值。
  • 电池 · 历史:上一次充满到 100 % 和上一次校准的时间、电池记录的里程、累计流经电池的电量、完整循环次数(下面注明是用哪些数字算出来的)、自上次充电以来和全部时间的平均电量。
  • 车辆状态:空调压缩机的功率、空调是否开启、车内和车外温度。下面是画在车辆示意图上的每个轮胎的胎压和温度。车上有 PM2.5 传感器时也会显示。
  • 诊断:仪表警告、距下次保养的时间,以及用**「扫描」**按钮读取的模块故障码。详见「诊断:模块故障」一节。

混动车型还有第七张卡片**「燃油」**。

怎么看

  • 参数旁边有**「?」**图标。点一下会弹出简单的说明:这个数字是什么,多少算正常。
  • 如果车辆不上报某个参数,那一行显示「-」。没有数据的卡片会被隐藏。
  • 能显示哪些参数取决于车型。界面上的内容都在 Leopard 3 上验证过,其他车型上部分行可能是空的。
  • 这个界面只读取数据,不会改动车辆的任何东西。需要无线 ADB 调试处于激活状态,和其他车辆数据一样(见「安装」一节)。

诊断:模块故障

车上有几十个电子模块:电池、制动、转向、安全气囊、驾驶辅助等等。模块发现问题时,会在自己内部记下一个故障码。维修店用诊断仪读取这些故障码。从 4.1 版本起,BYDMate 也能读取它们,直接在车机屏幕上,不需要诊断仪,也不需要联网。

「技术」界面上的「车辆状态」和「诊断」卡片

截图里的应用是俄语界面;中文界面里的文字就是下文引号中的内容。

在哪里

主页 → 点按电池卡片 → **「技术」**界面 → **「诊断」**卡片。卡片里有三部分:

  • 仪表警告:车辆自己在仪表上显示的内容。显示「无」表示仪表目前没有任何提示。
  • 距保养:距离下次定期保养还剩多少天和多少公里。只有在车上开启了保养提醒时才会有这一行。在 Leopard 3 上,在车辆设置里开启:Vehicle → Maintenance → Maintenance Interval 或 Maintenance Mileage。
  • 模块故障:上一次扫描的结果和**「扫描」**按钮。

如何扫描

  1. 停车并挂入 P 挡。行驶中按钮不可用,并显示「仅在 P 挡可扫描」。
  2. 按下**「扫描」**。应用会逐个询问各个模块,屏幕上显示已经询问了多少个。
  3. 随后会打开结果窗口。关掉后点按卡片里的列表可以再次打开,这时不会重新询问车辆。

需要无线 ADB 调试处于激活状态,和读取其他车辆数据一样(见「安装」一节)。应用从不自己扫描:车辆启动时不扫,不按计划扫,发送 Telegram 报告前也不扫。只有你按下按钮时才扫描。

如何看结果

「诊断 · 模块故障」窗口
  • 顶部:检查的时间和有多少个模块响应,例如「18 个模块中 15 个有响应」。这是正常的:不是每个车型都有全部模块,有些模块也不是每次都会响应。
  • 「当前存在」:故障此刻处于激活状态。这些码显示为黄色。
  • 「历史」:故障以前出现过,模块记住了它。显示为灰色。几乎每辆车都有历史故障码,哪怕一次短暂的通信中断模块也会记下来。如果仪表上没有警告、车辆表现一切正常,通常不必担心。
  • 故障码按模块分组:模块地址(例如 0x712)和模块名称(在 Leopard 3 上;在其他车型上,部分模块只显示地址)。
  • 故障码的写法与比亚迪手册和维修用诊断仪一致:U1166-87。第一个字母表示问题所在:P 是动力系统(电机、电池、充电),C 是底盘(制动、转向、悬架),B 是车身和车内,U 是模块之间的通信。短横线后面的数字表示故障的类型。
  • 说明在故障码旁边,下面一行注明出处:
    • 「来自该车型的比亚迪手册」:说明来自你这个车型的比亚迪诊断手册;
    • 「来自相似的比亚迪车型」:我们没有你这个车型的手册,但在其他比亚迪车型的手册里,这个模块的这个码说明完全相同;
    • 「数据库中没有该故障码的描述」:只显示故障码,可以上网查,或者给维修店看。
  • 说明的语言:中文界面显示手册里的中文原文,其他语言一律显示英文。比亚迪手册是中文写的,英文翻译是为 BYDMate 做的。
  • U1166-87 的提示(驾驶辅助 ADAS 模块):车辆没有检测到钥匙。用手机远程启动后会出现这种情况。如果钥匙在旁边时该码消失,就不是故障。

这些说明存放在应用内部,不需要联网。它们来自 54 本比亚迪、腾势和方程豹的诊断手册:约 8500 个不同的故障码,每个模块各有说明。

发送到自己的 Telegram

窗口里的**「发送到 Telegram」**按钮会把故障码和说明发送到你的机器人,方便给技师看或转发到聊天里。请先连接机器人(见「如何连接 Telegram 机器人」一节),否则应用会提示「未连接 Telegram 机器人」。应用自己从不把故障码发到任何地方。

需要了解

  • 扫描只是读取。 它不改动车上的任何东西,不清除故障码,也不更改模块设置。应用只向模块发送读取请求。
  • 可以清除故障码,此功能为实验性功能。 在窗口中点「全部清除」,或在某个模块旁点「清除 ›」,仅限 P 挡,且必须在刚扫描之后。清除后应用会自动重新读取模块,并逐个显示结果。当前存在的故障,只要原因还在,会立刻重新出现。风险由您自行承担;如果准备去维修店,请先把故障码发送到 Telegram。
  • 这不是维修,也不是诊断结论。 故障码说明的是模块注意到了什么,而不是什么坏了、该换什么。由维修店来判断:把故障码给他们看。
  • 只在 Leopard 3(方程豹豹3)上验证过。 在其他比亚迪车型上,扫描可能无法使用并显示「此车不支持」,响应的模块可能更少,模块名称会显示为地址。如果你是其他车型,请在 Issue 里告诉我们扫描显示了什么,并附上日志记录。
  • 只在 P 挡、只在按下按钮时。 我们有意不在行驶中询问车辆模块。
  • 「检查失败,请重试」:扫描过程中挡位离开了 P 挡,或者应用和车辆的连接断开了。再按一次「扫描」。如果反复出现,请在 Issue 里发送日志记录。

窗口底部有一行关于支持项目的文字。诊断类应用通常是收费的,BYDMate 是免费的,所有说明不用捐赠也都能看到。


如果你的车不是 Leopard 3

BYDMate 是在 BYD Leopard 3(方程豹豹3)上开发和测试的。在其他 BYD 车型上,大多数功能也能用,但存在一些差异。首次启动前请注意:

  • 行程历史:在 Leopard 3(方程豹豹3)上,BYDMate 从内置的 BMS 数据库 energydata 读取行程。在没有这个数据库的车型上(Song、Yuan 等),行程现在改为原生记录,通过后台轮询车辆参数完成(来源标记 NATIVE_POLLING),所以列表不会再是空的。这类行程的能耗按 SoC 差值计算,比 Leopard 3 上直接读取 BMS 数据要粗糙一些。
  • DM-i 和 DM-o 混动车型:应用根据发动机里程和油箱油量自己识别,没有任何设置;类型未确认之前,界面和电动车一样。这是第一版支持,根据两辆车的转储数据制作:部分数值可能显示短横线。如果车辆明明知道数值却显示短横线,请把参数目录(见下文)和带纯电续航、燃油续航的仪表盘照片一起附在 Issue 里。
  • 电池容量:默认按 Leopard 3 的 72.9 kWh。请到设置 → 车辆与电池填写你自己的容量。例如:Atto 3 = 60.5 kWh,Seal AWD = 82.5 kWh,Han EV = 85.4 kWh。不填的话,续航和行程费用的计算都会不准。
  • SoH:已在 Leopard 3 和 DiLink 3.0(Yuan UP)上确认可用。其他车型上,「电池健康」卡片能正常工作,只是没有 SoH 这一项。
  • 充电记录:AC 和 DC 的判断算法是针对 Leopard 3 设计的。在其他车型上,记录可能出现延迟,功率也可能不准,DC 尤其容易出问题。自动判断出错时,请用手动添加和编辑。
  • 自动化和悬浮窗:在任何车型上表现都一样,因为它们用的是车辆系统接口。

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

为什么需要这个:不同 BYD 车型的参数集是不一样的,Leopard 3 上用来打开座椅通风的命令,在 Song 上编号可能不同,甚至根本不存在。这正是部分功能在其他车上不生效的原因。你车辆的参数目录能显示这些参数在你的固件上叫什么、编号是多少,我们就能照着这些数据修复问题,而不是凭空猜测。


目标设备

参数 数值
平台 DiLink 5.0(Android 12,API 32)
处理器 Snapdragon 780G
屏幕 15.6 英寸横屏,1920x1200
GMS 无(AOSP,不含 Google Play Services)
已测试车型 BYD Leopard 3(方程豹豹3)

工作原理

BYD energydata (BMS SQLite)  →  HistoryImporter    →  Room DB  →  Compose UI
autoservice (系统 Binder)     →  TrackingService     ↗     ↓
Android LocationManager       →  TripTracker (GPS)   ↗   LocalInsightEngine
autoservice (命令写入)         ←  AutomationEngine   ←  Rules (Room DB)
数据 来源
能耗、里程、时长 BYD energydata(BMS)
SOC、车速、温度 车辆系统服务(autoservice Binder)
电芯电压、12V、SoH 车辆系统服务(autoservice Binder)
GPS 坐标 Android LocationManager
AI 分析 车机本地规则,不联网
车辆控制 车辆系统服务(命令写入)

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


数据与网络

功能 发往哪里 发送了什么 什么时候生效
语音智能体(LLM) OpenRouter / z.ai / 自建服务器 命令文本、车辆状态(SOC、空调等),导航请求时还包含 GPS 坐标 仅在配置好服务商后
智能体网络搜索 Exa / z.ai / OpenRouter 搜索关键词文本 已填密钥且智能体调用了该工具时
天气(智能体) Open-Meteo GPS 坐标或地点名称(地理编码) 智能体调用了该工具时
充电站(智能体) Overpass(overpass-api.de / maps.mail.ru) GPS 坐标 智能体调用了该工具时
在线语音合成 MiniMax / fal.ai / Replicate / OpenRouter 要朗读的回答文本 仅在选择在线语音时
行程详情地图 OpenStreetMap 瓦片服务器(或 Amap,如果在设置里选择了它) 当前可见地图区域的坐标 打开行程地图或地点编辑器时
更新检查 GitHub API 不发送任何内容(只获取发布列表,版本比较在本地完成) 自动进行
ABRP 实时遥测 abetterrouteplanner.com SOC、功率、车速、各项温度、里程、胎压、充电状态、电池容量、SoH、本次充电的 kWh、车型(坐标只有单独开关开启时才发送,用于在手机上查看车辆位置) 仅在输入令牌后
Telegram 配置备份 api.telegram.org、你的机器人 你选择包含的配置压缩包,以及连接机器人时的一条消息 仅在连接机器人后
遥测 Webhook 设置 → 集成 → Webhook 和发给 ABRP 一样的 JSON,每 1/8/30 秒 POST 到你的地址一次(行驶/充电/停车);坐标只有单独开关开启时才发送 默认关闭

没有填入任何密钥的情况下,只有更新检查(GitHub)、查看行程路线时的地图瓦片,以及用户主动请求下载语音模型(github.com)会离开车机。API 密钥只保存在应用本地的数据库里,除了发给对应的服务商本身,不会传到任何地方。


安装

1. 激活 ADB

没有 ADB 时,BYDMate 只是一个离线的行程记录本:来自原车数据库的历史、路线地图、保存配置、基于已有数据的 AI 洞察。

无线 ADB 调试要用于所有读取或写入车辆参数的功能:悬浮窗和主页上的实时数值(SOC、续航、各项温度、12V)、SoH、自动充电记录、自动化、投射到仪表盘、分屏、HUD 提示、盲区摄像头、语音控制车辆,以及日志录制。

ADB 状态栏。 在主页和设置里,状态栏会显示车辆控制为什么不工作:ADB 没有开启、ADB 在重启后关闭了、无法访问 ADB,或者助手没有启动。点按会打开带操作按钮的提示。首次启动向导里有一个「ADB」步骤,带「检查」按钮。

这些功能会自动启用,不需要单独的开关。BYDMate 首次启动时,DiLink 会弹出一次「Allow ADB debugging」对话框:点 Allow,勾选 「Always allow from this computer」,这样它就不会再问了。

  • DiLink 3 / 4:可以自己激活 ADB,安装 BydDevelopmentTools,进入 设置 → Version Management,连续点按 Reset to factory default 文字 10 次,打开 Debug Mode when USB is Connected 和 Wireless adb debug switch。在更新过的 DiLink 3/4 固件上,ADB 也可能像 DiLink 5 一样被锁住,那就要走下面的路。

  • DiLink 5.0:ADB 调试被锁定,只能从中国远程解锁。可以通过淘宝上的卖家操作(搜索 DiLink 5.0,境内约 40 元 / 境外约 80 元,支付宝付款)。卖家凭你发去的二维码远程打开工程菜单,之后 ADB 就正常开启了。

    分步说明:PDF 指南(俄语)(已附在仓库里)。

ADB 每次重启后都会断开

在 2026 年夏天以后(「2606」构建)的 DiLink 固件上,每次重启车机 ADB 端口都会关闭,所有车辆控制功能都会失效,直到手动重新开启 ADB。针对这类车机,设置 → 车机系统里有一个**「重启后恢复 ADB」**开关(默认关闭):应用会通过 Android 内置的无线调试功能重新拉起 ADB。开关旁边有一个「?」图标,附详细说明,下面还有一行状态提示。

需要知道的几点:

  • 车里的 Wi-Fi 必须打开并连上网络(家里的、手机热点、随便什么网络都行)。没有 Wi-Fi,Android 不允许开启无线调试,这是系统限制,绕不过去。
  • 每换一个新网络,第一次开启时屏幕上都会弹出系统对话框「Allow wireless debugging on this network?」。恢复开关打开时,应用会通过自己的无障碍服务自动确认这个对话框:用手机热点时网络每次开启都会变化,「Always allow on this network」在这种情况下不起作用。如果 BYDMate 的无障碍服务是关闭的,请勾选「Always allow on this network」并点 ALLOW。
  • 只需一次,趁 ADB 还在工作时,应用会通过一条 ADB 命令给自己授予系统权限 WRITE_SECURE_SETTINGS。没有这个权限就无法开启无线调试:状态栏会显示「需要激活」。
  • 启动后,只要 Wi-Fi 保持连接,应用就会自动重试,并对解锁屏幕做出反应。车辆连上 Wi-Fi 后,ADB 通常会在 10 到 30 秒内恢复。如果车辆启动时手机热点已经开着,效果最好。
  • 如果你的固件本来就能在重启后保留 ADB,不需要打开这个开关:状态栏会显示「无需开启」。
  • 已在 2026 年 8 月固件的 DiLink 5.0(Song L)上验证过。

2. 不再需要 DiPlus(D+)

从 3.0.0 版本开始,BYDMate 直接对接车辆系统,不再需要第三方应用 D+(迪加)。所有数据读取和命令发送都通过车辆的系统服务完成。

如果你之前用过旧版本并安装了 D+,确认 BYDMate 工作正常之后,就可以把它从 DiLink 上卸载了。

3. 安装 BYDMate

  1. 从 Releases 下载 BYDMate 的 APK
  2. 传到 DiLink 上:可以用 U 盘、局域网,或者 ADB(adb install BYDMate.apk)
  3. 如果需要,允许安装未知来源的应用

4. 首次启动

  1. 打开 BYDMate,会出现设置向导
  2. 授予定位和存储权限。随着功能陆续开启,应用还会请求:语音智能体要用的麦克风、盲区摄像头要用的相机、按联系人姓名拨号要用的通讯录、悬浮窗和通知要用的「显示在其他应用上层」权限、判断当前前台应用要用的使用情况访问权限。通知栏里 BYDMate 的常驻通知没法关掉(Android 要求后台运行必须有它),但可以让它安静:设置 → 服务与数据 → 「安静的通知」
  3. 填写电价(用来计算行程费用)。以后可以追溯修改,见《电价与费用》一节
  4. 自动化里有一个「安防模式」动作类型:直接通过系统设置打开或关闭 BYD 的安防模式(Centuri/Sentry),不用经过原车应用的确认对话框

5. 后台运行

重要: 给 BYDMate 关闭「Disable background Apps」,否则 DiLink 会把应用杀掉:

Disable background apps: toggle OFF for BYDMate

DiLink > Settings > General > Disable background Apps > BYDMate = OFF

6. 设置(可选)

在设置里可以修改:

  • 电池容量:默认 72.9 kWh(Leopard 3)
  • 电价与周期:家用(AC)和快充(DC)的单价、损耗、行程费用的计算规则和货币。详见《电价与费用》一节
  • 能耗阈值:颜色提示(绿/黄/红)的分界线

车机系统

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

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

通过 Wi-Fi 连接 BYD 云。 通过 Wi-Fi 把车辆连接到 BYD 云,让手机上的 BYD 应用看到车辆、接收 OTA 升级并使用 NFC 钥匙。使用新版 BYD 服务器的车辆需要中国 VPN:服务器只接受来自中国 IP 的连接。最好在车辆连接的路由器上设置 VPN,它不依赖车机。另一种方式是在车机上安装 VPN 应用,例如 SpeedCN,它只在车机开启时工作。需要 ADB。如果车辆已有自己的移动网络,此设置不做任何改动;关闭时会恢复原来的网络设置。

车机界面语言。 只在 UI7 固件上有效。这个按钮会打开 BYD 原车隐藏的语言对话框,里面有完整的语言列表,包括俄语、乌克兰语和波兰语。语言是固件自己切换的,应用不写入任何东西。部分车主切到俄语后自动泊车会失效,那就用同一个按钮切回 English。


AI 洞察

主页上的卡片会分析你最近 7 天的数据(和前 7 天对比),显示标题、简短结论、指标表格,以及最多 5 条建议。不需要联网。

卡片完全在车机本地计算,基于你的行程和电池数据。每天自动刷新一次,结果缓存在设备上。展开卡片后,统计周期可以在「周」和「月」之间切换。

数据来源

全部数据来自本地 Room 数据库,不涉及 GPS、路线和任何个人标识:

  • 行程:公里数、kWh、平均能耗、速度、短途行程(少于 5 公里)、能耗最好/最差的一次、费用
  • 带电机的停车:kWh 和小时数(idle_drains)
  • 夜间停放:在 22:00-06:00 开始的停放
  • 充电:AC/DC 的 kWh、次数、每 kWh 单价、本周总费用
  • 12V:当前电压和一周的变化趋势(最多保留 7 天历史)
  • 电芯:从车辆实时数据算出的 max-min 毫伏差
  • 温度:各次行程的平均车外温度

分析所需最少数据: 最近 7 天至少 5 次行程。不够的话,卡片会显示「数据不足,无法分析」。

卡片的构成

  1. 标题和摘要:本周最重要的一条结论,由优先级最高的规则(见下文)决定。
  2. Dynamics(周对比):能耗、行程数、短途占比、平均距离、带电机的停放、夜间停放的「周对周」对比表。
  3. 建议:从符合条件的规则里挑出最多 5 条,按重要性排序。

引擎的逻辑在 LocalInsightEngine.kt 里:确定性的阈值判断加上字符串模板(strings.xml 里的 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
DC 比 AC 贵 两种充电都 ≥ 3 kWh,DC 贵 15% 以上
DC 用得多 ≥ 2 次 DC 充电,且 DC > AC×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
混合充电 一周内既有 AC 又有 DC
费用 每 100 公里花费或本周充电费用
良好习惯 夜间/白天停放耗电少,12V 和电芯均衡都正常

完整的规则和阈值列表在 LocalInsightEngine.kt 和测试文件 LocalInsightEngineTest.kt 里。


ABRP:实时遥测

BYDMate 可以通过官方 Iternio Telemetry API,把车辆的实时数据发送到 A Better Route Planner(ABRP)。ABRP 用这些数据让路线规划和续航估算跟着电池的真实状态走,而不是用表格里的平均值。

设置 → 集成:ABRP

这个功能是可选的,默认关闭,需要在设置里手动开启。

车机上的 ABRP 版本:请安装 7.1.2 或更早的版本,例如从 APKMirror 下载。在 7.1.4 及更新的版本中,地图上的车辆标记会跳动着更新或者卡住不动。这是 ABRP 自身的问题,与 BYDMate 无关。

如何获取令牌

ABRP 使用「Generic Live Data Token」,车库里每辆车都要单独申请一个:

  1. 打开 abetterrouteplanner.com 并登录账号。
  2. 进入车库,打开你想看实时数据的那辆车。车辆必须已保存在车库里,否则不会生成令牌。
  3. 点齿轮**「车辆设置」** → **「数据」**部分 → **「连接实时数据」**按钮。
  4. 在服务商列表里选择**「Generic」并点「关联」**。会出现一长串令牌字符串,这就是 User Token。

如果列表里没有「Generic」:把 ABRP 车库里这辆车的车型代码临时改成任意一款常见的 BYD 车型(例如 BYD Atto 3 或 BYD Seal),保存后 Generic 就会出现。关联令牌之后,可以把车型代码改回去。

在 BYDMate 里设置

  1. 设置 → 集成 → **「ABRP - 遥测」**部分。
  2. 把获取到的令牌填进**「ABRP 实时数据令牌」**。
  3. 不需要再设置别的:发送间隔会自动调整,行驶时 1 秒一次,充电时 8 秒一次,停车时 30 秒一次。旧版本里的「间隔」和「车型代码」两个字段已经取消。
  4. 点**「保存 ABRP」,然后打开「实时数据 -> A Better Route Planner」**开关。没有保存令牌的话,这个开关是打不开的。
  5. 这时 DiLink 上的 ABRP 应用(或者手机浏览器)就能看到最新的 SOC、功率、温度、电量了。

发送了什么

只有聚合的车辆数据,不含任何标识信息:

  • SOC:动力电池当前电量百分比
  • Speed:车速,km/h
  • Power:当前牵引功率;充电时按 Iternio 的要求,用电压乘电流算出的充电功率,取负值。混动车型上,功率只按电池电压和电流或充电数据计算;如果车辆不提供这些数据,就不发送该字段。
  • Voltage / current:动力电池的电压和电流
  • HVAC setpoint:空调设定温度
  • Battery / cabin / exterior temp:电池、车内、车外温度
  • Capacity:电池标称容量
  • Odometer:里程,km
  • Tire pressures:四个轮胎的胎压
  • is_charging / is_parked:状态标志
  • is_dcfc / kwh_charged:充电站类型(DC 还是 AC)和本次充电已充的 kWh
  • soh:真实的电池 SoH(Leopard 3)

没有发送什么

  • 默认不发送 GPS 坐标。 ABRP 是 DiLink 上一个独立的 Android 应用,自己从系统读取位置。如果 BYDMate 也发送坐标,ABRP 地图上的车会在两个数据源之间跳来跳去。「向 ABRP 发送坐标」设置只用于一种情况:车内的 ABRP 没有运行时,用手机上的 ABRP 查看车辆位置。如果车内打开了 ABRP,请不要开启它。
  • 不发送:VIN、设备标识符、行程历史、路线、个人设置。

ABRP 如何计算续航

ABRP 根据自己数据库里的车型加上实时数据(当前 SOC、电池温度、行驶速度、风、路况、海拔变化)来估算续航。BYDMate 不会把自己算出的「预计续航」发给 ABRP,ABRP 有一套自己的、针对具体路线更精确的算法,会考虑天气和地形。

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

发给 ABRP 的那份 JSON,也可以用 POST 请求发到你自己的地址:Home Assistant、Node-RED,或者你自己在 VPS 上写的脚本。不做任何排队缓存:服务器连不上,这个点就丢了,下一次尝试是一分钟后。

设置方法

  1. 设置 → 集成 → **「Webhook - 遥测」**部分。
  2. URL:只能是 https://。普通的 http:// 走不通(Android 屏蔽未加密流量,只对 localhost 放行)。如果服务器没有证书,可以在前面加一层带 Let's Encrypt 的 Caddy 或 nginx,或者用 Cloudflare Tunnel 这类隧道。
  3. 密钥(可选):一个字符串,会放进请求头 Authorization: Bearer <密钥>。服务器靠它区分你的车和别人的请求。
  4. 「向 Webhook 发送坐标」:默认关闭。只有服务器是你自己的时候才建议打开,打开后 JSON 里会多出 lat、lon、heading。
  5. 点**「保存 Webhook」,然后打开「实时数据 -> 自己的服务器」**开关。

发送内容

POST <你的 URL>,Content-Type: application/json,body 里是一个数据点:

{"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 是独立的:可以只开一个,也可以两个都开。

Home Assistant。 第三方集成 byd-leopard3-ha-integration 可以接收这个 Webhook,并在 Home Assistant 中显示车辆。它由其他作者开发,我们不审查也不维护它的代码,相关问题请联系它的作者。


从源码编译

# 需要: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(依赖注入) + OkHttp
  • osmdroid(OpenStreetMap) + Coroutines/Flow
  • Min SDK 29 / Target SDK 29 / Compile SDK 34

出问题该怎么办

如果哪里不工作,按下面的步骤来,多数情况下第一步就能解决,如果不行,这些信息也能帮我们快速定位问题。

1. 重启车机。 长按音量旋钮,一直按到屏幕开始重启。有些功能(比如分屏)依赖一个只在开机时生效的系统标志,不重启的话这个功能看起来「坏了」,其实一切正常。

2. 录制日志。 设置 → 「服务与数据」部分 → 「录制日志」按钮。重现一遍问题(点那个不工作的功能),然后点「停止录制」。文件 bydmate_logs_<日期>.txt 会出现在 Download 文件夹里(如果忘了停止,2 小时后会自动停止录制)。

3. 保存 fid 目录。 设置 → 「服务与数据」部分 → **「保存 fid 目录」**按钮。文件 fid-dump-<日期>.txt 会出现在 Download 里。不同 BYD 车型的命令目录不一样,靠这份文件我们才能把应用适配到你的车上。

4. 发给我们。 在 GitHub Issues 里建一个 issue,附上:车型和 DiLink 代数、BYDMate 版本、你点了什么、期望看到什么,以及第 2、3 步的文件。

常见情况:

  • 分屏或投射到仪表盘不工作:重启车机(第 1 步)。
  • 命令执行了,但车没反应(车窗、天窗、空调):多半是你的车型命令目录不一样,请发日志和 fid 目录(第 2-4 步)。
  • 更新之后出问题:先重启车机,不行的话发日志。
  • 「测试模型」按钮是灰的,或者返回错误:语言模型的密钥没保存,或者服务器没响应,去设置 → 集成 → AI 连接里检查一下。
  • 方向盘按键没反应:重新分配一下(设置 → 语音智能体 → 「分配按键」),并确认 BYDMate 的无障碍服务权限已经打开。
  • 智能体只回文字,不出声:打开「朗读智能体回复」开关,并下载一个语音(「智能体回复」部分)。
  • 智能体的声音很小:它走的是系统的 Voice 通道,音量是单独调的,跟音乐分开,回答时用音量键调,或者去车机的声音设置里调。
  • 「测试模型」能通过,但对话时智能体拒绝回答:把日志发到 Issue 里,并说明用的是哪个连接、哪个模型。

致谢

  • BYD Trip Info(org.jayb.bydapp)by jayb,DiLink 上最早的一款应用,BYDMate 的灵感来源
  • DiPlus(迪加)by Van Design,一个连接车辆数据的桥接应用,BYDMate 早期版本用过它(从 3.0.0 起不再需要)
  • 天气数据来自 Open-Meteo.com
  • @klimuts,提示了把导航投射到仪表盘用的 auto_container 机制
  • @RBGboost,逆向了原车 HUD 的 SOME/IP 协议,并给出了 YandexHUD 的最初实现。BYDMate 里把 Yandex 导航提示投射到抬头显示屏这个功能,代码和功劳都是他的。想感谢他可以去 Telegram:@RBGboost
  • byd-turnsignal-cameraview by sunlixWhyNotAvailable,一份关于 DiLink 摄像头和车窗接口的公开研究,转向灯盲区摄像头功能就是在这份研究的基础上做的。BYDMate 里的实现是从零写的,但他的分析帮我们省下了几周的逆向工作,谢谢!
  • denza-lab by xor777(MIT 许可证),读取车辆模块故障码并解析其应答的方法。「诊断」卡片里的手动扫描就是基于他的研究和代码做的。
  • danijar2000,修复了 2GIS 投射到仪表盘的问题(之前 2GIS 转到仪表盘显示时会直接退出)

支持这个项目

这是个非商业项目,我业余时间做着玩的。想表示感谢的话,收款方式在 SUPPORT.md 里。不想也没关系,还是谢谢你的信任。


许可证

PolyForm Noncommercial 1.0.0:源代码开放,仅限非商业用途。 详见 LICENSE。

Copyright (C) 2026 AndyShaman


English version: README.en.md

探索相关项目