Monitor and control your Tesla locally over Bluetooth Low Energy (BLE) from Home Assistant — no cloud, no Tesla account, no Fleet API, no internet required.
Warning
Unofficial project. Not affiliated with, authorized, or endorsed by Tesla, Inc. This integration sends real commands to a real vehicle (unlock doors, open the frunk/charge port, start climate, control charging). Use it at your own risk. "Tesla" and related marks are trademarks of Tesla, Inc.
Use this integration entirely at your own risk. It can physically actuate your vehicle over Bluetooth. The actions below physically actuate the car and can cause property damage, injury, or leave the vehicle unsecured if triggered at the wrong moment:
| Physical action | Triggered by |
|---|---|
| Lock / unlock the doors | Lock: Doors |
| Unlatch the driver's door | Button: Unlatch Driver Door |
| Open the frunk (front trunk) | Cover: Frunk · Button: Open Frunk |
| Open / close the rear trunk | Cover: Trunk |
| Open / vent / close the windows | Cover: Windows |
| Open / close the charge port | Cover: Charge Port · Button: Unlock Charge Port |
| Start / stop charging | Switch: Charging |
| Set charge limit (50–100%) | Number: Charge Limit |
| Set charging current (1–48 A) | Number: Charging Amps |
| Start / stop climate (HVAC) | Switch: Climate |
| Toggle defrost | Switch: Defrost |
| Toggle steering wheel heater | Switch: Steering Wheel Heater |
| Enable / disable Sentry Mode | Switch: Sentry Mode |
| Honk the horn | Button: Honk Horn |
| Flash the headlights | Button: Flash Lights |
| Wake the vehicle | Button: Wake Vehicle |
| Enroll a new BLE key (pairing) | Button: Pair BLE Key |
Before invoking any control — manually or via an automation — make sure it is safe to do so. Keep hands, fingers, children, pets, and objects clear of the windows, frunk, and trunk, and never trigger actions when someone or something could be harmed, or when doing so would leave the vehicle in an unsafe or insecure state. Build and test any automations that actuate the car with extreme care.
No warranty. No liability. This software is provided "as is", without warranty of any kind (see LICENSE, GPLv3 §15–17). The author(s) and contributors are not responsible or liable for any damage, loss, injury, theft, security exposure, voided warranty, or any other consequence whatsoever arising from the installation or use of this integration. You alone are responsible for how you use it and for complying with all applicable laws and Tesla's terms of service.
- 100% local & cloudless. All communication is direct BLE to the car. There are no calls to Tesla's owner-api or Fleet API, no OAuth, and no account credentials. Your pairing keys and session data live only in Home Assistant's local storage.
- ★ First-class ESPHome Bluetooth Proxy support. Built directly on Home
Assistant's native Bluetooth stack, so any
ESPHome Bluetooth Proxy
that Home Assistant already knows about is used automatically — no extra
configuration. This lets you reach the car anywhere on your property, not just
next to the HA host.
- Automatic multi-proxy failover & load-balancing. When several proxies can see the vehicle, the integration picks the one with the strongest signal (RSSI). If a proxy fails repeatedly, it automatically flips to the next-best proxy and puts the failing one on a short cooldown so it doesn't get stuck on a flaky or busy node.
- Resilient connections via
bleak-retry-connector(service caching, stale-connection cleanup, sane connect timeouts). - 💡 Tip: Blanket your property (garage, driveway, street) with multiple cheap ESP32 Bluetooth proxies for seamless coverage as the car moves.
- Smart, adaptive polling. Polls fast while charging or just-woken, slower while parked/asleep — keeping data fresh without keeping the car awake unnecessarily.
- Robust command handling. Separate prioritized command queues for the vehicle's security (VCSEC) and infotainment domains, automatic session re-authentication, and wake/sleep + out-of-range detection.
- Home Assistant 2024.1.0 or newer.
- A Tesla vehicle that supports the BLE vehicle-command protocol (Model 3 / Model Y; newer Model S / Model X).
- A connectable Bluetooth source within range of the vehicle — either a local Bluetooth adapter on your HA host, or (recommended) one or more ESPHome Bluetooth Proxies.
- Your Tesla key card (or phone key) to authorize pairing.
Python dependencies (protobuf, cryptography) are installed automatically by
Home Assistant.
- In Home Assistant, open HACS.
- Click the ⋮ menu (top-right) → Custom repositories.
- Add the repository URL
https://github.com/Daniel-dev22/tesla_bleand select category Integration. - Search for Tesla BLE, open it, and click Download.
- Restart Home Assistant.
- Download the latest release.
- Copy all files into
config/custom_components/tesla_ble/. - Restart Home Assistant.
Pairing enrolls Home Assistant as a BLE key on your vehicle — the same mechanism Tesla uses for phone keys and key fobs:
- Home Assistant generates a cryptographic key pair locally. The private key never leaves Home Assistant's local storage; only the public key is enrolled on the car.
- Over BLE, the integration asks the vehicle to add that public key to its whitelist (the vehicle's VCSEC security domain).
- You physically authorize the new key by tapping an existing key card on the center-console reader — proving you have access to the car. This is why pairing must be done in person; it cannot be done remotely.
- From then on, Home Assistant signs every command with its private key and the vehicle trusts it. No Tesla account, cloud, or internet is involved.
- Be inside / next to the vehicle with an existing authorized key (key card or phone key).
- The vehicle must be awake and within Bluetooth range of a connectable adapter or ESPHome proxy.
- Settings → Devices & Services → Add Integration → Tesla BLE.
- Enter your vehicle's 17-character VIN (and an optional device name). The integration locates the car by the BLE name it advertises, which is derived from the VIN — so the VIN must be exact.
- If more than one adapter/proxy sees the car, pick the device to pair through.
- When prompted, inside the car:
- Put the vehicle in Park.
- On the touchscreen: Controls → Locks → Add Key.
- Select "Key Fob" when prompted.
- Tap your key card on the center-console card reader to authorize the new key.
- Home Assistant confirms enrollment, then lets you set your polling preferences. Done.
Keys and session data are stored only in Home Assistant's local storage, and sessions re-establish automatically (including after a restart). If you ever need to pair again — for example after removing the key on the car — use the Pair BLE Key button on the device.
The flow reports the specific reason so you can fix it and retry:
- Valet Mode is enabled — disable it and retry.
- The key is already on the whitelist — remove it on the car first, or use a different key.
- The key has no permission to be added — use an authorized key.
- The request was denied or cancelled on the touchscreen — accept it on the car and retry.
- The card tap timed out — tap your key card promptly when the car prompts.
- Cannot connect / no devices found — confirm the car is awake and within range of a connectable Bluetooth source.
The integration exposes ~40+ entities across the platforms below. There is no
Home Assistant climate entity — climate is exposed as discrete switches, binary
sensors, and temperature sensors (rows marked climate).
| Entity | Description |
|---|---|
| Charge Level | Battery state of charge (%) |
| Charge Limit | Configured charge limit (%) |
| Range | Estimated remaining range |
| Charging State | Disconnected / Stopped / Charging / Complete |
| Charge Current | Actual charging current (A) |
| Charge Voltage | Charging voltage (V) |
| Charge Power | Charging power (kW) |
| Charge Energy Added | Energy added this charge session (kWh) |
| Charge Miles Added | Range added this charge session |
| Minutes to Limit | Estimated minutes until the charge limit is reached |
| Requested Charge Current | Charge current requested by the vehicle (A) |
| Interior Temperature | Cabin temperature (climate) |
| Exterior Temperature | Outside temperature (climate) |
| Odometer | Total distance traveled |
| Vehicle Power | Instantaneous vehicle power |
| Shift State | P / R / N / D |
| GPS Timestamp | Time of the last GPS fix |
| Defrost Mode | Current defrost mode (climate) |
| Sentry Mode State | Current Sentry Mode state |
| Tire Pressure — Front Left / Front Right / Rear Left / Rear Right | Per-wheel tire pressure |
| Tire Pressure — Recommended Front / Recommended Rear | Recommended tire pressures |
| BLE Signal | RSSI of the connected Bluetooth proxy / adapter |
| Entity | Description |
|---|---|
| Asleep | Whether the vehicle is asleep |
| User Present | Whether a user / driver is present |
| Doors Locked | Door lock state |
| Charge Port Open | Charge port door open |
| Driver Front / Driver Rear / Passenger Front / Passenger Rear Door Open | Per-door open state |
| Climate On | Whether climate is running (climate) |
| Defrost | Whether defrost is active (climate) |
| Frunk Open | Front trunk open |
| Trunk Open | Rear trunk open |
| Windows Open | Any window open |
| Sentry Mode | Sentry Mode active |
| Preconditioning | Battery / cabin preconditioning active (climate) |
| Steering Wheel Heater | Steering wheel heater on (climate) |
| Entity | Description |
|---|---|
| Charging | Start / stop charging |
| Climate | Turn climate (HVAC) on / off (climate) |
| Defrost | Toggle defrost (climate) |
| Steering Wheel Heater | Toggle steering wheel heater (climate) |
| Sentry Mode | Enable / disable Sentry Mode |
| Entity | Description |
|---|---|
| Pair BLE Key | Start BLE key pairing with the vehicle |
| Honk Horn | Honk the horn |
| Flash Lights | Flash the headlights |
| Wake Vehicle | Wake the vehicle from sleep |
| Open Frunk | Open the front trunk |
| Unlock Charge Port | Unlock / open the charge port |
| Unlatch Driver Door | Unlatch the driver's door |
| Entity | Description |
|---|---|
| Doors | Lock / unlock the doors |
| Entity | Description |
|---|---|
| Frunk | Open the front trunk (open only) |
| Trunk | Open / close the rear trunk |
| Charge Port | Open / close the charge port |
| Windows | Vent / close the windows |
| Entity | Range | Description |
|---|---|---|
| Charge Limit | 50–100% | Set the charge limit |
| Charging Amps | 1–48 A | Set the charging current |
All cadences are configurable during setup and later via the integration's Configure option. Defaults mirror the ESPHome Tesla BLE component:
| Setting | Default | Description |
|---|---|---|
| Update Interval | 10 s |
VCSEC keepalive poll cadence |
| Fast Poll Duration After Wake | 300 s |
How long to poll quickly after the car wakes |
| Awake Poll Period | 60 s |
Data poll cadence while awake |
| Asleep Poll Period | 60 s |
Data poll cadence while asleep |
| Charging Poll Period | 10 s |
Fast data poll cadence while charging |
| Offline Grace Period | 300 s |
Delay before marking the device unavailable |
| Fast Poll When Unlocked | 0 |
Poll quickly while the car is unlocked (0/1) |
| Wake Vehicle On Startup | 0 |
Wake the car when HA starts (0/1) |
- "No Tesla BLE devices found nearby." The car must be awake and within range of a connectable Bluetooth source. Passive-only scanners won't work — use a local adapter or an ESPHome proxy configured for active connections.
- Pairing tap timed out. Re-run pairing and tap your key card on the center-console reader promptly when the car prompts you.
- Flaky connections in a large property. Add more ESPHome Bluetooth proxies; the integration will automatically use whichever proxy has the best signal and fail over between them.
- Protobuf definitions are generated from Tesla's open-source
vehicle-commandrepository (Apache License 2.0). Seeproto/README.mdfor regeneration details. - Architectural reference: the ESPHome Tesla BLE component.
Licensed under the GNU General Public License v3.0 — see LICENSE.