Realisatie: Belpex-gestuurd energiebeheer met graduele omvormer-controle
Een dynamisch energiebeheer-systeem op basis van Belpex-uurprijzen, inclusief alle contractuele belastingen, dat de omvormer gradueel terugregelt bij negatieve injectieprijzen.
Waarom dit project
Bij een klant met dynamisch tarief, zonnepanelen, een thuisbatterij en twee Daikin airco’s stelden we vast dat de markt sneller beweegt dan een vast schema kan volgen. Belpex-uurprijzen kunnen op zonnige zomerdagen scherp negatief gaan. Op die momenten is injecteren effectief duurder dan het zelf opmaken, of zelfs dan kortstondig minder produceren.
In dit artikel leggen we uit hoe we een beslissingsboom bouwden bovenop de Belpex-prijzen, hoe we die drempels niet hardcoden maar berekenen uit de contractparameters, en waarom we de omvormer gradueel terugregelen in plaats van hem hard naar nul te sturen.
De vraag
De klant kwam met een concrete frustratie. Zijn dashboard toonde één uurprijs, maar zijn factuur reageerde anders dan dat dashboard suggereerde. De reden zit tussen “Belpex-prijs” en “wat ik écht betaal of krijg”: daar zitten contractuele belastingen, multipliers, vaste kosten en accijnzen tussen. Pas als je die meerekent, weet je waar het kantelpunt ligt tussen “afnemen is voordelig” en “injecteren is voordelig”.
Het doel werd dus tweeledig: de échte grenswaarden tonen, én het systeem die grenswaarden zelf laten gebruiken om verbruik en injectie te sturen.
Stap 1: de échte prijs uitrekenen
In het tarief van de klant zitten naast de Belpex-uurprijs ook deze componenten op afname (november 2025-factuur):
| Component | €c/kWh |
|---|---|
| Kosten groene stroom | 1,1058 |
| Kosten WKK | 0,39243 |
| Afnametarief Fluvius | 5,28932 |
| Bijdrage op energie | 0,19261 |
| Bijzondere accijns | 4,748 |
| Totaal extra | 11,73 |
Die 11,73 €c/kWh komt bovenop het Belpex-deel van het afnametarief. Op injectie zit een andere multiplier en een vaste kost. We staken al die parameters in afzonderlijke input_number helpers zodat de klant ze zelf kan bijwerken zodra de leverancier een nieuwe contractbijlage stuurt.
Vervolgens berekenen we drie sleutelsensoren via templates:
template:
- sensor:
- name: "Belpex grens injectie betalen berekend"
unique_id: belpex_grens_injectie_betalen_berekend
unit_of_measurement: "EUR/MWh"
state: >-
{% set m = states('input_number.injectie_multiplier') | float %}
{% set v = states('input_number.injectie_vaste_kost') | float %}
{{ ((-v) / m) | round(2) }}
- name: "Belpex grens afzetten berekend"
unique_id: belpex_grens_afzetten_berekend
unit_of_measurement: "EUR/MWh"
state: >-
{% set am = states('input_number.afname_multiplier') | float %}
{% set av = states('input_number.afname_vaste_kost') | float %}
{% set extra = states('input_number.afname_extra_belastingen') | float %}
{% set im = states('input_number.injectie_multiplier') | float %}
{% set iv = states('input_number.injectie_vaste_kost') | float %}
{# kantelpunt: afname-kost == injectie-opbrengst #}
{{ ((iv - av - extra * 10) / (am - im)) | round(2) }}
Wat hier gebeurt: we laten Home Assistant zelf rekenen waar het kantelpunt ligt waarop afnemen duurder wordt dan injecteren inclusief belastingen. Met de huidige contractparameters geeft dat:
- Kantelpunt afname/injectie: −74,44 €/MWh
- Afname gratis: −136,17 €/MWh
- Punt waarop je betaalt om te injecteren: +12,46 €/MWh
Geen van die drie waarden staat als magisch getal in de automatisatie. Ze worden live afgeleid uit de helpers. Pas je het contract aan, dan schuift heel het systeem mee.
Stap 2: de beslissingsboom
Op basis van die drie grenswaarden delen we de Belpex-prijs in zones. Per zone weten de batterij en de Daikin-airco’s wat te doen. Vereenvoudigd:
Belpex < −136,17 €/MWh → afname is gratis of betaald
→ batterij laden, Daikins op comfort
−136,17 ≤ Belpex < −74,44 → afname goedkoper dan injectie
→ eigen verbruik maximaliseren, batterij laden uit grid
−74,44 ≤ Belpex < 12,46 → "normale" zone
→ standaard PV-overschot-logica, batterij volgt SOC-beleid
Belpex ≥ 12,46 → injecteren betaalt, afname is duur
→ batterij ontladen waar zinvol, verbruik afbouwen
De volledige logica zit in hoofdautomatisatie_energiebeheer.yaml met meer subzones (Belpex laag/medium drempels) en SOC-condities. Het principe blijft eenvoudig: het systeem checkt elk kwartier in welke zone we zitten en stelt verbruikers en batterij daarop in.
De radiatoren in deze woning werken op een gasketel en worden niet aangestuurd. Verwarming op stroom verloopt enkel via de Daikin airco’s, die kunnen aan/af geschakeld worden voor zowel koelen als verwarmen.
Stap 3: gradueel omvormer terugregelen bij negatieve injectie
Op zomerdagen met veel zon én lage prijzen kan de injectieprijs zo negatief gaan dat elke kWh die de panelen het net op duwen geld kost. De klassieke aanpak in zo’n geval is de omvormer hard naar 0% zetten. Wij kozen voor een graduele aanpak.
- alias: Omvormer gradueel verlagen bij negatieve injectie
trigger:
- platform: time_pattern
minutes: "/15"
condition:
- condition: numeric_state
entity_id: sensor.belpex_grens_injectie_betalen_berekend
above: sensor.belpex_actuele_prijs
- condition: numeric_state
entity_id: sensor.grid_injectie_w
above: 100
action:
- service: number.set_value
target:
entity_id: number.omvormer_power_limit
data:
value: >-
{% set huidig = states('number.omvormer_power_limit') | float %}
{% set min = states('input_number.omvormer_min_power_limit') | float %}
{% set overschot = states('sensor.grid_injectie_w') | float %}
{% set stap = (5 if overschot < 500 else (10 if overschot < 1500 else 20)) %}
{{ [huidig - stap, min] | max }}
Per kwartier kijken we naar het grid-overschot. Bij een klein overschot (< 500 W) zakken we 5%, bij gemiddeld 10%, bij groot overschot 20%. Een tegenhanger-automation herstelt de power limit naar 100% zodra de prijs terug boven de “betalen voor injectie”-grens komt.
Waarom gradueel? Twee redenen. Ten eerste laat een harde sprong naar 0% de Daikins en de batterij plots zonder lokale bron, terwijl die net het overschot zouden kunnen consumeren. Het systeem zoekt liever het optimum: nul-injectie zonder de productie te hoeven killen. Ten tweede voorkomt graduele aanpassing dat we elk kwartier tussen “vol gas” en “uit” pingpongen wanneer de prijs of de bewolking beweegt.
De minimum-grens (input_number.omvormer_min_power_limit, default 10%) zorgt dat we nooit volledig stilvallen. Bij een klein overschot zakt de omvormer rustig naar dat minimum en daar stopt het.
Stap 4: de afnemers volgen mee
De twee Daikins worden per zone aan- of uitgeschakeld voor koelen of verwarmen, met de hardware-randvoorwaarde dat ze één buitenunit delen. Beide units staan dus altijd in dezelfde mode, zoals we ook in onze PV-overschot-realisatie opmerkten. Bij gunstige prijzen (negatief of laag) mogen ze actief koelen of verwarmen tot comfort. Bij dure prijzen worden ze uitgeschakeld of op een terughoudendere mode gezet.
De grenzen en mode-mappings zijn opnieuw helpers in de UI, geen hardcoded waarden. De klant heeft daardoor nu twee dashboards: één met live prijzen en zones, één met de “knoppen” om zijn eigen comfort/winst-balans bij te stellen.
Resultaat
Na drie maanden draait het systeem stabiel door winter en lente. Op de scherpste injectie-uitschieters zien we de omvormer rustig zakken naar het minimum en de batterij vullen, in plaats van geld te betalen om geld te leveren. De Daikins pakken negatieve prijspieken op door net wat extra te verwarmen of te koelen tijdens die uren.
Belangrijker dan de besparing: het dashboard toont nu wat er écht aan de hand is. De klant ziet de berekende grenswaarden naast de actuele Belpex-prijs en begrijpt waarom het systeem op een bepaald moment iets doet. Dat begrip is wat ervoor zorgt dat hij de helpers durft aan te passen wanneer de leverancier een nieuwe contractbijlage stuurt.
Wat we hieruit meenemen
Drie zaken die we ook in volgende dynamisch-tarief-projecten als basis nemen:
- Reken nooit met Belpex alleen. De échte beslissing zit in Belpex + multipliers + vaste kost + belastingen. Maak die transparant in plaats van ze te verstoppen in één getal.
- Zet contractparameters in helpers. Dan past het systeem zich aan het contract aan, niet andersom. Een bijlage van de leverancier wordt zo een UI-edit van vijf minuten.
- Gradueel beats radicaal. Bij stuurbare productie of verbruikers is een trage, voorspelbare aanpassing bijna altijd robuuster dan een binaire schakelaar.
Heb je een dynamisch tarief en wil je weten of een gelijkaardige opzet voor jou rendeert? Neem contact op. We kijken graag mee naar je contract en je installatie.