﻿ cFos eMobility - cFos Charging Manager - Formulas

# cFos Charging Manager - Formulas

The cFos Charging Manager allows the dynamic evaluation of formulas. This functionality is available for a meter of the type "Expression" and for charging rules of the type "Formula".

You can therefore set up meters that calculate values from other meters or EVSEs and keep them ready and display them. The charging rules can also use formulas to dynamically calculate the charging current and also access meters and EVSEs (including meters of the "Expression" type).

The following operations are possible with the formulas:
 `+ - * / %` Addition, subtraction, multiplication, division, modulus `& |` bitwise AND and OR `^` Power calculation, e.g. 10^2 = 100 `min(x,y)` Minimum of x and y, more than 2 arguments possible `max(x,y)` Maximum of x and y, more than 2 arguments possible `abs(x)` Absolute value of x, e.g. abs(-2) = 2 `clamp(x,min,max)` Value x = min (if x < min), x = max (if x > max), otherwise keep x `round(x)` Round x to whole number. Example: Rounding to 1 decimal place: round(10*x)/10. `sqrt(x)` Square root of x `exists(x)` true if the variable x exists, otherwise false

Furthermore, the following logical expressions are possible:

`==` (equal), `!=` (unequal), `<` (less), `<=` (less-equal), `>` (greater), `>=` (greater-equal), `!` (not), `||` (logical Or), `&&` (logical And), `?` (conditional operator, e.g. `x ? y : z`, returns y if x is true, otherwise `z`)

This allows, for example, the current to be switched off depending on conditions: `M1.current >= 6500 ? M1.current : 0` returns the current of M1 if it is greater than 6.5A and 0 otherwise, which pauses the charging. For such conditions, it is also possible to query inputs (see below)

The following names are possible:
 Mx Meter with unit ID x, e.g. M1 Ex EVSE with device ID x, e.g. E1

It is also possible to access virtual meters, such as solar surplus, grid draw or "Power avail. for EVSEs" (power available for wallboxes), by setting up the meter and then using the corresponding device ID in the formula.

You can then access individual values of the units by means of the point. These are called as follows:
 current_l1 Current of phase 1 in mA current_l2 Current of phase 2 in mA current_l3 Current of phase 3 in mA current Current of the current phase in mA (for charging rules, the Charging Manager queries all phases one after the other; for meters of the type "Expression", the respective phase to which the formula refers applies. If you have specified a formula for "Current L1", you can omit the fields for Current L2 and L3. Then the formula for current L1 is used) power_w Current active power in watts offered Wallbox: Current offered in mA import_wh Energy drawn in Wh export_wh Injected energy in Wh dt The time that has elapsed since the last past update (in seconds) inputN Input number N of the unit, 1 = active, 0 = inactive soc SOC, charge level in percent (meter/storage) id Device Id, Modbus ID txn_duration Duration of the current transaction in seconds (EVSE) charging_dur Actual charging time of the current transaction in seconds (Wallbox) txn_energy Charged energy of the current transaction in Wh (EVSE) min_current Minimum charging current in mA (EVSE) max_current Maximum charging current in mA (EVSE) state Status: 1 waiting, 2 plugged in, 3 charging, 4 charging with ventilation, 5 error, 6 offline (EVSE) cphases Number of charging phases (0-3) pphases Number of predicted charging phases (0-3) surplus_pcur PV excess current per (predicted) phase in mA surplus_wanted 1, if a PV surplus rule has already been applied, otherwise 0 budget KWh on the current budget budget_amount On the current budget maximum kWh budget_used KWh used on the current budget com_err 1, if there is a COM error, otherwise 0 com_err2 1, if a COM error is present for longer than 12 sec, otherwise 0

##### Example
 M1.current_l1 Current of meter M1, phase 1 E2.import_wh Consumed Wh of the EVSE E2 E3.power_w Current charging power of E3 in watts

If you use the formulas for a meter of type "Expression", you can also omit the device ID. Then the field names refer to this meter, e.g. 'power_w' is then the power of this meter in watts. By means of 'dt' you can realise a few extended functions, e.g. in a meter of the type "Expression":

• As a formula for 'import_wh': `import_wh + M1.power_w * dt / 3600` updates the sourced energy based on the power during the past update time
• As a formula for 'power_w': `(power_w * (20 - dt) + M1.power_w * dt) / 20` smoothes the power over the last 20 seconds.

##### Global variables

date

 date.year Current year date.month Month from 0..11 date.day Day from 1..31 date.weekday Weekday Mo=0, Tue=1, ... Sun=6 date.yearday Day in the year from 0..366 date.hour Hour from 0..23 date.minute Minute from 0..60 date.second Second from 0..60 date.daysecond Second of this day from 0..86399 date.dayminute Minute of this day from 0..1439 date.dst 0 = winter time, 1 = summer time

PB (nur cFos Power Brain)

 PB.input1 S0 Input 1, 1 = active, 0 = inactive PB.input2 S0 Input 2, 1 = active, 0 = inactive

CM Charging Manager Variables

These variables can be set by the admin under 'Configuration'. For example, if the admin sets the variable 'var_x' to 1.5, CM.var_x returns the value 1.5.

Predefined variables:
_num_charging: Number of wallboxes currently charging
_num_charging1: Number of currently charging wallboxes, 1 if none is charging
_max_total_current: Maximum current of the house connection in mA per phase
_max_total_evse_current: Maximum current for wallboxes in mA per phase
_price: Current electricity price
_price_level: Current electricity price level, -2=very expensive, -3=expensive, -4=normal, -5=cheap, -6=very cheap
_surplus: Current solar surplus in watts
_org_surplus: Solar surplus as would have been calculated by the Charging Manager independently of its own formulas

Use of the global objects:
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`
Note:
Under Custom Counters you will also find instructions on how to use formulas with global Charging Manager variables and outputs.

GM Global counters

 GM.grid_demand Mains reference GM.consumed Consumption GM.produced Generation GM.consumed_evse Consumption e-cars GM.available_evse Available power GM.surplus PV surplus GM.storage_home Memory Home GM.storage_all Memory Everything GM.error Performance through error

Use of the global counters
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.

##### Application example

You want to additionally limit the charging current with regard to a consumption meter of a flat. To do this, you can set up a charging rule with the formula `16000 - M1.current`.
M1 is the meter that measures the consumption of the flat. The load management of the cFos Charging Manager first tries to provide the EVSE with the maximum current in relation to the house connection power, but then limits this to 16A minus the consumption of the flat.