Användardefinierade räknare

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 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ätare

Strukturen för en definitionsfil:

Mä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.

Modbusdefinitioner har ett objekt "rtu" med följande egenskaper:

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.

Dessa globala egenskaper gäller för Modbus TCP och RTU:

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.

För Modbus TCP och HTTP/JSON finns det ett objekt "tcp" med följande egenskaper:

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.

Båda definitionstyperna (Modbus och HTTP/JSON) har följande ytterligare egenskaper:

upd_delay: i msek. bestämmer det intervall inom vilket en enhet kan läsas. Vissa enheter överbelastas 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) frågas endast var tredje sekund eller om det finns tillräckligt med ström. false = dessa värden frågas alltid.
ui_addr: URL, om den skiljer sig från enhetsadressen för att ringa upp 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 använder cFos Charging Manager standardvärden som fungerar bra i de flesta fall.

I JSON-definitionen är nästa steg att definiera 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 ställs in 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 beräkna import_wh och export_wh. Du behöver inte ange alla variabler. CFos Charging Manager försöker beräkna värdena från de befintliga variablerna.

Dessutom kan du definiera ytterligare variabler med ett annat namn som läses ut eller beräknas med hjälp av formler vid varje uppdatering.

Definition av en variabel:

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 fast 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 använda float.
resolution: float, det lä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). Negativ "upplösning" gör det möjligt att invertera ett värde om det har motsatt tecken.
adress: nummer (Modbus) eller sträng (HTTP/JSON), Modbus-registernumret eller HTTP-URL för det värde som ska läsas.
query: String, för HTTP JSON specifikationen i det frågespråk som Charging Manager använder för att hitta 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 resulterar i versionerna a.b och a.b.c.d. För "längd" 2 och typ "int16" separerar laddningshanteraren 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 laddningshanteraren upp värdet i fyra bytes som separeras av en punkt. För "int64" är de fyra orden likadana.

Definition av insatsvaror:

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...

Definition av utfall:

Charging Manager kan koppla upp till 32 utgångar per enhet. Alla utgångar kopplas om i slutet av varje uppdateringscykel om statusen för respektive utgång har ändrats.
Du måste definiera följande egenskaper för varje ingång:
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 för cFos Charging Manager. Charging Manager upptäcker matchande åtkomster på localhost och omdirigerar begäran till den interna hanteraren, så du behöver inte ha någon auktorisering som för externa HTTP API-åtkomster.
body: Valfri HTTP-kropp för POST eller PUT.
I URL:en och kroppen kan du använda ${expr}-formler som hänvisar till globala variabler i Charging Manager eller från respektive räknare. Formeln "expr" utvärderas när du ställer in utdata och ersätts i texten i URL:en eller i kroppen. Om, i exemplet ovan, http://www.example.com?output1=1 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å detta sätt 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 istället för att skicka ett numeriskt värde i URL:en behöver ersätta en text med en annan beroende på formeln, som till exempel med Shelly WLAN-sockets, 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-socket 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-adress använder laddningshanteraren den adress som konfigurerats för respektive enhet. Om du anger "localhost" som domän tar Charging Manager adressen till 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.

Definition av språk för förfrågningar:

För närvarande kan medlemsnamn och operatörerna "." och "[]" användas i sökuttrycken "query", till exempel:

testElement med namnet "test"
name1.name2Elementet "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}].valueVä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.

Variabler för Global Charging Manager:

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.

Global Charging Manager Utgångar:

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.

Globalt Modbus API för Charging Manager:

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".