Менеджер тарификации cFos позволяет динамически оценивать формулы. Эта функциональность доступна для счетчика типа "Выражение" и для правил тарификации типа "Формула".
Поэтому можно настроить счетчики, которые вычисляют значения от других счетчиков или EVSE, держат их наготове и отображают. Правила зарядки могут также использовать формулы для динамического расчета тока зарядки, а также обращаться к счетчикам и EVSE (включая счетчики типа "Выражение").
С формулами возможны следующие операции:
| + - * / % | Сложение, вычитание, умножение, деление, модуль | 
| & | | побитовое И и ИЛИ | 
| ^ | Расчет мощности, например, 10^2 = 100 | 
| min(x,y) | Минимум x и y, возможно более 2 аргументов | 
| max(x,y) | Максимум x и y, возможно более 2 аргументов | 
| abs(x) | Абсолютное значение x, например, abs(-2) = 2 | 
| clamp(x,min,max) | Значение x = min (если x < min), x = max (если x > max), иначе сохранить x | 
| round(x) | Округлите x до целого числа. Пример: округление до 1 десятичного знака: round(10*x)/10. | 
| sqrt(x) | Квадратный корень из x | 
| exists(x) | true, если переменная x существует, иначе false | 
Кроме того, возможны следующие логические выражения:== (равно), != (неравно), < (меньше), <= (меньше-равно), > (больше), >= (больше-равно), ! (не), || (логическое Or), && (логическое And), ? (условный оператор, например, x ? y : z, возвращает y, если x истинно, иначе z)
Это позволяет, например, отключать ток в зависимости от условий: M1.current >= 6500 ? M1.current : 0 возвращает ток M1, если он больше 6.5A, и 0 в противном случае, что приостанавливает зарядку. Для таких условий можно также запросить входы (см. ниже)
Возможны следующие названия:
| Mx | Счетчик с идентификатором устройства x, например, M1 | 
| Ex | EVSE с идентификатором устройства x, например, E1 | 
Также можно получить доступ к виртуальным счетчикам, таким как избыток солнечной энергии, потребление сети или "Power avail. for EVSEs" (мощность, доступная для настенных блоков), установив счетчик, а затем используя соответствующий ID устройства в формуле.
Затем вы можете получить доступ к отдельным значениям единиц измерения с помощью точки. Они вызываются следующим образом:
| current_l1 | Ток фазы 1 в мА | 
| current_l2 | Ток фазы 2 в мА | 
| current_l3 | Ток фазы 3 в мА | 
| current | Ток текущей фазы в мА (для правил зарядки Менеджер зарядки запрашивает все фазы последовательно; для счетчиков типа "Выражение" применяется соответствующая фаза, к которой относится формула. Если вы задали формулу для "Тока L1", вы можете опустить поля для Тока L2 и L3. Тогда будет использоваться формула для тока L1) | 
| power_w | Текущая активная мощность в ваттах | 
| offered | Настенная коробка: Предлагаемый ток в мА | 
| import_wh | Потребляемая энергия в Вт | 
| export_wh | Инжектированная энергия в Втч | 
| dt | Время, прошедшее с момента последнего обновления (в секундах), только для счетчика "Expression", см. также CM._dt. | 
| inputN | Номер входа N устройства, 1 = активный, 0 = неактивный, N - номер входа, начиная с 1. | 
| soc | SOC, уровень заряда в процентах (счетчик/память) - если поддерживается устройством | 
| id | Идентификатор устройства, идентификатор Modbus | 
| txn_duration | Продолжительность текущей операции в секундах (EVSE) | 
| charging_dur | Фактическое время зарядки текущей транзакции в секундах (Wallbox) | 
| txn_energy | Заряженная энергия текущей транзакции в Втч (EVSE) | 
| min_current | Минимальный зарядный ток в мА (EVSE) | 
| max_current | Максимальный зарядный ток в мА (EVSE) | 
| state | Статус: 1 ожидание, 2 подключен, 3 заряжается, 4 заряжается с вентиляцией, 5 ошибка, 6 отключен (EVSE) | 
| cphases | Количество фаз зарядки (0-3) | 
| pphases | Количество прогнозируемых фаз зарядки (0-3) | 
| lb_cur_l1 | Текущий расчетный ток фазы 1 в мА (настенный ящик). Только при расчете правил зарядки настенного блока, иначе 0 | 
| lb_cur_l2 | Текущий расчетный ток фазы 2 в мА (настенный блок). Только при расчете правил зарядки настенного блока, иначе 0 | 
| lb_cur_l3 | Текущий расчетный ток фазы 3 в мА (настенный ящик). Только при расчете правил зарядки настенного блока, иначе 0 | 
| lb_cur | Ток, рассчитанный для текущей фазы, в мА (настенный ящик). Только при расчете правил зарядки настенного ящика, иначе 0. Менеджер зарядки запрашивает все фазы по очереди. | 
| surplus_pcur | Ток превышения ПВ на (прогнозируемую) фазу в мА | 
| surplus_wanted | 1, если правило PV surplus уже применялось, иначе 0 | 
| budget | КВт/ч или минут по текущему бюджету | 
| budget_amount | Максимальное количество кВт/ч или минут в рамках текущего бюджета | 
| budget_used | КВт/ч или минут, использованных в рамках текущего бюджета | 
| com_err | 1, если есть ошибка COM, иначе 0 | 
| com_err2 | 1, если ошибка COM присутствует более 12 секунд, иначе 0 | 
| reactive_power | Спецификация реактивной мощности в ваттах (если поддерживается устройством), положительные значения: Индуктивная, отрицательные значения: Емкостная | 
| switch_phases | Для настенных коробок с переключением фаз: ручное переключение фаз, 1 = 1-фазное, 3 = 3-фазное, -1 = автоматическое переключение фаз | 
| departure | Время отправления ISO 15118 в виде временной метки (для настенных ящиков, поддерживающих эту функцию, иначе 0) | 
| req_energy | ISO 15118 Требуемая энергия в Втч (для настенных блоков, поддерживающих эту функцию, иначе 0) | 
| plugin_start | Временная метка Unix, время прокладки кабеля | 
| plugin_energy | Энергия предыдущего заряда в Вт с момента подключения кабеля к сети | 
| M1.current_l1 | Ток счетчика M1, фаза 1 | 
| E2.import_wh | Потребляемый Вт от EVSE E2 | 
| E3.power_w | Текущая мощность зарядки E3 в ваттах | 
Если вы используете формулы для измерителя типа "Expression", то идентификатор устройства можно не указывать. Тогда имена полей относятся к этому счетчику, например, 'power_w' - это мощность этого счетчика в ваттах. С помощью функции 'dt' можно реализовать несколько расширенных функций, например, для счетчика типа "Выражение":
import_wh + M1.power_w * dt / 3600 обновляется энергия, полученная из источника, на основе мощности за прошедшее время обновления(power_w * (20 - dt) + M1.power_w * dt) / 20 сглаживает мощность за последние 20 секунд.date
| date.year | Текущий год | 
| date.month | Месяц от 0..11 | 
| date.day | День от 1..31 | 
| date.weekday | Будний день SO=0, Mon=1, Tue=2, ... Сб=6 | 
| date.yearday | День в году от 0...366 | 
| date.hour | Час от 0..23 | 
| date.minute | Минута от 0...60 | 
| date.second | Секунда от 0...60 | 
| date.daysecond | Второе число текущего дня от 0...86399 | 
| date.dayminute | Минута текущего дня от 0..1439 | 
| date.dst | 0 = зимнее время, 1 = летнее время | 
| date.timestamp | Unix timespamp, secs since 1.1.1970 | 
PB (nur cFos Power Brain)
| PB.input1 | S0 Input 1, 1 = активен, 0 = неактивен | 
| PB.input2 | S0 Input 2, 1 = активен, 0 = неактивен | 
CM Переменные менеджера зарядки
Эти переменные могут быть установлены администратором в разделе "Конфигурация". Например, если администратор установит переменную 'var_x' равной 1,5, CM.var_x вернет значение 1,5.
Предопределенные переменные:
| _num_charging | Количество настенных ящиков с зарядкой | 
| _num_charging1 | Количество заряжаемых в данный момент настенных ящиков, 1, если ни один из них не заряжается | 
| _max_total_current | Максимальный ток подключения дома в мА на фазу | 
| _max_total_evse_current | Максимальный ток для настенных коробок в мА на фазу | 
| _price | Текущая цена на электроэнергию | 
| _price_level | Текущий уровень цен на электроэнергию, -2=очень дорого, -3=дорого, -4=нормально, -5=дешево, -6=очень дешево | 
| _surplus | Текущий избыток солнечной энергии в ваттах | 
| _org_surplus | Избыток солнечной энергии в том виде, в котором Управляющий зарядкой рассчитал бы его независимо от своих собственных формул | 
| _storage_home_max_capacity | Общая емкость накопителей, Home, если указано в конфигурации счетчика, в Втч | 
| _storage_home_capacity | Текущая емкость хранилища, Home, если указано в конфигурации счетчика, в Втч | 
| _storage_all_max_capacity | Общий объем хранилища, Все, если указано в конфигурации счетчика, в Втч | 
| _storage_all_capacity | Текущая емкость хранилища, Все, если указано в конфигурации счетчика, в Втч | 
| _storage_home_soc | Текущая SoC аккумуляторного(ых) хранилища(й) с ролью "Дом". Если емкость была указана хотя бы для одной системы хранения, Менеджер зарядки использует ее для расчета, в противном случае эта переменная предоставляет текущую SoC первой найденной системы хранения с ролью "Дом". | 
| _storage_all_soc | Текущая SoC аккумуляторного(ых) хранилища(й) с ролью "Home+Car". Если емкость была указана хотя бы для одной системы хранения, менеджер зарядки использует ее для расчета, в противном случае эта переменная предоставляет текущую SoC первой найденной системы хранения с ролью "Дом+машина". | 
| _max_total_current_prc | Процент от доступного максимального общего зарядного тока. Эта переменная также может быть записана (через определения счетчиков и переменные диспетчера зарядки) | 
| _dt | Время, прошедшее с момента последнего обновления (в секундах). | 
Использование глобальных объектов:
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
Примечание:
В разделе Пользовательские счетчики вы также найдете инструкции по использованию формул с глобальными переменными и выходами Charging Manager.
GM Глобальные счетчики
| GM.grid_demand | Ссылка на сеть | 
| GM.consumed | Потребление | 
| GM.produced | Поколение | 
| GM.consumed_evse | Потребительские электронные автомобили | 
| GM.available_evse | Доступная мощность | 
| GM.surplus | Положительное сальдо PV | 
| GM.storage_home | Дом памяти | 
| GM.storage_all | Память обо всем | 
| GM.error | Производительность через ошибку | 
Использование глобальных счетчиков
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.
Вы хотите дополнительно ограничить зарядный ток по отношению к счетчику потребления квартиры. Для этого вы можете установить правило зарядки с формулой 16000 - M1.current.
M1 - это счетчик, который измеряет потребление квартиры. Управление нагрузкой cFos Charging Manager сначала пытается обеспечить EVSE максимальным током по отношению к мощности подключения дома, но затем ограничивает его до 16A минус потребление квартиры.
Используя min_price(s), max_price(s), вы можете определить самую дешевую цену поставщика энергии в евро, при этом поиск цен ведется с текущего времени до max s секунд дня или следующего дня, например min_price(25200) возвращает самую дешевую цену до 7:00 утра. Например, вы можете создать правило зарядки с условием CM._price <= min_price(25200), чтобы заряжать в наиболее благоприятное время, но с условием, что вы хотите отправляться, например, с 8:00 утра (предполагается, что время зарядки составляет 1 час). Аналогично, есть две функции min_price_secs(s) и max_price_secs(s), которые возвращают время начала самой дешевой цены в секундах за начатый день. Затем их можно сравнить, например, с date.daysecond.
Менеджер зарядки cFos теперь может считывать SoC и дальность пробега автомобиля через API TRONITY(www.tronity.io). Вы можете зарегистрировать личный аккаунт в TRONITY, а затем зарегистрировать один или несколько автомобилей. Затем вы можете добавить свой идентификатор TRONITY и секрет TRONITY в пользовательском интерфейсе "Конфигурация" в cFos Charging Manager.
Используйте кнопку "Получить данные об автомобиле", чтобы отобразить список зарегистрированных в TRONITY автомобилей. Каждое транспортное средство имеет идентификатор. Используйте этот идентификатор для выражений и/или правил зарядки в диспетчере зарядки, например V1.soc или V1.range, если ваш автомобиль имеет идентификатор 1. V1.soc - это текущий уровень заряда в процентах. V1.range - текущий запас хода в километрах. Например, можно создать условие V1.soc < 50, которое будет истинным, если SoC составляет менее 50 %.