TeslaMate 使用指南

✍🏼 写于 2023年09月06日    💡 更新于 2023年09月08日
🖥  说明:介绍一下 TeslaMate 安装和使用过程中的一些问题。

💡本指南需要有一丁点的编程知识,知道什么是终端、什么是命令行。

💡本教程使用 Docker 安装 TeslaMate,如果你是在软路由环境,可能需要做一些额外操作如端口映射等,浏览器才能访问。而我的 Mac 电脑常年不关机,因此装在了 Mac 系统下的 Docker 上。

💡有点遗憾的是,TeslaMate 不能获取车辆的历史信息,因此你只能查看安装 TeslaMate 后的车辆行驶数据,且 TeslaMate 的服务不能关闭,否则无法记录到相关行驶数据。

前言

「TeslaMate」,简单翻译过来就是「特斯拉伴侣」,它是一款开源软件,可以获取车辆上报给特斯拉服务器的数据,然后使用 Grafana 这款 Web 数据可视化仪表盘工具显示出来。

TeslaMate 的仓库:

GitHub - adriankumpf/teslamate: A self-hosted data logger for your Tesla 🚘 A self-hosted data logger for your Tesla 🚘. Contribute to adriankumpf/teslamate development by creating an account on GitHub. https://github.com/adriankumpf/teslamate#teslamate

TeslaMate 的文档:

Docker install | TeslaMate This document provides the necessary steps for installation of TeslaMate on a any system that runs Docker. For a walkthrough that provides the necessary steps for manual installation see Manual Install. https://docs.teslamate.org/docs/installation/docker


特斯拉的工程师们会收集这些数据进行车辆的大数据分析、软件优化、电池充电优化等,而我们个人车主获取这些信息则可以更好的了解自己爱车的一些详细数据,如历史行程、每日行驶里程数、耗电情况、充电效率等。

之所以有这篇博文是因为 TeslaMate 的文档只说了如何安装(很简单),但是并没有告诉你安装完成后如何配置才能看到想要的仪表盘,而网上的一些内容农场靠着 SEO 技巧,排名靠前的也都是复制粘贴官网内容来的,要找到想要的信息是有点困难的,我目前没看到有任何一篇讲从如何安装到成品的文章,所以本文从头讲起。

先上一张成果图(用户可以自定义面板):

TeslaMate 成果图

一、安装 Docker

如开头所述,我使用 Docker 进行安装,TeslaMate 的文档要求是安装 Docker 和 Docker Compose(别管是什么,装就完了),而我们只需要安装 Docker Desktop 即可将这二者都装了,Docker Desktop 下载在这里:

Docker Desktop: The #1 Containerization Tool for Developers | Docker Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux. https://www.docker.com/products/docker-desktop/

安装后启动,然后随便找个目录(TeslaMate 的全部文件后续都会在这个目录,不要删除),将官方给的 docker-compose.yml 文件放入其中,我这里放到了 ~/Developer/Docker/TeslaMate 下,docker-compose.yml 内容如下:

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
49
50
51
52
53
54
55
56
57
58
version: "3"

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY= #设置 TeslaMate API 加密密码,注意等号后面不要有空格
      - DATABASE_USER=teslamate
      - DATABASE_PASS= #设置安全数据库密码,注意等号后面不要有空格
      - 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= #设置数据库密码,注意等号后面不要有空格
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS= #设置 grafana 的数据库密码,注意等号后面不要有空格
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
    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:

注意有些服务的密码设置是需要跟另一个服务密码一致的,所以我建议将上述的密码都设置成一样,省的麻烦。另外尤其需要注意的是 = 后面不要有空格。之后打开终端执行(每行复制到终端后按回车):

1
2
3
# 假设你放上述文件的目录为 ~/Developer/Docker/TeslaMate
cd ~/Developer/Docker/TeslaMate
docker compose up -d

完成后,打开 Docker Desktop,应该是这个样子:

安装完成后截图

二、登陆特斯拉账号授权

上一步完成无错误后,确保全部的服务都处于 Running 状态,(可以点击上面截图的各个服务名字查看对应 log,看有无类似与 error 之类的报错),在浏览器中打开 localhost:4000 后,发现会要求你输入 API Token 和 Refresh Token,这两个获取方式官方文档有写,在这里:

Frequently Asked Questions | TeslaMate How to generate your own tokens https://docs.teslamate.org/docs/faq/#how-to-generate-your-own-tokens

这里我使用第三种方式「Tesla Auth (macOS, Linux, Windows) 」点击以下链接查看适用于自己系统的版本,下载对应文件(是一个可执行文件):

GitHub - adriankumpf/tesla_auth: Securely generate API tokens for third-party access to your Tesla. Securely generate API tokens for third-party access to your Tesla. - GitHub - adriankumpf/tesla_auth: Securely generate API tokens for third-party access to your Tesla. https://github.com/adriankumpf/tesla_auth#download

直接双击打开(或者在终端打开)的话,如果是 MacOS 会提醒你该执行文件可能有危险,去 系统设置-隐私与安全性中,点击「仍要打开」即可。打开后会弹出一个窗口,让你登陆特斯拉账号,登陆完成后,页面会显示出特斯拉的 API Token 和 Refresh Token(截图我就不放了),将其复制到 localhost:4000 页面中的对应位置,即可成功登陆,登陆成功的界面是这样的:

TeslaMate 授权成功界面

到这就算是鉴权成功了,接下来配置 Grafana。

三、Grafana 基本概念

Grafana 是一款非常强大的 Web 数据可视化仪表盘工具,使用相对比较复杂,而且我没有研究它汉化的方法。好在 Tesla 的数据字段比较简单,也用不着汉化。这里首先简单介绍一下相关概念,方便后续的自定义。

Dashboard 和 Panel

Dashboard 就是一个显示各种数据的界面,可以显示不同的 Panel,Panel 就是一个查询数据库获得数据后,将数据可视化的一个个模块,如下每个红框就是一个 Panel:

N 个 Panel 组成了一个 Dashboard

Panel 可以在不同的 Dashboard 之间复制,如下:

Panel 复制

点击复制后,就可以在另一个 Dashboard 中粘贴,点击 Dashboard 右上角的 Add Panel 按钮(或者首次新建一个Dashboard 的时候)(如果没在上一步对 Panel 点 Copy,下图中的第四个「Paste from Clipboard 」就不会出现)就会出现下面的新建 Panel:

粘贴刚刚复制的 Panel

Variable(变量)和 JSON Model

Variable

每个 Dashboard 可以设置供 Panel 使用的 Variable,而 Panel 如何使用 Variable 呢?Panel 的数据是通过 SQL 查询查出来的,而 SQL 的部分语法是 grafana 的 SQL 模板语法,下面是查询海拔的 SQL 语法:

1
2
3
4
5
6
7
8
9
10
SELECT
	$__time(date),
	ROUND(convert_m(elevation, '$alternative_length_unit')) AS elevation_[[alternative_length_unit]]
FROM
	positions
WHERE
 car_id = $car_id AND
 $__timeFilter(date)
ORDER BY
	date ASC

其中的带 $ 符号的就是预设的 Variable,有些是内置的如 $__timeFilter,有些是自定义的如 $alternative_length_unit,自定义的变量就是 Dashboard 配置的 Variable。Dashboard 的 Variable 在 Dashboard 右上角的 Dashboard Setting 里配置:

Variable 配置

JSON Model

有时候你会发现,从一个 Dashboard 复制了一个 Panel 粘贴到新 Dashboard 后,Panel 并不能正常显示数据,就是因为你没有将源 Panel 用到的 Variable 从源 Dashboard 中复制到新 Dashboard 中,导致 SQL 语法报错,数据无法查询出来。但是如果 Dashboard 的 Variable 很多的话,一个一个复制又非常麻烦,怎么办呢?此时可以通过 JSON Model 来解决。

JSON Model 其实就是 Dashboard 配置的 JSON 格式,因此,你只需要复制某个 Dashboard 对应字段的内容,就可以复制相应的内容到目标 Dashboard。Variable 在 JSON Model 中对应的字段是 templating ,复制其内的 list 中的对应项到目标 Dashboard 的 JSON Model 对应 templating 字段的 list 字段,作为其项即可(记得点击 Save Changes 后再点击 Save dashboard):

直接复制对应 JSON

Grafana 还有很多其他复杂的功能,不过对于我们特斯拉数据可视化来说,了解这么多即可。

四、配置 Grafana

访问 localhost:3000 后首先需要登录,首次默认用户密码都是 admin ,首次登陆成功后会让你设置密码,设置后进入是这个界面:

Grafana 默认 Dashboard

这里,TeslaMate 已经给我们配置好了各种 Dashboard,点击左侧的这个地方可以打开文件夹查看文件夹目录下的各个 Dashboard:

查看 TeslaMate 预设的 Dashboard

各种 Dashboard

随便点开一个,如 Drive Stats,可以查看相应 Dashboard 中的各种 Panel:

Drive Stats Dashboard

但是我们肯定想将多个这些预设的 Dashboard 中的 Panel 按照我们的需要聚合到一个新的 Dashboard 中,这里就需要用到上一步「Grafana 概念」中的 复制 Panel、复制 Variable(复制 JSON Model)的操作,各位可以自己配置符合自己需求的 Dashboard。

五、其他

这里还有 Grafana 的其他一些使用问题,简单写一下。

配置 Panel 标题:

点击 Panel 上方的 Edit 后在右侧修改 Title 即可:

修改 Panel 标题

地图不显示:不多说,需要魔法上网环境。

设置自己的 Dashboard 为默认:

如图:

配置默认的 Dashboard

如何在 Dashboard 中,鼠标 Hover 其中一个 Panel 查看数据的时候,另一个 Panel 也对应显示相关时间点的数据?

这个场景比较常用的是,鼠标 Hover 在折线图 Panel 的驾驶信息上查看车速的时候,想要同步在另一个地图 Panel 上查看在地图上的对应位置。可以通过设置 Dashboard 来解决,下图设置为 第二个即可(默认是第一个):

安全性?:TeslaMate 是国外开源软件,安全性是可以保证的。

换机器如何迁移数据?:这个可以查看 TeslaMate 的文档,有详细说明。

公网如何访问 Grafana?:这就需要用到 DDNS 了,这个自行摸索。

究极提醒:修改 Panel 后记得点击右上角的 Save。

如何定时刷新 Dashboard:在 Dashboard 右上角可以设置刷新间隔,一般用来放到一个大的显示屏上,全天实时查看数据变化用的。

- EOF -
本文最先发布在: TeslaMate 使用指南 - Xheldon Blog