SEM-documentatie

Batterij-exportarbitrage

Opgeslagen energie terugverkopen aan het net als de terugleverprijs hoog is: hoe het werkt, de economie, de vangrails en hoe je het inschakelt (standaard uit).

Nederlandse vertaling van de officiële SEM-documentatie (MIT-licentie). Origineel: BATTERY_EXPORT_ARBITRAGE.md op GitHub. Bij verschillen is de Engelse versie leidend.

๐Ÿ”’ Gekoppeld, getest en standaard UIT (v2.0)

Het verkoopmechanisme is volledig ingebouwd in het energieplan (dezelfde ene poort die de vensters voor auto en lasten plant) en gedekt door een eigen testmatrix met scenario’s โ€” maar elke standaard houdt het sluimerend (#533): de globale schakelaar wordt uit geleverd, en de opt-ins in de interface worden nog achtergehouden totdat de functie lang genoeg heeft gedraaid. Er wordt niets verkocht tenzij je het bewust aanzet.

Bij een dynamisch tarief / spottarief (EPEX, Tibber, Nord Pool, aWATTar, โ€ฆ) schommelt de prijs die je voor teruglevering krijgt sterk โ€” vaak negatief (je betaalt om terug te leveren) en soms ver boven de kosten van laden. De laadplanner voor de batterij van SEM koopt al laag in (hij laadt in de goedkoopste uren). Exportarbitrage voegt de andere helft van laag kopen, hoog verkopen toe: het ontlaadt de thuisbatterij naar het net als de terugleverprijs hoger is dan de kosten om haar later weer op te laden.

Opt-in. Standaard UIT. SEM ontlaadt je batterij nooit geforceerd tenzij je dit aanzet.

โš ๏ธ Controleer eerst je aansluitovereenkomst

Sommige netbeheerders en terugleverregelingen verbieden het terugleveren van opgeslagen energie (uit de batterij) โ€” het terugleveringscontract dekt alleen PV-productie, en terugleveren uit de batterij kan de aansluitovereenkomst schenden of een terugleververgoeding laten vervallen. Geldt dat voor jou: laat arbitrage UIT en gebruik de batterijmodus Force discharge niet โ€” beide sturen bewust batterij- energie naar het net. Al het andere in SEM (laadplanning, eigen verbruik, piekafvlakking, laden van de auto op zon) levert je batterij nooit terug en wordt door zulke beperkingen niet geraakt.

Het paar sensor.sem_flow_battery_to_grid_power / โ€ฆ_energy (v2.0) toont precies hoeveel batterij-energie naar het net is gegaan โ€” bij een installatie met beperkingen is het ook je bewijs dat het antwoord nul is.

Wat de modus doet โ€” รฉรฉn dag in twee plaatjes

De prijscurve bepaalt alles. SEM laadt de batterij in de goedkoopste nachturen (dat deel is de normale laadplanner) en verkoopt opgeslagen energie alleen terug aan het net binnen de avondpiek in de prijs, en alleen als de piek meer oplevert dan de batterij later weer vullen kost:

 โ‚ฌ/kWh   (day-ahead spot price)
 0.45 โ”ค                                            โ•ญโ”€โ”€โ”€โ•ฎ
 0.40 โ”ค                                          โ•ญโ”€โ•ฏโ–’โ–’โ–’โ•ฐโ•ฎ      โ–’ SELL block
 0.35 โ”ค                                        โ•ญโ”€โ•ฏโ–’โ–’โ–’โ–’โ–’โ–’โ•ฐโ•ฎ       (18โ€“21 h,
 0.30 โ”คโ”€โ•ฎ                                    โ•ญโ”€โ•ฏโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ•ฐโ”€โ•ฎ      price peak)
 0.25 โ”ค โ•ฐโ”€โ•ฎ                               โ•ญโ”€โ”€โ•ฏ             โ•ฐโ”€โ”€โ”€
 0.20 โ”ค   โ•ฐโ”€โ”€โ•ฎ                         โ•ญโ”€โ”€โ•ฏ
 0.15 โ”ค      โ•ฐโ”€โ”€โ•ฎ                  โ•ญโ”€โ”€โ”€โ•ฏ
 0.10 โ”ค         โ•ฐโ”€โ”€โ•ฎโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ          โ–ˆ CHARGE block
 0.05 โ”ค            โ•ฐโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•ฏ                    (02โ€“05 h, price valley)
      โ””โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ†’
        00  02  04  06  08  10  12  14  16  18  20  22   hour

Wat de laadtoestand van de batterij op diezelfde dag doet:

 SOC %
 100 โ”ค                 โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
  80 โ”ค             โ•ญโ”€โ”€โ”€โ•ฏ   (solar tops up      โ•ฐโ”€โ•ฎ
  60 โ”ค         โ•ญโ”€โ”€โ”€โ•ฏ        during the day)      โ•ฐโ”€โ”€โ•ฎ   selling STOPS at the
  50 โ”คโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                    โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  arbitrage
     โ”ค                                                         reserve (50 %)
  20 โ”ค ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  ยท  backup reserve (20 %)
     โ””โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ†’
       00  02  04  06  08  10  12  14  16  18  20  22   hour

Drie dingen die de plaatjes laten zien:

  • De verkoop vindt alleen plaats binnen een gepland blok. Het energieplan zet het verkoopvenster de avond ervoor op basis van de prijscurve, naast de vensters voor auto en lasten, zodat alles concurreert om dezelfde nacht onder dezelfde piekgrens. Geen blok in het plan โ€” geen verkoop, wat de live prijs ook doet.
  • Twee reservegrenzen, en de hoogste wint. Je back-upreserve (de noodcapaciteit, standaard 20 %) wordt door niets aangeraakt. De arbitragereserve (standaard 50 %) is de diepere grens waarop de verkoop stopt โ€” zodat een verkoop in de avond de helft van de batterij bewaart voor het normale huishoudelijke gebruik in de avond daarna.
  • De verkoop moet het opnieuw vullen verslaan. Verkopen tegen 0,40 heeft alleen zin omdat het dal van morgen bijvult tegen 0,10. Dekt het verschil de verliezen van de rondgang (10 %) plus slijtage van de batterij niet, dan wordt het blok gewoon niet gepland.

De drie vragen die elke verkoop beantwoordt

Vraag Wie beantwoordt die Wat het controleert
WANNEER? Het gestempelde energieplan Is er op dit moment een verkoopblok open? (Verouderd of ontbrekend plan = dicht.)
OF? Live economie, elke cyclus opnieuw gecontroleerd Verslaat de terugleverprijs nog steeds de laadkosten + slijtage? Een prijs die verschuift, stopt de verkoop midden in een blok.
MAG HET? Jouw instellingen Globale schakelaar, de modus van deze batterij (Self-consumption verkoopt nooit), beide reservegrenzen, en de noodschakelaar voor de nachtaansturing.

Alle drie moeten ja zeggen, elke cyclus van ~10 s. Eรฉn enkel “nee” stopt het ontladen netjes in de volgende cyclus.

Batterijkaart met de toestand Verkoop aan net

De batterijkaart toont een opvallende gouden toestand “Verkoop aan net” met de live terugleverprijs zolang SEM de batterij teruglevert.


Wanneer SEM besluit te verkopen

Het is het spiegelbeeld van de beslissing van de planner om goedkoop te laden, met dezelfde economie, zodat het nooit met verlies kan verkopen. Elke cyclus, zolang arbitrage aan staat en er geen lading is gepland, verkoopt SEM alleen als aan al deze voorwaarden is voldaan:

  1. Er is op dit moment een verkoopblok in het energieplan open โ€” het plan bepaalt het WANNEER (zie de plaatjes hierboven).
  2. Terugleverprijs โ‰ฅ je “min. terugleverprijs om te verkopen” โ€” het waard om de batterij voor te laten cycleren.
  3. SOC > beide reservegrenzen โ€” de hoogste van je back-upreserve en de arbitragereserve. Je back-upcapaciteit wordt nooit verkocht, en de arbitrage- reserve houdt een werkvoorraad vast voor het huishouden in de avond. Een onbeschikbare SOC-sensor houdt vast โ€” SEM ontlaadt nooit blind.
  4. De verkoop verslaat later opnieuw laden:
export_now  >  cheapest_upcoming_import รท round-trip_efficiency  +  battery_cycle_cost

d.w.z. nu verkopen moet meer opleveren dan dezelfde kWh later terugkopen, na rondgangsverliezen (~10 %) en slijtage van de batterij.

Faalt een van de voorwaarden, dan blijft de batterij in haar normale modus.

De economie

Op hetzelfde moment kan een dynamisch tarief โ‚ฌ0,45/kWh betalen voor teruglevering terwijl het goedkoopste nachtelijke bijvullen โ‚ฌ0,10/kWh kost:

โ‚ฌ/kWh
Terugleverprijs (avondpiek) 0,45
Laadkosten (spot 0,10 รท rendement 0,90) 0,111
Slijtage van de batterij (โ‰ˆ โ‚ฌ8k / 10 kWh / 6000 cycli) 0,067
Nettowinst per verkochte kWh โ‰ˆ 0,27

Op zo’n avond een paar kWh verkopen tot de reserve levert ruwweg โ‚ฌ1โ€“2 per gebeurtenis op, in de orde van โ‚ฌ100โ€“300/jaar bij een gangbare thuisbatterij โ€” bovenop de besparingen op eigen verbruik die de batterij al oplevert. De winst groeit met hoe beweeglijk je tarief is, en wordt belangrijker naarmate saldering (bijv. de Nederlandse salderingsregeling) wordt afgeschaft.

Het is structureel veilig: de break-evenpoort (inclusief battery_cycle_cost) voorkomt dat de batterij wordt gecycled voor een verschil dat de slijtage niet dekt, en het raakt je reserve-SOC nooit aan.

Inschakelen

Tabblad Configuratie โ†’ Tarief & prijzen (alleen zichtbaar bij een dynamisch tarief):

Instellingen voor batterij-exportarbitrage

Instelling Wat het doet
Batterij aan het net verkopen bij hoge teruglevering Hoofdschakelaar aan/uit. Standaard uit.
Min. terugleverprijs om te verkopen Ondergrens van de prijs (per kWh) die het waard is om de batterij voor te cycleren.
Arbitrage-reserve-SOC Nooit onder deze SOC aan het net ontladen โ€” je back-upreserve.
Entiteit voor geforceerd ontlaadvermogen De number.*-entiteit die het geforceerde ontlaadvermogen naar het net van je batterij instelt (zie hieronder).

Ondersteuning per batterijmerk

  • Huawei SUN2000 + LUNA2000 โ€” SEM gebruikt de service forcible_discharge_soc van huawei_solar (Huawei heeft geen number-entiteit voor geforceerd ontladen). Die ontlaadt tot je reserve-SOC, waarop de omvormer zelf stopt โ€” zodat de reserve een echte ondergrens is, ook als een stop vertraagd is. Vereist de integratie huawei_solar; SEM herkent die automatisch en gebruikt het batterijapparaat. Live gecontroleerd op een echte LUNA2000.
  • GoodWe, Victron, SolaX, Growatt, Sessy, Powerwall, โ€ฆ โ€” de algemene route schrijft het ontlaadvermogen naar een number-entiteit die je instelt (het ontlaadvermogensetpoint van de integratie, of een kleine number / input_number op basis van een template/script โ€” SEM stuurt welk domein je ook aanwijst).

Is er geen route voor geforceerd ontladen beschikbaar (geen Huawei-service en geen number- entiteit), dan wordt de beslissing veilig verworpen โ€” SEM logt dat het zou verkopen maar doet niets.

Huawei-opmerking (tegen blokkeren): de LUNA2000 loopt vast als hij een stop plus een tweede Modbus-schrijfactie in dezelfde cyclus van ~10 s krijgt. SEM geeft รฉรฉn commando per overgang en schuift de rest door naar de volgende cyclus, en geeft een weggevallen stop automatisch opnieuw. Omdat modusbeslissingen stabiel zijn (een modus blijft staan totdat je hem verandert), schakelt normaal bedrijf nooit sneller dan de omvormer kan bijhouden.

Sturing per batterij (installaties met meerdere batterijen)

Bij installaties met twee of meer batterijen (bijv. Growatt + Sessy, of twee LUNA2000’s) wordt elke batterij onafhankelijk aangestuurd vanaf de batterijkaart:

Modus Wat het doet
Automatisch Het huidige gedrag โ€” planner / arbitrage / bescherming beslissen.
Alleen eigen verbruik Laden + het huis voeden, maar nooit aan het net verkopen.
Geforceerd laden Nu vol laden.
Geforceerd ontladen Nu aan het net verkopen, tot de reserve-SOC.

Let op: een opt-in-modus Allow arbitrage per batterij is gepland maar wordt op dit moment achtergehouden (#533). Voorlopig volgt het meedoen van batterijen de globale schakelaar: in de modus Auto volgt een batterij de globale instelling; Self-consumption only onderdrukt het altijd.

Elke batterij heeft ook haar eigen ondergrens Reserve-SOC (wordt daar nooit onder ontladen), en โ€” bij installaties met meerdere batterijen โ€” haar eigen kiezer voor de entiteit voor geforceerd ontladen onder Configuratie โ†’ Tarief. De ene batterij kan verkopen terwijl een andere vasthoudt.

Uitzetten

  • Zet de schakelaar uit onder Configuratie โ†’ Tarief & prijzen. De hele route is daaraan gekoppeld; als hij uit staat, wordt er niets geforceerd ontladen.
  • Zet hem midden in een verkoop uit en de volgende cyclus van ~10 s stopt netjes โ€” het volgende batterijcommando zet het geforceerd ontladen op nul (de modi sluiten elkaar uit), zodat de batterij nooit stilletjes blijft verkopen.
  • Zachtere knoppen dan helemaal uit: verhoog de reserve-SOC (verkoop alleen een dun plakje), verhoog de min. terugleverprijs (verkoop alleen bij echte pieken), of laat de ontlaadentiteit gewoon leeg.

Opmerkingen en beperkingen

  • Negatieve teruglevering is een kostenpost. SEM leest de terugleverprijs met teken, zodat een negatieve spotprijs correct als kosten (geen tegoed) wordt behandeld voor opbrengst, rendement en de poort die nooit met verlies verkoopt.
  • Afhankelijk van de markt. In een vlakke markt / markt met weinig beweging gaat de break-evenpoort gewoon niet af โ€” er valt niets te winnen, dus doet SEM niets.
  • Afhankelijk van de hardware. Je batterij moet een commando voor geforceerd ontladen naar het net accepteren via een stuurbare number-entiteit.
  • Begrenzing bij negatieve teruglevering (de zon terugregelen als teruglevering negatief is) vereist sturing van de exportlimiet van de omvormer en is een aparte, toekomstige verbetering.

Huidige stand op de 2.0-lijn (voor ontwikkelaars)

De route is volledig gekoppeld via het plan met de ene poort (#638 C6) en vastgelegd met een eigen scenariomatrix (tests/test_638_c6_arbitrage_sell.py โ€” modus ร— poort ร— ondergrens, plus de testreeks voor eerlijke grenzen van de economie). Wat de checklist van v1.7.3 vroeg, is gedaan:

  • โœ… WANNEER via het plan โ€” arbitrage_sell_gate leest de discharge_blocks van het gestempelde plan onder dezelfde vertrouwensregel als elke poort (verouderde stempel = dicht); het vermogen wordt begrensd op de watts die uit het blok volgen (vermeden afname, nooit teruglevering op maximum), en de noodschakelaar begrenst de hele berekening (#758).
  • โœ… Nร— te veel teruglevering opgelost โ€” de pijplijn verdeelt het blokvermogen over alle batterijen (effective_battery_count, de aanpak van #531/#691); de vaste waarde _any_allow_arb=False uit v1.7.3 is weg (de scan op opt-in per batterij is weer echt).
  • โœ… Beide reservegrenzen gelden, de hoogste wint โ€” de back-up- reserve van de gebruiker ร‰N de arbitrage_reserve_soc uit het oordeel; de aansturing krijgt de hoogste ondergrens mee (batterijen met een eind-SOC / setpoint in de hardware dwingen die zelf af tussen cycli). Een onbeschikbare SOC houdt vast, verkoopt nooit blind (#531).
  • โœ… Nette merkonafhankelijke stop โ€” STOP_FORCE_DISCHARGE gerouteerd via from_arbitrage; een blok dat midden in een verkoop sluit, valt door naar NORMAL, waarvan de idempotente command_normal() het setpoint op nul zet (#538).

Nog steeds bewust achtergehouden (de beslissing uit #533):

  1. allow_arbitrage blijft buiten de keuzelijst voor de batterijmodus en de globale schakelaar heeft geen sectie in de configuratiestappen โ€” inschakelen gaat vandaag via de route voor experts (solar_energy_management.set_option โ†’ battery_grid_arbitrage_enabled: true, batterijen in de modus auto).
  2. Migratie v14 zet de schakelaar รฉรฉn keer uit bij een upgrade vanaf โ‰ค v13; een bewuste herinschakeling daarna blijft staan.
  3. Vรณรณr het opnieuw tonen in de interface: een live arbitragenacht met twee batterijen op de simulatieopstelling โ€” nooit een eerste duurtest op de gedeelde PROD-batterij (#532 was een echte leegloop van een LUNA2000).
SEM-updates

Mis geen nieuwe SEM-versie

Krijg een mail bij nieuwe SEM-versies, bijgewerkte Nederlandse documentatie en praktijkcijfers. Je downloadt direct ook de gratis checklist voor het einde van de saldering.

Geen spam. Afmelden kan altijd met รฉรฉn klik.

Scroll naar boven