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

Бројачи дефинирани од корисникот

Забелешка: cFos Charging Manager може да ги чита повеќето соларни инвертери користејќи SunSpec (тип на уред „SunSpec Solar Inverter / Meter“). Во овој случај не треба да креирате своја дефиниција за контра.

Управникот за полнење на cFos ви овозможува да креирате сопствени дефиниции за броила за поддршка на броилата што не се во стандардниот репертоар. Во моментов има три вида: бројачи Modbus, бројачи HTTP/JSON и бројачи MQTT/JSON. Датотеките за дефиниција за овие бројачи се многу слични. Мерачите на Modbus ги читаат нивните податоци од одредени регистри преку Modbus, додека HTTP/JSON броилата ги преземаат своите податоци преку барање HTTP и читаат JSON како одговор. За MQTT/JSON метри, cFos Charging Manager се претплати на MQTT Topics и ги чита пораките објавени под темата како JSON. CFos Charging Manager користи мал „Јазик на барање“ за да го прочита. Еве ја документацијата за можностите на MQTT во cFos Charging Manager.

Покрај голем број претходно дефинирани променливи како струја и напон, броилата дефинирани од корисникот исто така можат да читаат непознати, кориснички дефинирани променливи, влезови за пребарување и излези за поставени. Читањето во променливите и поставувањето излези овозможуваат евалуација на формулите. Ова е моќна карактеристика во комбинација со променливите на Управувачот за полнење и глобалните излези на Управникот за полнење опишани подолу, па дури и дозволува одредени задачи за домашна автоматизација и контрола на надворешни уреди како складирање на батерии. Ако го користите ова за спроведување контролни задачи, ве молиме да ни дадете повратни информации. Ние сме многу заинтересирани за она што нашите клиенти го контролираат со CFos Charging Manager и тоа ни помага понатаму да го развиваме Менаџерот за полнење според потребите на клиентите.

Еве едноставен пример за дефиниција на Modbus што чита единствен регистар за активна моќност. Можете едноставно да го промените бројот на регистарот за вашата конкретна апликација:
Пример дефиниција за единствен регистар.

Еве една дефиниција за пример за Modbus и една за HTTP/JSON:
Преземете ја дефиницијата за примерок за Modbus метар
Преземете ја дефиницијата за примерок за метар/

Менаџерот за полнење веќе доаѓа со неколку такви датотеки, но можете да испраќате свои датотеки под „Конфигурација на системот“ и исто така да ги избришете повторно.
Овде ќе најдете голем дел од дефинициите за бројачи што ги даваме:
Преземете ги доставените дефиниции за бројачи

Ако сте креирале своја датотека за бројачи и таа би можела да биде релевантна за другите корисници, ќе ви бидеме многу благодарни доколку можете да ни ја направите достапна. Потоа ќе го доставиме со идните верзии на Менаџерот за полнење.

Преземете дефиниции за бројачи за повеќе бројачи

Структура на датотека со дефиниција:

Дефинициите на бројачот се JSON-датотеки со глобален JSON објект кој има својства и под-објекти. „rtype“ го одредува типот на операција за читање: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. „mtype“ го одредува типот на уредот: 0 = Друг уред, 1 = Мерач, 2 = Инвертер, 4 = Складирање на батеријата.

Можете да наведете броеви или во децимален или во хексадецимален, со префиксот „0x“. Дозволени се и коментари во една линија со користење на '//'. Препорачуваме да ги извршувате вашите датотеки со дефиниција преку валидатор JSON5, на пр., овој валидатор на JSON5

Не заборавајте да го прочитате поглавјето Формули за да разберете кои вредности може да се користат во формулите во следната референца.

Дефинициите на Modbus имаат објект „rtu“ со следните својства:

silence_period, во msec: Ја одредува должината на паузата пред пристапот на Modbus RTU, така што уредот го препознава почетокот на пораката.
silence_same_slave, true: Паузата се одржува дури и ако има повеќекратни пристапи до истиот уред.
повторувања: Бројот на повторени обиди ако уредот не реагира.
rcv_timeout: во msec: максималното време на чекање додека уредот не реагира, по пристап.

Овие глобални својства се однесуваат на Modbus TCP и RTU:

modbus_read: Функцискиот број на командата Modbus за читање, обично 3 или 4.
modbus_read_max_registers: Максималниот број на регистри што може да се прочитаат со едно движење.
modbus_allow_gaps: true = неискористените регистерски области може да се читаат во операцијата за читање.

За Modbus TCP и HTTP/JSON постои објект „tcp“ со следните својства:

connect_timeout: е msec: Максималното време на чекање за TCP конекција.
delay_after_connect: во msec: Паузирајте по воспоставувањето на врската пред да ја испратите првата команда.

И двата типа на дефиниција (Modbus и HTTP/JSON) ги имаат и следниве својства:

upd_delay: во msec: Го одредува интервалот во кој може да се чита уредот. Некои уреди се преоптоваруваат ако се анкетираат премногу често.
производител: Низа, име на производителот. Ова ќе се прикаже во проширените информации на плочката.
delay_accumulated: true = Акумулираните вредности (kWh) се бараат само на секои 3 секунди или кога има доволно моќност. неточно = Овие вредности секогаш се прашуваат.
ui_addr: URL, доколку е различна од адресата на уредот за повикување на веб-интерфејсот.
резервирано: низа со вредности кои се толкуваат како 0 (корисно ако уредот поддржува одредени вредности во зависност од моделот).

Ако ги испуштите својствата наведени погоре, cFos Charging Manager ги зема стандардните вредности, кои функционираат добро во повеќето случаи.

Следно во дефиницијата JSON е дефиницијата на променливи што бројачот ги користи за читање или пресметување на вредностите за струја, напон, итн. Менаџерот за полнење ги знае следните променливи:
type_designation, version, firmware_version, serial: Тие ја формираат ознаката на моделот како што е прикажано во проширените информации на плочката. Тие се прашуваат еднаш кога се поставува или ресетира бројачот.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Charging Manager се обидува да ги пресмета потпишаните current_l1..l3, power_w и power_va од овие вредности l1.3.l volt. Не мора да ги специфицирате сите променливи. CFos Charging Manager се обидува да ги пресмета вредностите од постоечките променливи.
import_wh, export_wh: Управникот за полнење ги користи овие променливи за прикажување import_wh и export_wh. За еднонасочни броила (на пр. инвертери) секогаш треба да дефинирате само import_wh. Export_wh треба да се дефинира само за двонасочни броила (како што се мерачите за складирање или мрежна потрошувачка).

soc: Доколку е достапно, состојбата на полнење на единицата за складирање батерии се прикажува овде во % во плочката.
Дополнително, можете да дефинирате дополнителни променливи со различни имиња кои се читаат или пресметуваат со помош на формули при секое ажурирање. Ако дефинирате променливи кои почнуваат со „CM“. почеток, на пр. CM._set_price, доделените вредности се зачувуваат во глобалните променливи на менаџерот за наплата (види подолу) и соодветно може да се побараат.
Променливи со *: ако дефинирате променливи што почнуваат со „*“, тие ќе се прикажат во интерфејсот во плочката на мерачот под проширените информации, на пр., температурата на складиштето на батеријата.
Забелешка: Само броевите и буквите az и AZ може да се користат како имиња на променливи.

Дефиниција на променлива:

Објектот е именуван по името на променливата наведена погоре и ги има следните својства:
фиксна: Низа со фиксна вредност. Корисно ако, на пример, не може да се одреди вредност, на пр. за тип_ознака или напон.
expr: Низа. Променливата не се чита, туку се оценува како формула.
тип: Ако не е фиксиран или expr, типот на променливата: int16, uint16, int32, uint32, float, int64, стринг Ова е важно за Modbus да ги чита регистрите во правилен формат. uint16 и uint32 се типови кои можат да прифатат само позитивни броеви. Со JSON/HTTP обично можете да користите float.
резолуција: плови. Вредноста за читање се множи со „резолуција“. Вредностите на напонот мора да бидат во волти, струите во милиампери, моќноста во вати и енергијата во ват-часови (Wh). Со негативна „резолуција“ можете да превртите вредност ако има спротивен знак.
еднаш: бул (точно или неточно). Ако е точно, вредноста се чита само еднаш кога уредот е иницијализиран, инаку периодично.
адреса: број (Modbus) или Низа (HTTP/JSON). Бројот на регистарот Modbus или HTTP URL-то на вредноста што треба да се прочита.
барање: Низа. За HTTP JSON, информациите во јазикот на барањето на менаџерот за наплата со кој ја наоѓа вредноста што треба да се прочита во одговорот JSON.
ред: Низа. За Modbus, редоследот на бајти, или „hl“ или „lh“, во кој вредноста е достапна. должина: број. Со Modbus должината на стрингот во регистрите, со променливите 'version' и 'firmware_version' 'length' се користи за претворање на нумеричките верзии во низи со точки. Вредностите од 2 или 4 се дозволени за „должина“, што потоа резултира со формати на верзијата ab и abcd. За „должина“ 2 и типот „int16“ или „uint16“, Управникот за полнење одвојува низок и висок бајт со точка, за „int32“ или „uint32“ низок и висок збор, за „int64“ низок и висок dword. Со „lenth“ 4 и „int32“ или „uint32“, Управникот за полнење ја дели вредноста на 4 бајти одделени со точки. За 'int64' одговараат 4 зборови.
регекс: Низа. Ако е наведен редовен израз, одговорот на бројачот не треба да биде во JSON. Како резултат на тоа, се оценува или целиот натпревар на регуларниот израз или првата група. Користете го само ако уредот не враќа JSON. Еве список на карактеристики на нашите редовни изрази:
било кој знак:.
именувани класи: \d \s \w \D \S \W
анонимни часови: [a-z0-9_], [^0-9], [^\d]
групи со алтернативи: (ab|cd|ef)
незаробени групи: (?:ab|cd)
(алчен) еднаш или ниеден: а?, а??
(алчен) многу или ниеден: a*, a*?
(алчен) еднаш или повеќе: a+, a+?
почеток на низата: ^
крај на низата: $

Дефиниција на влезови:

Управникот за полнење може да побара до 32 влезни вредности од различни регистри или JSON елементи по уред. Својството Inputs е JSON низа. Мора да ги дефинирате следните својства за секој влез:
адреса: Адреса (Modbus регистар или URL).
count: Број на влезни битови што се читаат со ова барање.
барање: за HTTP/JSON, Јазик на барање за да се најде вредноста во одговорот.

Со секое ажурирање, cFos Charging Manager ги чита сите влезови дефинирани на овој начин и ги поставува битовите внатрешно во низа што потоа може да се побараат во формули, Input1..InputN.

Дефиниција на излези:

Управникот за полнење може да префрли до 32 излези по уред. Излезите се дефинирани во „излези“ како JSON низа на излезни објекти. Сите излези се префрлуваат на крајот од секој циклус на ажурирање доколку се промени статусот на соодветниот излез.
За секој излез мора да ги дефинирате следните својства во излезниот објект:
адреса: HTTP URL со изборен HTTP метод, на пр. GET//}. За да поставите Modbus регистри, можете да го користите cFos Charging Manager HTTP API. Управникот за полнење детектира соодветни пристапи до локалниот хост и го пренасочува барањето до внатрешниот управувач, така што не ви треба овластување како кај надворешните HTTP API пристапи. Ако URL-то е празно по сите замени, не е поставен излез. На пример, можете да менувате излези само ако постојат одредени променливи (видете ја функцијата формули: постои ()). Можете исто така да наведете ${address} и ${id} во адресата. Ова е тековната адреса на уредот и ID на Modbus како што е поставено во поставките. „адреса“ и „ид“ првенствено се користат за користење на Modbus API (види подолу).
тело: Изборно HTTP тело за POST или PUT.
Во URL-то и телото, можете да користите формули ${expr} кои упатуваат на глобалните променливи на Управникот за наплата или соодветниот метар. Формулата „expr“ се оценува при поставување на излезот и се заменува во текстот на URL-то или телото. Во примерот погоре, ако http://www.example.com?output1=1 го постави излезот и http://www.example.com?output1=0 го брише, можете да дефинирате променлива „var1“ и да ја поставите на 1 по желба или поставете 0. Можете исто така да напишете нумерички вредности за да ги контролирате перформансите на меморијата во регистрите на Modbus што претходно сте ги зачувале во променлива користејќи формула.
Ако, наместо да пренесувате нумеричка вредност, треба да замените еден текст во URL-то со друг во зависност од формулата, како на пример со Shelly WLAN приклучоците, можете да го напишете вака: ${if expr`text1`text2}. „Апострофот“ е заден знак (ASCII код 96). Ако 'expr' != 0, се користи text1, инаку text2. За приклучокот Shelly WLAN, URL-то изгледа вака: http://<ip-addr>/relay/0?turn=${if expr`on`off}, т.е. ако expr != 0 повикува менаџерот за полнење, потоа http ://<ip-addr>/реле/0?turn=on вклучен, инаку http://<ip-addr>/relay/0?turn=off.

Ако внесете релативна патека како URL, Управникот за полнење ја зема адресата конфигурирана за соодветниот уред. Ако наведете „localhost“ како домен, Управникот за полнење ја зема адресата на уредот на кој работи. Ако открие пристап до сопственото API, го користи внатрешниот управувач наместо да изврши целосен HTTP пристап, така што нема да морате да складирате корисничко име и лозинка во дефиницијата на бројачот. URL-адресата што започнува со „*“ предизвикува Управникот за полнење секогаш да извршува целосен HTTP пристап.

Ресетирање излези: покрај низата „излези“, можете да дефинирате и низа наречена „ресетирање“ структурирана како низата „излези“. Ова овозможува излезите да се ресетираат на нивните почетни вредности кога уредот е деактивиран. Ова, во комбинација со променливите дефинирани од корисникот и „еднаш“: точно, ви овозможува да го вратите уредот во неговата почетна состојба.
Периодично запишувајте излези: на некои уреди излезите треба периодично да се пишуваат, инаку уредот ги враќа вредностите на „стандардни“. На пример, меморијата на Kostal ќе се врати на своите стандардни правила ако меморискиот контролер не е активно напишан некое време. За периодично да поставувате излези, можете да ја поставите адресата со префикс #xxx#, каде што xxx покажува секоја секунда дека излезот ќе се препишува, дури и ако вредноста што треба да се запише останала иста. На пример, ако адресата е /cnf?cmd=set_cm_vars&name=test&val=42, можете да користите #30#/cnf?cmd=set_cm_vars&name=test&val=42 за да се осигурате дека оваа вредност е напишана секој 30 секунди стануваат.

Дефиниција на јазикот на барањето:

Во моментов, имињата на членовите и операторите "." може да се користат во изразите за пребарување "query". и „[]“ се користат, примери:

тестЕлемент именуван како „тест“
име1.име2Елемент со име „име2“ во детски објект „име1“
име [idx]Елемент "idx" на објектниот елемент "име". "idx" може да биде број, на пр. за низи или стринг
име ["u2"]Елементот "u2" на елементот на објектот "име" одговара на "name.u2"
име[{"el1": "v1", "el2": 3}].вредностИзберете елемент од низата што ги задоволува условите за нотација на објектот и проценете го елементот наречен „вредност“. Еве, на пример, елементот е селектиран во низата „име“ што ги има објектните елементи „el1“ со вредност „v1“ и „el2“ со вредност 3, а потоа вредноста на елементот „вредност“ се враќа од овој објект. .

Променливи на Global Charging Manager:

Можете да креирате променливи во конфигурацијата на Управникот за полнење. Можете да користите фиксна вредност или формула како вредност. На крајот од секој циклус на ажурирање, Управникот за наплата може повторно да ја пресмета вредноста на оваа променлива. Потоа можете да ги користите во (одредени) параметри на менаџерот за полнење, правила за полнење или за контрола на излезите. Можете исто така да напишете E x.member или M x.member како променлива. Овде E x и M x се ID на уредот на ѕидното сандаче или метар поставен во Управникот за полнење. „член“ е „прилагодена“ променлива што е зачувана во соодветниот уред. Некои од променливите можат да имаат посебно значење: за KEBA „out1“ е прекинувачки излез, за ABB B23 метри „out1“ и „out2“ се прекинувачки излези (на моделите што го поддржуваат ова). А 1 го прекинува излезот, а 0 повторно го исклучува.

Ако имате уреди што треба да се вклучат под одредени услови, но потоа мора да работат некое време (на пр. машина за перење, машина за миење садови), можете да ја дефинирате променливата и како „активатор“. Тогаш формулата на променливата е условот што ја поставува променливата на 1. По приспособливо време, потоа се ресетира на 0. „Состојба за повторно активирање“ дозволува времето до исклучувањето (т.е. поставување на променливата на 0) да се продолжува повторно и повторно се додека условот е исполнет.

Забелешка: Само броевите и буквите az и AZ може да се користат како имиња на променливи.

За цели на тестирање, можете да прикажете менаџер за полнење и променливи на мерачот, на пример тековните цени од Awattar:


                        Приказ на екранот на бројачките променливи

Излези на глобалниот менаџер за наплата:

Во конфигурацијата на Управникот за полнење можете да ги конфигурирате глобалните излези како што е опишано погоре во дефиницијата на мерачот под „Излези“. Тие се поставени на крајот од секој циклус на ажурирање доколку нивниот статус е променет. Ако сакате да ги контролирате префрлувачките излези во уредите дефинирани од корисникот, се препорачува горната конвенција (видете Променливи на менаџерот за полнење): поставувате променливи со името „out1“, „out2“ итн. во бројачот дефиниран од корисникот и ги поставувате излезите во бројачот дефиниран од корисникот го менуваат излезот во зависност од вредноста на оваа променлива.

Global Modbus API на менаџер за полнење:

Modbus API на менаџерот за полнење се користи за контрола на уредите Modbus кои имаат која било Modbus RTU или TCP адреса (достапна од Управникот за полнење). Како адреса за Modbus RTU, внесете COMx,bd,8,p,s, како во конфигурацијата на поединечните уреди, каде што x е бројот на COM портата, bd е брзината на бауд, p е паритетот ('N', 'E' или 'O') и s е бројот на стоп битови (1 или 2). Со Modbus TCP, адресата е IP адресата на уредот во мрежата на Charging Manager, вклучувајќи го и бројот на портата.
URL-то (за HTTP GET) на Modbus API е:
/cnf?cmd=modbus_get или /cnf?cmd=modbus_set
CFos Charging Manager ги поддржува следните дополнителни параметри за барање:
addr: Modbus RTU или TCP адресата на уредот спомената погоре.
Функ: број на функцијата Modbus, на пр. за читање 3 или 4, за пишување 6 или 16.
id: ID на уред на уредот Modbus.
reg: Регистерскиот број на Modbus. Вредноста може да се наведе во децимална или шестоаголна (со префикс 0x).
val: број: Вредноста што треба да се запише во регистарот. Испушти при читање.
тип: 'w' 16bit (стандардно), d = 32bit, f = float, q = 64bit, s = стринг.
cnt: број: Максималната должина на низата во регистрите, за други типови исфрлете ја или поставена на 1.
Ред: Низа: Редоследот на бајти, или „hl“ или „lh“.

Забелешка: Ако вашиот „Метер“ првенствено се користи за контролни цели, можете да ја проверите опцијата „Сокриј уред“ во поставките на оваа плочка за да не се појави овој уред на почетната страница.

Забелешка: Некои броила прочитани преку HTTP бараат корисничко име/лозинка како авторизација. Ова може да го наведете во адресата за пристап до HTTP, на пр. со http://username:password@192.168.2.111. Ако вашето корисничко име или лозинка содржи „@“, мора да ги замените со „%40“.