「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器

图片[1]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云

TeslaMate 是一款适用于您的特斯拉且功能强大的自托管数据记录器。

  • 用 Elixir 语言编写
  • 数据存储在 Postgres 数据库中
  • 使用 Grafana 进行可视化和数据分析
  • 车辆数据发布到本地 MQTT Broker

强烈推荐使用云服务器部署,稳定的同时能够通过 SSH 升级 TeslaMate 和备份、迁移数据。推荐使用京东云(点击购买),618 爆款云主机低至 50元/年,便宜、好用、稳定。

图片[2]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
京东云2024年618活动

1. 主要特点:

1.1 仪表板

图片[3]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
Web 界面

1.1.1 驾驶详情

1.1.2 充电统计

图片[6]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
充电统计

1.1.3 驾驶统计

图片[7]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
驾驶统计

1.1.4 驾驶记录

图片[8]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
驾驶详情

1.1.5 能耗

图片[9]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
能耗

1.1.6 车辆状态

图片[10]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
车辆状态

1.1.7 充电详情

图片[11]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
充电详情

1.1.8 电池充电与使用记录

图片[12]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
电池充电与使用记录

1.1.9 电池静置耗电(Vampire Drain)情况

图片[13]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
电池静置耗电(Vampire Drain)情况

1.1.10 预估 100% 续航里程续航变化(电池退化)

图片[14]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
预估续航变化

1.1.11 概览

图片[15]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
概览

1.1.12 OTA 更新记录

图片[16]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
OTA 更新记录

1.1.13 终生驾驶地图

图片[17]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
终生驾驶地图

1.1.14 车辆“足迹”

图片[18]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
车辆“足迹”

1.1.15 电池健康

图片[19]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
电池健康

1.2 常规

  • 高精度驱动数据记录
  • 车辆静置时没有额外的耗电:车辆会尽快休眠
  • 自动地址查找
  • 轻松集成到家庭助理中(通过MQTT)
  • 轻松集成到 Node-Red 和 Telegram 中(通过 MQTT)
  • 用于创建自定义位置的地理围栏功能
  • 每个 Tesla 帐户支持多辆车
  • 收费成本跟踪
  • 从 TeslaFi 和 tesla-apiscraper 导入

本次教程基于 Red Hat Enterprise Linux 系统,需要 Docker 环境支持,你也可以选择 1Panel、BTPanel 等面板快速部署,关于上述几项系统及环境安装配置请参阅:

图片[20]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云

2. TeslaMate 部署(高级/推荐)

本节使用 Traefik、Let's Encrypt 和 HTTP Basic Auth 进行高级安装,强烈推荐使用此方法!

如果您希望在互联网上公开 TeslaMate,强烈建议您保护 Web 界面并仅允许使用密码访问 Grafana。本指南提供了与基本安装不同的docker-compose.yml,具体表现在以下几个方面:

  • TeslaMate 和 Grafana 这两个可公开访问的服务都位于终止 HTTPS 流量的反向代理 (Traefik) 后面
  • TeslaMate 服务受 HTTP 基本身份验证保护
  • 自定义配置保存在单独的文件中.env
  • Traefik 会自动获取 Let's Encrypt 证书
  • Grafana 配置为需要登录

请注意,这只是如何在更高级的场景中使用 TeslaMate 的一个示例。根据您的用例,您可能需要进行一些调整,主要是对 traefik 配置进行调整。有关详细信息,请参阅 traefik 文档

2.1 要求

  • 例如,一个公共 FQDN(在下面的示例中替换您的域名)teslamate.giscloud.com

2.2 准备

创建以下三个文件:

 2.2.1 docker-compose.yml

services:
  teslamate:
    image: ccr.ccs.tencentyun.com/xlab/teslamate:latest
    restart: always
    depends_on:
      - database
    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
    labels:
      traefik.enable: "true"
      traefik.port: "4000"
      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
      traefik.http.middlewares.teslamate-auth.basicauth.realm: "teslamate"
      traefik.http.middlewares.teslamate-auth.basicauth.usersfile: "/auth/.htpasswd"
      traefik.http.routers.teslamate-insecure.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.teslamate-insecure.middlewares: "redirect"
      traefik.http.routers.teslamate-ws.rule: "Host(`${FQDN_TM}`) && Path(`/live/websocket`)"
      traefik.http.routers.teslamate-ws.entrypoints: "websecure"
      traefik.http.routers.teslamate-ws.tls: ""
      traefik.http.routers.teslamate.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.teslamate.middlewares: "teslamate-auth"
      traefik.http.routers.teslamate.entrypoints: "websecure"
      traefik.http.routers.teslamate.tls.certresolver: "tmhttpchallenge"
    cap_drop:
      - ALL

  database:
    image: ccr.ccs.tencentyun.com/xlab/postgres:15.4
    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: ccr.ccs.tencentyun.com/xlab/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_ANONYMOUS_ENABLED=false
      - GF_SERVER_DOMAIN=${FQDN_TM}
      - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana
      - GF_SERVER_SERVE_FROM_SUB_PATH=true

    volumes:
      - teslamate-grafana-data:/var/lib/grafana
    labels:
      traefik.enable: "true"
      traefik.port: "3000"
      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
      traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.grafana-insecure.middlewares: "redirect"
      traefik.http.routers.grafana.rule: "Host(`${FQDN_TM}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))"
      traefik.http.routers.grafana.entrypoints: "websecure"
      traefik.http.routers.grafana.tls.certresolver: "tmhttpchallenge"

  mosquitto:
    image: ccr.ccs.tencentyun.com/xlab/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

  proxy:
    image: ccr.ccs.tencentyun.com/xlab/traefik:v2.7
    restart: always
    command:
      - "--global.sendAnonymousUsage=false"
      - "--providers.docker"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.tmhttpchallenge.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.tmhttpchallenge.acme.storage=/etc/acme/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./.htpasswd:/auth/.htpasswd
      - ./acme/:/etc/acme/
      - /var/run/docker.sock:/var/run/docker.sock:ro

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

如果你希望使用中文镜像,请将以下两个镜像替换:

  teslamate:
    image: ccr.ccs.tencentyun.com/xlab/teslamate:latest

  grafana:
    image: ccr.ccs.tencentyun.com/dhuar/grafana:latest

替换为:

  teslamate:
    image: ccr.ccs.tencentyun.com/dhuar/teslamate:latest

  grafana:
    image: ccr.ccs.tencentyun.com/dhuar/grafana:v1.29.1

2.2.2 .env

TM_ENCRYPTION_KEY= #用于加密 Tesla API 令牌的安全密钥
TM_DB_USER=teslamate #数据库用户名
TM_DB_PASS= #数据库密码
TM_DB_NAME=teslamate #数据库名称

GRAFANA_USER=admin #Grafana 用户名
GRAFANA_PW=admin #Grafana 密码

FQDN_TM=teslamate.giscloud.com #解析域名

TM_TZ=Asia/Shanghai

[email protected]

2.2.3 .htpasswd

此文件包含用于访问 TeslaMate (Basic-auth) 的用户和密码。请注意,这不是您的 tesla.com 密码。如果您没有安装 Apache 工具,您可以在 Web 上生成它(例如 http://www.htaccesstools.com/htpasswd-generator/),请使用 BCrypt 加密模式。

teslamate:$2y$10$qmET5CsDh0kgIDYN04TmgOUOeNnDWmIa4FwunHCDsRpiL8vRRYvPW
图片[21]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云
示例 password:123456

2.3 部署

将以上 3 个文件上传到想要部署的目录,如 /home/docker/teslamate ,使用以下命令启动部署。

docker compose up -d
图片[22]-「Docker」TeslaMate 快速搭建指南丨Tesla 特斯拉自托管数据记录器-地理信息云

2.4 使用

  1. 打开 Web 界面 https://teslamate.giscloud.com
  2. 使用您的 Tesla 帐户登录(如何获取 tesla api token:见本文4.1)
  3. “设置”页中,更新“URL”字段。将“Web 应用”设置为 https://teslamate.giscloud.com,将“仪表板”设置为 https://teslamate.giscloud.com/grafana

如果您在登录 Grafana 时遇到困难,例如您无法使用简单设置中的凭据或存储在 .env 文件中的值登录,请使用以下命令重置管理员密码:

docker compose exec grafana grafana-cli admin reset-admin-password

3. TeslaMate 部署(简单)

本节档提供了在任何运行 Docker 的系统上安装 TeslaMate 的必要步骤。

仅当您在家庭网络上运行 TeslaMate 时,才建议使用此设置,否则您的 Tesla API 令牌可能会面临风险。如果您打算将 TeslaMate 直接暴露在互联网上,请参阅本节。

3.1 要求

  • Docker(如果您不熟悉 Docker,请参阅安装 Docker 和 Docker Compose
  • 一台始终在线的机器,以便 TeslaMate 可以持续获取数据
  • 计算机上至少有 1 GB 的 RAM 才能成功安装
  • 外部互联网接入,可以链接到 tesla.com

3.2 准备

创建一个包含以下内容的文件:docker-compose.yml

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY=secretkey #replace with a secure key to encrypt your Tesla API tokens
      - DATABASE_USER=teslamate
      - DATABASE_PASS=password #insert your secure database password!
      - 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=password #insert your secure database password!
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS=password #insert your secure database password!
      - 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:
  • 选择将用于加密您的 Tesla API 令牌的安全加密密钥(插入为 )。 ENCRYPTION_KEY
  • 选择您的安全数据库密码,并在每次出现 和 时插入该密码 DATABASE_PASSPOSTGRES_PASSWORD
  • 使用 .若要在后台运行容器,请添加以下标志: docker compose up-d

3.3 部署

将以上 3 个文件上传到想要部署的目录,如 /home/docker/teslamate ,使用以下命令启动部署。

docker compose up -d

3.4 使用

  • 在浏览器访问: http://ip:4000 (将ip替换成你的服务器ip),默认用户 admin (初始密码 admin) .
  • 设置您的 Tesla API tokens (见本文4.1)
  • 特斯拉数据面板可以访问 http://ip:3000 (将ip替换成你的服务器ip)

4 已知的问题

  1. 如何获取 tesla api token(特斯拉访问令牌)
    以下几个开源应用程序可用于获取您特斯拉帐号的访问令牌,你可以用电脑或手机浏览这个网页,安装App,然后登录获取令牌
  2. 电池健康度无数据
    • 首次使用需将电量充至 90%
  3. 为什么 Grafana 中没有显示消耗值?
    • Tesla API 不会返回行程的消耗值。为了仍然能够显示值,TeslaMate 根据记录的(充电)数据估算消耗量,至少需要两次充电才能显示第一个估计值,充电时间必须超过 10 分钟且充电状态 (SoC) 低于 95%。未来的每个充电会话将略微提高估计的准确性,该估计将追溯应用于所有数据。

5 家庭网络无法通过 ACME 获取 SSL 证书解决方案

修改以下代码:

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 共2条

请登录后发表评论