Uporabniško opredeljeni števci

Opomba: Upravitelj za polnjenje cFos lahko odčitava podatke z večine solarnih pretvornikov, ki uporabljajo SunSpec (tip naprave "SunSpec Solar Inverter / Meter"). V tem primeru vam ni treba ustvariti lastne definicije števca.

Upravitelj zaračunavanja cFos omogoča ustvarjanje lastnih definicij števcev za podporo števcev, ki niso v standardnem repertoarju. Trenutno so na voljo tri vrste: Števci Modbus, števci HTTP/JSON in števci MQTT/JSON. Datoteke z definicijami za te števce so si zelo podobne. Števci Modbus berejo podatke prek Modbusa iz določenih registrov, števci HTTP/JSON pa pridobivajo podatke z zahtevo HTTP in kot odgovor razčlenijo JSON. Pri števcih MQTT/JSON se upravitelj zaračunavanja cFos naroča na teme MQTT in analizira sporočila, objavljena v okviru teme, kot JSON. Upravitelj polnjenja cFos za razčlenjevanje uporablja majhen "poizvedovalni jezik". Tukaj je dokumentacija o zmožnostih MQTT v upravitelju polnjenja cFos Charging Manager.

Poleg številnih vnaprej določenih spremenljivk, kot sta tok in napetost, lahko uporabniško definirani števci berejo tudi neznane uporabniško definirane spremenljivke, poizvedujejo po vhodih in nastavljajo izhode. Branje spremenljivk in nastavljanje izhodov omogoča vrednotenje formul. V kombinaciji s spremenljivkami Charging Manager in globalnimi izhodi Charging Manager, opisanimi v nadaljevanju, je to zmogljiva funkcija, ki omogoča celo nekatere naloge avtomatizacije doma in nadzor zunanjih naprav, kot so baterijski skladišči. Če s tem izvajate nadzorne naloge, nam sporočite povratne informacije. Zelo nas zanima, kaj ljudje nadzorujejo z upraviteljem polnjenja cFos, kar nam pomaga pri nadaljnjem razvoju upravitelja polnjenja v skladu s potrebami strank.

Tukaj je primer definicije za Modbus in primer definicije za HTTP/JSON:
Prenesite vzorec definicije za merilnik Modbus
Prenesite vzorčno opredelitev za merilnik HTTP/JSON

Charging Manager je že opremljen z nekaj takimi datotekami, vendar lahko v razdelku "Konfiguracija sistema" naložite svoje datoteke in jih tudi ponovno izbrišete.
Tu boste našli večino definicij merilnikov, ki jih ponujamo:
Prenesite priložene definicije števcev

Če ste ustvarili lastno datoteko števca in bi bila lahko pomembna za druge uporabnike, vam bomo zelo hvaležni, če nam jo boste dali na voljo. Nato jo bomo priložili prihodnjim različicam programa Charging Manager.

Prenesite definicije števcev za dodatne števce

Struktura datoteke z definicijami:

Definicije merilnikov so datoteke JSON z globalnim objektom JSON, ki ima lastnosti in podrejene objekte. 'rtype' določa vrsto operacije branja: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Številke lahko po želji navedete v desetiškem ali šestnajstiškem sistemu s predpono 0x. Poleg tega so dovoljeni enovrstični komentarji z uporabo //. Priporočamo, da svoje datoteke z definicijami preverite s validatorjem JSON5, npr. s tem validatorjem JSON5

Vsekakor morate prebrati poglavje Formule, da boste razumeli, katere vrednosti lahko uporabite v formulah v naslednjem sklicevanju.

Modbusove definicije imajo objekt 'rtu' z naslednjimi lastnostmi:

silence_period, v msec. določeno, dolžina premora pred dostopom Modbus RTU, da naprava prepozna začetek sporočila.
silence_same_slave, true: Premor se upošteva tudi pri več dostopih do iste naprave.
retries: Število ponovitev, če se naprava ne odzove.
rcv_timeout: v msec. največji čas čakanja na dostop do odgovora naprave.

Te globalne lastnosti veljajo za Modbus TCP in RTU:

modbus_read: Številka funkcije ukaza za branje Modbus, običajno 3 ali 4.
modbus_read_max_registers: Največje število registrov, ki se lahko berejo naenkrat.
modbus_allow_gaps: true = Pri operaciji branja se lahko berejo neuporabljena območja registrov.

Za Modbus TCP in HTTP/JSON obstaja objekt 'tcp' z naslednjimi lastnostmi:

connect_timeout: je msec. najdaljši čas čakanja na povezavo TCP.
delay_after_connect: v msec. Po vzpostavitvi povezave pred pošiljanjem prvega ukaza naredite premor.

Obe vrsti definicij (Modbus in HTTP/JSON) imata naslednje dodatne lastnosti:

upd_delay: v msec. določa interval, v katerem se lahko naprava bere. Nekatere naprave so preobremenjene, če se po njih poizveduje prepogosto.
manufacturer: String, ime proizvajalca. To je prikazano v razširjenih informacijah ploščice.
delay_accumulated: true = Po nakopičenih vrednostih (kWh) se poizveduje samo vsake 3 sekunde ali če je dovolj energije. false = Te vrednosti se poizvedujejo vedno.
ui_addr: URL, če se razlikuje od naslova naprave za priklic spletnega vmesnika.
reserved: Polje z vrednostmi, ki se interpretirajo kot 0 (uporabno, če naprava glede na model podpira določene vrednosti).

Če zgoraj navedene lastnosti izpustite, upravitelj polnjenja cFos prevzame privzete vrednosti, ki v večini primerov delujejo dobro.

V definiciji JSON je naslednji korak opredelitev spremenljivk, ki jih števec uporablja za branje ali izračunavanje vrednosti za tok, napetost itd. Naslednje spremenljivke uporablja Charging Manager. Charging Manager pozna naslednje spremenljivke:
type_designation, version, firmware_version, serial: Te tvorijo ime modela, kot je prikazano v razširjenih informacijah ploščice. Po njih se poizveduje enkrat pri nastavitvi ali ponastavitvi merilnika.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: Upravitelj polnjenja cFos poskuša iz teh izračunati vrednosti za napetost_l1..l3, podpisani tok_l1..l3, moč_w in moč_va. Ni treba navesti vseh spremenljivk. Upravitelj polnjenja cFos poskuša izračunati vrednosti iz obstoječih spremenljivk.
import_wh, export_wh: Upravitelj polnjenja uporabi ti spremenljivki za izračun import_wh in export_wh. Ni treba navesti vseh spremenljivk. Upravitelj polnjenja cFos poskuša izračunati vrednosti iz obstoječih spremenljivk.

Poleg tega lahko določite dodatne spremenljivke z drugačnim imenom, ki se ob vsaki posodobitvi odčitajo ali izračunajo z uporabo formul.

Opredelitev spremenljivke:

Objekt je poimenovan po zgoraj navedeni spremenljivki in ima naslednje lastnosti:
fixed: String s fiksno vrednostjo. Uporabno, če na primer ni mogoče določiti vrednosti, npr. za tip_oznaka ali napetost.
expr: Niz, spremenljivka se ne prebere, ampak se ovrednoti kot formula.
type: Če ni fiksna ali expr, tip spremenljivke: int16, int32, float, int64, string. To je pomembno za Modbus, da se registri odčitajo v pravilni obliki. Za JSON/HTTP lahko običajno uporabite float.
resolucija: float, prebrana vrednost se pomnoži z 'resolucija'. Vrednosti napetosti morajo biti v voltih, tokovi v miliamperih, moč v vatih, energija v vatnih urah (Wh). Negativna "resolucija" omogoča inverzijo vrednosti, če je ta nasprotnega predznaka.
naslov: številka (Modbus) ali niz (HTTP/JSON), številka registra Modbus ali URL HTTP vrednosti, ki jo je treba prebrati.
poizvedba: String, za HTTP JSON specifikacija v poizvedovalnem jeziku Charging Managerja, s katerim najde vrednost, ki jo je treba prebrati v odgovoru JSON.
order: String, za Modbus vrstni red bajtov, bodisi "hl" ali "lh", v katerem je vrednost prisotna. length: number, za Modbus dolžina niza v registrih. Pri spremenljivkah 'version' in 'firmware_version' se 'length' uporablja za pretvorbo številčnih različic v nize s pikami. Za 'length' sta dovoljeni vrednosti 2 ali 4, kar pomeni, da sta različici a.b in a.b.c.d. Pri 'dolžini' 2 in vrsti 'int16' upravitelj polnjenja ločuje nizki in visoki bajt s piko, pri int32 nizko in visoko besedo, pri 'int64' pa nizko in visoko besedo. Za 'lenth' 4 in 'int32' upravitelj polnjenja razdeli vrednost na 4 bajte, ločene s piko. Za 'int64' so 4 besede ustrezne.

Opredelitev vnosov:

Upravitelj polnjenja lahko poizveduje po do 32 vhodnih vrednostih iz različnih registrov ali elementov JSON na napravo. Lastnost "Vnosi" je polje JSON. Za vsak vhod morate opredeliti naslednje lastnosti:
naslov: Naslov (register Modbus ali URL).
štetje: Število vhodnih bitov, ki bodo prebrani s to zahtevo.
query: Za HTTP/JSON poizvedovalni jezik za iskanje vrednosti v odgovoru.

Upravitelj zaračunavanja cFos prebere vse tako opredeljene vhode ob vsaki posodobitvi in bite interno postavi v polje, po katerem lahko nato poizvedujete v formulah, Input1..InputN..

Opredelitev izhodov:

Upravitelj polnjenja lahko preklopi do 32 izhodov na enoto. Vsi izhodi se preklopijo na koncu vsakega cikla posodabljanja, če se je stanje posameznega izhoda spremenilo.
Za vsak vnos morate določiti naslednje lastnosti:
naslov: URL HTTP z neobvezno metodo HTTP, npr. GET http://www.example.com?output1=${var1}. Za nastavitev registrov Modbus lahko uporabite vmesnik API HTTP upravitelja cFos Charging Manager. Upravitelj zaračunavanja zazna ujemajoče se dostope na lokalnem gostitelju in zahtevo preusmeri na notranji upravitelj, zato ne potrebujete avtorizacije kot pri zunanjih dostopih do API HTTP.
body: Neobvezno telo HTTP za POST ali PUT.
V naslovu URL in telesu lahko uporabite formule ${expr}, ki se sklicujejo na globalne spremenljivke upravitelja polnjenja ali na ustrezne števce. Formula 'expr' se ovrednoti pri nastavljanju izpisa in se nadomesti v besedilu URL ali telesu. Če v zgornjem primeru http://www.example.com?output1=1 nastavi izhod, http://www.example.com?output1=0 pa ga izbriše, lahko določite spremenljivko 'var1' in jo po želji nastavite na 1 ali 0. Na ta način lahko v registre Modbus zapišete tudi številčne vrednosti za nadzor zmogljivosti pomnilnika, ki ste jih predhodno shranili v spremenljivko z uporabo formule.
Če morate namesto številčne vrednosti v naslovu URL zamenjati eno besedilo z drugim glede na formulo, na primer pri vtičnicah Shelly WLAN, jo lahko zapišete takole: ${if expr`text1`text2}. Apostrof je oznaka za nazaj (koda ASCII 96). Če je 'expr' != 0, se vstavi besedilo1, sicer besedilo2. Za vtičnico Shelly WLAN je URL potem videti takole: http://<ip-addr>/relay/0?turn=${if expr`on`off}, tj. če expr != 0, upravitelj polnjenja pokliče http://<ip-addr>/relay/0?turn=on, sicer http://<ip-addr>/relay/0?turn=off.

Če kot naslov URL vnesete relativno pot, upravitelj polnjenja prevzame naslov, konfiguriran za zadevno napravo. Če kot domeno vnesete "localhost", upravitelj polnjenja prevzame naslov naprave, v kateri deluje. Če zazna dostop do lastnega vmesnika API, namesto popolnega dostopa HTTP uporabi notranji upravljalnik, tako da vam v definicijo števca ni treba shraniti uporabniškega imena in gesla. URL, ki se začne z *, povzroči, da upravitelj polnjenja vedno izvede popoln dostop HTTP.

Opredelitev poizvedbe langage:

Trenutno lahko v iskalnih izrazih "poizvedba" uporabljate imena članov ter operatorja "." in "[]", na primer:

testElement z imenom "test"
ime1.ime2Element z imenom "name2" v podrejenem objektu "name1"
name[idx]Element "idx" elementa objekta "name". "idx" je lahko število, npr. za polja, ali niz
ime["u2"]Element "u2" elementa objekta "name", ustreza "name.u2"
name[{"el1": "v1", "el2": 3}].valueIzberite element polja, ki izpolnjuje pogoj objektnega zapisa, in ovrednotite element z imenom 'value'. Tu se na primer v polju "name" izbere element, ki ima kot objektna elementa "el1" z vrednostjo "v1" in "el2" z vrednostjo 3, nato pa se iz tega objekta vrne vrednost elementa "value".

Spremenljivke globalnega upravitelja polnjenja:

Spremenljivke lahko ustvarite v konfiguraciji upravitelja polnjenja. Kot vrednost lahko uporabite fiksno vrednost ali formulo. Ob koncu vsakega cikla posodabljanja upravitelj polnjenja po potrebi ponovno izračuna vrednost teh spremenljivk. Nato jih lahko uporabite v (nekaterih) parametrih upravitelja polnjenja, pravilih polnjenja ali za nadzor izhodov. Kot spremenljivke lahko zapišete tudi Ex.member ali Mx.member. V tem primeru sta Exin MxID naprave stenske omarice ali števca, nastavljenega v Charging Managerju. member je "uporabniško določena" spremenljivka, ki je shranjena v ustrezni napravi. Nekatere spremenljivke imajo lahko poseben pomen: Pri merilnikih KEBA je "out1" stikalni izhod, pri merilnikih ABB B23 pa sta "out1" in "out2" stikalna izhoda (pri modelih, ki to podpirajo). 1 preklopi izhod, 0 ga ponovno izklopi.

Globalni upravitelj polnjenja Izhodi:

V konfiguraciji Charging Managerja lahko konfigurirate globalne izhode, kot je opisano zgoraj v opredelitvi števca v razdelku "Izhodi". Če se njihovo stanje spremeni, se nastavijo na koncu vsakega cikla posodabljanja. Če želite krmiliti preklopne izhode v uporabniško definiranih napravah, je priporočljiva zgornja konvencija (glejte Spremenljivke upravitelja polnjenja): V uporabniško definiranem števcu nastavite spremenljivke z imeni "out1", "out2" itd. in v uporabniško definiranem števcu nastavite izhode, ki preklapljajo izhod glede na vrednost teh spremenljivk.

Globalni programski vmesnik Modbus upravitelja polnjenja:

Modbus API Charging Managerja se uporablja za nadzor naprav Modbus, ki imajo katerikoli naslov Modbus RTU ali TCP (dostopen iz Charging Managerja). Za Modbus RTU kot naslov vnesite COMx,bd,8,p,s, kjer je x številka vrat COM, bd je hitrost prenosa, p je pariteta ("N", "E" ali "O") in s je število stop bitov (1 ali 2), kot je določeno v konfiguraciji posameznih naprav. Za Modbus TCP je naslovnik naslov IP naprave v omrežju Charging Managerja, vključno s številko vrat.
URL (za HTTP GET) vmesnika Modbus API je:
/cnf?cmd=modbus_get ali /cnf?cmd=modbus_set
Upravitelj polnjenja cFos podpira naslednje dodatne parametre poizvedbe:
addr: Zgoraj navedeni naslov naprave Modbus RTU ali TCP.
func: Številka funkcije Modbus, npr. za branje 3 ali 4, za pisanje 6 ali 16.
id: ID naprave Modbus.
reg: Številka registra Modbus. Vrednost je lahko podana v desetiškem ali šestnajstiškem sistemu (s predpono 0x).
val: število, vrednost, ki jo je treba zapisati v register. Pri branju izpustite.
tip:'w' 16bit (privzeto), d = 32bit, f = float, q = 64bit, s = string.
cnt: število, največja dolžina niza v registrih, za druge vrste izpustite ali nastavite na 1.
order: niz, vrstni red bajtov, bodisi "hl" ali "lh".

Opomba: Če ima vaš števec predvsem kontrolne naloge, lahko v nastavitvah te ploščice označite možnost "Skrij napravo", tako da ta naprava ne bo prikazana na začetni strani.

Opomba: Pri nekaterih števcih, ki se odčitavajo prek protokola HTTP, je za avtorizacijo potrebno uporabniško ime/geslo. To lahko navedete v naslovu za dostop HTTP, npr. s http://username:password@192.168.2.111. Če vaše uporabniško ime ali geslo vsebuje "@", ga morate nadomestiti z "%40".