SolarEdge - Power Reduction Control met ESP8266

Pagina: 1
Acties:

Acties:
  • +11 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02

SolarEdge Power Reduction Control met ESP8266

SolarEdge omvormers hebben een optie om het uitgangsvermogen te beperken: Power Reduction Control. Dit geldt overigens niet voor alle uitvoeringen.
Met Power Reduction Control kan het geproduceerde vermogen worden gereguleerd of beperkt, eventueel tot 0%.

Een vermindering van het vermogen kan nodig zijn bij een off-grid situatie in combinatie met een batterij-systeem, wanneer de batterij bijna vol is.
Wanneer de batterij helemaal vol is kan/moet het vermogen direct tot 0% worden terug-gebracht. Ook in situaties waar stroom-tarieven negatief zijn, kan het zinvol zijn om de productie van zonnepanelen tot nul te reduceren.

Het aansturen van de SolarEdge omvormer gaat veelal via ModBus commando's, of via een (ingewikkelde) methode die frequentie-shifting wordt genoemd. Bij dit laatste wordt door het batterij-systeem de stroom-frequentie langzaam opgevoerd van 50 Hz naar 51 Hz waarbij de SolarEdge Omvormer het vermogen evenredig vermindert.

Afbeeldingslocatie: https://tweakers.net/i/W3rw3cVdE2kzoeEkyoiWrDvYXCk=/x800/filters:strip_icc():strip_exif()/f/image/sAoTnY9rzfQauHeJMnxp7ZJl.jpg?f=fotoalbum_large

Nu is er ook een derde mogelijkheid om het vermogen te reguleren. In de SolarEdge Omvormer zit een aansluitblok met indicaties L1, L2, L3, L4, Gnd en V. Het is mogelijk om de aansluitingen L1, L2, L3 en L4 door middel van relais met de V te verbinden. Hiermee kunnen totaal 16 "standen" worden doorgegeven. Deze aansluiting wordt een RRCR verbinding genoemd - Radio Ripple Control Receiver - naar een oorspronkelijke uitbreiding die separaat kon worden aangeschaft.

Afbeeldingslocatie: https://tweakers.net/i/ux8mY90vd8urrjtxhaoTYnbo3SU=/x800/filters:strip_icc():strip_exif()/f/image/7GKV3ltjkqSMM55T05BM9fyR.jpg?f=fotoalbum_large

Het toevoegen van vier fysieke relais en de aansturing daarvan is best een "groot" doe-het-zelf project. Daarom heb ik een "light" versie gemaakt. Deze gebruikt opto-couplers als relais en een ESP8266 microchip met ESPHome als besturingssysteem. Opto-couplers zijn een soort relais waarbij de schakeling niet gebeurt door een mechanische beweging met een spoel maar door licht dat een licht-gevoelige transistor tot geleiding brengt.

Het gebruik van ESP8266 microchips in combinatie met ESPHome valt buiten de scope van deze bijdrage, maar voor wie daarmee bekend is volgt hier een toelichting.

Afbeeldingslocatie: https://tweakers.net/i/v7FJ3LeV83JYaoNteBNUtgBR47E=/x800/filters:strip_icc():strip_exif()/f/image/O2UWMxQfL88pHQAuauCOinkc.jpg?f=fotoalbum_large

Ik gebruik vier uitgangen van de ESP8266 voor de aansturing van vier opto-couplers. Dit gaat via een transistor van 220 - 330 ohm. De min-kant wordt aan de Gnd aangesloten. De schakel-kant van de opto-coupler heeft een plus en een uitgang. De plus wordt aangesloten op de V van de SolarEdge connector en de uitgang wordt aangesloten op één van de aansluitingen L1, L2, L3 of L4.

Afbeeldingslocatie: https://tweakers.net/i/9evByqmpGgD4kwQbHDKQAmb1xEk=/800x/filters:strip_icc():strip_exif()/f/image/1jgkOwByMUdBozIb20lGD6r7.jpg?f=fotoalbum_large

Voor mijn specifieke situatie wil ik, ook zonder een werkende wifi, het systeem kunnen uitschakelen vanuit mijn batterij-systeem. Daarom heb ik ook een ingang van de ESP8266 gebruikt die is verbonden met een relais in mijn Victron batterij-systeem. Als dit relais aldaar geactiveerd wordt, wordt de ingang van de ESP8266 met Gnd verbonden en geeft daarmee een schakel-puls. Via een interne programma-definitie zet de ESP8266 de uitgangen L1, L2, L3 en L4 dan in een stand waarbij de SolarEdge geheel wordt uitgeschakeld.

Afbeeldingslocatie: https://tweakers.net/i/mZt8CjZEnaUiRnzShNtec0gjCco=/800x/filters:strip_icc():strip_exif()/f/image/jDCJ95ndRuCZBuTtR2A1Ols7.jpg?f=fotoalbum_large

De Esp8266 en de opto-couplers passen samen in een klein systeem-doosje.

Afbeeldingslocatie: https://tweakers.net/i/YXn9riueetSiRxuUJfVudfKuMjk=/x800/filters:strip_icc():strip_exif()/f/image/dBYmGVG7ya8YvDIS71SULkZO.jpg?f=fotoalbum_large

Voor de stroomvoorziening gebruik ik een aansluiting op het SolarEdge moederboard. Daar zit een connector met +5v en Gnd en met +12v en Gnd. Op de pinnetjes passen de contra-schuifjes van de bekende experimenteer-draadjes voor micro-schakelingen.

Afbeeldingslocatie: https://tweakers.net/i/-seXzjsdv6M_Fc0uzVpw5e-5c1w=/x800/filters:strip_icc():strip_exif()/f/image/NNaREgsbRYYmGxgg0jxGo75O.jpg?f=fotoalbum_large

De definitie van de betekenis van de verschillende combinaties van L1, L2, L3 en L4 kan worden ingesteld via de setapp toepassing of via het menu van de omvormer. Vooralsnog heb ik de waardes 1 (0001), 2 (0010) tot 9 (0101) gebruikt voor de percentages 10%, 20% tot 90%.
De waarde 0 (0000) betekent geen beperking, dus 100% productie. Voor geheel afschakelen heb ik waarde 15 (1111) gekozen.
Bij reboot staan alle uitgangen op nul. Dat betekent dat er geen beperking is in de productie. Dat leek me praktisch als de aansturing niet actief is.

Afbeeldingslocatie: https://tweakers.net/i/wp2WgxSkuPfkeka7TXfceeVG55I=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/yNuirN6liJSVyVNEScksiSoT.jpg?f=user_large

In mijn Victron batterij-systeem regel ik alle instellingen met Node Red. Daar heb ik ook de ESPHome uitbreiding geïnstalleerd. Hiermee kan ik vanuit het Victron-systeem het vermogen van de SolarEdge omvormer regelen, bijvoorbeeld bij een off-grid situatie. De getoonde afbeelding is slechts de elementaire aan-uit schakeling.

Disclaimer: Dit project is gebaseerd op mijn persoonlijke kennis, kunde en ervaring. Ongetwijfeld kunnen zaken anders (en beter) en zijn er voor iedere keuze alternatieven. Dit project is de uitkomst van mijn keuzes. Lees het om te leren of om je te laten inspireren.

Let op: Het werken aan een SolarEdge Omvormer is niet zonder risico's. Schakel altijd de stroom naar de omvormer geheel uit.

Ik gebruik aansluitingen van de SolarEdge op een wijze die niet is gedocumenteerd of zo bedoeld. Ik gebruik een 5 volt aansluiting voor de ESP8266 zonder dat ik ook maar enigszins weet of dit kan en geschikt is en of dit zal blijven werken.
Het nadoen is volledig voor eigen risico van de betrokkene.

Edit: Voor het programmadeel om vanuit een Victron Cerbo de SolarEdge aan te sturen zie:
https://gathering.tweaker...message/79102148#79102148

Acties:
  • +1 Henk 'm!

  • RikHa
  • Registratie: September 2022
  • Laatst online: 22-04 14:39
MJ de Bruijn schreef op woensdag 22 mei 2024 @ 17:07:

SolarEdge Power Reduction Control met ESP8266

SolarEdge omvormers hebben een optie om het uitgangsvermogen te beperken: Power Reduction Control. Dit geldt overigens niet voor alle uitvoeringen.
Met Power Reduction Control kan het geproduceerde vermogen worden gereguleerd of beperkt, eventueel tot 0%.

Een vermindering van het vermogen kan nodig zijn bij een off-grid situatie in combinatie met een batterij-systeem, wanneer de batterij bijna vol is.
Wanneer de batterij helemaal vol is kan/moet het vermogen direct tot 0% worden terug-gebracht. Ook in situaties waar stroom-tarieven negatief zijn, kan het zinvol zijn om de productie van zonnepanelen tot nul te reduceren.

Het aansturen van de SolarEdge omvormer gaat veelal via ModBus commando's, of via een (ingewikkelde) methode die frequentie-shifting wordt genoemd. Bij dit laatste wordt door het batterij-systeem de stroom-frequentie langzaam opgevoerd van 50 Hz naar 51 Hz waarbij de SolarEdge Omvormer het vermogen evenredig vermindert.

[Afbeelding]
Nu is er ook een derde mogelijkheid om het vermogen te reguleren. In de SolarEdge Omvormer zit een aansluitblok met indicaties L1, L2, L3, L4, Gnd en V. Het is mogelijk om de aansluitingen L1, L2, L3 en L4 door middel van relais met de V te verbinden. Hiermee kunnen totaal 16 "standen" worden doorgegeven. Deze aansluiting wordt een RRCR verbinding genoemd - Radio Ripple Control Receiver - naar een oorspronkelijke uitbreiding die separaat kon worden aangeschaft.

[Afbeelding]
Het toevoegen van vier fysieke relais en de aansturing daarvan is best een "groot" doe-het-zelf project. Daarom heb ik een "light" versie gemaakt. Deze gebruikt opto-couplers als relais en een ESP8266 microchip met ESPHome als besturingssysteem. Opto-couplers zijn een soort relais waarbij de schakeling niet gebeurt door een mechanische beweging met een spoel maar door licht dat een licht-gevoelige transistor tot geleiding brengt.

Het gebruik van ESP8266 microchips in combinatie met ESPHome valt buiten de scope van deze bijdrage, maar voor wie daarmee bekend is volgt hier een toelichting.

[Afbeelding]
Ik gebruik vier uitgangen van de ESP8266 voor de aansturing van vier opto-couplers. Dit gaat via een transistor van 220 - 330 ohm. De min-kant wordt aan de Gnd aangesloten. De schakel-kant van de opto-coupler heeft een plus en een uitgang. De plus wordt aangesloten op de V van de SolarEdge connector en de uitgang wordt aangesloten op één van de aansluitingen L1, L2, L3 of L4.

[Afbeelding]
Voor mijn specifieke situatie wil ik, ook zonder een werkende wifi, het systeem kunnen uitschakelen vanuit mijn batterij-systeem. Daarom heb ik ook een ingang van de ESP8266 gebruikt die is verbonden met een relais in mijn Victron batterij-systeem. Als dit relais aldaar geactiveerd wordt, wordt de ingang van de ESP8266 met Gnd verbonden en geeft daarmee een schakel-puls. Via een interne programma-definitie zet de ESP8266 de uitgangen L1, L2, L3 en L4 dan in een stand waarbij de SolarEdge geheel wordt uitgeschakeld.

[Afbeelding]
De Esp8266 en de opto-couplers passen samen in een klein systeem-doosje.

[Afbeelding]
Voor de stroomvoorziening gebruik ik een aansluiting op het SolarEdge moederboard. Daar zit een connector met +5v en Gnd en met +12v en Gnd. Op de pinnetjes passen de contra-schuifjes van de bekende experimenteer-draadjes voor micro-schakelingen.

[Afbeelding]
De definitie van de betekenis van de verschillende combinaties van L1, L2, L3 en L4 kan worden ingesteld via de setapp toepassing of via het menu van de omvormer. Vooralsnog heb ik de waardes 1 (0001), 2 (0010) tot 9 (0101) gebruikt voor de percentages 10%, 20% tot 90%.
De waarde 0 (0000) betekent geen beperking, dus 100% productie. Voor geheel afschakelen heb ik waarde 15 (1111) gekozen.
Bij reboot staan alle uitgangen op nul. Dat betekent dat er geen beperking is in de productie. Dat leek me praktisch als de aansturing niet actief is.

[Afbeelding]
In mijn Victron batterij-systeem regel ik alle instellingen met Node Red. Daar heb ik ook de ESPHome uitbreiding geïnstalleerd. Hiermee kan ik vanuit het Victron-systeem het vermogen van de SolarEdge omvormer regelen, bijvoorbeeld bij een off-grid situatie. De getoonde afbeelding is slechts de elementaire aan-uit schakeling.

Disclaimer: Dit project is gebaseerd op mijn persoonlijke kennis, kunde en ervaring. Ongetwijfeld kunnen zaken anders (en beter) en zijn er voor iedere keuze alternatieven. Dit project is de uitkomst van mijn keuzes. Lees het om te leren of om je te laten inspireren.

Let op: Het werken aan een SolarEdge Omvormer is niet zonder risico's. Schakel altijd de stroom naar de omvormer geheel uit.

Ik gebruik aansluitingen van de SolarEdge op een wijze die niet is gedocumenteerd of zo bedoeld. Ik gebruik een 5 volt aansluiting voor de ESP8266 zonder dat ik ook maar enigszins weet of dit kan en geschikt is en of dit zal blijven werken.
Het nadoen is volledig voor eigen risico van de betrokkene.
Dat ziet er weer prachtig uit, wederom petje af hoor!

Ondanks je disclaimer kan ik het niet laten... Wat namelijk bij me opkomt is nog wel de aansluiting van het Cerbo relais. Kun je dat relais niet rechtstreeks verbinden met bijvoorbeeld L1 en GND van de RPI? Dan geef je die combi waarde 0% en de rest laat je dan door de ESP8266 controleren. Daarmee voorkom je dat de omvormer weigert uit te schakelen bij een eventuele storing van de ESP8266 of een optocoupler.

Nog iets, ik dacht dat de SE ook op meerdere manieren tegelijk teruggeregeld kan worden. Misschien kun je de ESP8266 combineren met frequency shifting voor nog meer redundancy.

Disclaimer: dit is geen kritiek maar een poging tot meedenken om je mooie oplossing (Harold H. kan er nog een puntje aan zuigen ;) ) nog iets te perfectioneren.

23 kWp, 80 kWh, 11 kW laden, 17 kW ontladen. Victron VRM


Acties:
  • 0 Henk 'm!

  • wian
  • Registratie: September 2005
  • Niet online
Mooi projectje, bedankt voor het delen! Fijn om nu ook een hardwarematige oplossing te hebben die volledig onafhankelijk is van de SolarEdge cloud. Ik had een softwarematige oplossing dmv lokale modbus aansturing. Dit werkte aanvankelijk prima, maar sinds het experimenteren met de mysolaredge app om via de cloud automatisch uit te schakelen bij een negatief stroomtarief, werkte de modbus oplossing bij mij niet meer betrouwbaar. Op aanraden van de installateur de modbus integratie maar verwijderd en een firmware update op de omvormer gekregen, maar de cloudoplossing is bij mij niet ook betrouwbaar. De omvormer schakelt zich af en toe uit op onverklaarbare momenten.

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02
RikHa schreef op donderdag 23 mei 2024 @ 00:44:
Wat namelijk bij me opkomt is nog wel de aansluiting van het Cerbo relais. Kun je dat relais niet rechtstreeks verbinden met bijvoorbeeld L1 en GND van de RPI? Dan geef je die combi waarde 0% en de rest laat je dan door de ESP8266 controleren. Daarmee voorkom je dat de omvormer weigert uit te schakelen bij een eventuele storing van de ESP8266 of een optocoupler.
Dat klopt. Het is een optie waar ik ook aan denk. Ik heb hem nog in reserve.
Aspect is dat je het aantal regelmogelijkheden verkleint tot 7. Je moet alle 8 combinaties waar die ene ingang 'aan' staat op 0% zetten.
Nog iets, ik dacht dat de SE ook op meerdere manieren tegelijk teruggeregeld kan worden. Misschien kun je de ESP8266 combineren met frequency shifting voor nog meer redundancy.
Dat is een belangrijk punt.
Een SolarEdge staat maar één methode voor Power Reduction in charge toe. Ik heb dit met SolarEdge besproken.
Als je frequency shifting actief hebt zal dat de instructies van ModBus of relais instellingen overrulen.
Bij mij werkte het uitzetten met alleen het relais wel, maar na 3 minuten startte het systeem weer op, ook al was het relais nog steeds actief.
Work around: iedere minuut het relais uit, en weer aan zetten.
Disclaimer: dit is geen kritiek maar een poging tot meedenken om je mooie oplossing (Harold H. kan er nog een puntje aan zuigen ;) ) nog iets te perfectioneren.
Dank voor je compliment. Ik vind vragen leuk en geef graag antwoord.

Acties:
  • 0 Henk 'm!

  • JeroenH
  • Registratie: Januari 2003
  • Laatst online: 23:18
Ik zit na te denken over het post-salderen tijdperk, en dus ook over hoe ik met onze zonnestroom kan "spelen" om kosten te vermijden.

Dit sluit perfect aan bij wat ik voor me zie.

Is ergens te vinden met welke omvormers dit zou kunnen werken? Ik heb een SolarEdge HD-Wave 3680 en ik hoop maar dat het daarmee kan. In de handleiding (ik denk deze) kan ik niets terugvinden over Power Reduction, en het woord curtailment komt er ok niet in voor. Dat stemt me niet hoopvol.

Atomstack X7 Pro 10w laser cutter


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02
JeroenH schreef op vrijdag 24 mei 2024 @ 13:28:
Is ergens te vinden met welke omvormers dit zou kunnen werken? Ik heb een SolarEdge HD-Wave 3680 en ik hoop maar dat het daarmee kan.
Als je het niet in de handleiding kunt vinden zal het er waarschijnlijk niet zijn.

Op de aansluit-tekening in de handleiding zie ik geen blok "L1 L2 L3 L4 G V", dus ook dat in een slecht teken. Je kunt de omvormer openmaken om te zien of je zo'n blok kunt vinden. Anders, jammer maar helaas.

Acties:
  • 0 Henk 'm!

  • ZwarteIJsvogel
  • Registratie: Juni 2008
  • Laatst online: 03-05 13:04

ZwarteIJsvogel

Zuid-Limburg

MJ de Bruijn schreef op woensdag 22 mei 2024 @ 17:07:

[Afbeelding]

Nu is er ook een derde mogelijkheid om het vermogen te reguleren. In de SolarEdge Omvormer zit een aansluitblok met indicaties L1, L2, L3, L4, Gnd en V. Het is mogelijk om de aansluitingen L1, L2, L3 en L4 door middel van relais met de V te verbinden. Hiermee kunnen totaal 16 "standen" worden doorgegeven. Deze aansluiting wordt een RRCR verbinding genoemd - Radio Ripple Control Receiver - naar een oorspronkelijke uitbreiding die separaat kon worden aangeschaft.
Die groene 8-polige stekker waar je de draden op hebt aangesloten, zat die bij jouw omvormer? Zo nee, waar heb je die stekker gekocht?
[Afbeelding]

Het toevoegen van vier fysieke relais en de aansturing daarvan is best een "groot" doe-het-zelf project. Daarom heb ik een "light" versie gemaakt. Deze gebruikt opto-couplers als relais en een ESP8266 microchip met ESPHome als besturingssysteem. Opto-couplers zijn een soort relais waarbij de schakeling niet gebeurt door een mechanische beweging met een spoel maar door licht dat een licht-gevoelige transistor tot geleiding brengt.
Mooie proof of concept!

Bij AliExpress koop je overigens voor een paar Euro een kant-en-klaar bordje met 4 relais die je via Modbus/RTU kunt aansturen. Er zijn ook bordjes met Ethernet of WiFi. De kunst is het vinden van de documentatie.
[Afbeelding]

Voor de stroomvoorziening gebruik ik een aansluiting op het SolarEdge moederboard. Daar zit een connector met +5v en Gnd en met +12v en Gnd. Op de pinnetjes passen de contra-schuifjes van de bekende experimenteer-draadjes voor micro-schakelingen.
Die aansluiting zit helaas niet op het moederbord van mijn omvormer (SE4000H, SetApp).

Dromen mag zolang je maar op tijd wakker wordt.


Acties:
  • 0 Henk 'm!

  • ZwarteIJsvogel
  • Registratie: Juni 2008
  • Laatst online: 03-05 13:04

ZwarteIJsvogel

Zuid-Limburg

JeroenH schreef op vrijdag 24 mei 2024 @ 13:28:
Is ergens te vinden met welke omvormers dit zou kunnen werken? Ik heb een SolarEdge HD-Wave 3680 en ik hoop maar dat het daarmee kan. In de handleiding (ik denk deze) kan ik niets terugvinden over Power Reduction, en het woord curtailment komt er ok niet in voor. Dat stemt me niet hoopvol.
Het zou die 8-polige connector links van de RS-485 connector kunnen zijn (pagina 51, figure 21). Je zou de kap er even af moeten halen voor eventuele beschrifting op de printplaat.

Dromen mag zolang je maar op tijd wakker wordt.


Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02
ZwarteIJsvogel schreef op maandag 27 mei 2024 @ 09:07:
Die groene 8-polige stekker waar je de draden op hebt aangesloten, zat die bij jouw omvormer? Zo nee, waar heb je die stekker gekocht?
De stekker zat op het moederboard.
Als alternatief kun je de contra-stekkertjes gebruiken van de bekende experimenteer-draadjes voor elektronische schakelingen.

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02
ZwarteIJsvogel schreef op maandag 27 mei 2024 @ 09:07:
Bij AliExpress koop je overigens voor een paar Euro een kant-en-klaar bordje met 4 relais die je via Modbus/RTU kunt aansturen. Er zijn ook bordjes met Ethernet of WiFi. De kunst is het vinden van de documentatie.
Ik ken ze. Deze gebruiken (iets) meer stroom. Je zult een aanvullende stroom-adapter moeten gebruiken.
Ik wilde dat ik ESPHome kon gebruiken. Daar moet je ook op letten.

De +5v van de L1, L2, L3, L4 adapter is niet geschikt als stroombron (getest). Ik denk dat deze alleen als referentie-spanning kan dienen en niet als stroom-leverancier.

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02

SolarEdge Throttle

Ik heb inmiddels in mijn Victron Cerbo GX een programma gemaakt waarmee ik de stroom van de SolarEdge Omvormer 'realtime' kan beperken.
Ik zet realtime tussen aanhalingstekens omdat er vertraging is in de aansturing. De metingen komen iets vertraagd binnen bij het programma. Ook een nieuwe instelling heeft tijd nodig om bij het apparaat aan te komen en de SolarEdge zelf heeft best wat tijd nodig om de nieuwe begrenzing daadwerkelijk toe te passen.
Afbeeldingslocatie: https://tweakers.net/i/hm2RPxqC0tWQQ5RBUMfzTgi-5fU=/800x/filters:strip_icc():strip_exif()/f/image/NEvkSWM1eUbTZaUKW6wsArzn.jpg?f=fotoalbum_large
Onderdeel [1] is de invoer van de relevante entiteiten.
[2] Is het feitelijke programma.
Bij [3] worden de (nieuwe) throttle-instellingen gezonden.
Met [4] kun je handmatig bepaalde instellingen toepassen. Hier zie je ook welke throttle-percentages ik gebruik voor de zestien mogelijke standen.

Dit is de Change-node 'xxx[01]'.
Afbeeldingslocatie: https://tweakers.net/i/JupAajUAT4hGDc1QpgxEVxvSP84=/x800/filters:strip_icc():strip_exif()/f/image/zLdJv2MxeKMZ7BUzo64SS5KU.jpg?f=fotoalbum_large
De andere drie moeten overeenkomstig worden gemaakt voor de 2e, 3e en 4e bit.

Bij uitval van netstroom (Grid Lost) zal het programma de uitvoer van de SolarEdge gaan beperken wanneer de State of Charge van de batterijen boven de 70% komt.
De toegestane uitvoer bestaat uit het actuele huis-verbruik plus de 'redelijke' laadstroom van de batterijen waarmee de laad-capaciteit niet wordt overschreden. Naarmate de SoC toeneemt verlaag ik de laadstroom.
Vanaf een SoC van 92% probeer ik de Omvormer alleen het huisverbruik te laten leveren. Het systeem kan eventuele pieken dan (in principe) nog opvangen. Bij SoC 96% schakel ik de omvormer uit. De batterij is dan te vol om pieken te incasseren.

Let op: Deze percentages en andere waarden heb ik bepaald op basis van het volgen van praktijk laad-situaties. Ik heb geen enkel bewijs of zekerheid dat het de juiste waarden zijn.

Met de debug on/off knop kun je de besturing testen.

Opnieuw disclaimer: Dit is mijn persoonlijk project en mijn persoonlijke theorie. Ik heb geen enkele zekerheid dat het in de praktijk altijd op de juiste manier zal werken. Nadoen is volledig op eigen risico.

Dit is de JavaScript programma-code van het programma [2].
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
// function SolarEdge Throttle

const Now = new Date()
const NowInSeconds = Math.floor(Now.getTime() / 1000);

let NowTime = Now.getFullYear() + "-"
            + ("0" + (Now.getMonth() + 1)).slice(-2) + "-"
            + ("0" + Now.getDate()).slice(-2) + " "
            + ("0" + Now.getHours()).slice(-2) + ":"
            + ("0" + Now.getMinutes()).slice(-2) + ":"
            + ("0" + Now.getSeconds()).slice(-2) ;

var L1_Target = null;
var L2_Target = null;
var L3_Target = null;
var L4_Target = null;
var Solar_Charger_Target = null;

var msg_L4L3L2L1 = null;
var msg_Solar_Charger_Target = null;
var msg_Relay_2_Target = null;

var InitOK = false;

context.RunNow = false;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

switch (msg.topic) {
    
  case "RunNow":
    context.RunNow = true;
    msg = null;
    break;
    
  case "Reset":
    context.Reset = true;
    context.RunNow = true;
    node.warn("Reset: " + context.Reset);
    msg = null;
    break;
    
  case "Debug":
    context.Debug = !context.Debug;
    context.RunNow = true;
    node.warn("Debug: " + context.Debug);
    msg = null;
    break;
    
  case "SoC_Now_Perc":
    context.SoC_Now_Perc = msg.payload;
    msg = null;
    break;

  case "Grid_Lost_Alarm":
        context.Grid_Lost_Alarm = msg.payload;
    if ( context.Grid_Lost_Alarm != 0 )
    {
        context.RunNow = true;
    }
    msg = null;
    break;

  case "SolarEdge_L1":
    context.SolarEdge_L1 = msg.payload.state;
    L1_Target = context.SolarEdge_L1;
    msg = null;
    break;
    
  case "SolarEdge_L2":
    context.SolarEdge_L2 = msg.payload.state;
    L2_Target = context.SolarEdge_L2;
    msg = null;
    break;
    
  case "SolarEdge_L3":
    context.SolarEdge_L3 = msg.payload.state;
    L3_Target = context.SolarEdge_L3;
    msg = null;
    break;
    
  case "SolarEdge_L4":
    context.SolarEdge_L4 = msg.payload.state;
    L4_Target = context.SolarEdge_L4;
    msg = null;
    break;
    
  case "SolarEdge_Relay2":
    context.SolarEdge_Relay2 = msg.payload.state;
    msg = null;
    break;
    
  case "Solar_Charger_State":
    context.Solar_Charger_State = msg.payload;
    Solar_Charger_Target = context.Solar_Charger_State;
    msg = null;
    break;

  case "AC_OUT_L1_W":
    context.AC_OUT_L1_W = msg.payload;
    msg = null;
    break;
    
  case "AC_OUT_L2_W":
    context.AC_OUT_L2_W = msg.payload;
    msg = null;
    break;
    
  case "AC_OUT_L3_W":
    context.AC_OUT_L3_W = msg.payload;
    msg = null;
    break;
    
  case "PV_L1_W":
    context.PV_L1_W = msg.payload;
    msg = null;
    break;
    
  case "PV_L2_W":
    context.PV_L2_W = msg.payload;
    msg = null;
    break;
    
  case "PV_L3_W":
    context.PV_L3_W = msg.payload;
    msg = null;
    break;
    
  default: 
      node.error("Unknown Topic: " + msg.topic 
      + " Payload: " + msg.payload);
      context.RunNow = true;
      
} // switch for input all variables

// - - - - - - - - - - - - - - - - - - - - - - - - - -


if ( (context.SolarEdge_L1 != null)
  && (context.SolarEdge_L2 != null)
  && (context.SolarEdge_L3 != null)
  && (context.SolarEdge_L4 != null)
  && (context.Solar_Charger_State != null)
   )
{
    InitOK = true;
}

if ( NowInSeconds < context.Deploy_End_Time ) 
{
    node.status({fill: "grey", shape:"dot",
                 text: "" }
               );
}

if ( ( context.RunNow )
  && ( NowInSeconds > context.Deploy_End_Time ) 
  && ( InitOK )
     )
{
    if ( ( context.Grid_Lost_Alarm == 0 )
    &&   ( context.Grid_Lost_Alarm != context.Last_Grid_Lost_Alarm)
    &&   ( context.SolarEdge_Relay2 == false ) 
       )
    { // From Alarm to OK
       context.Reset = true;
    }

    let PV_totaal_W = 0;
    let AC_OUT_totaal_W = 0;
    let Consump_W = 0;
    let PV_Required_W = 0;

    if ( (context.AC_OUT_L1_W != null)
      && (context.AC_OUT_L2_W != null)
      && (context.AC_OUT_L3_W != null)
      && (context.PV_L1_W != null)
      && (context.PV_L2_W != null)
      && (context.PV_L3_W != null)
       )
    {

        PV_totaal_W = context.PV_L1_W
                    + context.PV_L2_W
                    + context.PV_L3_W;

        // if AC-OUT is positive, this is consumption,
        // if AC-OUT is negative then PV surplus.
        AC_OUT_totaal_W = context.AC_OUT_L1_W
                        + context.AC_OUT_L2_W 
                        + context.AC_OUT_L3_W;
    
        Consump_W = AC_OUT_totaal_W + PV_totaal_W;
    }

    if ( context.SoC_Now_Perc >= 96 ) {
        PV_Required_W = 0;
    }
    else if ( context.SoC_Now_Perc >= 92 ) {
        PV_Required_W = Consump_W;
    }
    else if ( context.SoC_Now_Perc >= 88 ) {
        PV_Required_W = Consump_W + 500;
    }
    else if ( context.SoC_Now_Perc >= 84 ) {
        PV_Required_W = Consump_W + 1000;
    }
    else if ( context.SoC_Now_Perc >= 80 ) {
        PV_Required_W = Consump_W + 1500;
    }
    else if ( context.SoC_Now_Perc >= 75 ) {
        PV_Required_W = Consump_W + 2000;
    }
    else if ( context.SoC_Now_Perc >= 70 ) {
        PV_Required_W = Consump_W + 2500;
    }
    else {
        PV_Required_W = 6000;
    }

    let PV_Required_perc = Math.floor(PV_Required_W / 60); // %

    if ( context.Reset ) {
        L1_Target = "0";
        L2_Target = "0";
        L3_Target = "0";
        L4_Target = "0";
        Solar_Charger_Target = 1;
    }
    else if ( context.SolarEdge_Relay2 == true ) 
    { // Used when electricity-price is negative
        L1_Target = "1";
        L2_Target = "1";
        L3_Target = "1";
        L4_Target = "1"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 80 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "1";
        L3_Target = "1";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 60 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "0";
        L3_Target = "1";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 48 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "0";
        L3_Target = "1";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 40 )
            )
    {
        L1_Target = "1";
        L2_Target = "1";
        L3_Target = "0";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 32 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "1";
        L3_Target = "0";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 28 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "0";
        L3_Target = "0";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 24 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "0";
        L3_Target = "0";
        L4_Target = "1"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 20 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "1";
        L3_Target = "1";
        L4_Target = "0"; 
        Solar_Charger_Target = 1;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 16 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "1";
        L3_Target = "1";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 12 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "0";
        L3_Target = "1";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 10 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "0";
        L3_Target = "1";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 8 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "1";
        L3_Target = "0";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 6 ) 
            )
    {
        L1_Target = "0";
        L2_Target = "1";
        L3_Target = "0";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc >= 4 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "0";
        L3_Target = "0";
        L4_Target = "0"; 
        Solar_Charger_Target = 4;
    }
    else if ( ( ( context.Grid_Lost_Alarm != 0 ) || ( context.Debug ) )
           && ( PV_Required_perc == 0 ) 
            )
    {
        L1_Target = "1";
        L2_Target = "1";
        L3_Target = "1";
        L4_Target = "1"; // All true: Shut down
        Solar_Charger_Target = 4;
    }
    else {
        L1_Target = "0";
        L2_Target = "0";
        L3_Target = "0";
        L4_Target = "0"; // 100% 
        Solar_Charger_Target = 1;
    }

    if ( ( L1_Target != context.SolarEdge_L1) 
      || ( L2_Target != context.SolarEdge_L2) 
      || ( L3_Target != context.SolarEdge_L3) 
      || ( L4_Target != context.SolarEdge_L4) 
       )
    {
        msg_L4L3L2L1 =
          { topic: "L4L3L2L1", 
            payload: L4_Target+L3_Target+L2_Target+L1_Target };
    }

    if ( Solar_Charger_Target != context.Solar_Charger_State) 
    {
        msg_Solar_Charger_Target =
          { topic: "Solar_Charger_Target", payload: Solar_Charger_Target };
    }


    let StatusColor = "green";
    
    if ( context.Grid_Lost_Alarm != 0 )
    {
        StatusColor = 'red';
    }
    else if ( context.Debug )
    {
        StatusColor = 'yellow';
    }
    else if ( context.Reset )
    {
        StatusColor = 'blue';
    }

    context.RunNow = false;
    context.Reset = false;
    context.Last_Grid_Lost_Alarm = context.Grid_Lost_Alarm;

    node.status({fill: StatusColor, shape:"dot",
                 text: "@ " + NowTime + ": "
                 + L4_Target
                 + L3_Target
                 + L2_Target
                 + L1_Target
                 + "; "
                 + Solar_Charger_Target }
               );

    return [
            msg_Solar_Charger_Target,
            msg_L4L3L2L1
            ];

} // if RunNow

[ Voor 86% gewijzigd door MJ de Bruijn op 27-05-2024 10:15 ]


Acties:
  • 0 Henk 'm!

  • ZwarteIJsvogel
  • Registratie: Juni 2008
  • Laatst online: 03-05 13:04

ZwarteIJsvogel

Zuid-Limburg

MJ de Bruijn schreef op maandag 27 mei 2024 @ 09:29:
De stekker zat op het moederboard.
Bij mij zit daar geen stekker. Misschien heeft de installateur die destijds meegenomen, of heb ik de stekker gewoon te goed opgeborgen :o

SolarEdge blijkt er zelf een stekker voor te leveren (SE-HD-PRI-CON-05). Die is 6-polig. De RS-485 stekker die er bij mij wel zit (maar niet wordt gebruikt) zou wel eens dezelfde kunnen zijn.

Dromen mag zolang je maar op tijd wakker wordt.


Acties:
  • 0 Henk 'm!

  • ZwarteIJsvogel
  • Registratie: Juni 2008
  • Laatst online: 03-05 13:04

ZwarteIJsvogel

Zuid-Limburg

MJ de Bruijn schreef op maandag 27 mei 2024 @ 09:32:
De +5v van de L1, L2, L3, L4 adapter is niet geschikt als stroombron (getest).
Dat dacht ik al. Dat wordt dus een stopcontact aanleggen :)

Dromen mag zolang je maar op tijd wakker wordt.


Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 22:02
ZwarteIJsvogel schreef op maandag 27 mei 2024 @ 09:54:
Dat dacht ik al. Dat wordt dus een stopcontact aanleggen :)
Inderdaad, maar....

Je wilt waarschijnlijk dat het systeem werkt onafhankelijk van je huis-installatie.

Ik heb hierover nagedacht en zie als optie dat je een aansluiting maakt op de 230 volt aansluiting IN de Omvormer. Maar goed, dat moet ook weer heeeeeel goed gebeuren.

Acties:
  • 0 Henk 'm!

  • ZwarteIJsvogel
  • Registratie: Juni 2008
  • Laatst online: 03-05 13:04

ZwarteIJsvogel

Zuid-Limburg

MJ de Bruijn schreef op maandag 27 mei 2024 @ 09:58:
Ik heb hierover nagedacht en zie als optie dat je een aansluiting maakt op de 230 volt aansluiting IN de Omvormer. Maar goed, dat moet ook weer heeeeeel goed gebeuren.
Dat lijkt mij geen goed idee. Niet alleen vanwege veiligheid en eventueel gedoe met de garantie, maar ook omdat je dan de voeding aansluit aan de verkeerde kant van de grote ferrietring die in de AC-doorvoer van de omvormer zit.

Dromen mag zolang je maar op tijd wakker wordt.

Pagina: 1