Tesla Fleet API 連携アーキテクチャ図
Tesla

Model 3 API 実装メモ|Fleet API × tesla-http-proxy 構成

Gaming-Hub の Tesla ダッシュボードは、自宅の Model 3 から残量・充電・走行ログ・AI PLAN を出しています。製品レビューではなく、Fleet API と実装のメモです。同じことをやりたいエンジニア向けに、うちの構成とハマりどころを書きます。

前提: 非公式の Owner API ラッパーは使っていません。Tesla Fleet API で読み取り、tesla-http-proxy(vehicle-command)で署名付きコマンドを送ります。localhost だけでは partner 登録が通らないので、本番ドメインが必須です。

全体像

スタックは WordPress (PHP) + Docker 上の tesla-http-proxy + 本番ドメインの公開鍵です。

  • WordPress — ダッシュボード UI、OAuth コールバック、WP-Cron、Driving / Charge / ガソリン比較ログ
  • Fleet API クライアントinc/tesla-api.phpGaming_Hub_Tesla_Api
  • tesla-http-proxydocker composetesla/vehicle-command(署名コマンド専用)
  • /.well-known/appspecific/com.tesla.3p.public-key.pem — partner_accounts 用公開鍵
Browser → WordPress (PHP)
              ├─ OAuth refresh → Fleet vehicle_data   … ライブ読み取り
              ├─ POST command/* via tesla-http-proxy … 充電制御
              └─ AI PLAN cron (diff only, wake budget)

tesla-http-proxy → signed Fleet vehicle commands
production domain → /.well-known/.../public-key.pem

読み取りと書き込みでベース URL を分けています。読みは Fleet、書きは proxy。混ぜると unsigned で落ちます。

Fleet API — 読み取り

Fleet 読み取りと署名コマンドの二系統
読み取りは Fleet REST、書き込みは tesla-http-proxy — 経路を分離

developer.tesla.com でアプリを作り、Client ID / Secret と VIN を Customizer か .env に入れます。

  • TESLA_CLIENT_ID / TESLA_CLIENT_SECRET
  • TESLA_VEHICLE_VIN
  • TESLA_FLEET_API_BASE_URL — 日本は NA: https://fleet-api.prd.na.vn.cloud.tesla.com
  • TESLA_REDIRECT_URI/wp-json/gaming-hub/v1/tesla/oauth/callback(本番ドメイン)

トークンは fleet-auth.prd.vn.cloud.tesla.com で refresh。access token は transient、refresh token は option に保存します。

読み取りの中心は GET /api/1/vehicles/{vin}/vehicle_data です。正規化後の主なフィールド:

  • SOC / charge_state / charging_amps
  • odometer / speed / shift_state(走行判定)
  • cabin temp / tire pressures
  • asleep — スリープ時は API を送らず前回スナップショットを表示

partner_accounts と公開鍵

Fleet を使うには本番ドメインで公開鍵をホストし、Allowed Origins と同じドメインを Tesla に登録します。

https://<your-domain>/.well-known/appspecific/com.tesla.3p.public-key.pem

localhost だけでは vehicle_data が取れません。実装は gaming_hub_tesla_register_partner_account() / gaming_hub_tesla_verify_public_key_hosted() です。

tesla-http-proxy — 書き込み

充電コマンド(charge_start / charge_stop / set_charge_limit)は署名が必須です。うちは Docker の tesla-http-proxy に寄せています。

TESLA_COMMAND_PROXY_URL=https://tesla-http-proxy:4443

Gaming_Hub_Tesla_Api::send_vehicle_command() は proxy URL があるとベースを差し替え、TLS verify を切って内部通信します。車側には 仮想キー のペアリングが必要で、未ペアだと key_not_paired 系で落ちます。

AI PLAN との接続

inc/tesla-plan.php が LOOOP 単価と目標 SOC(平日おおよそ 80%、土曜朝に向けた上積み)から充電枠を組みます。WP-Cron は計画が変わったときだけコマンドを送り、自動 wake は日 4 回まで(手動 ON/OFF は制限なし)です。

ポーリング方針

vehicle_data 正規化とポーリング方針
vehicle_data → 位置除去 → model3 status → ダッシュボード / ログ

スリープを起こしすぎないことがポイントです。

  • 通常ポーリング: idle 15 分 / active 10 分
  • スリープ検知後: 30 分スキップ
  • API エラー後: 10 分スキップ
  • 最後の成功ステータスは最大 6 時間保持して UI に出す

位置スコープは任意です。付いていない/拒否済みなら gaming_hub_tesla_strip_location() で落とし、住所は保存しません。

ログとの接続

  • Driving Log — オドメーター差分 → km・電費・ガソリン比較節約円(tesla-gas-log.php
  • Charge Log — 自宅 / Supercharger セッション(tesla-charge-log.php
  • SOC ログ — 時間別 SOC を残し、AI PLAN チャートの過去帯を埋める

グラフと最新数字は Driving Log。購入・運用の話は Model 3 実測レビュー の方が向いています。

ハマったところ(再現用メモ)

  • リージョン — 日本アカウントは NA Fleet URL。EU/CN を叩くと失敗する
  • partner_accounts — 公開鍵未設置 / Allowed Origins 不一致だと vehicle_data 不可
  • localhost OAuth — 開発では refresh token を本番で取って持ち込む方が楽
  • unsigned command — proxy なしの command POST は拒否される
  • 仮想キー — ペアリング忘れが充電制御失敗の最頻原因
  • スコープ追加 — Tesla は前回許可を再利用するので、位置などを増やすときは「不足スコープ追加」か再認可が必要
  • wake 乱用 — 好奇心で毎分 poll しない。スリープ尊重がバッテリーと API の両方に効く

ディレクトリ早見表

wp-content/themes/gaming-hub/
  inc/tesla-api.php      … Fleet / proxy クライアント
  inc/tesla.php            … OAuth・ステータス正規化・公開鍵
  inc/tesla-plan.php       … AI PLAN・wake budget
  inc/tesla-gas-log.php    … 走行・ガソリン比較
  inc/tesla-charge-log.php … 充電セッション

tesla/                     … proxy 用鍵(git に秘密鍵を入れない)
docker-compose*.yml        … tesla-http-proxy サービス

まとめ

うちの構成は 読み取り = Fleet API書き込み = tesla-http-proxy 署名コマンド の二系統です。partner 公開鍵と仮想キーを本番で揃え、ポーリングはスリープ優先にしています。

ライブ状態は Tesla ダッシュボード、実装の参照はテーマ inc/tesla*.php を見てください。節約額や日常運用は Model 3 実測レビュー へ。

同種の実装をご依頼の方

この記事と同様の Web アプリ・API 連携・ダッシュボード のご相談は、ランサーズ からお問い合わせください。取引はランサーズ経由のみ対応しています。


ランサーズ Web制作・API実装パッケージ(ベーシック1.5万円 / スタンダード4.5万円 / プレミアム8万円)
料金プランの目安。画像タップでランサーズのパッケージ詳細へ。
プラン 料金(税込目安) 内容
ベーシック 15,000円 既存ページのテキスト・画像差し替え、CSSによる表示崩れ修正(1〜2箇所)
スタンダード 45,000円 新規1ページのコーディング・組み込み(PC/SP対応)、またはACFによるカスタム投稿1種(一覧・詳細)の設計
プレミアム 80,000円 複数ページ(3〜4ページ程度)の改修・コーディング(スライダー、タブ切り替え、ACF入力画面設計、問い合わせフォーム調整を含む)

ランサーズのパッケージ詳細・相談はこちら →

関連リンク