Dokumentáció

Felhasználó által meghatározott számlálók

Megjegyzés: A cFos Charging Manager a legtöbb napelemes invertert ki tudja olvasni a SunSpec segítségével (eszköztípus "SunSpec Solar Inverter / Meter"). Ebben az esetben nem kell saját mérődefiníciót létrehoznia.

A cFos Charging Manager lehetővé teszi, hogy saját mérődefiníciókat hozzon létre a szabványos repertoáron nem szereplő mérők támogatására. Jelenleg három típus létezik: Modbus számlálók, HTTP/JSON számlálók és MQTT/JSON számlálók. A számlálók definíciós fájljai nagyon hasonlóak. A Modbus számlálók Modbuson keresztül olvassák az adataikat bizonyos regiszterekből, míg a HTTP/JSON számlálók HTTP-kérésen keresztül hívják le az adataikat, és válaszként JSON-t elemeznek. Az MQTT/JSON számlálók esetében a cFos Charging Manager feliratkozik az MQTT-témákra, és a téma alatt közzétett üzeneteket JSON-ként elemzi. A cFos Charging Manager az elemzéshez egy kis "lekérdezési nyelvet" használ. Itt található a cFos Charging Manager MQTT képességeinek dokumentációja.

Számos előre meghatározott változó, például áram és feszültség mellett a felhasználó által definiált számlálók ismeretlen, felhasználó által definiált változókat is beolvashatnak, bemeneteket kérdezhetnek le és kimeneteket állíthatnak be. A változók beolvasása és a kimenetek beállítása lehetővé teszi a képletek kiértékelését. Az alábbiakban ismertetett Charging Manager változókkal és globális Charging Manager kimenetekkel kombinálva ez egy nagy teljesítményű funkció, amely még bizonyos otthoni automatizálási feladatokat és külső eszközök, például akkumulátortárolók vezérlését is lehetővé teszi. Ha ezzel kapcsolatos ellenőrzési feladatokat valósít meg, kérjük, adjon visszajelzést. Nagyon érdekel bennünket, hogy az emberek mit ellenőriznek a cFos Charging Managerrel, és ez segít nekünk abban, hogy a Charging Manager-t az ügyfelek igényeinek megfelelően továbbfejlesszük.

Íme egy egyszerű példa a Modbus definíciójára, amely egyetlen regisztert olvas ki az aktív teljesítményre vonatkozóan. A regiszterszámot könnyen módosíthatja az adott alkalmazáshoz:
Példa egy regiszter definíciójára.

Íme egy példa a Modbus és egy a HTTP/JSON definíciójára:
Minta definíció letöltése Modbus mérőhöz
A HTTP/JSON mérő definíciójának mintája letöltése

A Charging Manager már tartalmaz néhány ilyen fájlt, de a "Rendszerkonfiguráció" alatt feltöltheti saját fájljait, és újra törölheti őket.
Itt találja a legtöbb általunk biztosított mérőeszköz-definíciót:
A mellékelt számláló meghatározások letöltése

Ha Ön saját számlálófájlt hozott létre, és az más felhasználók számára is hasznos lehet, nagyon hálásak lennénk, ha elérhetővé tenné számunkra. Akkor a Charging Manager jövőbeli verzióival együtt fogjuk szállítani.

További mérőműszerekhez tartozó mérőműszer-definíciók letöltése

Egy definíciós fájl felépítése:

A mérődefiníciók JSON-fájlok, amelyek egy globális JSON-objektummal rendelkeznek, amely tulajdonságokkal és gyermekobjektumokkal rendelkezik. 'rtype' határozza meg az olvasási művelet típusát: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. A számokat opcionálisan decimális vagy hexa számjegyben is meg lehet adni 0x előtaggal. Ezen kívül a // egysoros megjegyzések is megengedettek. Javasoljuk, hogy a definíciós fájlokat futtassa át egy JSON5 validátoron, például ezen a JSON5 validátoron

Mindenképpen el kell olvasnia a Formulák fejezetet, hogy megértse, milyen értékek használhatók a képletekben a következő hivatkozásban.

A Modbus definícióknak van egy 'rtu' objektuma a következő tulajdonságokkal:

silence_period, msec. meghatározva, a Modbus RTU hozzáférés előtti szünet hossza, hogy az eszköz felismerje az üzenet kezdetét.
silence_same_slave, true: A szünet több, ugyanahhoz az eszközhöz való hozzáférés esetén is megfigyelhető.
retries: Az újrapróbálkozások száma, ha az eszköz nem válaszol.
rcv_timeout: msec. a maximális várakozási idő hozzáférésenként, amíg az eszköz válaszol.

Ezek a globális tulajdonságok a Modbus TCP és az RTU esetében érvényesek:

modbus_read: A Modbus olvasási parancs funkciószáma, általában 3 vagy 4.
modbus_read_max_registers: Az egyszerre olvasható regiszterek maximális száma.
modbus_allow_gaps: true = A nem használt regiszterterületek olvashatók egy olvasási műveletben.

A Modbus TCP és a HTTP/JSON esetében létezik egy 'tcp' objektum a következő tulajdonságokkal:

connect_timeout: msec. a TCP-kapcsolat maximális várakozási ideje.
delay_after_connect: msec. Szünet a kapcsolat létrehozása után az első parancs elküldése előtt.

Mindkét definíciós típus (Modbus és HTTP/JSON) a következő további tulajdonságokkal rendelkezik:

upd_delay: msec-ben határozza meg azt az intervallumot, amely alatt egy eszköz kiolvasható. Egyes eszközök túlterhelődnek, ha túl gyakran lekérdezik őket.
manufacturer: String, a gyártó neve. Ez a csempe bővített információiban jelenik meg.
delay_accumulated: true = A felhalmozott értékek (kWh) csak 3 másodpercenként vagy elegendő energia esetén kerülnek lekérdezésre. false = Ezek az értékek mindig lekérdezésre kerülnek.
ui_addr: URL, ha eltér a készülék címétől a webes felület hívásához.
reserved: Tömb olyan értékekkel, amelyek 0-ként értelmezhetők (hasznos, ha a készülék a modelltől függően bizonyos értékeket támogat).

Ha elhagyja a fent felsorolt tulajdonságokat, a cFos Charging Manager alapértelmezett értékeket vesz fel, amelyek a legtöbb esetben jól működnek.

A JSON definícióban a következő lépés azon változók definiálása, amelyeket a mérőeszköz az áram, feszültség stb. értékek leolvasásához vagy kiszámításához használ. A következő változókat használja a Charging Manager. A Charging Manager a következő változókat ismeri:
type_designation, version, firmware_version, serial: Ezek alkotják a modell nevét, amint az a lapka bővített információjában látható. Ezeket egyszer kell lekérdezni a mérő beállításakor vagy visszaállításakor.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: A cFos Charging Manager ezekből próbálja kiszámítani a voltage_l1..l3, az előjeles current_l1..l3, power_w és power_va értékeket. Nem kell minden változót megadni. A cFos Charging Manager a meglévő változókból próbálja kiszámítani az értékeket.
import_wh, export_wh: A Charging Manager ezeket a változókat használja az import_wh és az export_wh megjelenítéséhez. Egyirányú mérők (pl. inverterek) esetén mindig csak az import_wh változót kell definiálni. Az export_wh-t csak kétirányú mérők (például tárolótartályok vagy hálózati referencia mérők) esetében kell definiálni.

soc: Ha rendelkezésre áll, az akkumulátortároló tartály töltöttségi állapota %-ban jelenik meg a csempén.
Ezen kívül más nevű változókat is definiálhat, amelyek minden egyes frissítéskor kiolvasásra kerülnek, vagy képletek segítségével kiszámításra kerülnek. Ha CM. kezdetű változókat definiál, pl. CM._set_price, a hozzárendelt értékek a globális Charging Manager változókban (lásd alább) tárolódnak, és ennek megfelelően lekérdezhetők.
A *: Ha *-gal kezdődő változókat definiál, akkor azok a felhasználói felületen a mérő csempéjén, a bővített információk alatt jelennek meg, pl. az akkumulátortároló hőmérséklete.

Egy változó meghatározása:

Az objektum a fent felsorolt változó után kapja a nevét, és a következő tulajdonságokkal rendelkezik:
fixed: String fix értékkel. Hasznos, ha például nem lehet értéket meghatározni, pl. type_designation vagy voltage esetén.
expr: String, a változót nem olvassa ki, hanem képletként kiértékeli.
type: Ha nem fixed vagy expr, akkor a változó típusa: int16, int32, float, int64, string. Ez a Modbus számára fontos, hogy a regisztereket a megfelelő formátumban olvassa ki. JSON/HTTP esetén általában float.
resolution: float, a beolvasott értéket megszorozzuk a 'resolution'-vel. A feszültség értékeinek voltban, az áramoknak milliamperben, a teljesítménynek wattban, az energiának wattórában (Wh) kell lennie. Negatív 'resolution' esetén az értéket megfordíthatja, ha az ellenkező előjelű.
once: bool (true vagy false), ha true, az értéket csak egyszer olvassa ki az eszköz inicializálásakor, egyébként periodikusan.
address: szám (Modbus) vagy string (HTTP/JSON), a kiolvasandó érték Modbus regiszterszáma vagy HTTP URL címe.
query: String, HTTP JSON esetén a Charging Manager lekérdezési nyelvének specifikációja, amellyel a JSON-válaszban megtalálja a kiolvasandó értéket.
order: String, Modbus esetén a bájtsorrend, "hl" vagy "lh", amelyben az érték szerepel. length: szám, Modbus esetén a karakterlánc hossza regiszterekben. A "version" és a "firmware_version" változókkal a "length" a numerikus verziók pontokkal ellátott karakterláncokká alakítására szolgál. A "length" értékek 2 vagy 4 értéket vehetnek fel, ami az a.b és a.b.c.d verzióformátumokat eredményezi. A 'length' 2 és az 'int16' típus esetén a töltéskezelő az alacsony és magas byte-ot ponttal, az int32 esetén az alacsony és magas word-et, az 'int64' esetén az alacsony és magas dword-et pontokkal választja el. A 'lenth' 4 és az 'int32' típus esetében a Charging Manager az értéket ponttal elválasztott 4 bájtra bontja. 'int64' esetén a 4 szót ennek megfelelően.
regex: String. Ha egy reguláris kifejezés van megadva, a számláló válaszának nem kell JSON-ban lennie. Ennek eredményeképpen vagy a reguláris kifejezés teljes egyezése, vagy az első csoport kerül kiértékelésre. Csak akkor használja, ha az eszköz nem ad vissza JSON-t. Íme a reguláris kifejezések jellemzőinek listája:
any char: .
named classes: \
névtelen osztályok: [a-z0-9_], [^0-9], [^\d]
csoportok alternatívákkal: (ab|cd|ef)
nem megragadott csoportok: (?:ab|cd)
(mohó) egyszer vagy egyszer sem: a?, a?????
(mohó ) sok vagy semmi: a*, a*?
(mohó) egyszer vagy többször: a+, a+?
string kezdete: ^
string vége: $

A bemenetek meghatározása:

A Charging Manager eszközönként legfeljebb 32 bemeneti értéket tud lekérdezni különböző regiszterekből vagy JSON-elemekből. Az "Inputs" tulajdonság egy JSON tömb. Minden bemenethez a következő tulajdonságokat kell megadni:
cím: Cím (Modbus regiszter vagy URL).
számolj: Az ezzel a kéréssel olvasandó bemeneti bitek száma.
lekérdezés: HTTP/JSON esetén a lekérdezési nyelv a válaszban lévő érték megkereséséhez.

A cFos Charging Manager minden egyes frissítéskor beolvassa az összes így definiált bemenetet, és a biteket belsőleg egy tömbben helyezi el, amelyet aztán a képletekben Input1..InputN...

A kimenetek meghatározása:

A Charging Manager eszközönként akár 32 kimenetet is kapcsolhat. A kimenetek a "kimenetek" menüpontban vannak definiálva, mint kimeneti objektumok JSON tömbje. Minden kimenet minden egyes frissítési ciklus végén átkapcsolásra kerül, ha az adott kimenet állapota megváltozott.
Minden egyes kimenethez a következő tulajdonságokat kell megadni a kimeneti objektumban:
cím: HTTP URL-cím, opcionális HTTP-módszerrel, pl. GET http://www.example.com?output1=${var1}. A Modbus regiszterek beállításához a cFos Charging Manager HTTP API-ját használhatja. A Charging Manager érzékeli a localhost-on történő megfelelő hozzáféréseket, és a kérést a belső kezelőhöz irányítja át, így nincs szükség engedélyezésre, mint a külső HTTP API-hozzáféréseknél. Ha az URL az összes csere után üres, a rendszer nem állít be kimenetet. A kimenetek például csak akkor válthatók, ha bizonyos változók léteznek (lásd a képletek: exists() függvényt). A címen kívül megadható még ${address} és ${id} is. Ez a beállításokban meghatározott aktuális eszközcím és Modbus ID. A címet és az id-t elsősorban a Modbus API használatához használják (lásd alább).
body: Választható HTTP test a POST vagy PUT esetén.
Az URL-ben és a testben használhat olyan ${expr} képleteket, amelyek globális Charging Manager változókra vagy a megfelelő számlálóból hivatkoznak. Az 'expr' formula a kimenet beállításakor kiértékelésre kerül, és az URL vagy a body szövegében helyettesíthető. Ha a fenti példában a http://www.example.com?output1=1 beállítja a kimenetet, a http://www.example.com?output1=0 pedig törli azt, akkor definiálhat egy 'var1' változót, és tetszés szerint 1-re vagy 0-ra állíthatja. Ily módon numerikus értékeket is írhat a Modbus regiszterek memóriateljesítményének vezérlésére, amelyeket korábban egy képlet segítségével egy változóban tárolt.
Ha az URL-ben numerikus érték átadása helyett egy szöveget kell helyettesíteni egy másikkal a képlet függvényében, mint például a Shelly WLAN aljzatoknál, akkor ezt így írhatja: ${if expr`text1`text2}. Az 'aposztróf' egy backtick (96-os ASCII-kód). Ha az 'expr' != 0, akkor a szöveg1 kerül beillesztésre, ellenkező esetben a szöveg2. A Shelly WLAN aljzat esetében az URL így néz ki: http://<ip-addr>/relay/0?turn=${if expr`on`off}, azaz ha az expr != 0, akkor a Charging Manager a http://<ip-addr>/relay/0?turn=on, egyébként a http://<ip-addr>/relay/0?turn=off címet hívja.

Ha URL-ként relatív elérési utat ad meg, a Charging Manager az adott eszközhöz konfigurált címet veszi át. Ha tartományként a "localhost" értéket adja meg, a Charging Manager annak az eszköznek a címét veszi át, amelyen fut. Ha a saját API-hoz való hozzáférést észlel, a teljes HTTP-hozzáférés végrehajtása helyett a belső kezelőt használja, így nem kell felhasználónevet és jelszót tárolnia a számláló definíciójában. A *-gal kezdődő URL-címek esetén a díjkezelő mindig teljes HTTP-hozzáférést hajt végre.

Kimenetek visszaállítása: A "kimenetek" tömb mellett definiálhat egy "resets" nevű tömböt is, amely a "kimenetek" tömbhöz hasonlóan van felépítve. Ez arra használható, hogy a kimeneteket a kezdeti értékükre állítsa vissza, amikor a készüléket kikapcsolják. Ezzel, a felhasználó által definiált változókkal és a "once": true-val kombinálva, visszaállíthatja a készüléket a kezdeti állapotába.
A kimenetek időszakos írása: Egyes készülékek esetében a kimeneteket periodikusan kell írni, különben a készülék visszaállítja az értékeket "alapértelmezettre". Például a Kostal memória újra az alapértelmezett szabályokat használja, ha a memóriavezérlő egy ideig nem írt aktívan. A kimenetek periodikus beállításához a cím elé #xxx#-t írhat, ahol xxx jelzi, hogy hány másodpercenként íródik újra a kimenet, még akkor is, ha a kiírandó érték változatlan maradt. Ha például a cím /cnf?cmd=set_cm_vars&name=test&val=42, akkor a #30#/cnf?cmd=set_cm_vars&name=test&val=42 használatával biztosíthatja, hogy ez az érték 30 másodpercenként kiírásra kerüljön.

A query langage meghatározása:

Jelenleg a tagnevek és a "." és "[]" operátorok használhatók a "lekérdezés" keresési kifejezésekben, példák:

teszt"test" nevű elem
név1.név2"name2" nevű elem a "name1" gyermekobjektumban
name[idx]A "name" objektumelem "idx" eleme. az "idx" lehet szám, pl. tömbök esetében, vagy egy karakterlánc
name["u2"]A "név" objektumelem "u2" eleme, megfelel a "név.u2"-nek
name[{"el1": "v1", "el2": 3}].valueVálassza ki azt a tömbelemet, amely megfelel az objektum jelölés feltételének, és értékelje ki az "érték" nevű elemet. Itt például a 'név' tömbben kiválasztjuk azt az elemet, amelynek objektumelemeként az 'el1' 'v1' értékű és az 'el2' '3' értékű elemei vannak, majd ebből az objektumból az 'érték' elem értékét kapjuk vissza.

Globális töltéskezelő változók:

A Charging Manager konfigurációban létrehozhat változókat. Értékként használhat fix értéket vagy képletet. Az egyes frissítési ciklusok végén a Díjszámításkezelő szükség esetén újraszámítja e változók értékét. Ezeket aztán felhasználhatja (bizonyos) Charging Manager paraméterekben, Charging Rules-ban vagy a kimenetek vezérlésére. Az Ex.member vagy Mx.member változónak is írható. Itt Exés Mxa töltéskezelőben beállított fali doboz vagy mérőeszköz azonosítója. member egy "felhasználó által meghatározott" változó, amely a megfelelő eszközben van tárolva. Néhány változónak különleges jelentése lehet: A KEBA esetében az "out1" egy kapcsoló kimenet, az ABB B23 mérők esetében az "out1" és "out2" kapcsoló kimenetek (az ezt támogató modellek esetében). Egy 1 kapcsolja a kimenetet, egy 0 pedig ismét kikapcsolja.

Ha vannak olyan készülékei, amelyeket bizonyos feltételek mellett be kell kapcsolni, de aztán egy ideig futnak (pl. mosógép, mosogatógép), akkor a változót "trigger"-ként is definiálhatja. Ekkor a változó képlete az a feltétel, amellyel a változó 1-re áll. Egy beállítható idő elteltével aztán ismét 0-ra áll. Az "újraindítási feltétel" lehetővé teszi, hogy a kikapcsolásig (azaz a változó 0-ra állításáig) eltelt idő újra és újra meghosszabbítható legyen, amíg a feltétel teljesül.

Tesztelési célokra megjelenítheti a Charging Manager és a mérő változóit, például az aktuális Awattar-árakat:


                        A számlálóváltozók képernyőképes megjelenítése

Globális töltéskezelő kimenetek:

A Charging Manager konfigurációjában a globális kimeneteket a fentiekben a számláló meghatározásánál a "Kimenetek" alatt leírtak szerint konfigurálhatja. Ezek minden egyes frissítési ciklus végén kerülnek beállításra, ha állapotuk megváltozott. Ha a felhasználó által definiált eszközökben a kapcsoló kimeneteket kívánja vezérelni, akkor a fenti konvenció ajánlott (lásd a Charging Manager változói): A felhasználó által definiált számlálóban "out1", "out2" stb. nevű változókat állít be, és a felhasználó által definiált számlálóban olyan kimeneteket állít be, amelyek e változók értékétől függően kapcsolják a kimenetet.

A töltéskezelő globális Modbus API-ja:

A Charging Manager Modbus API-ja olyan Modbus eszközök vezérlésére szolgál, amelyek bármely Modbus RTU vagy TCP címmel rendelkeznek (a Charging Managerből elérhető). Modbus RTU esetén adja meg a COMx,bd,8,p,s címet, ahol x a COM port száma, bd a baud rate, p a paritás ('N', 'E' vagy 'O') és s a stop bitek száma (1 vagy 2), az egyes eszközök konfigurációjának megfelelően. A Modbus TCP esetében a címzett a Charging Manager hálózatában lévő eszköz IP-címe, beleértve a portszámot is.
A Modbus API URL címe (HTTP GET esetén):
/cnf?cmd=modbus_get vagy /cnf?cmd=modbus_set
A cFos Charging Manager a következő további lekérdezési paramétereket támogatja:
addr: A fent említett Modbus RTU vagy TCP eszközcím.
func: Modbus funkció száma, pl. a 3 vagy 4 olvasásához, a 6 vagy 16 írásához.
id: A Modbus eszköz eszközazonosítója.
reg: A Modbus regiszter száma. Az érték megadható decimális vagy hexa (0x előtaggal).
val: szám, a regiszterbe írandó érték. Olvasáskor elhagyható.
típus: 'w' 16 bites (alapértelmezett), d = 32 bites, f = float, q = 64 bites, s = string.
cnt: szám, a karakterlánc maximális hossza regiszterekben, más típusok esetén elhagyható vagy 1-re állítható.
order: String, a bájtsorrend, "hl" vagy "lh".

Megjegyzés: Ha a "számláló" elsősorban vezérlési feladatokat tartalmaz, akkor a csempe beállításaiban bejelölheti az "Eszköz elrejtése" opciót, így ez az eszköz nem jelenik meg a kezdőlapon.

Megjegyzés: Néhány, HTTP-n keresztül leolvasott mérőeszköz engedélyezéséhez felhasználónév/jelszó szükséges. Ezt a HTTP-hozzáférés címében adhatja meg, például a http://username:password@192.168.2.111 címmel. Ha a felhasználóneve vagy jelszava "@" betűt tartalmaz, akkor azt "%40"-re kell cserélnie.