Victron - Mijn ESS - MESS
Dit verslag beschrijft een persoonlijke opzet van een methodiek voor het laden en ontladen van een Victron batterij-systeem.
N.B. Sinds ik deze bijdrage geschreven heb is er al weer veel veranderd.
De grote lijnen zijn gelijk gebleven, maar op detail niveau is er van alles toegevoegd of gewijzigd.
Indien je op basis van het hierna beschrevene een eigen opzet wilt maken, zoek dan even contact. Ik kan dan de actuele situatie delen.
Inhoudsopgave
MESS Inleiding
Hardware
Programmeertalen
Gegevens-bronnen
Solar
DayAhead Electriciteits-prijzen
Home Assistant
SolarEdge
Het MESS programma
Flow - Solar
Flow - DayAhead
Flow - Targets
Flow - Auto Laadstation
Flow - Home Assistant
MESS Inleiding
Victron heeft voor haar batterij-systemen een besturingssysteem ESS"Energy Storage System". Dit past de stroomvoorziening aan, aan de tijd van de dag, maakt opslag van PV-energie mogelijk, biedt ondersteuning aan netstroom en levert stroom terug naar het elektriciteitsnet.
Voor gebruik in combinatie met een dynamisch energie contract biedt Victron ook een Dynamisch ESS aan. Dit DESS plant het laden en ontladen van de batterij, daarbij rekening houdend met actuele en komende electriciteits-prijzen en eventueel het te verwachten gebruik en zonne-energie-voorspellingen.
In Het Grote Victron aansturing topic zijn meerdere bijdragen aan dit systeem gewijd.
Hoewel dit laatste systeem in principe doet wat het moet doen kunnen er redenen zijn om voor een eigen implementatie te kiezen. In dit artikel beschrijf ik zo'n eigen methodiek.
Disclaimer: Dit betreft mijn persoonlijke opzet van een systeem voor het laden en ontladen van mijn Victron systeem: "Mijn ESS", ofwel MESS. Het is gebaseerd op mijn persoonlijke kennis, kunde en ervaring. Zonder enige twijfel kunnen zaken anders en/of beter. Voor andere situaties, capaciteiten, vermogens, enzovoort zullen zaken anders ingesteld kunnen en moeten worden.
Aan de andere kant: Voor mensen die geïnteresseerd zijn in hetgeen bij een energie-beheersysteem komt kijken, die zelf met instellingen lopen te tobben of die inspiratie zoeken om een eigen oplossing te bouwen hoop ik dat mijn bevindingen iets kunnen bijdragen.
Hardware
Voor een ESS is geen sprake van benodigde hardware of verplichte hardware. Je moet uitgaan van aanwezige hardware. In mijn geval zijn dit drie stuks Victron Multiplus II 48/3000/35-32 omvormers, een Victron Cerbo GX voor de besturing, drie batterijen met 5,12 kWh opslag-capaciteit, een drie-fase SolarEdge se6k omvormer met genoeg panelen, een MPPT met twee panelen als opstart-hulp én een Victron auto-laadstation.Programmeertalen
Voor het aansturen van de verschillende Victron-entiteiten heb ik gebruik gemaakt van Node Red. Dit is een programmeer-omgeving die kan worden toegevoegd als onderdeel van het Venus OS Large image. Node Red is gebaseerd op het via flow-lijnen koppelen van nodes die bijvoorbeeld invoer- en uitvoer-acties verzorgen.Voor ingewikkelder logica gebruikt Node Red de programmeertaal JavaScript die in functie-nodes wordt toegepast.
Het installeren van Venus OS Large en het leren programmeren met Node Red of JavaScript vallen buiten het bestek van deze bijdrage.
Gegevens-bronnen
Met gegevens-bronnen bedoel ik hier de plaatsen waar de voor de besturings-beslissingen benodigde data vandaan komen.Alleereerst zijn dit de te verwachten electriciteits-prijzen, zonne-opbrengst en eigen verbruik. Daarnaast zijn er de data uit het Victron-syseem zelf, de batterijen, de elektriciteits-meter(s) en eventueel een auto-laadstation. Deze laatste gegevens worden real-time geactualiseerd.
Naast het Victron-systeem gebruik ik ook huis-automatisering, namelijk Home Assistant.
Ik heb er nadrukkelijk voor gekozen om de besturing van het MESS niet in Home Assistant uit te voeren. Voor een belangrijk iets als mijn huis-elektriciteit wil ik geen afhankelijkheden van een hobby-systeem. Wel heb ik uitwisseling van gegevens voor weergave in een dashboard van Home Assistant. Ook kan ik in Home Assistant parameters instellen die worden uitgelezen door het MESS. Echter, in geen geval is het MESS afhankelijk van Home Assistant.
Solar
Om 'logische' beslissingen te kunnen nemen is het relevant om te verwachten zonne-opbrengst mee in beschouwing te nemen.Voor kleinschalig/particulier gebruik kun je gebruik maken van Forecast.Solar. Deze dienst heeft een programmeer-interface waarmee je vanuit (bijvoorbeeld) Node Red een overzicht kunt opvragen van de te verwachten zonne-opbrengst op een bepaalde locatie met een bepaalde zonnepanelen-capaciteit met de daarbij behorende richting en hellingshoek. Om hiervan gebruik te kunnen maken moet je een account aanvragen.
In Node Red kan eventueel ook een uitbreiding worden geïnstalleerd, maar deze is niet noodzakelijk.
DayAhead Electriciteits-prijzen
Zoals gezegd zijn dynamische electriciteits-prijzen de kern van dit MESS. Ik ga ervan uit dat lezers van deze bijdrage bekend zijn met het principe van dynamische electriciteits-prijzen. Ook deze gegevens zijn op internet voor kleinschalig/particulier gebruik kosteloos beschikbaar bij ENTSO-E. En ook hier is een account nodig om gebruik te kunnen maken van hun programmeer-interface.Home Assistant
Indien je uitwisseling wilt met Home Assistant moet je in Node Red een uitbreiding installeren.SolarEdge
De electriciteit van mijn SolarEdge zonnepanelen-systeem loopt via een extra electriciteitsmeter (een ET340). Hiermee zijn de gegevens binnen het Victron-systeem direct beschikbaar zonder een interface met het SolarEdge-systeem zelf. De productie-gegevens worden ook per uur verzameld en bijgehouden. Hiermee wordt het verschil tussen de prognose van zonne-energie en de werkelijke productie bepaald. Op basis hiervan wordt de prognose voor de rest van de dag bijgestuurd.Het MESS programma
Wanneer je alle hiervoor genoemde hobbels hebt genomen kun je beginnen aan het eigenlijke programmeerwerk.Ik heb bij elkaar horende activiteiten en programma-stappen (nodes) ondergebracht in aparte flows (tabbladen).
:strip_exif()/f/image/JjecxUEbcPwcU5jTUT1AcaTm.jpg?f=fotoalbum_large)
Ieder tabblad bevat een flow. Bij Node Red is een flow een eenheid van nodes (activiteiten) en functies (logica) die samen een programma vormen.
De verschillende flows worden hierna uitgewerkt.
Flow - Solar
Ik heb zonnepanelen in drie richtingen, oost, zuid en west. Deze hebben een verschillende capaciteit en hellingshoek. Om deze reden wordt de prognose van zonne-energie (de forecast) drie maal apart opgevraagd en vervolgens gecombineerd.Voor de aanvraag wordt aldus drie maal een URL samengesteld en als http-request aan https://api.forecast.solar/ gezonden. Het antwoord komt retour met in de payload een json-bestand.
Ieder json-bestand wordt uitgepakt en opgeslagen in een global-context entiteit.
Als er aldus drie json bestanden zijn ontvangen worden deze samengevoegd tot één "Solar Forecast" bestand.
In de Solar-flow wordt ook de productie van SolarEdge bijgehouden. Ieder uur wordt de productie tot dat moment in een tabel vastgelegd.
Op basis hiervan wordt er een vergelijking gemaakt tussen de prognose en de feitelijk door SolarEdge gerealiseerde zonne-opbrengst. Aldus wordt de prognose verhoogd of (meestal) verlaagd. Bij negatieve stroomprijzen wordt de prognose voor de betreffende uren op nul gesteld. Dit omdat ik dan mijn zonnepanelen uitschakel.
:strip_exif()/f/image/WaPVGchpUKJeoJMlfTEH0Lme.jpg?f=fotoalbum_large)
Toelichting op de onderdelen:
1) Om te zorgen dat het systeem nieuwe gegevens gaat ophalen worden ieder uur de eerder ontvangen Json gegevens uitgewist.
2) Vervolgens controleert het systeem of de Json gegevens bestaan of niet bestaan. Als de gegevens niet (meer) bestaan, dan worden parameters voor de betreffende panelen-groep ingesteld. Deze controle wordt tevens iedere minuut uitgevoerd indien de gegevens om een andere reden verwijderd zijn of ververst moeten worden.
2a) Bij deze stap wordt gecontroleerd of Solar Forecast (eventueel) afwezig is ('is null'). Zo ja, dan wordt de bovenste node-exit gebruikt en wordt Solar Forecast opnieuw gemaakt op basis van reeds aanwezige Json gegevens.
3) De parameters worden naar een functie-node 'Make URL' gestuurd. Deze combineert de parameters tot een juiste URL welke via een http-request aan Solar.Forecast wordt gezonden.
Dit is Change-node 'East param':
Set | msg.topic |
to the value | East |
Set | msg.declination |
to the value | 50 |
Set | msg.azimuth |
to the value | -109 |
Set | msg.power |
to the value | 6 |
Kies hier de juiste waardes voor je specifieke zonne-panelen installatie.
Dit is Change-node 'General param':
Set | msg.latitude |
to the value | 52.01111 |
Set | msg.longitude |
to the value | 4.43333 |
Kies hier de juiste waardes voor je persoonlijke locatie in Nederland
De JavaScript van functie-node 'Make URL' is opgenomen in de Flow-tekst.
Dit is een voorbeeld van zo'n URL:
code:
1
| https://api.forecast.solar/estimate/watthours/period/52.01111/4.43333/50/-109/6 |
Het antwoord van de website wordt omgezet in Json-tekst.
4) In de msg met parameters voor de URL is als topic de term East, South of West meegegeven. Deze topic-naam is nog steeds aanwezig in de uitvoer-msg van de json-conversie.
Op basis hiervan wordt een splitsing gemaakt en wordt het resultaat opgeslagen in een global-context entiteit met daarin het betreffend naam-deel. Na 'East' wordt de aanvraag herhaald voor 'South' en als het resultaat van 'South' is ontvangen, normaals voor 'West'.
Zo'n Json object ziet er als volgt uit:
5) Als de gegevens van Json West binnen zijn kunnen de drie separate prognoses tot één geheel worden samengevoegd. Dit gebeurt (voor het gemak) in drie separate functie-nodes. Als derde stap wordt de prognose vergeleken met behaalde zonne-opbrengst tot dat moment. Zonodig wordt de prognose overeenkomstig aangepast.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 {"result": {"2024-05-13 05:50:12":0, "2024-05-13 06:00:00":14, "2024-05-13 07:00:00":392, "2024-05-13 08:00:00":904, "2024-05-13 09:00:00":1377, "2024-05-13 10:00:00":1668, "2024-05-13 11:00:00":1946, "2024-05-13 12:00:00":1936, "2024-05-13 13:00:00":1666, "2024-05-13 14:00:00":1493, "2024-05-13 15:00:00":1337, "2024-05-13 16:00:00":1212, "2024-05-13 17:00:00":1091, "2024-05-13 18:00:00":904, "2024-05-13 19:00:00":657, "2024-05-13 20:00:00":387, "2024-05-13 21:00:00":174, "2024-05-13 21:27:01":22, "2024-05-14 05:48:39":0, "2024-05-14 06:00:00":38, "2024-05-14 07:00:00":836, "2024-05-14 08:00:00":1578, "2024-05-14 09:00:00":1921, "2024-05-14 10:00:00":1869, "2024-05-14 11:00:00":1753, "2024-05-14 12:00:00":1695, "2024-05-14 13:00:00":1614, "2024-05-14 14:00:00":1488, "2024-05-14 15:00:00":1331, "2024-05-14 16:00:00":1195, "2024-05-14 17:00:00":1059, "2024-05-14 18:00:00":871, "2024-05-14 19:00:00":636, "2024-05-14 20:00:00":374, "2024-05-14 21:00:00":166, "2024-05-14 21:28:34":22 }, "message": {"code":0, "type":"success", "text":"", "pid":"xxxxxxxx", "info": {"latitude":52.0111, "longitude":4.4311, "distance":0, "place":"Adres huisnummer, Postcode Plaatsnaam, Netherlands", "timezone":"Europe/Amsterdam", "time":"2024-05-13T18:00:04+02:00", "time_utc":"2024-05-13T16:00:04+00:00"}, "ratelimit":{ "zone":"IP nnn.nnn.nnn.nnn", "period":3600, "limit":12, "remaining":8} } }
De JavaScript van functie-node 'Make 3 x Solar Forecast' is opgenomen in de Flow-tekst.
De JavaScript van functie-node 'Combine Solar Forecast' is opgenomen in de Flow-tekst.
De JavaScript van functie-node 'Make Solar Forecast Modified' is opgenomen in de Flow-tekst.
6) Iedere dag om 10:00 uur stuur ik de solar-forecast gegevens ook naar mijn e-mail-adres voor archiverings-doeleinden.
7) Ook de consumptie-prognose wordt in de Solar-flow aangemaakt en opgeslagen voor gebruik bij latere berekeningen en prognoses. Ik gebruik hiervoor geen feitelijke registratie maar ben uitgegaan van persoonlijke schattingen per uur van de dag.
De JavaScript van functie-node 'Make Consump Forecast' is opgenomen in de Flow-tekst.
8) Dit onderdeel staat eigenlijk los van de Solar Forecast stappen. Het betreft de monitoring en uur-registratie van de feitelijke productie van Zonne-energie van mijn SolarEdge installatie.
De JavaScript van functie-node 'Monitor SolarEdge' is opgenomen in de Flow-tekst.
Flow - DayAhead
Iedere dag om circa 15:00 uur publiceert Entso-e de gegevens van de electriciteits-prijzen per uur tot de volgende avond.Dat betekent dat vóór 15:00 alleen de gegevens van de zelfde dag beschikbaar zijn en ná 15:00 uur ook de gegevens van de volgende dag. Dit beperkt de horizon tot wanneer plannen gemaakt kunnen worden.
Bij Entso-e worden de gewenste gegevens opgevraagd door een URL met daarin de juiste parameters te sturen via een http-request. Het antwoord komt terug als xml-bestand. Mijn flow bewaart deze gegevens in een global.context entiteit.
In een volgende stap worden de xml-gegevens verder verwerkt en omgezet naar een tabel met bruikbare gegevens met voor ieder uur de bijbehorende kWh-prijs. Ook wordt er een tekst-regel gemaakt met de uren met speciale tarieven. Deze wordt aan Home Assistant gestuurd voor weergave in een dashboard.
:strip_exif()/f/image/KCVsFkIK6vebLFyRPuD2xMEK.jpg?f=fotoalbum_large)
1) Omdat vanaf 15:00 uur nieuwe gegevens gepubliceerd kunnen worden probeert het MESS ieder uur of de aanwezige gegevens reeds 48 uur betreffen. Als dat zo is zijn de nieuwe gegevens namelijk reeds binnen.
2) Als de bestaande gegevens minder dan 48 uur betreffen (in casu 24) wordt de bestaand XML met de eerdere gegevens verwijderd (4).
3) Ook worden iedere dag om 00:06 uur de bestaande gegevens verwijderd, dus daarmee de oude gegevens van de voorgaande dag.
4) Door het verwijderen van de bestaande XML kan een nieuwe verwerking worden gestart.
5) In alle gevallen wordt iedere minuut gecontroleerd of er ...
6) ... een XML aanwezig is. Zo ja, dan is XML niet null en wordt controle (7) uitgevoerd. Als de XML niet bestaat (dus wel null) met deze worden opgehaald en zal stap (9) worden geactiveerd.
7) Indien de tabel met prijs-gegevens 'PriceArray' niet bestaat (is null) dan wordt deze bij (17) aangemaakt.
8) Hiermee kan (9) op verzoek worden gestart.
9) In deze functie-node wordt de URL opgebouwd om de prijs-gegegevsn bij entso-e aan te vragen.
10) Voor controle en debugging wordt de URL in een global.context entiteit bewaard.
11) de URL wordt met een http-request aan entso-e gezonden.
12) Voor controle en debugging wordt de HTTP in een global.context entiteit bewaard.
13) Het resultaat wordt ontvangen in de vorm van XML gegevens.
14) Voor controle en debugging wordt de XML in een global.context entiteit bewaard.
15) Indien de ontvangen XML niet correct is, of leeg wordt er een foutmelding gemaakt.
16) Een foutmelding wordt via e-mail gezonden.
17) Als de XML met DayAhead-gegevens correct is ontvangen wordt een tabel gemaakt met daarin de prijs-gegevens per uur. De prijzen worden omgerekend naar cent per kWh.
18) Een eventuele fout wordt per e-mail gemeld en in het debug-scherm getoond.
19) Ook deze prijs-gegevens worden in een global.context entiteit bewaard voor gebruik door andere functies die de prijs-gegevens interpreteren.
20) Voor testdoeleinden (een speciale verwerking in Home Assistant) wordt een samenvatting in tekstvorm gegenereerd en aan Home Assistant gezonden. Dit is niet essentieel voor het MESS.
21) Voor leesbaarheid worden uren gegroepeerd getoond, zoals "negative", "zero", "very low", "low", "high" etc.
22) de resultaten worden gestuurd naar nodes die de gegevens gebruiken bij interpretaties en beslissingen.
23) Ook worden de gegevens naar Home Assistant gezonden voor weergave in een dashboard.
24) De status van de actuele prijs "negative", "zero" etc wordt eveneens gezonden.
Flow - Targets
Wanneer de 'externe' gegevens zoals Zonne-prognose en electriciteits-prijzen aldus bekend zijn kunnen deze worden gecombineerd met de real time gegevens van mijn Victron-installatie.:strip_exif()/f/image/mNQuHPTIZaQZOvj9h2nlaVtb.jpg?f=fotoalbum_large)
1) De beschikbare zonne-energie wordt gebaseerd op de SolarEdge-productie. Die wordt verminderd met het verbruik van het 'huis' en van zogenaamde non-critical loads. Twee aparte zonne-panelen leveren via een MPPT kastje nog een kleine plus-bijdrage.
2) Er zijn meerdere parameters die de mogelijkheden en opties bepalen. Daarnaast is de actuele SoC (State-of-Charge) van de batterijen erg relevant en de beschikbaarheid van zonne-energie. Met name dit laatste fluctueert per seconde.
Dit alles wordt samengebracht in een functie-node "Calculate Targets" die de instellingen berekent waarmee het Victron-systeem het gewenste gedrag uitvoert. Zie (5).
3) De belangrijkste parameters zijn:
• De Max Current.
• Het minimum SoC percentage.
• De max Inverter Power.
Onder omstandigheden kan het laden van de batterijen nog helemaal worden uitgeschakeld (Charge Disable), kan het MPPT systeem worden uitgeschakeld (Charger MPPT On/Off) en kan via een relais (Relay 2) in de Cerbo de SolarEdge installatie worden uitgeschakeld.
4) Voor gebruik in een dashboard worden de ESS settings gezonden aan Home Assistant.
5) De logica van het programma in functie-node 'Calculate Targets' is het feitelijke 'Brein' van het MESS:
MESS - het Brein
De beslissingen van het MESS zijn gebaseerd op vaste waardes (meestal bepaald door de hardware), per dag wisselende gegevens (zoals DayAhead electriciteits-prijzen), per uur wisselende gegevens (zonne-prognose) en real-time wisselende gegevens (verbruik, zonne-opbrengst).Al deze gegevens worden continu aangeleverd aan de functie-node 'Calculate Targets'. Iedere tien seconden wordt een berekenings-routine gestart die de instellingen van het Victron systeem (her)berekent en aanpast.
Het volledige JavaScript programma staat hieronder. De meeste functie-namen verklaren zichzelf.
Ik bechrijf de grote lijnen.
• SolarMakeForecasts
De zonne-prognose voor de gehele dag wordt separaat bepaald in Flow 'Solar'. De functie 'SolarMakeForecasts' gebruikt deze gegevens om te berekenen hoe de prognose verdeeld is over periodes met lage en hoge electriciteits-tarieven.
• BatteryCalculateLevels
Op basis van de actuele SoC en de prognoses van zonne-energie en consumptie wordt een verwachting gemaakt van de SoC van de batterijen. Hierbij wordt rekening gehouden dat een batterij niet voller kan worden dan vol en niet leger kan worden dan een minimum SoC.
• CalculateEnergyToFullSoC
Eén van de doelen is dat de batterij-capaciteit optimaal wordt gebruikt. Daarvoor wordt berekend hoeveel energie nodig is om de batterijen vol te krijgen. Liefst vandaag, eventueel pas morgen.
• FindCheapChargeHour
Een tweede doel is om te 'handelen' met electriciteit. Dat wil zeggen verkopen als de prijs hoog is en later weer laden als de prijs laag is. De keuze om te handelen is afhankelijk van het prijsverschil tussen actuele verkoop-prijs en latere 'vervangings-prijs'.
• FindHighSellHour
Deze functie werkt samen met de voorgaande functie om vast te stellen of het actuele uur al het juiste is om te verkopen.
• FindEnergyToSell
Bij het verkopen moet energie overblijven voor eigen gebruik. De functie 'FindEnergyToSell' bepaalt op basis van prognoses hoeveel energie beschikbaar is om te verkopen.
• NegativePriceComes / ZeroPriceComes / VeryLowPriceComes
Voor het nemen van beslissingen is het nodig om te weten of er mogelijk gunstiger momenten komen. De genoemde functies helpen daarbij.
• SetSolarAvailable
Het laden van de batterijen kan vanaf het grid, maar ook vanaf zonne-energie. Bij voldoende zonne-energie kan gewacht worden tot de electriciteits-tarieven laag zijn. Dan wordt eerst, bij hoge(re) tarieven, zonne-energie aan het net geleverd en worden de batterijen pas geladen bij lage(re) tarieven.
• TryAllRules
Deze functie staat achterin het programma. Het is de hoofd-routine waarmee alle mogelijke opties worden aangeroepen. De mogelijke opties staan in functies met een naam 'Try...'. Zodra zo'n functie 'slaagt' worden de Victron parameters overeenkomstig bepaald. De opvolgende opties worden niet uitgevoerd. Als een functie verderop in de lijst 'slaagt' is ook zeker dat de voorgaande opties niet van toepassing zijn.
• TryRule_DESS
Indien (vanuit Home Assistant instellingen) is ingesteld dat het systeem het officiële DESS moet volgen zal deze functie 'slagen'. Het MESS zal dan geen eigen wijzigingen toepassen.
• TryRule_FinishLowSoCCharging
Bij een eerdere verwerking kan zijn vastgesteld dat de SoC lager is dan het toegestane minimum. Het systeem zal dan (blijven) laden van het Grid voor tenminste vijf minuten om aan/uit knipperen te voorkomen.
• TryRule_SoCBelowBottom
Dit is de functie die vaststelt dat de SoC lager is dan het toegestande minimum. Het systeem zal gaan laden van het Grid voor tenminste vijf minuten. Daarna zal de SoC opnieuw worden bezien.
• TryRule_SellHighPrice
In het kader van handelen bij hoge electriciteits-tarieven zal het MESS, afhankelijk van het huidige tarief en te verwachten tarieven de daarvoor beschikbare energie aan het Grid terugleveren.
• TryRule_NegativePriceWait
Als er negatieve electriciteits-prijzen komen kan het nuttig zijn om daarop te wachten voor eventueel laden van het grid of zelfs zonne-energie plaatsvindt. Deze functie zoekt de combinatie met de meest-negatieve tarieven.
• TryRule_NegativePriceNow
Als de electriciteits-prijs op dit moment negatief is wordt de batterij van het grid geladen. Mogelijk wordt gewacht op nóg lagere prijzen.
• TryRule_ZeroPriceWait
Als er 'nul' electriciteits-prijzen komen kan het nuttig zijn om daarop te wachten voor eventueel laden van het grid of zelfs zonne-energie plaatsvindt.
• TryRule_ZeroPriceNow
Als de electriciteits-prijs op dit moment nul is wordt de batterij van het grid geladen.
• TryRule_VeryLowPriceWait
Als er heel lage electriciteits-prijzen komen kan het nuttig zijn om daarop te wachten voor eventueel laden van het grid of zelfs zonne-energie plaatsvindt. Heel laag wordt (subjectief) bepaald indien de absolute prijs lager is dan 2 cent.
• TryRule_VeryLowPriceNow
Als de electriciteits-prijs op dit moment heel laag is wordt de batterij van het grid geladen.
• TryRule_LowPriceNow
Als de electriciteits-prijs op dit moment laag is wordt de batterij van het grid geladen. 'Laag' kan per dag verschillen en is afhankelijk van het verschil met het gemiddelde van die dag.
• TryRule_HighPriceNow
Als de electriciteits-prijs op dit moment hoog is wordt de batterij niet van het grid geladen. 'Hoog' kan per dag verschillen en is afhankelijk van het verschil met het gemiddelde van die dag.
• TryRule_SoCBelowMinimum
De SoC is lager dan het gewenste minimum. Het systaam zal proberen te laden.
• TryRule_BetterPriceLater
Er zijn geen speciale lage of hoge prijzen. Laden van zonne-energie is prima, maar eventueel (bij)laden vanaf het grid kan beter worden uitgesteld.
• TryRule_NoSpecialPrice
Er zijn geen speciale lage of hoge prijzen. Laden van zonne-energie is prima, maar (bij)laden vanaf het grid niet.
• CreateReturnMessages
De (nieuwe) instellingen voor het Victron-systeem worden in flow-messages doorgegeven.
• Start of the Program
De logica van het MESS programma is opgedeeld in functies die hiervoor zijn beschreven.
Het feitelijke programma is daardoor relatief kort.
Flow - Auto Laadstation
Niet iedereen zal een auto laadstation hebben en als dat wel het geval is zal dat ook niet altijd van Victron zijn.Indien wel, dan maakt het het een stuk eenvoudiger om alle onderdelen op elkaar af te stemmen.
De belangrijkste taak van de flow 'Auto Laadstation' is het regelen en optimaliseren van de ingaande- en uitgaande energie-stromen door de electriciteitsmeter. Ik heb een drie-fase 25 ampère aansluiting en deze moet niet worden overbelast. Bij het gelijktijdig laden van de auto en de victron-batterijen op volle kracht wordt de grens al overschreden, laat staan als er nog huis-verbruik, een wasmachine, vaatwasser of oven bij komt.
Hier moet dus worden gemoniteerd en gereguleerd, en zonodig snel ook. Dit wordt door functie-node 'Calc EV Charge Settings' gedaan.
:strip_exif()/f/image/8sjaX27x5giO5LxB4VDYI7YR.jpg?f=fotoalbum_large)
1) De calculatie-functie gebruikt gegevens van meerdere Victron entiteiten.
2) De resultaten van de berekening worden als nieuwe settings aan Victron entiteiten gezonden.
3) De berekeningen worden door functie-node 'Calc EV Charge Settings' uitgevoerd.
Flow - Home Assistant
Voor de weergave van gegevens in een dashboard en voor het ophalen van instellingen is er een interface met Home Assistant gemaakt.In flow 'Home Assistant' worden iedere acht seconden enkele 'Helper' entiteiten van Home Assistant uitgelezen. Hiermee kan ik eenvoudig het gewenste gedrag van het MESS beïnvloeden.
:strip_exif()/f/image/Fkaq2XVrSuy4Sd3zwBL3rVVi.jpg?f=fotoalbum_large)
1) De actuele status van het Victron DESS wordt aan Home Assistant gestuurd voor weergave in een dashboard.
2) Tevens wordt iedere 8 seconden een cyclus gestart om mogelijk gewijzigde gegevens bij Home Assistant op te halen.
Ik weet dat hier ook andere mogelijkheden voor bestaan, maar de gekozen methode vond ik het eenvoudigste en (vooral!) meest robuust.
In Home Assistant heb ik Helper-entiteiten aangemaakt met keuze lijsten. Deze kan ik in een Home Assistant dashboard eenvoudig selecteren. Een wijziging zal aldus binnen 8 seconden in het Victron MESS bekend zijn.
3) In kan ook kiezen om het standaard DESS te gebruiken (Off, Auto, Buy, Sell).
4) De minimaal gewenste SoC (State-of-Charge). Normaal kies ik hier 20, 15 of 10, maar voor test-doeleinden is het makkelijk om andere waarden in te kunnen stellen.
5) Het Grid Setpoint wordt gebruikt voor het (geforceerd) terugleveren van electriciteit aan het Grid. Ook hier van een standaard-waarde worden gekozen. Normaal kies ik hier 10.
6) Hoe wil ik het auto laadstation gebruiken? Naast de standaard modus-waardes 0: manual, 1: auto (= PV afhankelijk), en 2: scheduled heb ik 'eigen' waardes toegevoegd:
3: Scheduled (HA Schedule), 4 Optimized (Node Red) en 5: Niet gebruiken.
Deze laatste keuzes worden besproken bij Flow auto laadstation.
7) Als gebruik gemaakt worden van modus 3 (HA Schedule) kan het start-uur van laden worden opgegeven.
8) Evenzo kan het laatste uur van laden worden opgegeven.
Afsluiting
Geenszins wil ik pretenderen iets unieks of heel bijzonders te hebben gemaakt.Het bovenstaande is het resultaat van mijn persoonlijke interesse en hobby.
Ik heb het hier gepubliceerd voor anderen om er plezier aan te beleven en eventueel iets van op te steken.
Succes!
[ Voor 255% gewijzigd door MJ de Bruijn op 05-10-2024 15:15 ]