用戶定義的計數器

注意: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的示例定義,而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 :以毫秒為單位。確定可以讀取設備的時間間隔。輪詢過於頻繁時,某些設備會過載。
manufacturer: 字符串,製造商名稱。這顯示在磁貼的擴展信息中。
delay_accumulated: true = 累計值(kWh)僅每3秒或電量充足時查詢一次。 false = 總是查詢這些值。
ui_addr: URL,如果與調用web界面的設備地址不同。
reserved :值解釋為 0 的數組(如果設備支持某些值,具體取決於型號,則很有用)。

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

JSON 定義的下一步是定義儀表用於讀取或計算電流、電壓等值的變量。計費管理器識別以下變量:
type_designation、version、firmware_version、serial :這些構成模型名稱,如磁貼的擴展信息中所示。這些在設置或重置計數器時被查詢一次。
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3 :cFos Charging Manager 嘗試根據這些值計算有符號的 current_l1..l3、power_w 和 power_va for voltage_l1..l3。您不必指定所有變量。 cFos 計費管理器嘗試根據現有變量計算值。
import_wh、export_wh :計費管理器使用這些變量來計算 import_wh 和 export_wh。您不必指定所有變量。 cFos 計費管理器嘗試根據現有變量計算值。

此外,您可以定義具有不同名稱的其他變量,這些變量在每次更新時讀出或使用公式計算。

變量的定義:

該對像以上面列出的變量命名,並具有以下屬性:
fixed :具有固定值的字符串。例如,如果無法確定值,例如 type_designation 或電壓,則很有用。
expr :字符串,變量不被讀出,而是作為公式計算。
type :如果不是fixed或expr,變量的類型:int16,int32,float,int64,string。這對於Modbus以正確格式讀取寄存器很重要。使用 JSON/HTTP,您主要可以使用浮點數。
分辨率:浮點數,讀取值乘以“分辨率”。電壓值必須以伏特為單位,電流以毫安為單位,功率以瓦特為單位,能量以瓦特小時 (Wh) 為單位。使用負“分辨率”,如果它具有相反的符號,您可以反轉一個值。
地址:數字(Modbus)或字符串(HTTP/JSON),Modbus寄存器號或要讀取的值的HTTP URL。
query: 字符串,使用 HTTP JSON 是 Charging Manager 查詢語言的規範,通過它可以在 JSON 響應中找到要讀取的值。
order :字符串,對於 Modbus 是字節順序,“hl”或“lh”,其中存在值。長度:數字,Modbus 是寄存器中字符串的長度。對於變量 'version' 和 'firmware_version','length' 用於從數字版本中生成帶點的字符串。 'length' 允許值 2 或 4,這會導致版本格式 ab 和 abcd。使用 'length' 2 和類型 'int16',計費管理器用點分隔低字節和高字節,int32 低字節和高字節,'int64' 低字節和高 dword。使用 'lenth' 4 和 'int32',計費管理器將值分成由點分隔的 4 個字節。使用 'int64' 相應的 4 個單詞。

輸入定義:

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

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

輸出定義:

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

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

查詢語言的定義:

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

測試元素名為“測試”
名稱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 再次關閉。

全球充電管理器輸出:

在 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”。