Забелешка: 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 и ги анализира пораките објавени под темата како 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
Не заборавајте да го прочитате поглавјето Формули за да разберете кои вредности може да се користат во формулите во следната референца.
тишина_период, во msec. ја одредува должината на паузата пред пристапот на Modbus RTU, така што уредот го препознава почетокот на пораката.
silence_same_slave, true: Паузата се одржува дури и со повеќекратни пристапи до истиот уред.
повторувања: Бројот на повторени обиди ако уредот не реагира.
rcv_timeout: во msec. максималното време на чекање по пристап додека уредот не реагира.
modbus_read: Функцискиот број на командата Modbus read, обично 3 или 4.
modbus_read_max_registers: Максималниот број на регистри што може да се прочитаат со едно движење.
modbus_allow_gaps: true = Неискористените регистерски области може да се читаат во операцијата за читање.
connect_timeout: е msec. максималното време на чекање за TCP конекција.
delay_after_connect: во msec. Паузирајте по воспоставувањето на врската пред да ја испратите првата команда.
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._. Не мора да ги специфицирате сите променливи. CFos Charging Manager се обидува да ги пресмета вредностите од постоечките променливи.
import_wh, export_wh: Управникот за полнење ги користи овие променливи за прикажување import_wh и export_wh. Со еднонасочни бројачи (на пр. инвертери) треба да дефинирате само import_wh. export_wh треба да се дефинира само за двонасочни броила (како што се мемориски или купени броила за електрична енергија).
soc: Веднаш достапно, состојбата на полнење на складиштето на батеријата се прикажува овде во % во плочката.
Покрај тоа, можете да дефинирате други променливи со различни имиња, кои се читаат со секое ажурирање или се пресметуваат со помош на формули. Ако дефинирате променливи кои користат CM. започнете, на пр. CM._set_price, доделените вредности се зачувуваат во глобалните променливи на Управникот за наплата (видете подолу) и соодветно може да се побараат.
Променливи со *: ако дефинирате променливи што почнуваат со * , тие се прикажуваат во интерфејсот во бројачот под проширени информации, на пр. температурата на складиштето на батеријата.
Објектот е именуван по името на променливата наведена погоре и ги има следните својства:
фиксна: Низа со фиксна вредност. Корисно ако, на пример, не може да се одреди вредност, на пр. за тип_ознака или напон.
expr: Низа, променливата не се чита, туку се оценува како формула.
тип: Ако не е фиксиран или expr, типот на променливата: int16, uint16, int32, uint32, float, int64, стринг Ова е важно за Modbus да ги чита регистрите во правилен формат. uint16 и uint32 се типови кои можат да прифатат само позитивни броеви. Со JSON/HTTP обично можете да користите float.
резолуција: float, вредноста за читање се множи со „резолуција“. Вредностите на напонот мора да бидат во волти, струите во милиампери, моќноста во вати и енергијата во ват-часови (Wh). Со негативна „резолуција“ можете да превртите вредност ако има спротивен знак.
еднаш: bool (точно или неточно), ако е точно, вредноста се чита само еднаш кога уредот се иницијализира, инаку периодично.
адреса: број (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 елементи по уред. Својството „Влезови“ е низа 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-то или телото. Во примерот погоре, ако//го постави излезот и//го брише, можете да дефинирате променлива „var1“ и да ја поставите на 1 по желба или поставете 0. На овој начин, можете исто така да напишете нумерички вредности за контролирање на перформансите на меморијата во Modbus регистрите што претходно сте ги складирале во променлива користејќи формула.
Ако, наместо да пренесувате нумеричка вредност во URL-то, треба да замените текст со друг во зависност од формулата, како на пример со Shelly WLAN приклучоците, можете да го напишете вака: ${if expr`text1`text2}. „Апострофот“ е заден знак (ASCII код 96). Ако 'expr' != 0, се користи text1, инаку text2. URL-адресата за приклучок Shelly WLAN изгледа вака, на пример: http://<ip-addr>/relay/0?turn=${if expr`on`off}, т.е. ако expr != 0 Управникот за полнење тогаш повикува http ://<ip-addr>/relay/0?turn=on, во спротивно http://<ip-addr>/relay/0?turn=off.
Ако внесете релативна патека како URL, Управникот за полнење ја користи адресата конфигурирана за соодветниот уред. Ако внесете „localhost“ како домен, Управникот за полнење ја зема адресата на уредот на кој работи. Ако открие пристап до сопственото API, го користи внатрешниот управувач наместо да изврши целосен HTTP пристап, за да не морате да складирате корисничко име и лозинка во дефиницијата на мерачот. URL-адресата што започнува со * предизвикува Управникот за полнење секогаш да извршува целосен HTTP пристап.
Ресетирање излези: покрај низата „излези“, можете да дефинирате и низа со име „ресетирање“ која е структурирана како низата „излези“. Ова значи дека излезите може да се ресетираат на нивните почетни вредности кога уредот е деактивиран. Ова, во комбинација со променливите дефинирани од корисникот и „еднаш“: точно, ви овозможува да го вратите уредот во неговата почетна состојба.
Периодично запишувајте излези: Кај некои уреди, излезите мора периодично да се пишуваат, инаку уредот ги ресетира вредностите на „стандардно“. На пример, меморијата Костал повторно ги користи своите стандардни правила ако мемориската контрола не е активно напишана некое време. За периодично да поставувате излези, можете да ја поставите адресата со префикс #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, а потоа вредноста на елементот „вредност“ се враќа од овој објект. . |
Можете да креирате променливи во конфигурацијата на Управникот за полнење. Можете да користите фиксна вредност или формула како вредност. На крајот од секој циклус на ажурирање, Управникот за полнење повторно ја пресметува вредноста на оваа променлива доколку е потребно. Потоа можете да ги користите во (одредени) параметри на менаџерот за полнење, правила за полнење или за контрола на излезите. Можете исто така да напишете E x.member или M x.member како променлива. Овде E x и M x е ID на уредот на ѕидната кутија или метар поставен во Управникот за полнење. член е променлива „дефинирана од корисникот“ која е зачувана во соодветниот уред. Некои од променливите можат да имаат посебно значење: кај KEBA „out1“ е прекинувачки излез, со ABB B23 метри „out1“ и „out2“ се прекинувачки излези (за модели кои го поддржуваат ова). А 1 го прекинува излезот, а 0 повторно го исклучува.
Ако имате уреди што треба да се вклучат под одредени услови, но потоа мора да работат некое време (на пр. машина за перење, машина за миење садови), можете да ја дефинирате променливата и како „активатор“. Тогаш формулата на променливата е условот што ја поставува променливата на 1. По приспособливо време, потоа се ресетира на 0. „Состојба за повторно активирање“ дозволува времето до исклучувањето (т.е. поставување на променливата на 0) да се продолжува повторно и повторно се додека условот е исполнет.
За цели на тестирање, можете да ги прикажете Charging Manager и променливите на мерачот, на пример тековните цени од Awattar:
Во конфигурацијата на Управникот за полнење, можете да ги конфигурирате глобалните излези како што е опишано погоре во дефиницијата на мерачот под „Излези“. Тие се поставени на крајот од секој циклус на ажурирање доколку нивниот статус е променет. Ако сакате да ги контролирате прекинувачките излези во уредите дефинирани од корисникот, се препорачува горенаведената конвенција (видете променливи на менаџерот за полнење): поставувате променливи со имињата „out1“, „out2“ итн. во мерачот дефиниран од корисникот и ги поставувате излези во мерачот дефиниран од корисникот кои се во Префрли го излезот во зависност од вредноста на оваа променлива.
Modbus API на Управувачот за полнење се користи за контрола на уредите Modbus кои имаат која било Modbus RTU или TCP адреса (до која може да дојде Управникот за полнење). Внесете COMx,bd,8,p,s како адреса за Modbus RTU, како во конфигурацијата на поединечните уреди, каде што 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“.