MQTT 是一種具有中央訊息中介的網際網路協定。透過此訊息中介,參與者可以訂閱特定的「主題」,並傳送主題上的訊息。cFos 充電管理器可監聽特定主題的訊息,因此可透過 MQTT 進行控制。它也可以傳送所管理裝置的狀態。cFos Power Brain Wallbox 也可透過 MQTT 控制並傳送其狀態。這對於連接家庭自動化系統、工業控制 (M2M) 以及監控和記錄都很有用。所有主題都以cfos_mqtt
開頭。如果您想將多台 cFos MQTT 裝置連接到 MQTT 代理商,主題可以選擇以cfos_mqtt_<serial number>/
開頭,這可以在 Configuration 下設定。您也可以在組態中定義標準 MQTT 代理商的 URL。URL 可以選擇以mqtt://
和mqtts://
開頭。使用mqtts://
,cFos Charging Manager 或 cFos Power Brain Wallbox 會建立 TLS 連線。未加密連接使用標準連接埠1883,TLS 連接使用標準連接埠8883。不過,您也可以在 URL 中指定連接埠。您可以用一般的 URL 符號指定使用者名稱和密碼,例如mqtt://user:password@192.168.2.111。
如果您在 cFos Charging Manager 設定中指定 MQTT 代理商,您可以指定個別代理商或直接寫成mqtt
。這樣就會使用設定中儲存的預設經紀人。
cFos Charging Manager 同時支援 MQTT 3.1.1 和 MQTT 5。如果您以 mqtt3:// 或 mqtt5:// 開始 URL (mqtts3:// 和 mqtts5:// 用於加密連接),您就決定了通訊協定版本。預設為 MQTT 3.1.1。預設為 MQTT 3.1.1。 使用 MQTT 5 時,如果出現相應的錯誤訊息,cFos Charging Manager 會嘗試切換回 MQTT 3.1.1。這對較舊的 Mosquitto 代理商有效,但對其他代理商則不一定。
注意:由於設定 MQTT 需要管理員密碼,因此計費管理器會據此處理資料。這表示故意傳送只能以管理員密碼存取的資料。
有關 MQTT 代理商的注意事項:感謝 Stefan G. (#diebestenuserderwelt) 的協助,我們得以針對 ioBroker 內建的 MQTT 代理商進行測試。這個 MQTT 3.1.1 代理程式 (截至 2023 年 2 月) 在幾個方面不符合標準:連線嘗試會無聲終止而沒有錯誤訊息、PUBLISH 封包的有效負載有時會遺失、PUBLISH 封包顯然會傳送兩次 (可以透過設定關閉嗎?)。這表示這個經紀人不適合控制 Charging Manager API,因為 API 請求可能會被執行多次。儘管我們希望我們的 MQTT 實作能與盡可能多的經銷商相容,但目前我們建議 ioBroker 使用 Mosquitto。
與其透過 HTTP 提供這些裝置 (請參閱HTTP API -> HTTP 計量表和 wallboxes),這些裝置也可以監聽 MQTT。輸入mqtt
或 MQTT 代理 URL 作為裝置位址。對應的計量表或 wallbox 接著會監聽到主題cfos_mqtt/set/<裝置 ID>,
例如裝置 ID 為 M1 的計量表會監聽到cfos_mqtt/set/M1
。之後,HTTP 輸入計量表會期待一個 JSON 字串作為訊息,如 HTTPAPI在「HTTP 計量表與 wallboxes」中所述。因此,您的 MQTT 來源必須以這種格式傳送資料。這可讓您從其他來源 (例如家庭自動化系統) 取得資料,然後匯入充電管理器,以整合 cFos 充電管理器不支援的裝置。
注意:如果來自來源的資料格式與 HTTP 計量表所期望的不同,您也可以建立自訂的計量表。下文會針對 MQTT 進行說明。
範例:
您建立了一個 HTTP 輸入計數器,並將 M3 作為裝置 ID。您輸入了 Mosquitto 代理程式的位址,例如 mqtt://192.168.2.30。如果您在執行 Mosquitto 的電腦上,在命令列輸入下列命令:mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
計數器就應該包含上述值。
在充電管理程式設定中,您可以指定 MQTT 代理 URL (或標準代理的 mqtt),充電管理程式會在此 URL 下的主題cfos_mqtt/get/dev_info
中發佈所有裝置的狀態。它會以 HTTP get_dev_info 的格式傳送。這會提供您所有裝置的數值,因為它們在使用者介面中也是可見的,例如電錶的電力值或 wallbox 的狀態。如果您只想訂閱個別裝置,您可以停用「透過 MQTT 發佈資訊」核取方塊,並勾選個別裝置設定中「顯示」下的「透過 MQTT 發佈資訊」選項。有關各裝置的對應 JSON 字串就會發佈在主題cfos_mqtt/get/<device ID>下。您也可以在主題cfos_mqtt/get/params
下訂閱所有全域值,因為它們會以 HTTP get_dev_info 中已知的格式輸出到 "params" 下。
在 cFos Charging Manager 配置中,您可以在 "Broker for API access via MQTT"(或 mqtt for standard brokers)下指定 MQTT 代理 URL。如果此值不是空的,cFos Charging Manager 就會訂閱所有以 cfos_mqtt/api/ 開頭的主題。它就會將這些主題下的訊息當成以 /cnf? 開頭的 HTTP URL 來解釋,並將訊息轉寄給 HTTP API。充電管理程式會將 HTTP API 的回應以 JSON 格式發佈在主題 cfos_mqtt/api_res 之下。這表示您幾乎可以透過 MQTT 控制整個 HTTP API。提供長 JSON 回應的 API 呼叫除外。例如:cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
使用 API 函式 set_cm_var 將充電管理器變數 x 設定為 1。在cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1
下的訊息會輸入裝置 ID 為 E1 的 wallbox 的 RFID 5678 (另請參閱我們的延伸 RFID 函式)。
透過 HTTP POST 傳輸的資料可以放在主題下的訊息中。
範例:定期變更充電管理員可用的最大總電流:
在一般 Charging Manager 設定中的「Broker for API access via MQTT」(透過 MQTT 存取 API 的經紀人)下輸入您的經紀人(若要使用「Configuration」(組態)下儲存的預設經紀人,則只需輸入 mqtt)。然後使用 MQTT 發佈包含下列內容的 JSON 物件至主題
cfos_mqtt/api/cmd=set_params
:
{"max_total_cur_prc": p}
其中 p 是預設最大總流量的百分比。
注意:某些 HTTP API 呼叫會導致計費管理器儲存設定。如果您執行得太頻繁,(cFos Power Brain 或 cFos Wallbox Booster 中的)快閃記憶體或 Raspberry 中的 SD 卡將會耗損。因此,單一參數「max_total_cur_prc」的 API 呼叫「set_params」並不會儲存參數。
如果 cFos 充電管理器不是在「負載管理」模式下,而是在「觀察」模式下,您可以使用 MQTT 自行控制所有的牆盒。這尤其適用於在「觀察」模式下作為從屬操作的 cFos Power Brain 牆壁箱。要做到這一點,您必須勾選充電管理器設定中 MQTT 下的 「啟動壁盒控制 」選項。cFos 充電管理器隨後會監聽 MQTT 主題cfos_mqtt/ctl
,並期望收到帶有 JSON 物件的訊息。此物件具有以裝置 ID 為名的子物件作為屬性。子物件看起來像這樣:{"cur": c, "ena": b, "wke": b, "phs": p},其中 c 是以 mA 為單位的充電電流,而 b 可以為真或假。"ena「:false 會停用 wallbox 的充電功能,」wke「:true 會嘗試傳送 」喚醒汽車 "指令到 wallbox(目前只有 cFos Power Brain wallbox 可以做到)。p 可以是 1 或 3,以便在單相和三相充電之間切換。您也可以省略 "cur"、"ena"、"wke「 和 」phs",從而只執行特定的控制功能。範例:{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000, phs: 3}
}將裝置 ID 為 Wallbox 的充電電流設定為 8A,啟動充電並嘗試喚醒汽車。此外,wallbox E2 的充電電流設定為 10A,並切換為三相充電。
您可以在 "Configuration"(配置)下指定 MQTT 代理 URL,以便在系統日誌中傳輸日誌項目。cFos 充電管理程式會在主題cfos_mqtt/log
下公佈所有日誌項目。這樣您就可以遠端分析日誌來監控計費管理器。您也可以在 "Configuration"(配置)下為交易日誌項目指定 MQTT 代理 URL。所有計費交易都會傳送到主題cfos_mqtt/ta_log
下。這樣就可以遠端分析充電交易的計費資料,並在另一個系統上建立充電交易的備份。充電交易從插上充電插頭時開始,到拔下充電插頭時結束。
您可以使用 rtype = 2 為 MQTT 建立自訂計數器。這些計數器的定義與 HTTP 計數器 (rtype = 1) 相似。但是,這裡的位址不是 HTTP URL,而是 MQTT 主題。範例:"power_w": {
"address": "/test_topic3",
"type": "float",
"query": "power_w"
}在此,使用者定義的計數器訂閱主題 /test_topic3,並期待一個屬性為 "power_w「 的 JSON 物件,例如 {」power_w": 1234}。不同的計數器變數可以有不同的主題,只要有訊息在對應的主題下發佈,計數器變數就會更新。
注意: 必須以短時間間隔透過 MQTT 發佈資料,這樣 cFos PowerBrain 才不會超時。例如,您應該使用 Tasmota 軟體為 MQTT 計數器執行「TelePeriod 30」指令,以便每 30 秒透過 MQTT 發佈一次資料。