Дакументацыя

Вызначаныя карыстальнікам лічыльнікі

Заўвага: cFos Charging Manager можа счытваць большасць сонечных інвертараў з дапамогай SunSpec (тып прылады «SunSpec Solar Inverter / Meter»). У гэтым выпадку вам не трэба ствараць уласнае вызначэнне лічыльніка.

cFos Charging Manager дазваляе ствараць уласныя вызначэнні лічыльнікаў для падтрымкі лічыльнікаў, якіх няма ў стандартным рэпертуары. У цяперашні час існуе тры тыпу: лічыльнікі 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.

У дадатак да шэрагу загадзя зададзеных зменных, такіх як ток і напружанне, лічыльнікі, якія вызначаюцца карыстальнікам, таксама могуць счытваць невядомыя, зададзеныя карыстальнікам зменныя, уводныя запыты і задаваць выхады. Чытанне зменных і заданне вывадаў дазваляе ацэнку формул. У спалучэнні са зменнымі Charging Manager і глабальнымі выхадамі Charging Manager, апісанымі ніжэй, гэта магутная функцыя, якая нават дазваляе выконваць пэўныя задачы хатняй аўтаматызацыі і кіраваць вонкавымі прыладамі, такімі як назапашвальнік батарэі. Калі вы выконваеце кантрольныя задачы з гэтым, калі ласка, дайце нам водгук. Мы вельмі зацікаўлены ў тым, чым людзі кіруюць з дапамогай cFos Charging Manager, і гэта дапамагае нам далей развіваць 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' з наступнымі ўласцівасцямі:

перыяд_цішыні, у мсек. вызначае працягласць паўзы перад доступам Modbus RTU, каб прылада распазнавала пачатак паведамлення.
silence_same_slave, праўда: Паўза захоўваецца нават пры шматразовым доступе да адной прылады.
retries: Колькасць паўтораў, калі прылада не адказвае.
rcv_timeout: у мс. максімальны час чакання на доступ, пакуль прылада не адкажа.

Гэтыя глабальныя ўласцівасці прымяняюцца да Modbus TCP і RTU:

modbus_read: нумар функцыі каманды чытання Modbus, звычайна 3 ці 4.
modbus_read_max_registers: Максімальная колькасць рэгістраў, якія можна прачытаць за адзін раз.
modbus_allow_gaps: true = Нявыкарыстаныя вобласці рэгістра могуць быць прачытаны ў аперацыі чытання.

Для Modbus TCP і HTTP/JSON існуе аб'ект "tcp" з наступнымі ўласцівасцямі:

час чакання злучэння: мс. максімальны час чакання TCP-злучэння.
затрымка_пасля_злучэння: у мс. Зрабіце паўзу пасля ўстанаўлення злучэння перад адпраўкай першай каманды.

Абодва тыпу азначэнняў (Modbus і HTTP/JSON) таксама маюць наступныя ўласцівасці:

upd_delay: у мс. вызначае інтэрвал, у якім можна счытваць прыладу. Некаторыя прылады перагружаюцца пры занадта частым апытанні.
вытворца: радок, назва вытворцы. Гэта паказана ў пашыранай інфармацыі пліткі.
delay_accumulated: true = Назапашаныя значэнні (кВт·гадз) запытваюцца толькі кожныя 3 секунды або пры дастатковай магутнасці. false = Гэтыя значэнні заўсёды запытваюцца.
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 спрабуе вылічыць знакавы current_l1..l3, power_w і power_va з гэтых значэнняў для voltage_l1..l3. Вам не трэба ўказваць усе зменныя. cFos Charging Manager спрабуе вылічыць значэнні з існуючых зменных.
import_wh, export_wh: менеджэр зарадкі выкарыстоўвае гэтыя зменныя для адлюстравання import_wh і export_wh. З аднанакіраванымі лічыльнікамі (напрыклад, інвертары) вы павінны вызначаць толькі import_wh. export_wh трэба вызначаць толькі для двухнакіраваных лічыльнікаў (напрыклад, лічыльнікаў памяці або набытых лічыльнікаў электраэнергіі).

soc: Неадкладна даступны, стан зарада акумулятара адлюстроўваецца тут у % на плітцы.
Акрамя таго, вы можаце вызначыць іншыя зменныя з рознымі імёнамі, якія чытаюцца пры кожным абнаўленні або разлічваюцца па формулах. Калі вы вызначаеце зменныя, якія выкарыстоўваюць CM. пачынаць, напрыклад, CM._set_price, прысвоеныя значэнні захоўваюцца ў глабальных зменных Charging Manager (гл. ніжэй) і могуць быць запытаны адпаведна.
Зменныя з *: калі вы вызначаеце зменныя, якія пачынаюцца з * , яны адлюстроўваюцца ў карыстальніцкім інтэрфейсе на плітцы лічыльніка пад пашыранай інфармацыяй, напрыклад, тэмпературай акумулятара.

Вызначэнне зменнай:

Аб'ект названы ў адпаведнасці з назвай зменнай, пералічанай вышэй, і мае наступныя ўласцівасці:
fixed: радок з фіксаваным значэннем. Карысна, калі, напрыклад, нельга вызначыць значэнне тыпу_designation або напружання.
expr: радок, зменная не счытваецца, а вылічваецца як формула.
type: Калі не фіксаваны або expr, тып зменнай: int16, uint16, int32, uint32, float, int64, string Гэта важна для Modbus для чытання рэгістраў у правільным фармаце. uint16 і uint32 - гэта тыпы, якія могуць прымаць толькі дадатныя лікі. З JSON/HTTP вы звычайна можаце выкарыстоўваць float.
дазвол: float, прачытанае значэнне памнажаецца на 'раздзяленне'. Значэнні напружання павінны быць у вольтах, сілы току ў міліамперах, магутнасці ў ватах і энергіі ў ват-гадзінах (Вт·ч). З адмоўным "раздзяленнем" вы можаце інвертаваць значэнне, калі яно мае супрацьлеглы знак.
once: bool (ісціна або ілжыва), калі ісціна, значэнне чытаецца толькі адзін раз пры ініцыялізацыі прылады, у адваротным выпадку перыядычна.
адрас: лік (Modbus) або радок (HTTP/JSON), нумар рэестра Modbus або URL HTTP значэння, якое трэба прачытаць.
query: Радок, для HTTP JSON, інфармацыя на мове запытаў дыспетчара спагнання платы, з дапамогай якой ён знаходзіць значэнне для чытання ў адказе JSON.
парадак: радок, для Modbus парадак байтаў, «hl» або «lh», у якім даступна значэнне. length: лік, з Modbus даўжыня радка ў рэгістрах. Для зменных «version» і «firmware_version» «length» выкарыстоўваецца для пераўтварэння лікавых версій у радкі з кропкамі. Для "даўжыні" дазволены значэнні 2 або 4, якія ў выніку дадуць фарматы версіі ab і abcd. Для «length» 2 і тыпу «int16» або «uint16» менеджэр зарадкі аддзяляе малодшы і высокі байт кропкай, для «int32» або «uint32» малое і высокае слова, для «int64» малое і высокае слова. З «lenth» 4 і «int32» або «uint32» Charging Manager разбівае значэнне на 4 байты, падзеленыя кропкамі. Для 'int64' адпавядаюць 4 словы.
рэгулярны выраз: радок. Калі ўказаны рэгулярны выраз, адказ лічыльніка не павінен быць у фармаце JSON. У выніку ацэньваецца альбо поўнае супадзенне рэгулярнага выразу, альбо першая група. Выкарыстоўвайце, толькі калі прылада не вяртае JSON. Вось спіс функцый нашых рэгулярных выразаў:
любы сімвал:.
названыя класы: \d \s \w \D \S \W
ананімныя класы: [a-z0-9_], [^0-9], [^\d]
групы з альтэрнатывамі: (ab|cd|ef)
незахопленыя групы: (?:ab|cd)
(прагны) раз ці ніводнага разу: а?, а??
(прагны) многа ці ніводнага: a*, a*?
(прагны) раз ці больш: а+, а+?
пачатак радка: ^
канец радка: $

Вызначэнне ўваходных дадзеных:

Менеджэр зарадкі можа запытваць да 32 значэнняў уводу з розных рэестраў або элементаў JSON на прыладу. Уласцівасць "Inputs" - гэта масіў JSON. Вы павінны вызначыць наступныя ўласцівасці для кожнага ўваходу:
адрас: адрас (рэестр Modbus або URL).
count: колькасць уваходных бітаў, прачытаных з гэтым запытам.
query: для HTTP/JSON, мова запытаў, каб знайсці значэнне ў адказе.

Пры кожным абнаўленні cFos Charging Manager счытвае ўсе ўводы, вызначаныя такім чынам, і змяшчае біты ўнутры ў масіў, які потым можна запытваць у формулах Input1..InputN.

Вызначэнне выхадаў:

Дыспетчар зарадкі можа пераключаць да 32 выхадаў на прыладу. Выхады вызначаюцца ў раздзеле "выхады" як масіў JSON аб'ектаў вываду. Усе выхады пераключаюцца ў канцы кожнага цыкла абнаўлення, калі статус адпаведнага выхаду змяніўся.
Вы павінны вызначыць наступныя ўласцівасці ў аб'екце вываду для кожнага вываду:
адрас: URL-адрас HTTP з дадатковым метадам HTTP, напрыклад, GET//}. Каб усталяваць рэгістры Modbus, вы можаце выкарыстоўваць HTTP API cFos Charging Manager. Менеджэр аплаты распазнае адпаведны доступ да лакальнага хоста і перанакіроўвае запыт да ўнутранага апрацоўшчыка, так што вам не патрэбна аўтарызацыя, як у выпадку доступу да знешняга HTTP API. Калі URL пусты пасля ўсіх замен, вывад не зададзены. Напрыклад, вы можаце пераключаць выхады, толькі калі існуюць пэўныя зменныя (гл. формулы: функцыя exists(). Вы таксама можаце ўказаць ${address} і ${id} у адрасе. Гэта бягучы адрас прылады і Modbus ID, зададзеныя ў наладах. Адрас і ідэнтыфікатар у асноўным выкарыстоўваюцца для выкарыстання Modbus API (гл. ніжэй).
цела: Дадатковае цела HTTP для POST або PUT.
У URL-адрасе і целе вы можаце выкарыстоўваць формулы ${expr}, якія спасылаюцца на глабальныя зменныя Charging Manager або з адпаведнага лічыльніка. Формула 'expr' вылічваецца, калі вывад зададзены і заменены ў тэксце URL-адраса або цела. У прыведзеным вышэй прыкладзе, калі//задае вывад, а//ачышчае яго, вы можаце вызначыць зменную 'var1' і задаць яе у 1 па жаданні або ўсталюйце 0. Такім чынам вы таксама можаце запісваць лікавыя значэнні для кіравання прадукцыйнасцю памяці ў рэгістрах Modbus, якія вы раней захоўвалі ў зменнай з дапамогай формулы.
Калі замест перадачы лікавага значэння ў URL-адрасе вам трэба замяніць тэкст іншым у залежнасці ад формулы, напрыклад, з гняздамі Shelly WLAN, вы можаце запісаць гэта так: ${if expr`text1`text2}. "Апостраф" - гэта зваротная галачка (код ASCII 96). Калі 'expr' != 0, выкарыстоўваецца тэкст1, інакш тэкст2. URL-адрас сокета Shelly WLAN выглядае так, напрыклад: http://<ip-addr>/relay/0?turn=${if expr`on`off}, г. зн., калі expr != 0, тады Charging Manager выклікае http ://<ip-addr>/relay/0?turn=on on, інакш http://<ip-addr>/relay/0?turn=off.

Калі вы ўводзіце адносны шлях у якасці URL-адраса, Charging Manager выкарыстоўвае адрас, настроены для адпаведнай прылады. Калі вы ўводзіце ў якасці дамена "localhost", Charging Manager прымае адрас прылады, на якой ён працуе. Калі ён выяўляе доступ да ўласнага 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 секунд робіцца.

Вызначэнне мовы запытаў:

У цяперашні час імёны членаў і аператары «.» могуць выкарыстоўвацца ў пошукавых выразах «запыту». і "[]" выкарыстоўваюцца, прыклады:

тэстЭлемент з імем "тэст"
name1.name2Элемент з імем "name2" у даччыным аб'екце "name1"
імя [idx]Элемент "idx" элемента аб'екта "імя". "idx" можа быць лікам, напрыклад, для масіваў або радка
імя ["u2"]Элемент "u2" элемента аб'екта "name" адпавядае "name.u2"
імя [{"el1": "v1", "el2": 3}].значэннеВыберыце элемент масіва, які задавальняе умовам абазначэння аб'екта, і ацаніце элемент з імем «значэнне». Вось, напрыклад, элемент выбіраецца ў масіве 'name', які мае элементы аб'екта 'el1' са значэннем 'v1' і 'el2' са значэннем 3, а затым з гэтага аб'екта вяртаецца значэнне элемента 'value' .

Зменныя Global Charging Manager:

Вы можаце ствараць зменныя ў канфігурацыі Charging Manager. У якасці значэння можна выкарыстоўваць фіксаванае значэнне або формулу. У канцы кожнага цыкла абнаўлення дыспетчар спагнанняў пры неабходнасці пераразлічвае значэнне гэтай зменнай. Затым вы можаце выкарыстоўваць іх у (пэўных) параметрах дыспетчара зарадкі, правілах зарадкі або для кіравання выхадамі. Вы таксама можаце напісаць E x.member або M x.member у якасці зменнай. Тут E x і M x - гэта ідэнтыфікатар прылады насценнай скрынкі або лічыльніка, наладжанага ў Charging Manager. член - гэта «вызначаная карыстальнікам» зменная, якая захоўваецца ў адпаведнай прыладзе. Некаторыя зменныя могуць мець асаблівае значэнне: у KEBA "out1" з'яўляецца пераключальным выхадам, у лічыльніках ABB B23 "out1" і "out2" з'яўляюцца пераключальнымі выхадамі (для мадэляў, якія падтрымліваюць гэта). 1 пераключае выхад, 0 зноў выключае.

Калі ў вас ёсць прылады, якія павінны быць уключаны пры пэўных умовах, але потым павінны працаваць некаторы час (напрыклад, пральная машына, посудамыйная машына), вы таксама можаце вызначыць зменную як "трыгер". Тады формула зменнай - гэта ўмова, якая ўсталёўвае зменную ў 1. Пасля рэгуляванага часу ён скідаецца да 0. "Умова паўторнага запуску" дазваляе працягваць час да выключэння (г.зн. усталявання зменнай у 0) зноў і зноў, пакуль выконваецца ўмова.

У мэтах тэсціравання вы можаце адлюстраваць Charging Manager і зменныя лічыльніка, напрыклад, бягучыя цэны ад Awattar:


                        Скрыншот адлюстравання зменных лічыльніка

Выхады Global Charging Manager:

У канфігурацыі Charging Manager вы можаце наладзіць глабальныя выхады, як апісана вышэй у вызначэнні лічыльніка ў раздзеле "Выхад". Яны ўсталёўваюцца ў канцы кожнага цыкла абнаўлення, калі іх статус змяніўся. Калі вы хочаце кіраваць камутацыйнымі выхадамі ў прыладах, якія вызначаюцца карыстальнікам, рэкамендуецца прыведзенае вышэй пагадненне (гл. Зменныя дыспетчара зарадкі): вы ўсталёўваеце зменныя з назвамі "out1", "out2" і г.д. у лічыльніку, які вызначаецца карыстальнікам, і наладжваеце выхады ў вызначаным карыстальнікам лічыльніку, якія знаходзяцца ў Пераключыць выхад у залежнасці ад значэння гэтай зменнай.

Global Modbus API дыспетчара зарадкі:

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.
func: нумар функцыі Modbus, напрыклад, 3 або 4 для чытання, 6 або 16 для запісу.
id: Ідэнтыфікатар прылады Modbus.
reg: нумар рэгістра Modbus. Значэнне можа быць указана ў дзесятковай або шаснаццатковай форме (з прэфіксам 0x).
val: лік, значэнне для запісу ў рэестр. пропуск пры чытанні.
тып: 'w' 16 біт (па змаўчанні), d = 32 біты, f = плавае, q = 64 біты, s = радок.
cnt: лік, максімальная даўжыня радка ў рэгістрах, прапусціць для іншых тыпаў або ўсталяваць у 1.
парадак: Радок, які змяшчае парадак байтаў, альбо "hl", альбо "lh".

Заўвага: калі ваш «Лічыльнік» у асноўным выкарыстоўваецца ў мэтах кантролю, вы можаце праверыць опцыю «Схаваць прыладу» ў наладах гэтай пліткі, каб гэта прылада не адлюстроўвалася на пачатковай старонцы.

Заўвага: некаторыя лічыльнікі, якія чытаюць праз HTTP, патрабуюць імя карыстальніка/пароля ў якасці аўтарызацыі. Вы можаце пазначыць гэта ў адрасе для HTTP-доступу, напрыклад, праз http://username:password@192.168.2.111. Калі ваша імя карыстальніка або пароль утрымліваюць "@", вы павінны замяніць яго на "%40".