TeslaMate 简介
相较于传统燃油车,特斯拉提供了非常不一样的使用体验。驾驶层面,单踏板模式,自动辅助驾驶 EAP 和 FSD 等相信大家略有耳闻。都说特斯拉的车子是个大号的「电子产品」,除了车子是以电驱动,车子有许多花里胡哨的电子娱乐功能外。今天要给大家介绍的 TeslaMate,更能体现其电子产品气质。
TeslaMate 有什么功能
TeslaMate 可以记录并展示我们的行程信息(起点终点,距离,详细路线,海拔变化,速度变化,平均速度,电量变化,总耗电量,用电效率等),充电信息(加电量、费用、时长、充电速度),行程和充电报告,停车电力损耗,车辆状态历史,终生驾驶地图等。





TeslaMate 能做的事情还有许多,怎么样,是不是相当有趣而且强大呢?按本文一步步操作,你也可以拥有一个属于自己的行车日志记录分析工具。事不宜迟,马上开始。
选择适合自己的安装方式
在 TeslaMate 的官方文档中,有三种安装方式:
- 直接使用 Docker 安装且不做加密(适用于自建 NAS,此方法不适用于可被公网访问的服务器上)
- 使用 Docker 安装并加密访问(适用于可被公网访问的服务器)
- 使用 Docker 安装并加密访问,且使用 Apache2 分发(适用于可被公网访问的服务器,且服务器上可同时运行博客等其他应用)
对于自建 NAS,或对 Linux 系统不是很熟悉的非技术同学,可以选择前两种方式安装 TeslaMate。具体参考这篇文章:特斯拉神器TeslaMate一键安装,来了!
本文重点介绍第三种方式:使用 Apache2 分发,使用 let’s encrypt 申请免费域名证书启用 ssl,使用 Docker 安装并加密访问 TeslaMate
前期准备
- 准备一个可被公网访问的服务器,可在阿里云上购买。选择包年包月 1 核 2GB 内存即可,磁盘我选了 40GB 的,目前完全够用,后续可以扩容。系统选择 Ubuntu 22.04 64 位
- 进入阿里云控制台 – 云服务器 ECS – 进入刚购买的 ECS 实例 – 安全组 – 进入默认的安全组 – 在安全组规则 – 访问规则 – 入规则中 – 选择快速添加 – 添加 HTTP(80) 和 HTTPS(443) 两个端口,使得服务器能被公网访问
- 准备一个域名,同样可以在阿里云上购买,为了能在国内正常使用,需完成 ICP 备案
- 进入阿里云控制台 – 域名解析管理 – 为刚购买的域名添加两条 A 记录
- teslamate 记录,指向服务器 IP
- grafana 记录,指向服务器 IP
- 准备工作完成,我们得到了一台服务器,以及
teslamate.yourdomain.com和grafana.yourdomain.com两个指向此服务器的域名
安装和配置
- 访问阿里云工作台,进入 ECS 详情
- 远程连接 ECS,输入密码(首次访问时,密码会以短信形式发到手机上,可以自行修改)
- 输入
sudo su切换至管理员权限 - 执行
apt-get update更新 apt 下载源 - 安装并配置 apache2(参考:帮助文档)
- 执行
apt install apache2安装 apache2 - 执行
a2enmod proxy proxy_http proxy_wstunnel rewrite ssl启用以下 mod- proxy
- proxy_http
- proxy_wstunnel
- rewrite
- ssl
- 执行
systemctl restart apache2重启 apache2 - 执行
systemctl status apache2可查看 apaache2 状态
- 执行
- 安装并配置 certbot 获取 ssl 证书激活 https(参考:帮助文档)
- 执行
snap install core; sudo snap refresh core确保 snapd 版本最新 - 执行
snap install --classic certbot安装 certbot - 执行
ln -s /snap/bin/certbot /usr/bin/certbot来建立文件链接(类似快捷方式,但是修改会互相同步)来确保 certbot 能被运行 - 执行
certbot certonly --Apache获取证书(每三个月过一次期)- 执行过程中,需要输入自己的邮箱注册 let’s encrypt,输入域名来获取证书
- 命令需要执行两次,分别为 teslamate.yourdomain.com 和 grafana.yourdomain.com 获取证书(记得将 yourdoamin.com 部分替换成你的域名)
- 执行
- 安装并配置 docker 和 docker-compose(参考:帮助文档)
- 执行
curl -sSL https://get.docker.com | sh安装 docker - 执行
systemctl daemon-reload和systemctl start docker启动 docker - 执行
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose安装 docker-compose - 执行
chmod +x /usr/local/bin/docker-compose让 docker-compose 可执行
- 执行
- 安装并配置 teslamate(参考:帮助文档)
- 执行
mkdir /opt/teslamate生成目标文件夹 - 执行
cd /opt/teslamate跳转至目标文件夹 - 执行
vi docker-compose.yml新建文件 docker-compose.yml,插入以下内容:
- 执行
version: "3"
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- ENCRYPTION_KEY=${TM_ENCRYPTION_KEY}
- DATABASE_USER=${TM_DB_USER}
- DATABASE_PASS=${TM_DB_PASS}
- DATABASE_NAME=${TM_DB_NAME}
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- VIRTUAL_HOST=${FQDN_TM}
- CHECK_ORIGIN=true
- TZ=${TM_TZ}
volumes:
- ./import:/opt/app/import
ports:
- 127.0.0.1:4000:4000
cap_drop:
- all
database:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=${TM_DB_USER}
- POSTGRES_PASSWORD=${TM_DB_PASS}
- POSTGRES_DB=${TM_DB_NAME}
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=${TM_DB_USER}
- DATABASE_PASS=${TM_DB_PASS}
- DATABASE_NAME=${TM_DB_NAME}
- DATABASE_HOST=database
- GRAFANA_PASSWD=${GRAFANA_PW}
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PW}
- GF_AUTH_BASIC_ENABLED=true
- GF_AUTH_ANONYMOUS_ENABLED=false
- GF_SERVER_ROOT_URL=https://${FQDN_GRAFANA}
ports:
- 127.0.0.1:3000:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
ports:
- 127.0.0.1:1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:
- 插入完成后,按 esc 退出编辑模式,输入
:wq保存文件并退出 vim 编辑器 - 执行
vi .env新建文件 .env,插入以下内容。记得将里头所有带 # 号的内容替换成你自己的内容
TM_ENCRYPTION_KEY= #your_encrypt_key TM_DB_USER=teslamate TM_DB_PASS= #your_pw TM_DB_NAME=teslamate GRAFANA_USER=admin GRAFANA_PW=admin FQDN_GRAFANA= #grafana.yourdomain.com FQDN_TM= #teslamate.yourdomain.com TM_TZ=Asia/Shanghai LETSENCRYPT_EMAIL= #your@email.com
- 插入完成后,按 esc 退出编辑模式,输入
:wq保存文件并退出 vim 编辑器 - 执行
vi /etc/apache2/sites-available/teslamate.conf新建文件 teslamate.conf,插入以下内容。记得将第一行里的 yourdomain.com 替换成你的域名:
Define MYDOMAIN yourdomain.com
Define LOG access.teslamate.log
<VirtualHost *:80>
ProxyPreserveHost On
ServerName teslamate.${MYDOMAIN}
CustomLog /var/log/apache2/${LOG} combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =teslamate.${MYDOMAIN}
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ServerName grafana.${MYDOMAIN}
CustomLog /var/log/apache2/${LOG} combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =grafana.${MYDOMAIN}
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ProxyPreserveHost On
ServerName teslamate.${MYDOMAIN}
ProxyPass /live/websocket ws://127.0.0.1:4000/live/websocket
ProxyPassReverse /live/websocket ws://127.0.0.1:4000/live/websocket
ProxyPass / http://127.0.0.1:4000/
ProxyPassReverse / http://127.0.0.1:4000/
CustomLog /var/log/apache2/${LOG} combined
<Proxy *>
Authtype Basic
Authname "Password Required"
AuthUserFile /etc/apache2/.htpasswd
<RequireAny>
<RequireAll>
Require expr %{REQUEST_URI} =~ m#^/live/websocket.*#
</RequireAll>
Require valid-user
</RequireAny>
</Proxy>
SSLCertificateFile /etc/letsencrypt/live/teslamate.${MYDOMAIN}/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/teslamate.${MYDOMAIN}/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ProxyPreserveHost On
ServerName grafana.${MYDOMAIN}
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
CustomLog /var/log/apache2/${LOG} combined
SSLCertificateFile /etc/letsencrypt/live/grafana.${MYDOMAIN}/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/grafana.${MYDOMAIN}/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
- 插入完成后,按 esc 退出编辑模式,输入
:wq保存文件并退出 vim 编辑器 - 由于服务器可被公网访问,为了防止隐私泄露,需要启用账户密码登录。我们利用以下网站来生成账户密码的密文:https://hostingcanada.org/htpasswd-generator/
- 访问上述网站,输入你喜欢的用户名和密码,注意模式 (Mode) 要选 *BCrypt,点击 Create 按钮即可。接下来的步骤中,需要复制最上面的那行文本,进行输入。
- 执行
vi /etc/apache2/.htpasswd在目标文件夹新建文件 .htpasswd 用于存放刚才生成的登录账密密文,如:
User:$2y$10$eZEZEZXvnhc7HkYEPjWiIuqXiZ0c9y5cqH58KfgP3xbvwSvUMCL4C
- 执行
a2ensite teslamate启动 teslamate 的 vhost - 执行
systemctl reload apache2重载 apache2 - 执行
docker-compose pull更新 docker 应用 - 执行
docker-compose up -d启动 docker 应用
等待应用安装和启动后,可访问 https://teslamate.yourdomain.com 来访问 TeslaMate,输入设定的账号密码即可登录。首次访问时,会需要绑定你的 Tesla 账号 token 以获取车辆数据,你可以通过以下方式获取自己的 token:Tesla Auth (macOS, Linux, Windows)。获取 token 后,对应输入即可:

完成 token 输入后,即可进入 TeslaMate 主页,点击导航右侧「设置」,拉到底部,输入 URLs
- Web 应用程序处,输入:https://teslamate.yourdomain.com
- 控制台处,输入:https://grafana.yourdomain.com
- 记得将 yourdomain.com 替换成你的域名
设置完成后,导航右侧会出现「控制台」选项,点击便进入 Grafana

首次访问 Grafana 时,会提示需要登录,默认的账户密码是 admin/admin,首次登录后可修改密码,记得修改。

好了,到这里,所有的配置已经完成,你也拥有了一个自己专属的行车日志记录分析工具。Enjoy!
