本帖最后由 Emniroll 于 2024-9-9 01:10 编辑
前言:
时隔多年回来折腾HA,发现Tesla的车辆接入已经天翻地覆,过往的方法都已经不再可用,新的方法又复杂异常难以找到教程。终于在折腾了好几天之后,终于搞定。早些年第一次成功接入也是在论坛找的教程,于是决定先在此处开个坑,后续会慢慢更新具体的方法。
注意!!!该教程使用Tesla Custom Integration进行接入,不包含TeslaMate的相关教程。
由于涉及到的内容较多,此教程对新手及非程序员可能极不友好,请结合ChatGPT等工具进行配合使用。
内容繁多,会先提供流程供大家参考,后续按照流程进行教程补充。评论区有更多疑问的部分我会优先完成教程。
我提供的方法未必是最优解决方法也更不是唯一解决方法,请根据自己情况进行调整
需要准备的东西:
- 一台有443端口的服务器(最好在外,否则需要额外解决网络问题)
- 一个域名(最好托管在Cloudflare)
- 解决问题的耐心
- 一辆Tesla
流程:
1.服务器/域名 与NginxProxyManager配置
1.1 解析域名到服务器等基础设置
1.2 NginxProxyManager配置SSL证书及反向代理
2.Tesla官网的开发者注册与APP配置
3.Tesla Vehicle Command SDK的安装
4.两组SSL密钥/证书的生成与配置
4.1 Tesla校验用证书的生成
4.2 Http Proxy服务器用证书的生成
5.使用Python脚本进行注册与测试
6.HA中接入
正式教程:
Tesla已经禁用了原来的api调用方式,如今开放了fleet-api用于在官方注册后的第三方开发者来进行调用。
简单来说我们的流程变成了,首先变成一个开发者,再接入HA。由于需要用到443端口,所以HA中的add on我们也无法使用。
1.1 解析域名到服务器等基础设置
由于官方注册需要用到443端口进行校验证书,并且后续的每一次操作都需要它。所以你需要一台24小时不下线的云服务器。
关于服务器我个人推荐在搬瓦工找一找最便宜的国外服务器就好,我用的是最低的配置,一年只需要8 90元。而域名则建议买一个一级域名转到Cloudflare。
不过实际上后续使用二级域名也是完全没有问题的,所以如果你已经有一个域名了,那就直接使用二级域名就好。
添加一个A记录的通配符解析到你的服务器上
#注意,有人提到过Cloudflare的安全设置可能会影响到api的连通,未经证实
1.2 NginxProxyManager配置SSL证书及反向代理
通过你的域名连上服务器之后,你需要安装docker和NPM。下面的教程来自GPT。
安装Docker和Docker Compose:
打开终端并运行以下命令以更新包列表并安装Docker和Docker Compose:
<font color="#000000"><font face="微软雅黑" color="#000000">sudo apt update
sudo apt install docker.io docker-compose -y</font></font>
创建一个Docker Compose文件: 创建一个目录来存放NGINX Proxy Manager的配置和数据文件:
<font color="#000000"><font face="微软雅黑" color="#000000">mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager</font></font>
在该目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容:
<font color="#000000"><font face="微软雅黑" color="#000000">version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'mysql:5.7'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql</font></font>
启动NGINX Proxy Manager:在 docker-compose.yml 文件所在的目录中,运行以下命令以启动服务:
<font color="#000000"><font face="微软雅黑" color="#000000">sudo docker-compose up -d</font></font>
访问NGINX Proxy Manager管理界面: 在浏览器中访问 http://<你的服务器IP>:81,初始默认登录信息如下:
电子邮件: [email protected]
密码: changeme
然后进行密码修改,进入即可
进入之后,首先获取一个自动更新的SSL证书,这里需要你填入你的域名和你cloudflare中的DNS API令牌。具体方法可以网上查询,就不在这里展开。
然后如图添加Proxy Host,用来提供给Tesla官方用来证书校验。端口号填一个不用的即可,由于在docker内,几乎所有端口号都可以填。
2.Tesla官网的开发者注册与APP配置
首先,你需要在 https://developer.tesla.cn/ 完成你的账号注册。建议使用一个与车辆持有者本身不同的账号。
在绑定了一系列验证之后,你应该会进入到如下界面。然后新增一个Application
新建一个,并且按照下方图片上的内容进行填写,Redirect Url并不需要实际存在,如图填写就好。
3.Tesla Vehicle Command SDK的安装
Github: Vehicle Command
基本上就是要安装配置这个项目,它用来中转我们发出的指令。注意是安装在服务器上,而且只完成如图的配置内容,后面的配置我们后续再完成,实际上非常简单,只需要安装好环境编译一下就好了。
#鸽了好久继续来更新
4.两组SSL密钥/证书的生成与配置
注意,我们一共需要两组SSL证书。一组用来与Tesla官方服务器通讯,一组用来运行自己的http proxy。(注:这部分因为时间有些久远,可能出现错误,有问题请与我联系)
第一组:
openssl ecparam -genkey -name prime256v1 -noout > tesla_private.pem
openssl ecparam -pubout -in tesla_private.pem -out tesla_public.pem
然后我们需要复制这个tesla_public.pem到nginx proxy manager可以访问到的地址,即之前docker中的data文件夹,然后重命名为 com.tesla.3p.public-key.pem这是需要给tesla官网验证的,需要在访问你的域名的时候可以访问到。需要在一开始配置你提交给tesla的域名里面新增如下的配置
location /.well-known/appspecific/com.tesla.3p.public-key.pem {
alias /data/com.tesla.3p.public-key.pem;
}
然后你尝试访问一下你的域名 然后接/data/com.tesla.3p.public-key.pem,如果配置成功可以下载到你的公钥,那这一组就完成了
第二组:这一组是用来给自己起的http proxy服务器用的,注意修改成自己想要调用的域名,比方说我用的是 tesla-command.xxxx.site,与之前在Tesla官网备案的不是同一个!
openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:secp521r1 -pkeyopt ec_param_enc:named_curve -subj '/CN=tesla-command.xxxxx.site' -keyout key.pem -out cert.pem -sha256 -days 3650 -addext "extendedKeyUsage = serverAuth" -addext "keyUsage = digitalSignature, keyCertSign, keyAgreement"
|