Home Assistant logo
laadpalen
12 mei 2026Ruben StolkRuben Stolk· Mede-oprichter± 6 min lezenBijgewerkt 17 sep. 2026

Joulo in Home Assistant: laadsessies, ERE en TAG-ID via één YAML-blok

De Joulo REST API koppelt rechtstreeks aan Home Assistant. Geen add-on, geen HACS. Eén YAML-blok geeft je sensors voor status, kWh, ERE-credits en de actieve TAG-ID • plus twee automations die je direct kunt overnemen.

Deel artikel

Joulo in Home Assistant: laadsessies, ERE en TAG-ID via één YAML-blok
Home Assistant logo
Integratie

Home Assistant

Direct gekoppeld aan Joulo • laadsessies en kWh komen automatisch binnen, ERE wordt zonder handwerk ingeboekt.

Bekijk Home Assistant-integratie

Je laadsessies gaan naar Joulo. Daar berekenen we ERE-credits, doen we de inboeking bij de NEa en betalen we elk kwartaal uit. Voor de meeste mensen is dat genoeg: dashboard openen, even kijken, klaar.

Maar als je Home Assistant draait wil je je laaddata waarschijnlijk ergens anders zien. Op een Lovelace-kaart naast je P1-meter. In een automation die push-stuurt als de sessie klaar is. In EVCC zodat je weet welke auto er staat te laden. Daarvoor is een Joulo-token genoeg.

Deze post is de complete walkthrough. Geen marketing, geen add-on, geen HACS. Alleen YAML.

Wat je krijgt

De Joulo REST API geeft drie endpoints. Daar bouw je in Home Assistant zoveel sensors op als je wilt:

  • GET /chargers • status per laadstation, of er actief geladen wordt, en de kWh die de huidige sessie tot nu toe heeft binnengehaald. Inclusief current_session.id_tag • de RFID/TAG-ID waarmee de auto zich identificeerde.
  • GET /sessions • lijst van recente laadsessies met kWh, start- en eindtijd, en de ERE-credits die per sessie zijn opgebouwd.
  • GET /energy • totaal geladen kWh en totaal opgebouwde ERE-credits. Eén-getalsindicatoren voor je dashboard.

Auth is een Bearer-token. Read-only. Joulo kan niets terugschrijven naar je Home Assistant.

Setup in vier stappen

1 • Token genereren

Log in op je Joulo-dashboard, open de API-tab en klik op API activeren. Je krijgt een token van 32 tekens. Kopieer hem met de kopieerknop, niet door de tekst te selecteren: het scherm verbergt een deel van het token. Kwijt? Met Nieuw token maak je een nieuwe, die zet je daarna overal opnieuw.

2 • secrets.yaml

Zet de hele headerwaarde in secrets.yaml: het woord Bearer, een spatie, en je token precies zoals het dashboard het toont. Je token begint niet met joulo_:

joulo_api_auth: "Bearer JOUW_API_TOKEN"

In configuration.yaml verwijs je er daarna naar als !secret joulo_api_auth, zonder aanhalingstekens: YAML vult een !secret niet in binnen een string. Zet je het token rechtstreeks in configuration.yaml, dan staat hij in je git-historie. Niet doen.

3 • configuration.yaml

Drie REST-resources, één per endpoint:

rest:
 - resource: https://api.joulo.nl/functions/v1/api/chargers
 scan_interval: 60
 headers:
 Authorization: !secret joulo_api_auth
 sensor:
 - name: "Joulo Charger Status"
 unique_id: joulo_charger_status
 value_template: "{{ value_json.chargers[0].status | default('unknown') }}"
 - name: "Joulo Session kWh"
 unique_id: joulo_session_kwh
 value_template: >-
 {% set s = value_json.chargers[0].current_session | default(none) %}
 {{ (s.kwh_so_far if s else 0) | float(0) }}
 unit_of_measurement: "kWh"
 device_class: energy
 state_class: total_increasing
 - name: "Joulo Active TAG ID"
 unique_id: joulo_active_tag_id
 value_template: >-
 {% set s = value_json.chargers[0].current_session | default(none) %}
 {{ s.id_tag if s and s.id_tag else '' }}
 binary_sensor:
 - name: "Joulo Is Charging"
 unique_id: joulo_is_charging
 value_template: "{{ value_json.chargers[0].is_charging | default(false) }}"
 device_class: power

 - resource: https://api.joulo.nl/functions/v1/api/energy
 scan_interval: 3600
 headers:
 Authorization: !secret joulo_api_auth
 sensor:
 - name: "Joulo Total kWh"
 unique_id: joulo_total_kwh
 value_template: "{{ value_json.total_kwh | float(0) }}"
 unit_of_measurement: "kWh"
 device_class: energy
 state_class: total_increasing
 - name: "Joulo Total ERE"
 unique_id: joulo_total_ere
 value_template: "{{ value_json.total_ere_credits | float(0) }}"
 state_class: total_increasing

 - resource: https://api.joulo.nl/functions/v1/api/sessions?limit=10
 scan_interval: 600
 headers:
 Authorization: !secret joulo_api_auth
 sensor:
 - name: "Joulo Last Session kWh"
 unique_id: joulo_last_session_kwh
 value_template: "{{ value_json.sessions[0].kwh | default(0) | float(0) }}"
 unit_of_measurement: "kWh"
 device_class: energy
 - name: "Joulo Last Session ERE"
 unique_id: joulo_last_session_ere
 value_template: "{{ value_json.sessions[0].ere_credits | default(0) | float(0) }}"

Elke sensor heeft een unique_id. Zonder die regel kan Home Assistant de entiteit niet vastleggen: je kunt hem dan niet hernoemen, en een YAML-reload kan een dubbele sensor opleveren. Joulo Is Charging staat onder binary_sensor, zodat hij on en off geeft voor de automatisering hieronder. De twee sessie-sensors binden current_session eerst aan s. Lees je current_session.kwh_so_far rechtstreeks, dan loopt het template stuk zodra er geen sessie draait. Een default-filter vangt dat niet op • de fout valt eerder.

4 • Restart

Doe een volledige restart van Home Assistant, niet alleen "Reload YAML". De rest:-integratie wordt pas geladen bij een echte restart. Een minuut later vind je de Joulo-entities terug in Developer Tools → States en kun je ze in elk dashboard of automation gebruiken.

Lovelace in vijf regels

De saaiste implementatie eerst: een standaard entities-kaart. Pak je een meer visuele kaart? Gauge, history-graph en mini-graph werken allemaal direct op deze sensors.

type: entities
title: Joulo laadstation
entities:
 - entity: sensor.joulo_charger_status
 name: Status
 - entity: binary_sensor.joulo_is_charging
 name: Laadt nu
 - entity: sensor.joulo_session_kwh
 name: Huidige sessie
 - entity: sensor.joulo_total_kwh
 name: Totaal geladen
 - entity: sensor.joulo_total_ere
 name: ERE-credits

Twee automations die je direct kunt overnemen

Push-notificatie als de sessie klaar is

Praktisch als je de auto 's nachts aan de paal hangt en in de ochtend wilt weten wat hij heeft binnengehaald:

- id: joulo_session_done
 alias: "Joulo • sessie afgerond"
 trigger:
 - platform: state
 entity_id: binary_sensor.joulo_is_charging
 from: "on"
 to: "off"
 action:
 - service: notify.mobile_app_jouw_telefoon
 data:
 title: "Laadsessie klaar"
 message: >-
 {{ states('sensor.joulo_session_kwh') }} kWh geladen.
 Totaal geladen: {{ states('sensor.joulo_total_kwh') }} kWh.

EVCC TAG-ID koppelen aan een specifieke auto

Heb je meerdere EV's in huis? Dan herkent EVCC de auto via de TAG-ID in de OCPP-sessie. Joulo levert dat veld door als current_session.id_tag op /chargers. Plak de waarde in EVCC en je krijgt per auto een eigen routine:

vehicles:
 - name: tesla
 type: template
 template: tesla
 identifiers:
 - "DEADBEEF12345678"

Werkt alleen voor laadstations die de TAG-ID daadwerkelijk meesturen in StartTransaction. Voor Tesla Wall Connector via Fleet API krijg je geen TAG-ID terug • daar is de auto al impliciet bekend.

Drie veelvoorkomende valkuilen

401 Unauthorized. Negen van de tien keer zit er een spatie of een aanhalingsteken in secrets.yaml om het token. Verwijder ze, doe een restart en check Settings → Logs. Andere kandidaten: !secret tussen aanhalingstekens in configuration.yaml, of een nieuw token in het dashboard dat je niet in secrets.yaml hebt bijgewerkt.

unavailable of unknown in States. Het value_template probeert een veld te lezen dat er nog niet is. Klassieker: current_session.kwh_so_far is null als er geen actieve sessie loopt. Lees current_session eerst in als s, zoals in de YAML hierboven, en je entity blijft op nul staan tussen sessies door.

Meerdere laadstations. chargers[0] werkt alleen voor één paal. Heb je er twee, dan kies je expliciet:

value_template: >-
 {{ value_json.chargers
 | selectattr('nickname', 'eq', 'Oprit')
 | map(attribute='is_charging') | first }}

Pollen, niet hameren

Joulo synct elke 15 minuten met de upstream-provider (Tesla, Easee, Wallbox enzovoort). Een lagere scan_interval dan 60 seconden levert je dus geen verse data. Voor /sessions en /energy is 600 seconden ruim. Voor /chargers is 60 seconden de zoete plek: je ziet binnen een minuut dat een sessie is gestart, zonder je quota op te eten.

Sneller pollen leidt op een gegeven moment tot rate-limiting. Geen drama (een 429 logregel) maar wel onnodig.

Waarom dit een Joulo-ding is

Andere ERE-inboekdienstverleners houden hun data dicht. Logisch: ze zien je laadsessies als hun bezit. Bij ons is je sessiedata je eigen data. De REST API is daar de praktische bevestiging van.

Dat betekent niet dat je iets hoeft te bouwen. Het meeste werkt gewoon vanzelf in het Joulo-dashboard en de app. Maar als je iemand bent die Home Assistant draait, EVCC gebruikt en zelf de regie wil houden over wat er met zijn laaddata gebeurt: alles wat je nodig hebt staat hierboven.

Verder lezen

Over de auteur

Ruben Stolk
Ruben StolkMede-oprichter

Mede-oprichter van Joulo en bouwer van het platform. Eerder Capptions (compliance-infrastructuur). Schrijft over techniek, integraties en MID-meters.

Over Joulo

Joulo is inboekdienstverlener voor ERE-registratie van thuislaadsessies.

34.000.000 MID-kWh dit jaar (prognose)

ERE-registratie

Stappen, kosten en opbrengst van inboeken via Joulo.

Zo werkt het
Inboekdienst

Laaddata automatisch als ERE ingeboekt, per kwartaal uitbetaald.

Hoe het werkt
White-label platform

De ERE-backend voor CPO's en energiebedrijven, onder hun eigen merk.

White-label
Partnerprogramma

Voor installateurs en energiebedrijven die klanten aanbrengen.

Partner worden

Joulo B.V. • NEa-geregistreerd • conform RED III

Aan de slag

Verdien geld met thuisladen via ERE-credits

Koppel je laadstation, Joulo regelt de rest. Standaard 20% servicekosten, lager via loyaliteit en referrals, jaarlijks opzegbaar, per kwartaal uitbetaald.

Nieuwsbrief

Blijf op de hoogte

Af en toe een mail over ERE, laadstations en verdienen met thuisladen. Geen spam, uitschrijven kan altijd.