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árban nem elérhető 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. Ezeknek a számlálóknak a definíciós fájljai nagyon hasonlóak. A Modbus számlálók bizonyos regiszterekből olvassák az adataikat Modbuson keresztül, míg a HTTP/JSON számlálók HTTP kérésen keresztül kérik le az adataikat, és válaszként JSON-ban olvassák be. 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 formájában olvassa be. A cFos Charging Manager egy kis "Query Language" nyelvet használ az olvasáshoz. Itt található a cFos Charging Manager MQTT képességeinek dokumentációja.
A felhasználó által definiált számlálók az előre definiált változók, például az áram és a feszültség mellett 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 elemzését. Az alább ismertetett Charging Manager változókkal és globális Charging Manager kimenetekkel kombinálva ez egy hatékony 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 vezérlési feladatokat valósít meg, kérjük, adjon visszajelzést. Nagyon érdekel bennünket, hogy ügyfeleink mit vezérelnek a cFos Charging Managerrel, és ez segít nekünk abban, hogy a Charging Manager-t az ügyfelek igényei szerint 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éseA számlálódefiníciók JSON-fájlok, amelyek egy globális JSON-objektumot tartalmaznak, amely tulajdonságokkal és alobjektumokkal rendelkezik. az 'rtype' határozza meg az olvasási művelet típusát: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' határozza meg az eszköz típusát: 0 = Egyéb eszköz, 1 = Mérő, 2 = Inverter, 4 = Akkumulátortároló.
A számokat decimális vagy hexa számjegyekben adhatja meg a '0x' előtaggal. Az egysoros megjegyzések a '//' használatával szintén 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.
silence_period, msec-ben: Meghatározza a Modbus RTU hozzáférés előtti szünet hosszát, hogy az eszköz felismerje az üzenet kezdetét. silence_same_slave, true: A szünet az ugyanazon eszközhöz való többszöri hozzáférés esetén is fennmarad. retries: Az újbóli próbálkozások száma, ha az eszköz nem válaszol. rcv_timeout: msec-ben: A maximális várakozási idő, amíg az eszköz válaszol, hozzáférésenként.
modbus_read:
M odbus_read_max_registers: Az egyszerre olvasható regiszterek maximális száma. modbus_allow_gaps: true = a fel nem használt regiszterterületek olvashatók egy olvasási művelet során. modbus_allow_gaps: true = a nem használt regiszterterületek olvashatók egy olvasási művelet során.
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.
upd_delay: msec-ben: Meghatározza, hogy egy eszköz milyen időközönként olvasható.
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 akkor kerülnek lekérdezésre, ha elegendő áram van. 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, amelyeket 0-ként értelmez (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 használ, amelyek a legtöbb esetben jól működnek.
A JSON definíció következő lépése azon változók definiálása, amelyeket a mérőeszköz az áram, feszültség stb. értékek leolvasására vagy kiszámítására használ.
A Charging Manager a következő változókat ismeri fel: type_designation, version, firmware_version, serial: Ezek alkotják a modell megnevezését, amint az a lapka bővített információiban 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 az értékekből próbálja kiszámítani a voltage_l1..l3, az előjeles current_l1..l3, a power_w és a 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 megadni.
Csak kétirányú mérők (például tárolók vagy hálózati referenciamérők) esetében kell meghatározni az export_wh változót. soc: Ha rendelkezésre áll, az akkumulátor-tároló töltöttségi állapota itt jelenik meg %-ban a csempén.
Más nevű változókat is definiálhat, amelyek minden frissítéskor kiolvasásra kerülnek, vagy képletek segítségével kiszámításra kerülnek. Ha olyan változókat definiál, amelyek 'CM.'-vel kezdődnek, 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 olyan változókat definiál, amelyek '*'-gal kezdődnek, akkor ezek a felhasználói felületen a mérőcsempén a bővített információk között jelennek meg, pl. az akkumulátortároló egység hőmérséklete.
Megjegyzés: Csak számok, valamint a-z és A-Z betűk használhatók változónévként.
Az objektum a fent felsorolt változó neve 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. a type_designation vagy a voltage esetében. 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, uint16, int32, uint32, float, int64, string. Ez a Modbus számára fontos, hogy a regisztereket a megfelelő formátumban olvassa ki. uint16 és uint32 olyan típusok, amelyek csak pozitív számokat fogadhatnak el.
JSON/HTTP esetén általában float-t használhat. felbontás: float. A beolvasott értéket megszorozza a 'resolution' értékkel. 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 megfordítható az érték, ha az ellenkező előjelű. once: bool (true vagy false).
Ha true, akkor az értéket csak egyszer olvassa be az eszköz inicializálásakor, egyébként periodikusan olvassa be. 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 töltéskezelő lekérdezési nyelvének azon specifikációja, amellyel a JSON-válaszban a beolvasandó értéket megtalálja. order: String. Modbus esetén a bájtsorrend, "hl" vagy "lh", amelyben az érték szerepel. length: Szám. Modbus esetében a karakterlánc hossza regiszterekben; a "version" és a "firmware_version" változók esetében a "length" arra szolgál, hogy a numerikus verziókat pontokkal ellátott karakterláncokká alakítsa. A "length" értékei 2 vagy 4 lehetnek, ami az a.b és a.b.c.d verzióformátumokat eredményezi. A 'length' 2 és az 'int16' vagy 'uint16' típus esetén a töltéskezelő az alacsony és magas bájtot ponttal, az 'int32' vagy 'uint32' esetén az alacsony és magas szót, az 'int64' esetén az alacsony és magas dwordot választja el. A 'lenth' 4 és az 'int32' vagy 'uint32' esetén a Charging Manager az értéket 4 bájtra osztja, amelyeket egy pont választ el egymástól.
'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. Eredményként vagy a reguláris kifejezés teljes egyezése, vagy az első csoport kerül kiértékelésre. Kérjük, csak akkor használja, ha az eszköz nem ad vissza JSON-t.
Itt van a szabályos kifejezések jellemzőinek listája: any char: . named classes:
\d \s \w \D \S \W 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+? karakterlánc eleje: ^ karakterlánc vége: $
A Charging Manager eszközönként legfeljebb 32 bemeneti értéket kérhet különböző regiszterekből vagy JSON-elemekből. A "Bemenetek" tulajdonság egy JSON tömb.
Minden bemenethez a következő tulajdonságokat kell megadni: Cím: Cím (Modbus regiszter vagy URL).
count:
Az ezzel a kéréssel beolvasott bemeneti bitek száma. query: 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éssel beolvassa az összes így definiált bemenetet, és a biteket belsőleg egy tömbben tárolja, amely aztán a következő képletekkel lekérdezhető: Input1..InputN.
A Charging Manager eszközönként akár 32 kimenetet is kapcsolhat. A kimenetek az "outputs" 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.
A kimeneti objektumban minden egyes kimenethez a következő tulajdonságokat kell megadni: 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 felismeri a megfelelő hozzáféréseket a localhost-on, és a kérést átirányítja a belső kezelőhöz, í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ímben megadható a ${cím} és a ${id} is. Ez az aktuális eszköz címe és Modbus azonosítója a beállításokban meghatározottak szerint.
a 'address' és az 'id' főleg a Modbus API használatához használatos (lásd alább). body: Választható HTTP test a POST vagy PUT esetén.
Az URL-ben és a testben használhat olyan képleteket, amelyek globális töltéskezelő változókra vagy az adott számlálóból a ${expr} használatával hivatkoznak. Az 'expr' formula kiértékelésre kerül a kimenet beállításakor, é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 szükség 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 előzőleg egy képlet segítségével egy változóban tárolt.
Ha numerikus érték átadása helyett az URL-ben egy szöveget kell helyettesíteni egy másikkal a képlet függvényében, pl. a Shelly WLAN aljzatokhoz, akkor ezt a következőképpen írhatja: ${if expr`text1`text2}. Az "aposztróf" egy backtick (ASCII kód 96). Ha az "expr" != 0, akkor text1-et használjuk, ellenkező esetben text2-t. A Shelly WLAN aljzat esetében az URL így néz ki, például: 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-t hívja, egyébként a http://<ip-addr>/relay/0?turn=off-ot.
Ha URL-ként relatív elérési utat ad meg, a Charging Manager az adott eszközhöz konfigurált címet használja. Ha tartományként a "localhost" értéket adja meg, a Charging Manager annak az eszköznek a címét veszi, amelyen fut. Ha felismeri a saját API-hoz való hozzáférést, akkor 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 megadni 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 lehetővé teszi, hogy a kimenetek az eszköz kikapcsolásakor visszaálljanak a kezdeti értékükre. Ez a felhasználó által definiált változókkal és az "once": true-val kombinálva használható az eszköz kezdeti állapotba való visszaállítására.
A kimenetek periodikus írása: Néhány eszköz esetében a kimeneteket periodikusan kell írni, különben az eszköz visszaállítja az értékeket "alapértelmezettre". Például a Kostal memória visszaállítja az alapértelmezett szabályokat, ha a memóriavezérlőt egy ideig nem írták aktívan. A kimenetek időszakos beállításához a cím elé #xxx#-t írhat, ahol xxx azt jelzi, hogy hány másodperc múlva í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.
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}].value | Vá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. |
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 Charging Manager szükség esetén újraszámítja e változók értékét. Ezeket aztán felhasználhatja a Charging Manager (bizonyos) paramétereiben, a díjszabályokban vagy a kimenetek vezérlésére. Az Ex.member vagy az Mx.member változóként is leírható. Ebben az esetben az Exés az Mxa Charging Managerben beállított fali doboz vagy mérőeszköz azonosítója. a 'member' egy "felhasználó által meghatározott" változó, amely a megfelelő eszközben kerül elmentésre. 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 újra 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.
Megjegyzés: Csak számok, valamint a-z és A-Z betűk használhatók változónévként.
Tesztelési célokra megjelenítheti a díjkezelő és a mérő változóit, például az aktuális Awattar-árakat:
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 beállítódnak, 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ókat): 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 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ő). Az egyes készülékek konfigurálásához hasonlóan a Modbus RTU címeként adja meg a COMx,bd,8,p,s értéket, 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). Modbus TCP esetén a addresse a Charging Manager hálózatban 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:
F unc: A Modbus funkció száma, pl. a 3. vagy 4. olvasáshoz, a 6. vagy 16. íráshoz. id: A Modbus eszköz azonosítója. reg: A Modbus regiszter száma.
Az értéket decimális vagy hexa (0x előtaggal) lehet megadni. val: number: A regiszterbe írandó érték.
Type: "w" 16 bites (alapértelmezett), d = 32 bites, f = float, q = 64 bites, s = string.
c nt: szám: A karakterlánc maximális hossza regiszterekben, más típusok esetén elhagyható vagy 1-re állítható. order: karakterlánc: 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.