Tesla 开发者 API 指南:通过Http发送命令

news/2024/9/18 9:04:12/文章来源:https://www.cnblogs.com/densen2014/p/18377976

前言

特斯拉提供两种与汽车通信的方式。一种是使用 API 通过互联网,另一种是使用 BLE 连接。

特斯拉现在只能接受车辆命令 SDK (vehicle command SDK)方式发送命令,该 SDK 使用 Http-Proxy 服务器将命令转发给车辆。除了验证 oAuth 令牌之外,特斯拉正在转向一种更安全的方式将命令传递给汽车.

需要注意的是,网络API会有一点延时,比 BLE 方式稍微慢一点.

先决条件

  1. Golang 已安装
  2. 在 Tesla 门户注册第三方应用时生成的公钥和私钥可用
  3. 有效的 Tesla 用户凭证,用于生成访问令牌

go 环境搭建自行搜索教程

注意:本工具虽然标记只能运行于 mac 或者 linux, 但是win下也是能运行的,只是官方没有技术支援而以。

vin码就是车架识别号,类似 7ABCGDEE123ABC555。 在前玻璃地下那里能看到,手机app也能找到。以下用 {yourvin} 代替,实际替换为你自己的字符串,{ } 这两个符号也去掉。

1. 克隆项目到本地

https://github.com/teslamotors/vehicle-command.git

2. 项目根目录下执行命令

go get ./...
go build ./...
go install ./...
cd cmd
cd tesla-http-proxy 
go build 

3. 生成密钥

为了演示方便,直接就在当前目录下建立密钥文件

生成私钥和公钥

openssl req -x509 -nodes -newkey ec \
-pkeyopt ec_paramgen_curve:secp521r1 \
-pkeyopt ec_param_enc:named_curve \
-subj '/CN=localhost' \
-keyout key.pem -out cert.pem -sha256 -days 3650 \
-addext "extendedKeyUsage = serverAuth" \
-addext "keyUsage = digitalSignature, keyCertSign, keyAgreement"

key.pem是私钥文件。cert.pem 是TLS证书链文件

3. 启动 HTTP 代理服务器

private.pem 是在使用 tesla 注册第三方应用程序时生成的私钥

./tesla-http-proxy -tls-key key.pem -key-file private.pem -cert cert.pem -port 443 -verbose

4. 测试闪灯命令

{AuthorizationToken} 来源于文章注册第三方应用程序生成的 Token, 类似于 eyJhbGci...lecxsFTYOE3n3w

curl
--cacert cert.pem \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer {AuthorizationToken}" \
--data '{}' \
"https://localhost:443/api/1/vehicles/7SAYGDEE2PA110666/command/flash_lights"

更多

  1. Tesla 开发者 API 指南:注册开发者账号
  2. Tesla 开发者 API 指南:BLE 发送车辆命令
  3. Tesla 开发者 API 指南:通过Http发送命令
  4. Tesla 开发者 API 指南:Tesla Fleet API

参考资料

https://shankarkumarasamy.blog/2024/01/28/tesla-developer-api-guide-ble-key-pair-auth-and-vehicle-commands-part-3/

https://github.com/teslamotors/vehicle-command/blob/main/README.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786641.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SFF806A-ASEMI无人机专用SFF806A

SFF806A-ASEMI无人机专用SFF806A编辑:ll SFF806A-ASEMI无人机专用SFF806A 型号:SFF806A 品牌:ASEMI 封装:ITO-220AB 批号:最新 最大平均正向电流(IF):8A 最大循环峰值反向电压(VRRM):600V 最大正向电压(VF):0.95V~0.90V 工作温度:-65C~175C 反向恢复时间:35ns …

博客建站7 - hexo博客独立服务器如何自动部署?

1. 本网站的系统架构 2. 安装git 3. 配置git用户3.1. 为什么要创建git用户 3.2. 创建git用户 3.3. 设置git用户的密码 3.4. 创建公钥-私钥对 3.5. 服务器配置公钥4. hexo配置自动化部署4.1. 配置Git仓库 4.2. hexo站点配置1. 本网站的系统架构网站示例: sunlogging.com 服务器…

RE入门第二天---RC4算法

一.RC4加密简介 RC4(Rivest Cipher 4)是一种流加密算法,由罗纳德李维斯特(Ron Rivest)在1987年开发。RC4算法的核心思想是利用伪随机数生成器(PRNG)和密钥共同生成一个密钥流,该密钥流与明文进行异或运算得到密文。 在RC4算法中,密钥流由两部分组成:密钥调度算法(KS…

ThreeJS Shader的效果样例雷达图和大气层(二)

一、雷达图实现原理:图中是一个旋转的渐变扇形,可以通过先实现一个扇形、然后再实现一个渐变扇形,最后再将扇形旋转来达到最终效果 1. 实现一个夹角为O的扇形,已X轴正方向为单位向量M,UV点到(0,0)形成向量N,通过M和N的点乘就可以得到一个夹角,然后判断角度小于O就可以了…

sql server导入mysql,使用工具SQLyog

概述 需要将sql server的数据导入到mysql中,由于2种数据库存在各种差异,比如表字段类型就有很多不同,因此需要工具来实现。 这里使用SQLyog来实现。SQLyog安装 安装过程参考文档:https://blog.csdn.net/Sunshine_liang1/article/details/84400820 注意:版本不能太低,必须…

PyCharm debug collecting data...

用PyCharm调试时变量实现不出来,一直显示Collecting data...:解决的办法是File-->Settings-->Python Debugger,选中Gevent compatible:问题顺利解决,变量很快就出来了:

进度报告12

(1)接口 创建接口:接口只能有成员变量和方法,方法默认是抽象接口用处:弥补单继承,面向接口编程可以灵活切换各种需求的实现

kubernetes学习笔记

基础环境系统镜像版本Centos 7.6 最小化最低运行环境基本要求内存及CPU:512MB / CPU 1核K3s版本v1.30.0+k3s1集群规划: 注意:需要对每台主机设置hostname,使用 hostnamectl set-hostname 主机名K8s-master 192.168.200.129 1C/1G K8s-worker1 192.168.200.130 2C/2G K8s-wo…

MURF860AC-ASEMI智能AI专用MURF860AC

MURF860AC-ASEMI智能AI专用MURF860AC编辑:ll MURF860AC-ASEMI智能AI专用MURF860AC 型号:MURF860AC 品牌:ASEMI 封装:TO-220AC 批号:最新 恢复时间:35ns 最大平均正向电流(IF):8A 最大循环峰值反向电压(VRRM):600V 最大正向电压(VF):0.95V~1.90V 工作温度:-65C~…

无线遥控技术研究433MHZ

1. 主流的有433MHZ的,主要用在遥控玩具上,使用芯片 EV1527,其中 1527是数据的编码格式,OOK是无线发射数据的通信方式,433M是载波频率。原理图如下,其中根据4个按键的组合,在TXD输出组合波形 TXD的输出波形如下: 方波需要发恶化电路发射出去,发射电路如下,那么理论上…

057、Vue3+TypeScript基础,页面通讯之父页面使用$refs修改子页面暴露的成员

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…

【Windows提权】windows环境变量滥用维权/提权

原创 掌控安全学院 - camer#include <windows.h> #include <stdio.h>int main(int argc, char *argv[]) {// 恶意程序wchar_t* Shell = L"C:\\Windows\\Temp\\shell.exe";HINSTANCE hInstance1 = ShellExecuteW(NULL, L"open", Shell, NULL, N…