玩转特斯拉行车数据:TeslaMate 部署与数据分析实战指南(含地图更换)

解决的问题(需求)

基于TeslaMate实时分析,实现一个特斯拉能效分析看板: 核心目的是可查看上一次充电到下一次充电区间的电量都跑哪去了)。 第二,实现看板,必须先解决经纬度坐标解析问题(开源工具是国外的,国内不让用地图显示,所以要自己改)。点击充电周期可分析该期间内的行程明细表。直接上结果图:

在这里插入图片描述

======== 附件下载在文章底部 ===============


1. 前言:为什么我们需要 TeslaMate?

作为特斯拉车主,你一定习惯了每天查看官方 App。然而,你是否曾好奇过:

  • “我的车在冬天到底比夏天多耗了多少电?”
  • “这次自驾游的实际能耗曲线是怎样的?”
  • “电池现在的实际容量比新车时衰减了多少?”

官方 App 只能提供“当前状态”,而 TeslaMate 能提供“历史全貌”。

TeslaMate 是目前全球最受欢迎的开源特斯拉数据记录器。与其他第三方服务(如 TeslaFi)不同,TeslaMate 是**自托管(Self-hosted)**的。这意味着所有数据都存储在你自己的服务器或 NAS 上,你不需要将特斯拉账号令牌(Token)交给任何第三方公司,最大程度地保障了隐私与安全。
下面是teslamate里面自带的电池分析表。(原版英文,自己进入编辑态把字段改成中文就行)
在这里插入图片描述

本教程将手把手带你在中国网络环境下,利用 Docker 部署一套完美的 TeslaMate 系统,并解决最让国内车主头疼的地图偏移问题。


2. 环境准备:打造稳固的数据基座

在开始敲代码之前,我们需要一台 7x24 小时运行的设备。

2.1 硬件选择建议

  • NAS(推荐): 群晖(Synology)、威联通(QNAP)或 极空间。这些设备天生适合运行 Docker 容器,且存储稳定。
  • 云服务器 (VPS): 腾讯云、阿里云等轻量应用服务器。优点是公网访问方便,缺点是需要持续付费。
  • 树莓派/小型工控机: 适合极客玩家,功耗极低。

2.2 Docker 环境检查

无论你使用什么硬件,核心都是 Docker。

  • 群晖用户: 请在“套件中心”安装 Container Manager (或旧版 Docker)。
  • Linux 用户: 确保已安装 Docker 和 Docker Compose。
# 检查 Docker 版本
docker --version
# 检查 Docker Compose 版本
docker-compose --version


3. 核心部署:Docker 容器化安装详解(开源工具)

TeslaMate 并不是一个单一的软件,它是一个微服务集群。理解这一点,对于后续的排错非常有帮助。官方github仓库名为:teslamate-org/teslamate, 直接按官网教程去安装就行。

3.1 架构解析

我们需要同时运行四个容器,它们各司其职:

  1. teslamate: 核心程序。负责连接特斯拉 API,获取数据。
  2. database (PostgreSQL): 数据仓库。所有行车记录、充电数据都存在这里。
  3. grafana: 数据展示层。我们看到的酷炫仪表盘就是由它生成的。
  4. mosquitto (MQTT): 消息代理。用于 teslamate 和其他智能家居(如 HomeAssistant)通信。

3.2 编写 docker-compose.yml

在你的服务器上创建一个文件夹,例如 /volume1/docker/teslamate,并在其中创建文件 docker-compose.yml

以下是标准配置代码(请仔细阅读注释,部分内容需根据实际情况修改):

version: "3"

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY= # 在这里输入一串随机生成的密钥,用于加密你的API令牌
      - DATABASE_USER=teslamate
      - DATABASE_PASS=secret # 建议修改为强密码
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - 4000:4000
    volumes:
      - ./import:/opt/app/import
    cap_drop:
      - all

  database:
    image: postgres:15
    restart: always
    environment:
      - POSTGRES_USER=teslamate
      - POSTGRES_PASSWORD=secret # 必须与上面的 DATABASE_PASS 保持一致
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin # 设置Grafana的登录密码
    ports:
      - 3000:3000
    volumes:
      - teslamate-grafana-data:/var/lib/grafana

  mosquitto:
    image: eclipse-mosquitto:2
    restart: always
    command: mosquitto -c /mosquitto-no-auth.conf
    ports:
      - 1883:1883
    volumes:
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data

volumes:
  teslamate-db:
  teslamate-grafana-data:
  mosquitto-conf:
  mosquitto-data:

3.3 启动服务

在终端进入该目录,执行:

docker-compose up -d

当看到所有服务状态为 doneRunning 时,恭喜你,基础环境搭建完成。

此时访问 http://你的IP:4000 即可看到 TeslaMate 的登录界面。


4. 攻克痛点:解决中国区地图缺失问题

这是本教程最关键的部分。原生 TeslaMate 使用的是 OpenStreetMap (OSM) 和 WGS-84 坐标系。

4.1 技术原理:国内不支持地图且地图坐标系不一样?

在中国,由于法规要求,所有地图数据必须使用 GCJ-02 坐标系(俗称“火星坐标系”),如高德。

  • 特斯拉车辆上报: 原始 GPS 数据 (WGS-84),需要地图引擎做转换。
  • 国内地图显示: 如果直接把 WGS-84 的点投射到 GCJ-02 的底图上,就会出现几百米的偏移。
  • 网络问题: 此外,国内无法使用google地图,所以addreses表都是空白的。

解决方案: 我们将底图更换为高德地图,并使用脚本或插件对坐标进行实时解析更新。

4.2 步骤一:申请高德地图 (Amap) API Key

为了合法合规地调用地图数据,你需要一个高德开发者 Key。

  1. 访问 高德开放平台 并注册账号。
  2. 进入“应用管理” -> “我的应用” -> “创建新应用”。
  3. 点击“添加 Key”。
  • Key名称: 随意填写,例如 TeslaMate-Map
  • 服务平台: 必须选择 Web端 (JSAPI)
  1. 提交后,你将获得一串 key安全密钥

4.3 步骤二:使用地图修正脚本更新数据

为了简化操作,我已经为大家打包好了一个修正脚本工具包。这个脚本会自动处理 Docker 环境变量和 Grafana 的地图插件配置。

下载地址: 查看文章底部下载链接,里面有 amap_geocoder.py脚本文件。

配置指南:

  1. 进入docker的PG数据库容器:docker exec -it teslamate2-database-1 /bin/bash。
  2. 进入到home文件夹,用apt-get安装python和vim。
  3. pip install两个包requests、psycopg2-binary包
  4. 修改amap_geocoder.py对应位置填入你自己刚才申请的高德 Key:
  5. 后台运行脚本:nohup python3 amap_geocoder.py --refresh > amap.log 2>&1 &

注:你也可以把teslamate2-database-1的端口映射出来,在其他设备上搭建python环境运行数据更新脚本。我这边图简单,直接在官方数据库容器里运行脚本。

原理解析:
该脚本主要做了两件事:

  1. 直接更新数据库表addreses: 它进行联表查询,然后把经纬度转成中文地址更新到addreses表中。
  2. 注入坐标转换算法: 通过脚本读取经纬度,链接数据库,将 WGS-84 实时转换为 GCJ-02,从而实现车辆轨迹与高德底图的完美重合。
    在这里插入图片描述
    当这个脚本运行成功,并每24小时执行一次,即可更新坐标地址到数据表中,可以通过Granafa点个常用表查看是否成功。
    在这里插入图片描述

5. 进阶实战:部署“充电周期分析”联动仪表盘

原生的 TeslaMate 仪表盘虽然丰富,但往往缺乏一个维度的视角:“周期”。我们常问自己:“充满电后,这几天我到底跑了多远?停车掉了多少电?”

为此,我特别定制了一款 “充电周期分析 (Master-Detail)” 仪表盘(附件名为 Drive_Details_CN.json)下载地址在文章顶部。它不再按“天”看数据,而是按“充电间隔”来聚合数据。

核心亮点解析

== 导入步骤 ==

  • 打开 Grafana (http://你的IP:3000)。
  • 输入账号密码(默认 admin/admin)。
  • 在左侧菜单栏选择 Dashboards -> New -> Import。
  • 点击 Upload JSON file,选择下载好的 Analysis_Dashboard_Pro.json。
  • 选择数据源为 TeslaMate,点击 Import。
这款仪表盘采用了高级的 主从联动(Master-Detail) 设计,主要包含以下三大功能区:

1. 当前周期实时看板
仪表盘顶部直接展示了“距离上次充电后”的实时表现。

  • 关键指标: 你可以一眼看到当前的 行驶里程消耗电量 以及 平均能耗 (Wh/km)
  • 起始电量对比: 直观展示该周期开始时的电量,让你对剩余续航心中有数。
    在这里插入图片描述

2. 周期列表(Master 视图)
这是该仪表盘的精髓所在。中间的表格列出了你历史上的每一个“充电周期”(即两次充电之间的完整用车时段)。

  • 吸血鬼电量侦测: 表格中专门计算了 “停车耗电 (估计)”。如果你发现某一个周期的停车耗电异常飘红,说明那段时间可能频繁唤醒了车辆(如开启了哨兵模式或第三方APP唤醒)。
  • 交互体验: 点击列表中的任意一行,神奇的事情就会发生——下方的明细表会自动刷新,只显示该周期的详细数据。

3. 行程与停车明细(Detail 视图)
当你选中上方的一个周期后,底部的“行程明细表”会详细复盘那段时间发生的每一件事。

  • 无缝的时间轴: 它将 “🚗 行驶”“🅿️ 停车” 事件穿插排列,真实还原用车场景。
  • 环境影响分析: 每一段行程都记录了 室外温度车内温度(始/终)。通过对比,你能清晰看到开空调对短途能耗的巨大影响。
  • 位置追踪: 详细记录了出发地和到达地,配合停车时长,完美回忆当时的用车轨迹。
如何使用
  1. 在 Grafana 中导入本教程提供的 Drive_Details_CN.json 文件。
  2. 打开仪表盘,你会看到历史周期列表。
  3. 点击列表左侧的“👀”图标或整行数据,下方的明细表即会联动展示该周期的具体行程。

在这里插入图片描述

7.2 系统更新

TeslaMate 更新非常活跃,带来了新功能和 API 修复。更新非常简单:

cd /volume1/docker/teslamate
docker-compose pull
docker-compose up -d

Docker 会自动下载最新镜像并重启服务,数据不会丢失(前提是你正确映射了 Volume)。


8. 结语与资源下载

通过这套系统,你不再只是一个驾驶者,更是一个数据的掌控者。每一次出行、每一次充电,都成为了你数字化资产的一部分。TeslaMate 不仅帮你记录回忆,更帮你科学用车。

相关资源下载:

  • 地图地址解析修正脚本(amap_geocoder.py)
  • 增强版数据分析仪表盘 (Drive_Details_CN.json)

请点击下载:跳转到资源下载

如果你在部署过程中遇到任何问题,欢迎在评论区留言交流。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐