[PYTHON] J'ai touché l'API de Tesla

Chose que tu veux faire

J'ai entendu dire que l'API de Tesla pouvait être utilisée de manière non officielle, alors je l'ai immédiatement touchée Puisque vous pouvez obtenir des informations sur le véhicule, obtenons-les avec Python pour le moment et avertissons Slack

Préparation

ID d'authentification


TESLA_CLIENT_ID=81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384
TESLA_CLIENT_SECRET=c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3

Environnement d'exploitation, etc.

--Confirmé avec la série Python 3.7 (Windows) ―― Pour le moment, j'ai essayé de le faire fonctionner en utilisant GAE

Aperçu

--L'authentification est ʻOAuth2Service --Je ne veux pas intégrer ID / PASS, alors faites-en un fichier séparé et récupérez-le avecconfig parser` --La structure des données peut être approximativement comprise en regardant le contenu de resp.

scénario

teslaapi_test.py


def access_vehicle():
    import json
    from rauth import OAuth2Service #Pour l'API TESLA
    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 #Pour l'API TESLA

    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

Créez ce qui suit en tant que fichier de paramètres

config.conf


[development]
#tesla
teslaID = 'Identifiant d'utilisateur'
password = 'mot de passe'
client_id = '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384'
client_secret = 'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3'

Notification Slack

Les notifications sont faciles en utilisant Incoming-webhook. https://api.slack.com/messaging/webhooks#posting_with_webhooks

notification de relâche


import slackweb

slack = slackweb.Slack(url="URL du webhook")
slack.notify(text="Distance de croisière: {}[km]".format(resp['response']['battery_range'] * 1.60934))

Le résultat ressemble à ceci slack_incoming.png

ensuite

Afin d'obtenir le statut et d'envoyer la notification périodiquement, je vais le déployer sur GAE et le déclencher avec cron, ou ajouter un traitement de réveil afin qu'il puisse être obtenu même si le véhicule est en veille.

Recommended Posts

J'ai touché l'API de Tesla
J'ai essayé de toucher l'API COTOHA
jupyter je l'ai touché
J'ai essayé de toucher Python (installation)
J'ai créé une API Web
J'ai essayé de toucher Python (syntaxe de base)
J'ai essayé de déboguer.
J'ai essayé de toucher la bibliothèque GUI de Python "PySimple GUI"
J'ai essayé d'apprendre PredNet
J'ai essayé d'organiser SVM.
J'ai essayé de réintroduire Linux
J'ai essayé de présenter Pylint
J'ai essayé de résumer SparseMatrix
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de découvrir notre obscurité avec l'API Chatwork
J'ai essayé d'implémenter Deep VQE
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé le roman Naro API 2
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé d'expliquer l'ensemble de données de Pytorch
J'ai essayé l'authentification vocale Watson (Speech to Text)
J'ai essayé de m'organiser à propos de MCMC.
J'ai essayé l'API du roman Naruro
J'ai essayé d'implémenter Realness GAN
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de déplacer le ballon
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'estimer la section.
J'ai essayé d'analyser mon chanteur préféré (SHISHAMO) en utilisant l'API Spotify
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de résumer la commande umask
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de créer un linebot (préparation)
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de commencer avec Hy
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé d'implémenter PLSA dans Python 2
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'ajouter un post-incrément à l'implémentation CPython
J'ai essayé de laisser optuna résoudre le nombre
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé d'implémenter PPO en Python
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de résoudre TSP avec QAOA
[Python] J'ai essayé de calculer TF-IDF régulièrement
Explication API pour toucher mastodonte de python