電気自動車Tesla のAPI から取得できるデータを手軽にDWH へ連携できるコネクタを作ってみた:CData Sync

teslaapi

こんにちは。最近マーケティング周りの担当になりました元リードエンジニアの杉本です。でも相変わらずAPI 中毒をやっています。

気がつけば去年以下のような記事を書いていたのですが、その後も実はAPI 連携の実験を粛々と行っておりました。

Tesla の公式API をPostman から実行し、車両データの取得やエアコンの操作などを行ってみる

改めてこのTesla のAPI の魅力とはなんぞや? と考えると、なんといっても取得できるデータの種類の多さにあるでしょう。

現在の車両の位置(緯度経度)から走行中のスピード、バッテリー残量から現在の消費電力量、エアコンの設定温度から窓や鍵の開閉状態までテスラの本体からセンサーデータまで含めた大量のデータが取得できるようになっています。

ただ、このデータは「ログ」ではなく「今の状態」を取得するものなので、今までの走行データの傾向、例えば冬場と夏場ではバッテリーの消費動向はどのくらい違うのか? 充電頻度はどの程度なのか? というデータを分析するにはログとしてどこかに蓄積する必要があります。

もちろんRDBとかに蓄積するためにプログラミングしてもいいんですが、ここはもっと皆さんに手軽にできるようになってほしい! ということで、弊社CData で提供しているデータパイプラインツール「CData Sync」でSQL Server、MySQLなどの各種RDBやSnowflake・BigQueryといったDWH に手軽に連携できるコネクタとして開発してしまいました(※これは趣味です)

これを利用することで最終的にTableau などのBI ツールを使って、長距離ドライブの可視化などが行えちゃいます。以下は仙台から大宮までドライブした時の記録。

それでは実際に使い方を確認していきましょう。

必要なもの

とりあえず必要なものはAPI を試すための開発環境ですので、以下のリンクからテスラの電気自動車をデプロイ(?)しておきます。

https://www.tesla.com/ja_jp

ちなみに料金は今どきのクラウドライクな計算で考えるとモデル3の一番安いモデルで「123.5円/1時間あたり(5年ローン)」とリーズナブル? な雰囲気でご利用できます。

5年間止まらないAWS EC2 みたいなものと考えると、わかりやすいですね?(わかりやすい?)

あとはCData Sync と私が作成したテスラ用のコネクタを以下のURL からダウンロードしておきます。CData Sync は通常サーバーやクラウド環境で利用しますが、今回は手軽に試すことが目的なので、ローカルのデスクトップやノートPC に入れておく形でOK です。こちらは30日間のトライアルで試せます。

https://www.cdata.com/jp/sync/

Tesla 用のコネクタは以下からダウンロードできます。

https://cdatajbuilds.s3.ap-northeast-1.amazonaws.com/APIProfiles/Tesla.apip

このコネクタは「C:\ProgramData\CData\sync\profiles」のフォルダに配置しておきます。

合わせて任意のRDB やDWH を用意しておきましょう。

API のコストについて

このBlog を書くにあたって改めて調べていたら、正式なAPI のWebSite および費用のページが出ていました。私が最初に試したときはベータ的な扱いだったので、無償だったんですよね。

https://developer.tesla.com/


ただ機能は限定はあるものの、個人利用は費用なしで利用できる模様です。

以下、Google 翻訳をかけたものを掲載。

Tesla API の下準備

続いてTesla API を利用できるようにするための準備を進めていきます。これは以下のBlog 記事を参考にPostman からコールできるところまで実施しておくと良いでしょう。実はここが一番の関門かもしれませんね。

https://www.cdata.com/jp/blog/tesla-fleet-api-postman

コールバックURL の設定

アプリを作成したらリダイレクトURI にCData Sync 用のコールバックURL 「http://localhost:8181/src/oauth」を指定します。

Tesla API への接続の追加

それではCData Sync にログインして、Tesla API への接続を追加していきましょう。

「接続」→「+接続を追加」をクリックし

追加したTesla のコネクタである「Tesla Profile」をクリックします。

任意の接続名を入力し、作成したアプリの「OAuth Client Id」と「OAuth Client Secret」を指定、CData コールバックURL を使用はOFF にしたあと、「Tesla Profile へ接続」のボタンをクリックします。

すると、Tesla API へのログインおよび認可画面が表示されるので、接続を許可すればOK です。

また、もう一つ追加で「高度な設定」タブにある「Other」の項目にデータの取得対象となる自身のTesla 車両のId を「Id=XXXX」というフォーマットで指定しておきます。

合わせて任意の同期先のコネクションも構成しておきましょう。

ジョブの作成

続いてデータの転送の仕様であるジョブの作成をします。「ジョブ」のタブから「+ジョブを追加」をクリックし

先ほど作成したTesla API とRDB のコネクションを指定して、「ジョブを追加」をクリックします。

ジョブでは転送対象のデータをタスクとして指定します。

「タスク」→「タスクを追加」をクリックし

データ転送の対象となるデータモデルを指定します。今回はとりあえず全部指定しました。

タスクの転送データの詳細は、タスクの詳細画面から「プレビュー」をクリックすることで確認できます。

「Vehicles」が所持している車両の一覧データ(確か持っていればPower Wall のような蓄電池とかも出るはず)で

「VehicleData」がOther の項目で指定した対象の車両の詳細データになります。これが分析したいデータですね。

なお、「VehicleData」は車両が起動していない場合エラーで取得できないので注意しましょう。

「ChargingHistories」はスーパーチャージャーを用いて充電した際の料金や充電量、時間などがわかるログデータですね。

スケジュール設定

あとはスケジュールの設定から

データの転送頻度を指定すればOKです。最小単位は1分間隔で少し長めに感じるかもですが、Tesla API のリミットもあるので、これくらいがベターなのかなと思います。

レプリケーションの実施・結果確認

レプリケーションは手動でも行うことができるので、一度これで動かしてみます。

正常に完了すると、以下のようにタスクが「Successful」になります。

RDB 側を確認してみると、以下のようにテスラのデータが正常に転送されていることが確認できました!

そして実験へ

そして、こんな感じでデータの取得テストを行ったりしてデータを蓄積していました。

画像

最終的に以下のようなダッシュボードを作ったりしていますが、これはまた別な記事で紹介したいと思います。

トライアル・お問い合わせ

関連コンテンツ