My Tesla — Augustus — is one of the biggest single loads in my house. Charging a Model Y from 20% to 80% pulls about 40 kWh. At peak rates, that's $8.40. At super off-peak? Just $2.40. Do that three times a week and you're looking at $940/year difference just based on when you plug in.
I'm not leaving that to memory or Tesla's built-in scheduler. Home Assistant handles it, and it handles it well.
The Problem with Tesla's Built-In Scheduling
Tesla has a built-in charge scheduler. It works. But it's dumb in a few important ways:
- It only knows time. It doesn't know your utility rate structure, your solar production, or your battery state of charge.
- It can't adapt. If your rate plan changes, or if there's a holiday rate exception, you have to manually update it.
- No coordination with home battery. Tesla doesn't know I have 100kWh of home storage. It doesn't know whether charging from the grid or from my battery makes more sense at any given moment.
- Single schedule. You get one departure time. Real life isn't that predictable.
Home Assistant fixes all of this.
My Time-of-Use Rate Structure
My utility runs a three-tier TOU plan:
| Period | Hours | Rate ($/kWh) |
|---|---|---|
| Super Off-Peak | 10:00 PM – 6:00 AM | $0.06 |
| Off-Peak | 6:00 AM – 4:00 PM, 8:00 PM – 10:00 PM | $0.11 |
| On-Peak | 4:00 PM – 8:00 PM | $0.21 |
The spread between super off-peak and on-peak is $0.15/kWh — that's a 3.5x multiplier. For a 40 kWh charge session, that's $2.40 vs $8.40. Real money over a year.
Important note: This schedule applies every day of the year — no weekend or holiday exceptions. It's the same 7 days a week, 365 days a year.
The Sensors
Home Assistant tracks Augustus through the Tesla integration. The key sensors:
sensor.tesla_battery_level— current SOC percentagesensor.tesla_charge_limit_soc— the target charge level I've setbinary_sensor.tesla_wall_connector_vehicle_connected— is Augustus plugged in?sensor.tesla_charging_rate— current charge speed in miles/hrsensor.tesla_charger_power— watts being pulled right now
I also have a template sensor that calculates the current electricity rate based strictly on time of day:
template:
- sensor:
- name: "Current Electricity Rate"
unit_of_measurement: "$/kWh"
state: >
{% set hour = now().hour %}
{% if 22 <= hour or hour < 6 %}
0.06 {# Super Off-Peak: 10 PM - 6 AM #}
{% elif (6 <= hour < 16) or (20 <= hour < 22) %}
0.11 {# Off-Peak: 6 AM - 4 PM, 8 PM - 10 PM #}
{% else %}
0.21 {# On-Peak: 4 PM - 8 PM #}
{% endif %}
The Charging Strategy
My automation logic follows a simple priority chain:
Priority 1: Solar Surplus Charging (Free)
If my solar panels are producing more than the house is consuming and the home battery is above 90% SOC, the surplus goes to Augustus. This is essentially free charging.
I have an automation that watches sensor.solar_excess_power. When it's consistently above 3 kW for 5 minutes (enough to meaningfully charge), and Augustus is plugged in and below his target SOC, charging starts.
automation:
- alias: "Augustus Solar Surplus Charge"
trigger:
- platform: numeric_state
entity_id: sensor.solar_excess_power
above: 3000
for: "00:05:00"
condition:
- condition: state
entity_id: binary_sensor.tesla_wall_connector_vehicle_connected
state: "on"
- condition: numeric_state
entity_id: sensor.tesla_battery_level
below: "{{ states('sensor.tesla_charge_limit_soc') | int }}"
- condition: numeric_state
entity_id: sensor.total_battery_state_of_charge
above: 90
action:
- service: tesla_custom.api
data:
command: START_CHARGE
When solar surplus drops below 1.5 kW for 5 minutes, charging stops. No point in pulling from grid to top off the last few percent when I can wait for tonight's off-peak rate.
Priority 2: Super Off-Peak Grid Charging (Cheapest)
This is the bread and butter. Every night during super off-peak hours (10 PM - 6 AM), if Augustus is plugged in and below his target SOC, charging starts automatically.
automation:
- alias: "Augustus Super Off-Peak Charge Start"
trigger:
- platform: time
at: "22:00:00"
condition:
- condition: state
entity_id: binary_sensor.tesla_wall_connector_vehicle_connected
state: "on"
- condition: numeric_state
entity_id: sensor.tesla_battery_level
below: "{{ states('sensor.tesla_charge_limit_soc') | int }}"
action:
- service: tesla_custom.api
data:
command: START_CHARGE
Charging stops at 5:45 AM (15 min buffer before off-peak) or when SOC hits target — whichever comes first.
Priority 3: Emergency Off-Peak Charging
If Augustus is below 25% SOC and I haven't plugged in during super off-peak, the automation will charge during off-peak hours. It won't charge during on-peak unless SOC is below 15% — at that point, I need the car to function and saving $3 isn't worth being stranded.
Never: On-Peak Charging
Unless Augustus is critically low (below 15%), he does not charge between 4 PM and 8 PM. Period.
Supercharger Economics vs Home Charging
Tesla Superchargers in my area charge $0.36/kWh during the day - this is actually 71% more expensive than my home's on-peak rate of $0.21/kWh. The comparison is stark:
| Charging Method | Rate ($/kWh) | Notes |
|---|---|---|
| Home Super Off-Peak | $0.06 | Cheapest option by far |
| Home Off-Peak | $0.11 | Solid mid-tier rate |
| Home On-Peak | $0.21 | Always cheaper than Supercharging |
| Tesla Supercharger | $0.36 | 71% more expensive than home on-peak, 6x more expensive than home super off-peak |
Due to these cost differences:
- Home charging is almost always cheaper than Supercharging
- I rarely charge during Peak TOU unless it's an emergency
- Supercharging is reserved for actual road trips, NOT convenience charging
- This reinforces the enormous value of home charging optimization
The automation ensures Augustus is almost always charged at home during off-peak or solar surplus periods, avoiding both Peak grid rates and costly Supercharger visits.
Coordination with Home Battery
Here's where it gets interesting. My home battery (100 kWh) is also on a charge/discharge schedule. The automations are aware of each other:
- If home battery SOC is below 50%, Augustus charging is deprioritized. The house comes first.
- If home battery is full (100%) during solar production, excess goes to Augustus before being exported to grid. I get $0.04/kWh for grid export. Charging Augustus saves me $0.06-0.21/kWh. Easy math.
- During grid outages, Augustus charging is disabled entirely. Every kWh in the home battery is reserved for the house.
This coordination prevents the scenario where both systems are competing for the same power source and nobody wins.
The Dashboard
My Tesla charging card on the HA dashboard shows:
- Augustus current SOC with charge target line
- Whether he's plugged in (green dot) or not (gray)
- Current charging state and power draw
- Estimated time to target SOC
- Today's charging cost so far
- Monthly charging cost summary
- Current electricity rate (color-coded: green/yellow/red)
I also have a history graph showing charging sessions over the past week overlaid with electricity rates. It's satisfying to see all the charging bars clustered in the green (off-peak) zones.
Real Savings Data
I've been running this system for about 10 months. Here are real numbers:
Before automation (first 2 months — charging whenever convenient):
- Average cost per charge session: $8.40
- Monthly charging cost: ~$105
- Mostly mid-peak and some peak charging
After automation (8 months):
- Average cost per charge session: $2.76
- Monthly charging cost: ~$33
- 72% super off-peak, 18% solar surplus (free), 10% off-peak, 0% on-peak
Annual savings projection: ~$864/year
That's real money. Over the life of the car, we're talking $4,000+ in electricity cost difference — just from being smart about when you charge.
And here's the thing most people miss: solar surplus charging is free. Those kWh were going to be exported to the grid for $0.04 each. Instead, they're going into Augustus at a value of $0.06-0.21/kWh. Every kWh of solar surplus charging is worth 1.5-5.25x more than grid export.
About 18% of my charging comes from solar surplus. That's roughly 80 kWh/month of free fuel.
Tips for Your Setup
1. Know Your Rate Structure
Pull your actual utility bill. Look at the TOU schedule. Calculate the real spread. If your off-peak to on-peak spread is less than $0.05/kWh, the savings from time-shifting alone might not justify the automation effort. (Solar surplus charging is still worth it regardless.)
2. Set Realistic Charge Limits
I keep Augustus at 80% daily limit, 90% for road trips. Charging to 100% every night wastes energy and degrades the battery faster. The automation respects the charge limit set in the Tesla app — I don't override it.
3. Account for Charging Losses
Wall-to-battery efficiency on a Tesla is about 85-90%. When you calculate costs, use the actual kWh pulled from the wall, not what the car reports. My wall connector power sensor gives me the real number.
4. Consistent Schedule
The TOU rate schedule is consistent every day of the year — no holiday or weekend exceptions. This simplifies automation since no special date handling is required. The same rate rules apply 365 days a year.
5. Don't Forget Demand Charges
Some utility plans have demand charges based on your peak 15-minute draw. Charging a Tesla at 48A (11.5 kW) on top of your normal house load can spike your demand. If you're on a demand charge plan, consider limiting charge rate during peak demand periods.
6. Pre-Condition from Grid, Not Battery
Tesla's cabin pre-conditioning can pull 3-5 kW. I schedule pre-conditioning to happen while still on grid power rather than after switching to battery. Small detail, but it adds up.
What's Next
I'm working on integrating weather forecasts into the charging logic. If tomorrow is going to be sunny, I can be less aggressive about off-peak charging tonight and let solar handle more of it tomorrow. If it's going to be cloudy for three days, charge fully tonight.
I'm also looking at dynamic rate plans that some utilities are offering — rates that change hourly based on wholesale prices. That's a whole different automation challenge, but the potential savings are significant.
Final Thoughts
The Tesla App's built-in scheduler is fine for most people. But if you have time-of-use rates, solar panels, or a home battery, you're leaving money on the table.
Home Assistant turns your EV charging from "plug in and hope for the best" into a coordinated energy management system. Augustus charges when electricity is cheapest or free, coordinates with my home battery, and never touches peak rates.
Set it up once, tune it over a month, then forget about it. The automations do the work. You just plug in.
Running a similar setup? Different approach? I'd love to hear about it at bigkel.tech.