#!/usr/bin/python
#Get charge info
import requests
import json
from datetime import datetime, timedelta, time, date
import logging
from crontab import CronTab
token="PUT YOUR TOKEN HERE"
VehicleID="YOUR VEHICLE ID"
cron = CronTab(user='pi')
#set up logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = logging.FileHandler('/home/pi/tesla/tesla.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
#Set constants-----------------------------------------
charge_rate=0.33 #Charge rate in %SOC per minute 0.33 means it can charge 20% soc in 60 minutes
end_time=time(7,0,0) #Time for charge to end 0700 is 7am
charge_buffer=5 #number of minutes that charge will stop before end_time
#----------------------------------------------
today =date.today()
end_datetime=datetime(today.year,today.month,today.day,end_time.hour,end_time.minute)
adj_end_datetime=end_datetime - timedelta(minutes=charge_buffer)
logger.info("Getting charge state for Tesla")
url= "https://owner-api.teslamotors.com/api/1/vehicles/"+VehicleID+"/data_request/charge_state"
head = {"Authorization": "Bearer "+token}
r = requests.get(url,headers=head)
jsondata=r.json
current_soc= jsondata['response']['battery_level']
final_soc= jsondata['response']['charge_limit_soc_std']
min_to_charge=int((final_soc-current_soc)/charge_rate)
start_datetime=adj_end_datetime - timedelta(minutes=min_to_charge)
outinfo="We will start charging at: "+start_datetime.strftime("%H:%M")+" and end charging at "+adj_end_datetime.strftime("%H:%M")
starthour=start_datetime.hour
startminute=start_datetime.minute
logger.info(outinfo)
# Set cron job
job = cron.new(command='python /home/pi/tesla/startcharge.py', comment="StartCharge")
job.hour.on(starthour)
job.minute.on(startminute)
logger.info("Set up Cron Job")
job.enable(True)
cron.write()