Tim's blah blah blah

Analyzing our electricity use - dynamic contract or not?

With the energy transition, and more dynamic electriciy generation, Dutch electricity contracts are becoming more complicated. By analyzing our historical electricity consumption & production, I wanted to investigate if we can have a (significant) benefit by switching contract.

TL;DR: with ~3070 kWh supplied to grid and ~2660 kWh consumed in 2023, a variable contract costs € 201/yr (€ -95/yr with 2023 rates), and € -28/yr with dynamic contract.

Electricity providers

There’s 2.5 types of contracts you can choose from in the Netherlands:

  1. Dynamic - electricity at spotprice
  2. Variable - electricity at fixed price every quarter
  3. Fixed - electricity at fixed price for >=1 year

Prices

For variable and fixed contracts, there’s a few different rates (examples Greenchoice variable contract August 2024, rounded):

  1. Electricity price inc. tax: € 0.227/kWh
  2. Production cost (to return electricity to grid): € 0.116/kWh
  3. Production compensation (for yearly net producted elecitricy): € 0.145/kWh
  4. Fixed cost: € -0.261/day

Last year, the prices looked like this:

Consumption Production Fixed
Electricity Tax Total Oversupply Supply Provider Grid Tax Fixed
€/kWh* €/kWh* €/kWh €/kWh €/kWh €/day €/day €/day €/day
Aug ‘23 0.186 0.126 0.377 -0.05 0.00 0.256 0.971 -1.635 -0.408
Jan ‘24 0.180 0.109 0.350 -0.05 0.00 0.336 1.162 -1.725 -0.227
Apr ‘24 0.134 0.109 0.294 -0.05 0.00 0.336 1.162 -1.725 -0.227
Jul ‘24 0.110 0.109 0.264 -0.05 0.00 0.336 1.162 -1.725 -0.227
Aug ‘24 0.078 0.109 0.227 -0.145 0.116 0.306 1.159 -1.725 -0.261

* Numbers are excluding VAT

Dynamic

For dynamic contracst, the price is derived from the spotprice. E.g. Tibber (tibber.com) actuals (tibber.com) look like (see also here (tibber.com)):

  1. Electricity price: spotprice (Jul 27: € 0.08/kWh)
  2. VAT: 21% (Jul 27: € 0.043/kWh)
  3. Tax: (Jul 27: € 0.109/kWh)
  4. Other: (Jul 27: € 0.018/kWh)
  5. Total variable price: (Jul 27: € 0.25/kWh)
  6. Fixed cost: € -0.3693/day

In general, the price is given by: spotprice (shown at epexspot (epexspot.com)) + tax (€ 0.10880/kWh) + uplift (e.g. due to inbalance cost & GVO (tibber.com)) + VAT (21%).

Comparison

Using historical data I compare the two options for my situation. For pricing, only two metrics are relevant:

  1. Electricity supplied to grid (elproducted). In my case this is ~3070 kWh
  2. Electricity consumed from grid (elconsumed). In my case this is ~2660 kWh

Self-consumption does not trigger meter changes, and hence does not impact electricity cost (it can of course prevent cost in some situations).

Scenario 1a: Variable contract at Greenchoice

Variable cost:

elproducted = 3070
elconsumed = 2660

elproduced_cost_rate = 0.11616
elproduced_reward_rate = -0.145
elconsumed_cost_rate = 0.350 # doesn't matter because we produce more than we consume

elproduced_cost = min(elconsumed, elproducted) * elproduced_cost_rate # € 309
elproduced_reward = max(elproducted - elconsumed, 0) * (elproduced_reward_rate + elproduced_cost_rate) # € -12
elconsumed_cost = max(elconsumed - elproducted, 0) * elconsumed_cost_rate # € 0
elvariable_cost = elproduced_cost + elproduced_reward + elconsumed_cost # € 297

Only elproduced_reward or elconsumed_cost is nonzero, you can either consume more than produced or vice versa.

Fixed cost:

elfixed_cost = -0.26102 * 365 # = € -95

Total:

elvariable_cost + elfixed_cost # € 201

With newly introduced production cost, I would have paid € 201 for my 2023 energy usage.

Scenario 1b: Variable contract at Greenchoice

Previously without production cost, I would pay €309 less, or € -103/yr.

Scenario 2: Dynamic contract at Tibber

Here the price rate is simpler, except I have to multiply with time-dependent spotprice which I got from epexspot.

Variable cost:

elproduced = # time resolved production to grid
elconsumed = # time resolved consumption from grid

elproduced_cost_rate = elconsumed_cost_rate = # time resolved spotprice

elconsumed_cost = (elconsumed * (elconsumed_cost_rate+1.8+10.9)*1.21).sum() # € 675, € 0.254/kWh

# For all produced electricity we get the spot price + minimal uplift (i.e. no tax/VAT)
elproduced_reward1 = (elproduced * (elproduced_cost_rate+1.8)).sum() # -186
# For produced electricity we also consume we also get tax + VAT back
elproduced_reward2 = (elproduced * (elproduced_cost_rate+1.8+10.9)*0.21).sum() # € -93
elproduced_reward3 = (elproduced * (10.9)).sum() # € -290
elproduced_reward = elproduced_reward1 + elproduced_reward2 + elproduced_reward3 # € -569

elvariable_cost = elproduced_reward + elconsumed_cost # € 106

Fixed cost:

elfixed_cost = -0.3693 * 365 # = € -135

Total:

elvariable_cost + elfixed_cost # € -28

Scenario 3: Dynamic contract at Tibber without saldering

If ‘saldering’ is discontinued, with a dynamic contract I would not get the tax returns and at worst would pay € 93 + € 290 = € 383 extra per year. It’s unclear to me what the specific no saldering situation looks like, and hence whether a home battery would be a good idea or not. Better wait until the regulation is pushed out & battery tech is improved.

Home battery benefit - WIP

Battery offerings are becoming more common in the Netherlands and Europe in general. Based on above analysis, I want to calculate:

  1. How much I can increase self-consumption with a 5 or 10kWh battery
  2. How much I could earn by trading electricity at the spot market & how much this would increase my use of the grid connection (e.g. in Belgium grid connection pricing is dependent on maximum power usage per month, having a battery would increase this)

Appendix

Code used - note to self.

import influx2web

run influx2web.py --secretsfile ../secrets.yaml --debug --dry-run

mask3a = (dfspotprice.index >= '2023-09-01') & (dfspotprice.index <= '2024-07-27')
mask3b = (dfgridconsumption.index >= '2023-09-01') & (dfgridconsumption.index <= '2024-07-27')
mask3c = (dfelecmeter.index >= '2023-09-01') & (dfelecmeter.index <= '2024-07-27')
mask3d = (dfgridproduction.index >= '2023-09-01') & (dfgridproduction.index <= '2024-07-27')
mask3e = (dfconsumption.index >= '2023-09-01') & (dfconsumption.index <= '2024-07-27')
mask3f = (dfpvproduction.index >= '2023-09-01') & (dfpvproduction.index <= '2024-07-27')
maskcoverage = (365-35)/365

## Scenario 1: greenchoice average electricity price + terugleverkosten + grid connection

elterugleverkosten = 0.11616
# elterugleverkosten = 0
elterugleverwinst = 0.11616-0.145

elvast = 365*0.30551
elnetbeheer = 365*1.15858
elvermindering = 365*-1.72511
elconsumed = dfgridconsumption[mask3b].sum()/maskcoverage
elproduced = dfgridproduction[mask3d].sum()/maskcoverage
elcostselfconsumed = min(elconsumed, abs(elproduced)) * elterugleverkosten
elcostproduced = max(abs(elproduced) - elconsumed, 0) * elterugleverwinst
elcostconsumed = max(elconsumed - abs(elproduced), 0) * 0.22052
eltotal = elvast + elnetbeheer + elvermindering + elcostselfconsumed + elcostproduced + elcostconsumed
# eltotal 234.50976195107444 with cost
# eltotal -74.67723031839223 without cost

## Scenario 2: Tibber/ANWB

elvast = 12*6
elnetbeheer = 365*1.15858
elvermindering = 365*-1.72511

elconsumed = dfgridconsumption[mask3b].sum()/maskcoverage
elproduced = dfgridproduction[mask3d].sum()/maskcoverage
eloverproduction = max(abs(elproduced/elconsumed),1)

elcostconsumed = (dfgridconsumption[mask3b]/maskcoverage * (dfspotprice[mask3a]/10+1.8+10.9)*1.21).sum()/100
# elcostproduced = (dfgridproduction[mask3d]/maskcoverage * (dfspotprice[mask3a]/10+1.8+10.9)*1.21).sum()/100
elcostproduced1 = (dfgridproduction[mask3d]/maskcoverage * (dfspotprice[mask3a]/10+1.8)).sum()/100 # spot price
elcostproduced2 = (dfgridproduction[mask3d]/maskcoverage/eloverproduction * (dfspotprice[mask3a]/10+1.8+10.9)*0.21).sum()/100 # VAT
elcostproduced3 = (dfgridproduction[mask3d]/maskcoverage/eloverproduction * (10.9)).sum()/100 # tax
elcostproduced = elcostproduced1 + elcostproduced2 + elcostproduced3

eltotal = elvast + elnetbeheer + elvermindering + elcostproduced + elcostconsumed
# eltotal -27.879592891208404 (after only giving spotprice for overproduction)

#Heating #Home-Improvement #Smarthome #Electricity #Solar #Epex