Documentatie

cFos Charging Manager - Formules

De cFos Charging Manager maakt de dynamische evaluatie van formules mogelijk. Deze functionaliteit is beschikbaar voor een meter van het type "Expressie" en voor laadregels van het type "Formule".

U kunt dus meters instellen die waarden van andere meters of EVSE's berekenen en deze klaar houden en weergeven. De laadregels kunnen ook formules gebruiken om dynamisch de laadstroom te berekenen en ook toegang krijgen tot meters en EVSE's (inclusief meters van het type "Expression").

De volgende bewerkingen zijn mogelijk met de formules:

+ - * / %Optellen, aftrekken, vermenigvuldigen, delen, modulus
& |bitwise AND en OR
^Berekening van macht, b.v. 10^2 = 100
min(x,y)Minimum van x en y, meer dan 2 argumenten mogelijk
max(x,y)Maximum van x en y, meer dan 2 argumenten mogelijk
abs(x)Absolute waarde van x, b.v. abs(-2) = 2
clamp(x,min,max)Waarde x = min (als x < min), x = max (als x > max), anders x houden
round(x)Rond x af op een geheel getal. Voorbeeld: Afronden op 1 decimaal: afronden(10*x)/10.
sqrt(x)Vierkantswortel van x
exists(x)true als de variabele x bestaat, anders false

Voorts zijn de volgende logische uitdrukkingen mogelijk:

== (gelijk), != (ongelijk), < (minder), <= (minder-gelijk), > (groter), >= (groter-gelijk), ! (niet), || (logische Or), && (logische En), ? (voorwaardelijke operator, bv. x ? y : z, geeft y terug als x waar is, anders z)

Dit maakt het bijvoorbeeld mogelijk om de stroom uit te schakelen afhankelijk van de omstandigheden: M1.current >= 6500 ? M1.current : 0 geeft de stroom van M1 terug als deze groter is dan 6,5A en 0 anders, waardoor het laden wordt gepauzeerd. Voor dergelijke condities is het ook mogelijk om ingangen te vragen (zie hieronder)

De volgende namen zijn mogelijk:

MxMeter met eenheid ID x, bijv. M1
ExEVSE met apparaat-ID x, bijv. E1

Het is ook mogelijk toegang te krijgen tot virtuele meters, zoals zonne-overschot, netopname of "Power avail. for EVSEs" (beschikbaar vermogen voor wallboxen), door de meter in te stellen en vervolgens het overeenkomstige apparaat-ID in de formule te gebruiken.

U kunt dan via het punt toegang krijgen tot de afzonderlijke waarden van de eenheden. Deze worden als volgt opgeroepen:

current_l1Stroom van fase 1 in mA
current_l2Stroom van fase 2 in mA
current_l3Stroom van fase 3 in mA
currentStroom van de huidige fase in mA (voor laadregels vraagt de Laadmanager alle fasen na elkaar op; voor meters van het type "Uitdrukking" geldt de betreffende fase waarop de formule betrekking heeft. Indien u een formule heeft opgegeven voor "Stroom L1", kunt u de velden voor Stroom L2 en L3 weglaten. Dan wordt de formule voor stroom L1 gebruikt)
power_wHuidig actief vermogen in watt
offeredWandbox: Aangeboden stroom in mA
import_whOpgenomen energie in Wh
export_whGeïnjecteerde energie in Wh
dtDe tijd die is verstreken sinds de laatste update (in seconden), alleen voor teller "Expression", zie ook CM._dt.
inputNIngangsnummer N van het apparaat, 1 = actief, 0 = inactief, N is het nummer van de ingang, beginnend met 1.
socSOC, oplaadniveau in procenten (teller/geheugen) - indien ondersteund door het apparaat
idApparaat-id, Modbus-id
txn_durationDuur van de huidige transactie in seconden (EVSE)
charging_durWerkelijke laadtijd van de huidige transactie in seconden (Wallbox)
txn_energyOpgeladen energie van de huidige transactie in Wh (EVSE)
min_currentMinimum laadstroom in mA (EVSE)
max_currentMaximale laadstroom in mA (EVSE)
stateStatus: 1 wachtend, 2 ingeplugd, 3 opladen, 4 opladen met ventilatie, 5 fout, 6 offline (EVSE)
cphasesAantal laadfasen (0-3)
pphasesAantal voorspelde laadfasen (0-3)
lb_cur_l1Momenteel berekende stroom van fase 1 in mA (wallbox). Alleen tijdens de berekening van de laadregels voor de wallbox, anders 0
lb_cur_l2Berekende stroom van fase 2 in mA (wallbox). Alleen tijdens de berekening van de laadregels van de wallbox, anders 0
lb_cur_l3Huidige berekende stroom van fase 3 in mA (wallbox). Alleen tijdens de berekening van de laadregels voor de wallbox, anders 0
lb_curStroom berekend voor de huidige fase in mA (wallbox). Alleen tijdens de berekening van de laadregels voor de wallbox, anders 0. De laadmanager bevraagt alle fasen na elkaar.
surplus_pcurPV overstroom per (voorspelde) fase in mA
surplus_wanted1, als er al een PV-overschotregel is toegepast, anders 0
budgetKWh of minuten op het huidige budget
budget_amountMaximum kWh of minuten op het huidige budget
budget_usedKWh of minuten gebruikt op het huidige budget
com_err1, als er een COM-fout is, anders 0
com_err21, als een COM-fout langer dan 12 sec. aanwezig is, anders 0
reactive_powerSpecificatie reactief vermogen in watt (indien ondersteund door het apparaat), positieve waarden: Inductief, negatieve waarden: Capacitief
switch_phasesVoor inbouwdozen met faseschakeling: Handmatige faseschakeling, 1 = 1-fase, 3 = 3-fase, -1 = automatische faseschakeling
departureISO 15118 vertrektijd als tijdstempel (voor wallboxes die dit ondersteunen, anders 0)
req_energyISO 15118 Benodigde energie in Wh (voor wallboxes die dit ondersteunen, anders 0)
plugin_startUnix-tijdstempel, tijd van kabelinvoer
plugin_energyEerder opgeladen energie in Wh vanaf het moment dat de kabel was aangesloten

Voorbeeld
M1.current_l1Stroom van meter M1, fase 1
E2.import_whVerbruikte Wh van de EVSE E2
E3.power_wHuidig laadvermogen van E3 in watt

Als je de formules gebruikt voor een meter van het type "Expression", kun je ook het apparaat-ID weglaten. Dan verwijzen de veldnamen naar deze meter, bijvoorbeeld 'power_w' is dan het vermogen van deze meter in watt. Met 'dt' kun je een paar uitgebreide functies realiseren, bijvoorbeeld in een meter van het type "Expression":

  • Als formule voor 'import_wh': import_wh + M1.power_w * dt / 3600 werkt de ingekochte energie bij op basis van het vermogen tijdens de afgelopen updatetijd
  • Als formule voor 'power_w': (power_w * (20 - dt) + M1.power_w * dt) / 20 egaliseert het vermogen over de laatste 20 seconden.

Globale variabelen

date

date.yearLopend jaar
date.monthMaand van 0..11
date.dayDag van 1..31
date.weekdayWeekdag SO=0, ma=1, di=2, ... Za=6
date.yeardayDag in het jaar van 0..366
date.hourUur van 0..23
date.minuteMinuten van 0..60
date.secondTweede van 0..60
date.daysecondTweede van deze dag van 0..86399
date.dayminuteMinuten van deze dag van 0..1439
date.dst0 = wintertijd, 1 = zomertijd
date.timestampUnix timespamp, secs since 1.1.1970

PB (nur cFos Power Brain)

PB.input1S0 Input 1, 1 = actief, 0 = inactief
PB.input2S0 Input 2, 1 = actief, 0 = inactief

CM Laadmanager Variabelen

Deze variabelen kunnen door de beheerder worden ingesteld onder 'Configuratie'. Als de beheerder bijvoorbeeld de variabele 'var_x' instelt op 1.5, dan geeft CM.var_x de waarde 1.5 terug.

Voorgedefinieerde variabelen:
_num_charging: Aantal wandboxen die momenteel worden opgeladen
_num_charging1: Aantal wandboxen die momenteel worden opgeladen, 1 als er geen wordt opgeladen
_max_total_current: Maximale stroom van de huisaansluiting in mA per fase
_max_total_evse_current: Maximale stroom voor wallboxen in mA per fase
_prijs: Huidige elektriciteitsprijs
_price_level: Huidig elektriciteitsprijsniveau, -2=zeer duur, -3=duur, -4=normaal, -5=goedkoop, -6=zeer goedkoop
_surplus: Huidig zonne-overschot in watt
_org_surplus: Zonneoverschot zoals dat door de Charging Manager onafhankelijk van zijn eigen formules zou zijn berekend
opslag_thuis_maximale_capaciteit: Totale capaciteit van de opslag, thuis, indien gespecificeerd in de meterconfiguratie, in Wh
opslag_thuis_capaciteit: Huidige capaciteit van de opslag, Thuis, indien gespecificeerd in de meterconfiguratie, in Wh
totale capaciteit van de opslag, Alles, indien gespecificeerd in de tellerconfiguratie, in Wh
_storage_all_capacity: Huidige capaciteit van de opslag, Alle, indien opgegeven in de tellerconfiguratie, in Wh
_max_total_current_prc: Percentage van de beschikbare maximale totale laadstroom. Deze variabele kan ook worden geschreven (door tellerdefinities en Laadmanager-variabelen)
_dt: De tijd die is verstreken sinds de laatste update (in seconden).

Gebruik van de globale objecten:
charge 8A starting at 8:00am: date.dayminute >= 480 ? 8000 : 0
charge 16A on Saturday and Sunday: date.weekday == 5 || date.weekday == 6 ? 16000 : 0
charge 6A if input 2 active: PB.input2 ? 6000 : 0 charge 6A if CM variable non-zero: cm.var1 ? 6000 : 0
Opmerking:
Onder Aangepaste tellers vind je ook instructies voor het gebruik van formules met globale Charging Manager variabelen en uitgangen.

GM Wereldwijde tellers

GM.grid_demandNetreferentie
GM.consumedVerbruik
GM.producedGeneratie
GM.consumed_evseVerbruik e-auto's
GM.available_evseBeschikbaar vermogen
GM.surplusPV-overschot
GM.storage_homeGeheugen Thuis
GM.storage_allAlles onthouden
GM.errorPrestaties door fouten

Gebruik van de globale tellers
Jeder Zähler hat die Felder power_w, current, current_l1, current_l2, current_l3, import_wh und export_wh,
z.B. GM.prod_pwr.current_l1 oder GM.cons_pwr.power_w
. Bei 'current' wird der Strom der gerade betrachteten Phase ausgewertet. Ströme werden in mA geliefert, Leistung in W, Energie in Wh.

Toepassingsvoorbeeld

U wilt de laadstroom extra beperken ten opzichte van een verbruiksmeter van een flat. Daartoe kunt u een laadregel instellen met de formule 16000 - M1.stroom.
M1 is de meter die het verbruik van de flat meet. Het belastingsbeheer van de cFos Charging Manager probeert eerst de EVSE te voorzien van de maximale stroom in verhouding tot het vermogen van de huisaansluiting, maar beperkt dit vervolgens tot 16A min het verbruik van de flat.

Functies

Met behulp van min_price(s), max_price(s) kun je de goedkoopste prijs van je energieleverancier in euro's bepalen, waarbij de prijzen worden gezocht vanaf het huidige tijdstip tot max s seconden van de dag of de volgende dag, bijv. min_price(25200) geeft de goedkoopste prijs tot 7:00 uur. Je kunt bijvoorbeeld een laadregel maken met de voorwaarde CM._price <= min_price(25200) om op het meest gunstige moment te laden, maar met de voorwaarde dat je bijvoorbeeld vanaf 8:00 uur wilt vertrekken (uitgaande van een laadtijd van 1 uur). Op dezelfde manier zijn er de twee functies min_price_secs(s) en max_price_secs(s), die de begintijd van de goedkoopste prijs in seconden van de begonnen dag teruggeven. Je kunt deze dan bijvoorbeeld vergelijken met date.daysecond.