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 fac parte din 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 prin Modbus din registrele specifice, în timp ce contoarele HTTP/JSON își obțin datele prin intermediul unei cereri HTTP și analizează JSON ca răspuns. Pentru contoarele MQTT/JSON, cFos Charging Manager se abonează la subiecte MQTT și analizează mesajele publicate în cadrul subiectului ca JSON. Pentru analiză, cFos Charging Manager utilizează un mic "limbaj de interogare". Aici este documentația privind capacitățile MQTT din cFos Charging Manager.
În plus față de un număr 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 permite evaluarea formulelor. În combinație cu variabilele Charging Manager și cu ieșirile globale ale 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 stocarea bateriei. Dacă realizați sarcini de control cu acest lucru, vă rugăm să ne oferiți feedback. Suntem foarte interesați de ceea ce controlează oamenii cu cFos Charging Manager ș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. Comentariile pe o singură linie folosind // sunt, de asemenea, permise.
Vă recomandăm să vă rulați fișierele de definiții 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. determinată, durata pauzei înainte de un acces Modbus RTU, astfel încât dispozitivul să recunoască începutul unui mesaj.
silence_same_slave, true: Pauza este observată și în cazul mai multor accesări la același dispozitiv.
retries: Numărul de încercări în cazul în care dispozitivul nu răspunde.
rcv_timeout: în msec. timpul maxim de așteptare pentru fiecare acces până când dispozitivul răspunde.
modbus_read: Numărul de funcție al comenzii de citire Modbus, 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: este msec. timpul maxim de așteptare pentru o conexiune TCP.
delay_after_connect: în msec. Faceți o pauză după stabilirea conexiunii înainte de a trimite prima comandă.
upd_delay: în msec. determină intervalul în 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 întotdeauna interogate.
ui_addr: URL, dacă este diferit de adresa dispozitivului pentru apelarea interfeței web.
reserved: Array cu valori care sunt interpretate ca fiind 0 (util dacă dispozitivul acceptă anumite valori în funcție de model).
Dacă omiteți proprietățile enumerate mai sus, cFos Charging Manager ia valori implicite care funcționează bine în majoritatea cazurilor.
În definiția JSON, următorul pas este definirea variabilelor pe care aparatul le utilizează pentru a citi sau calcula valorile pentru curent, tensiune etc. Următoarele variabile sunt utilizate de Charging Manager. Charging Manager cunoaște următoarele variabile:
type_designation, version, firmware_version, serial: Acestea formează numele modelului, așa cum se arată în informațiile extinse ale plăcii. Acestea sunt interogate o singură 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 valorile pentru voltage_l1..l3, current_l1..l3 semnat, power_w și power_va din acestea. Nu este necesar 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), ar trebui să definiți întotdeauna doar import_wh. Export_wh ar trebui să fie definit numai pentru contoarele bidirecționale (cum ar fi rezervoarele de stocare sau contoarele de referință de rețea).
soc: Dacă este disponibilă, starea de încărcare a unui rezervor de stocare a bateriei este afișată în % în țiglă.
În plus, puteți defini și 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 ale Charging Manager (a se vedea mai jos) și pot fi interogate în consecință.
Variabilele care încep cu *: Dacă definiți variabile care încep cu *, acestea sunt afișate în interfața de utilizare, în tile-ul contorului, sub informații extinse, de exemplu, temperatura unei baterii de stocare.
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 tensiune. 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 multiplicată cu "resolution". 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 (true sau false), dacă este true, valoarea este citită o singură dată când dispozitivul este inițializat, altfel periodic. address: number (Modbus) sau string (HTTP/JSON), numărul registrului Modbus sau adresa URL HTTP a valorii care urmează să fie citită. query:
String, pentru HTTP JSON, specificația în limbajul de interogare a gestionarului de încărcare cu ajutorul căreia acesta găsește valoarea care trebuie citită în răspunsul JSON. order: String, pentru Modbus, ordinea pe octeți, "hl" sau "lh", în care este prezentă valoarea. length: number, pentru Modbus, lungimea unui șir de caractere î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 "lungime" 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. Pentru "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 această opțiune numai dacă dispozitivul nu returnează JSON.
Iată lista de caracteristici ale expresiilor noastre regulate: any char: . named classes:
\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: $
Charging Manager poate interoga până la 32 de valori de intrare din diferite registre sau elemente JSON pentru fiecare dispozitiv. Proprietatea "Inputs" este o matrice JSON. Trebuie să definiți următoarele proprietăți pentru fiecare intrare:
address: Adresa (registru Modbus sau URL).
număr: Numărul de biți de intrare care vor fi citiți cu această cerere.
query: Pentru HTTP/JSON, limbajul de interogare pentru a găsi valoarea din răspuns.
Managerul de încărcare cFos citește toate intrările definite în acest mod la fiecare actualizare și plasează biții în interiorul unui tablou, care poate fi apoi interogat cu ajutorul formulelor, Input1..InputN..
Charging Manager poate comuta până la 32 de ieșiri pentru fiecare 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.
Pentru fiecare ieșire, trebuie să definiți următoarele proprietăți în obiectul "output":
address: 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 HTTP a cFos Charging Manager. Charging Manager detectează accesările corespunzătoare pe localhost și redirecționează cererea către gestionarul intern, astfel încât nu aveți nevoie de autorizare, ca în cazul accesărilor API HTTP externe. Dacă URL-ul este gol după toate înlocuirile, nu se stabilește nicio ieșire. De exemplu, puteți schimba ieșirile numai dacă există anumite variabile (a se vedea formulele: funcția exists()). În adresă puteți specifica suplimentar ${adresa} și ${id}. Aceasta este adresa curentă a dispozitivului și ID-ul Modbus, așa cum sunt definite în setări. Adresa și id-ul sunt utilizate în principal pentru utilizarea API Modbus (a se vedea mai jos).
body: Corpul HTTP opțional pentru POST sau PUT.
În URL și în corp, puteți utiliza formulele ${expr} care fac trimitere la variabilele globale ale Charging Manager sau din contorul respectiv. Formula "expr" este evaluată la setarea ieșirii și înlocuită în textul din URL sau din corp. Dacă, în exemplul de mai sus, http://www.example.com?output1=1 setează 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 doriți. În acest mod, 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ă în URL, trebuie să înlocuiți un text cu altul în funcție de formulă, cum ar fi în cazul soclurilor Shelly WLAN, puteți scrie astfel: ${if expr`text1`text2}. "Apostroful" este un backtick (cod ASCII 96). Dacă "expr" != 0, se introduce textul1, în caz contrar textul2. Pentru priza Shelly WLAN, URL-ul arată astfel: 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 preia adresa configurată pentru dispozitivul respectiv. Dacă introduceți "localhost" ca domeniu, Charging Manager preia adresa dispozitivului pe care rulează. În cazul în care detectează o accesare a propriului API, acesta utilizează gestionarul intern în loc să execute o accesare HTTP completă, astfel încât nu trebuie să stocați un nume de utilizator și o parolă în definiția contorului. O adresă URL care începe cu un * va determina Charging Manager să execute întotdeauna un acces HTTP complet.
Resetează ieșirile: În plus față de o matrice "outputs", puteți defini, de asemenea, o matrice denumită "resets" (resetare) care este structurată ca matricea "outputs". Acesta poate fi utilizat pentru a reseta ieșirile la valorile lor inițiale atunci când dispozitivul este dezactivat. Cu aceasta, în combinație cu variabilele definite de utilizator și cu "once": true, puteți readuce unitatea la starea inițială.
Scrieți ieșirile periodic: Pentru unele dispozitive, ieșirile trebuie scrise periodic, în caz contrar dispozitivul resetează valorile la "default". De exemplu, memoria Kostal utilizează din nou regulile sale implicite dacă controlul memoriei nu a fost scris în mod activ pentru o perioadă de timp. Pentru a seta ieșirile periodic, puteți prefixa adresa cu #xxx#, unde xxx indică la fiecare câte secunde se rescrie 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 Charging Manager, Reguli de încărcare sau pentru a controla ieșirile. De asemenea, puteți scrie Ex.member sau Mx.member ca variabile. Aici, Exși Mxreprezintă ID-ul dispozitivului unui wallbox sau contor configurat în Charging Manager. member este o variabilă "definită de utilizator" care este stocată în dispozitivul corespunzător. Unele dintre variabile pot avea o semnificație specială: Pentru KEBA "out1" este o ieșire de comutare, iar pentru contoarele ABB B23 "out1" și "out2" sunt ieșiri de comutare (pentru modelele care acceptă acest lucru). Un 1 comută ieșirea, iar un 0 o oprește 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ă.
În scopuri de testare, puteți afișa variabilele Charging Manager și ale contorului, de exemplu, prețurile curente Awattar:
În configurația Charging Manager, puteți configura ieșirile globale, așa cum este descris mai sus în definiția contorului de la "Outputs". 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 managerului de încărcare): Se setează variabile cu numele "out1", "out2" etc. în contorul definit de utilizator și se stabilesc ieșiri în contorul definit de utilizator care comută ieșirea în funcție de valoarea acestor variabile.
API-ul Modbus al Charging Manager este utilizat pentru a controla dispozitivele Modbus care au orice adresă Modbus RTU sau TCP (accesibilă din Charging Manager). Pentru Modbus RTU, introduceți COMx,bd,8,p,s ca adresă, unde x este numărul portului COM, bd este viteza de transmisie, p este paritatea ("N", "E" sau "O") și s este numărul de biți de oprire (1 sau 2), ca în configurația dispozitivelor individuale. Pentru Modbus TCP, destinatarul este adresa IP a dispozitivului din rețeaua Charging Manager, inclusiv numărul portului.
URL-ul (pentru HTTP GET) al Modbus API este:
/cnf?cmd=modbus_get sau /cnf?cmd=modbus_set
Managerul de încărcare 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 citire 3 sau 4, pentru scriere 6 sau 16.
id: ID-ul dispozitivului Modbus.
reg: Numărul registrului Modbus. Valoarea poate fi dată în zecimal sau hexazecimal (cu prefixul 0x).
val: număr, valoarea care trebuie scrisă în registru. Se omite la citire.
tip: 'w' 16bit (implicit), d = 32bit, f = float, q = 64bit, s = string.
cnt: număr, lungimea maximă a șirului de caractere în registre, se omite pentru alte tipuri sau se stabilește la 1.
order: șir, ordinea octeților, fie "hl", fie "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".