Tesla의 API를 만져 보았습니다.

10067 단어 슬랙Tesla파이썬

하고 싶은 일



Tesla의 API가 비공식이면서 사용할 수 있다는 점에서 조금 만져 보았습니다.
차량 정보를 취득할 수 있으므로 우선 Python으로 취득해 Slack에 통지해 본다

준비


  • API에 관한 문서(비공식)는 이하를 참조
    htps : ///ss-Ap. 치 m 드 r. 코 m / 아피 바시 cs / 아우테 펜치 카치온
  • 인증 ID는 아래에 설명 된대로
    htps : // 빠스테병. 이 m/pS7Z6~yP

  • 인증 ID
    TESLA_CLIENT_ID=81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384
    TESLA_CLIENT_SECRET=c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3
    

    동작환경 등


  • Python 3.7 계에서 확인 (Windows)
  • 일단, GAE를 사용해 동작도 해 보았다

  • 개요


  • 인증은 OAuth2Service
  • ID/PASS를 포함하고 싶지 않기 때문에 다른 파일로 해 configparser 로 취득
  • 데이터의 구조는 resp의 내용을 보면 대체로 알 수 있다
  • 차량을 일으키는 처리를 넣지 않기 때문에 미리 앱 등으로 기동시켜 두고 나서 스크립트를 실행

    스크립트



    teslaapi_test.py
    def access_vehicle():
        import json
        from rauth import OAuth2Service # TESLA API用
        import configparser
    
        config = configparser.ConfigParser()
        config.read('config.conf')
        section = 'development'
    
        teslaID = config.get(section,'teslaID')
        password = config.get(section,'password')
    
        tesla = OAuth2Service(
            client_id = config.get(section,'client_id'),
            client_secret = config.get(section,'client_secret'),
            access_token_url = "https://owner-api.teslamotors.com/oauth/token",
            authorize_url = "https://owner-api.teslamotors.com/oauth/token",
            base_url = "https://owner-api.teslamotors.com/",
            )
        data = {"grant_type": "password",
            "client_id": config.get(section,'client_id'),
            "client_secret": config.get(section,'client_secret'),
            "email": teslaID,
            "password": password}
    
        session = tesla.get_auth_session(data=data, decoder=json.loads)
        access_token = session.access_token
        my_session = tesla.get_session(token=access_token)
    
        url = 'https://owner-api.teslamotors.com/api/1/vehicles/'
        vehicles = my_session.get(url).json()['response'][0]
        mycar = vehicles['id_s']
    
        return mycar,my_session
    
    def get_vehicle_status():
        import json
        import datetime
        from rauth import OAuth2Service # TESLA API用
    
        mycar,my_session = access_vehicle()
    
        url_vehicle_state = "https://owner-api.teslamotors.com/api/1/vehicles/{:}/vehicle_data".format(mycar)
        resp = my_session.get(url_vehicle_state).json()
    
        return resp
    

    설정 파일로 다음 만들기



    config.conf
    [development]
    #tesla
    teslaID = 'ユーザID'
    password = 'パスワード'
    client_id = '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384'
    client_secret = 'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3'
    
    

    Slack 알림



    알림은 Incoming-webhook을 사용하여 간단합니다.
    htps : // 아피. scck. 코 m / 메사 긴 g / ぇ b 호오 ks # 포스 친 g_ ぃ th_ ぇ b 호오 ks

    슬랙 알림
    import slackweb
    
    slack = slackweb.Slack(url="WebhookのURL")
    slack.notify(text="航続距離 : {}[km]".format(resp['response']['battery_range'] * 1.60934))
    

    ※ 거리 단위가 [mi]이므로 [Km]로 환산

    결과는 이런 느낌


    그 후



    정기적으로 스테이터스를 취득해 통지를 송신하기 위해, GAE에 배치해 cron에서 트리거하거나 차량이 Sleep의 경우에서도 취득할 수 있도록 Wake-Up 처리를 넣거나 해 봅니다.
  • 좋은 웹페이지 즐겨찾기