Bemærk: cFos Charging Manager kan aflæse de fleste solcelleinvertere ved hjælp af SunSpec (enhedstype "SunSpec Solar Inverter / Meter"). I dette tilfælde behøver du ikke at oprette din egen målerdefinition.
Med cFos Charging Manager kan du oprette dine egne målerdefinitioner for at understøtte målere, der ikke er tilgængelige i standardrepertoiret. Der er i øjeblikket tre typer: Modbus-tællere, HTTP/JSON-tællere og MQTT/JSON-tællere. Definitionsfilerne for disse tællere er meget ens. Modbus-tællere aflæser deres data fra bestemte registre via Modbus, mens HTTP/JSON-tællere henter deres data via HTTP-anmodning og aflæser JSON som svar. For MQTT/JSON-tællere abonnerer cFos Charging Manager på MQTT-emner og læser beskeder, der er offentliggjort under emnet, som JSON. CFos Charging Manager bruger et lille "Query Language" til aflæsning. Her er dokumentationen af MQTT-funktionerne i cFos Charging Manager.
Ud over en række foruddefinerede variabler, f.eks. strøm og spænding, kan brugerdefinerede tællere også aflæse ukendte, brugerdefinerede variabler, forespørge på input og indstille output. Indlæsning af variabler og indstilling af udgange gør det muligt at analysere formler. I kombination med Charging Manager-variablerne og de globale Charging Manager-udgange, som beskrives nedenfor, er dette en kraftfuld funktion, som endda giver mulighed for visse hjemmeautomatiseringsopgaver og styring af eksterne enheder som f.eks. batterilagringsenheder. Hvis du udfører kontrolopgaver med dette, så giv os feedback. Vi er meget interesserede i, hvad vores kunder styrer med cFos Charging Manager, og det hjælper os med at videreudvikle Charging Manager i overensstemmelse med kundernes behov.
Her er et simpelt eksempel på en definition for Modbus, der læser et enkelt register for aktiv effekt. Du kan nemt ændre registernummeret til din specifikke applikation:
Eksempel på en definition for et enkelt register.
Her er et eksempel på en definition for Modbus og en for HTTP/JSON:
Download eksempeldefinition for Modbus-måler
Download en eksempeldefinition for HTTP/JSON-måler
Charging Manager leveres allerede med et par sådanne filer, men du kan uploade dine egne filer under "Systemkonfiguration" og slette dem igen.
Her finder du de fleste af de meterdefinitioner, som vi leverer:
Download de medfølgende tællerdefinitioner
Så vil vi levere den sammen med fremtidige versioner af Charging Manager.
Download målerdefinitioner for yderligere målereTællerdefinitioner er JSON-filer med et globalt JSON-objekt, der har egenskaber og underobjekter. 'rtype' bestemmer typen af læseoperation: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' bestemmer enhedstypen: 0 = Anden enhed, 1 = Måler, 2 = Inverter, 4 = Batterilager.
Du kan angive tal enten i decimal eller hex med præfikset '0x'. Kommentarer på én linje med '//' er også tilladt.
Vi anbefaler, at du kører dine definitionsfiler gennem en JSON5-validator, f.eks. denne JSON5-validator Du bør helt sikkert have læst kapitlet Formler for at forstå, hvilke værdier der kan bruges i formler i den følgende reference.
silence_period, i msek: Bestemmer pauselængden før en Modbus RTU-adgang, så enheden kan genkende starten på en besked. silence_same_slave, true: Pausen opretholdes også for flere adgange til den samme enhed. retries: Antallet af forsøg, hvis enheden ikke svarer. rcv_timeout: i msek: Den maksimale ventetid, indtil enheden svarer, pr. adgang.
modbus_read:
Funktionsnummeret for Modbus-kommandoen til læsning, normalt 3 eller 4. modbus_read_max_registers: Det maksimale antal registre, der kan læses ad gangen. modbus_allow_gaps: true = ubrugte registerområder kan læses i en læseoperation.
connect_timeout: er msec: Den maksimale ventetid for en TCP-forbindelse. delay_after_connect: i msec: Pause efter at forbindelsen er etableret, før den første kommando sendes.
upd_delay: in msec: Bestemmer det interval, hvormed en enhed kan læses.
Nogle enheder overbelastes, hvis de forespørges for ofte. manufacturer: String, navn på producenten.
Dette vises i flisens udvidede oplysninger. delay_accumulated: true = Akkumulerede værdier (kWh) forespørges kun hvert 3. sekund, eller hvis der er tilstrækkelig strøm. false = Disse værdier forespørges altid. ui_addr: URL, hvis den er forskellig fra enhedens adresse til at kalde webgrænsefladen. reserved: Array med værdier, der fortolkes som 0 (nyttigt, hvis enheden understøtter visse værdier afhængigt af modellen).
Hvis du udelader ovenstående egenskaber, bruger cFos Charging Manager standardværdier, som fungerer godt i de fleste tilfælde.
Det næste trin i JSON-definitionen er definitionen af variabler, som måleren bruger til at aflæse eller beregne værdier for strøm, spænding osv.
Charging Manager genkender følgende variabler: type_designation, version, firmware_version, serial: Disse udgør modelbetegnelsen, som vist i de udvidede oplysninger på flisen.
Der spørges til dem én gang, når måleren opsættes eller nulstilles. voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Charging Manager forsøger at beregne ud fra disse værdier for voltage_l1..l3, signed current_l1..l3, power_w og power_va. Du behøver ikke at angive alle variabler.
CFos Charging Manager forsøger at beregne værdierne ud fra de eksisterende variabler. import_wh, export_wh: Charging Manager bruger disse variabler til at vise import_wh og export_wh. For ensrettede målere (f.eks. invertere) bør du kun definere import_wh.
Kun for tovejsmålere (f.eks. lager- eller netreferencemålere) skal export_wh defineres. soc: Hvis det er tilgængeligt, vises opladningstilstanden for et batterilager her i % i flisen.
Du kan også definere andre variabler med forskellige navne, som aflæses ved hver opdatering eller beregnes ved hjælp af formler. Hvis du definerer variabler, der begynder med "CM.", f.eks. CM._set_price, gemmes de tildelte værdier i de globale Charging Manager-variabler (se nedenfor) og kan forespørges i overensstemmelse hermed.
Variabler med *: Hvis du definerer variabler, der begynder med '*', vises de i brugergrænsefladen i målerflisen under udvidet information, f.eks. temperaturen på en batterilagringsenhed.
Bemærk: Kun tal og bogstaverne a-z og A-Z må bruges som variabelnavne.
Objektet er opkaldt efter navnet på den ovenfor anførte variabel og har følgende egenskaber: fixed: String med en fast værdi.
Nyttigt, hvis der f.eks. ikke kan bestemmes nogen værdi, f.eks. for type_designation eller voltage. expr: String.
Variablen læses ikke ud, men evalueres som en formel. type: Hvis ikke fixed eller expr, variablens type: int16, uint16, int32, uint32, float, int64, string. Dette er vigtigt for Modbus for at kunne læse registrene i det korrekte format. uint16 og uint32 er typer, der kun kan acceptere positive tal.
Med JSON/HTTP kan du normalt bruge float. opløsning: float. Den læste værdi ganges med 'resolution'. Værdier for spænding skal være i volt, strøm i milliampere, effekt i watt, energi i watt-timer (Wh).
Med negativ 'opløsning' kan du invertere en værdi, hvis den har det modsatte fortegn. once: bool (true eller false).
Hvis true, læses værdien kun én gang, når enheden initialiseres, ellers læses den med jævne mellemrum. address: nummer (Modbus) eller streng (HTTP/JSON).
Modbus-registernummeret eller HTTP-URL'en for den værdi, der skal læses. query: Streng.
For HTTP JSON, specifikationen i forespørgselssproget for Charging Manager, hvormed den finder den værdi, der skal læses i JSON-svaret. order: String. For Modbus, byte-rækkefølgen, enten "hl" eller "lh", hvor værdien er til stede. length: number. For Modbus, længden af en streng i registre; for variablerne 'version' og 'firmware_version' bruges 'length' til at omdanne numeriske versioner til strenge med prikker. Værdier på 2 eller 4 er tilladt for 'length', som så resulterer i versionsformaterne a.b og a.b.c.d. Med 'length' 2 og typen 'int16' eller 'uint16' adskiller Charging Manager low og high byte med en prik, med 'int32' eller 'uint32' low og high word, med 'int64' low og high dword. For 'lenth' 4 og 'int32' eller 'uint32' opdeler Charging Manager værdien i 4 bytes adskilt af en prik.
For 'int64' er de 4 ord tilsvarende. regex: Streng. Hvis der er angivet et regulært udtryk, behøver tællersvaret ikke at være i JSON. Enten evalueres hele matchet af det regulære udtryk eller den første gruppe som resultat. Brug kun, hvis enheden ikke returnerer JSON.
Her er en liste over funktioner i vores regulære udtryk: any char: . named classes:
\d \s \w \D \S \W anonyme klasser: [a-z0-9_], [^0-9], [^\d] grupper med alternativer: (ab|cd|ef) ikke-indfangede grupper: (?:ab|cd) (grådig) en gang eller ingen: a?, a???
(grådig) mange eller ingen: a*, a*?
(grådig) en eller flere gange: a+, a+? begyndelsen af strengen: ^ slutningen af stren gen: $
Charging Manager kan anmode om op til 32 inputværdier pr. enhed fra forskellige registre eller JSON-elementer. Egenskaben "Inputs" er et JSON-array.
Du skal definere følgende egenskaber for hvert input: adresse: Adresse (Modbus-register eller URL).
antal:
Antal inputbits, der læses med denne anmodning. query: For HTTP/JSON, forespørgselssprog til at finde værdien i svaret.
CFos Charging Manager læser alle input, der er defineret på denne måde, ved hver opdatering og gemmer bittene internt i et array, som der så kan spørges til ved hjælp af formlerne Input1...InputN.
Charging Manager kan skifte op til 32 udgange pr. enhed. Outputs defineres i "outputs" som et JSON-array af output-objekter. Alle udgange skiftes i slutningen af hver opdateringscyklus, hvis status for den respektive udgang er ændret.
Du skal definere følgende egenskaber i output-objektet for hvert output: adresse: HTTP-URL med valgfri HTTP-metode, f.eks. GET http://www.example.com?output1=${var1}. For at indstille Modbus-registre kan du bruge HTTP-API'en i cFos Charging Manager. Charging Manager genkender passende adgange på localhost og omdirigerer anmodningen til den interne handler, så du ikke har brug for autorisation som ved eksterne HTTP API-adgange. Hvis URL'en er tom efter alle udskiftninger, indstilles der ikke noget output. Du kan f.eks. kun skifte output, hvis visse variabler findes (se formler: exists()-funktionen). Du kan også angive ${address} og ${id} i adressen. Dette er den aktuelle enhedsadresse og Modbus-ID som defineret i indstillingerne.
'address' og 'id' bruges primært til at bruge Modbus API (se nedenfor). body: Valgfri HTTP-body til POST eller PUT.
I URL'en og body'en kan du bruge ${expr} til at bruge formler, der refererer til globale charging manager-variabler eller fra den respektive tæller. Formlen 'expr' evalueres, når outputtet indstilles og erstattes i teksten i URL'en eller body'en. Hvis http://www.example.com?output1=1 i eksemplet ovenfor sætter outputtet, og http://www.example.com?output1=0 sletter det, kan du definere en variabel 'var1' og sætte den til 1 eller 0 efter behov. På denne måde kan du også skrive numeriske værdier for at styre hukommelsesydelsen i Modbus-registre, som du tidligere har gemt i en variabel ved hjælp af en formel.
Hvis du i stedet for at sende en numerisk værdi skal erstatte en tekst i URL'en med en anden afhængigt af formlen, f.eks. for Shelly WLAN-sokler, kan du skrive dette som følger: ${if expr`text1`text2}. "Apostrofen" er et backtick (ASCII-kode 96). Hvis 'expr' != 0, bruges tekst1, ellers tekst2. For Shelly WLAN-soklen ser URL'en således ud, for eksempel: http://<ip-addr>/relay/0?turn=${if expr`on`off}, dvs. hvis expr != 0, kalder Charging Manager http://<ip-addr>/relay/0?turn=on, ellers http://<ip-addr>/relay/0?turn=off.
Hvis du indtaster en relativ sti som URL, vil Charging Manager bruge den adresse, der er konfigureret for den pågældende enhed. Hvis du indtaster 'localhost' som domæne, bruger Charging Manager adressen på den enhed, den kører på. Hvis den genkender adgang til sin egen API, bruger den den interne handler i stedet for at udføre en fuld HTTP-adgang, så du ikke behøver at indtaste et brugernavn og en adgangskode i tællerdefinitionen. En URL, der begynder med en '*', får Charging Manager til altid at udføre en fuld HTTP-adgang.
Nulstil udgange: Ud over et "outputs"-array kan du også definere et array med navnet "resets", der er struktureret som "outputs"-arrayet. Det gør det muligt at nulstille outputs til deres oprindelige værdier, når enheden deaktiveres. Dette kan bruges i kombination med brugerdefinerede variabler og "once": true til at nulstille enheden til dens oprindelige tilstand.
Skriv udgange med jævne mellemrum: For nogle enheder skal udgangene skrives med jævne mellemrum, ellers vil enheden nulstille værdierne til "standard". For eksempel vender Kostal-hukommelsen tilbage til sine standardregler, hvis hukommelseskontrollen ikke er blevet skrevet aktivt i et stykke tid. For at indstille udgange med jævne mellemrum kan du sætte #xxx# foran adressen, hvor xxx angiver, hvor mange sekunder udgangen skal skrives om, selv om den værdi, der skal skrives, er den samme. Hvis adressen f.eks. er /cnf?cmd=set_cm_vars&name=test&val=42, kan du bruge #30#/cnf?cmd=set_cm_vars&name=test&val=42 for at sikre, at denne værdi skrives hvert 30. sekund.
I øjeblikket kan medlemsnavne og operatorerne "." og "[]" bruges i søgeudtrykkene "query", f.eks:
test | Element med navnet "test" |
name1.name2 | Element med navnet "name2" i underobjekt "name1" |
navn[idx] | Element "idx" i objektelementet "name". "idx" kan være et tal, f.eks. for arrays, eller en streng |
name["u2"] | Element "u2" i objektelementet "name", svarer til "name.u2" |
name[{"el1": "v1", "el2": 3}].value | Vælg det arrayelement, der opfylder betingelserne i objektnotationen, og evaluer elementet "value". Her vælges f.eks. i arrayet "name" det element, der som objektelementer har "el1" med værdien "v1" og "el2" med værdien 3, og derefter returneres værdien af elementet "value" fra dette objekt. |
Du kan oprette variabler i Charging Manager-konfigurationen. Du kan bruge en fast værdi eller en formel som værdi. Ved afslutningen af hver opdateringscyklus genberegner Charging Manager værdien af disse variabler, hvis det er nødvendigt. Du kan derefter bruge dem i (visse) Charging Manager-parametre, opkrævningsregler eller til at styre outputs. Du kan også skrive Ex.member eller Mx.member som en variabel. I dette tilfælde er Exog Mxenheds-id'et for en wallbox eller måler, der er sat op i Charging Manager. 'member' er en "brugerdefineret" variabel, som gemmes i den tilsvarende enhed. Nogle af variablerne kan have en særlig betydning: For KEBA er 'out1' en skifteudgang, for ABB B23-målere er 'out1' og 'out2' skifteudgange (for modeller, der understøtter dette). Et 1 slår udgangen til, et 0 slår den fra igen.
Hvis du har apparater, der skal tændes under visse betingelser, men derefter kører i et stykke tid (f.eks. vaskemaskine, opvaskemaskine), kan du også definere variablen som en "trigger". Så er variablens formel den betingelse, hvor variablen sættes til 1. Efter en justerbar tid sættes den så til 0 igen. En "retrigger-betingelse" gør det muligt at forlænge tiden indtil slukning (dvs. sætte variablen til 0) igen og igen, så længe betingelsen er opfyldt.
Bemærk: Kun tal og bogstaverne a-z og A-Z må bruges som variabelnavne.
Til testformål kan du vise opladningsadministrator og målervariabler, f.eks. de aktuelle Awattar-priser:
I Charging Manager-konfigurationen kan du konfigurere globale udgange som beskrevet ovenfor i tællerdefinitionen under "Udgange". Disse indstilles i slutningen af hver opdateringscyklus, hvis deres status har ændret sig. Hvis du vil styre skifteudgange i brugerdefinerede enheder, anbefales ovenstående konvention (se Charging Manager-variabler): Du indstiller variabler med navnene "out1", "out2" osv. i den brugerdefinerede tæller og opretter udgange i den brugerdefinerede tæller, som skifter udgang afhængigt af værdien af disse variabler.
Modbus-API'en i Charging Manager bruges til at styre Modbus-enheder, der har en Modbus RTU- eller TCP-adresse (tilgængelig fra Charging Manager). Som i konfigurationen af de enkelte enheder skal du indtaste COMx,bd,8,p,s som adresse for Modbus RTU, hvor x er COM-portnummeret, bd baud-hastigheden, p pariteten ('N', 'E' eller 'O') og s antallet af stopbits (1 eller 2). For Modbus TCP er adressen IP-adressen på enheden i Charging Manager-netværket, inklusive portnummeret.
URL'en (for HTTP GET) til Modbus API er: /cnf?cmd=modbus_get eller /cnf?cmd=modbus_set cFos Charging Manager understøtter følgende yderligere forespørgselsparametre: addr:
Modbus RTU- eller TCP-enhedens adresse nævnt ovenfor. func: Modbus-funktionsnummer, f.eks. til læsning af 3 eller 4, til skrivning af 6 eller 16. id: Modbus-enhedens enheds-ID. reg: Modbus-registernummeret.
Værdien kan angives i decimal eller hex (med præfiks 0x). val: nummer: Værdi, der skal skrives til registeret.
Udelades ved læsning. type: 'w' 16bit (standard), d = 32bit, f = float, q = 64bit, s = string.
c nt: tal: Den maksimale længde af strengen i registre, udelad for andre typer eller sæt til 1. order: String: Byte-rækkefølgen, enten "hl" eller "lh".
Bemærk: Hvis din "counter" primært har kontrolopgaver, kan du markere indstillingen "Skjul enhed" i indstillingerne for denne flise, så denne enhed ikke vises på startsiden.
Bemærk: Nogle målere, der aflæses via HTTP, kræver et brugernavn/adgangskode som autorisation. Du kan angive dette i adressen for HTTP-adgang, f.eks. med http://username:password@192.168.2.111.
Hvis dit brugernavn eller din adgangskode indeholder et "@", skal du erstatte det med "%40".