factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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):
如需商业授权,请联系作者。