Welcome to Tesla Motors Club
Discuss Tesla's Model S, Model 3, Model X, Model Y, Cybertruck, Roadster and More.
Register

Cold Temperatures - how much does it effect charge times?

This site may earn commission on affiliate links.
It's more about range for me since last Winter I often had to drive in -20C temperatures to areas with neither Super nor destination charging. I'd rather warm the battery as much as possible while on shore power, to reduce draining the battery to do it later.

From what I know and can tell, the car will heat the battery while on shore power to the point where it is safe to charge/discharge (within the regen limits until they clear). Under these conditions, once under way, I do not believe that the battery heater is drawing any more than it otherwise would, and the car is using recaptured heat from the motor, inverter and the batteries themselves as they discharge to warm things up further. And if range is a concern, you can flip over to Range Mode and that will curtail battery heating even more, but your regen limits will stay longer.
 
Let's say the meter is on 20 kW while driving. Considering the efficiency of the electric drive train, how much power can be recuperatedn from that for battery warming?

An amount not likely enough when it's -20C, so the car probably dips into battery reserves to aid heating.

I would rather keep the battery in its healthy operating range. It's probably not good for battery life to be running currents through cold cells
 
An amount not likely enough when it's -20C, so the car probably dips into battery reserves to aid heating.

I'm sure that it does. Even the cold air rushing over the pack at the bottom of the car will be pulling heat away that has to be made up for. All I meant is that once you pre-heat with shore power to the point that Tesla believes is "safe" (i.e. still some regen limits) you are probably not adding anything to your range by going further. I have a recording power meter on my circuit at home, and when I pre-heat, I can see that the shore power tapers way down after 10 or 15 minutes to some sort of "maintenance level" I think, and stays there. My best guess is this is how much power the heating system will draw when you're under way from the pack, minus whatever it recoups from its systems. In other words, you're going to be drawing some pack power for heating regardless.
 
... In other words, you're going to be drawing some pack power for heating regardless.


Let's say the battery is at 20C, but I park unplugged long enough in -20C weather for it to cool off to 10C. In this same situation, if you start at 15C, you will end at about 6C. Am I wrong to think that for range purposes 10C is better than 6C for battery heating and performance purposes? There will also be more regen available which means more range.
 
In case anyone is interested here is my python code for setting your charging to end at a specific time. Enter your own parameters for your end time, your charge rate and the buffer of spare time. For example, I have my charge set to end at 7:00 with a buffer time of 5 minutes. Therefore the schedule will be set so that I expect the charge to end at 7:00-0:05 or 6:55. The charge rate is 0.33SoC/ minute so that car can go from 70%-90% in 60 minutes. Adjust for your own expected charge rate - I have a HPWC running at 80A so 0.33 is about what I get in practice. I may have to add a temperature scaling factor in very cold temperatures - I live in Toronto so we get fairly cold winters - but at least my car is in my garage.

If your car is at 60% under this example the charge time will be set at 5:25 - this routine will create a cron job to run at 5:25 and the car should finish charging at 6:55. The cron job is in the second code block.

I am running this on a Raspberry Pi so this is written for Linux. Some of the info is hard coded, like the path for the log file and some other paths and the ID for the cron jobs. This could run under Windows for the most part except the python-crontab doesn't appear to work under Windows. I run this using user 'pi' and from the '/home/pi/tesla' folder.

You will likely have to install some python modules, like python-crontab. These are installed by "sudo pip install python-crontab". You may have to install pip to even do that.

Disclaimer: Use at your own risk! I am not a programmer so there is probably a more efficient way of doing this. It looks like the Tesla API may be adding a way to set a sched time via the API - if that happens then the second code block would not be required. Note that a lot of the code is to set up the logging so you can delete that if you don't care about logging.

The way that I do this is that I have set up a cron job to run the first file (set_tesla_cron.py) at 2 am. You may want to adjust that depending on your circumstances.

File:set_tesla_cron.py
Code:
#!/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()

This is the startcharge.py file that is called by cron
Code:
#!/usr/bin/python
import logging
import requests
from crontab import CronTab

token="Your token"
VehicleID="Your vehicle ID"
cron = CronTab(user='pi') #for Linux

#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)
logger.info("Starting startcharge script")

url= "https://owner-api.teslamotors.com/api/1/vehicles/"+VehicleID+"/command/charge_start"
head = {"Authorization": "Bearer "+token}
r = requests.post(url,headers=head)
logger.info("Starting to charge Tesla")
cron.remove_all(comment="StartCharge")  # This deletes all StartCharge jobs
cron.write()
logger.info("Removed all Tesla charging cron jobs")
 
Let's say the battery is at 20C, but I park unplugged long enough in -20C weather for it to cool off to 10C. In this same situation, if you start at 15C, you will end at about 6C. Am I wrong to think that for range purposes 10C is better than 6C for battery heating and performance purposes? There will also be more regen available which means more range.

I think the unknown variable is around what point that Tesla thinks the battery is "warm enough" to continue operating without the need for further pack heating, and will just let the battery continue to warm via recapturing it's own heat from the systems in the glycol loop. I have noticed that even with some regen limits showing, when I come to a complete stop, my power meter will be at zero (or as close to zero as it would be in the summer under the same conditions). I do not use Range Mode.
 
Thanks for the informative thread. I just tried charging a cold soaked battery for the first time after over two years, and was surprised by the cars reluctance to take a charge, though I Should not have been. I get a daily cold soak at work but always warm things up driving home before charging. And I've never gotten into scheduling charging just before departing after even a cool soak in an unheated garage.

A bothersome aspect of this was that the car initially complained of a charge port fault, then seemed to quit a couple of times after showing 2A input with no power to the battery. Persistence got it going, but why was all that necessary?