Documentatie

Door gebruiker gedefinieerde tellers

Opmerking: De cFos Charging Manager kan de meeste omvormers voor zonne-energie uitlezen met SunSpec (apparaattype "SunSpec Solar Inverter / Meter"). In dit geval hoeft u geen eigen meterdefinitie te maken.

Met de cFos Charging Manager kun je je eigen meterdefinities maken om meters te ondersteunen die niet beschikbaar zijn in het standaardrepertoire. Er zijn momenteel drie typen: Modbus tellers, HTTP/JSON tellers en MQTT/JSON tellers. De definitiebestanden voor deze tellers lijken erg op elkaar. Modbus-tellers lezen hun gegevens uit bepaalde registers via Modbus, terwijl HTTP/JSON-tellers hun gegevens ophalen via HTTP-verzoek en in JSON lezen als antwoord. Voor MQTT/JSON tellers abonneert de cFos Charging Manager zich op MQTT topics en leest berichten gepubliceerd onder het topic als JSON. De cFos Charging Manager gebruikt een kleine "Query Language" voor het lezen. Hier is de documentatie van de MQTT mogelijkheden in de cFos Charging Manager.

Naast een reeks vooraf gedefinieerde variabelen, zoals stroom en spanning, kunnen door de gebruiker gedefinieerde tellers ook onbekende, door de gebruiker gedefinieerde variabelen inlezen, ingangen opvragen en uitgangen instellen. Door variabelen in te lezen en uitgangen in te stellen kunnen formules worden geanalyseerd. In combinatie met de hieronder beschreven Laadmanager-variabelen en globale Laadmanager-uitgangen is dit een krachtige functie die zelfs bepaalde domotica-taken en de besturing van externe apparaten zoals accu-opslagunits mogelijk maakt. Als u hiermee besturingstaken realiseert, geef ons dan feedback. We zijn erg geïnteresseerd in wat onze klanten regelen met de cFos Charging Manager en het helpt ons om de Charging Manager verder te ontwikkelen volgens de behoeften van de klant.

Hier is een eenvoudige voorbeelddefinitie voor Modbus die één register voor actief vermogen uitleest. U kunt het registernummer gemakkelijk wijzigen voor uw specifieke toepassing:
Voorbeelddefinitie voor één register.

Hier is een voorbeelddefinitie voor Modbus en een voor HTTP/JSON:
Download voorbeelddefinitie voor Modbus-meter
Download voorbeelddefinitie voor HTTP/JSON meter

De Laadmanager wordt al geleverd met een paar van dergelijke bestanden, maar u kunt uw eigen bestanden uploaden onder "Systeemconfiguratie" en ze ook weer verwijderen.
Hier vindt u de meeste van de meter definities die wij aanbieden:
Download meegeleverde teller definities

Als u uw eigen tellerbestand hebt gemaakt en het zou relevant kunnen zijn voor andere gebruikers, dan zouden we u zeer dankbaar zijn als u het ons ter beschikking zou willen stellen. Dan zullen wij het met toekomstige versies van de Laadmanager meeleveren.

Download meter definities voor extra meters

Structuur van een definitiebestand:

Tellerdefinities zijn JSON-bestanden met een globaal JSON-object dat eigenschappen en subobjecten heeft. rtype' bepaalt het type leesbewerking: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. mtype' bepaalt het apparaattype: 0 = Ander apparaat, 1 = Meter, 2 = Omvormer, 4 = Batterijopslag.

Je kunt getallen opgeven in decimaal of hex met het voorvoegsel '0x'. Eenregelig commentaar met '//' is ook toegestaan.

We raden aan om je definitiebestanden door een JSON5-validator te halen, bijvoorbeeld deze JSON5-validator Je moet zeker het hoofdstuk Formules gelezen hebben om te begrijpen welke waarden gebruikt kunnen worden in formules in de volgende referentie.

Modbus definities hebben een object "rtu" met de volgende eigenschappen:




silence_period, in msec: Bepaalt de pauzeduur voor een Modbus RTU-toegang zodat het apparaat het begin van een bericht herkent. silence_same_slave, true: De pauze wordt ook aangehouden voor meerdere toegangen tot hetzelfde apparaat. retries: Het aantal nieuwe pogingen als het apparaat niet reageert. rcv_timeout: in msec: De maximale wachttijd tot het apparaat reageert, per toegang.

Deze globale eigenschappen gelden voor Modbus TCP en RTU:

modbus_read:

Het functienummer van het Modbus-commando voor lezen, meestal 3 of 4. modbus_read_max_registers: Het maximum aantal registers dat per keer kan worden gelezen. modbus_allow_gaps: true = ongebruikte registergebieden mogen worden gelezen in een leesbewerking.

Voor Modbus TCP en HTTP/JSON is er een object 'tcp' met de volgende eigenschappen:


connect_timeout: is msec: De maximale wachttijd voor een TCP verbinding. delay_after_connect: in msec: Pauze nadat de verbinding tot stand is gebracht voordat het eerste commando wordt verzonden.

Beide definitietypen (Modbus en HTTP/JSON) hebben de volgende aanvullende eigenschappen:

upd_delay: in msec: Bepaalt het interval waarmee een apparaat kan worden gelezen.
Sommige apparaten worden overbelast als ze te vaak worden opgevraagd. manufacturer: String, naam van de fabrikant.


Dit wordt weergegeven in de uitgebreide informatie van de tegel. delay_accumulated: true = Geaccumuleerde waarden (kWh) worden alleen elke 3 seconden opgevraagd of als er voldoende vermogen is. false = Deze waarden worden altijd opgevraagd. ui_addr: URL, indien verschillend van het apparaatadres voor het oproepen van de webinterface. reserved: Array met waarden die als 0 worden geïnterpreteerd (handig als het apparaat bepaalde waarden ondersteunt, afhankelijk van het model).

Als je de bovenstaande eigenschappen weglaat, gebruikt de cFos Charging Manager standaardwaarden, die in de meeste gevallen goed werken.

De volgende stap in de JSON definitie is de definitie van variabelen die de meter gebruikt om waarden voor stroom, spanning, etc. uit te lezen of te berekenen.
De Laadmanager herkent de volgende variabelen: type_aanduiding, versie, firmware_versie, serie: Deze vormen de modelaanduiding, zoals weergegeven in de uitgebreide informatie van de tegel.
Deze worden eenmalig opgevraagd bij het instellen of resetten van de meter. voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: De cFos Charging Manager probeert uit deze waarden voor voltage_l1..l3, getekende stroom_l1..l3, power_w en power_va te berekenen. Je hoeft niet alle variabelen op te geven.
De cFos Laadmanager probeert de waarden te berekenen uit de bestaande variabelen. import_wh, export_wh: De Laadmanager gebruikt deze variabelen om import_wh en export_wh weer te geven. Voor eenrichtingsmeters (bijv. omvormers) moet je alleen import_wh definiëren.

Alleen voor bidirectionele meters (zoals opslag- of netreferentiemeters) moet export_wh worden gedefinieerd. soc: Indien beschikbaar wordt de ladingstoestand van een accuopslag hier weergegeven in % in de tegel.
Je kunt ook andere variabelen met andere namen definiëren, die bij elke update worden uitgelezen of met formules worden berekend. Als je variabelen definieert die beginnen met 'CM.', bijv. CM._set_price, worden de toegekende waarden opgeslagen in de globale Laadmanager-variabelen (zie hieronder) en kunnen ze dienovereenkomstig worden opgevraagd.
Variabelen met *: Als u variabelen definieert die beginnen met '*', worden deze weergegeven in de UI in de metertegel onder uitgebreide informatie, bijv. de temperatuur van een accuopslagunit.
Opmerking: Alleen getallen en de letters a-z en A-Z mogen als variabelenaam worden gebruikt.

Definitie van een variabele:


Het object wordt genoemd naar de naam van de variabele die hierboven is opgesomd en heeft de volgende eigenschappen: fixed: Tekenreeks met een vaste waarde.
Nuttig als er bijvoorbeeld geen waarde kan worden bepaald, bijvoorbeeld voor type_aanduiding of spanning. expr: String.
De variabele wordt niet uitgelezen, maar geëvalueerd als een formule. type: Indien niet fixed of expr, het type van de variabele: int16, uint16, int32, uint32, float, int64, string. Dit is belangrijk voor Modbus om de registers in het juiste formaat te lezen. uint16 en uint32 zijn types die alleen positieve getallen kunnen accepteren.
Met JSON/HTTP kun je meestal float gebruiken. resolutie: float. De gelezen waarde wordt vermenigvuldigd met 'resolutie'. Waarden voor spanning moeten in volt zijn, stromen in milliampère, vermogen in watt, energie in wattuur (Wh).
Met negatieve 'resolutie' kun je een waarde omkeren als deze het tegenovergestelde teken heeft. once: bool (waar of onwaar).
Als true, wordt de waarde slechts eenmaal gelezen wanneer het apparaat wordt geïnitialiseerd, anders wordt hij periodiek gelezen. adres: getal (Modbus) of string (HTTP/JSON).
Het Modbus registernummer of de HTTP URL van de waarde die gelezen moet worden. query: String.
Voor HTTP JSON, de specificatie in de query taal van de Charging Manager waarmee hij de in te lezen waarde vindt in het JSON antwoord. order: String. Voor Modbus, de byte-volgorde, ofwel "hl" of "lh", waarin de waarde zich bevindt. length: getal. Voor Modbus, de lengte van een string in registers; voor de variabelen "version" en "firmware_version" wordt "length" gebruikt om numerieke versies om te zetten in strings met punten. Waarden van 2 of 4 zijn toegestaan voor 'length', die dan resulteren in de versieformaten a.b, en a.b.c.d. Bij 'lengte' 2 en type 'int16' of 'uint16' scheidt de Laadmanager laag en hoog byte met een punt, bij 'int32' of 'uint32' laag en hoog woord, bij 'int64' laag en hoog dword. Voor 'lenth' 4 en 'int32' of 'uint32' splitst de Charging Manager de waarde in 4 bytes gescheiden door een punt.
Voor 'int64' de 4 woorden dienovereenkomstig. regex: String. Als een reguliere expressie is opgegeven, hoeft het antwoord van de teller niet in JSON te zijn. De volledige overeenkomst van de reguliere uitdrukking of de eerste groep wordt als resultaat geëvalueerd. Gebruik dit alleen als het apparaat geen JSON retourneert.

Hier is de lijst met functies van onze reguliere expressies: elk teken: . benoemde klassen:



\d \s \w \D \S \W anonieme klassen: [a-z0-9_], [^0-9], [^\d] groepen met alternatieven: (ab|cd|ef) niet-gevangen groepen: (?:ab|cd) (greedy) veel of geen: a?, a???
(gretig) veel of geen: a*, a*?


(greedy) eenmalig of meer: a+, a+? begin van tekenreeks: ^ einde van tekenreeks: $

Definitie van ingangen:

De Laadmanager kan tot 32 invoerwaarden per apparaat opvragen uit verschillende registers of JSON-elementen. De eigenschap "Inputs" is een JSON-array.
Voor elke ingang moet je de volgende eigenschappen definiëren: address: Adres (Modbus-register of URL).
count:
Aantal ingangsbits dat met dit verzoek wordt gelezen. query: Voor HTTP/JSON, querytaal om de waarde in het antwoord te vinden.

De cFos Charging Manager leest alle ingangen die op deze manier zijn gedefinieerd bij elke update en slaat de bits intern op in een array, die vervolgens kan worden opgevraagd in formules, Input1..InputN.

Definitie van outputs:

De Laadmanager kan tot 32 uitgangen per apparaat schakelen. Uitgangen worden gedefinieerd in "outputs" als een JSON-array van uitgangsobjecten. Alle uitgangen worden geschakeld aan het einde van elke updatecyclus als de status van de respectieve uitgang is gewijzigd.

Je moet voor elke uitgang de volgende eigenschappen in het uitgangsobject definiëren: adres: HTTP URL met optionele HTTP-methode, bijvoorbeeld GET http://www.example.com?output1=${var1}. Om Modbus-registers in te stellen kun je de HTTP API van de cFos Charging Manager gebruiken. De Charging Manager herkent geschikte toegangen op localhost en stuurt het verzoek door naar de interne handler zodat er geen autorisatie nodig is zoals bij externe HTTP API-toegangen. Als de URL leeg is na alle vervangingen, wordt er geen uitvoer ingesteld. Je kunt bijvoorbeeld alleen uitvoer schakelen als bepaalde variabelen bestaan (zie formules: exists() functie). Je kunt ook ${address} en ${id} opgeven in het adres. Dit is het huidige apparaatadres en Modbus ID zoals gedefinieerd in de instellingen.
'address' en 'id' worden voornamelijk gebruikt voor het gebruik van de Modbus API (zie hieronder). body: Optionele HTTP body voor POST of PUT.
In de URL en de body kun je ${expr} gebruiken om formules te gebruiken die verwijzen naar globale laadmanager variabelen of van de respectievelijke teller. De formule 'expr' wordt geëvalueerd wanneer de uitvoer wordt ingesteld en vervangen in de tekst van de URL of de body. Als in het bovenstaande voorbeeld http://www.example.com?output1=1 de uitvoer instelt en http://www.example.com?output1=0 deze verwijdert, kunt u een variabele 'var1' definiëren en deze naar wens op 1 of 0 instellen. Op deze manier kun je ook numerieke waarden schrijven om de geheugenprestaties in Modbus-registers te regelen, die je eerder hebt opgeslagen in een variabele met behulp van een formule.
Als je in plaats van een numerieke waarde een tekst in de URL moet vervangen door een andere afhankelijk van de formule, bijvoorbeeld voor Shelly WLAN sockets, dan kun je dit als volgt schrijven: ${if expr`text1`text2}. De "apostrof" is een backtick (ASCII-code 96). Als de 'expr' != 0, wordt tekst1 gebruikt, anders tekst2. Voor de Shelly WLAN socket ziet de URL er dan bijvoorbeeld zo uit: http://<ip-addr>/relay/0?turn=${if expr`on`off}, d.w.z. als expr != 0, dan roept de Charging Manager http://<ip-addr>/relay/0?turn=on aan, anders http://<ip-addr>/relay/0?turn=off.

Als u een relatief pad invoert als URL, zal de Laadmanager het adres gebruiken dat is geconfigureerd voor het respectieve apparaat. Als u 'localhost' opgeeft als domein, dan gebruikt de Laadmanager het adres van het apparaat waarop het draait. Als het toegang tot zijn eigen API herkent, gebruikt het de interne handler in plaats van een volledige HTTP-toegang uit te voeren, zodat je geen gebruikersnaam en wachtwoord hoeft in te voeren in de tellerdefinitie. Een URL die begint met een '*' zorgt ervoor dat de Laadmanager altijd een volledige HTTP-toegang uitvoert.

Uitgangen resetten: Naast een array "uitgangen" kun je ook een array met de naam "resets" definiëren die gestructureerd is zoals de array "uitgangen". Hiermee kunnen uitgangen worden gereset naar hun beginwaarden wanneer het apparaat wordt gedeactiveerd. Dit kan worden gebruikt in combinatie met door de gebruiker gedefinieerde variabelen en "once": true om het apparaat te resetten naar de oorspronkelijke toestand.
Uitgangen periodiek schrijven: Voor sommige apparaten moeten de uitgangen periodiek worden geschreven, anders zet het apparaat de waarden terug naar "standaard". Bijvoorbeeld, het Kostal geheugen keert terug naar de standaard regels als er een tijdje niet actief is geschreven naar de geheugenbesturing. Om uitgangen periodiek in te stellen, kun je het adres vooraf laten gaan door #xxx#, waarbij xxx aangeeft hoeveel seconden de uitgang wordt herschreven, zelfs als de te schrijven waarde hetzelfde is gebleven. Als het adres bijvoorbeeld /cnf?cmd=set_cm_vars&name=test&val=42 is, kun je #30#/cnf?cmd=set_cm_vars&name=test&val=42 gebruiken om ervoor te zorgen dat deze waarde elke 30 seconden wordt geschreven.

Definitie van de Querytaal:

Momenteel kunnen ledennamen en de operatoren "." en "[]" worden gebruikt in de "query" zoekuitdrukkingen, voorbeelden:

testElement genaamd "test"
naam1.naam2Element genaamd "name2" in kindobject "name1"
naam[idx]Element "idx" van het objectelement "name". "idx" kan een getal zijn, b.v. voor arrays of een string
naam["u2"]Element "u2" van het objectelement "naam", komt overeen met "naam.u2"
naam[{"el1": "v1", "el2": 3}].waardeSelecteer het array-element dat voldoet aan de voorwaarde van de objectnotatie en evalueer het element met de naam 'waarde'. Hier wordt bijvoorbeeld in de array "name" het element geselecteerd dat als objectelementen "el1" met waarde "v1" en "el2" met waarde 3 heeft en vervolgens wordt de waarde van het element "value" uit dit object teruggegeven.

Variabelen voor Global Charging Manager:

Je kunt variabelen maken in de Charging Manager configuratie. Je kunt een vaste waarde of een formule als waarde gebruiken. Aan het einde van elke updatecyclus herberekent de Laadmanager de waarde van deze variabelen indien nodig. Je kunt deze dan gebruiken in (bepaalde) Charging Manager parameters, laadregels of om uitgangen te regelen. Je kunt Ex.member of Mx.member ook als variabele schrijven. In dit geval zijn Exen Mxde apparaat-ID van een wallbox of meter die is ingesteld in de Laadmanager. member' is een "door de gebruiker gedefinieerde" variabele die wordt opgeslagen in het overeenkomstige apparaat. Sommige variabelen kunnen een speciale betekenis hebben: Voor KEBA is 'out1' een schakeluitgang, voor ABB B23 meters zijn 'out1' en 'out2' schakeluitgangen (voor modellen die dit ondersteunen). Een 1 schakelt de uitgang, een 0 schakelt hem weer uit.

Als je apparaten hebt die onder bepaalde omstandigheden moeten worden ingeschakeld, maar dan een tijdje moeten draaien (bv. wasmachine, vaatwasser), kun je de variabele ook definiëren als een "trigger". De formule van de variabele is dan de voorwaarde waarmee de variabele op 1 wordt gezet. Na een instelbare tijd wordt hij dan weer op 0 gezet. Met een "retrigger-conditie" kan de tijd tot het uitschakelen (d.w.z. de variabele op 0 zetten) steeds opnieuw worden verlengd zolang aan de voorwaarde wordt voldaan.

Opmerking: Alleen getallen en de letters a-z en A-Z mogen als variabelenaam worden gebruikt.

Voor testdoeleinden kun je laadmanager- en metervariabelen weergeven, bijvoorbeeld de huidige Awattar-prijzen:


                        Schermweergave van tellervariabelen

Global Charging Manager Uitgangen:

In de configuratie van de Laadmanager kun je globale uitgangen configureren zoals hierboven beschreven in de tellerdefinitie onder 'Uitgangen'. Deze worden aan het einde van elke updatecyclus ingesteld als hun status is gewijzigd. Als je schakeluitgangen in door de gebruiker gedefinieerde apparaten wilt aansturen, wordt de bovenstaande conventie aanbevolen (zie Laadmanager-variabelen): Je stelt variabelen in met de namen "out1", "out2", enz. in de gebruikersgedefinieerde teller en stelt uitgangen in de gebruikersgedefinieerde teller in die de uitgang schakelen afhankelijk van de waarde van deze variabelen.

Globale Modbus API van de Laadmanager:

De Modbus API van de Charging Manager wordt gebruikt om Modbus-apparaten aan te sturen die een Modbus RTU- of TCP-adres hebben (toegankelijk via de Charging Manager). Net als bij de configuratie van de afzonderlijke apparaten, voer je COMx,bd,8,p,s in als adres voor Modbus RTU, waarbij x het nummer van de COM-poort is, bd de baudrate, p de pariteit ('N', 'E' of 'O') en s het aantal stopbits (1 of 2). Voor Modbus TCP is het adres het IP-adres van het apparaat in het Charging Manager netwerk, inclusief het poortnummer.



De URL (voor HTTP GET) van de Modbus API is: /cnf?cmd=modbus_get of /cnf?cmd=modbus_set De cFos Charging Manager ondersteunt de volgende extra query parameters: addr:


Het hierboven genoemde Modbus RTU of TCP apparaatadres. func: Modbus functienummer, bijvoorbeeld voor lezen 3 of 4, voor schrijven 6 of 16. id: Device ID van het Modbus apparaat. reg: Het Modbus register nummer.
De waarde kan worden opgegeven in decimaal of hex (met voorvoegsel 0x). val: nummer: Waarde die naar het register moet worden geschreven.
Weglaten bij lezen. type: 'w' 16bit (standaard), d = 32bit, f = float, q = 64bit, s = string.

c nt: getal: De maximale lengte van de string in registers, weglaten voor andere types of instellen op 1. order: String: De byte-volgorde, ofwel "hl" of "lh".

Opmerking: Als uw 'teller' voornamelijk controletaken heeft, kunt u in de instellingen van deze tegel de optie 'Apparaat verbergen' aanvinken, zodat dit apparaat niet op de startpagina verschijnt.

Opmerking: Sommige meters die via HTTP worden uitgelezen vereisen een gebruikersnaam/wachtwoord als autorisatie. U kunt dit opgeven in het adres voor HTTP-toegang, bijvoorbeeld met http://username:password@192.168.2.111. Als uw gebruikersnaam of wachtwoord een "@" bevat, moet u deze vervangen door "%40".