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 dina 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. Modbus-räknare läser sina data från vissa register via Modbus, medan HTTP/JSON-räknare hämtar sina data via HTTP-förfrågan och läser in JSON som svar. För MQTT/JSON-mätare prenumererar cFos Charging Manager på MQTT-ämnen och läser meddelanden som publiceras under ämnet som JSON. CFos Charging Manager använder ett litet "frågespråk" för läsning. Här är dokumentationen av MQTT-funktionerna i cFos Charging Manager.
Förutom en rad 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 ingångar och ställa in utgångar. Inläsning av variabler och inställning av utgångar gör det möjligt att analysera formler. 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 möjliggör vissa hemautomationsuppgifter och styrning av externa enheter, t.ex. batterilagringsenheter. Om du genomför kontrolluppgifter med detta, vänligen ge oss feedback. Vi är mycket intresserade av vad våra kunder 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ätareRäknardefinitioner är JSON-filer med ett globalt JSON-objekt som har egenskaper och underobjekt. "rtype" bestämmer typen av läsoperation: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. "mtype" bestämmer enhetstypen: 0 = annan enhet, 1 = mätare, 2 = växelriktare, 4 = batterilagring.
Du kan ange siffror antingen i decimal eller hex med prefixet '0x'. Kommentarer på en rad med '//' är också tillåtna.
Vi rekommenderar att du kör dina definitionsfiler genom en JSON5-validator, t.ex. denna JSON5-validator Du bör definitivt ha läst kapitlet Formler för att förstå vilka värden som kan användas i formler i följande referens.
silence_period, i msec: Bestämmer pauslängden före en Modbus RTU-åtkomst så att enheten känner igen början på ett meddelande. silence_same_slave, true: Pausen upprätthålls även för flera åtkomster till samma enhet. retries: Antalet försök om enheten inte svarar. rcv_timeout: i msec: Den maximala väntetiden tills enheten svarar, per åtkomst.
modbus_read:
Funktionsnumret för Modbus-kommandot för läsning, vanligtvis 3 eller 4. modbus_read_max_registers: Det maximala antalet register som kan läsas åt gången. modbus_allow_gaps: true = oanvända registerområden kan läsas i en läsoperation.
connect_timeout: i msek: Den maximala väntetiden för en TCP-anslutning. delay_after_connect: i msek: Paus efter att anslutningen har upprättats innan det första kommandot skickas.
upd_delay: in msec: Bestämmer det intervall med vilket en enhet kan läsas.
Vissa enheter överbelastas om de tillfrågas för ofta. manufacturer: String, namn på tillverkaren.
Detta visas i den utökade informationen för plattan. delay_accumulated: true = Ackumulerade värden (kWh) frågas endast var 3:e 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 enhetens adress för anrop av 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.
Nästa steg i JSON-definitionen är 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 osv.
Charging Manager känner igen följande variabler: type_designation, version, firmware_version, serial: Dessa utgör modellbeteckningen, som visas i den utökade informationen på brickan.
Dessa efterfrå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 från dessa värden för voltage_l1..l3, signed current_l1..l3, power_w och power_va. 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 endast definiera import_wh.
Endast för dubbelriktade mätare (t.ex. lagrings- eller nätreferensmätare) ska export_wh definieras. soc: Om tillgängligt visas laddningsstatus för ett batterilager här i % i rutan.
Du kan även definiera andra variabler med andra namn, som läses ut vid varje uppdatering eller beräknas med hjälp av formler. Om du definierar variabler som börjar med "CM.", t.ex. CM._set_price, lagras de tilldelade värdena i de globala Charging Manager-variablerna (se nedan) och kan efterfrågas på motsvarande sätt.
Variabler med *: Om du definierar variabler som börjar med "*" visas dessa i användargränssnittet i mätarkaklet under utökad information, t.ex. temperaturen i en batterilagringsenhet.
Observera: Endast siffror och bokstäverna a-z och A-Z får användas som variabelnamn.
Objektet är uppkallat efter namnet på variabeln som anges ovan och har följande egenskaper: fixed: Sträng med ett fast värde.
Användbart t.ex. om inget värde kan bestämmas, t.ex. för typbeteckning eller spänning. expr: Sträng.
Variabeln läses inte ut utan utvärderas som en formel. type: Om inte fixed eller expr, variabelns typ: int16, uint16, int32, uint32, float, int64, string. Detta är viktigt för Modbus för att kunna läsa registren i rätt format. uint16 och uint32 är typer som bara kan acceptera positiva tal.
Med JSON/HTTP kan du vanligtvis använda float. upplösning: float. Det avlästa värdet multipliceras med "resolution". Värden för spänning måste vara i volt, ström i milliampere, effekt i watt, energi i watt-timmar (Wh).
Med negativ "upplösning" kan du invertera ett värde om det har motsatt tecken. once: bool (true eller false).
Om true, läses värdet bara en gång när enheten initieras, annars läses det regelbundet. address: nummer (Modbus) eller sträng (HTTP/JSON).
Modbus-registernumret eller HTTP-URL:en för det värde som ska läsas. query: Sträng.
För HTTP JSON, specifikationen i frågespråket för Charging Manager med vilken den hittar det värde som ska läsas i JSON-svaret. order: Sträng. För Modbus, den byteordning, antingen "hl" eller "lh", som värdet finns i. length: number. För Modbus, längden på en sträng i register; för variablerna "version" och "firmware_version" används "length" för att omvandla numeriska versioner till strängar med punkter. Värdena 2 eller 4 är tillåtna för 'length', vilket resulterar i versionsformaten a.b och a.b.c.d. Med 'length' 2 och typ 'int16' eller 'uint16' separerar Charging Manager låg- och högbyte med en punkt, med 'int32' eller 'uint32' låg- och högord, med 'int64' låg- och högord. För 'lenth' 4 och 'int32' eller 'uint32' delar avgiftsadministratören upp värdet i 4 byte åtskilda av en punkt.
För 'int64' är de 4 orden i enlighet med detta. regex: Sträng. Om ett reguljärt uttryck anges behöver räknesvaret inte vara i JSON. Antingen utvärderas hela matchningen av det reguljära uttrycket eller den första gruppen som resultat. Använd endast om enheten inte returnerar JSON.
Här är en lista över funktioner i våra reguljära uttryck: alla tecken: . namngivna klasser:
\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 inga: a*, a*?
(greedy) en eller flera gånger: a+, a+? början av strängen: ^ slutet av str ängen: $
Charging Manager kan begära upp till 32 ingångsvärden per enhet från olika register eller JSON-element. Egenskapen "Inputs" är en JSON-array.
Du måste definiera följande egenskaper för varje ingång: address: Adress (Modbus-register eller URL).
count:
Antal ingångsbitar som läses 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 lagrar bitarna internt i en array, som sedan kan efterfrågas i formlerna Input1..InputN.
Charging Manager kan växla upp till 32 utgångar per enhet. Utgångarna definieras i "outputs" som en JSON-array med utgångsobjekt. Alla utgångar växlas i slutet av varje uppdateringscykel om statusen för respektive utgång har ändrats.
Du måste definiera följande egenskaper i utgångsobjektet för varje utgång: address: 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 känner igen lämpliga åtkomster på localhost och omdirigerar begäran till den interna hanteraren så att du inte behöver någon auktorisering som med externa HTTP API-åtkomster. Om URL:en är tom efter alla utbyten anges ingen utgång. Du kan t.ex. bara växla utdata om vissa variabler finns (se formler: exists()-funktionen). Du kan också ange ${address} och ${id} i adressen. Detta är den aktuella enhetens adress och Modbus-ID som definierats i inställningarna.
"address" och "id" används huvudsakligen för att använda Modbus API (se nedan). body: Valfri HTTP-body för POST eller PUT.
I URL:en och brödtexten kan du använda ${expr} för att använda formler som refererar till globala laddningshanterarvariabler eller från respektive räknare. Formeln "expr" utvärderas när utdata ställs in och ersätts i texten i URL:en eller brödtexten. Om, i exemplet ovan, http://www.example.com?output1=1 ställer in utdata 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 efter behov. På detta sätt kan du också skriva 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 behöver ersätta en text i URL:en med en annan beroende på formeln, t.ex. för Shelly WLAN-uttag, kan du skriva detta enligt följande: ${if expr`text1`text2}. "Apostrofen" är en backtick (ASCII-kod 96). Om 'expr' != 0 används text1, annars text2. För Shelly WLAN-uttaget ser URL:en ut så här, till exempel: http://<ip-addr>/relay/0?turn=${if expr`on`off}, dvs. om expr != 0 anropar 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 kommer Charging Manager att använda den adress som har konfigurerats för respektive enhet. Om du anger "localhost" som domän använder Charging Manager adressen till den enhet som den körs på. Om den känner igen åtkomst till sitt eget API använder den den interna hanteraren istället för att utföra en fullständig HTTP-åtkomst så att du inte behöver ange ett användarnamn och lösenord i räknardefinitionen. En URL som börjar med "*" gör att Charging Manager alltid utför en fullständig HTTP-åtkomst.
Återställ utgångar: Förutom en "outputs"-array kan du också definiera en array med namnet "resets" som är strukturerad som "outputs"-arrayen. Detta gör att utgångar kan återställas till sina ursprungliga värden när enheten avaktiveras. Detta kan användas i kombination med användardefinierade variabler och "once": true för att återställa enheten till dess ursprungliga tillstånd.
Skriva utgångar periodiskt: För vissa enheter måste utgångarna skrivas med jämna mellanrum, annars återställer enheten värdena till "default". Kostal-minnet återgår t.ex. till sina standardregler om minneskontrollen inte har skrivits aktivt på ett tag. För att ställa in utgångar periodiskt kan du prefixera adressen med #xxx#, där xxx anger hur många sekunder utgången skrivs om, även om värdet som ska skrivas har förblivit detsamma. Om adressen t.ex. är /cnf?cmd=set_cm_vars&name=test&val=42 kan du använda #30#/cnf?cmd=set_cm_vars&name=test&val=42 för att se till att detta värde skrivs var 30:e sekund.
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 av 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) Charging Manager-parametrar, laddningsregler eller för att styra utgångar. Du kan också skriva Ex.member eller Mx.member som en variabel. I det här fallet är Exoch Mxenhets-ID för en wallbox eller mätare som konfigurerats i Charging Manager. "member" är en "användardefinierad" variabel som sparas 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 in utgången, en 0 kopplar bort den igen.
Om du har apparater som måste slås på under vissa förhållanden men som sedan körs ett tag (t.ex. tvättmaskin, diskmaskin) kan du också definiera variabeln som en "trigger". Då är variabelns formel det villkor under vilket variabeln sätts till 1. Efter en inställbar tid sätts den sedan till 0 igen. Ett "retriggervillkor" gör att tiden fram till avstängning (dvs. variabeln sätts till 0) kan förlängas om och om igen så länge villkoret är uppfyllt.
Observera: Endast siffror och bokstäverna a-z och A-Z får användas som variabelnamn.
För teständamål kan du visa laddningshanterare och mätarvariabler, t.ex. de aktuella Awattar-priserna:
I konfigurationen av Charging Manager kan du konfigurera globala utgångar enligt beskrivningen ovan i räknardefinitionen under "Utgångar". Dessa ställs in i slutet av varje uppdateringscykel om deras status har ändrats. Om du vill styra kopplingsutgångar i användardefinierade enheter rekommenderas ovanstående konvention (se Charging Manager-variabler): Du ställer in variabler med namnen "out1", "out2", etc. 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 (åtkomlig från Charging Manager). Precis som i konfigurationen av de enskilda enheterna anger du COMx,bd,8,p,s som adress för Modbus RTU, där x är COM-portnumret, bd baudhastigheten, p pariteten ('N', 'E' eller 'O') och s antalet stoppbitar (1 eller 2). För Modbus TCP är adressen IP-adressen för enheten i Charging Manager-nätverket, 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-enhetens adress som nämns ovan. func: Modbus-funktionsnummer, t.ex. för att läsa 3 eller 4, för att skriva 6 eller 16. id: Modbus-enhetens enhets-ID. reg: Modbus-registernumret.
Värdet kan anges i decimal eller hex (med prefix 0x). val: number: Värde som ska skrivas till registret.
Utelämnas vid läsning. type: 'w' 16bit (standard), d = 32bit, f = float, q = 64bit, s = string.
c nt: number: Den maximala längden på strängen i register, utelämnas för andra typer eller sätts till 1. order: String: 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".