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
Voir ci-dessous la documentation de l'API (non officielle)
https://tesla-api.timdorr.com/api-basics/authentication
L'ID d'authentification est comme décrit ci-dessous
https://pastebin.com/pS7Z6yyP
ID d'authentification
TESLA_CLIENT_ID=81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384
TESLA_CLIENT_SECRET=c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3
--Confirmé avec la série Python 3.7 (Windows) ―― Pour le moment, j'ai essayé de le faire fonctionner en utilisant GAE
--L'authentification est ʻOAuth2Service --Je ne veux pas intégrer ID / PASS, alors faites-en un fichier séparé et récupérez-le avec
config parser`
--La structure des données peut être approximativement comprise en regardant le contenu de resp.
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
config.conf
[development]
#tesla
teslaID = 'Identifiant d'utilisateur'
password = 'mot de passe'
client_id = '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384'
client_secret = 'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3'
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
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