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

Дефинирани от потребителя броячи

Забележка: Мениджърът за зареждане cFos може да отчита повечето соларни инвертори, използващи SunSpec (тип устройство "SunSpec Solar Inverter / Meter"). В този случай не е необходимо да създавате своя собствена дефиниция на измервателен уред.

Мениджърът за таксуване на cFos ви позволява да създавате собствени дефиниции на измервателни уреди, за да поддържате измервателни уреди, които не са налични в стандартния репертоар. Понастоящем има три вида: Modbus броячи, HTTP/JSON броячи и MQTT/JSON броячи. Файловете с дефиниции за тези броячи са много сходни. Modbus броячите четат данните си от определени регистри чрез Modbus, докато HTTP/JSON броячите извличат данните си чрез HTTP заявка и четат в JSON в отговор. За броячите MQTT/JSON мениджърът за таксуване на cFos се абонира за теми MQTT и чете съобщенията, публикувани в рамките на темата, като JSON. Мениджърът за таксуване на cFos използва малък "език за заявки" за четене. Тук е документацията за възможностите на MQTT в cFos Charging Manager.

В допълнение към редица предварително дефинирани променливи, като ток и напрежение, дефинираните от потребителя броячи могат също така да четат неизвестни, дефинирани от потребителя променливи, да задават заявки на входовете и да задават изходи. Четенето на променливи и задаването на изходи позволява да се анализират формули. В комбинация с описаните по-долу променливи на Charging Manager и глобални изходи на Charging Manager това е мощна функция, която дори позволява изпълнението на определени задачи за автоматизация на дома и управление на външни устройства, като например акумулатори. Ако реализирате задачи за управление с тази функция, моля, дайте ни обратна връзка. Много ни интересува какво управляват нашите клиенти с помощта на мениджъра за зареждане cFos и това ни помага да доразвием мениджъра за зареждане в съответствие с нуждите на клиентите.

Ето една проста примерна дефиниция за Modbus, която чете един регистър за активна мощност. Можете лесно да промените номера на регистъра за вашето конкретно приложение:
Примерна дефиниция за един регистър.

Ето една примерна дефиниция за Modbus и една за HTTP/JSON:
Изтегляне на примерна дефиниция за Modbus измервателен уред
Изтегляне на примерна дефиниция за HTTP/JSON метър

Мениджърът за зареждане вече е снабден с няколко такива файла, но можете да качите свои собствени файлове в "Системна конфигурация" и да ги изтриете отново.
Тук ще намерите повечето от предоставените от нас дефиниции на измервателни уреди:
Изтегляне на предоставените дефиниции на броячи

Ако сте създали свой собствен файл с броячи и той може да бъде полезен за други потребители, ще ви бъдем много благодарни, ако ни го предоставите. След това ще го предоставим с бъдещите версии на Charging Manager.

Изтегляне на дефиниции на измервателни уреди за допълнителни измервателни уреди

Структура на файла за дефиниция:

Дефинициите на броячи са 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: Паузата се поддържа и при многократен достъп до едно и също устройство. retries: Броят на повторните опити, ако устройството не отговори. rcv_timeout: в msec: Максималното време за изчакване до отговора на устройството, за всеки достъп.

Тези глобални свойства се прилагат за Modbus TCP и RTU:

modbus_read:

M odbus_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: Определя интервала, през който може да се чете устройство.
Някои устройства се претоварват, ако се заявяват твърде често. manufacturer: String, име на производителя.


Това се показва в разширената информация на плочката. delay_accumulated: true = Натрупаните стойности (kWh) се търсят само на всеки 3 секунди или ако има достатъчно енергия. false = Тези стойности се търсят винаги. ui_addr: URL, ако е различен от адреса на устройството за извикване на уеб интерфейса. reserved: Масив със стойности, които се интерпретират като 0 (полезно, ако устройството поддържа определени стойности в зависимост от модела).

Ако пропуснете изброените по-горе свойства, мениджърът за зареждане cFos използва стойности по подразбиране, които работят добре в повечето случаи.

Следващата стъпка в 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 се опитва да изчисли от тези стойности за voltage_l1..l3, подписан current_l1..l3, power_w и power_va. Не е необходимо да посочвате всички променливи.
Мениджърът за зареждане cFos се опитва да изчисли стойностите от съществуващите променливи. import_wh, export_wh: Мениджърът за зареждане използва тези променливи, за да покаже import_wh и export_wh. За еднопосочни измервателни уреди (напр. инвертори) трябва винаги да се дефинира само import_wh.

Само за двупосочни измервателни уреди (като например уреди за съхранение или уреди за отчитане на мрежата) трябва да се дефинира export_wh. soc: Ако е налично, състоянието на заряда на акумулаторното хранилище се показва тук в % в плочката.
Можете да дефинирате и други променливи с различни имена, които се отчитат при всяка актуализация или се изчисляват с помощта на формули. Ако дефинирате променливи, които започват с "CM.", например CM._set_price, зададените стойности се съхраняват в глобалните променливи на Charging Manager (вж. по-долу) и могат да бъдат търсени по съответния начин.
Променливи с *: Ако дефинирате променливи, които започват с "*", те се показват в потребителския интерфейс в плочката на измервателния уред под разширена информация, напр. температурата на акумулаторната батерия.
Забележка: Като имена на променливи могат да се използват само цифри и букви a-z и A-Z.

Определяне на променлива:


Обектът е кръстен на името на променливата, посочена по-горе, и има следните свойства: fixed: String с фиксирана стойност.
Полезно, ако например не може да се определи стойност, например за type_designation или voltage. expr: String.
Променливата не се чете, а се оценява като формула. type: Ако не е fixed или expr, типът на променливата: int16, uint16, int32, uint32, float, int64, string. Това е важно за Modbus, за да се четат регистрите в правилния формат. uint16 и uint32 са типове, които могат да приемат само положителни числа.
При JSON/HTTP обикновено можете да използвате float. резолюция: float. Прочетената стойност се умножава по 'resolution'. Стойностите за напрежението трябва да са във волтове, за тока - в милиампери, за мощността - във ватове, за енергията - във ват-часове (Wh).
С отрицателна 'резолюция' можете да обърнете стойността, ако тя има обратен знак. once: bool (true или false).
Ако е вярно, стойността се чете само веднъж при инициализиране на устройството, в противен случай се чете периодично. адрес: число (Modbus) или низ (HTTP/JSON).
Номерът на регистъра Modbus или HTTP URL адресът на стойността, която трябва да се прочете. query (запитване): Низ.
За HTTP JSON - спецификацията на езика за заявки на мениджъра за таксуване, с която той намира стойността за четене в JSON отговора. order: String (ред). За Modbus, редът на байтовете, или "hl", или "lh", в който се намира стойността. length: number. За Modbus, дължината на низ в регистри; за променливите "version" и "firmware_version", "length" се използва, за да се превърнат цифровите версии в низове с точки. Позволени са стойности от 2 или 4 за 'length', които водят до формати на версиите a.b и a.b.c.d. При 'length' 2 и тип 'int16' или 'uint16' мениджърът за зареждане отделя ниския и високия байт с точка, при 'int32' или 'uint32' ниската и високата дума, при 'int64' ниската и високата дума. За 'lenth' 4 и 'int32' или 'uint32', мениджърът за таксуване разделя стойността на 4 байта, разделени с точка.
За 'int64' съответно 4 думи. regex: String. Ако е посочен регулярен израз, не е необходимо отговорът на брояча да бъде в JSON. Като резултат се оценява или цялото съвпадение на регулярния израз, или първата група. Моля, използвайте това само ако устройството не връща JSON.

Ето списък с характеристиките на нашите регулярни изрази: any char: . named classes:



\d \s \w \D \S \W Анонимни класове: [a-z0-9_], [^0-9], [^\d] Групи с алтернативи: (ab|cd|ef) Групи, които не са уловени: (?:ab|cd) (алчен) веднъж или никак: a?, a???
(алчен) много или нищо: a*, a*?


(алчен) веднъж или повече: a+, a+? начало на низ: ^ край на низ: $

Определение на входовете:

Мениджърът за зареждане може да поиска до 32 входни стойности за всяко устройство от различни регистри или JSON елементи. Свойството "Inputs" (Входни данни) е масив JSON.
Трябва да дефинирате следните свойства за всеки вход: Address (Адрес): Адрес (регистър на Modbus или URL).
count (брой):
Брой на входните битове, които се четат с тази заявка: За HTTP/JSON, език за запитване, за да се намери стойността в отговора.

Мениджърът за таксуване на cFos чете всички дефинирани по този начин входове при всяка актуализация и съхранява битовете вътрешно в масив, който след това може да бъде заявен във формулите: Input1..InputN.

Определяне на изходите:

Мениджърът за зареждане може да превключва до 32 изхода за всяко устройство. Изходите се дефинират в "outputs" (Изходи) като JSON масив от изходни обекти. Всички изходи се превключват в края на всеки цикъл на актуализация, ако състоянието на съответния изход се е променило.

Трябва да дефинирате следните свойства в изходния обект за всеки изход: адрес: HTTP URL с незадължителен HTTP метод, например GET http://www.example.com?output1=${var1}. За задаване на регистрите Modbus можете да използвате HTTP API на мениджъра за зареждане cFos. Мениджърът за таксуване разпознава подходящите достъпи на localhost и пренасочва заявката към вътрешния манипулатор, така че не е необходима оторизация, както при външните HTTP API достъпи. Ако URL адресът е празен след всички замени, не се задава изход. Например можете да превключвате изходи само ако съществуват определени променливи (вижте формулите: функция exists()). Можете също така да посочите ${адрес} и ${id} в адреса. Това е текущият адрес на устройството и Modbus ID, както са определени в настройките.
'Адрес' и 'id' се използват главно за използване на Modbus API (вж. по-долу). body: Незадължително 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, се използва текст1, в противен случай - текст2. За гнездото Shelly WLAN URL адресът тогава изглежда така, например: 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 адрес, Charging Manager ще използва адреса, конфигуриран за съответното устройство. Ако въведете "localhost" като домейн, Charging Manager ще вземе адреса на устройството, на което е стартиран. Ако разпознае достъп до собствения си API, той използва вътрешния манипулатор, вместо да изпълни пълен HTTP достъп, така че да не се налага да въвеждате потребителско име и парола в дефиницията на брояча. URL адрес, който започва със символа "*", кара мениджъра за зареждане винаги да изпълнява пълен HTTP достъп.

Нулиране на изходите: В допълнение към масива "outputs" (Изходи) можете да дефинирате и масив, наречен "resets" (Нулиране), който е структуриран като масива "outputs" (Изходи). Това позволява изходите да бъдат нулирани до първоначалните им стойности, когато устройството е деактивирано. Това може да се използва в комбинация с дефинирани от потребителя променливи и "once": true, за да се върне устройството в първоначалното му състояние.
Периодично записване на изходите: За някои устройства изходите трябва да се записват периодично, в противен случай устройството ще възстанови стойностите им до "default" (по подразбиране). Например паметта Kostal се връща към правилата си по подразбиране, ако управлението на паметта не е било активно записвано известно време. За да задавате изходите периодично, можете да префиксирате адреса с #xxx#, където xxx показва колко секунди се презаписва изходът, дори ако стойността, която трябва да се запише, е останала същата. Например, ако адресът е /cnf?cmd=set_cm_vars&name=test&val=42, можете да използвате #30#/cnf?cmd=set_cm_vars&name=test&val=42, за да гарантирате, че тази стойност ще се записва на всеки 30 секунди.

Определяне на езика за заявки:

Понастоящем имената на членовете и операторите "." и "[]" могат да се използват в изразите за търсене "заявка", например:

тестЕлемент с име "test"
name1.name2Елемент с име "name2" в дъщерен обект "name1"
name[idx]Елемент "idx" на елемента на обекта "name". "idx" може да бъде число, напр. за масиви, или низ
name["u2"]Елемент "u2" на обектния елемент "name", съответства на "name.u2"
name[{"el1": "v1", "el2": 3}].valueИзберете елемента на масива, който отговаря на условието на обектния запис, и оценете елемента с име 'value'. Тук, например, в масива "name" се избира елементът, който има като обект елементи "el1" със стойност "v1" и "el2" със стойност 3, и след това от този обект се връща стойността на елемента "value".

Променливи на глобалния мениджър за зареждане:

Можете да създавате променливи в конфигурацията на Charging Manager. Можете да използвате фиксирана стойност или формула като стойност. В края на всеки цикъл на актуализация Charging Manager преизчислява стойността на тези променливи, ако е необходимо. След това можете да ги използвате в (определени) параметри на Charging Manager, правила за таксуване или за управление на изходите. Можете също така да запишете Ex.member или Mx.member като променлива. В този случай Exи Mxса идентификаторите на устройствата на стеновата кутия или измервателния уред, настроени в Charging Manager. 'member' е "дефинирана от потребителя" променлива, която се записва в съответното устройство. Някои от променливите могат да имат специално значение: За KEBA 'out1' е превключващ изход, за измервателните уреди ABB B23 'out1' и 'out2' са превключващи изходи (за моделите, които поддържат това). При 1 изходът се включва, а при 0 отново се изключва.

Ако имате уреди, които трябва да се включат при определени условия, но след това работят известно време (напр. пералня, съдомиялна машина), можете също да дефинирате променливата като "спусък". Тогава формулата на променливата е условието, при което променливата се настройва на 1. След определено време тя отново се настройва на 0. "Условието за повторно задействане" позволява времето до изключването (т.е. настройването на променливата на 0) да се удължава отново и отново, стига условието да е изпълнено.

Забележка: Като имена на променливи могат да се използват само цифри и букви a-z и A-Z.

За тестови цели можете да покажете променливите на мениджъра за зареждане и на електромера, например текущите цени на Awattar:


                        Екранна снимка на променливите на брояча

Глобален мениджър за зареждане Изходи:

В конфигурацията на Charging Manager можете да конфигурирате глобалните изходи, както е описано по-горе в дефиницията на брояча в раздел "Изходи". Те се задават в края на всеки цикъл на актуализация, ако състоянието им се е променило. Ако искате да управлявате превключването на изходите в устройствата, дефинирани от потребителя, се препоръчва горната конвенция (вж. Променливи на Charging Manager): Задавате променливи с имена "out1", "out2" и т.н. в брояча, дефиниран от потребителя, и задавате изходи в брояча, дефиниран от потребителя, които превключват изхода в зависимост от стойността на тези променливи.

Глобален Modbus API на мениджъра за зареждане:

Приложният програмен интерфейс Modbus на мениджъра за зареждане се използва за управление на устройства 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 поддържа следните допълнителни параметри на заявката: addr:


F unc: Номер на функцията Modbus, например за четене 3 или 4, за запис 6 или 16. id: Идентификатор на устройството Modbus. reg: Номер на регистъра Modbus.
Стойността може да бъде зададена в десетична или шестнадесетична форма (с префикс 0x). val: номер: Стойност, която да бъде записана в регистъра.
Изпуска се при четене. type: 'w' 16bit (по подразбиране), d = 32bit, f = float, q = 64bit, s = string.

c nt: число: Максималната дължина на низа в регистрите, пропуска се за други типове или се задава 1. order: низ: Редът на байтовете, или "hl", или "lh".

Забележка: Ако в "брояча" има предимно задачи за контрол, можете да поставите отметка на опцията "Скриване на устройството" в настройките на тази плочка, за да не се показва това устройство на началната страница.

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