Obs: cFos Charging Manager kan läsa av de flesta solvärmare som använder SunSpec (enhetstyp "SunSpec Solar Inverter / Meter"). I detta fall behöver du inte skapa en egen mätardefinition.
Med cFos Charging Manager kan du skapa egna mätardefinitioner för att stödja mätare som inte finns i standardrepertoaren. Det finns för närvarande tre typer: Modbus-räknare, HTTP/JSON-räknare och MQTT/JSON-räknare. Definitionsfilerna för dessa räknare är mycket lika varandra. Modbus-räknare läser sina data via Modbus från specifika register, medan HTTP/JSON-räknare hämtar sina data via en HTTP-förfrågan och analyserar JSON som svar. För MQTT/JSON-räknare prenumererar cFos Charging Manager på MQTT-ämnen och analyserar meddelanden som publiceras under ämnet som JSON. För att analysera använder cFos Charging Manager ett litet "frågespråk". Här finns dokumentation om MQTT-funktionerna i cFos Charging Manager.
Förutom ett antal fördefinierade variabler, t.ex. ström och spänning, kan användardefinierade räknare också läsa in okända användardefinierade variabler, fråga efter ingångar och ställa in utgångar. Genom att läsa in variabler och ställa in utgångar kan formler utvärderas. I kombination med Charging Manager-variablerna och de globala Charging Manager-utgångarna som beskrivs nedan är detta en kraftfull funktion som till och med gör det möjligt att utföra vissa hemautomatiseringsuppgifter och styra externa enheter, t.ex. batterilager. Om du har kontrolluppgifter med detta, vänligen ge oss feedback. Vi är mycket intresserade av vad folk kontrollerar med cFos Charging Manager och det hjälper oss att vidareutveckla Charging Manager enligt kundernas behov.
Här är en enkel exempeldefinition för Modbus som läser ett enda register för aktiv effekt. Du kan enkelt ändra registernumret för din specifika tillämpning:
Exempel på en definition för ett enda register.
Här finns en exempeldefinition för Modbus och en för HTTP/JSON:
Ladda ner exempeldefinitionen för Modbus-mätare
Ladda ner exempeldefinitionen för HTTP/JSON-mätare
Charging Manager har redan några sådana filer, men du kan ladda upp dina egna filer under "Systemkonfiguration" och även radera dem igen.
Här hittar du de flesta av de definitioner av mätare som vi tillhandahåller:
Ladda ner medföljande definitioner av räknare
Om du har skapat en egen räknesystemfil och den kan vara relevant för andra användare, skulle vi vara mycket tacksamma om du kunde göra den tillgänglig för oss. Då kommer vi att leverera den med framtida versioner av Charging Manager.
Ladda ner mätardefinitioner för ytterligare mätareMätardefinitioner är JSON-filer med ett globalt JSON-objekt som har egenskaper och underordnade objekt. "rtype" bestämmer typen av läsoperation: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Tal kan valfritt anges i decimaltal eller hexadikaltal med prefixet 0x. Dessutom är kommentarer på en rad med // tillåtna. Vi rekommenderar att du kör dina definitionsfiler genom en JSON5-validator, t.ex. den här JSON5-validatorn
Du bör definitivt ha läst kapitlet Formler för att förstå vilka värden som kan användas i formlerna i följande referens.
silence_period, i msek. bestäms, pauslängden före en Modbus RTU-åtkomst, så att enheten känner igen början av ett meddelande.
silence_same_slave, true: Pausen observeras också vid flera åtkomster till samma enhet.
retries: Antalet försök om enheten inte svarar.
rcv_timeout: i msek. den maximala väntetiden per åtkomst tills enheten svarar.
modbus_read: Funktionsnumret för Modbus-läsningskommandot, vanligtvis 3 eller 4.
modbus_read_max_registers: Det maximala antalet register som kan läsas samtidigt.
modbus_allow_gaps: true = Oanvända registerområden kan läsas i en läshändelse.
connect_timeout: är msek. den maximala väntetiden för en TCP-anslutning.
delay_after_connect: i msek. Gör en paus efter att anslutningen har upprättats innan du skickar det första kommandot.
upd_delay: i msek. bestämmer det intervall inom vilket en enhet kan läsas. Vissa enheter blir överbelastade om de frågas ut för ofta.
manufacturer: String, tillverkarens namn. Detta visas i plattans utökade information.
delay_accumulated: true = ackumulerade värden (kWh) efterfrågas endast var tredje sekund eller om det finns tillräckligt med ström. false = dessa värden efterfrågas alltid.
ui_addr: URL, om den skiljer sig från enhetsadressen för att ringa webbgränssnittet.
reserved: Array med värden som tolkas som 0 (användbart om enheten stöder vissa värden beroende på modell).
Om du utelämnar de egenskaper som anges ovan tar cFos Charging Manager standardvärden som fungerar bra i de flesta fall.
I JSON-definitionen är nästa steg definitionen av variabler som mätaren använder för att läsa av eller beräkna värden för ström, spänning etc. Följande variabler används av Charging Manager. Charging Manager känner till följande variabler:
type_designation, version, firmware_version, serial: Dessa bildar modellnamnet som visas i den utökade informationen för plattan. Dessa frågas en gång när mätaren konfigureras eller återställs.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Charging Manager försöker beräkna värden för voltage_l1..l3, signerad current_l1..l3, power_w och power_va från dessa. Du behöver inte ange alla variabler. CFos Charging Manager försöker beräkna värdena från de befintliga variablerna.
import_wh, export_wh: Charging Manager använder dessa variabler för att visa import_wh och export_wh. För enkelriktade mätare (t.ex. växelriktare) bör du alltid definiera endast import_wh. Export_wh bör endast definieras för dubbelriktade mätare (t.ex. lagringstankar eller nätreferensmätare).
soc: Om det finns tillgängligt visas laddningstillståndet för en batterilagertank i % i rutan.
user_info: Om det finns tillgängligt visas ytterligare värden i rutan, t.ex. temperaturen för en batterilagertank.
Dessutom kan du definiera andra variabler med ett annat namn som läses ut vid varje uppdatering eller beräknas med hjälp av formler.
Objektet är uppkallat efter variabeln ovan och har följande egenskaper:
fixed: Sträng med fast värde. Användbart om t.ex. inget värde kan fastställas, t.ex. för type_designation eller voltage.
expr: Sträng, variabeln läses inte ut utan utvärderas som en formel.
type: Om inte fixed eller expr, variabelns typ: int16, int32, float, int64, string. Detta är viktigt för Modbus för att läsa ut registren i rätt format. För JSON/HTTP kan du vanligtvis ta float.
resolution: Float, det avlästa värdet multipliceras med "resolution". Värden för spänning måste vara i volt, strömmar i milliampere, effekt i watt, energi i watt-timmar (Wh). Med negativ "resolution" kan du invertera ett värde om det har motsatt tecken.
once: bool (true eller false), om true läses värdet endast en gång när enheten initieras, annars periodiskt.
address: number (Modbus) or string (HTTP/JSON), Modbus-registernumret eller HTTP-URL:en för det värde som ska läsas.
query: String, för HTTP JSON specifikationen i Charging Managers frågespråk, med vilket den hittar det värde som ska läsas i JSON-svaret.
order: String, för Modbus den byteordning, antingen "hl" eller "lh", i vilken värdet finns. length: number, för Modbus längden på en sträng i register. Med variablerna "version" och "firmware_version" används "length" för att omvandla numeriska versioner till strängar med punkter. Värden på 2 eller 4 är tillåtna för "length", vilket då resulterar i versionsformaten a.b och a.b.c.d. För "length" 2 och typ "int16" separerar Charging Manager låg och hög byte med punkt, för int32 låg och hög ord, för "int64" låg och hög dword. För "lenth" 4 och "int32" delar Charging Manager upp värdet i 4 byte som separeras av en punkt. För "int64" är det 4 ord på samma sätt.
regex: String. Om ett reguljärt uttryck anges behöver svaret från räknaren inte vara i JSON. Som ett resultat utvärderas antingen hela matchningen av det reguljära uttrycket eller den första gruppen. Använd endast om enheten inte returnerar JSON. Här är listan över funktioner i våra reguljära uttryck:
any char: .
named classes: \d \s \w \D \S \W
anonyma klasser: [a-z0-9_], [^0-9], [^\d]
grupper med alternativ: (ab|cd|ef)
icke-fångade grupper: (?:ab|cd)
(greedy) en gång eller ingen: a?, a????
(girig ) många eller ingen: a*, a*?
(girig) en eller flera gånger: a+, a+?
början av sträng: ^
slutet av sträng: $
Charging Manager kan fråga upp till 32 ingångsvärden från olika register eller JSON-element per enhet. Egenskapen "Inputs" är en JSON-array. Du måste definiera följande egenskaper för varje ingång:
adress: Adress (Modbus-register eller URL).
räkna: Antal inmatningsbitar som kommer att läsas med denna begäran.
query: För HTTP/JSON, frågespråk för att hitta värdet i svaret.
CFos Charging Manager läser alla ingångar som definierats på detta sätt vid varje uppdatering och placerar bitarna internt i en matris, som sedan kan frågas ut i formlerna Input1..InputN...
Charging Manager kan koppla upp till 32 utgångar per enhet. Utgångarna definieras i "outputs" som en JSON-array av utgångsobjekt. Alla utgångar kopplas om i slutet av varje uppdateringscykel om statusen för respektive utgång har ändrats.
För varje utgång måste du definiera följande egenskaper i utgångsobjektet:
adress: HTTP-URL med valfri HTTP-metod, t.ex. GET http://www.example.com?output1=${var1}. För att ställa in Modbus-register kan du använda HTTP API:et för cFos Charging Manager. Charging Manager upptäcker matchande åtkomster på localhost och omdirigerar förfrågan till den interna hanteraren, så du behöver inte ha någon auktorisering som vid externa HTTP API-åtkomster. Om URL:n är tom efter alla ersättningar anges inget utdata. Du kan till exempel bara byta utgångar om vissa variabler finns (se formler: funktionen exists()). I adressen kan du dessutom ange ${address} och ${id}. Detta är den aktuella enhetsadressen och Modbus-id som definieras i inställningarna. Adress och id används främst för att använda Modbus API (se nedan).
body: Valfri HTTP-korp för POST eller PUT.
I URL och body kan du använda ${expr}-formler som refererar till globala variabler för Charging Manager eller från respektive räknare. Formeln "expr" utvärderas när du ställer in utgången och ersätts i texten i URL:en eller kroppen. Om http://www.example.com?output1=1 i exemplet ovan ställer in utgången och http://www.example.com?output1=0 tar bort den, kan du definiera en variabel "var1" och ställa in den på 1 eller 0 enligt önskemål. På det här sättet kan du också skriva in numeriska värden för att styra minnesprestanda i Modbus-register som du tidigare har lagrat i en variabel med hjälp av en formel.
Om du i stället för att skicka ett numeriskt värde i URL:en behöver ersätta en text med en annan beroende på formeln, till exempel med Shelly WLAN-socklar, kan du skriva det så här: ${if expr`text1`text2}. Apostrof är en backtick (ASCII-kod 96). Om "expr" != 0 infogas text1, annars text2. För Shelly WLAN-uttag ser URL:n ut så här: http://<ip-addr>/relay/0?turn=${if expr`on`off}, dvs. om expr != 0, kallar Charging Manager http://<ip-addr>/relay/0?turn=on, annars http://<ip-addr>/relay/0?turn=off.
Om du anger en relativ sökväg som URL tar Charging Manager den adress som konfigurerats för respektive enhet. Om du anger "localhost" som domän använder Charging Manager adressen för den enhet som den körs på. Om den upptäcker en åtkomst till sitt eget API använder den den interna handläggaren i stället för att utföra en fullständig HTTP-åtkomst, så att du inte behöver lagra användarnamn och lösenord i räknardefinitionen. En URL som börjar med en * gör att Charging Manager alltid utför en fullständig HTTP-åtkomst.
Återställ utgångar: Förutom en array "outputs" kan du också definiera en array med namnet "resets" som är strukturerad som arrayen "outputs". Detta kan användas för att återställa utgångarna till sina ursprungliga värden när enheten avaktiveras. Med detta, i kombination med användardefinierade variabler och "once": true, kan du ställa tillbaka enheten till sitt ursprungliga tillstånd.
För närvarande kan medlemsnamn och operatörerna "." och "[]" användas i sökuttrycken "query", till exempel:
test | Element med namnet "test" |
name1.name2 | Elementet "name2" i underobjektet "name1" |
namn[idx] | Elementet "idx" i objektelementet "name". "idx" kan vara ett nummer, t.ex. för matriser, eller en sträng |
name["u2"] | Elementet "u2" i objektelementet "name", motsvarar "name.u2" |
name[{"el1": "v1", "el2": 3}].value | Välj det element i matrisen som uppfyller villkoren i objektsnotationen och utvärdera elementet som heter "value". Här väljs till exempel i matrisen "name" det element som har som objektelement "el1" med värdet "v1" och "el2" med värdet 3, och sedan returneras värdet av elementet "value" från detta objekt. |
Du kan skapa variabler i konfigurationen för Charging Manager. Du kan använda ett fast värde eller en formel som värde. I slutet av varje uppdateringscykel räknar Charging Manager om värdet på dessa variabler om det behövs. Du kan sedan använda dem i (vissa) parametrar för Charging Manager, Charging Rules eller för att styra utgångar. Du kan också skriva Ex.member eller Mx.member som variabler. Här är Exoch Mxenhetens ID för en vägglåda eller mätare som har ställts in i Charging Manager. member är en "användardefinierad" variabel som lagras i motsvarande enhet. Vissa av variablerna kan ha en speciell betydelse: För KEBA är "out1" en kopplingsutgång, för ABB B23-mätare är "out1" och "out2" kopplingsutgångar (för modeller som stöder detta). En 1 kopplar om utgången, en 0 stänger av den igen.
I konfigurationen av Charging Manager kan du konfigurera globala utgångar enligt beskrivningen ovan i räknardefinitionen under "Outputs". Dessa sätts i slutet av varje uppdateringscykel om deras status har ändrats. Om du vill styra växlingsutgångar i användardefinierade enheter rekommenderas ovanstående konvention (se Variabler för laddningshanteraren): Du ställer in variabler med namnen "out1", "out2" osv. i den användardefinierade räknaren och ställer in utgångar i den användardefinierade räknaren som växlar utgången beroende på värdet på dessa variabler.
Modbus API i Charging Manager används för att styra Modbus-enheter som har en Modbus RTU- eller TCP-adress (tillgänglig från Charging Manager). För Modbus RTU anger du COMx,bd,8,p,s som adress, där x är COM-portnumret, bd är byggnadsfrekvensen, p är pariteten ("N", "E" eller "O") och s är antalet stoppbitar (1 eller 2), enligt konfigurationen av de enskilda enheterna. För Modbus TCP är adressaten IP-adressen för enheten i Charging Managers nätverk inklusive portnumret.
URL:en (för HTTP GET) för Modbus API är:
/cnf?cmd=modbus_get eller /cnf?cmd=modbus_set
cFos Charging Manager stöder följande ytterligare frågeparametrar:
addr: Modbus RTU- eller TCP-enhetsadressen som nämns ovan.
func: Modbus-funktionsnummer, t.ex. för läsning 3 eller 4, för skrivning 6 eller 16.
id: Modbus-enhetens enhets-ID.
reg: Modbus-registernummer. Värdet kan anges i decimaltal eller hexadikalt (med prefixet 0x).
val: nummer, värde som ska skrivas in i registret. Utelämna vid läsning.
typ: "w" 16bit (standard), d = 32bit, f = float, q = 64bit, s = sträng.
cnt: Tal, strängens maximala längd i register, utelämna för andra typer eller sätts till 1.
order: Sträng, byteordningen, antingen "hl" eller "lh".
Observera: Om din "counter" i första hand har kontrolluppgifter kan du kryssa för alternativet "Dölj enhet" i inställningarna för den här plattan så att enheten inte visas på startsidan.
Observera: Vissa mätare som avläses via HTTP kräver ett användarnamn/lösenord som behörighet. Du kan ange detta i adressen för HTTP-åtkomst, t.ex. med http://username:password@192.168.2.111.
Om ditt användarnamn eller lösenord innehåller ett "@" måste du ersätta det med "%40".