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

cFos Charging Manager - Формули

Диспетчер нарахувань cFos дозволяє проводити динамічну оцінку формул. Цей функціонал доступний для лічильника типу "Вираз" і для правил нарахування типу "Формула".

Таким чином, ви можете налаштувати лічильники, які обчислюють значення з інших лічильників або EVSE, підтримують їх у готовності та відображають їх. Правила зарядки можуть також використовувати формули для динамічного розрахунку струму зарядки, а також мати доступ до лічильників та EVSE (включаючи лічильники типу "Expression").

З формулами можливі наступні операції:

+ - * / %Додавання, віднімання, множення, ділення, модуль
& |побітові І та АБО
^Розрахунок потужності, наприклад, 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

Крім того, можливі наступні логічні вирази:

== (дорівнює), != (нерівно), < (менше), <= (менше-рівно), > (більше), >= (більше-рівно), ! (не), || (логічне "або"), && (логічне "і"), ? (умовний оператор, наприклад, x ? y : z, повертає y, якщо істина x, інакше z)

Це дозволяє, наприклад, вимикати струм в залежності від умов: M1.current >= 6500 ? M1.current : 0 повертає струм M1, якщо він більше 6,5А і 0 в іншому випадку, що призупиняє зарядку. Для таких умов також є можливість опитування входів (див. нижче)

Можливі наступні назви:

MxЛічильник з ідентифікатором одиниці x, наприклад, M1
ExEVSE з ідентифікатором пристрою x, наприклад, E1

Також можна отримати доступ до віртуальних лічильників, таких як надлишок сонячної енергії, споживання з мережі або "Power avail. for EVSEs" (потужність, доступна для зарядних пристроїв), налаштувавши лічильник, а потім використавши відповідний ідентифікатор пристрою у формулі.

Потім за допомогою точки можна отримати доступ до окремих значень одиниць виміру. Вони називаються наступним чином:

current_l1Струм фази 1 в мА
current_l2Струм фази 2 в мА
current_l3Струм фази 3 в мА
currentСтрум поточної фази в мА (для правил тарифікації Менеджер тарифікації запитує всі фази по черзі; для лічильників типу "Вираз" застосовується відповідна фаза, до якої відноситься формула. Якщо ви вказали формулу для "Струм L1", то поля "Струм L2" та "L3" можна не заповнювати. Тоді використовується формула для струму L1)
power_wПоточна активна потужність у ватах
offeredWallbox: Пропонований струм у мА
import_whСпожита енергія, Вт∙год
export_whВведена енергія у Вт-год
dtЧас, що минув з моменту останнього оновлення (у секундах), тільки для лічильника "Вираз", див. також CM._dt.
inputNНомер входу N пристрою, 1 = активний, 0 = неактивний, N - номер входу, починаючи з 1.
socSOC, рівень заряду у відсотках (лічильник/пам'ять) - якщо підтримується пристроєм
idІдентифікатор пристрою, Modbus ID
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 в мА (wallbox). Тільки під час розрахунку правил заряджання wallbox, інакше 0
lb_cur_l2Розрахунковий струм фази 2 в мА (wallbox). Тільки під час розрахунку правил заряджання wallbox, інакше 0
lb_cur_l3Поточний розрахунковий струм фази 3 в мА (wallbox). Тільки під час розрахунку правил заряджання wallbox, інакше 0
lb_curСтрум, розрахований для поточної фази в мА (зарядний пристрій). Тільки під час розрахунку правил заряджання wallbox, інакше 0. Менеджер заряджання запитує всі фази по черзі.
surplus_pcurНадлишковий струм фотоелектричних модулів на (прогнозовану) фазу в мА
surplus_wanted1, якщо правило надлишку PV вже застосовано, інакше 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Струм лічильника М1, фаза 1
E2.import_whСпожито Вт∙год від EVSE E2
E3.power_wПоточна потужність заряду E3 у ватах

Якщо ви використовуєте формули для лічильника типу "Вираз", ви також можете опустити ідентифікатор пристрою. Тоді назви полів будуть посилатися на цей лічильник, наприклад, '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, Пн=1, Вт=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_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_all_max_capacity: Загальна ємність сховища, All, якщо вказано в конфігурації лічильника, у Вт
_storage_all_capacity: Поточна ємність сховища, All, якщо вказано у конфігурації лічильника, у Вт-год
_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
Примітка:
У розділі Користувацькі лічильники ви також знайдете інструкції щодо використання формул з глобальними змінними та результатами Диспетчера зарядки.

GM Глобальні лічильники

GM.grid_demandОсновне посилання
GM.consumedСпоживання
GM.producedПокоління
GM.consumed_evseСпоживання електромобілів
GM.available_evseДоступна потужність
GM.surplusНадлишок фотоелектричної енергії
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 - М1.струм.
M1 - це лічильник, який вимірює споживання квартири. Управління навантаженням cFos Charging Manager спочатку намагається забезпечити EVSE максимальним струмом по відношенню до потужності підключення будинку, але потім обмежує його до 16А за вирахуванням споживання квартири.

Функції

Використовуючи 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.