Документация

менеджер зарядки cFos - формулы

Менеджер тарификации 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
ExEVSE с идентификатором устройства 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.
socSOC, уровень заряда в процентах (счетчик/память) - если поддерживается устройством
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_wanted1, если правило PV surplus уже применялось, иначе 0
budgetКВт/ч или минут по текущему бюджету
budget_amountМаксимальное количество кВт/ч или минут в рамках текущего бюджета
budget_usedКВт/ч или минут, использованных в рамках текущего бюджета
com_err1, если есть ошибка COM, иначе 0
com_err21, если ошибка COM присутствует более 12 секунд, иначе 0
reactive_powerСпецификация реактивной мощности в ваттах (если поддерживается устройством), положительные значения: Индуктивная, отрицательные значения: Емкостная
switch_phasesДля настенных коробок с переключением фаз: ручное переключение фаз, 1 = 1-фазное, 3 = 3-фазное, -1 = автоматическое переключение фаз
departureВремя отправления ISO 15118 в виде временной метки (для настенных ящиков, поддерживающих эту функцию, иначе 0)
req_energyISO 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': import_wh + M1.power_w * dt / 3600 обновляется энергия, полученная из источника, на основе мощности за прошедшее время обновления
  • В качестве формулы для 'power_w': (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.dst0 = зимнее время, 1 = летнее время
date.timestampUnix timespamp, secs since 1.1.1970

PB (nur cFos Power Brain)

PB.input1S0 Input 1, 1 = активен, 0 = неактивен
PB.input2S0 Input 2, 1 = активен, 0 = неактивен

CM Переменные менеджера зарядки

Эти переменные могут быть установлены администратором в разделе "Конфигурация". Например, если администратор установит переменную 'var_x' равной 1,5, CM.var_x вернет значение 1,5.

Предопределенные переменные:
_num_зарядка: Количество настенных ящиков, которые в настоящее время заряжаются
_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: Общая емкость хранилища, дома, если она указана в конфигурации счетчика, в Втч
_storage_home_capacity: Текущая емкость хранилища, дома, если она указана в конфигурации счетчика, в Втч
_storage_all_max_capacity: общая емкость хранилища, All, если указано в конфигурации счетчика, в Wh
_storage_all_capacity: текущая емкость хранилища, All, если указано в конфигурации счетчика, в Wh
_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.