Marstek PIB Domotica integratie en je Energierekening

Pagina: 1
Acties:

Acties:
  • +2 Henk 'm!

  • SatScan
  • Registratie: Februari 2024
  • Laatst online: 20:58
Mede-auteurs:
  • pascallj
  • Registratie: Mei 2011
  • Laatst online: 21:25

pascallj

  • JanAllElectric
  • Registratie: December 2017
  • Laatst online: 12:32

JanAllElectric

  • Arjanski
  • Registratie: Oktober 2022
  • Laatst online: 07-06 19:54

Arjanski

WORK IN PROGRESS

Waarom dit Topic?

De komende periode en misschien wel jaren zal de energiemarkt in België en Nederland flink in beweging zijn.
Bijvoorbeeld In België worden de eerste goedkeuringen van zo geheten Plug In Batterijen (PIB) verwacht. Daar vandaan zal er een grote interesse ontstaan in dit soort oplossingen om je energieverbruik en daaraan gekoppelde energierekening in toom te houden.

In Nederland wordt de salderingsregeling per 1 jan 2027 afgeschaft. De verwachting is dat de huidige energiecontracten hierdoor zullen veranderen. Ook hier zal naar verwachting de thuisbatterij een grote rol gaan vervullen om tijdens de dure energie uren het inkopen van energie te verminderen of geheel te voorkomen.

Energieopslag bied ook mogelijkheden om te gaan handelen met energie en hoe laad ik mijn EV op een zo’n voordelige manier. Of hoe schakel ik mijn warmtepomp slim met mijn Marstek batterij(en)
In dit topic volgen we dus deze ontwikkelingen in relatie tot het gebruik van de Marstek thuisbatterij.
.

Doel van dit topic?

We lezen graag welke strategieën jij gebruikt en welke domotica oplossing(en) jij hanteert.
Welke energiecontract contract past het beste in jou situatie met jouw Marstek energieopslagsysteem. Hoe intrigeer je slim je energiesystemen met elkaar.
.

Hoe dit Topic te gebruiken?

In dit topic willen we dus graag met elkaar op zoek naar passende oplossingen, door praktijkervaringen en voorbeelden te delen.
Het delen van je code wordt zeer gewaardeerd, het zou fijn zijn als daar de code tag voor gebruikt.
Als het meer dan pakweg 20 regels zijn, wordt het erg gewaardeerd als je het ook in een quote zet :)

code:
1
2
3
Regel 1
Andere regel
Goto 1


En als je wil reageren op een stukje code kan je met line= het beginnummer aanpassen:[code line=9]
Zie ook ook de UBB-codes


Links naar andere Marstek / Duravolt Venus Batterij topics
Hame / Marstek / Duravolt 5,12kWh plug en play thuisaccu
Marstek / Duravolt Venus PnP Thuisaccu gebruiken als backup
Plug & Play wetgeving Belgie - Van het kastje naar de muur
Marstek Venus / Duravolt PnP Thuisaccu Modbus koppeling
Hoe zat dat toch ook alweer...
Het grote topic voor Elektra huisinstallaties - Deel 3
.

Topic regels

Wat we graag lezen
Het delen van je domotica code voor je strategie en oplossing
Dat je daar de code tag voor gebruikt
Je ervaringen van je gehanteerde oplossing
Bij welk type energiecontract de beste gebruikers-strategie past
Dat je je signatuur vult met relevantie informatie bijvoorbeeld :)F of :)B


Wat we minder graag lezen
Hoe je bijvoorbeeld Home Assist installeert

Wat er niet in thuishoort
Hoe je een batterij installeert
Hoe je bijvoorbeeld een lilygo installeert
Waar de andere Marstek topics voor zijn
JIJ bakken!

Disclaimer
blabla chocoladevla...

[ Voor 79% gewijzigd door SatScan op 08-06-2025 20:53 ]

.NL | BYD Atto3 | PulsarPlus EV +Balancer | WP7.7K Z | 2 MT Venus 5.12KWh V151 - CT003 V115 | 2 Mitsubitshi single airco's | EPC 0.0 | HA DS224+


Acties:
  • +1 Henk 'm!

  • PNARI
  • Registratie: December 2024
  • Laatst online: 19:49
Mijn strategie voor Vlaanderen en mijn gebruikersprofiel en installatie :
Zoveel mogelijk eigen zonneproductie gebruiken en opslaan.
Opslag 2x 5.12 kWh MT batterij met effectieve opslag van 9 kWh en daarbij RTE van 75 % en 2500W ontladen. Daarnaast een electrische boiler van 150l voor 2 personen en 3000W verwarmingselement die overtollige zonneelectriciteit gebruikt vanaf 1500W injectie, dan helpen de batterijen 1500W bij. ' s Morgens beginnen batterijen volgens NOM te laden. Die geraken dus eerst bijna vol tot er meer dan 1500W injectie is, dan begint de boiler op te warmen en helpen de batterijen. Uiteraard alles met mijn gebruiksprofiel. Wanneer mijn stookolieketel versleten is zal ik twee opties overwegen : warmtepomp of hybride gasketel. Met 9kWh batterijen kan een hybrideketel in de tussenseizoenen interessant zijn. Alles hangt af van wat er aan extra taken op fossiele brandstoffen komt in de toekomst, zowel voor verwarming als transport.

4000Wp Oost, 5000Wp west, 1x 5.12 kWh, BMS V151, HWP1 V1.1903, CT003 V114 App V1.6.32, Shelly 3PRoEM, 3fase, electrisch koken en boiler,maat 43 in de schoenen.😅


Acties:
  • +2 Henk 'm!

  • gielvd
  • Registratie: Augustus 2019
  • Laatst online: 19:10
Mijn strategie in belgie (vast contract, terugleververgoeding 2ct, prijs kwh (incl belasting) 26ct):

Indien er overschot is (in deze volgorde):
- 1 Marstek 5.12kwh (NOM)
- Zwembadpomp aan indien 800W over (verbruikt 700W)
- Boiler aan indien 1200W over (verbruikt 1200W)

Boiler:
Ik heb de boiler aansturing gehad die met een variabel vermogen werkt op basis van een M240. Nadat ik 2x een M240 ondanks grote koelvin kapot zijn gegaan heb ik dit vervangen door een simpele shelly stopcontact. Eigenlijk wil ik de boiler voorrang geven aan de zwembadpomp maar door het hogere inschakelvermogen van de boiler werkt dat niet lekker. Dat is een van de reden dat ik de boiler weer variabel aanstuurbaar wil maken met een SSR en een shelly 0-10v. Dit werkt ook beter in voorjaar als het overschot niet vaak genoeg boven de 1200W komt. Wordt nog wel een uitdaging om dit stabiel te krijgen in combinatie met de marstek.Ik wil dat de marstek voorrang krijgt op de boiler. Mijn enige idee is dat de boiler minder agressief/snel vermogen opbouwt dan de marstek, en indien tekort heel snel terugschakeld. Maar hier heb ik nog geen ervaring mee.
Indien de boiler temperatuur te laag wordt, schakeld de CV op mazout bij. Maar in de zomer staat die uit.

Zwembadpomp:
Ik heb ook nog een frequentie regelaar op mijn zwembadpomp. Hiermee kan ik het vermogen lager zetten om het verbruik te verkleinen. Maar met de lage terugleverkosten en het alleen aanzetten bij overschot is dit eigenlijk overbodig.

Aansturing:
Ik stuur alles aan vanuit een python script dat op mijn NAS draait. Dus geen afhankelijkheid van mijn home-assistent. Ik vind het belangrijk dat dit essentiele stuk logica gewoon altijd blijft werken. Ik wil dit python script verhuizen naar een esp32 C3 waar micropython op draait. Ik verwacht dat het daardoor nog onafhankelijker wordt.

Wat ik graag zou willen is 'peak-shaving' om de piekbelasting die we in belgie hebben te reduceren. In de winter wanneer de marstek veel minder effectief gebruikt kan worden door afwezigheid van zon zou de batterij in een modus kunnen staan waarbij boven X kw gebruik van grid de batterij ontlaad, en onder Y kw gebruik van grid de batterij oplaadt. Volgens mij moet het zelfs mogelijk zijn om die X en Y threshold dynamisch te laten bepalen doordat de batterij ziet dat hij voor een bepaalde periode niet helemaal vol raakt, of te vaak helemaal vol is.

Acties:
  • 0 Henk 'm!

  • PNARI
  • Registratie: December 2024
  • Laatst online: 19:49
gielvd schreef op vrijdag 6 juni 2025 @ 21:41:
Mijn strategie in belgie (vast contract, terugleververgoeding 2ct, prijs kwh (incl belasting) 26ct):

Indien er overschot is (in deze volgorde):
- 1 Marstek 5.12kwh (NOM)
- Zwembadpomp aan indien 800W over (verbruikt 700W)
- Boiler aan indien 1200W over (verbruikt 1200W)

Boiler:
Ik heb de boiler aansturing gehad die met een variabel vermogen werkt op basis van een M240. Nadat ik 2x een M240 ondanks grote koelvin kapot zijn gegaan heb ik dit vervangen door een simpele shelly stopcontact. Eigenlijk wil ik de boiler voorrang geven aan de zwembadpomp maar door het hogere inschakelvermogen van de boiler werkt dat niet lekker. Dat is een van de reden dat ik de boiler weer variabel aanstuurbaar wil maken met een SSR en een shelly 0-10v. Dit werkt ook beter in voorjaar als het overschot niet vaak genoeg boven de 1200W komt. Wordt nog wel een uitdaging om dit stabiel te krijgen in combinatie met de marstek.Ik wil dat de marstek voorrang krijgt op de boiler. Mijn enige idee is dat de boiler minder agressief/snel vermogen opbouwt dan de marstek, en indien tekort heel snel terugschakeld. Maar hier heb ik nog geen ervaring mee.
Indien de boiler temperatuur te laag wordt, schakeld de CV op mazout bij. Maar in de zomer staat die uit.

Zwembadpomp:
Ik heb ook nog een frequentie regelaar op mijn zwembadpomp. Hiermee kan ik het vermogen lager zetten om het verbruik te verkleinen. Maar met de lage terugleverkosten en het alleen aanzetten bij overschot is dit eigenlijk overbodig.

Aansturing:
Ik stuur alles aan vanuit een python script dat op mijn NAS draait. Dus geen afhankelijkheid van mijn home-assistent. Ik vind het belangrijk dat dit essentiele stuk logica gewoon altijd blijft werken. Ik wil dit python script verhuizen naar een esp32 C3 waar micropython op draait. Ik verwacht dat het daardoor nog onafhankelijker wordt.

Wat ik graag zou willen is 'peak-shaving' om de piekbelasting die we in belgie hebben te reduceren. In de winter wanneer de marstek veel minder effectief gebruikt kan worden door afwezigheid van zon zou de batterij in een modus kunnen staan waarbij boven X kw gebruik van grid de batterij ontlaad, en onder Y kw gebruik van grid de batterij oplaadt. Volgens mij moet het zelfs mogelijk zijn om die X en Y threshold dynamisch te laten bepalen doordat de batterij ziet dat hij voor een bepaalde periode niet helemaal vol raakt, of te vaak helemaal vol is.
Bij wie krijg je vast 2ct voor teruglevering ? En zijn de 26ct incl alle kosten en accijnzen ?

4000Wp Oost, 5000Wp west, 1x 5.12 kWh, BMS V151, HWP1 V1.1903, CT003 V114 App V1.6.32, Shelly 3PRoEM, 3fase, electrisch koken en boiler,maat 43 in de schoenen.😅


Acties:
  • +1 Henk 'm!

  • Avenger 2.0
  • Registratie: Juni 2004
  • Laatst online: 21:06
Momenteel 1 Marstek in gebruik, vooral om nachtverbruik te dekken en door de dag en in avond bij te leveren. Monitoring met HomeWizard Energy Display en Energy Plugs en ook om de WAF te vergroten :+
- Voorlopig via HW Energy Plug ook integratie in Homey Domotica systeem (Energy Tab), samen met P1 meter en PV panelen. Hopelijk in de toekomst een app in Homey zodat ik ook de batterijstaat kan zien (hoeveel geladen) en eventueel kan sturen.
- Warmtepomp en aangesloten boilervat zijn de grootverbruikers. Spijtig genoeg weinig sturing mogelijk behalve tijdsgestuurd. Boilervat laat ik in de vroege namiddag verwarmen zodat de Marstek reeds bijgeladen is om te helpen en nadien ook nog terug kan laden voor de avond/nacht. Maar gezien grote verbruik verwarming vooral in de wintermaanden is (en dan weinig zon) en de andere seizoenen andersom zal de batterij hiervoor weinig helpen.
- Elektrische handdoekradiator om badkamer te verwarmen voorzien van HW Plug om te meten en te regelen. Al verwacht ik van dat regelen niet al te veel (als er weinig zon is zal deze namelijk vooral moeten verwarmen).
- Bij toekomstige EV aan het denken om dan eventueel 2de batterij te kopen zodat bij zon in late namiddag deze kan helpen om aan minimale oplaadstroom te geraken ipv van het net moeten te halen. Maar zal ook wat afhangen van (nieuwe komende) regelgeving in België en wat nog mag en niet.

Acties:
  • +1 Henk 'm!

  • gielvd
  • Registratie: Augustus 2019
  • Laatst online: 19:10
PNARI schreef op zaterdag 7 juni 2025 @ 00:16:
[...]

Bij wie krijg je vast 2ct voor teruglevering ? En zijn de 26ct incl alle kosten en accijnzen ?
Ecopower

Acties:
  • +2 Henk 'm!

  • JanAllElectric
  • Registratie: December 2017
  • Laatst online: 12:32
Ik heb voor mijn 3 Marsteks (op 1 groep aangesloten) geprobeerd een verdeelfunctie te maken om het gewenste vermogen (TargetPower) te verdelen over de 3 accu's, rekening houdend met de ingestelde waarden max(ont)laden per accu.

Op 1 groep is TargetPower natuurlijk maximaal 3600W. Per Marsteks is max(ont)laden 2500W.
NB: moet ook voor 3 marsteks werken ieder op eigen groep aangesloten: TargetPower dan bv max 7500W.

NB: ik heb chatGPT gevraagd de verdeelfunctie compact te maken. Helaas komt dat niet ten goede aan de leesbaarheid. 8)7

Door met beide waarden te "spelen" kan je de verdeelfunctie goed laten werken:

******************************************************
//targetPower bepalen
if (status.beslissing == "kopen" || status.beslissing == 'bijkopen') { charge_discharge = 'charge'; targetPower = targetPowerLaden }
if (status.beslissing == "verkopen" ) { charge_discharge = 'discharge'; targetPower = targetPowerOntladen }
if (status.beslissing == 'NOM' || status.beslissing == 'NOM+' || status.beslissing == 'NOM-'){
if (hoofdmeter <= 0 ){
targetPower = Math.min(targetPowerLaden, -1 * hoofdmeter);
charge_discharge = 'charge'
if (status.beslissing == 'NOM-') { targetPower = 0 }
} else {
targetPower = Math.min(targetPowerOntladen, hoofdmeter);
charge_discharge = 'discharge'
if (status.beslissing == 'NOM+') { targetPower = 0 }
}
}
if (status.beslissing == 'geen actie'){ charge_discharge = 'charge'; targetPower = 0 }

**************************************************************
Volgens mij is sequentieel de accu's (ont)laden efficienter dan parallel:

****************************************************************
//** zorgt ervoor dat eerste de 1e accu optimaal (met maxontladen vermogen) wordt geladen/ontladen en daarna de 2e met het restvermogen tot targetpower*/
//** met bv vermogen_laden/ontladen = targetPower/3 worden beide accu's gelijkmatig geladen/ontladen */
for (let i = 0; i < aantal_accus; i++) {

//vermogen (ont)laden bepalen
Marstek[i].vermogen_ontladen = (Marstek[i].vulgraad <= Marstek[i].minimum_level ? 0 : Marstek_vermogen_ontladen_max);
Marstek[i].vermogen_laden = (Marstek[i].vulgraad >= Marstek[i].inhoud ? 0 : Marstek_vermogen_laden_max);

//** correcties */
//bij >95% SOC wordt Marstek_vermogen_laden_max getrottled tot 1200W
Marstek[i].vermogen_laden = (Marstek[i].soc >= 95 && Marstek[i].vermogen_laden > 1200 ? 1200 : Marstek[i].vermogen_laden);
//bij <15% SOC wordt Marstek_vermogen_ontladen_max getrottled tot 1200W
Marstek[i].vermogen_ontladen = (Marstek[i].soc <= 15 && Marstek[i].vermogen_ontladen > 1200 ? 1200 : Marstek[i].vermogen_ontladen);
}

*************************************************
aanroep van de verdeelfunctie
************************************************
//** Functie aanroep distributieplan met verdeling targetPower: laden/ontladen per accu, remaining power en buy/sell */
//** Houdt rekening met XOM en reserveGridPower */
var batteries = [];
for (let i = 0; i < aantal_accus; i++){
batteries.push({ id:i, maxCharge: Marstek[i].vermogen_laden, maxDischarge: Marstek[i].vermogen_ontladen, soc: Marstek[i].soc })
}

var plan = distributePower(batteries, targetPower, hoofdmeter, charge_discharge, xom_level1, xom_level2, reserveGridPower);


*****************************************
verdeelfunctie. naast verdelen van targetpower of de 3 accu's zijn er andere dingen "ingeslopen""
- corrigeren voor resevegrid (bv om EV laden buiten de accu te houden)
- wisselen van de primaire accu als het verschil Soc 10% is
- nomlevel1: indien gevraagde power van een accu <= nomlevel1 is dan corrigeren naar 0 (bv <100W)
- nomlevel 2: indien gevraagde poer per accu > nomlevel1 en <= nomlevel2 is dat corrigeren naar nomlevel2 (bv 200W)
- bijhouden buy/sell van grid in dien targetpower niet geleverd kan worden

**************************************
function distributePower(batteries, targetPower, gridPower, mode, xomL1, xomL2, reserveGridPower) {
// Accu's compenseren de gridPower binnen toegestane targetPower limiet

// Reserveer een deel van het netvermogen voor bv autoladen
let adjustedTargetPower = targetPower - reserveGridPower;
adjustedTargetPower = (adjustedTargetPower < 0 ? 0 : adjustedTargetPower);
targetPower = (mode === 'charge' ? targetPower : adjustedTargetPower);

let remainingPower = 0;
let totalPower = 0;
let buySell = 0;

let totalAvailable = Math.min(targetPower, batteries.reduce((sum, b) => sum + (mode === 'charge' ? b.maxCharge : b.maxDischarge), 0));
let powerPlan = batteries.map(battery => ({ battery: battery.id, power: 0, xom: 'power', soc: battery.soc }));

//***************** Sorteer de accu's op maximale SOC bij ontladen en minimale SOC bij laden als verschil 10% is *****************//
const getActiveBattery = (batteries, mode, delta, last) => {
// Werk SOC, maxCharge en MaxDischarge van vorige volgorde bij met actuele waarden.
const updatedLast = last.map(b => {const fresh = batteries.find(c => c.id === b.id); return fresh ? { ...b, ...fresh } : b; });
const sorted = [...batteries].sort((a, b) => mode === 'charge' ? a.soc - b.soc : b.soc - a.soc);
const diff = Math.abs((updatedLast[0]?.soc ?? 0) - (updatedLast[1]?.soc ?? 0));
const useNewOrder = !last.length || diff >= delta;
const order = useNewOrder ? sorted : updatedLast;

context.set('Test', { diff: diff, useneworder: useNewOrder });

return { activeAccu: order[0].id, mode: mode, order };
};

let lastFlow = flow.get('Last');
let last = (lastFlow && lastFlow.order) ? lastFlow.order : []; //vorige volgorde en actieve accu
last = getActiveBattery(batteries, charge_discharge, 10, last);
batteries = last.order;
flow.set('Last',last);

// verdelen beschikbaar vermogen over de accu's
for (let i = 0; i < batteries.length && totalAvailable > 0; i++) {
let battery = batteries[i];
let maxPossible = Math.min((mode === 'charge' ? battery.maxCharge : battery.maxDischarge), totalAvailable);

let j = battery.id; //vul power in juiste accu (powerPlan heeft normale volgeorde 0,1,2)
maxPossible = maxPossible;
powerPlan[j].power = maxPossible;
totalAvailable -= maxPossible;
}

// level1: zorgt ervoor dat vermogen 0W is (idle < 80% efficiency)
// Level2: Zorg dat elk vermogen minstens 300W is (XOM > 85/90% efficiency )
powerPlan = powerPlan.map(p => ({
battery: p.battery,
power: p.power != 0 && p.power < xomL2 ? (p.power < xomL1 ? 0 : xomL2) : p.power,
xom: p.power != 0 && p.power < xomL2 ? (p.power < xomL1 ? 'XOM0' : 'XOM'+xomL2) : p.xom,
soc: p.soc
}));

for (let i = 0; i < batteries.length ; i++) {
totalPower += powerPlan[i].power;
}

//sorteer de accus op battery (=id) //waarschijnlijk niet nodig
powerPlan.sort((a, b) => a.battery - b.battery);

// laden/ontladen
totalPower = (mode === 'charge' ? totalPower : -1 * totalPower);

// buy of sell
buySell = gridPower + totalPower;

//remaining power
remainingPower = gridPower + totalPower;

//mode idle als totalPower == 0
mode = (totalPower === 0 ? 'idle' : mode);

//powerPlan: per accu
//buySell: kopen/verkopen
//remainingPower: hoofdmeter na charge/discharge
//totalPower: geladen/ontladen
//Mode: charge/discharge/idle

// waardes kunnen positief en negatief zijn
totalPower = Math.abs(totalPower);
//buySell = Math.abs(buySell);

return { powerPlan, gridPower, remainingPower, mode, totalPower, buySell};
}

Panasonic TCAP 12kW J-versie + Heishamon/HA/Node-Red/Grafana/InfluxDB; Atlantic v3 200L; 5* jaga strada 21 & zelfbouw DBE; 3*2400Wp (O,Z,W); KIA EV6 77kWh RWD + EVCC/cFos Wallbox solar; 3* Marstek 5kWh (v151)+CT003 (v114)+ modbus/lilygo/node-red/HA


Acties:
  • 0 Henk 'm!

  • JanAllElectric
  • Registratie: December 2017
  • Laatst online: 12:32
hmm:

Het gaat meer over de gehanteerde strategie zie ik.

Mijn strategie is:
- zoveel mogelijk eigen PV opbrengst in de accu opslaan en als NOM gebruiken voor de rest van de dag.
- het laden van de EV buiten de accu te houden.
- bijkopen als PV opbrengst onvoldoende is en prijslevel laag.
- Verkopen doe ik in principe niet. Daar is 15kWh accucapaciteit voor mij te klein voor. Mijn verbruik tussen 18:00 en 10:00 is in de zomer ca 12-13kWh (sluipverbruik >500W) en in de winter >15 kWh (warmtepomp)

Ik heb NOM nog verbijzonderd met:
- NOM+: ontladen voor zelfgebruik blokkeren als prijs laag is -> Grid kopen is goedkoper
- NOM-: laden voor zelfgebruik blokkeren als prijs hoog is -> PV terugleveren levert meer op

Hoog is voor mij prijs >= 115% gemiddelde prijs
Laag is voor mij prijs <= 90% gemjddelde prijs
NB: ik heb ook wel met werkelijk marges gewerkt, maar deze vuistregel is veel eenvoudiger en werkt ook goed.

Bij een gemiddelde prijs van € 0,25 is dan de spread koop-verkoop minimaal € 0,06. Net voldoende om afschrijving en RTE-verlies te dekken. In de praktijk is de spread beter omdat je de prijs van PV op € 0,00 kan stellen.

Omdat mijn sluipverbruik hoog is blijkt in mei mijn RTE rondt 85% te liggen. Deels komt dat ook omdat ik de vraag (per accu) <100W op 0 stel en tussen 100W en 200W op 200W. Dat komt de efficiency te goede.

[ Voor 37% gewijzigd door JanAllElectric op 07-06-2025 13:25 ]

Panasonic TCAP 12kW J-versie + Heishamon/HA/Node-Red/Grafana/InfluxDB; Atlantic v3 200L; 5* jaga strada 21 & zelfbouw DBE; 3*2400Wp (O,Z,W); KIA EV6 77kWh RWD + EVCC/cFos Wallbox solar; 3* Marstek 5kWh (v151)+CT003 (v114)+ modbus/lilygo/node-red/HA


Acties:
  • 0 Henk 'm!

  • SatScan
  • Registratie: Februari 2024
  • Laatst online: 20:58
JanAllElectric schreef op zaterdag 7 juni 2025 @ 12:52:
hmm:

Het gaat meer over de gehanteerde strategie zie ik.

Mijn strategie is:
- zoveel mogelijk eigen PV opbrengst in de accu opslaan en als NOM gebruiken voor de rest van de dag.
- het laden van de EV buiten de accu te houden.
- bijkopen als PV opbrengst onvoldoende is en prijslevel laag.
- Verkopen doe ik in principe niet. Daar is 15kWh accucapaciteit voor mij te klein voor. Mijn verbruik tussen 18:00 en 10:00 is in de zomer ca 12-13kWh (sluipverbruik >500W) en in de winter >15 kWh (warmtepomp)

Ik heb NOM nog verbijzonderd met:
- NOM+: ontladen voor zelfgebruik blokkeren als prijs laag is -> Grid kopen is goedkoper
- NOM-: laden voor zelfgebruik blokkeren als prijs hoog is -> PV terugleveren levert meer op

Hoog is voor mij prijs >= 115% gemiddelde prijs
Laag is voor mij prijs <= 90% gemjddelde prijs
NB: ik heb ook wel met werkelijk marges gewerkt, maar deze vuistregel is veel eenvoudiger en werkt ook goed.

Bij een gemiddelde prijs van € 0,25 is dan de spread koop-verkoop minimaal € 0,06. Net voldoende om afschrijving en RTE-verlies te dekken. In de praktijk is de spread beter omdat je de prijs van PV op € 0,00 kan stellen.

Omdat mijn sluipverbruik hoog is blijkt in mei mijn RTE rondt 85% te liggen. Deels komt dat ook omdat ik de vraag (per accu) <100W op 0 stel en tussen 100W en 200W op 200W. Dat komt de efficiency te goede.
Niet helemaal, het is een combinatie van Strategie en de Coding die je gebruikt!
Strategie is leerzaam om te lezen maar uiteindelijk gaat het om de achterliggende coding die de strategie effectueert. Keep going *O*

Misschien weet iemand of we de coding ergens kunnen plaatsen en dan kunnen we daar naar verwijzen in de berichten. Dat helpt wel met de leesbaarheid.

[ Voor 4% gewijzigd door SatScan op 07-06-2025 13:41 ]

.NL | BYD Atto3 | PulsarPlus EV +Balancer | WP7.7K Z | 2 MT Venus 5.12KWh V151 - CT003 V115 | 2 Mitsubitshi single airco's | EPC 0.0 | HA DS224+


Acties:
  • +1 Henk 'm!

  • JanAllElectric
  • Registratie: December 2017
  • Laatst online: 12:32
SatScan schreef op zaterdag 7 juni 2025 @ 13:37:
[...]


.....

Misschien weet iemand of we de coding ergens kunnen plaatsen en dan kunnen we daar naar verwijzen in de berichten. Dat helpt wel met de leesbaarheid.
en chatgpt even vragen de boel weer normaal leesbaar te maken _/-\o_ Ik kom zelf nog uit het gewone if then else programmeertijdperk

chatgpt:
De stijl of notatie die je bedoelt heet meestal:

Arrow function → =>
Dit is de ES6 (ECMAScript 2015) "arrow function syntax".

Ternary operator → condition ? valueIfTrue : valueIfFalse
→ "ternaire operator", voor compacte if-else in één regel.

Optional chaining → ?.
→ voorkomt errors bij undefined objecten.

Nullish coalescing operator → ??
→ gebruik fallback-waarde als links null of undefined is.

De .map() functie is nog een belangrijk onderdeel.

👉 Array.prototype.map() is in JavaScript een standaard array-methode die je kunt gebruiken om elke waarde in een array te transformeren naar een nieuwe array.

👉 Het is een functionele programmeerstijl. Je geeft een functie op die op elk element wordt toegepast. De uitkomst is een nieuwe array (de originele array blijft ongewijzigd).

[ Voor 22% gewijzigd door JanAllElectric op 07-06-2025 14:00 ]

Panasonic TCAP 12kW J-versie + Heishamon/HA/Node-Red/Grafana/InfluxDB; Atlantic v3 200L; 5* jaga strada 21 & zelfbouw DBE; 3*2400Wp (O,Z,W); KIA EV6 77kWh RWD + EVCC/cFos Wallbox solar; 3* Marstek 5kWh (v151)+CT003 (v114)+ modbus/lilygo/node-red/HA


Acties:
  • +1 Henk 'm!

  • JanAllElectric
  • Registratie: December 2017
  • Laatst online: 12:32
De basisversie van de verdeelfunctie (nb: het duiveltje is 2 sluit acculades):

function distributePower(batteries, targetPower, gridPower, mode) {
// Accu's compenseren de gridPower binnen toegestane targetPower limiet

let remainingPower = 0;
let totalPower = 0;
let buySell = 0;

let totalAvailable = Math.min(targetPower, batteries.reduce((sum, b) => sum + (mode === 'charge' ? b.maxCharge : b.maxDischarge), 0));
let powerPlan = batteries.map(battery => ({ battery: battery.id, power: 0, soc: battery.soc }));


for (let i = 0; i < batteries.length && totalAvailable > 0; i++) {
let battery = batteries[i];
let maxPossible = Math.min((mode === 'charge' ? battery.maxCharge : battery.maxDischarge), totalAvailable);
powerPlan[i].power = maxPossible;
totalAvailable -= maxPossible;
}

for (let i = 0; i < batteries.length ; i++) {
totalPower += powerPlan[i].power;
}


// laden/ontladen
totalPower = (mode === 'charge' ? totalPower : -1 * totalPower);

// buy of sell
buySell = gridPower + totalPower;

//remaining power
remainingPower = gridPower + totalPower;

//mode idle als totalPower == 0
mode = (totalPower === 0 ? 'idle' : mode);

//powerPlan: per accu
//buySell: kopen/verkopen
//remainingPower: hoofdmeter na charge/discharge
//totalPower: geladen/ontladen
//Mode: charge/discharge/idle

// waardes kunnen positief en negatief zijn
totalPower = Math.abs(totalPower);
//buySell = Math.abs(buySell);

return { powerPlan, gridPower, remainingPower, mode, totalPower, buySell};

object als resultaat:
Afbeeldingslocatie: https://tweakers.net/i/tb55Ve7NrFG9bmc8dkw8WGZdXXw=/800x/filters:strip_exif()/f/image/t4qyxRX5l8NdQBrVZeP3H1sY.png?f=fotoalbum_large

[ Voor 16% gewijzigd door JanAllElectric op 07-06-2025 14:47 ]

Panasonic TCAP 12kW J-versie + Heishamon/HA/Node-Red/Grafana/InfluxDB; Atlantic v3 200L; 5* jaga strada 21 & zelfbouw DBE; 3*2400Wp (O,Z,W); KIA EV6 77kWh RWD + EVCC/cFos Wallbox solar; 3* Marstek 5kWh (v151)+CT003 (v114)+ modbus/lilygo/node-red/HA


Acties:
  • +2 Henk 'm!

  • badnews.nl
  • Registratie: Januari 2002
  • Laatst online: 21:13
Ik ga even een handleiding maken hoe ik de Marstek in Homey heb gekregen.
In mijn geval is dat met een lilygo en esphome, die elke 10 seconde mijn homey updaten.
De Marstek zit in de energy tab van Homey als accu. Ik zal het modulair opbouwen, omdat je het op verschillende manieren kan aanpakken. Maar omdat ik de scripts van Homey niet via mijn ipad makkelijk kan copieren, moet ik even de laptop aanslingeren straks.
Het is redelijk simpel, en ik heb het meeste ingefluisterd gekregen van andere hier op het forum.

Dus je krijgt dan op je Homey een accu in Energy, zonder mqtt of home assistant, via de lilygo

Afbeeldingslocatie: https://tweakers.net/i/wU1bU25kgIzjuYBeL3-hQF63un8=/800x/filters:strip_icc():strip_exif()/f/image/drLw1EUTmufp64ajSCc0j2XS.jpg?f=fotoalbum_large

Acties:
  • +1 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
Ik heb het zo gedaan: https://community.homey.a...135927/24?u=roedi_de_lion

Is niet vanuit de batterij maar vanuit de HW socket. Misschien nog wel nauwkeuriger?

[ Voor 28% gewijzigd door Ellroe32 op 07-06-2025 21:47 ]

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL


Acties:
  • +1 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
badnews.nl schreef op zaterdag 7 juni 2025 @ 18:26:
Ik ga even een handleiding maken hoe ik de Marstek in Homey heb gekregen.
In mijn geval is dat met een lilygo en esphome, die elke 10 seconde mijn homey updaten.
De Marstek zit in de energy tab van Homey als accu. Ik zal het modulair opbouwen, omdat je het op verschillende manieren kan aanpakken. Maar omdat ik de scripts van Homey niet via mijn ipad makkelijk kan copieren, moet ik even de laptop aanslingeren straks.
Het is redelijk simpel, en ik heb het meeste ingefluisterd gekregen van andere hier op het forum.

Dus je krijgt dan op je Homey een accu in Energy, zonder mqtt of home assistant, via de lilygo

[Afbeelding]
-470Wh. Daar moet volgens mij je echte verbruik komen te staan op die dag.
Afbeeldingslocatie: https://tweakers.net/i/z5xwizXj7q5Fesvicv-aO7XBukc=/x800/filters:strip_icc():strip_exif()/f/image/UkQ4earKXTJQvr7xNyGbDQgF.jpg?f=fotoalbum_large

HW denkt:
Afbeeldingslocatie: https://tweakers.net/i/mGYBfcevZEtWkyAVBK9ucomCklk=/800x/filters:strip_icc():strip_exif()/f/image/gDpzojka6vG9ux89J0GRFouG.jpg?f=fotoalbum_large

Maar er is 1,3 kwh verloren gegaan door RTE.

[ Voor 28% gewijzigd door Ellroe32 op 08-06-2025 00:16 ]

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL


Acties:
  • +1 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
Ik heb een dynamische contract, woon in NL, Shelly P1 simulator en heb 1 Marstek 5.12 kwh batterij.

Mijn strategie is in principe opladen op de twee goedkoopste uren en verkopen op de twee duurste uren. Indien mogelijk 2x per dag (nog niet voorgekomen).

Wanneer er voldoende zon is, sla ik de laadcyclus over. (niet voordelig, wel leuk). Bij deze variant stopt de batterij wel met NOM als de SOC onder 98% daalt. (Hij kijkt hier dus of er 4,56kwh-SOC meer zon s dan verbruik tot aan de ontlaadcyclus)

Waar houd ik rekening mee:
  • Zonopwek via Solcast
  • Eigen verbruik (houdt ik bij per uur, en wordt bijgewerkt)
  • Wanneer het tweede laad-uur goedkoper is dan de eerste, laad ik het eerste uur met minder vermogen (ook bij ontladen)
  • (Ont)Laadvermogen houdt ook rekening met de SOC van de batterij
  • RTE (afhankelijk van vermogen, maar kiest eigenlijk altijd voor 2500W)

[ Voor 5% gewijzigd door Ellroe32 op 07-06-2025 22:10 ]

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL


Acties:
  • 0 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
JanAllElectric schreef op zaterdag 7 juni 2025 @ 12:52:
hmm:

Ik heb NOM nog verbijzonderd met:
- NOM+: ontladen voor zelfgebruik blokkeren als prijs laag is -> Grid kopen is goedkoper
- NOM-: laden voor zelfgebruik blokkeren als prijs hoog is -> PV terugleveren levert meer op

Hoog is voor mij prijs >= 115% gemiddelde prijs
Laag is voor mij prijs <= 90% gemjddelde prijs
NB: ik heb ook wel met werkelijk marges gewerkt, maar deze vuistregel is veel eenvoudiger en werkt ook goed.
Dit is nog wel interessant. Zelf had ik nog bedacht dat ik een berekening ga maken dat ik de kWh's in de batterij ga verdelen over de duurste uren, totaan de zonopwek mijn batterij weer gaat laden.

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL


Acties:
  • 0 Henk 'm!

  • badnews.nl
  • Registratie: Januari 2002
  • Laatst online: 21:13
Ellroe32 schreef op zaterdag 7 juni 2025 @ 21:49:
[...]


-470Wh. Daar moet volgens mij je echte verbruik komen te staan op die dag.
Klopt, echter geeft mijn Solis app dus de opgewekte energie niet goed door. Ik heb vanmorgen een virtual zonnepaneel aangemaakt die gevoed wordt door de Solis app, ik ga kijken of dat stuk dan beter klopt.
Ik denk zelfs dat de modbus precieser is dan de HW socket die jij gebruikt, aangezien alle in en outs op de accu gemeten worden. Er is altijd een paar procent onprecisie met een socket meter..
Ik ga eens kijken of het vandaag beter klopt, mistte de eerste paar honderd wh, omdat de zon al scheen toen ik wakker werd..

Acties:
  • 0 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
badnews.nl schreef op zondag 8 juni 2025 @ 09:03:
[...]

Klopt, echter geeft mijn Solis app dus de opgewekte energie niet goed door. Ik heb vanmorgen een virtual zonnepaneel aangemaakt die gevoed wordt door de Solis app, ik ga kijken of dat stuk dan beter klopt.
Ik denk zelfs dat de modbus precieser is dan de HW socket die jij gebruikt, aangezien alle in en outs op de accu gemeten worden. Er is altijd een paar procent onprecisie met een socket meter..
Ik ga eens kijken of het vandaag beter klopt, mistte de eerste paar honderd wh, omdat de zon al scheen toen ik wakker werd..
Ik ben net zo aan het stoeien. Soms denk je dat je er bent…. En dan toch weer niet. 😀

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL


Acties:
  • 0 Henk 'm!

  • SatScan
  • Registratie: Februari 2024
  • Laatst online: 20:58
Ellroe32 schreef op zaterdag 7 juni 2025 @ 22:06:
Ik heb een dynamische contract, woon in NL, Shelly P1 simulator en heb 1 Marstek 5.12 kwh batterij.

Mijn strategie is in principe opladen op de twee goedkoopste uren en verkopen op de twee duurste uren. Indien mogelijk 2x per dag (nog niet voorgekomen).

Wanneer er voldoende zon is, sla ik de laadcyclus over. (niet voordelig, wel leuk). Bij deze variant stopt de batterij wel met NOM als de SOC onder 98% daalt. (Hij kijkt hier dus of er 4,56kwh-SOC meer zon s dan verbruik tot aan de ontlaadcyclus)

Waar houd ik rekening mee:
  • Zonopwek via Solcast
  • Eigen verbruik (houdt ik bij per uur, en wordt bijgewerkt)
  • Wanneer het tweede laad-uur goedkoper is dan de eerste, laad ik het eerste uur met minder vermogen (ook bij ontladen)
  • (Ont)Laadvermogen houdt ook rekening met de SOC van de batterij
  • RTE (afhankelijk van vermogen, maar kiest eigenlijk altijd voor 2500W)
Goedemorgen,

Vraagje tav Zonopwek via Solcast, hoe goed zijn de voorspellingen.
Ik gebruik zelf Solar Forecast maar die wijkt altijd behoorlijk af. De opbrengst is meestal flink hoger dan de voorspelling.

hgr

.NL | BYD Atto3 | PulsarPlus EV +Balancer | WP7.7K Z | 2 MT Venus 5.12KWh V151 - CT003 V115 | 2 Mitsubitshi single airco's | EPC 0.0 | HA DS224+


Acties:
  • +1 Henk 'm!

  • Ellroe32
  • Registratie: Augustus 2018
  • Nu online
SatScan schreef op zondag 8 juni 2025 @ 10:21:
[...]


Goedemorgen,

Vraagje tav Zonopwek via Solcast, hoe goed zijn de voorspellingen.
Ik gebruik zelf Solar Forecast maar die wijkt altijd behoorlijk af. De opbrengst is meestal flink hoger dan de voorspelling.

hgr
Mijn ervaringen zijn echt heel goed. Heb ook eens forecast geprobeerd, maar die viel idd tegen. Ik gebruik zelf nu dit script en leg het vast in een variabale:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// === CONFIG ===
const apiKey = '1234abc';
const rooftopResourceId = 'r761253';
const url = `https://api.solcast.com.au/rooftop_sites/${rooftopResourceId}/forecasts?format=json`;

// === SCRIPT START ===
async function haalZonVoorspellingEnBewaar() {
  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Accept': 'application/json'
      }
    });

    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }

    const data = await response.json();
    const forecasts = data.forecasts;
    const nu = new Date();

    let zonPerUur = {};

    forecasts.forEach(entry => {
      const tijd = new Date(entry.period_end);
      const lokaalTijdstip = new Date(tijd.getTime() + (new Date().getTimezoneOffset() * 60000));
      const key = lokaalTijdstip.toISOString().slice(0, 13); // bv. "2025-05-24T15"
      const kWh = entry.pv_estimate * 0.5; // elk blok is 30 minuten

      if (!zonPerUur[key]) zonPerUur[key] = 0;
      zonPerUur[key] += kWh;
    });

    const jsonString = JSON.stringify(zonPerUur);

    // 🔁 Logica variabelen ophalen en bijwerken
    const alleVariabelen = await Homey.logic.getVariables();
    let varObj = Object.values(alleVariabelen).find(v => v.name === 'zon_per_uur_json');

    if (!varObj) {
      varObj = await Homey.logic.createVariable({
        name: 'zon_per_uur_json',
        type: 'string',
        value: jsonString
      });
      console.log(`✅ Variabele aangemaakt: zon_per_uur_json`);
    } else {
      await Homey.logic.updateVariable({
        id: varObj.id,
        variable: { value: jsonString }
      });
      console.log(`✏️ zon_per_uur_json bijgewerkt (${Object.keys(zonPerUur).length} uren)`);
    }

    return zonPerUur;

  } catch (error) {
    console.error('❌ Fout bij ophalen of opslaan Solcast data:', error);
  }
}

// Start de functie
haalZonVoorspellingEnBewaar();

[ Voor 71% gewijzigd door Ellroe32 op 08-06-2025 15:53 ]

1x Marstek 5.12kWh, V151, Shelly Simulator in Homey, Lilygo RS485, 14 zonnepanlen 4620wH. Dynamisch contract, NL

Pagina: 1