Dokumentasjon

Egendefinerte tellere

Merk: cFos Charging Manager kan lese ut de fleste solcelleomformere som bruker SunSpec (enhetstype "SunSpec Solar Inverter / Meter"). I dette tilfellet trenger du ikke å opprette en egen målerdefinisjon.

Med cFos Charging Manager kan du opprette dine egne målerdefinisjoner for å støtte målere som ikke er i standardrepertoaret. Det finnes for øyeblikket tre typer: Modbus-tellere, HTTP/JSON-tellere og MQTT/JSON-tellere. Definisjonsfilene for disse tellerne er svært like. Modbus-tellere leser dataene sine via Modbus fra spesifikke registre, mens HTTP/JSON-tellere henter dataene sine via HTTP-forespørsel og analyserer JSON som svar. For MQTT/JSON-tellere abonnerer cFos Charging Manager på MQTT-emner og analyserer meldinger publisert under emnet som JSON. For parsing bruker cFos Charging Manager et lite "spørrespråk". Her er dokumentasjonen av MQTT-funksjonene i cFos Charging Manager.

I tillegg til en rekke forhåndsdefinerte variabler, som strøm og spenning, kan brukerdefinerte tellere også lese inn ukjente brukerdefinerte variabler, forespørre innganger og angi utganger. Innlesing av variabler og innstilling av utganger gjør det mulig å evaluere formler. I kombinasjon med Charging Manager-variablene og de globale Charging Manager-utgangene som er beskrevet nedenfor, er dette en kraftig funksjon som til og med tillater visse hjemmeautomatiseringsoppgaver og styring av eksterne enheter som batterilagring. Hvis du realiserer kontrolloppgaver med dette, vennligst gi oss tilbakemelding. Vi er veldig interessert i hva folk kontrollerer med cFos Charging Manager, og det hjelper oss med å videreutvikle Charging Manager i henhold til kundenes behov.

Her er en enkel eksempeldefinisjon for Modbus som leser et enkelt register for aktiv effekt. Du kan enkelt endre registernummeret for din spesifikke applikasjon:
Eksempel på definisjon for et enkelt register.

Her er et eksempel på en definisjon for Modbus og en for HTTP/JSON:
Last ned eksempel på definisjon for Modbus-teller
Last ned eksempeldefinisjon for HTTP/JSON-teller

Noen få slike filer er allerede inkludert i Charging Manager, men du kan laste opp dine egne filer under "System Configuration" og også slette dem igjen.
Her finner du de fleste av målerdefinisjonene vi tilbyr:
Last ned medfølgende tellerdefinisjoner

Hvis du har opprettet din egen målerfil og den kan være relevant for andre brukere, vil vi være veldig takknemlige hvis du kan gjøre den tilgjengelig for oss. Vi vil da levere den med fremtidige versjoner av Charging Manager.

Last ned tellerdefinisjoner for flere tellere

Oppbygging av en definisjonsfil:

Målerdefinisjoner er JSON-filer med et globalt JSON-objekt som har egenskaper og underordnede objekter. 'rtype' bestemmer typen leseoperasjon: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Tall kan spesifiseres valgfritt i desimal eller hex med prefiks 0x. I tillegg er kommentarer på én linje med // tillatt. Vi anbefaler å kjøre definisjonsfilene dine gjennom en JSON5-validator, f.eks. denne JSON5-validatoren

Du bør absolutt ha lest kapittelet Formler for å forstå hvilke verdier som kan brukes i formler i følgende referanse.

Modbus-definisjoner har et objekt "rtu" med følgende egenskaper:

silence_period, i msek. bestemt, pauselengden før en Modbus RTU-tilgang, slik at enheten gjenkjenner starten på en melding.
silence_same_slave, true: Pausen overholdes også ved flere tilganger til samme enhet.
retries: Antall nye forsøk hvis enheten ikke svarer.
rcv_timeout: i msek. den maksimale ventetiden per tilgang til enheten svarer.

Disse globale egenskapene gjelder for Modbus TCP og RTU:

modbus_read: Funksjonsnummeret til Modbus-lesekommandoen, vanligvis 3 eller 4.
modbus_read_max_registers: Maksimalt antall registre som kan leses om gangen.
modbus_allow_gaps: true = Ubrukte registerområder kan leses i en leseoperasjon.

For Modbus TCP og HTTP/JSON finnes det et objekt "tcp" med følgende egenskaper:

connect_timeout: er msec. den maksimale ventetiden for en TCP-tilkobling.
delay_after_connect: i msec. Pause etter at tilkoblingen er opprettet før den første kommandoen sendes.

Begge definisjonstypene (Modbus og HTTP/JSON) har følgende tilleggsegenskaper:

upd_delay: i msec. bestemmer intervallet for når en enhet kan leses. Noen enheter blir overbelastet hvis de forespørres for ofte.
manufacturer: String, navn på produsenten. Dette vises i den utvidede informasjonen på flisen.
delay_accumulated: true = Akkumulerte verdier (kWh) spørres bare etter hvert 3. sekund eller hvis det er nok strøm. false = Disse verdiene spørres alltid etter.
ui_addr: URL, hvis forskjellig fra enhetsadressen for oppkalling av webgrensesnittet.
reserved: Matrise med verdier som tolkes som 0 (nyttig hvis enheten støtter visse verdier avhengig av modell).

Hvis du utelater egenskapene som er oppført ovenfor, bruker cFos Charging Manager standardverdier som fungerer bra i de fleste tilfeller.

Neste trinn i JSON-definisjonen er definisjonen av variabler som måleren bruker til å lese av eller beregne verdier for strøm, spenning osv. Følgende variabler brukes av Charging Manager. Charging Manager kjenner følgende variabler:
type_designation, version, firmware_version, serial: Disse danner modellnavnet som vises i den utvidede informasjonen i flisen. Disse forespørres én gang når måleren settes opp eller tilbakestilles.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Charging Manager forsøker å beregne verdier for voltage_l1..l3, signed current_l1..l3, power_w og power_va ut fra disse. Du trenger ikke å spesifisere alle variablene. CFos Charging Manager forsøker å beregne verdiene fra de eksisterende variablene.
import_wh, export_wh: Charging Manager bruker disse variablene til å vise import_wh og export_wh. For enveismålere (f.eks. vekselrettere) bør du alltid bare definere import_wh. Export_wh skal bare defineres for toveismålere (f.eks. akkumulatortanker eller nettreferansemålere).

soc: Hvis tilgjengelig, vises ladetilstanden til en akkumulatortank i % i flisen.
I tillegg kan du definere andre variabler med andre navn som leses av ved hver oppdatering eller beregnes ved hjelp av formler. Hvis du definerer variabler som begynner med CM., f.eks. CM._set_price, lagres de tilordnede verdiene i de globale Charging Manager-variablene (se nedenfor) og kan spørres etter.
Variabler med *: Hvis du definerer variabler som begynner med *, vises de i brukergrensesnittet i flisen på måleren under utvidet informasjon, f.eks. temperaturen på et batterilager.

Definisjon av en variabel:

Objektet er oppkalt etter variabelen som er oppført ovenfor og har følgende egenskaper:
fixed: Streng med fast verdi. Nyttig hvis f.eks. ingen verdi kan bestemmes, f.eks. for type_betegnelse eller spenning.
expr: String, variabelen leses ikke ut, men evalueres som en formel.
type: Hvis ikke fixed eller expr, variabelens type: int16, int32, float, int64, string. Dette er viktig for Modbus for å lese ut registrene i riktig format. For JSON/HTTP kan du vanligvis ta float.
resolution: float, den leste verdien multipliseres med 'resolution'. Verdier for spenning må være i volt, strøm i milliampere, effekt i watt, energi i wattimer (Wh). Med negativ "oppløsning" kan du invertere en verdi hvis den har motsatt fortegn.
once: bool (true eller false), hvis true, leses verdien bare én gang når enheten initialiseres, ellers med jevne mellomrom.
address: nummer (Modbus) eller streng (HTTP/JSON), Modbus-registernummeret eller HTTP-URL-en til verdien som skal leses.
query: Streng, for HTTP JSON spesifikasjonen i spørrespråket til Charging Manager, som den finner verdien som skal leses i JSON-svaret.
order: Streng, for Modbus byte-rekkefølgen, enten "hl" eller "lh", der verdien er til stede. length: tall, for Modbus lengden på en streng i registre. Med variablene "version" og "firmware_version" brukes "length" til å gjøre numeriske versjoner om til strenger med punkter. Verdiene 2 eller 4 er tillatt for 'length', som da resulterer i versjonsformatene a.b og a.b.c.d. For 'length' 2 og type 'int16' skiller Charging Manager lav og høy byte med punkt, for int32 lav og høy ord, for 'int64' lav og høy dword. For 'lenth' 4 og 'int32' deler Charging Manager opp verdien i 4 byte atskilt med en prikk. For 'int64' de 4 ordene tilsvarende.
regex: String. Hvis et regulært uttrykk er spesifisert, trenger ikke svaret fra telleren å være i JSON. Som et resultat evalueres enten hele samsvaret med det regulære uttrykket eller den første gruppen. Bruk bare hvis enheten ikke returnerer JSON. Her er listen over funksjoner i våre regulære uttrykk:
any char: .
navngitte klasser: \d \s \w \D \S \W
anonyme klasser: [a-z0-9_], [^0-9], [^\d]
grupper med alternativer: (ab|cd|ef)
ikke-fangede grupper: (?:ab|cd)
(grådig) en gang eller ingen: a?, a???
(grådig ) mange eller ingen: a*, a*?
(grådig) en gang eller flere: a+, a+?
begynnelsen av strengen: ^
slutten av strengen: $

Definisjon av innsatsfaktorer:

Charging Manager kan forespørre opptil 32 inngangsverdier fra forskjellige registre eller JSON-elementer per enhet. Egenskapen "Innganger" er en JSON-matrise. Du må definere følgende egenskaper for hver inngang:
address: Adresse (Modbus-register eller URL).
antall: Antall inngangsbiter som skal leses med denne forespørselen.
query: For HTTP/JSON, spørrespråk for å finne verdien i svaret.

CFos Charging Manager leser alle innganger definert på denne måten med hver oppdatering og plasserer bitene internt i en matrise som deretter kan spørres med i formler, Input1..InputN..

Definisjon av resultater:

Charging Manager kan bytte opptil 32 utganger per enhet. Utgangene defineres i "utganger" som en JSON-matrise med utgangsobjekter. Alle utganger byttes på slutten av hver oppdateringssyklus hvis statusen til den respektive utgangen har endret seg.
For hver utgang må du definere følgende egenskaper i utgangsobjektet:
adresse: HTTP-URL med valgfri HTTP-metode, f.eks. GET http://www.example.com?output1=${var1}. For å angi Modbus-registre kan du bruke HTTP-API-et til cFos Charging Manager. Charging Manager oppdager matchende tilganger på localhost og omdirigerer forespørselen til den interne behandleren, slik at du ikke trenger autorisasjon som ved eksterne HTTP API-tilganger. Hvis URL-adressen er tom etter alle utskiftninger, angis ingen utdata. Du kan for eksempel bare bytte utdata hvis visse variabler finnes (se formler: exists()-funksjonen). I adressen kan du i tillegg spesifisere ${address} og ${id}. Dette er den aktuelle enhetsadressen og Modbus-ID-en som definert i innstillingene. Adresse og id brukes hovedsakelig ved bruk av Modbus API (se nedenfor).
body: Valgfri HTTP body for POST eller PUT.
I URL-adressen og brødteksten kan du bruke ${expr}-formler som refererer til globale Charging Manager-variabler eller fra den respektive telleren. Formelen 'expr' evalueres ved innstilling av utdata og erstattes i teksten i URL-adressen eller brødteksten. Hvis http://www.example.com?output1=1 i eksemplet ovenfor setter utdataene og http://www.example.com?output1=0 sletter dem, kan du definere en variabel 'var1' og sette den til 1 eller 0 etter ønske. På denne måten kan du også skrive numeriske verdier for å styre minneytelsen i Modbus-registre som du tidligere har lagret i en variabel ved hjelp av en formel.
Hvis du i stedet for å sende en tallverdi i URL-adressen må erstatte en tekst med en annen avhengig av formelen, for eksempel med Shelly WLAN-sokler, kan du skrive det slik: ${if expr`text1`text2}. Apostrofen er en backtick (ASCII-kode 96). Hvis 'expr' != 0, settes tekst1 inn, ellers tekst2. For Shelly WLAN-kontakten ser URL-adressen slik ut: http://<ip-addr>/relay/0?turn=${if expr`on`off}, dvs. hvis expr != 0, kaller Charging Manager http://<ip-addr>/relay/0?turn=on, ellers http://<ip-addr>/relay/0?turn=off.

Hvis du angir en relativ bane som URL-adresse, tar Charging Manager adressen som er konfigurert for den aktuelle enheten. Hvis du angir "localhost" som domene, bruker Charging Manager adressen til enheten den kjører på. Hvis den oppdager en tilgang til sitt eget API, bruker den den interne håndteringen i stedet for å utføre en fullstendig HTTP-tilgang, slik at du ikke trenger å lagre brukernavn og passord i tellerdefinisjonen. En URL-adresse som starter med en * vil føre til at Charging Manager alltid utfører en fullstendig HTTP-tilgang.

Tilbakestill utganger: I tillegg til en "outputs"-array kan du også definere en array med navnet "resets" som er strukturert på samme måte som "outputs"-arrayen. Denne kan brukes til å tilbakestille utgangene til sine opprinnelige verdier når enheten deaktiveres. Med dette, i kombinasjon med brukerdefinerte variabler og "once": true, kan du sette enheten tilbake til sin opprinnelige tilstand.
Skriv utganger med jevne mellomrom: For noen enheter må utgangene skrives med jevne mellomrom, ellers tilbakestiller enheten verdiene til "standard". Kostal-minnet bruker for eksempel standardreglene på nytt hvis minnekontrollen ikke har blitt skrevet aktivt på en stund. For å angi utganger med jevne mellomrom kan du sette #xxx# foran adressen, der xxx angir hvor mange sekunder utgangen skal skrives om, selv om verdien som skal skrives, er den samme. Hvis adressen for eksempel er /cnf?cmd=set_cm_vars&name=test&val=42, kan du bruke #30#/cnf?cmd=set_cm_vars&name=test&val=42 for å sikre at denne verdien skrives hvert 30. sekund.

Definisjon av spørrespråk:

For øyeblikket kan medlemsnavn og operatorene "." og "[]" brukes i søkeuttrykkene "query", eksempler:

testElement kalt "test
navn1.navn2Elementet "name2" i underobjektet "name1"
navn[idx]Elementet "idx" av objektelementet "name". "idx" kan være et tall, f.eks. for matriser eller en streng
navn["u2"]Element "u2" av objektelementet "name", tilsvarer "name.u2"
name[{"el1": "v1", "el2": 3}].valueVelg matriseelementet som oppfyller betingelsen i objektnotasjonen, og evaluer elementet med navnet "value". Her velges for eksempel i matrisen "name" det elementet som har objektelementene "el1" med verdien "v1" og "el2" med verdien 3, og deretter returneres verdien av elementet "value" fra dette objektet.

Variabler i Global Charging Manager:

Du kan opprette variabler i Charging Manager-konfigurasjonen. Du kan bruke en fast verdi eller en formel som verdi. På slutten av hver oppdateringssyklus beregner Charging Manager om nødvendig verdien av disse variablene på nytt. Du kan deretter bruke dem i (visse) Charging Manager-parametere, Charging Rules eller for å kontrollere utganger. Du kan også skrive Ex.member eller Mx.member som variabler. Her er Exog Mxenhets-ID-en til en ladeboks eller måler som er konfigurert i Charging Manager. member er en "brukerdefinert" variabel som er lagret i den tilsvarende enheten. Noen av variablene kan ha en spesiell betydning: For KEBA er "out1" en koblingsutgang, for ABB B23-målere er "out1" og "out2" koblingsutganger (for modeller som støtter dette). En 1 slår på utgangen, en 0 slår den av igjen.

Hvis du har apparater som må slås på under visse betingelser, men som deretter går en stund (f.eks. vaskemaskin, oppvaskmaskin), kan du også definere variabelen som en "trigger". Formelen for variabelen er da betingelsen som setter variabelen til 1. Etter en justerbar tid settes den deretter til 0 igjen. En "retriggerbetingelse" gjør det mulig å forlenge tiden frem til utkobling (dvs. sette variabelen til 0) igjen og igjen så lenge betingelsen er oppfylt.

For testformål kan du vise Charging Manager og målervariabler, f.eks. gjeldende Awattar-priser:


                        Skjermbildevisning av tellervariabler

Utganger fra Global Charging Manager:

I Charging Manager-konfigurasjonen kan du konfigurere globale utganger som beskrevet ovenfor i tellerdefinisjonen under "Utganger". Disse stilles inn på slutten av hver oppdateringssyklus hvis statusen deres har endret seg. Hvis du vil kontrollere koblingsutganger i brukerdefinerte enheter, anbefales ovennevnte konvensjon (se Charging Manager-variabler): Du angir variabler med navnene "out1", "out2" osv. i den brukerdefinerte telleren og setter opp utganger i den brukerdefinerte telleren som bytter utgang avhengig av verdien til disse variablene.

Global Modbus API for Charging Manager:

Modbus API i Charging Manager brukes til å kontrollere Modbus-enheter som har en Modbus RTU- eller TCP-adresse (tilgjengelig fra Charging Manager). For Modbus RTU angir du COMx,bd,8,p,s som adresse, der x er COM-portnummeret, bd er baud-hastigheten, p er pariteten ('N', 'E' eller 'O') og s er antall stoppbiter (1 eller 2), som i konfigurasjonen av de enkelte enhetene. For Modbus TCP er adressaten IP-adressen til enheten i Charging Manager-nettverket, inkludert portnummeret.
URL-adressen (for HTTP GET) til Modbus API er:
/cnf?cmd=modbus_get eller /cnf?cmd=modbus_set
cFos Charging Manager støtter følgende ekstra spørringsparametere:
addr: Modbus RTU- eller TCP-enhetsadressen nevnt ovenfor.
func: Modbus-funksjonsnummer, f.eks. for lesing 3 eller 4, for skriving 6 eller 16.
id: Enhets-ID for Modbus-enheten.
reg: Modbus-registernummeret. Verdien kan angis i desimal eller hex (med prefiks 0x).
val: nummer, verdi som skal skrives inn i registeret. Utelates ved lesing.
type: 'w' 16bit (standard), d = 32bit, f = float, q = 64bit, s = string.
cnt: tall, maksimal lengde på strengen i registre, utelates for andre typer eller settes til 1.
order: String, byte-rekkefølgen, enten "hl" eller "lh".

Merk: Hvis "telleren" din primært har kontrolloppgaver, kan du krysse av for alternativet "Skjul enhet" i innstillingene for denne flisen slik at denne enheten ikke vises på startsiden.

Merk: Noen målere som avleses via HTTP krever et brukernavn/passord som autorisasjon. Du kan angi dette i adressen for HTTP-tilgang, f.eks. med http://username:password@192.168.2.111. Hvis brukernavnet eller passordet ditt inneholder en "@", må du erstatte den med "%40".