Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tesla API Hack! Power Platform から Tesla API を使ってみよう

Tesla API Hack! Power Platform から Tesla API を使ってみよう

86e4f6731e81df0591bd9cb66ddbd347?s=128

Kazuya Sugimoto

November 28, 2020
Tweet

Transcript

  1. © 2020 CData Software Japan, LLC | www.cdata.com/jp 今年の1⽉こんな話をしていました http://bit.ly/3aN2Bqw

  2. © 2020 CData Software Japan, LLC | www.cdata.com/jp 気づいてしまった・・・

  3. © 2020 CData Software Japan, LLC | www.cdata.com/jp Mock API

    叩いても、カスタムコネクタを作っても、 検証できなきゃ寂しくない︖ バッテリー減らない ⾛⾏距離変わらない 電源⼊らない 位置情報はずっとUS
  4. © 2020 CData Software Japan, LLC | www.cdata.com/jp 5⽉某⽇

  5. © 2020 CData Software Japan, LLC | www.cdata.com/jp 気がついたら某ハリネズミが私のiPadに表⽰されていた

  6. © 2020 CData Software Japan, LLC | www.cdata.com/jp 9⽉某⽇

  7. © 2020 CData Software Japan, LLC | www.cdata.com/jp 検証環境(物理)が届いてしました

  8. © 2020 CData Software Japan, LLC | www.cdata.com/jp 今年の1⽉こんな話をしていました http://bit.ly/3aN2Bqw

  9. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    Hack! Power Platform から Tesla API を使ってみよう .NET ラボ 2020/11⽉ CData Software Japan Kazuya Sugimoto -Lead Engineer
  10. © 2020 CData Software Japan, LLC | www.cdata.com/jp CData Software

    Japan の API holic 担当 年100種類以上のAPIを⾒たり触ったりしています。 Twitter︓@sugimomoto Facebook︓sugimomoto Blog︓http://kageura.hatenadiary.jp/ About Speaker Horizontal SaaS 647種類のAPI提供状況を調査︓そこから⾒えてきた国 産 SaaS APIの今 https://www.cdatablog.jp/entry/horizontalsaasapi
  11. © 2020 CData Software Japan, LLC | www.cdata.com/jp 本⽇のゴール Power

    Platformを通じて Tesla API の⾯⽩さ・可能性を感じてもらう︕
  12. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla とは︖

  13. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla(会社)とは︖ ・⼆次電池式電気⾃動⾞と電気⾃動⾞関連商

    品、ソーラーパネルや蓄電池等を開発・製造・販 売している⾃動⾞会社 ・アメリカ合衆国のシリコンバレーが拠点 ・PayPal社の前⾝であるX.com社を1999年に 設⽴したイーロン・マスクがCEO ・電気⾃動⾞以外にも、蓄電池システム (PowerWall)や太陽光発電システム(ソー ラールーフ)などクリーンエネルギーを核として様々 なビジネス展開をしている(最近はエアコン事業も 始めるとかなんとか)
  14. © 2020 CData Software Japan, LLC | www.cdata.com/jp 電気⾃動⾞の世界販売台数 第1位

    40万台近く 時価総額がトヨタを超え https://www.asahi.com/articles/ASN727786N72UHBI00S.html
  15. © 2020 CData Software Japan, LLC | www.cdata.com/jp 4つのカメラと12個の超⾳波センサー ⾞両の周辺状況を常にトラッキング

  16. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾞両のほぼ全ての機能を操作可能な センターコンソール

  17. © 2020 CData Software Japan, LLC | www.cdata.com/jp 完全⾃動運転(FSD)に対応可能

  18. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla はアプリで様々な操作を実⾏可能

    ・充電状況をリアルタイムで確認し、充電を開始ま たは停⽌する ・運転前に⾞両の暖房/冷房を⼊れる (ガレージ 内でも可能) ・遠隔からロックまたはロック解除する ・⾞の現在地を確認したり、動きを追跡する ・お気に⼊りのアプリから⽬的地を送信し、ナビを開 始します ・同乗者はすばやくメディアをコントロールすることが できます などなど
  19. © 2020 CData Software Japan, LLC | www.cdata.com/jp そんな Tesla

    のアプリの内部通信は Web API 経由で⾏われている
  20. © 2020 CData Software Japan, LLC | www.cdata.com/jp リバースエンジニアリングして⾮公式WebAPIとして 公開してしまった猛者がいる︕

    https://tesla-api.timdorr.com/
  21. © 2020 CData Software Japan, LLC | www.cdata.com/jp 海外ではアプリ・ビジネス化の取り組み事例も https://tezlabapp.com/app

  22. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    のここが⾯⽩い
  23. © 2020 CData Software Japan, LLC | www.cdata.com/jp めちゃくちゃ機能が豊富なAPI︕ https://docs.google.com/spreadsheets/d/1ZQyujHcdJy3WHVguGyQTo2sdQ6z_LPQDIn-b0NNYGxQ/edit#gid=0

  24. © 2020 CData Software Japan, LLC | www.cdata.com/jp 取得できる⾞両データ項⽬が160種類以上 ⾞両番号や⾞両の起動状況といった基本情報から、バッテリーの残容量・充電状況・充電リミッターの

    設定値、外気温・⾞内気温、エアコンの温度設定、GPSによる現在地の緯度経度、Software Updateの状態、さらにはアクセルパワー・スピード・シフトモードの情報まで取得するとが可能︕ { "response": { "id": :id, "user_id": :user_id, "vehicle_id": :vehicle_id, "vin": ":vin", "display_name": ":name", "option_codes": "AD15,AF02,AH00,APF0,APH2,APPA,AU00,BCMB,BP00,BR00,BS00,BTX4,CC02,CDM0,CH05,COUS,CW02,DRLH,DSH7,DV4W,FG02,FR01,GLFR,HC00,HP00,IDBO,INBPB,IX01,LP01,LT3B,MDLX,ME02,MI02,PF00,PI01 ,PK00,PMBL,QLPB,RCX0,RENA,RFPX,S02B,SP00,SR04,ST02,SU01,TIC4,TM00,TP03,TR01,TRA1,TW01,UM01,USSB,UTAB,WT20,X001,X003,X007,X011,X014,X021,X025,X026,X028,X031,X037,X040,X042,YFFC,SC05", "color": null, "tokens": [ ":token1", ":token2" ], "state": "online", "in_service": null, "id_s": ":ids", "calendar_enabled": true, "backseat_token": null, "backseat_token_updated_at": null, "gui_settings": { "gui_distance_units": "mi/hr", "gui_temperature_units": "F", "gui_charge_rate_units": "mi/hr", "gui_24_hour_time": false, "gui_range_display": "Rated", "timestamp": 1532986218050 }, "vehicle_state": { "api_version": 3, "autopark_state": "unavailable", "autopark_state_v2": "standby", "autopark_style": "dead_man", "calendar_supported": true, "car_version": "2018.21.9 75bdbc11", "center_display_state": 0, "df": 0, "dr": 0, "ft": 0, "homelink_nearby": false, "last_autopark_error": "no_error", "locked": true, "notifications_supported": true, "odometer": 14522.605889, "parsed_calendar_supported": true, "pf": 0, "pr": 0, "remote_start": false, "remote_start_supported": true, "rt": 0, "sun_roof_percent_open": null, "sun_roof_state": "unknown", "timestamp": 1532986223303, "valet_mode": false, "vehicle_name": ":name" }, "climate_state": { "inside_temp": 27.0, "outside_temp": 24.0, "driver_temp_setting": 18.3, "passenger_temp_setting": 18.3, "left_temp_direction": -280, "right_temp_direction": -280, "is_front_defroster_on": false, "is_rear_defroster_on": false, "fan_status": 0, "is_climate_on": false, "min_avail_temp": 15.0, "max_avail_temp": 28.0, "seat_heater_left": false, "seat_heater_right": false, "seat_heater_rear_left": false, "seat_heater_rear_right": false, "seat_heater_rear_center": false, "seat_heater_rear_right_back": 0, "seat_heater_rear_left_back": 0, "battery_heater": false, "battery_heater_no_power": false, "steering_wheel_heater": false, "wiper_blade_heater": false, "side_mirror_heaters": false, "is_preconditioning": false, "smart_preconditioning": false, "is_auto_conditioning_on": false, "timestamp": 1532986223306 }, "charge_state": { "charging_state": "Complete", "fast_charger_type": "¥u003cinvalid¥u003e", "fast_charger_brand": "¥u003cinvalid¥u003e", "charge_limit_soc": 86, "charge_limit_soc_std": 90, "charge_limit_soc_min": 50, "charge_limit_soc_max": 100, "charge_to_max_range": false, "max_range_charge_counter": 0, "fast_charger_present": false, "battery_range": 212.26, "est_battery_range": 152.09, "ideal_battery_range": 271.83, "battery_level": 83, "usable_battery_level": 83, "charge_energy_added": 16.57, "charge_miles_added_rated": 51.0, "charge_miles_added_ideal": 65.5, "charger_voltage": 0, "charger_pilot_current": 6, "charger_actual_current": 0, "charger_power": 0, "time_to_full_charge": 0.0, "trip_charging": false, "charge_rate": 0.0, "charge_port_door_open": true, "conn_charge_cable": "SAE", "scheduled_charging_start_time": null, "scheduled_charging_pending": false, "user_charge_enable_request": null, "charge_enable_request": true, "charger_phases": null, "charge_port_latch": "Engaged", "charge_current_request": 6, "charge_current_request_max": 6, "managed_charging_active": false, "managed_charging_user_canceled": false, "managed_charging_start_time": null, "battery_heater_on": false, "not_enough_power_to_heat": false, "timestamp": 1532986223305 }, "drive_state": { "shift_state": null, "speed": null, "power": 0, "latitude": 40.459728, "longitude": -79.923447, "heading": 340, "gps_as_of": 1532986222, "native_location_supported": 1, "native_latitude": 40.459729, "native_longitude": -79.923444, "native_type": "wgs", "timestamp": 1532986223305 }, "vehicle_config": { "can_actuate_trunks": true, "car_special_type": "base", "car_type": "modelx", "charge_port_type": "US", "eu_vehicle": false, "exterior_color": "MetallicBlack", "has_ludicrous_mode": false, "motorized_charge_port": true, "perf_config": "P1", "plg": true, "rear_seat_heaters": 3, "rear_seat_type": 3, "rhd": false, "roof_color": "None", "seat_type": 0, "spoiler_type": "Passive", "sun_roof_installed": 0, "third_row_seats": "FuturisFoldFlat", "timestamp": 1532986223303, "trim_badging": "90d", "wheel_type": "AeroTurbine20" } } }
  25. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    の使い⽅
  26. © 2020 CData Software Japan, LLC | www.cdata.com/jp まず以下のURLにアクセス︕ https://ts.la/kazuya99717

  27. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    の使い⽅ 1.以下のURLにアクセスして、 Tesla を注⽂︕ https://ts.la/kazuya99717 2.Teslaアカウントの登録 3.Access Token の取得(認証) 4.⾞両IDを特定 5.⾞両の起動 6.データの取得・コマンドの送信
  28. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    の Postman Collection を公開中 https://kageura.hatenadiary.jp/entry/teslapostmancollection
  29. © 2020 CData Software Japan, LLC | www.cdata.com/jp Access Token

    の取得 [Request] POST /oauth/token?grant_type=password Host: owner-api.teslamotors.com Content-Type: application/json { “password”: “ACCOUNT_PASSWORD”, “email”: “ACCOUNT_NAME", "client_secret": "XXXXXXXXXX", "client_id": "XXXXXXX", "grant_type": "password" } ・認証⽅法は OAuth 2.0 Password Grant ・Tesla AccountのID・PWを使⽤ ・ClientId/Secretはアプリの埋め込みを使⽤ ・Access Token は45⽇間有効 ・Access Token は複数発⾏可能 ・Reflesh Token も実⾏可能 ・パスワード変更時は全てのTokenが無効に
  30. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾞両IDの特定 [Request]

    GET /api/1/vehicles Host: owner-api.teslamotors.com Authorization: Bearer qts-XXXXXXXXXXXXX [Response] { "response": [ { "id": 123456789, "vehicle_id": 123456789, "vin": ”XXXXXXXXXXXXXXXXX", ”display_name": "てしゅら", ・Products もしくは Vehicles エンドポイントを利⽤ ・Productsは⾞両だけでなくPowerwallなども取得 できる ・Idプロパティの値が⾞両Id。Vehicle Idは違う情 報なので混同注意 ・Stateプロパティで⾞両の起動状況が確認可能
  31. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾞両の起動 [Request]

    POST /api/1/vehicles/:id/wake_up Host: owner-api.teslamotors.com Authorization: Bearer XXXXXXXX [Response] { "response": [ { "id": 123456789, "vehicle_id": 123456789, "vin": ”XXXXXXXXXXXXXXXXX", ”display_name": "てしゅら", ・⾞両データの取得や起動以外のコマンドは起動中 でなければエラーを返す ・:idパスに事前に取得した⾞両IDを指定 ・リクエストはすぐに成功するが、⾞両が実際に起動 するまでにはある程度時間を要するので要注意
  32. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾞両データの取得 [Request]

    GET /api/1/vehicles/:id/vehicle_data Host: owner-api.teslamotors.com Authorization: Bearer XXXXXX [Response] { "response": [ { "id": 123456789, "vehicle_id": 123456789, "vin": ”XXXXXXXXXXXXXXXXX", ”display_name": "てしゅら", ・いくつかデータ取得エンドポイントは存在するが、 vehicle_dataエンドポイントだけでほとんど取得可 能 ・:idパスに事前に取得した⾞両IDを指定 ・現時点の⾞両状況データのみ取得可能。ログなど は取得できない ・ほぼリアルタイムデータ
  33. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    は Tesla サーバー経由の Web API owner-api.teslamotors.com ※なので世界中どこからでも操作が可能
  34. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    を Power Platform で便利に活⽤
  35. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    のカスタムコネクタを公開中︕ https://kageura.hatenadiary.jp/entry/teslacustomconnector
  36. © 2020 CData Software Japan, LLC | www.cdata.com/jp URL から

    OpenAPI のインポートで 以下のURLを⼊⼒するだけ https://raw.githubusercontent.com/sugimomoto/TeslaAPIC ustomConnector/main/TeslaAPICustomConnector.json
  37. © 2020 CData Software Japan, LLC | www.cdata.com/jp Access Tokenは事前に取得しておく

    Bearer と共にAPI キーに設定 Bearer qts-XXXXXXXXXXXXX
  38. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    を Power Platform で便利に活⽤ (現在 LogicApps に移⾏中)
  39. © 2020 CData Software Japan, LLC | www.cdata.com/jp バッテリーの消費状況の分析 ・LogicApps

    で Teslaのバッテリーデータを Azure Table Storage に蓄積 ・⽇々の消費状況を可視化 ・可視化したデータはLINEとTwitterに投稿 ・そもそも私はアパート暮らしなので、⾃宅に充電設備 が無い ・そのため定期的に充電できる施設に⾏くのだけど、ど の程度の頻度で⾃分が充電しに⾏くのか把握して、計 画的に充電しに⾏けるようにしたかった。 (⼟曜⽇まではまだ持ちそうだな、とか)
  40. © 2020 CData Software Japan, LLC | www.cdata.com/jp 毎朝の気温の確認・ヒーターON ・Tesla

    APIでは⾞両内部・外部の気温が取得可能 ・気温の設定値を元に、10度を下回ったらコマンド送 信でヒーターをONに。 ・毎朝8時頃に息⼦を保育園に送りに⾏くのだけど、そ の際に温めておきたい(東北の冬は寒い) ・起動しっぱなしは電⼒の無駄なので、要注意 (SiriやGoogle Homeなどの⾳声コマンドから起動 でもいいかもしれないと思ったり)
  41. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾛⾏状況のリアルタイムデータ可視化 ・LogicApps+Power

    BIのストリーミングデータセット を使い1秒間隔でTeslaからデータを取得して可視化 ・単純にどれくらいリアルタイムでTeslaのデータが取得 できるのか、実験してみたかった ・起動しっぱなしで忘れると悲惨
  42. © 2020 CData Software Japan, LLC | www.cdata.com/jp 最後に

  43. © 2020 CData Software Japan, LLC | www.cdata.com/jp Tesla API

    はあくまで⾮公式︕ • あくまで1ユーザーがリバースエンジニアリングして、公開したAPI仕様であり、 Tesla社 が公に「このAPIを⾃由に使っていいよ︕」と⾔っているわけではあ りません。 • 基本的にテスラ社の公式アプリから使うことを前提としています。 • 何か困った時、不具合が発⽣した時、Tesla社が助けてくれるわけではな いので、あくまで使⽤するのは⾃⼰責任の範囲で︕
  44. © 2020 CData Software Japan, LLC | www.cdata.com/jp API Access

    Tokenの取り扱いは要注意︕ • APIの認証情報・Access Tokenは「Teslaのデータの収集、そして様々 な操作を可能」にします︕ • もしTesla APIを使ったサービス郡が悪意を持ったり、もしくはその認証情 報が流出すれば、誰かがあなたのテスラを⾃由に操作し、データを盗み⾒ ることができるようになります。 • GPS座標情報もありますし、キーのロック・ロック解除、電源のON/OFFも できます。何ができるようになるかは想像に難くないでしょう。 • 危ないと思ったらパスワード変更でAccessTokenは無効化できます。
  45. © 2020 CData Software Japan, LLC | www.cdata.com/jp とはいえ

  46. © 2020 CData Software Japan, LLC | www.cdata.com/jp 本⽇のゴール Power

    Platformを通じて Tesla API の⾯⽩さ・可能性を感じてもらう︕
  47. © 2020 CData Software Japan, LLC | www.cdata.com/jp 電気⾃動⾞の世界販売台数・第1位 時価総額がトヨタを超えた

    https://www.asahi.com/articles/ASN727786N72UHBI00S.html
  48. © 2020 CData Software Japan, LLC | www.cdata.com/jp 4つのカメラと12個の超⾳波センサー ⾞両の周辺状況を常にトラッキング

  49. © 2020 CData Software Japan, LLC | www.cdata.com/jp ⾞両のほぼ全ての機能を操作可能な センターコンソール

  50. © 2020 CData Software Japan, LLC | www.cdata.com/jp 完全⾃動運転(FSD)に対応可能

  51. © 2020 CData Software Japan, LLC | www.cdata.com/jp テスラはこの40万近い⾞両の ソフトウェアとハードウェアによって

    どれだけデータを収集し、活⽤しているのか この API でその⼀⽚を感じとることが できるのではないでしょうか。
  52. © 2020 CData Software Japan, LLC | www.cdata.com/jp CData Software

    Japanではメンバーを募集中︕ https://www.wantedly.com/companies/cdata2/projects