文件

MQTT應用領域

MQTT 是一種帶有中央消息代理的互聯網協議。使用此消息代理,參與者可以訂閱某些“主題”並發送有關主題的消息。 cFos 計費管理器可以收聽特定主題的消息,因此可以通過 MQTT 進行控制。它還可以傳輸其管理的設備的狀態。 cFos Power Brain Wallbox 也可以通過 MQTT 進行控制並傳輸其狀態。這在連接到家庭自動化系統、用於工業控制 (M2M) 以及監控和記錄時非常有用。所有主題都以cfos_mqtt 。如果您想將多個 cFos MQTT 設備與 MQTT 代理連接,主題可以選擇以cfos_mqtt_<Seriennummer>/開頭,可在配置下調整。在配置中,您還可以為標準 MQTT 代理指定 URL。 URL 可以選擇以mqtt://mqtts:// 。使用mqtts:// cFos 充電管理器或 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。如果您的 URL 以 mqtt3://或 mqtt5://開頭(mqtts3://和 mqtts5://用於加密連接),則確定協議版本。默認為 MQTT 3.1.1。對於 MQTT 5,如果出現相應的錯誤消息,cFos 計費管理器會嘗試切換回 MQTT 3.1.1。這適用於較老的 Mosquitto 經紀人,但不一定適用於其他經紀人。

注意:由於 MQTT 的設置需要管理員密碼,計費管理器會相應地處理數據。因此,故意發送只能使用管理員密碼訪問的數據。

關於 MQTT 代理的注意事項:感謝 Stefan G. (#diebestenuserderwelt),我們能夠針對 ioBroker 內置的 MQTT 代理進行測試。此 MQTT 3.1.1 代理(截至 2023 年 2 月)在幾個方面的行為不符合標準:連接嘗試在沒有錯誤消息的情況下靜默終止,PUBLISH 數據包中有時缺少有效負載,PUBLISH 數據包顯然發送了兩次(這可以通過關閉配置來完成嗎?)。因此,此代理不適合控制計費管理器 API,因為 API 請求可能會執行多次。儘管我們對我們的 MQTT 實現與盡可能多的代理兼容感興趣,但我們目前建議對 ioBroker 使用 Mosquitto。

使用設備類型“HTTP 輸入”集成儀表和牆盒。

這些設備不是通過 HTTP 提供這些設備(參見HTTP API -> HTTP Counters and Wallboxes ),而是可以監聽 MQTT。輸入mqtt或 MQTT 代理 URL 作為設備地址。相應的儀表或 wallbox 然後收聽主題cfos_mqtt/set/<Geräte-ID> ,例如,對於設備 ID M1 到cfos_mqtt/set/M1儀表。然後,HTTP 輸入計數器需要一個 JSON 字符串作為消息,如“HTTP 計數器和 Wallboxes”下的HTTP API中所述。因此,您的 MQTT 源必須以這種格式傳送數據。您可以集成 cFos 充電管理器不支持的設備,方法是從其他來源(例如家庭自動化系統)獲取數據,然後將其導入充電管理器。
注意:如果源數據的格式與 HTTP 計數器預期的格式不同,您還可以創建自定義計數器。對於 MQTT,這在下面進行了描述。

例子:
您已經創建了一個 HTTP 輸入計數器,它以 M3 作為設備 ID。作為地址,您已提供 Mosquitto Broker 的地址,例如 mqtt://。如果你在運行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),計費管理器隨後會在主題cfos_mqtt/get/dev_info下發布所有設備的狀態。它以 HTTP get_dev_info 已知的格式傳輸此信息。這為您提供了設備在 UI 中可見的所有值,例如儀表的性能值或牆盒的狀態。如果您只想訂閱單個設備,則可以取消激活“發布有關 MQTT 的信息”複選框,並在“顯示”下的單個設備設置中選中“發布有關 MQTT 的信息”選項。然後在主題cfos_mqtt/get/<device ID>下發布相應設備的相應 JSON 字符串。您還可以訂閱主題cfos_mqtt/get/params下的所有全局值,因為它們以“params”下稱為 HTTP get_dev_info 的格式輸出。

通過 MQTT 控制 cFos Charging Manager API

在 cFos Charging Manager 配置中,您可以在“通過 MQTT 訪問 API 的代理”下指定 MQTT 代理 URL(或標準代理的 mqtt)。如果該值不為空,則 cFos Charging Manager 訂閱以 cfos_mqtt/api/開頭的所有主題。然後,它會解釋此類主題下的消息,就好像主題名稱是以/cnf? 結尾的 HTTP URL 一樣。啟動並將其轉發到 HTTP API。然後,計費管理器在主題 cfos_mqtt/api_res 下將 HTTP API 響應發佈為 JSON。您可以通過 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下會顯示一條消息cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1輸入設備 ID E1 的 Wallbox 的 RFID 5678(另請參閱我們的擴展 RFID 功能)。
您可以將通過 HTTP POST 傳輸的數據放在主題下的消息中。

示例:定期更改充電管理器可用的最大總電流:
在“通過 MQTT 訪問 API 的代理”下的常規計費管理器設置下輸入您的代理(如果要使用存儲在“配置”下的默認代理,則只需輸入 mqtt)。然後使用MQTT發佈到主題
cfos_mqtt/api/cmd=set_params
具有以下內容的 JSON 對象:
{“max_total_cur_prc”:p}
其中 p 是預設最大總電流的百分比。
注意:某些 HTTP API 調用會導致計費管理器保存配置。如果運行過於頻繁,閃存(在 cFos Power Brain 或 cFos Wallbox Booster 中)或 Raspberry 中的 SD 卡將會磨損。因此,帶有單獨參數“max_total_cur_prc”的 API 調用“set_params”不會導致參數的保存。

通過 MQTT 控制牆盒

如果cFos Charging Manager不是處於“負載管理”模式而是處於“觀察”模式,您可以使用MQTT自行控制所有牆盒。這尤其適用於在“觀察”模式下作為從站運行的 cFos Power Brain Wallboxes。為此,您必須在 MQTT 下的充電管理器設置中勾選“激活牆盒控制”選項。然後 cFos 計費管理器監聽 MQTT 主題cfos_mqtt/ctl並期待帶有 JSON 對象的消息。該對象具有以設備 ID 作為名稱的子對像作為屬性。子對像如下所示:{"cur": c, "ena": b, "wke": b},其中 c 是以 mA 為單位的充電電流,每個 b 可以是真或假。 “ena”:false 停用 wallbox 上的充電,“wke”:true 嘗試向 wallbox 發送“自動喚醒”命令(目前僅適用於 cFos Power Brain wallbox)。您也可以省略“cur”、“ena”和“wke”,只執行某些控制功能。例子:
{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000}}

將帶有設備ID的壁盒的充電電流設置為8A,激活充電並嘗試喚醒汽車。此外,Wallbox E2 的充電電流設置為 10A。

通過 MQTT 發送日誌記錄和事務日誌

您可以在“配置”下的系統日誌中指定用於傳輸日誌條目的 MQTT 代理 URL。然後 cFos 計費管理器在主題cfos_mqtt/log下發布所有日誌條目。這允許您遠程評估日誌以監控計費管理器。您還可以在“配置”下為事務日誌中的條目指定 MQTT 代理 URL。然後所有加載事務都在主題cfos_mqtt/ta_log下發送。這允許遠程評估計費交易的計費數據並在另一個系統上創建計費交易的備份。充電交易在充電連接器插入時開始,在充電連接器拔出時結束。

使用 MQTT 自定義計數器

您可以使用 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}。不同的計數器變量可以有不同的主題,並且會在相應主題下發布消息時立即更新。