gekro
GitHub LinkedIn
Tesla

500 天与 30,000 英里

阅读约 7 分钟

本文是英文原文的机器翻译,部分细节可能有所损失,请以英文版本为准。 阅读英文原文

500 天与 30,000 英里 的关键数据

要点速览

五百天前,我把一台 Raspberry Pi 对准我的车,开始记录它行驶的每一英里。它已经捕获了 10.4 百万个数据点,没有漏掉任何一次不是我造成的心跳,而且在这个过程中的某个时刻,它不再只是一个记录器,而成了我可以向它提问的东西。
五百天前,我把一台 Raspberry Pi 对准我的车,开始记录每一英里。从那以后,它在一个 1.6 GB 的数据库里记录了 10.4 百万个数据点,而这台 Pi 除此之外什么都不做,也没人要求它做别的。上个星期天,它记录下了第 30,000 英里。我没料到的是它后来变成了什么:不是一个记录器,而是一个我能用日常语言向它提问的数据库,问的是我自己的生活,别人谁也答不上来。

上个星期天早晨 10:22,里程表显示 40,397.8,我家里的一台 Raspberry Pi 记录下了我驾驶的第 30,000 英里。五百天的采集,一天不差。

没有任何东西标记这件事,因为本来就没有为此构建任何东西。一行数据落进了 Postgres 的一张表里,就和它之前的一千万行一模一样,这是我能给一件基础设施的最高赞美。

一千万并不是一种修辞。数据库里有 10,356,022 行位置数据,另外还有 243,380 行充电明细。折算下来大约每天新增 20,700 行,天天如此,持续五百天,来自一个被放任只做这件事、别的什么也不做的专用节点。

到底在运行什么

一台 Raspberry Pi 5 上的四个 Docker 容器。TeslaMate 负责采集,Postgres 16 负责存储,Grafana 负责绘图,Mosquitto 通过 MQTT 发布实时状态,让家里的其他设备能对车辆到家做出反应。整个技术栈就是这些,而且它独占一台机器。我的实验室里有好几台 Pi,这一台专门划给采集,除了 24/7 保存记录什么都不做。没有别的东西与它争抢 CPU、内存或在线时间,也就意味着没有别的东西能把它拖垮。

这个采集器比一个轮询循环要聪明。车辆行驶时,它每隔几秒采样一次:位置、速度、航向、海拔、电量、功率、温度。车辆充电时,它会跟踪整个过程,而不是只记下开始和结束。车辆停放时,它会刻意收手让车睡觉,因为不停敲打 Tesla 的 API 会让车保持唤醒,夜里白白耗掉你的续航。最后这个决定,正是记录器从未让我损失续航的原因。

五百天这样完整、逐秒的记录,总共 1.6 GB,比一部电影还小。我一直在等存储成为问题,它却始终没有。

对照里程表,累计跟踪了 30,144 英里,每天 60.3。6,921 次行程,共 976 小时,相当于整整四十天坐在方向盘后面。513 次充电共 10,016 kWh,其中 458 次在家,也就是 89.3%,这是我能对任何一个对买电动车心存顾虑的人说的最有用的一句话。捕获了三十五次空中更新,每次都有时间戳,让我拥有一份比 Tesla 发布的任何内容都更精确的个人固件更新日志。

整个运行期间的采集在线率是 92%。对于一台无人值守、没有运维团队的单板计算机来说,这个数字我每次都愿意接受。

我每买四美元的电,大约有三美元真正用来驱动车,其余的花在充电损耗、空调,以及车在夜里自己醒来上。天气决定了这种损耗有多糟糕,炎热的月份比温和的月份每英里多花 16%,而德州的冬天多花 3%。

没人告诉你的那部分

我总是 SSH 进那台 Pi,而且几乎从来不是因为它需要修理。我连上去,是因为我想看数据一条条到来,想看一次行程落进表里时车还在车道上发烫,想确认前一晚的充电曲线看起来像一条充电曲线。最初我这样做,是因为我还不信任它。后来这样做,是因为我已经开始理解表结构,而一旦理解了表结构,数据库就不再是黑箱,变成了一个你可以走进去查看的地方。

这种学习比听起来要慢。你会学到,车一改变状态,drives 里就会出现一行;充电过程和充电样本是生命周期不同的两种对象;里程表是唯一从不撒谎的字段。你会学到自己的数据意味着什么,而这和仅仅拥有它不是一回事。

这一切都不需要 AI,而我想把时间线说准确:在有助手能替我写查询之前很久,我就已经在做这些了。学习本身就是工作。

然后查询变简单了

变化在于,我不再写 SQL,开始提问。

把 LLM 指向一个我已经理解的数据库结构,把五分钟的查询变成了十秒钟的查询。不是因为它了解我的数据,而是因为我了解,而且当它给我的答案是胡扯时,我能立刻分辨出来。这种组合才有用。从没打开过这些表的人,会得到自信满满的错误答案,却没有办法发现它们。熟悉结构、现在又能用日常语言提问的人,可以直接跳到有意思的部分。

有意思的是,问题会越问越好。查询昂贵时,你只会问自己已经怀疑的事。查询便宜了,你就开始问那些毫无假设的事,惊喜就藏在那里。不同季节里平均行程长度如何变化。一天里车到底什么时候在动。一年中最热的那一夜的充电过程,与最温和的那一夜相比是什么样。

Tesla 的应用回答不了其中任何一个问题。它根本不是为此而造的。它给你的是一个摘要,而摘要只能回答设计者当初预料到的问题。

让整个项目回本的那个问题

今年夏天,我确信我的壁挂式连接器出了故障。

在炎热的夜晚,应用里的充电过程看起来像是在停止又重新开始。诊断结果不言自明:热降额,设备发热后就削减电流,让车以一种多年来悄悄让电池老化的方式循环。更换壁挂式连接器并不便宜。

然后我想起来,我不必猜。它采集过的每一个充电样本,都在我家里的一块硬盘上。

导引信号是连接器告诉车它最多可以拉多少安培。降额意味着这个数字下降。在 **家里采集的 217,124 个样本中,有 217,118 个读数是 48 安培。**二十多万个读数里只有六个在别的值上,而且电池电量从未在充电中途下降,如果车真的被切断就会下降。

连接器从来没有出过问题。把各次充电过程与室外温度对齐后,真正发生的事就清楚了:在最热的夜晚,是车自己掉了线,所以记录器丢失了一个本来运行得好好的充电过程。

我没有花那笔钱。那一个答案,来自我早已拥有的数据,用的是我早已拥有的硬件,就把整个项目的成本赚回了好几倍。

接下来的两万英里

按每天六十英里算,五万英里大约会在明年年中到来,而硬盘仍然毫不在意。

我真正在等的是对比。一个德州的夏天说明不了热和电池的关系。两个夏天才能让你测量。三万英里大致就是日志不再只是日志、变成基线的那个点,我每多让它跑一个月,对比就会变得更清晰,而我无需付出任何努力。

这台 Pi 是我拥有的要求最少的基础设施,也毫无疑问是回报最丰厚的,因为它会复利。它只要求一次搭建,加偶尔一次 SSH,而作为回报,它悄悄建起了一样没人能卖给我、对我停掉、或涨价让我买不起的东西:一份完整、可查询的记录,记着我究竟是怎么使用我自己的车的。

Rohit Burani

作者

Rohit Burani

AI 工程师,在实验室里构建本地优先系统、自托管基础设施和自主工具。

感谢阅读。

如果这篇文章对你有帮助,欢迎分享给你的圈子。

← 返回博客