尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
安全升级:新增独立的 PANEL_DATABASE_PASSWORD、管理员/只读角色与非 root 容器。旧部署请先阅读 升级与备份恢复说明。旧登录会话会失效;网页不再接受数据库恢复上传。默认 8080 仅监听本机,通过 SSH 隧道或 HTTPS 访问。 特斯拉车辆数据一体化自托管方案:TeslaMate(数据采集)+ TESLA Home 面板(可视化),一个 docker compose 全部搞定。 面板基于 TeslaMate 数据库构建:FastAPI + psycopg3 后端,ECharts + Leaflet 前端,只读访问 PostgreSQL。 在线演示(虚拟数据,点开即看): —— GitHub Pages 托管的演示页,可交互体验液态玻璃界面与分页切换动效(底部 Tab 栏支持点按与横向滑动选页)。自行部署后也可访问 /demo.html 打开同一演示页: 官方 App 侧重"控制车辆",TESLA Home 侧重"看懂车辆"——以下数据维度官方 App 没有或远不够细:檢視完整 README ↗
安全升级:新增独立的
PANEL_DATABASE_PASSWORD、管理员/只读角色与非 root 容器。旧部署请先阅读 升级与备份恢复说明。旧登录会话会失效;网页不再接受数据库恢复上传。默认 8080 仅监听本机,通过 SSH 隧道或 HTTPS 访问。
English | 中文
特斯拉车辆数据一体化自托管方案:TeslaMate(数据采集)+ TESLA Home 面板(可视化),一个 docker compose 全部搞定。
面板基于 TeslaMate 数据库构建:FastAPI + psycopg3 后端,ECharts + Leaflet 前端,只读访问 PostgreSQL。
在线演示(虚拟数据,点开即看):https://savior2016.github.io/tesgua/ —— GitHub Pages 托管的演示页,可交互体验液态玻璃界面与分页切换动效(底部 Tab 栏支持点按与横向滑动选页)。自行部署后也可访问 /demo.html 打开同一演示页:
官方 App 侧重"控制车辆",TESLA Home 侧重"看懂车辆"——以下数据维度官方 App 没有或远不够细:
面板模块
一体化部署
setup.sh 一键初始化(自动生成密钥与面板账号)前置:已安装 Docker 与 Compose v2 插件。
git clone https://github.com/Savior2016/tesgua.git
cd tesgua
./setup.sh
脚本会:生成随机加密密钥与数据库密码 → 让你设置面板账号密码 → (可选)配置域名启用自动 HTTPS → 构建镜像并启动全部服务。
启动后:
http://<服务器IP>:8080,用刚才设置的账号登录TeslaMate 通过 Tesla 官方 API 令牌连接车辆。整个过程在面板「个人中心」有实时状态指引:
http://<服务器IP>:4000,在登录页粘贴两个令牌并保存
ssh -L 4000:127.0.0.1:4000 用户@<服务器>,再访问 http://localhost:4000.env 里 TESLAMATE_BIND 改为 0.0.0.0 后 docker compose up -dscripts/update-map-data.sh(两者产物相同,日后更新同理)。令牌加密存储在你自己服务器的数据库里(ENCRYPTION_KEY 加密),不经过任何第三方。
面板顶栏「个人中心」→ 修改密码 / 添加账号 / 删除账号,即刻生效,无需改配置、无需重启。
账号存于
data/users.json(pbkdf2_sha256 哈希)。.env里的PANEL_USERS只在首次启动时播种,之后改它不再生效。
cp .env.example .env
# 编辑 .env:TESLAMATE_ENCRYPTION_KEY(可用 openssl rand -hex 32 生成)、
# POSTGRES_PASSWORD、PANEL_USERS
docker compose up -d --build
可选服务(profile):
docker compose --profile grafana up -d # TeslaMate 官方 Grafana 仪表盘(127.0.0.1:3000)
docker compose --profile https up -d # Caddy 自动 HTTPS,先复制 Caddyfile.example 为 Caddyfile 并改域名
cp Caddyfile.example Caddyfile,把 tesla.example.com 换成你的域名docker compose --profile https up -d,Caddy 自动签发并续期 Let's Encrypt 证书.env 把 VISUALIZER_BIND 改为 127.0.0.1(8080 不再直接对外),然后 docker compose --profile https up -d登录认证由面板应用层完成(与 Caddy 无关),改密码在个人中心自助完成。
git pull --tags # 面板升级:拉到最新代码/版本 tag
docker compose up -d --build # 重新构建面板镜像并滚动重启
# TeslaMate 升级:改 .env 的 TESLAMATE_VERSION(建议先备份数据库),然后
docker compose pull teslamate && docker compose up -d
| 变量 | 说明 |
|---|---|
TESLAMATE_ENCRYPTION_KEY | Tesla API 令牌加密密钥,首次生成后不要再改,否则已保存的令牌无法解密 |
POSTGRES_PASSWORD | 数据库密码 |
PANEL_USERS | 面板初始账号 user:pass(仅首次启动播种,之后用个人中心管理) |
TZ | 展示时区,默认 Asia/Shanghai |
VISUALIZER_BIND | 面板监听地址,默认 0.0.0.0(应用层有登录认证) |
TESLAMATE_BIND | TeslaMate 管理页监听地址,默认 127.0.0.1 |
GRAFANA_BIND | Grafana 监听地址,默认 127.0.0.1 |
TESLAMATE_VERSION 等 | 各镜像版本/标签 |
| 数据 | 位置 |
|---|---|
| 车辆遥测数据库 | docker 卷 teslamate_teslamate-db |
| 面板账号 / 充电费用 / 充电桩信息 / 矢量地图数据 | ./data/ |
| TeslaMate 数据导入目录 | ./import/ |
| HTTPS 证书 | docker 卷 teslamate-visualizer_caddy_data |
备份:docker exec tesla-home-database-1 pg_dump -U teslamate teslamate | gzip > backup.sql.gz,外加 data/ 目录。
一体化包的 docker 卷名与旧部署完全一致,数据原样保留:
teslamate/docker-compose.yml 里的 ENCRYPTION_KEY、DATABASE_PASS,和旧面板的 VISUALIZER_USERS.env,填入相同的 ENCRYPTION_KEY 和数据库密码(否则会话令牌无法解密、数据库认证失败)docker compose -f 旧teslamate目录/docker-compose.yml down 与旧面板项目 downdocker compose up -d --build(旧面板 data/ 目录整个复制过来可保留充电费用记录)Caddyfile.example 重新生成(不再含 basic_auth)本节面向被用户要求「帮我部署这个项目」的 AI 编程/运维助手(Claude Code、Cursor 等),按此流程可零人工干预完成部署。
架构认知:单 compose 项目(项目名 tesla-home)。visualizer(面板,本仓库源码构建)只读访问 database(PostgreSQL)的 TeslaMate 库;teslamate 负责采集并写入;mosquitto 是 TeslaMate 依赖的 MQTT broker;grafana/caddy 是可选 profile。容器间靠内部 DNS 别名(database、mosquitto)通信,不要改成 localhost。
部署步骤:
docker 与 docker compose version 可用;不可用时先装 Docker 官方源(不要用 snap 版)git clone 本仓库后优先运行 ./setup.sh(交互式);用户不在场时走手动流程:cp .env.example .env,用 openssl rand -hex 32 生成 TESLAMATE_ENCRYPTION_KEY、openssl rand -hex 16 生成 POSTGRES_PASSWORD,PANEL_USERS 设为 用户名:随机密码 并在最终回复里把密码告诉用户一次docker compose up -d --build;用 docker compose ps 确认 4 个容器 Up(database 显示 healthy)curl http://127.0.0.1:8080/api/health 返回 {"status":"ok"};curl -u 用户:密码 http://<IP>:8080/api/overview 返回 JSON(未授权 Tesla 前车辆字段为空属正常)ssh -L 4000:127.0.0.1:4000 隧道,或经用户同意后把 .env 的 TESLAMATE_BIND 改为 0.0.0.0cp Caddyfile.example Caddyfile 替换域名,docker compose --profile https up -d,确认 80/443 已放行关键约束(踩坑点):
TESLAMATE_ENCRYPTION_KEY 一旦保存过 Tesla 令牌就不能再改,否则令牌无法解密只能重新授权private.tokens 表(注意是 private schema),授权状态可查该表判断.env、Caddyfile、data/、import/ 均已 gitignore,任何情况下不要提交;写文档/示例时用 CHANGE_ME 占位teslamate_teslamate-db 等是刻意固定的(兼容旧分立部署),不要改名验证清单(部署完成后逐项确认):
docker compose ps # 全部 Up,database healthy
curl -s http://127.0.0.1:8080/api/health # {"status":"ok"}
curl -s -u '用户:密码' http://127.0.0.1:8080/api/account/status | python3 -m json.tool
# steps.authorized=false 是授权前正常状态;用户完成 Tesla 授权后应变 true
# 改完 app/ 下源码后重新构建并重启面板:
docker compose up -d --build visualizer
# 发布版本(英文 commit):
git tag v1.x.y && git push origin v1.x.y
scripts/update-map-data.sh 更新),深浅色主题均为原生配色,国内移动网络下也能出图特斯呱是个人业余项目,完全免费、数据自托管。如果它帮你看懂了爱车的数据,欢迎请作者喝杯咖啡 ☕
微信收款码(支付宝收款码后补)
本项目采用 PolyForm Noncommercial 1.0.0 协议(见 LICENSE):
如需商业授权,请联系作者。