Notă: Managerul de încărcare cFos poate citi majoritatea invertoarelor solare care utilizează SunSpec (tip de dispozitiv "SunSpec Solar Inverter / Meter"). În acest caz, nu este necesar să creați propria definiție a contorului.
Managerul de încărcare cFos vă permite să creați propriile definiții ale contoarelor pentru a sprijini contoarele care nu sunt disponibile în repertoriul standard. În prezent, există trei tipuri: Contoare Modbus, Contoare HTTP/JSON și Contoare MQTT/JSON. Fișierele de definiție pentru aceste contoare sunt foarte asemănătoare. Contoarele Modbus își citesc datele din anumite registre prin Modbus, în timp ce contoarele HTTP/JSON își recuperează datele prin cerere HTTP și citesc în JSON ca răspuns. Pentru contoarele MQTT/JSON, cFos Charging Manager se abonează la subiectele MQTT și citește mesajele publicate în cadrul subiectului ca JSON. Managerul de încărcare cFos utilizează un mic "Query Language" pentru citire. Aici este documentația referitoare la capacitățile MQTT din cFos Charging Manager.
În plus față de o gamă de variabile predefinite, cum ar fi curentul și tensiunea, contoarele definite de utilizator pot, de asemenea, să citească variabile necunoscute, definite de utilizator, să interogheze intrările și să seteze ieșirile. Citirea variabilelor și setarea ieșirilor permit analizarea formulelor. În combinație cu variabilele Charging Manager și ieșirile globale Charging Manager descrise mai jos, aceasta este o caracteristică puternică și permite chiar anumite sarcini de automatizare a locuinței și controlul dispozitivelor externe, cum ar fi unitățile de stocare a bateriei. Dacă realizați sarcini de control cu această funcție, vă rugăm să ne oferiți feedback. Suntem foarte interesați de ceea ce clienții noștri controlează cu Charging Manager cFos și ne ajută să dezvoltăm în continuare Charging Manager în funcție de nevoile clienților.
Iată un exemplu simplu de definiție pentru Modbus care citește un singur registru pentru puterea activă. Puteți modifica cu ușurință numărul de registre pentru aplicația dvs. specifică:
Exemplu de definiție pentru un singur registru.
Iată un exemplu de definiție pentru Modbus și unul pentru HTTP/JSON:
Descărcați un exemplu de definiție pentru contorul Modbus
Descărcați un exemplu de definiție pentru contorul HTTP/JSON
Charging Manager este deja prevăzut cu câteva astfel de fișiere, dar puteți încărca propriile fișiere în secțiunea "Configurare sistem" și le puteți șterge din nou.
Aici veți găsi majoritatea definițiilor contoarelor pe care le oferim:
Descărcați definițiile de contor furnizate
Dacă v-ați creat propriul fișier de contorizare și acesta ar putea fi relevant pentru alți utilizatori, v-am fi foarte recunoscători dacă ni l-ați pune la dispoziție. Apoi îl vom livra împreună cu versiunile viitoare ale Charging Manager.
Descărcați definițiile contoarelor pentru contoare suplimentareDefinițiile contoarelor sunt fișiere JSON cu un obiect JSON global care are proprietăți și subobiecte. "rtype" determină tipul operațiunii de citire: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' determină tipul de dispozitiv: 0 = alt dispozitiv, 1 = contor, 2 = invertor, 4 = acumulator.
Puteți specifica numere fie în zecimale, fie în hexazecimal cu prefixul "0x". De asemenea, sunt permise comentariile pe o singură linie folosind "//".
Vă recomandăm să vă rulați fișierele de definiție printr-un validator JSON5, de exemplu acest validator JSON5 Trebuie neapărat să fi citit capitolul Formule pentru a înțelege ce valori pot fi utilizate în formulele din următoarea referință.
silence_period, în msec: Determină durata pauzei înainte de o accesare Modbus RTU, astfel încât dispozitivul să recunoască începutul unui mesaj. silence_same_slave, true: Pauza este menținută și pentru accesări multiple la același dispozitiv. retries: Numărul de reintrări dacă dispozitivul nu răspunde. rcv_timeout: în msec: Timpul maxim de așteptare până când dispozitivul răspunde, pentru fiecare accesare.
modbus_read:
Numărul de funcție al comenzii Modbus pentru citire, de obicei 3 sau 4. modbus_read_max_registers: Numărul maxim de registre care pot fi citite simultan. modbus_allow_gaps: true = zonele de registre neutilizate pot fi citite într-o operațiune de citire.
connect_timeout: în msec: Timpul maxim de așteptare pentru o conexiune TCP. delay_after_connect: în msec: Pauză după stabilirea conexiunii înainte de trimiterea primei comenzi.
upd_delay: în msec: Determină intervalul la care un dispozitiv poate fi citit.
Unele dispozitive sunt supraîncărcate dacă sunt interogate prea des. manufacturer: String, numele producătorului.
Acesta este afișat în informațiile extinse ale plăcii. delay_accumulated: true = Valorile acumulate (kWh) sunt interogate numai la fiecare 3 secunde sau dacă există suficientă energie. false = Aceste valori sunt interogate întotdeauna. ui_addr: URL, dacă diferă de adresa dispozitivului pentru apelarea interfeței web. reserved: Array cu valori care sunt interpretate ca 0 (util dacă dispozitivul acceptă anumite valori în funcție de model).
Dacă omiteți proprietățile enumerate mai sus, cFos Charging Manager utilizează valorile implicite, care funcționează bine în majoritatea cazurilor.
Următorul pas în definirea JSON este definirea variabilelor pe care contorul le utilizează pentru a citi sau calcula valorile pentru curent, tensiune etc.
Charging Manager recunoaște următoarele variabile: type_designation, version, firmware_version, serial: Acestea formează denumirea modelului, așa cum este afișată în informațiile extinse ale plăcii.
Acestea sunt interogate o dată la configurarea sau resetarea contorului. voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: Managerul de încărcare cFos încearcă să calculeze pornind de la aceste valori pentru voltage_l1..l3, signed current_l1..l3, power_w și power_va. Nu trebuie să specificați toate variabilele.
Managerul de încărcare cFos încearcă să calculeze valorile din variabilele existente. import_wh, export_wh: Managerul de încărcare utilizează aceste variabile pentru a afișa import_wh și export_wh. Pentru contoarele unidirecționale (de exemplu, invertoarele), trebuie să definiți numai import_wh.
Doar pentru contoarele bidirecționale (cum ar fi contoarele de stocare sau de referință la rețea) trebuie definit export_wh. soc: Dacă este disponibilă, starea de încărcare a unei baterii de stocare este afișată aici în % în element.
De asemenea, puteți defini alte variabile cu nume diferite, care sunt citite la fiecare actualizare sau calculate cu ajutorul unor formule. Dacă definiți variabile care încep cu "CM.", de exemplu CM._set_price, valorile atribuite sunt stocate în variabilele globale Charging Manager (a se vedea mai jos) și pot fi interogate în consecință.
Variabilele cu *: În cazul în care definiți variabile care încep cu "*", acestea sunt afișate în interfața de utilizator în panoul contorului sub informații extinse, de exemplu, temperatura unei unități de stocare a bateriei.
Notă: Numai numerele și literele a-z și A-Z pot fi utilizate ca nume de variabile.
Obiectul este denumit după numele variabilei enumerate mai sus și are următoarele proprietăți: fixed: String cu o valoare fixă.
Utilă dacă, de exemplu, nu poate fi determinată nicio valoare, de exemplu pentru type_designation sau voltage. expr: String.
Variabila nu este citită, ci evaluată ca o formulă. type: Dacă nu este fixed sau expr, tipul variabilei: int16, uint16, int32, uint32, float, int64, string. Acest lucru este important pentru Modbus pentru a citi registrele în formatul corect. uint16 și uint32 sunt tipuri care pot accepta numai numere pozitive.
Cu JSON/HTTP, puteți utiliza de obicei float. resolution: float. Valoarea citită este înmulțită cu "rezoluția". Valorile pentru tensiune trebuie să fie în volți, curenții în miliamperi, puterea în wați, energia în watt-ore (Wh).
Cu o "rezoluție" negativă, puteți inversa o valoare dacă aceasta are semnul opus. once: bool (adevărat sau fals).
Dacă este true, valoarea este citită o singură dată când dispozitivul este inițializat, altfel este citită periodic. address (adresă): număr (Modbus) sau șir de caractere (HTTP/JSON).
Numărul registrului Modbus sau adresa URL HTTP a valorii care urmează să fie citită. query: Șir de caractere.
Pentru HTTP JSON, specificația în limbajul de interogare al gestionarului de taxare cu ajutorul căreia acesta găsește valoarea care urmează să fie citită în răspunsul JSON. order: String. Pentru Modbus, ordinea octetelor, fie "hl", fie "lh", în care este prezentă valoarea. length: număr. Pentru Modbus, lungimea unui șir în registre; pentru variabilele "version" și "firmware_version", "length" este utilizat pentru a transforma versiunile numerice în șiruri cu puncte. Sunt permise valori de 2 sau 4 pentru "length", care rezultă în formatele de versiune a.b și a.b.c.d. Cu "length" 2 și tipul "int16" sau "uint16", gestionarul de încărcare separă octetul mic și octetul mare cu un punct, cu "int32" sau "uint32" cuvântul mic și cuvântul mare, cu "int64" cuvântul mic și cuvântul mare. Cu "lenth" 4 și "int32" sau "uint32", gestionarul responsabil cu taxarea împarte valoarea în 4 octeți separați printr-un punct.
Pentru "int64", cele 4 cuvinte sunt corespunzătoare. regex: String. Dacă este specificată o expresie regulată, răspunsul contorului nu trebuie să fie în JSON. Ca rezultat este evaluată fie întreaga potrivire a expresiei regulate, fie primul grup. Vă rugăm să utilizați numai dacă dispozitivul nu returnează JSON.
Iată lista de caracteristici ale expresiilor noastre regulate: orice char: . clase numite:
\d \s \w \D \S \W clase anonime: [a-z0-9_], [^0-9], [^\d] grupuri cu alternative: (ab|cd|ef) grupuri necapturate: (?:ab|cd) (greedy) o dată sau niciuna: a?, a???
(greedy) multe sau niciuna: a*, a*?
(greedy) o dată sau mai multe: a+, a+? începutul șirului de caractere: ^ sfârșitul șirului de caractere: $
Managerul de încărcare poate solicita până la 32 de valori de intrare per dispozitiv din diverse registre sau elemente JSON. Proprietatea "Inputs" este un array JSON.
Trebuie să definiți următoarele proprietăți pentru fiecare intrare: address: Adresă (registru Modbus sau URL).
count (număr):
Numărul de biți de intrare care sunt citiți cu această cerere. query: Pentru HTTP/JSON, limbajul de interogare pentru a găsi valoarea în răspuns.
Managerul de încărcare cFos citește toate intrările definite în acest mod cu fiecare actualizare și stochează biții intern într-un array, care poate fi apoi interogat în formulele, Input1..InputN.
Charging Manager poate comuta până la 32 de ieșiri pe dispozitiv. Ieșirile sunt definite în "outputs" ca o matrice JSON de obiecte de ieșire. Toate ieșirile sunt comutate la sfârșitul fiecărui ciclu de actualizare dacă starea ieșirii respective s-a schimbat.
Trebuie să definiți următoarele proprietăți în obiectul de ieșire pentru fiecare ieșire: adresă: URL HTTP cu metoda HTTP opțională, de exemplu GET http://www.example.com?output1=${var1}. Pentru a seta registrele Modbus, puteți utiliza API-ul HTTP al managerului de încărcare cFos. Charging Manager recunoaște accesările adecvate pe localhost și redirecționează solicitarea către gestionarul intern, astfel încât să nu aveți nevoie de autorizare ca în cazul accesărilor API HTTP externe. Dacă URL-ul este gol după toate înlocuirile, nu este setată nicio ieșire. De exemplu, puteți schimba ieșirile numai dacă există anumite variabile (consultați formule: funcția exists()). De asemenea, puteți specifica ${address} și ${id} în adresă. Aceasta este adresa curentă a dispozitivului și ID-ul Modbus, astfel cum sunt definite în setări.
"address" și "id" sunt utilizate în principal pentru utilizarea API Modbus (a se vedea mai jos). body: Corp HTTP opțional pentru POST sau PUT.
În URL și în corp, puteți utiliza ${expr} pentru a utiliza formule care fac trimitere la variabile globale ale managerului de încărcare sau de la contorul respectiv. Formula "expr" este evaluată atunci când ieșirea este setată și înlocuită în textul URL-ului sau al corpului. Dacă, în exemplul de mai sus, http://www.example.com?output1=1 stabilește ieșirea și http://www.example.com?output1=0 o șterge, puteți defini o variabilă "var1" și o puteți seta la 1 sau 0, după cum este necesar. În acest fel, puteți scrie, de asemenea, valori numerice pentru a controla performanța memoriei în registrele Modbus, pe care le-ați stocat anterior într-o variabilă folosind o formulă.
Dacă, în loc să treceți o valoare numerică, trebuie să înlocuiți un text din URL cu altul în funcție de formulă, de exemplu pentru socket-urile WLAN Shelly, puteți scrie aceasta după cum urmează: ${if expr`text1`text2}. "Apostroful" este un backtick (cod ASCII 96). Dacă "expr" != 0, se utilizează textul1, altfel textul2. Pentru priza WLAN Shelly, URL-ul arată astfel, de exemplu: http://<ip-addr>/relay/0?turn=${if expr`on`off}, adică dacă expr != 0, Charging Manager apelează http://<ip-addr>/relay/0?turn=on, altfel http://<ip-addr>/relay/0?turn=off.
Dacă introduceți o cale relativă ca URL, Charging Manager va utiliza adresa configurată pentru dispozitivul respectiv. Dacă introduceți "localhost" ca domeniu, Charging Manager utilizează adresa dispozitivului pe care rulează. Dacă recunoaște accesul la propriul API, acesta utilizează gestionarul intern în loc să execute un acces HTTP complet, astfel încât să nu fie necesar să introduceți un nume de utilizator și o parolă în definiția contorului. O adresă URL care începe cu "*" determină managerul de taxare să execute întotdeauna un acces HTTP complet.
Resetați ieșirile: Pe lângă matricea "outputs", puteți defini și o matrice numită "resets" care este structurată ca matricea "outputs". Acest lucru permite resetarea ieșirilor la valorile lor inițiale atunci când dispozitivul este dezactivat. Aceasta poate fi utilizată în combinație cu variabile definite de utilizator și "once": true pentru a reseta dispozitivul la starea sa inițială.
Scrierea periodică a ieșirilor: Pentru unele dispozitive, ieșirile trebuie să fie scrise periodic, în caz contrar dispozitivul va reseta valorile la "implicit". De exemplu, memoria Kostal revine la regulile sale implicite dacă controlul memoriei nu a fost scris activ pentru o perioadă de timp. Pentru a seta ieșirile periodic, puteți prefixa adresa cu #xxx#, unde xxx indică câte secunde este rescrisă ieșirea, chiar dacă valoarea care trebuie scrisă a rămas aceeași. De exemplu, dacă adresa este /cnf?cmd=set_cm_vars&name=test&val=42, puteți utiliza #30#/cnf?cmd=set_cm_vars&name=test&val=42 pentru a vă asigura că această valoare este scrisă la fiecare 30 de secunde.
În prezent, numele membrilor și operatorii "." și "[]" pot fi utilizați în expresiile de căutare "query", de exemplu:
test | Element numit "test" |
nume1.nume2 | Elementul numit "nume2" în obiectul copil "nume1" |
nume[idx] | Elementul "idx" al elementului obiect "name". "idx" poate fi un număr, de exemplu, pentru array-uri sau un șir de caractere |
name["u2"] | Elementul "u2" al elementului obiect "nume", corespunde cu "nume.u2" |
name[{"el1": "v1", "el2": 3}].value | Selectați elementul de tablou care îndeplinește condiția noțiunii de obiect și evaluați elementul numit "value". Aici, de exemplu, în tabloul "nume", se selectează elementul care are ca elemente de obiect "el1" cu valoarea "v1" și "el2" cu valoarea 3 și apoi se returnează valoarea elementului "valoare" din acest obiect. |
Puteți crea variabile în configurația Charging Manager. Puteți utiliza o valoare fixă sau o formulă ca valoare. La sfârșitul fiecărui ciclu de actualizare, Charging Manager recalculează valoarea acestor variabile, dacă este necesar. Le puteți utiliza apoi în (anumiți) parametri ai gestionarului de taxare, în regulile de taxare sau pentru a controla ieșirile. De asemenea, puteți scrie Ex.member sau Mx.member ca o variabilă. În acest caz, Exși Mxsunt ID-ul dispozitivului unui wallbox sau contor configurat în Charging Manager. 'member' este o variabilă "definită de utilizator" care este salvată în dispozitivul corespunzător. Unele dintre variabile pot avea o semnificație specială: Pentru KEBA, "out1" este o ieșire de comutare, pentru contoarele ABB B23, "out1" și "out2" sunt ieșiri de comutare (pentru modelele care acceptă acest lucru). Un 1 activează ieșirea, un 0 o dezactivează din nou.
Dacă aveți aparate care trebuie să fie pornite în anumite condiții, dar care trebuie să funcționeze pentru o perioadă de timp (de exemplu, mașina de spălat rufe, mașina de spălat vase), puteți defini variabila ca "trigger". Apoi, formula variabilei este condiția cu care variabila este setată la 1. După un timp reglabil, aceasta este apoi setată din nou la 0. O "condiție de redeclanșare" permite ca timpul până la deconectare (adică setarea variabilei la 0) să fie prelungit din nou și din nou, atât timp cât condiția este îndeplinită.
Notă: Numai numerele și literele a-z și A-Z pot fi utilizate ca nume de variabile.
În scopuri de testare, puteți afișa variabilele managerului de încărcare și ale contorului, de exemplu prețurile Awattar curente:
În configurația managerului de încărcare, puteți configura ieșiri globale, astfel cum este descris mai sus în definiția contorului de la "Ieșiri". Acestea sunt setate la sfârșitul fiecărui ciclu de actualizare dacă starea lor s-a schimbat. Dacă doriți să controlați ieșirile de comutare în dispozitivele definite de utilizator, se recomandă convenția de mai sus (a se vedea variabilele Charging Manager): Setați variabile cu numele "out1", "out2" etc. în contorul definit de utilizator și configurați ieșiri în contorul definit de utilizator care comută ieșirea în funcție de valoarea acestor variabile.
API Modbus din Charging Manager este utilizat pentru a controla dispozitivele Modbus care au orice adresă Modbus RTU sau TCP (accesibilă din Charging Manager). Ca și în configurarea dispozitivelor individuale, introduceți COMx,bd,8,p,s ca adresă pentru Modbus RTU, unde x este numărul portului COM, bd rata de baud, p paritatea ("N", "E" sau "O") și s numărul de biți de stop (1 sau 2). Pentru Modbus TCP, adresa este adresa IP a dispozitivului din rețeaua Charging Manager, inclusiv numărul portului.
URL-ul (pentru HTTP GET) al API Modbus este: /cnf?cmd=modbus_get sau /cnf?cmd=modbus_set Charging Manager cFos acceptă următorii parametri de interogare suplimentari: addr:
Adresa dispozitivului Modbus RTU sau TCP menționată mai sus. func: Numărul funcției Modbus, de exemplu, pentru citirea 3 sau 4, pentru scrierea 6 sau 16. id: ID-ul dispozitivului Modbus. reg: Numărul registrului Modbus.
Valoarea poate fi specificată în zecimal sau hex (cu prefixul 0x). val: număr: Valoarea care trebuie scrisă în registru.
Se omite la citire. type: "w" 16bit (implicit), d = 32bit, f = float, q = 64bit, s = string.
c nt: număr: Lungimea maximă a șirului în registre, omiteți pentru alte tipuri sau setați la 1. order: șir: Ordinea octetelor, fie "hl" sau "lh".
Notă: Dacă "counter" are în primul rând sarcini de control, puteți bifa opțiunea "Hide device" (Ascundeți dispozitivul) în setările acestei plăci, astfel încât acest dispozitiv să nu apară pe pagina de start.
Notă: Unele contoare care sunt citite prin HTTP necesită un nume de utilizator/parolă ca autorizare. Puteți specifica acest lucru în adresa de acces HTTP, de exemplu, cu http://username:password@192.168.2.111
. Dacă numele de utilizator sau parola conține un "@", trebuie să îl înlocuiți cu "%40".