Tesla + HA — qué se puede hacer, qué vale la pena¶
Tesla nuevo del usuario. La integration HA es completa (sensors + commands), pero el setup tiene fricción. Más importante: la mayoría de las "20 automations Tesla" que internet tira son gimmick. Las que realmente cambian algo son 5-7. Esta página separa señal de ruido.
Contexto¶
Tu Tesla acaba de llegar. La integration con HA existe en 2026 con tres opciones principales (Fleet oficial, Tessie, Teslemetry). Lo que se puede automatizar es muchísimo; lo que conviene automatizar es bastante menos. Esta página es la curación.
Decisión de integration¶
Opción A — Tesla Fleet oficial (free pero setup pesado)¶
- $0 + $10/mes free credit Tesla API.
- Requiere: dominio público (o FleetKey.net), Tesla Developer App, virtual key install.
- Para Tesla post-2023: command signing obligatorio (auto-key gen + public key registration).
- Setup time realista: 1-3 horas si nunca lo hiciste.
Opción B — Tessie ($5/mes USD aprox)¶
- Paste API token en HA integration.
- Signed commands ready.
- Polling más frecuente, mejor sleep handling.
- Setup time: 10 minutos.
Opción C — Teslemetry ($$$)¶
- Fleet API + Telemetry stream + Webhooks.
- Más caro pero más data realtime.
- Para casos donde necesitás push instead of poll.
Recomendación: arrancá con Tessie. Si dentro de 3 meses valida, evaluar moverse a Fleet oficial DIY para ahorrar la sub. Esto se alinea con la meta "no tinkering": $5/mes vs 3hs de tu tiempo + ongoing maintenance del proxy.
Las automations que valen la pena (5)¶
Ordenadas por value/effort ratio:
1. Pre-heat / pre-cool antes de salir ★★★¶
El #1 de Tesla automations. Especialmente brutal en invierno (cabin -5°C → cómodo) o verano (cabin 50°C → tolerable).
automation:
- alias: "Tesla pre-heat morning weekday"
trigger:
- platform: time
at: '07:45:00' # 15 min antes de salir
condition:
- condition: time
weekday: [mon, tue, wed, thu, fri]
- condition: state
entity_id: device_tracker.tesla_location
state: 'home'
- condition: numeric_state
entity_id: sensor.outside_temp
below: 10
action:
- service: climate.turn_on
target: { entity_id: climate.tesla_cabin }
- service: climate.set_temperature
target: { entity_id: climate.tesla_cabin }
data: { temperature: 21 }
- service: select.select_option # seat heater
target: { entity_id: select.tesla_seat_heater_left }
data: { option: 'high' }
Mejor con calendar trigger: si tu próximo meeting está en calendar.work a las X, pre-heat 15 min antes. Más smart que schedule fijo.
ROI: tiempo + comfort + batería preserva mejor cuando se usa con cable enchufado (chupa de la pared, no del battery).
2. Charge optimization según tarifa / solar ★★★¶
Si tu tarifa es horaria o tenés solar, ESTE es el use case que paga la integración.
automation:
- alias: "Tesla charge during off-peak only"
trigger:
- platform: state
entity_id: binary_sensor.tesla_plugged_in
to: 'on'
action:
# Set charge limit conservador
- service: number.set_value
target: { entity_id: number.tesla_charge_limit }
data: { value: 80 }
# Sólo cargar si precio < threshold
- if:
- condition: numeric_state
entity_id: sensor.electricity_price_per_kwh
above: 0.15
then:
- service: switch.turn_off
entity_id: switch.tesla_charging
else:
- service: switch.turn_on
entity_id: switch.tesla_charging
# Re-evaluar cada hora
- alias: "Tesla price check hourly"
trigger:
- platform: time_pattern
minutes: '0'
condition:
- condition: state
entity_id: binary_sensor.tesla_plugged_in
state: 'on'
- condition: state
entity_id: binary_sensor.tesla_charging_complete
state: 'off'
action:
- if:
- condition: numeric_state
entity_id: sensor.electricity_price_per_kwh
above: 0.15
then:
- service: switch.turn_off
entity_id: switch.tesla_charging
else:
- service: switch.turn_on
entity_id: switch.tesla_charging
Ahorro real: con tarifa horaria, $300-500/año típico (ver automation-ideas-energy).
Con solar: redirect surplus solar a charging cuando hay excedente.
automation:
- alias: "Tesla charge with solar surplus"
trigger:
- platform: numeric_state
entity_id: sensor.solar_surplus_watts
above: 3000 # nivel para charging meaningful
for: '00:05:00'
condition:
- condition: state
entity_id: binary_sensor.tesla_plugged_in
state: 'on'
action:
# Ajustar charge current al surplus disponible
- service: number.set_value
target: { entity_id: number.tesla_charge_current }
data:
value: >
{{ [(states('sensor.solar_surplus_watts') | float / 240) | round(0), 32] | min }}
- service: switch.turn_on
entity_id: switch.tesla_charging
3. Notify si charging stopped unexpectedly ★★¶
automation:
- alias: "Tesla charging interrupted alert"
trigger:
- platform: state
entity_id: binary_sensor.tesla_charging
from: 'on'
to: 'off'
for: '00:02:00'
condition:
- condition: numeric_state
entity_id: sensor.tesla_battery_level
below: 70 # no era completion
action:
- service: notify.mobile_app_paulo
data:
title: "🔌 Tesla dejó de cargar"
message: "{{ states('sensor.tesla_battery_level') }}% — ¿cable suelto?"
Catch cuando el cable se aflojó, alguien lo desenchufó, breaker tripped, etc. Tier 2 — no urgent pero no querés enterarte en la mañana que no cargó.
4. Open garage al llegar a casa ★★¶
automation:
- alias: "Open garage on Tesla arrival"
trigger:
- platform: state
entity_id: device_tracker.tesla_location
from: 'not_home'
to: 'home'
condition:
- condition: state
entity_id: cover.garage
state: 'closed'
action:
- service: cover.open_cover
target: { entity_id: cover.garage }
- service: light.turn_on
target: { entity_id: light.garage }
Trampa común: usar proximity integration en vez de device_tracker para evitar que abra cuando todavía estás a 1km. Usar numeric_state de distance < 100m.
Tesla tiene HomeLink built-in — si tu garage abre con HomeLink ya, esto es redundante. Pero si querés trigger basado en HA (logging, multi-condition), sigue siendo útil.
5. Charge complete notify (no la app, HA mismo) ★¶
automation:
- alias: "Tesla charge complete"
trigger:
- platform: state
entity_id: binary_sensor.tesla_charging_complete
to: 'on'
action:
- service: notify.mobile_app_paulo
data:
title: "🔋 Tesla cargado"
message: >
{{ states('sensor.tesla_battery_level') }}% — range {{ states('sensor.tesla_battery_range') }} km.
Costo carga: ${{ states('sensor.charge_energy_added_kwh') | float * states('sensor.electricity_avg_price') | float | round(2) }}
La Tesla app también notifica, pero tener data en HA permite combinarla con context (costo, time-of-day pattern).
Las que NO valen la pena (gimmicks)¶
Honk + flash lights from HA¶
Cute en demo, nunca útil en práctica. Si tu Tesla está perdido en parking, abrís la Tesla app. No vas a buscar HA Companion para encontrar el auto.
Voice command "abrir Tesla"¶
Latency: 5-10s vs llave / phone proximity 1s. Es slower que la opción default.
Fart mode¶
Joke feature. Move on.
Auto-lock al alejarte (cuando Tesla ya lo hace solo)¶
Tesla auto-locks al alejarte si tenés Walk-Away Lock habilitado. Re-implementarlo en HA = duplicación frágil.
Realtime location tracking detallado¶
Polling cada 10min ≠ realtime. Si querés realtime, la Tesla app oficial es better. HA sirve para automations triggereadas por estado, no para "watching dot on map".
"Sentry mode on when away"¶
Tesla tiene esto built-in via geofence in-car. Re-implementar en HA = redundante + más componentes que mantener.
Anti-pattern central¶
Si la Tesla app ya lo hace mejor, no lo migres a HA. HA gana cuando combina Tesla + otro signal (precio energía, solar surplus, calendar, weather forecast).
Use Tesla integration para automations cross-system, no para reimplementar features que la app ya tiene.
Patrón AI runtime (Q7 use case)¶
Caso interesante para AI Task:
automation:
- alias: "Smart charge plan via AI"
trigger:
- platform: state
entity_id: binary_sensor.tesla_plugged_in
to: 'on'
action:
- service: ai_task.generate_data
data:
entity_id: ai_task.default
task: |
Tesla plugged in. Battery: {{ states('sensor.tesla_battery_level') }}%.
Departure: {{ states('input_datetime.next_departure') }}.
Price forecast (24h): {{ states('sensor.electricity_forecast') }}.
Solar forecast (24h): {{ states('sensor.solar_forecast') }}.
Recomendá el charge schedule óptimo:
- Target battery level at departure.
- Time windows para cargar (off-peak / solar surplus).
- Reasoning corto.
structure:
target_level: int
charge_windows: list
reasoning: string
response_variable: plan
# Aplicar plan al Tesla
- service: number.set_value
target: { entity_id: number.tesla_charge_limit }
data: { value: "{{ plan.target_level }}" }
# ... + automations adicionales para activar charging en las windows
Esto es el caso canónico de Q7: AI propone plan, determinista aplica (q7-llm-runtime-strategy-v1). Una vez por día/semana, no per-event. Cost bajo.
Setup recomendado para vos¶
- Hoy / esta semana: instalar Tessie + HA Tessie integration. 10 minutos, working.
- Mes 1: validar que aporta las 5 automations Tier S. Si sí, sigue. Si no, considerar Fleet oficial DIY.
- Mes 2+: agregar charge optimization con tarifa/solar si aplica.
- Mes 3+: AI Task plan generation si valida.
NO comprar Tessie premium tier (es solo para data junkies). El plan básico alcanza.
Failure modes específicos Tesla¶
Para el catálogo:
- Tesla API rate-limited: $10/mes free credit excedido si polling agresivo. Mitigation: aumentar polling interval, usar Tessie que comparte rate.
- Virtual key expired: command signing falla. Manual re-register.
- Tesla service outage: integration entera caída. Lock physical key as fallback.
- Charge command rejected: muchas razones (charging port issue, vehicle settings override). Notify humano, no retry blindly.
Relaciones¶
- Use case canónico de: automation-ideas-energy (smart charging).
- Use case canónico de: q7-llm-runtime-strategy-v1 (charge planning AI).
- Apoyo: notification-strategy (tier 2 charging interrupted).
Citas / evidencia¶
- Polling 10min default — ../sources/tesla-fleet-ha-integration.
- Command signing post-2023 — ../sources/tesla-fleet-ha-integration.
Abierto / gaps¶
- Pricing Tessie 2026 exacto vs el time investment de Fleet oficial DIY.
- Patrón de "departure prediction" basado en calendar / historical pattern.
- Tesla Wall Connector — ¿integration separada o via Tesla Fleet? Documentar.
- Tesla Powerwall integration — distinto endpoint, mismo Fleet.