Dokumentacija

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 preprost primer definicije za Modbus, ki bere en sam register za aktivno moč. Številko registra lahko preprosto spremenite za svojo posebno aplikacijo:
Primer definicije za en sam register.

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 je mogoče prebrati napravo. 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 le vsake 3 sekunde ali če je dovolj energije. false = po teh vrednostih se poizveduje vedno.
ui_addr: URL, če se razlikuje od naslova naprave za klicanje spletnega vmesnika.
reserved: Polje z vrednostmi, ki se interpretirajo kot 0 (uporabno, če naprava podpira določene vrednosti glede na model).

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

V definiciji JSON je naslednji korak opredelitev spremenljivk, ki jih merilnik uporablja za branje ali izračunavanje vrednosti za tok, napetost itd. Naslednje spremenljivke uporablja upravitelj polnjenja. 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 njih izračunati vrednosti za napetost_l1..l3, podpisani tok_l1..l3, power_w in power_va. Ni treba navesti vseh spremenljivk. Program cFos Charging Manager poskuša izračunati vrednosti iz obstoječih spremenljivk.
import_wh, export_wh: Program Charging Manager uporabi ti spremenljivki za prikaz import_wh in export_wh. Za enosmerne števce (npr. inverterje) morate vedno opredeliti samo import_wh. Export_wh je treba opredeliti samo za dvosmerne števce (kot so rezervoarji za shranjevanje ali števci za referenčno omrežje).

soc: Če je na voljo, se v ploščici prikaže stanje napolnjenosti rezervoarja za shranjevanje baterije v %.
Poleg tega lahko opredelite druge spremenljivke z različnimi imeni, ki se odčitavajo pri vsaki posodobitvi ali se izračunajo z uporabo formul. Če določite spremenljivke, ki se začnejo s CM., npr. CM._set_price, se dodeljene vrednosti shranijo v globalne spremenljivke Charging Manager (glejte spodaj) in jih lahko ustrezno poizvedujete.
Spremenljivke z *: Če določite spremenljivke, ki se začnejo z *, se v uporabniškem vmesniku prikažejo v ploščici števca pod razširjenimi informacijami, npr. temperatura skladišča baterije.

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 fixed ali expr, tip spremenljivke: int16, int32, float, int64, string. To je pomembno za Modbus, da se registri preberejo v pravilni obliki. Za JSON/HTTP lahko običajno vzamete float.
resolucija: float, prebrana vrednost se pomnoži z "resolucijo". Vrednosti za napetost morajo biti v voltih, tokovi v miliamperih, moč v vatih, energija v vatnih urah (Wh). Z negativno 'resolucijo' lahko vrednost obrnete, če ima nasprotni predznak.
once: bool (true ali false), če je true, se vrednost prebere samo enkrat ob inicializaciji naprave, sicer periodično.
address: number (Modbus) ali string (HTTP/JSON), številka registra Modbus ali URL HTTP vrednosti, ki jo je treba prebrati.
query:
order: String, za HTTP JSON specifikacija v poizvedovalnem jeziku Charging Managerja, s katerim najde vrednost za branje 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 privede do oblik različic a.b in a.b.c.d. Za 'length' 2 in tip 'int16' upravitelj polnjenja ločuje nizki in visoki bajt s piko, za int32 nizko in visoko besedo, za 'int64' pa nizko in visoko dvočrtico. Za 'lenth' 4 in tip 'int32' upravitelj polnjenja razdeli vrednost na 4 bajte, ločene s piko. Za 'int64' ustrezno 4 besede.
regex: String. Če je naveden regularni izraz, ni treba, da je odgovor števca v obliki JSON. Posledično se ovrednoti celotno ujemanje regularnega izraza ali prva skupina. Uporabite samo, če naprava ne vrača zapisa JSON. Tukaj je seznam funkcij naših regularnih izrazov:
katerikoli znak: .
poimenovani razredi: \d \s \w \D \S \W
anonimni razredi: [a-z0-9_], [^0-9], [^\d]
skupine z alternativami: (ab|cd|ef)
nezajete skupine: (?:ab|cd)
(pohlepno) enkrat ali nič: a?, a???
(pohlepno ) veliko ali nič: a*, a*?
(pohlepno) enkrat ali večkrat: a+, a+?
začetek niza: ^
konec niza: $

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 napravo. Izhodi so opredeljeni v razdelku "outputs" kot polje JSON izhodnih objektov. Vsi izhodi se preklopijo na koncu vsakega cikla posodabljanja, če se je stanje zadevnega izhoda spremenilo.
Za vsak izhod morate v izhodnem objektu opredeliti naslednje lastnosti:
naslov: URL HTTP z neobvezno metodo HTTP, npr. GET http://www.example.com?output1=${var1}. Za nastavitev registrov Modbus lahko uporabite programski vmesnik HTTP programa 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 API HTTP. Če je naslov URL po vseh zamenjavah prazen, se ne nastavi izpis. Izpise lahko na primer zamenjate le, če določene spremenljivke obstajajo (glejte formulo: funkcija exists()). V naslovu lahko dodatno navedete ${naslov} in ${id}. To sta trenutni naslov naprave in ID Modbus, kot sta določena v nastavitvah. Naslov in id se uporabljata predvsem za uporabo vmesnika Modbus API (glejte spodaj).
body: Neobvezno telo HTTP za POST ali PUT.
V naslovu URL in telesu lahko uporabite formule ${expr}, ki se sklicujejo na globalne spremenljivke Charging Manager ali iz ustreznega števca. Formula 'expr' se ovrednoti pri nastavitvi izpisa in nadomesti v besedilu URL ali telesa. Č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 posredovanja š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, v nasprotnem primeru 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 nato pokliče http://<ip-addr>/relay/0?turn=on, sicer http://<ip-addr>/relay/0?turn=off.

Če kot naslov URL vnesete relativno pot, Charging Manager vzame naslov, konfiguriran za ustrezno napravo. Če kot domeno vnesete "localhost", Charging Manager prevzame naslov naprave, v kateri je zagnan. Če zazna dostop do lastnega vmesnika API, uporabi notranji upravljalnik, namesto da bi izvedel celoten dostop HTTP, tako da vam v definicijo števca ni treba shraniti uporabniškega imena in gesla. URL, ki se začne z *, bo povzročil, da bo upravitelj polnjenja vedno izvedel celoten dostop HTTP.

Ponastavitev izhodov: Poleg polja "izhodi" lahko opredelite tudi polje z imenom "ponastavitve", ki je strukturirano kot polje "izhodi". To se lahko uporablja za ponastavitev izhodov na začetne vrednosti, ko je naprava deaktivirana. S tem lahko v kombinaciji z uporabniško definiranimi spremenljivkami in "once": true nastavite napravo nazaj v njeno začetno stanje.
Periodično zapisovanje izhodov: Pri nekaterih napravah je treba izhode periodično zapisovati, sicer naprava ponovno vzpostavi privzete vrednosti. Na primer, pomnilnik Kostal ponovno uporabi svoja privzeta pravila, če krmilnik pomnilnika nekaj časa ni bil aktivno zapisan. Če želite periodično nastavljati izhode, lahko naslovu dodate predpono #xxx#, pri čemer xxx označuje, na koliko sekund se izhod ponovno zapiše, tudi če je vrednost, ki jo je treba zapisati, ostala enaka. Če je na primer naslov /cnf?cmd=set_cm_vars&name=test&val=42, lahko uporabite #30#/cnf?cmd=set_cm_vars&name=test&val=42, da zagotovite, da se ta vrednost zapiše vsakih 30 sekund.

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.

Če imate naprave, ki jih je treba vklopiti pod določenimi pogoji, nato pa nekaj časa delujejo (npr. pralni stroj, pomivalni stroj), lahko spremenljivko opredelite tudi kot "sprožilec". Takrat je formula spremenljivke pogoj, s katerim se spremenljivka nastavi na vrednost 1. Po nastavljivem času se nato ponovno nastavi na 0. "Pogoj ponovnega sprožitve" omogoča, da se čas do izklopa (tj. nastavitve spremenljivke na 0) vedno znova podaljšuje, dokler je pogoj izpolnjen.

Za testne namene lahko prikažete spremenljivke Charging Managerja in števca, npr. trenutne cene Awattar:


                        Prikaz zaslonske slike spremenljivk števca

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".