文件

用戶定義的計數器

注意:cFos 充電管理器可以讀取大多數使用 SunSpec(設備類型“SunSpec Solar Inverter / Meter”)的太陽能逆變器。在這種情況下,您不需要創建自己的計數器定義。

cFos Charging Manager 允許您創建自己的儀表定義以支持不在標準目錄中的儀表。目前有三種類型:Modbus計數器、HTTP/JSON計數器和MQTT/JSON計數器。這些計數器的定義文件非常相似。 Modbus 儀表通過 Modbus 從特定寄存器讀取數據,而 HTTP/JSON 儀表通過 HTTP 請求獲取數據並解析 JSON 作為響應。對於 MQTT/JSON 儀表,cFos Charging Manager 訂閱 MQTT 主題並將主題下發布的消息解析為 JSON。 cFos 計費管理器使用一種小型“查詢語言”進行解析。這是cFos 計費管理器中 MQTT 功能的文檔。

除了電流和電壓等許多預定義變量外,用戶定義的儀表還可以讀取未知的、用戶定義的變量、查詢輸入和設置輸出。讀入變量並設置輸出允許對公式進行評估。結合下面描述的充電管理器變量和全局充電管理器輸出,這是一個強大的功能,甚至允許某些家庭自動化任務和外部設備的控制,如電池存儲。如果您用它來執行控制任務,請給我們反饋。我們對人們使用 cFos 充電管理器控制什麼非常感興趣,它有助於我們根據客戶需求進一步開發充電管理器。

這是一個讀取單個有功功率寄存器的簡單示例 Modbus 定義。您可以簡單地更改特定應用程序的註冊號:
單個寄存器的示例定義.

這是Modbus的示例定義,而HTTP/JSON的示例定義:
下載Modbus儀表的樣品定義
下載HTTP/JSON計量器的樣本定義

收費管理器已經附帶了一些此類文件,但是您可以在“系統配置”下上傳自己的文件,也可以再次刪除它們。
在這裡,您將找到我們提供的大部分計數器定義:
下載提供的計數器定義

如果您創建了自己的計數器文件,並且該文件可能與其他用戶相關,則非常感謝您可以將其提供給我們。然後,我們將在將來版本的Charging Manager中提供它。

下載更多計數器的計數器定義

定義文件的結構:

計數器定義是具有全局 JSON 對象的 JSON 文件,該對象具有屬性和子對象。 'rtype' 確定讀取操作的類型:0 = Modbus,1 = HTTP/JSON,2 = MQTT/JSON。您可以指定前綴為 0x 的十進製或十六進制數字。此外,允許使用//的單行註釋。我們建議通過 JSON5 驗證器運行您的定義文件,例如這個JSON5 驗證器

請務必閱讀“公式”一章,以了解以下參考中的公式中可以使用哪些值。

Modbus 定義有一個具有以下屬性的“rtu”對象:

silent_period ,以毫秒為單位。確定 Modbus RTU 訪問之前的暫停長度,以便設備識別消息的開始。
silent_same_slave ,true:即使對同一設備進行多次訪問,也會保持暫停。
retries :設備無響應時的重試次數。
rcv_timeout :以毫秒為單位。每次訪問的最大等待時間,直到設備響應。

這些全局屬性適用於 Modbus TCP 和 RTU:

modbus_read :Modbus 讀取命令的函數號,通常為 3 或 4。
modbus_read_max_registers :一次可以讀取的最大寄存器數。
modbus_allow_gaps: true = 可以在讀取操作中讀取未使用的寄存器區域。

對於 Modbus TCP 和 HTTP/JSON,有一個對象 'tcp' 具有以下屬性:

connect_timeout: 是毫秒。 TCP 連接的最大等待時間。
delay_after_connect :以毫秒為單位。在發送第一個命令之前建立連接後暫停。

兩種定義類型(Modbus 和 HTTP/JSON)還具有以下屬性:

upd_delay :以毫秒為單位。確定可以讀取設備的時間間隔。有些設備在輪詢過於頻繁時會變得過載。
製造商:字符串,製造商名稱。這顯示在圖塊的擴展信息中。
delay_accumulated: true = 僅每 3 秒或有足夠電量時查詢累計值(kWh)。 false = 始終查詢這些值。
ui_addr :URL(如果與調用 Web 界面的設備地址不同)。
保留:值被解釋為 0 的數組(如果設備根據型號支持某些值,則很有用)。

如果省略上面列出的屬性,cFos 充電管理器將採用默認值,在大多數情況下工作正常。

JSON 定義的下一步是定義儀表用來讀取或計算電流、電壓等值的變量。計費管理器可識別以下變量:
type_designation、version、firmware_version、serial :這些構成模型名稱,如磁貼的擴展信息中所示。設置或重置計數器時會查詢一次。
電壓_l1..電壓_l3、電流_l1..電流_l3、power_w、power_var、power_va、power_w_l1..power_w_l3 :cFos充電管理器嘗試根據電壓_l1..l3的這些值計算有符號的current_l1..l3、power_w和power_va。您不必指定所有變量。 cFos 充電管理器嘗試根據現有變量計算值。
import_wh、export_wh :計費管理器使用這些變量來顯示 import_wh 和export_wh。對於單向計數器(例如逆變器),您應該只定義 import_wh。僅應為雙向電錶(例如內存或購買的電錶)定義export_wh。

soc :立即可用,電池存儲的充電狀態在此處以百分比形式顯示在圖塊中。
此外,您可以定義具有不同名稱的其他變量,這些變量會在每次更新時讀出或使用公式計算。如果您定義使用 CM 的變量。首先,例如CM._set_price,分配的值存儲在全局Charging Manager變量中(見下文),並且可以相應地查詢。
帶*變量:如果您定義以*開頭的變量,這些變量將顯示在 UI 的計數器圖塊中的擴展信息下,例如電池存儲的溫度。

變量的定義:

該對像以上面列出的變量命名,並具有以下屬性:
fixed :具有固定值的字符串。例如,如果無法確定任何值(例如,type_designation 或 voltage),則很有用。
expr: 字符串,變量不被讀出而是作為一個公式求值。
type :如果不是 fixed 或 expr,則變量的類型:int16、int32、float、int64、string。這對於 Modbus 以正確的格式讀取寄存器很重要。對於 JSON/HTTP,你主要可以使用 float。
resolution: float,讀取值乘以'resolution'。電壓值必須以伏特為單位,電流以毫安為單位,功率以瓦特為單位,能量以瓦時 (Wh) 為單位。對於負的“分辨率”,如果它具有相反的符號,您可以反轉一個值。
once: bool (true or false),如果為true,則該值僅在設備初始化時讀取一次,否則周期性讀取。
地址:數字 (Modbus) 或字符串 (HTTP/JSON),要讀取的值的 Modbus 寄存器編號或 HTTP URL。
query :字符串,帶有 HTTP JSON 計費管理器查詢語言的規範,它使用它找到要在 JSON 響應中讀取的值。
order :字符串,對於 Modbus 字節順序,“hl”或“lh”,其中存在值。 length :數字,Modbus 是寄存器中字符串的長度。對於變量“version”和“firmware_version”,“length”用於從數字版本中生成帶點的字符串。 'length' 允許值為 2 或 4,這將導致版本格式 ab 和 abcd。對於“長度”2 和類型“int16”,計費管理器用點分隔低字節和高字節,使用 int32 低字和高字,使用“int64”低字和高雙字。對於“lenth”4 和“int32”,計費管理器將值拆分為 4 個字節,以點分隔。相應地使用“int64”這 4 個詞。
正則表達式:字符串。如果指定了正則表達式,則計數器的響應不必採用 JSON 格式。結果,將評估正則表達式的整個匹配項或第一組。請僅在設備不返回 JSON 時使用。以下是我們的正則表達式的功能列表:
任何字符: 。
命名類: \d \s \w \D \S \W
匿名類:[a-z0-9_]、[^0-9]、[^\d]
備選方案組:(ab|cd|ef)
非捕獲組:(?:ab|cd)
(貪心)一次或沒有:一個?,一個??
(貪心)很多或沒有:一個*,一個*?
(貪心)一次或多次:a+,a+?
字符串開頭:^
字符串結尾:$

輸入定義:

Charging Manager 最多可以從每個設備的不同寄存器或 JSON 元素中查詢 32 個輸入值。 “Inputs”屬性是一個 JSON 數組。您必須為每個輸入定義以下屬性:
地址:地址(Modbus 寄存器或 URL)。
count :使用此請求讀取的輸入位數。
query :對於 HTTP/JSON,查詢語言以查找響應中的值。

每次更新時,cFos 充電管理器都會讀取以這種方式定義的所有輸入,並將位內部放置在一個數組中,然後可以在公式 Input1..InputN 中查詢該數組。

輸出定義:

充電管理器可為每個設備切換多達 32 個輸出。輸出在“輸出”下定義為輸出對象的 JSON 數組。如果相應輸出的狀態發生變化,則在每個更新周期結束時切換所有輸出。
您必須在輸出對像中為每個輸出定義以下屬性:
地址:帶有可選 HTTP 方法的 HTTP URL,例如 GET//}。要設置 Modbus 寄存器,您可以使用 cFos Charging Manager HTTP API。計費管理器識別對 localhost 的適當訪問並將請求重定向到內部處理程序,這樣您就不需要授權,就像外部 HTTP API 訪問一樣。如果在所有替換後 URL 為空,則不設置輸出。例如,您只能在某些變量存在時切換輸出(參見公式:exists() 函數)。您還可以在地址中指定 ${address} 和 ${id}。這是設置中設置的當前設備地址和 Modbus ID。地址和 ID 主要用於使用 Modbus API(見下文)。
body :POST 或 PUT 的可選 HTTP 正文。
在 URL 和正文中,您可以使用引用全局計費管理器變量或來自相應儀表的 ${expr} 公式。當在 URL 或主體的文本中設置和替換輸出時,將計算“expr”公式。在上面的例子中,如果//設置了輸出而//清除了它,你可以定義一個變量 'var1' 並設置它根據需要設置為 1 或設置為 0。這樣,您還可以在先前使用公式存儲在變量中的 Modbus 寄存器中寫入用於控制內存性能的數值。
如果不是在 URL 中傳遞數值,而是必鬚根據公式將文本替換為另一個文本,例如使用 Shelly WLAN 套接字,您可以這樣寫:${if expr`text1`text2}。 “撇號”是一個反引號(ASCII 代碼 96)。如果 'expr' != 0,則使用 text1,否則使用 text2。 Shelly WLAN 套接字的 URL 如下所示,例如:http://<>/relay/0?turn=${if expr`on`off},即如果 expr != 0 the Charging Manager then調用 http://<<ip-addr>>/relay/0?turn=on,否則調用 http://<>/relay/0?turn=off。

如果輸入相對路徑作為 URL,計費管理器將使用為相應設備配置的地址。如果您輸入“localhost”作為域,計費管理器將獲取其運行所在設備的地址。如果它檢測到對其自己的 API 的訪問,它會使用內部處理程序而不是執行完整的 HTTP 訪問,這樣您就不必在計量定義中存儲用戶名和密碼。以*開頭的 URL 會導致計費管理器始終執行完整的 HTTP 訪問。

重置輸出:除了“outputs”數組之外,您還可以定義一個名為“resets”的數組,其結構類似於“outputs”數組。這意味著當設備停用時,輸出可以重置為其初始值。這與用戶定義的變量和 "once": true 相結合,允許您將設備恢復到其初始狀態。
定期寫入輸出:對於某些設備,必須定期寫入輸出,否則設備會將值重置為“默認值”。例如,如果一段時間內沒有主動寫入內存控件,Kostal 內存將再次使用其標準規則。要定期設置輸出,您可以在地址前加上#xxx#,其中 xxx 指定重寫輸出的秒數,即使要寫入的值保持不變。比如地址是/cnf?cmd=set_cm_vars&name=test&val=42,那麼可以使用#30#/cnf?cmd=set_cm_vars&name=test&val=42來保證每次寫入這個值30秒變成。

查詢語言的定義:

目前,“查詢”搜索表達式中可以使用成員名稱和運算符“.”。和“[]”被使用,例如:

測試元素名為“測試”
名稱1.名稱2子對象“ name1”中名為“ name2”的元素
名稱[idx]對像元素“name”的元素“idx”。 “idx”可以是數字,例如對於數組或字符串
名稱[“ u2”]對像元素“name”的元素“u2”對應於“name.u2”
名稱[{“el1”:“v1”,“el2”:3}].value選擇滿足對象表示法條件的數組元素並評估名為“值”的元素。例如,在“name”數組中選擇元素,該數組的對像元素“el1”的值為“v1”,“el2”的值為3,然後從該對象返回元素“value”的值.

全局計費管理器變量:

您可以在計費管理器配置中創建變量。您可以使用固定值或公式作為值。在每個更新周期結束時,充電管理器會在必要時重新計算此變量的值。然後,您可以在(某些)計費管理器參數、計費規則或控制輸出中使用這些參數。您也可以將E x.member 或M x.member 寫為變量。這裡E x 和M x 是充電管理器中設置的壁掛盒或儀表的設備 ID。 member 是存儲在相應設備中的“用戶定義”變量。某些變量可能具有特殊含義:對於 KEBA,“out1”是開關輸出,對於 ABB B23 儀表,“out1”和“out2”是開關輸出(適用於支持此功能的型號)。 1 切換輸出,0 再次關閉。

如果您有必須在特定條件下打開但隨後必須運行一段時間的設備(例如洗衣機、洗碗機),您也可以將變量定義為“觸發器”。那麼變量的公式就是設置變量為1的條件。經過一段可調整的時間後,它會重置為 0。只要滿足條件,“重新觸發條件”允許一次又一次地延長直到關閉(即,將變量設置為 0)的時間。

出於測試目的,您可以顯示充電管理器和儀表變量,例如 Awattar 的當前價格:


                        計數器變數的螢幕截圖顯示

全球充電管理器輸出:

在 Charging Manager 配置中,您可以按照上面“輸出”下儀表定義中的描述配置全局輸出。如果它們的狀態發生了變化,它們會在每個更新周期結束時設置。如果要控制用戶定義設備中的開關輸出,建議使用上述約定(請參閱充電管理器變量):在用戶定義儀表中設置名稱為“out1”、“out2”等的變量並設置用戶定義儀表中的輸出 根據此變量的值切換輸出。

充電管理器的全局 Modbus API:

Charging Manager 的 Modbus API 用於控制具有任何 Modbus RTU 或 TCP 地址的 Modbus 設備(可通過 Charging Manager 訪問)。輸入 COMx,bd,8,p,s 作為 Modbus RTU 的地址,就像在單個設備的配置中一樣,其中 x 是 COM 端口號,bd 是波特率,p 是奇偶校驗 ('N', ' E' 或 'O') 和 s 是停止位的數量(1 或 2)。對於 Modbus TCP,地址是充電管理器網絡中設備的 IP 地址,包括端口號。
Modbus API 的 URL(用於 HTTP GET)是:
/cnf?cmd=modbus_get 或/cnf?cmd=modbus_set
cFos 計費管理器支持以下附加查詢參數:
addr :上述 Modbus RTU 或 TCP 設備地址。
func: Modbus 功能編號,例如 3 或 4 用於讀取,6 或 16 用於寫入。
id: Modbus 設備的設備 ID。
reg: Modbus 寄存器號。該值可以指定為十進製或十六進制(帶前綴 0x)。
val :數字,要寫入寄存器的值。閱讀時遺漏。
類型:'w' 16 位(默認),d = 32 位,f = 浮點數,q = 64 位,s = 字符串。
cnt: number,寄存器中字符串的最大長度,其他類型省略或設置為1。
order :包含字節順序的字符串,“hl”或“lh”。

注意:如果您的“儀表”主要用於控制目的,您可以選中此圖塊設置中的“隱藏設備”選項,以便此設備不會出現在起始頁面上。

注意:某些通過 HTTP 讀取的儀表需要用戶名/密碼作為授權。您可以在 HTTP 訪問地址中指定這一點,例如使用http://username:password@192.168.2.111 。如果您的用戶名或密碼包含“@”,則必須將其替換為“%40”。