Stappenplan: je Tesla slim laden op zonnestroom – mét bluetooth, zonder API

Een Tesla opladen op je eigen zonnestroom klinkt simpel. Maar wie het echt slim wil doen – laden starten als de zon schijnt, stoppen als de prijs stijgt, de stroom per minuut bijregelen – loopt al snel tegen een muur aan: de Tesla API. In dit stappenplan bouw je voor zo’n €20 een lokale Bluetooth-koppeling waarmee Home Assistant (en EVCC) je Tesla rechtstreeks aanstuurt. Volledig lokaal, razendsnel en zonder beperkingen.
Het doel: rijden op je eigen zonnestroom
Rijd je elektrisch, dan wil je uiteraard slim laden. Door je auto op de juiste momenten te laten laden, gebruik je meer hernieuwbare stroom (lees: zon of wind), help je het stroomnet door pieken te vermijden én ben je goedkoper uit doordat je laadt wanneer de stroomprijs het laagst is.
Het probleem
Om slim te kunnen laden wil je meerdere signalen naar je auto kunnen sturen. Je wilt een laadsessie kunnen starten of stoppen, en tijdens het laden regelmatig bijsturen (bijvoorbeeld de laadstroom verhogen als er meer zonne-overschot is, of juist verlagen als de prijs stijgt of je huishoudverbruik toeneemt).
En precies daar loopt het spaak wanneer je een Tesla hebt. De Tesla Fleet API kent namelijk strikte limieten: maximaal 300 data-opvragen per dag, 50 commando’s per dag en zelfs maar 5 laadcommando’s per dag. Met een slim laadalgoritme dat meerdere keren per dag wil bijregelen, zit je dus al snel tegen die rate limits aan — en dan wordt slim laden ineens onbetrouwbaar of onmogelijk.
De oplossing
Gelukkig zijn groene nerds niet voor een gat te vangen. Naar aanleiding van mijn artikel over slim laden met EVCC, deelde Donny van Gulik zijn slimme workaround op Github. Overigens baseerde Donny zich weer op het originele project van PedroKTFC/esphome-tesla-ble. Om de rate limits van de Tesla API te omzeilen bedacht hij om met niet via de API met zijn Tesla te communiceren, maar lokaal via bluetooth. Tesla’s ondersteunen een Bluetooth Low Energy (BLE) koppeling, zolang het bluetooth-apparaat maar dichtbij genoeg bij de auto staat. In dit artikel leg ik uit hoe Donny dit doet.
Kan het niet op een andere manier?
Ja. Je zou ook het slim laden kunnen aansturen via je laadpaal. De laadpaal moet dan een zonnestroommodus hebben. Voorbeelden van slimme laadpalen met een zonnemodus zijn de myEnergi Zappi en Easee i.c.m. een Easee Equalizer. Wanneer je laadpaal zonnestroomladen ondersteunt, dan volgt de Tesla gewoon de stroom die de laadpaal aanbiedt, en de auto past zich aan dat aanbod aan. Er hoeft dan geen enkel commando naar de Tesla API gestuurd te worden.
De oplossing in dit artikel is vooral relevant als je:
- ✅ Het batterijniveau (SoC) van de auto wilt uitlezen. Om echt goed slim te kunnen laden wil je de actuele batterijstand periodiek kunnen uitlezen.
- ✅ De laadlimiet wilt aanpassen (bijv. alleen laden tot 80% op werkdagen, 100% voor een lange rit).
- ✅ Geen laadpaal hebt met ‘zonnestroommodus’
- ✅ Je laadpaal niet goed extern aangestuurd kan worden. Bijvoorbeeld omdat je er niet lokaal via LAN, WiFi of via de cloud bij kunt.
- ✅ Cloud API van de laadpaal te strenge rate limits heeft. Dus eigenlijk dezelfde beperkingen kent als bij Tesla: je kunt niet vaak genoeg commando’s sturen om het laden goed te kunnen aansturen op basis van de opwek van je zonnepanelen.
- ✅ Je een elektrische auto hebt die in slaap valt als ze te lang niks doen. Wanneer er bijvoorbeeld twee uur pauze valt in een laadsessie, gaat de auto in slaapmodus en zul je hem wakker moeten maken voordat hij weer actief wordt. Dat is bij Tesla ook het geval. Met deze oplossing kun je ook je auto wakker maken.
Zou je de denkwijze uit dit artikel willen toepassen op een andere auto, dan kunnen er nog extra redenen zijn:
- 💡 Sommige elektrische auto’s vereisen een ‘start laden’ commando als je vanuit pauze het laadvermogen weer opvoert. Ze zien het terugkomen van vermogen dan niet automatisch als een signaal om het laden te hervatten. Je moet in feite een nieuwe laadsessie activeren.
Inhoudsopgave
- Het doel: rijden op je eigen zonnestroom
- Wat gaan we maken
- De bouwstenen
- Stap 1: Benodigdheden
- Stap 2: ESPHome Device Builder add-on installeren
- Stap 3: Firmware voorbereiden
- Stap 4: Tesla BLE MAC-adres vinden
- Stap 5: Firmware flashen
- Stap 6: ESP32 als BLE-sleutel pairen met je Tesla
- Stap 7: Hoppa! Je Tesla via bluetooth in Home Assistant
- Zonnestroomladen via Home Assistant
- FAQ
Wat gaan we maken
We gaan een kleine minicomputer (microcontroller) maken die via Bluetooth met je Tesla kan praten. Die microcontroller koppelen we aan Home Assistant, zodat je lokaal slim kunt laden, bijvoorbeeld op basis van de opwek van je zonnepanelen, zonder de rate limits van de cloud-API.
Praktisch: zet je slimme kastje in je laadpaal
Het is daarbij wel van belang dat je de microcontroller plaatst binnen het bluetooth-bereik van je Tesla. Het voordeel van een microcontroller is dat hij zo klein is, dat je hem in je laadpaal kwijt kunt.
De tech stack
Voor de microcontroller maken we gebruiken van ESP32 (hierna meer info hierover). Dat kastje koppelen we aan Home Assistant met ESPHome. Via deze weg krijg je in Home Assistant de beschikking over controls en sensoren waarmee je je Tesla slim kunt aansturen. Dat kan met een automation in Home Assistant zelf, of met EVCC.
De bouwstenen
ESP32 en ESPHome
Een ESP32 is een kleine, goedkope microcontroller. Een soort mini-computertje zonder scherm dat je zelf programmeert voor een specifieke taak. Het is populair bij groene nerds omdat het voor een paar euro een WiFi- én Bluetooth-verbinding heeft, zuinig is met stroom en betrouwbaar draait. Er zijn tientallen varianten verkrijgbaar, van een simpel bordje ter grootte van een vinger tot complete modules met ethernetaansluiting of display. Precies wat we nodig hebben: een klein kastje dat we dicht bij de auto kunnen hangen en dat via Bluetooth met de Tesla praat.
Om zo’n ESP32 te programmeren gebruiken we ESPHome. ESPHome is een platform waarmee je ESP32-apparaten configureert met simpele YAML-bestanden. Geen complexe code, geen compileren in een programmeeromgeving. Je beschrijft in een tekstbestand wat je apparaat moet doen, ESPHome bouwt de firmware en flasht die via de browser naar het bordje. Een groot voordeel: ESPHome integreert direct en automatisch met Home Assistant. Zodra het bordje draait, verschijnen de sensoren en knoppen vanzelf als entiteiten in Home Assistant, die jij – en EVCC – vervolgens kunt gebruiken.
Het WiFi/BLE-antenneprobleem (en waarom PoE beter is)
De meeste ESP32-bordjes delen één radio-antenne voor zowel WiFi als Bluetooth. In de praktijk levert dit problemen op: verbindingsuitval, langzame reacties, en soms kan het bordje simpelweg niet tegelijkertijd een stabiele WiFi-verbinding onderhouden én BLE-communicatie met de auto doen.
De elegante oplossing is een ESP32-bordje met Ethernet (PoE). Door de netwerkverbinding via een ethernetkabel te laten lopen, is de antenne exclusief beschikbaar voor Bluetooth. Dit geeft een betrouwbaardere en stabielere verbinding met je Tesla. Een bijkomend voordeel: Power over Ethernet (PoE) zorgt dat het bordje ook via dezelfde kabel gevoed wordt: één kabel voor alles.
De hardware
Je kunt het met allerlei verschillende hardware bouwen, maar wij houden ons aan het shoppinglijstje van Donny. Voor een paar tientjes ben je klaar.
- Bordje: Waveshare ESP32‑S3‑PoE ETH Ethernet Development Board (Wi‑Fi + Bluetooth, with PoE module)
- Ethernet PHY: W5500 (SPI). De YAML mapt de benodigde pins (clk, mosi, miso, cs, int, reset).
- Behuizing: Een remixed case van Makerworld met ruimte voor het PoE shield.
Dit heb je al voor elkaar
Ik ga er voor deze handleiding vanuit dat je – uiteraard – beschikt over een Tesla. En je:
- Home Assistant hebt draaien
- De P1-meter in Home Assistant kunt uitlezen, of
- De opwek van je zonnepanelen in Home Assistant kunt uitlezen
Stap 1: Benodigdheden
Koop een ESP32-bordje naar keuze. Wij gaan voor bovenstaande boodschappenlijst.
Zorg daarnaast voor:
- Een USB-C-kabel (voor de eerste keer flashen)
- Je Tesla Key Card (nodig voor het pairen)
- Een computer (Mac, Windows of Linux)
Stap 2: ESPHome Device Builder add-on installeren
Installeer de ESPHome Device Builder add-on in Home Assistant als je die nog niet hebt:
- Ga naar Instellingen → Add-ons → Add-on Store
- Zoek naar “ESPHome Device Builder” en installeer
- Start de add-on en open het dashboard

Stap 3: Firmware voorbereiden
Download of kloon het donnyvangulik/esphome-tesla-poe project:
- Open het ESPHome dashboard in Home Assistant
- Maak een nieuw device aan
- Kopieer de inhoud van
tesla-ble-example.ymluit het project als basis - Maak een
secrets.yamlaan met:
textwifi_ssid: "jouw-wifi-naam"
wifi_password: "jouw-wifi-wachtwoord"
tesla_vin: "JOUW_TESLA_VIN"
ble_mac_address: "XX:XX:XX:XX:XX:XX" # Later in te vullen
Let op bij WiFi-bordjes: Als je niet voor PoE gekozen hebt maar voor WiFi, vervang dan het ethernet: blok door een wifi: configuratie. De exacte pinnen verschillen per bordje — raadpleeg de wiki van het project of de documentatie van je specifieke board.
Stap 4: Tesla BLE MAC-adres vinden
Er zijn twee methoden om het BLE MAC-adres van je Tesla te vinden:
Methode A — BLE Scanner app (aanbevolen):
- Download een BLE Scanner-app op je telefoon (iPhone hier en de Android-versie hier)
- Ga dicht bij je auto staan
- Scan naar BLE-apparaten — je Tesla verschijnt als een apparaat dat begint met “S” gevolgd door een reeks tekens
- Noteer het MAC-adres
Methode B — Via het ESP32-bordje:
- Bouw en flash de
ble-scanner.ymlconfiguratie uit het project - Bekijk de ESPHome-logs in Home Assistant
- Zorg dat je Tesla wakker is (bijv. via de Tesla-app)
- Zoek in de logs naar:
Found Tesla vehicle | Name: S... | MAC: XX:XX:XX:XX:XX:XX
Vul het gevonden MAC-adres in bij ble_mac_address in je secrets.yaml.
Stap 5: Firmware flashen
- Sluit het ESP32-bordje via USB aan op je computer
- Compileer en upload de firmware via ESPHome Device Builder:
- Klik op het device in het ESPHome-dashboard
- Kies Install → Plug into this computer
- Wacht tot de firmware is geüpload
- Na de eerste flash kun je toekomstige updates draadloos (OTA) doen
Stap 6: ESP32 als BLE-sleutel pairen met je Tesla
Dit is een cruciale stap — de ESP32 moet worden geautoriseerd als “sleutel” voor je Tesla:
- Zorg dat het ESP32-bordje binnen bluetooth-bereik van je auto staat
- Ga in je auto zitten
- Ga in Home Assistant naar Instellingen → Apparaten en services → ESPHome
- Klik op je Tesla BLE-device
- Druk op de knop “Pair BLE Key”
- Leg je Tesla Key Card op de middenconsole wanneer het scherm in de auto hierom vraagt. Zie deze animatie:

Ter verduidelijking: bij het pairen van een nieuw BLE-sleutelapparaat met een Tesla moet je de Tesla Key Card tegen de kaartlezer op de middenconsole houden ter verificatie/autorisatie. Dat is de standaard Tesla-procedure om een nieuwe “sleutel” te autoriseren — de Key Card bevestigt dat jij de eigenaar bent die toestemming geeft.
Het ESP32-bordje hoeft niet fysiek op de middenconsole gelegd te worden, maar het moet wel binnen bluetooth-bereik van de auto zijn op het moment van pairen. Dus het bordje mag gewoon op zijn vaste plek hangen, zolang dat maar dicht genoeg bij de auto is. - Accepteer de koppeling op het autoscherm

- Hernoem de sleutel naar iets herkenbaars, bijv. “Tesla BLE”

Belangrijk: Het VIN en BLE MAC-adres moeten exact kloppen, anders lukt het pairen niet.
Stap 7: Hoppa! Je Tesla via bluetooth in Home Assistant
Na succesvolle koppeling verschijnen er automatisch entiteiten in Home Assistant, vergelijkbaar aan de entiteiten die je krijgt als je je Tesla via de cloud verbindt. In deze screenshots zie je alle controls, diagnostics en sensoren die je tot je beschikking hebt:




Voor het laden van je auto zijn dit de relevante entiteiten:
sensor.tesla_ble_*_charge_level— Batterij SoC (%)number.tesla_ble_*_charging_amps— Laadstroom instellen (A)number.tesla_ble_*_charging_limit— Laadlimiet (%)switch.tesla_ble_*_charger_switch— Laden aan/uitbutton.tesla_ble_*_wake_up— Auto wakker makenbinary_sensor.tesla_ble_*_charge_flap— Laadklep statussensor.tesla_ble_*_ble_signal— BLE-signaalsterkte
Zonnestroomladen via Home Assistant
Ik bespreek hier twee manieren hoe je kunt zonnestroom laden in Home Assistant. De eerste is puur Home Assistant en de tweede is via EVCC in Home Assistant.
Optie 1: Puur Home Assistant
Dit kan, en er zijn werkende voorbeelden van. De kern is een Home Assistant automatisering die:
- Het overschot meet (via je slimme meter, P1 dongle of inverter)
- Bij voldoende overschot de laadsessie start via je microcontroller
- Elke paar minuten de laadstroom (ampère) bijstelt op basis van het actuele overschot
- Bij onvoldoende overschot de laadsessie pauzeert
Het voordeel van deze methode: je hebt geen extra software nodig en je hebt volledige controle via YAML. Maar de nadelen zijn groot. Je moet de logica zelf bouwen en onderhouden en er is geen kant-en-klare UI. Daarom raad ik eigenlijk meteen optie twee aan.
Optie 2: Via EVCC (met Home Assistant)
Een tijd geleden ontdekte ik EVCC en sindsdien ben ik om. EVCC is open source slimmelaadsoftware die je ook binnen Home Assistant kunt draaien, en daarmee gebruik kan maken van alle entiteiten in Home Assistant. Het grote voordeel van EVCC is dan ook dat het al heel veel functionaliteiten heeft voor slim laden.
Zo beschikt EVCC standaard over een modus voor zonnestroom-laden. Je kiest gewoon “Solar mode” in de UI en EVCC regelt de rest:
- Laden start automatisch als het PV-overschot boven de minimale laadstroom komt (1,4 kW bij 1-fase, 4,1 kW bij 3-fase)
- Laadvermogen wordt continu bijgeregeld om zo min mogelijk van het net te trekken
- Bij onvoldoende zon wordt laden gepauzeerd en later hervat
- Min+Solar mode: laden begint direct op minimaal vermogen, en wordt opgehoogd bij zon — ideaal als je auto niet houdt van vaak starten/stoppen
Stappenplan:
Stap 1: EVCC installeren als Home Assistant add-on
Zie daarvoor het artikel over het installeren van EVCC
Stap 2: Je hardware toevoegen
Om zonnestroomladen te laten werken moet je het volgende toevoegen aan EVCC:
- Je slimme meter
- Je laadpaal
- En je Tesla (zie volgende stap)
Stap 3: Richt EVCC in met een vehicle‑API‑lader
EVCC regelt het laden standaard via de laadpaal. In dit geval willen we dat via de Tesla aansturen. EVCC heeft in dat scenario nog steeds een “charger” nodig in de configuratie, maar dat mag een vehicle‑API‑lader zijn: een fictieve lader die onder water de auto aanstuurt in plaats van de laadpaal.
Definieer in evcc.yaml een charger van het type vehicle-api (naam kun je zelf kiezen):
chargers:
- name: tesla_api_charger
type: template
template: vehicle-api
Definieer je Tesla als vehicle via het homeassistant‑template, waarbij je alle relevante Tesla‑BLE‑entiteiten koppelt:
vehicles:
- name: tesla_ble
type: template
template: homeassistant
title: Tesla Model 3
capacity: 60 # accucapaciteit in kWh
uri: http://homeassistant.local:8123
token: JOUW_LONG_LIVED_ACCESS_TOKEN
soc: sensor.tesla_ble_charge_level
status: sensor.tesla_ble_charging_state
limitSoc: number.tesla_ble_charging_limit
setMaxCurrent: number.tesla_ble_charging_amps
start_charging: script.tesla_ble_start_charge
stop_charging: script.tesla_ble_stop_charge
wakeup: button.tesla_ble_wake_up
In Home Assistant maak je de scripts voor starten/stoppen (die onder water de ESPHome‑BLE‑switch bedienen):
script:
tesla_ble_start_charge:
sequence:
- service: switch.turn_on
target:
entity_id: switch.tesla_ble_charger_switch
tesla_ble_stop_charge:
sequence:
- service: switch.turn_off
target:
entity_id: switch.tesla_ble_charger_switch
Verbind alles in site en loadpoints – hier koppel je de grid‑ en PV‑meters aan de vehicle‑API‑charger en de Tesla:
site:
title: Thuis
meters:
grid: my_grid # uit eerdere stap
pv:
- my_pv
loadpoints:
- title: Oprit
charger: tesla_api_charger
vehicle: tesla_ble
enable:
delay: 1m
threshold: -2000 # start bij ~2000 W overschot
disable:
delay: 30m
threshold: 2000 # stop na 30 min >2000 W netafname
Stap 4: Zonnestroom‑laden activeren in de EVCC
Nu EVCC weet:
- wat je netverbruik en PV‑opbrengst zijn (meters),
- welke “lader” hij moet aansturen (vehicle‑API),
- en hoe hij de Tesla via BLE moet bedienen (vehicle),
kun je zonnestroom‑laden inschakelen in de webinterface.
- Open EVCC
- Selecteer je laadpunt “Oprit”.
- Kies bij modus:
Vanaf dat moment gebeurt het volgende, volledig automatisch:
- EVCC berekent continu het actuele PV‑overschot uit je grid‑ en PV‑meters.
- Op basis van de ingestelde drempels (
enable/disable) bepaalt EVCC of er geladen mag worden. - EVCC stuurt via de tesla_api_charger een nieuw laadstroom‑setpoint naar de auto (via
setMaxCurrentop je Tesla BLE‑vehicle). - Zo nodig stuurt EVCC een
start_chargingofstop_chargingcommando naar de auto, en gebruikt zo nodig ookwakeupom de auto wakker te maken.
De standaard interval in EVCC is 30 seconden. Elke 30 seconden:
- Leest EVCC alle meters opnieuw uit (grid, PV)
- Berekent het overschot
- Past indien nodig de laadstroom aan
Dit interval is configureerbaar in evcc.yaml:
textinterval: 30s # standaard
Het resultaat:

FAQ
Hier wat oplossingen voor veelvoorkomende fouten / vragen.
Als de build in ESP Home builder mislukt
❗ Begin altijd met het voorbeeld-yaml-bestand tesla-ble-example.yml. Dit is vele malen getest en zou in vrijwel alle gevallen moeten werken.
Als de build mislukt, probeer dan het volgende (ervan uitgaande dat je bouwt via de ESPHome-add-on in Home Assistant):
- Verwijder in de ESPHome-add-on de buildbestanden via de knop Clean Build Files (zie afbeelding hieronder) en probeer opnieuw te installeren. Als dat niet werkt, ga dan naar de volgende stap.

- Klik in de ESPHome-add-on op de optie Clean All (zie afbeelding hieronder) en probeer opnieuw te installeren. Als dat nog steeds niet werkt, ga dan naar de volgende stap.

- Verwijder de ESPHome-add-on en installeer deze opnieuw, en probeer daarna opnieuw te installeren.








