Tài liệu

Các lĩnh vực ứng dụng MQTT

MQTT là một giao thức internet với một nhà môi giới tin nhắn trung tâm. Với nhà môi giới tin nhắn này, người tham gia có thể đăng ký một số "chủ đề" nhất định và gửi tin nhắn về các chủ đề đó. Trình quản lý sạc cFos có thể nghe tin nhắn về các chủ đề cụ thể và do đó có thể được kiểm soát thông qua MQTT. Nó cũng có thể truyền trạng thái của các thiết bị mà nó quản lý. cFos Power Brain Wallbox cũng có thể được điều khiển thông qua MQTT và truyền trạng thái của nó. Điều này rất hữu ích khi kết nối với hệ thống tự động hóa gia đình, để điều khiển công nghiệp (M2M) và để theo dõi và ghi lại. Tất cả chủ đề bắt đầu bằng cfos_mqtt. Nếu bạn muốn kết nối một số thiết bị cFos MQTT với một nhà môi giới MQTT, chủ đề có thể tùy ý bắt đầu bằng cfos_mqtt_<Seriennummer>/, có thể điều chỉnh theo cấu hình. Trong cấu hình, bạn cũng có thể chỉ định URL cho nhà môi giới MQTT tiêu chuẩn. Các URL có thể tùy ý bắt đầu bằng mqtt://mqtts://. Với mqtts:// the cFos Charging Manager hoặc cFos Power Brain Wallbox thiết lập kết nối TLS. Các cổng tiêu chuẩn 1883 cho kết nối không được mã hóa và 8883 cho kết nối TLS được sử dụng. Tuy nhiên, bạn cũng có thể chỉ định một cổng trong URL. Bạn có thể nhập tên người dùng và mật khẩu theo ký hiệu URL thông thường, ví dụ: mqtt://user:password@192.168.2.111. Nếu bạn chỉ định một trình môi giới MQTT trong cấu hình Trình quản lý sạc cFos, bạn có thể chỉ định một trình môi giới riêng lẻ hoặc chỉ cần viết mqtt. Sau đó, nhà môi giới mặc định được lưu trữ trong cấu hình được sử dụng.

Trình quản lý sạc cFos hỗ trợ cả MQTT 3.1.1 và MQTT 5. Nếu bạn bắt đầu URL bằng mqtt3:// hoặc mqtt5:// (mqtts3:// và mqtts5:// đối với kết nối được mã hóa), thì bạn xác định phiên bản giao thức . Mặc định là MQTT 3.1.1. Với MQTT 5, Trình quản lý sạc cFos cố gắng chuyển về MQTT 3.1.1 nếu có thông báo lỗi tương ứng. Điều này hoạt động với các nhà môi giới Mosquitto cũ hơn, nhưng không nhất thiết phải với các nhà môi giới khác.

Lưu ý: Vì việc thiết lập MQTT yêu cầu mật khẩu quản trị viên nên trình quản lý tính phí sẽ xử lý dữ liệu tương ứng. Vì vậy, dữ liệu được gửi có chủ ý mà chỉ có thể được truy cập bằng mật khẩu quản trị viên.

Lưu ý về nhà môi giới MQTT: Nhờ có Stefan G. (#diebestenuserderwelt), chúng tôi đã có thể thử nghiệm với nhà môi giới MQTT được tích hợp trong ioBroker. Trình môi giới MQTT 3.1.1 này (kể từ tháng 2 năm 2023) không hoạt động theo tiêu chuẩn ở một số khía cạnh: Các nỗ lực kết nối bị chấm dứt âm thầm mà không có thông báo lỗi, tải trọng đôi khi bị thiếu trong các gói XUẤT BẢN, các gói XUẤT BẢN dường như được gửi hai lần (điều này có thể được thực hiện khi tắt cài đặt cấu hình không?). Do đó, trình môi giới này không phù hợp để kiểm soát API Trình quản lý sạc vì các yêu cầu API có thể được thực thi nhiều lần. Mặc dù chúng tôi quan tâm đến việc triển khai MQTT của mình tương thích với càng nhiều nhà môi giới càng tốt, chúng tôi hiện khuyên bạn nên sử dụng Mosquitto cho ioBroker.

Tích hợp đồng hồ và hộp treo tường bằng loại thiết bị "Đầu vào HTTP".

Thay vì cung cấp các thiết bị này qua HTTP (xem HTTP API -> HTTP Counters and Wallboxes), các thiết bị này cũng có thể nghe MQTT. Nhập mqtt hoặc URL của nhà môi giới MQTT làm địa chỉ thiết bị. Sau đó, đồng hồ đo hoặc hộp treo tường tương ứng sẽ lắng nghe chủ đề cfos_mqtt/set/<Geräte-ID>, ví dụ: đối với đồng hồ đo có ID thiết bị M1 thành cfos_mqtt/set/M1. Khi đó, Bộ đếm đầu vào HTTP mong đợi một chuỗi JSON dưới dạng một thông báo, như được mô tả trong API HTTP bên dưới "Bộ đếm HTTP và hộp treo tường". Do đó, nguồn MQTT của bạn phải cung cấp dữ liệu ở định dạng này. Bạn có thể tích hợp các thiết bị mà Trình quản lý sạc cFos không hỗ trợ bằng cách lấy dữ liệu từ một nguồn khác (ví dụ: hệ thống tự động hóa gia đình) rồi nhập dữ liệu đó vào Trình quản lý sạc.
Lưu ý: Nếu dữ liệu nguồn ở định dạng khác với định dạng mà bộ đếm HTTP mong đợi, bạn cũng có thể tạo bộ đếm tùy chỉnh. Đối với MQTT, điều này được mô tả bên dưới.

Ví dụ:
Bạn đã tạo một bộ đếm đầu vào HTTP và nó có M3 làm ID thiết bị. Là địa chỉ bạn đã cung cấp địa chỉ của Nhà môi giới Mosquitto, ví dụ: mqtt://. Nếu bạn nhập lệnh sau vào dòng lệnh trên máy tính đang chạy 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] }'
bộ đếm sau đó sẽ chứa các giá trị trên.

Chuyển trạng thái của các thiết bị Trình quản lý sạc

Trong cấu hình Trình quản lý sạc, bạn có thể chỉ định URL trình môi giới MQTT (hoặc mqtt cho trình môi giới tiêu chuẩn), theo đó Trình quản lý sạc sau đó xuất bản trạng thái của tất cả các thiết bị theo chủ đề cfos_mqtt/get/dev_info. Nó truyền cái này ở định dạng đã biết từ HTTP get_dev_info. Điều này cung cấp cho bạn tất cả các giá trị của thiết bị khi chúng hiển thị trong giao diện người dùng, ví dụ: giá trị hiệu suất của đồng hồ đo hoặc trạng thái của hộp treo tường. Nếu bạn chỉ muốn đăng ký các thiết bị riêng lẻ, bạn có thể hủy kích hoạt hộp kiểm "Xuất bản thông tin về MQTT" và thay vào đó chọn tùy chọn "Xuất bản thông tin về MQTT" trong cài đặt cho từng thiết bị trong "Hiển thị". Sau đó, một chuỗi JSON tương ứng cho thiết bị tương ứng sẽ được xuất bản theo chủ đề cfos_mqtt/get/<device ID>. Bạn cũng có thể đăng ký tất cả các giá trị toàn cầu theo chủ đề cfos_mqtt/get/params, vì chúng được xuất ở định dạng được gọi là HTTP get_dev_info trong "params".

Kiểm soát API Trình quản lý sạc cFos qua MQTT

Trong cấu hình Trình quản lý sạc cFos, bạn có thể chỉ định URL của nhà môi giới MQTT (hoặc mqtt cho nhà môi giới tiêu chuẩn) trong "Nhà môi giới truy cập API qua MQTT". Nếu giá trị này không trống, Trình quản lý sạc cFos sẽ đăng ký tất cả các chủ đề bắt đầu bằng cfos_mqtt/api/ . Sau đó, nó diễn giải các thông báo theo một chủ đề như thể tên chủ đề là một URL HTTP kết thúc bằng /cnf? bắt đầu và chuyển tiếp nó tới API HTTP. Sau đó, Trình quản lý tính phí xuất bản phản hồi API HTTP dưới dạng JSON theo chủ đề cfos_mqtt/api_res. Bạn có gần như toàn bộ API HTTP dưới sự kiểm soát của mình thông qua MQTT. Ngoại lệ là lệnh gọi API trả về phản hồi JSON dài. Ví dụ: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 sử dụng hàm API set_cm_var để đặt biến Trình quản lý sạc x thành 1. Có một thông báo bên dưới cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 Nhập RFID 5678 cho Wallbox với ID thiết bị E1 (xem thêm các chức năng RFID mở rộng của chúng tôi).
Bạn có thể đặt dữ liệu được truyền qua HTTP POST trong thông báo bên dưới chủ đề.

Ví dụ: Định kỳ thay đổi tổng dòng điện tối đa có sẵn cho Trình quản lý sạc:
Nhập nhà môi giới của bạn trong cài đặt Trình quản lý sạc chung trong "Nhà môi giới để truy cập API qua MQTT" (hoặc đơn giản là mqtt nếu nhà môi giới mặc định được lưu trữ trong "Cấu hình" sẽ được sử dụng). Sau đó xuất bản lên chủ đề bằng MQTT
cfos_mqtt/api/cmd=set_params
một đối tượng JSON với nội dung sau:
{"max_total_cur_prc": p}
trong đó p là tỷ lệ phần trăm của tổng dòng điện tối đa được đặt trước.
Lưu ý: Một số lệnh gọi API HTTP dẫn đến việc Trình quản lý sạc lưu cấu hình. Nếu bạn chạy chúng quá thường xuyên, đèn flash (trong cFos Power Brain hoặc cFos Wallbox Booster) hoặc thẻ SD trong Raspberry sẽ bị hao mòn. Do đó, lệnh gọi API "set_params" với thông số riêng lẻ "max_total_cur_prc" không dẫn đến việc lưu các thông số.

Điều khiển hộp treo tường qua MQTT

Nếu Trình quản lý sạc cFos không ở chế độ "Quản lý tải" mà ở chế độ "Quan sát", bạn có thể sử dụng MQTT để tự kiểm soát tất cả các hộp treo tường. Điều này đặc biệt áp dụng cho Hộp treo tường cFos Power Brain được vận hành như nô lệ trong chế độ "Quan sát". Để thực hiện việc này, bạn phải đánh dấu vào tùy chọn "Kích hoạt điều khiển hộp treo tường" trong cài đặt Trình quản lý sạc trong MQTT. Sau đó, Trình quản lý sạc cFos lắng nghe chủ đề MQTT cfos_mqtt/ctl và mong đợi các thông báo có đối tượng JSON. Đối tượng này có các đối tượng con với ID thiết bị là tên dưới dạng thuộc tính. Các đối tượng con trông như thế này: {"cur": c, "ena": b, "wke": b}, trong đó c là dòng điện tính bằng mA và mỗi b có thể đúng hoặc sai. "ena": false hủy kích hoạt sạc trên hộp treo tường, "wke": true cố gửi lệnh "tự động đánh thức" đến hộp treo tường (hiện chỉ khả thi với hộp treo tường cFos Power Brain). Bạn cũng có thể bỏ qua "cur", "ena" và "wke" và chỉ thực hiện một số chức năng điều khiển nhất định. Ví dụ:
{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000}}

Đặt dòng sạc của hộp treo tường có ID thiết bị thành 8A, kích hoạt sạc và cố gắng đánh thức ô tô. Hơn nữa, dòng sạc cho Wallbox E2 được đặt thành 10A.

Gửi nhật ký và nhật ký giao dịch qua MQTT

Bạn có thể chỉ định URL của nhà môi giới MQTT để chuyển các mục nhật ký trong nhật ký hệ thống trong "Cấu hình". Sau đó, Trình quản lý sạc cFos xuất bản tất cả các mục nhật ký theo chủ đề cfos_mqtt/log. Điều này cho phép bạn đánh giá nhật ký từ xa để giám sát Trình quản lý sạc. Bạn cũng có thể chỉ định URL của nhà môi giới MQTT cho các mục trong nhật ký giao dịch trong "Cấu hình". Sau đó, tất cả các giao dịch tải được gửi theo chủ đề cfos_mqtt/ta_log. Điều này cho phép dữ liệu thanh toán của các giao dịch tính phí được đánh giá từ xa và sao lưu các giao dịch tính phí được tạo trên một hệ thống khác. Giao dịch tính phí bắt đầu khi đầu nối sạc được cắm vào và kết thúc khi nó được rút ra.

Bộ đếm tùy chỉnh với MQTT

Bạn có thể tạo bộ đếm tùy chỉnh bằng cách sử dụng rtype=2 cho MQTT. Các bộ đếm này được định nghĩa tương tự như bộ đếm HTTP (rtype = 1). Tuy nhiên, các địa chỉ ở đây không phải là URL HTTP mà là chủ đề MQTT. Ví dụ:
"power_w": {
"address": "/test_topic3",
"type": "float",
"query": "power_w"
}

Ở đây, bộ đếm do người dùng xác định đăng ký chủ đề /test_topic3 và mong đợi một đối tượng JSON có thuộc tính "power_w", tức là {"power_w": 1234}. Các biến bộ đếm khác nhau có thể có các chủ đề khác nhau và sẽ được cập nhật ngay sau khi một thông báo được xuất bản theo chủ đề tương ứng.