注意: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 文件,該全域 JSON 物件具有屬性和子物件。 'rtype' 決定讀取操作的類型:0 = Modbus,1 = HTTP/JSON,2 = MQTT/JSON。 「mtype」決定設備類型:0 = 其他設備,1 = 儀表,2 = 逆變器,4 = 電池儲存。
您可以指定前綴 0x 的十進位或十六進位數字。使用//單行註解也是允許的。我們建議透過 JSON5 驗證器運行您的定義文件,例如此JSON5 驗證器
請務必閱讀「公式」一章,以了解哪些值可以在以下參考文獻中的公式中使用。
silent_period ,以毫秒為單位。確定 Modbus RTU 訪問之前的暫停長度,以便設備識別消息的開始。
silent_same_slave ,true:即使對同一設備進行多次訪問,也會保持暫停。
retries :設備無響應時的重試次數。
rcv_timeout :以毫秒為單位。每次訪問的最大等待時間,直到設備響應。
modbus_read :Modbus 讀取命令的函數號,通常為 3 或 4。
modbus_read_max_registers :一次可以讀取的最大寄存器數。
modbus_allow_gaps: true = 可以在讀取操作中讀取未使用的寄存器區域。
connect_timeout: 是毫秒。 TCP 連接的最大等待時間。
delay_after_connect :以毫秒為單位。在發送第一個命令之前建立連接後暫停。
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 的計數器圖塊中的擴展信息下,例如電池存儲的溫度。
該物件以上面列出的變數名稱命名,並具有以下屬性:
固定:具有固定值的字串。如果無法確定值(例如 type_designation 或電壓),則很有用。
expr :字串,變數不讀出,而是作為公式計算。
type :如果不是固定的或 expr,則變數的類型:int16、uint16、int32、uint32、float、int64、string,這對於 Modbus 以正確的格式讀取暫存器很重要。 uint16 和 uint32 是只能接受正數的型別。對於 JSON/HTTP,您通常可以使用 float。
解析度:浮點數,讀取值乘以「解析度」。電壓值必須以伏特為單位,電流以毫安為單位,功率以瓦特為單位,能量以瓦時(Wh)為單位。使用負“分辨率”,如果值具有相反的符號,則可以反轉該值。
Once: bool (true 或 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。對於“length”2 和類型“int16”或“uint16”,充電管理器用點分隔低位元組和高字節,對於“int32”或“uint32”低位元組和高字節,對於“int64”低字節和高位元組雙字。對於“lenth”4 和“int32”或“uint32”,計費管理器將值分成由點分隔的 4 個位元組。對於“int64”,這 4 個單字對應。
正規表示式:字串。如果指定了正規表示式,則計數器回應不需要採用 JSON 格式。結果,要麼評估正規表示式的整個匹配,要麼評估第一組。僅當設備不回傳 JSON 時才使用。以下是我們的正規表示式的功能清單:
任何字元:.
命名類別: \d \s \w \D \S \W
匿名類:[a-z0-9_]、[^0-9]、[^\d]
具有替代方案的群組:(ab|cd|ef)
非捕獲組:(?:ab|cd)
(貪婪)一次或一次:a?
(貪婪)很多或沒有:a*,a*?
(貪心)一次或多次: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”等的變量並設置用戶定義儀表中的輸出 根據此變量的值切換輸出。
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”。