Brugerdefinerede tællere

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.

CFos Charging Manager giver dig mulighed for at oprette dine egne målerdefinitioner for at understøtte målere, der ikke er i standardrepertoiret. Der findes 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 læser deres data via Modbus fra specifikke registre, mens HTTP/JSON-tællere henter deres data via HTTP-forespørgsel og analyserer JSON som svar. For MQTT/JSON-tællere abonnerer cFos Charging Manager på MQTT-emner og analyserer meddelelser, der offentliggøres under emnet, som JSON-meddelelser. Til parsing bruger cFos Charging Manager et lille "forespørgselssprog". 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å læse ukendte brugerdefinerede variabler, forespørge indgange og indstille udgange. Læsning af variabler og indstilling af udgange gør det muligt at evaluere formler. I kombination med Charging Manager-variablerne og de globale Charging Manager-udgange, der er beskrevet nedenfor, er dette en kraftfuld funktion, som endda giver mulighed for visse automatiseringsopgaver i hjemmet og styring af eksterne enheder som f.eks. batterilagring. Hvis du får kontrolopgaver med dette, bedes du give os feedback. Vi er meget interesserede i, hvad folk styrer med cFos Charging Manager, og det hjælper os med at videreudvikle Charging Manager i overensstemmelse med kundernes behov.

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ålere

Strukturen af en definitionsfil:

Målerdefinitioner er JSON-filer med et globalt JSON-objekt, der har egenskaber og underordnede objekter. 'rtype' bestemmer typen af læseoperation: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Tal kan valgfrit angives i decimaltal eller hexatal med præfikset 0x. Desuden er det tilladt at indsætte kommentarer på én linje med //. 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.

Modbus-definitioner har et objekt "rtu" med følgende egenskaber:

silence_period, i msec. bestemt, pauselængden før en Modbus RTU-adgang, så enheden kan genkende starten af en meddelelse.
silence_same_slave, true: Pausen overholdes også ved flere adganger til den samme enhed.
retries: Antallet af forsøg, hvis enheden ikke svarer.
rcv_timeout: i msec. den maksimale ventetid pr. adgang, indtil enheden svarer.

Disse globale egenskaber gælder for Modbus TCP og RTU:

modbus_read: Funktionsnummeret for Modbus-læsekommandoen, 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.

For Modbus TCP og HTTP/JSON findes der et objekt "tcp" med følgende egenskaber:

connect_timeout: er msec. den maksimale ventetid for en TCP-forbindelse.
delay_after_connect: i msec. Hold pause, når forbindelsen er oprettet, før du sender den første kommando.

Begge definitionstyper (Modbus og HTTP/JSON) har følgende yderligere egenskaber:

upd_delay: i msek. bestemmer det interval, hvori en enhed kan læses. Nogle enheder overbelastes, hvis de forespørges for ofte.
manufacturer: String, navnet 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 forskellig fra enhedsadressen 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 de egenskaber, der er anført ovenfor, bruger cFos Charging Manager standardværdier, der fungerer godt i de fleste tilfælde.

I JSON-definitionen er det næste trin definitionen af variabler, som måleren bruger til at aflæse eller beregne værdier for strøm, spænding osv. Charging Manager kender følgende variabler:
type_designation, version, firmware_version, serial: Disse udgør modelnavnet som vist i den udvidede info på flisen. Disse forespørges én gang ved opsætning eller nulstilling af måleren.
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 værdierne for voltage_l1..l3, signed current_l1..l3, power_w og power_va ud fra disse. 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 beregne import_wh og export_wh. Du behøver ikke at angive alle variabler. CFos Charging Manager forsøger at beregne værdierne ud fra de eksisterende variabler.

Derudover kan du definere yderligere variabler med et andet navn, som læses ud ved hver opdatering eller beregnes ved hjælp af formler.

Definition af en variabel:

Objektet er opkaldt efter den ovenfor anførte variabel og har følgende egenskaber:
fixed: String med fast værdi. Nyttigt, hvis der f.eks. ikke kan bestemmes nogen værdi, f.eks. for type_betegnelse eller spænding.
expr: String, variablen læses ikke ud, men evalueres som en formel.
type: Hvis ikke fast eller expr, variablens type: int16, int32, float, int64, string. Dette er vigtigt for Modbus for at kunne læse registrene i det korrekte format. For JSON/HTTP kan du normalt tage float.
resolution: float, den læste værdi ganges med "resolution". Værdierne for spænding skal være i volt, strømme i milliampere, effekt i watt og energi i watttimer (Wh). Negativ "opløsning" giver mulighed for at invertere en værdi, hvis den har det modsatte fortegn.
adresse: Tal (Modbus) eller streng (HTTP/JSON), Modbus-registernummeret eller HTTP-URL'en for den værdi, der skal læses.
forespørgsel: String, 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 den byte-orden, enten "hl" eller "lh", som værdien findes i. length: tal, for Modbus længden af en streng i registre. Med variablerne "version" og "firmware_version" bruges "length" til at omdanne numeriske versioner til strenge med prikker. Værdierne 2 eller 4 er tilladt for "length", hvilket resulterer i versionsformaterne a.b og a.b.c.d. For "længde" 2 og type "int16" adskiller Charging Manager lav og høj byte med et punkt, for int32 lavt og højt ord, for "int64" lavt og højt dword. For "lenth" 4 og "int32" opdeler Charging Manager værdien i 4 bytes adskilt af et punktum. For "int64" er de 4 ord tilsvarende.

Definition af input:

Charging Manager kan forespørge op til 32 inputværdier fra forskellige registre eller JSON-elementer pr. enhed. Egenskaben "Inputs" er et JSON-array. Du skal definere følgende egenskaber for hver indgang:
adresse: Adresse (Modbus-register eller URL).
tæller: Antal inputbits, der skal læses med denne anmodning.
query: For HTTP/JSON, forespørgselssprog til at finde værdien i svaret.

CFos Charging Manager læser alle de input, der er defineret på denne måde, ved hver opdatering og placerer bitsene internt i et array, som derefter kan spørges i formler, Input1..InputN..

Definition af output:

Charging Manager kan skifte op til 32 udgange pr. enhed. Alle udgange skiftes ved slutningen af hver opdateringscyklus, hvis status for den pågældende udgang er ændret.
Du skal definere følgende egenskaber for hvert input:
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'et i cFos Charging Manager til at indstille Modbus-registre. Charging Manager registrerer matchende adganger på localhost og omdirigerer anmodningen til den interne håndtering, så du behøver ikke tilladelse som ved eksterne HTTP API-adgange.
body: Valgfri HTTP body for POST eller PUT.
I URL-adressen og kroppen kan du bruge ${expr}-formler, der henviser til globale variabler i Charging Manager eller fra den respektive tæller. Formlen "expr" evalueres ved indstillingen af output og erstattes i teksten i URL-adressen eller i brødteksten. Hvis http://www.example.com?output1=1 i ovenstående eksempel indstiller output og http://www.example.com?output1=0 sletter det, kan du definere en variabel "var1" og sætte den til 1 eller 0 efter ønske. 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 i URL'en skal erstatte en tekst med en anden afhængig af formlen, f.eks. med Shelly WLAN-socket, kan du skrive det således: ${if expr`text1`text2}. Apostrof er et backtick (ASCII-kode 96). Hvis "expr" != 0, indsættes tekst1, ellers tekst2. For Shelly WLAN-socket ser URL'en så således ud: 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 angiver en relativ sti som URL-adresse, bruger Charging Manager den adresse, der er konfigureret for den pågældende enhed. Hvis du angiver "localhost" som domæne, bruger Charging Manager adressen på den enhed, som den kører på. Hvis den registrerer en adgang til sin egen API, bruger den den interne håndtering i stedet for at udføre en fuld HTTP-adgang, så du ikke behøver at gemme et brugernavn og en adgangskode i tællerdefinitionen. En URL-adresse, der starter med en *, får Chargeing Manager til altid at udføre en fuld HTTP-adgang.

Definition af forespørgselssprog:

I øjeblikket kan medlemsnavne og operatorerne "." og "[]" bruges i søgeudtrykkene "query", f.eks:

testElement med navnet "test"
name1.name2Element 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}].valueVæ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.

Variabler for Global Charging Manager:

Du kan oprette variabler i konfigurationen af Charging Manager. Du kan bruge en fast værdi eller en formel som værdi. Ved slutningen af hver opdateringscyklus genberegner Charge Manager om nødvendigt værdien af disse variabler. Du kan derefter bruge dem i (visse) Charging Manager-parametre, Charging Rules eller til at styre udgange. Du kan også skrive Ex.member eller Mx.member som variabler. Her er Exog Mxenhedens ID for en wallbox eller måler, der er oprettet i Charging Manager. member er en "brugerdefineret" variabel, der er gemt i den tilsvarende enhed. Nogle af variablerne kan have en særlig betydning: For KEBA er "out1" en koblingsudgang, for ABB B23-målere er "out1" og "out2" koblingsudgange (for modeller, der understøtter dette). En 1 slår udgangen til, en 0 slår den fra igen.

Global Charging Manager Outputs:

I konfigurationen af Charging Manager kan du konfigurere globale udgange som beskrevet ovenfor i tællerdefinitionen under "Outputs". Disse sættes ved slutningen af hver opdateringscyklus, hvis deres status er ændret. Hvis du ønsker at styre koblingsudgange i brugerdefinerede enheder, anbefales ovenstående konvention (se Variabler i Charging Manager): Du indstiller variabler med navnene "out1", "out2" osv. i den brugerdefinerede tæller og opretter udgange i den brugerdefinerede tæller, som skifter output afhængigt af værdien af disse variabler.

Global Modbus API for Charging Manager:

Modbus API'en i Charging Manager bruges til at styre Modbus-enheder, der har en hvilken som helst Modbus RTU- eller TCP-adresse (tilgængelig fra Charging Manager). For Modbus RTU skal du indtaste COMx,bd,8,p,s som adresse, hvor x er COM-portnummeret, bd er baudfrekvensen, p er pariteten ("N", "E" eller "O") og s er antallet af stopbits (1 eller 2), som i konfigurationen af de enkelte enheder. For Modbus TCP er adressaten IP-adressen på enheden i Charging Manager's netværk, herunder portnummeret.
URL'en (for HTTP GET) for Modbus API'en er:
/cnf?cmd=modbus_get eller /cnf?cmd=modbus_set
cFos Charging Manager understøtter følgende yderligere forespørgselsparametre:
addr: Ovennævnte Modbus RTU- eller TCP-enhedsadresse.
func: Modbus-funktionsnummer, f.eks. til læsning 3 eller 4, til skrivning 6 eller 16.
id: Enheds-ID for Modbus-enheden.
reg: Modbus-registernummer. Værdien kan angives i decimaltal eller hexatal (med præfikset 0x).
val: tal, værdi, der skal skrives ind i registret. Undlad det ved læsning.
type: "w" 16bit (standard), d = 32bit, f = float, q = 64bit, s = string.
cnt: tal, den maksimale længde af strengen i registre, udelades for andre typer eller sættes til 1.
order: String, byteorden, 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".