Documentație

Contoare definite de utilizator

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 suplimentare

Structura unui fișier de definiție:

Definițiile contoarelor sunt fișiere JSON cu un obiect JSON global care are proprietăți și obiecte copil. "rtype" determină tipul de operațiune de citire: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Numerele pot fi specificate opțional în zecimal sau hexazecimal cu prefixul 0x. În plus, sunt permise comentariile pe o singură linie care utilizează //. Vă recomandăm să rulați fișierele de definiție printr-un validator JSON5, de exemplu, acest validator JSON5

Trebuie să citiți cu siguranță capitolul Formule pentru a înțelege ce valori pot fi utilizate în formulele din următoarea referință.

Definițiile Modbus au un obiect "rtu" cu următoarele proprietăți:

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.

Aceste proprietăți globale se aplică la Modbus TCP și RTU:

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.

Pentru Modbus TCP și HTTP/JSON există un obiect "tcp" cu următoarele proprietăți:

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

Ambele tipuri de definiții (Modbus și HTTP/JSON) au următoarele proprietăți suplimentare:

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.

Definiția unei variabile:

Obiectul este denumit după variabila menționată mai sus și are următoarele proprietăți:
fixed: Șir de caractere cu valoare fixă. Utilă dacă, de exemplu, nu se poate determina nicio valoare, de exemplu pentru type_designation sau voltage.
expr: String, variabila nu este citită, ci evaluată ca o formulă.
type: Dacă nu este fixă sau expr, tipul variabilei: int16, int32, float, int64, string. Acest lucru este important pentru Modbus pentru a citi registrele în formatul corect. Pentru JSON/HTTP, de obicei se poate folosi float.
resolution: float, valoarea citită este înmulțită cu "resolution". Valorile pentru tensiune trebuie să fie în volți, curenții în miliamperi, puterea în wați, energia în wați-oră (Wh). Cu o "rezoluție" negativă, puteți inversa o valoare dacă aceasta are semnul opus.
once: bool (true sau false), dacă este adevărat, valoarea este citită o singură dată la inițializarea dispozitivului, altfel periodic.
address: număr (Modbus) sau șir de caractere (HTTP/JSON), numărul de registru Modbus sau URL-ul HTTP al valorii care trebuie citită.
query: String, pentru HTTP JSON specificația în limbajul de interogare al Charging Manager, cu ajutorul căreia acesta găsește valoarea care urmează să fie citită în răspunsul JSON.
order: String, pentru Modbus ordinea de octeți, fie "hl", fie "lh", în care este prezentă valoarea. length: număr, pentru Modbus lungimea unui șir de caractere în registre. Cu variabilele "version" și "firmware_version", "length" este utilizat pentru a transforma versiunile numerice în șiruri cu puncte. Pentru "length" sunt permise valori de 2 sau 4, ceea ce duce la formatele de versiune a.b și a.b.c.d. Pentru "length" 2 ș i tipul "int16", Charging Manager separă prin punct octetul inferior ș i superior, pentru int32 cuvântul inferior ș i superior, pentru "int64" cuvântul inferior ș i superior. Pentru "lenth" 4 și "int32", Charging Manager împarte valoarea în 4 octeți separați prin punct. Pentru 'int64', cele 4 cuvinte sunt împărțite în mod corespunzător.
regex: String. Dacă se specifică o expresie regulată, nu este necesar ca răspunsul contorului să fie în JSON. Ca urmare, se evaluează fie întreaga potrivire a expresiei regulate, fie primul grup. Vă rugăm să utilizați numai dacă dispozitivul nu returnează JSON. Iată lista caracteristicilor 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: ^
sfârșitul șirului: $

Definiția intrărilor:

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

Definiția ieșirilor:

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.

Definiția limbajului de interogare:

În prezent, numele membrilor și operatorii "." și "[]" pot fi utilizați în expresiile de căutare "query", de exemplu:

testElement numit "test"
nume1.nume2Elementul 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}].valueSelectaț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.

Variabilele Global Charging Manager:

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:


                        Afișarea pe ecran a variabilelor contorului

Global Charging Manager Ieșiri:

Î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 Modbus global al administratorului de încărcare:

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