注意:cFos 充電管理器可以讀取大多數使用 SunSpec(設備類型“SunSpec Solar Inverter / Meter”)的太陽能逆變器。在這種情況下,您不需要創建自己的計數器定義。
cFos 充電管理器可讓您建立自己的電錶定義,以支援標準庫中未包含的電錶。目前有三種類型: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 驗證器
請務必閱讀「公式」一章,以了解哪些值可以在以下參考文獻中的公式中使用。
silence_period ,以毫秒為單位:確定 Modbus RTU 存取之前的暫停長度,以便裝置識別訊息的開始。
silence_same_slave , true:即使對相同裝置進行多次訪問,也會保持暫停。
retries :設備沒有回應時重試的次數。
rcv_timeout :以毫秒為單位:每次存取裝置回應之前的最大等待時間。
modbus_read :用於讀取的 Modbus 指令的功能號,通常為 3 或 4。
modbus_read_max_registers :一次可以讀取的最大暫存器數。
modbus_allow_gaps :true = 可以在讀取操作中讀取未使用的暫存器區域。
connect_timeout :為 msec: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變數中(見下文),並且可以相應地查詢。
帶*的變數:如果您定義以「*」開頭的變量,這些變數將顯示在使用者介面的儀表圖塊中的擴展資訊下,例如電池儲存的溫度。
注意:只有數字和字母 az 和 AZ 可以用作變數名稱。
該物件以上面列出的變數名稱命名,並具有以下屬性:
固定:具有固定值的字串。例如,如果無法確定 type_designation 或電壓的值,則很有用。
表達式:字串。該變數不會被讀取,而是作為公式進行計算。
型態:如果不是固定的或 expr,變數的型別:int16、uint16、int32、uint32、float、int64、string,這對於 Modbus 以正確的格式讀取暫存器很重要。 uint16 和 uint32 是只能接受正數的型別。對於 JSON/HTTP,您通常可以使用 float。
解析度:浮動。讀取值乘以“分辨率”。電壓值必須以伏特為單位,電流以毫安培為單位,功率以瓦特為單位,能量以瓦特小時 (Wh) 為單位。使用負“分辨率”,如果值具有相反的符號,則可以反轉該值。
一次:布林值(真或假)。如果為 true,則該值僅在裝置初始化時讀取一次,否則定期讀取。
位址:數字 (Modbus) 或字串 (HTTP/JSON)。要讀取的值的 Modbus 暫存器編號或 HTTP URL。
查詢:字串。對於 HTTP JSON,計費管理器查詢語言中的信息,用於尋找要在 JSON 回應中讀取的值。
順序:字串。對於 Modbus,位元組順序“hl”或“lh”,其中值可用。長度:數量。對於 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+?
字串開頭:^
字串結尾:$
充電管理器可以從每個裝置的不同暫存器或 JSON 元素查詢最多 32 個輸入值。輸入屬性是一個 JSON 陣列。您必須為每個輸入定義以下屬性:
位址:位址(Modbus 暫存器或 URL)。
count :透過此請求讀取的輸入位數。
query :對於 HTTP/JSON,查詢語言在回應中尋找值。
每次更新時,cFos 充電管理器都會讀取以此方式定義的所有輸入,並將這些位元內部放置在陣列中,然後可以在公式 Input1..InputN 中查詢該陣列。
充電管理器可為每個裝置切換最多 32 個輸出。輸出在「outputs」中定義為輸出物件的 JSON 陣列。如果對應輸出的狀態發生變化,則所有輸出都會在每個更新週期結束時切換。
對於每個輸出,您必須在輸出物件中定義以下屬性:
位址:具有可選 HTTP 方法的 HTTP URL,例如 GET//}。若要設定 Modbus 暫存器,您可以使用 cFos Charging Manager HTTP API。計費管理器會偵測對 localhost 的適當訪問,並將請求重新導向到內部處理程序,因此您不需要像外部 HTTP API 存取那樣進行授權。如果所有替換後 URL 為空,則不會設定任何輸出。例如,您只能在某些變數存在時切換輸出(請參閱公式:exists() 函數)。您也可以在位址中指定 ${address} 和 ${id}。這是設定中設定的目前設備位址和 Modbus ID。 「address」和「id」主要用於使用 Modbus API(見下文)。
body :POST 或 PUT 的可選 HTTP 正文。
在 URL 和正文中,您可以使用引用全域 Charging Manager 變數或對應計量表的 ${expr} 公式。公式「expr」在設定輸出時進行計算,並在 URL 或正文的文字中進行替換。在上面的範例中,如果//設定輸出並且//清除它,則可以定義變數 'var1' 並設定它根據需要設定為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 存取。
重置輸出:除了“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”的值. |
您可以在 Charging Manager 配置中建立變數。您可以使用固定值或公式作為值。在每個更新週期結束時,計費管理器可以重新計算該變數的值。然後,您可以在(某些)充電管理器參數、充電規則中使用這些參數或控制輸出。您也可以將E x.member 或M x.member 寫為變數。這裡, E x 和M x 是充電管理器中設定的牆盒或儀表的裝置 ID。 「member」是儲存在對應設備中的「自訂」變數。某些變數可能具有特殊意義:對於 KEBA,「out1」是開關輸出,對於 ABB B23 儀表,「out1」和「out2」是開關輸出(在支援此功能的型號上)。 1 切換輸出,0 再次關閉輸出。
如果您有必須在特定條件下打開但隨後必須運行一段時間的設備(例如洗衣機、洗碗機),您也可以將變量定義為“觸發器”。那麼變量的公式就是設置變量為1的條件。經過一段可調整的時間後,它會重置為 0。只要滿足條件,“重新觸發條件”允許一次又一次地延長直到關閉(即,將變量設置為 0)的時間。
注意:只有數字和字母 az 和 AZ 可以用作變數名稱。
出於測試目的,您可以顯示充電管理器和儀表變量,例如 Awattar 的當前價格:
在充電管理器配置中,您可以按照上述「輸出」下儀表定義中的描述配置全域輸出。如果它們的狀態發生更改,則會在每個更新周期結束時設定它們。若要控制使用者定義裝置中的開關輸出,建議採用上述約定(請參閱充電管理器變數):在使用者定義計數器中設定名為「out1」、「out2」等的變量,並設定使用者定義計數器中的輸出根據該變數的值切換輸出。
充電管理器的 Modbus API 用於控制具有任意 Modbus RTU 或 TCP 位址(可存取充電管理器)的 Modbus 裝置。作為 Modbus RTU 的位址,輸入 COMx,bd,8,p,s,如在各個設備的配置中一樣,其中 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 Charging Manager 支援以下附加查詢參數:
addr :上面提到的 Modbus RTU 或 TCP 設備位址。
func :Modbus 功能號,例如讀取 3 或 4,寫入 6 或 16。
id :Modbus 設備的設備 ID。
reg :Modbus 暫存器號。該值可以以十進位或十六進位指定(帶有前綴 0x)。
val: number:要寫入暫存器的值。閱讀時省略。
類型:'w' 16 位元(預設),d = 32 位,f = 浮點型,q = 64 位,s = 字串。
cnt: number: 暫存器中字串的最大長度,對於其他型別省略或設定為 1。
order: String: 位元組順序,「hl」或「lh」。
注意:如果您的“儀表”主要用於控制目的,您可以選中此圖塊設置中的“隱藏設備”選項,以便此設備不會出現在起始頁面上。
注意:某些通過 HTTP 讀取的儀表需要用戶名/密碼作為授權。您可以在 HTTP 訪問地址中指定這一點,例如使用http://username:password@192.168.2.111
。如果您的用戶名或密碼包含“@”,則必須將其替換為“%40”。