让 Tesla 主动上报数据到 Fleet Telemetry,需要将网站的公钥作为虚拟钥匙添加到车机中;需要通过 API 下发配置,因此需要创建一个开发者账号,详细操作可以参考 什么是 Fleet API

一、申请开发者账号和应用

创建开发者账号需要 Tesla 账号设置中绑定邮箱,并且开启两步验证;然后访问 Tesla Developer 创建应用,输入应用名称和说明等信息

Tesla 开发者控制台创建应用界面

OAuth 授权类型选择 “授权码和机器对机器”,然后添加允许的源 URL、重定向 URL 和返回的 URL,这里的 URL 需要和后面部署的 Fleet Telemetry 服务器地址一致

Tesla 开发者控制台创建应用并配置 OAuth 授权

选择权限范围,可以直接选择所有的权限

Tesla Fleet API 创建应用界面显示权限范围选择

创建成功后会得到 Client ID 和 Client Secret,需要保存下来,后续获取 Token 需要使用

二、生成公钥/私钥对

需要生成一个公钥/私钥对,公钥需要托管在网站上让特斯拉访问,用于验证域名所有权;私钥用于通过 tesla-http-proxy 向车辆发送配置指令

  • 生成私钥
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
  • 生成公钥
openssl ec -in private-key.pem -pubout -out public-key.pem

三、托管公钥

然后需要将公钥托管在网站的 /.well-known/appspecific/ 路径下,确保可以通过 https://fleet.example.com/.well-known/appspecific/com.tesla.3p.public-key.pem 访问到公钥文件;可以使用 Caddy 进行托管,关于 Caddy 的配置可以参考 阿里云服务器使用 Caddy 和 ZeroSSL 提供的 IP 证书为服务开启 HTTPS

需要将 public-key.pem 文件复制到 static/com.tesla.3p.public-key.pem,然后挂载到 Caddy 的 /var/www/html/.well-known/appspecific/ 目录下

  • docker-compose.yaml
services:
  caddy:
    image: caddy
    container_name: caddy
    hostname: caddy
    ports:
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./certs:/certs # Certbot 生成的证书
      - ./static:/var/www/html/.well-known/appspecific/:ro # 用于托管公钥
    restart: unless-stopped
  • Caddyfile

创建 Caddyfile 文件,内容如下:

fleet.example.com {
    # 这里的证书就是 Certbot 申请的证书
    tls /certs/fullchain.pem /certs/privkey.pem

    # 挂载的目录
    root * /var/www/html

    route {
        # 处理特定文件
        handle /.well-known/appspecific/* {
            file_server
        }
    }
}

完整的目录结构如下:

.
├── Caddyfile
├── certs
│   ├── fullchain.pem
│   └── privkey.pem
├── docker-compose.yaml
└── static
    └── com.tesla.3p.public-key.pem

启动容器,然后通过浏览器访问 https://fleet.example.com/.well-known/appspecific/com.tesla.3p.public-key.pem,可以下载到公钥说明托管成功

四、虚拟密钥添加到车辆

当公钥托管成功之后,就可以访问 https://www.tesla.com/_ak/fleet.example.com,将虚拟密钥添加到车辆,用于后续访问车辆信息、通信等;访问该链接后,通过页面打开 Tesla App,然后选择对应的车辆,添加虚拟钥匙;添加成功后,车辆的钥匙中会出现 fleet.example.com 虚拟钥匙

Tesla App 添加 fleet.example.com 虚拟钥匙界面

参考文档