自建特斯拉数据平台:TeslaMate 入手指南与避坑

最近 GitHub 上有个项目突然火了起来——TeslaMate,今天一天涨了 8000 多星。作为一个在互联网公司写后端、同时也是特斯拉车主的工程师,我第一反应是:这玩意儿到底值不值得我花一个周末折腾?

认真读了一遍文档、跑了一遍 docker-compose,又对比了市面上几款同类服务,我把结论和实操细节写下来。本文目标:让你读完能在 10 分钟内决定要不要在你的 Tesla 上部署,以及如果决定动手,每一步该怎么做。

teslamate docker grafana dashboard(图:官方 Grafana Dashboard 示例,展示充电历史和驾驶得分)

它解决了什么问题

特斯拉官方 App 提供的数据不够细,比如只能看最近几次行程,无法长期追踪电池健康度、每公里能耗趋势、充电效率曲线。另一方面,TeslaFi、Tessie 这类付费服务虽然功能全,但数据存在第三方服务器上,年费几十美元,哪天服务商改条款或关停,历史数据就丢了。

TeslaMate 是一个自托管解决方案:用 Docker 部署在你的服务器(或者树莓派)上,它会定期调用 Tesla 车主 API,把车辆状态、行程、充电记录等数据持久化到 PostgreSQL 数据库,然后通过 Grafana 提供丰富的可视化面板。

核心卖点:

  • 数据完全掌握在自己手里
  • 无订阅费(只要花电费和服务器费用)
  • 开源,可自行扩展,社区贡献了大量仪表盘模板

从零部署:能跑起来的最小配置

环境要求

  • Docker 和 Docker Compose(推荐 v2 以上)
  • 一台 24 小时在线的机器(树莓派 4B、老笔记本、云服务器均可,最低 2GB 内存)
  • 一个 Tesla 账号(当然)

获取 Tesla API 访问令牌

TeslaMate 需要代表你调用特斯拉 API,这需要 OAuth 令牌。官方文档提供了多种方式,最稳的是用 tesla_auth 工具生成。这里我给出一个来自 README 的最小可运行步骤:

  1. 下载预编译的 tesla_auth 二进制(支持 macOS / Linux / Windows): https://github.com/adriankumpf/tesla_auth/releases
  2. 运行后登录你的 Tesla 账号,会生成一串 JSON,包含 access_tokenrefresh_tokenid_token 等字段。
  3. access_tokenrefresh_token 记下来。

Docker Compose 配置

yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
version: '3.8'

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY=your-32-char-encryption-key   # 至少 32 位随机字符串
      - DATABASE_URL=postgres://teslamate:secret@database:5432/teslamate
      - MQTT_HOST=mosquitto
      - VIRTUAL_HOST=teslamate.yourdomain.com        # 可选,用于反向代理
    ports:
      - '4000:4000'
    volumes:
      - ./import:/etc/teslamate/import               # 用于导入历史数据
    depends_on:
      - database

  database:
    image: postgres:15
    restart: always
    environment:
      - POSTGRES_USER=teslamate
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=teslamate
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  grafana:
    image: grafana/grafana:latest
    restart: always
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
    ports:
      - '3000:3000'
    volumes:
      - ./grafana-data:/var/lib/grafana
      - ./dashboards:/etc/grafana/provisioning/dashboards

  mosquitto:
    image: eclipse-mosquitto:latest
    restart: always
    ports:
      - '1883:1883'
      - '9001:9001'
    volumes:
      - ./mosquitto:/mosquitto/config

以上配置来自官方文档,去掉了安全相关的细节(比如 MQTT 认证),但足够让你在本地跑起来测试。

启动命令很简单:docker-compose up -d。第一次启动会自动创建数据库表,然后 TeslaMate 会开始从 Tesla API 拉取数据。

授权 TeslaMate 访问你的车

启动后访问 http://your-server:4000,会看到一个登录页面。首次登录需要输入你在 tesla_auth 中生成的 access_token(或者直接用 ID 令牌)。成功之后,TeslaMate 就会开始采集数据。

通常几分钟后就能在 Grafana(http://your-server:3000,默认账号 admin/admin)看到预配的仪表盘了。官方提供了好几个导入好的仪表盘文件,放在 dashboards/ 目录下,会自动加载。

它比付费服务好在哪(以及差在哪)

对比 TeslaFi(年费约 $60)

维度 TeslaMate TeslaFi
数据所有权 完全本地 第三方服务器
费用 仅服务器电费 $60/年
图表自定义 基于 Grafana,自由度极高 固定图表,部分可配置
实时推送 支持 MQTT,可对接 Home Assistant 也支持 Webhook
部署难度 需要 Docker 基础 直接注册账号即可
数据精度 每 1-5 分钟拉取一次(可调整) 通常 1 分钟一次
历史数据导入 支持从 CSV 导入 支持从其他服务导入

个人看法:如果你会一点 Docker,且家里有 24 小时不关机的设备,TeslaMate 绝对比 TeslaFi 香。但如果你懒得折腾,或者不想维护一个数据库,那几十美元买个省心也并不贵。

对比 Tessie(年费 $50-$80)

Tessie 的亮点在于 App 端体验好,有 iOS/Android 原生应用。TeslaMate 目前只有 Web 端。另外 Tessie 能解锁一些特斯拉官方不具备的功能,比如远程 Sentry 模式查看、更精细的充电计划。

但 Tessie 仍然是把数据存到它们的服务器,而且它是闭源的。TeslaMate 开源意味着你可以审计代码、提交 PR、甚至修改逻辑。对于注重隐私的开发者,这是很大优势。

你需要知道的几个坑

1. Tesla API 的速率限制

特斯拉对车主 API 有频率限制,默认情况下 TeslaMate 每 1-5 分钟请求一次车辆状态。如果你的车处于休眠状态(比如停在地下车库无信号),API 会一直返回 408,TeslaMate 会智能地降低请求频率,但偶尔仍可能触发临时封禁。

解决办法:在 TeslaMate 的环境变量里设置 POLLING_INTERVAL=10,拉长间隔到 10 分钟。实测对电池能耗分析影响不大,但能显著降低 API 压力。

2. Postgres 数据库膨胀

TeslaMate 会把每次拉取的快照都存下来,比如车的位置、电量、温度等。一年下来数据量可能轻松到几百 MB。如果不做分区和定期清理,查询仪表盘会越来越慢。

建议:部署时配上一个定时任务,使用 PostgreSQL 的 pg_cron 扩展或者手动执行 DELETE 清理超过一定天数的快照。官方文档建议保留最近 90 天的完整快照,更早的就只聚合统计。

3. 车辆进入节能模式时数据缺失

当车辆深度休眠,API 无法获取数据,TeslaMate 会标记这段时间为“离线”。如果你用它做充电成本统计,要注意离线的这段时间可能覆盖了充电开始的一部分,导致统计偏差。

这一点所有特斯拉数据服务都一样,不算 TeslaMate 的锅。但有总比没有好:至少你能看到离线时间段,付费服务往往直接不记录。

4. 升级风险

TeslaMate 社区活跃,更新频繁,有时会引入数据库迁移。如果没提前备份,升级失败可能导致数据丢失。建议每次升级前停掉服务、备份 PG 数据库。

高级玩法:自己扩展

如果你觉得默认仪表盘不够爽,可以基于 Grafana 二次开发。比如我想看“每次超充的充电功率曲线”,官方仪表盘只有充入 kWh,我就自己写了个 SQL 查询:

sql
1 2 3 4 5 6 7
SELECT
    started_at,
    (battery_level - battery_level_before) / 100.0 * full_battery_capacity AS energy_added_kwh,
    started_at - lag(started_at) OVER (ORDER BY started_at) AS duration
FROM charging_processes
WHERE car_id = $car_id
ORDER BY started_at;

然后直接在 Grafana 里添加一个 Table 面板就行。这种灵活性是付费服务给不了的。

另外 TeslaMate 通过 MQTT 发布实时数据,你可以用 Home Assistant 订阅,结合太阳能发电数据做智能充电策略:当光伏功率大于某个阈值时自动开始充电。这才是真正的“技术宅快乐”。

最终建议:你到底该不该装?

  • 如果你符合以下任意一条,强烈推荐:

    • 家里有 NAS 或树莓派长期开机
    • 你是 Tesla 车主且想深度分析能耗、电池衰减
    • 你反感数据被第三方存储
    • 你想玩 MQTT + Home Assistant 联动
  • 如果以下情况占多数,建议直接用付费服务:

    • 对 Docker 完全陌生,不想学
    • 没有可以 24 小时运行的设备
    • 只需要偶尔查看历史行程,不需要自定义分析
    • 在意 App 端体验,希望有推送通知

我的结论:TeslaMate 不是那种“装上就完事”的项目,它需要持续的关注和维护。但对愿意投入一点时间的技术宅来说,回报是远超付费服务的。而且它开源,你甚至能跑到特斯拉车主群里炫耀——“我自己搭的数据平台比官方还详细”。

最后,如果你部署过程中遇到问题,官方 GitHub Issues 和 Discord 社区很活跃,贴出日志一般 24 小时内有人回复。以上,希望对你有用。