VÍ DỤ 2: Hướng Dẫn Giao Tiếp và Giám Sát Cảm Biến Đo Mưa RS485 với iNut RS485
1. Giới Thiệu
iNut RS485 là thiết bị giúp người dùng giao tiếp cảm biến RS485 qua Modbus RTU và gửi dữ liệu lên MQTT. Tài liệu này hướng dẫn cách giám sát và reset cảm biến đo mưa chuẩn RS485 đã được cấu hình sẵn.
Cảm biến đo mưa: Modbus RTU
Slave ID:
1
Baudrate:
9600 8N1
Địa chỉ dữ liệu mưa:
Holding Register 40001
(tứcaddress 0
)Function code:
3
(đọc Holding Register)



2. Cài Đặt MQTT
Sau khi cấu hình iNut RS485 qua ứng dụng (app), thiết bị sẽ tự động gửi dữ liệu cảm biến lên MQTT theo thông tin:
Username / Password: do người dùng cung cấp
MQTT ID: do người dùng cấu hình
Prefix (tùy chọn): nếu không khai báo thì để trống
Cấu Trúc Topic MQTT
Cấu trúc chung:
<prefix nếu có>/slave_id/<slave_id>/req_id/<req_id>
Ví dụ:
Không có prefix:
/slave_id/1/req_id/0
Có prefix (ví dụ:
khanh_test
):
khanh_test/slave_id/1/req_id/0
Ngoài ra, mỗi phản hồi còn có thêm topic:
<prefix nếu có>/slave_id/1/req_id/0/message
Nội dung:
{
"status": "OK", // hoặc CRC error / Timeout
"time": 1752656804, // unixtime (giây)
"date": "16:06:44 16/07/25" // giờ hệ thống GMT+7
}

3. Đọc Dữ Liệu Mưa
App sẽ đề xuất
req_id = 0
mặc địnhMỗi thiết bị có thể có nhiều
req_id
nếu bạn đọc nhiều hơn một giá trịDữ liệu đọc về là giá trị thô, ví dụ
6
App sẽ chia giá trị này cho
50
(tương đương nhân0.02
) để hiển thị theo đơn vị mm. Giá trị chia này được định nghĩa trên app, MQTT sẽ không chia
Diễn giải:
Giá trị MQTT nhận được:
6
App hiển thị:
6 / 50 = 0.12 mm
4. Phản Hồi Trạng Thái Giao Tiếp
Mỗi lần đọc dữ liệu, thiết bị sẽ gửi một phản hồi trạng thái về topic /message
, ví dụ:
{
"status": "OK",
"time": 1752656804,
"date": "16:06:44 16/07/25"
}
OK
: Giao tiếp thành côngCRC error
: Lỗi kiểm tra CRC, có thể do dây quá dài hoặc nhiễuTimeout
: Thiết bị không phản hồi, có thể do mất kết nối hoặc sai hàm
5. Gửi Lệnh Reset hoặc Ghi Giá Trị Qua Modbus
Để gửi lệnh điều khiển hoặc reset thiết bị (ví dụ như reset chỉ số đo mưa), bạn có thể sử dụng topic /cmd/...
với cấu trúc như sau:
Cấu trúc topic:
<prefix nếu có>/cmd/<slave_id>/<req_id>/<function_code>/<address>
Payload theo từng loại function code:
FC = 5
(ghi coil): payload là chuỗi"0"
hoặc"1"
FC = 6
(ghi một thanh ghi): payload là một chuỗi số từ0
đến65535
FC = 15
(ghi nhiều coil): payload là chuỗi JSON:[0, 1, 0, ...]
FC = 16
(ghi nhiều thanh ghi): payload là chuỗi JSON:[word1, word2, ...]
Ví dụ thực tế:
Reset cảm biến đo mưa bằng cách ghi giá trị 90
vào thanh ghi 40001
(address 0
), sử dụng FC = 6
:
Topic:
/cmd/1/100/6/0
Payload:
"90"

(Với prefix
khanh_test
, topic sẽ là:khanh_test/cmd/1/100/6/0
)

Phản hồi kết quả ghi:
Khi lệnh ghi hoàn tất, thiết bị sẽ phản hồi về topic:
<prefix nếu có>/cmd_rep/<slave_id>/req_id/<request_id>
Với payload là:
[<địa chỉ ghi bắt đầu>, <số lượng phần tử ghi thành công>]

Ví dụ:
/cmd_rep/1/req_id/100 => [0, 1]
Đồng thời, sẽ có topic:
<prefix nếu có>/cmd_rep/<slave_id>/req_id/<request_id>/message
Tương tự như phần đọc dữ liệu, thông báo trạng thái sẽ có:
{
"status": "OK",
"time": 1752656804,
"date": "16:06:44 16/07/25"
}
Lưu ý quan trọng:
req_id < 100
được quy ước dùng cho giám sát
req_id >= 100
được dùng cho các lệnh ghi điều khiển
6. Gợi Ý Debug: MQTT Explorer
Bạn nên sử dụng phần mềm MQTT Explorer để kiểm tra, quan sát và gỡ lỗi dữ liệu MQTT được gửi/nhận giữa iNut và server MQTT của bạn.
7. Code Mẫu (JSON Import App)
Đây là đoạn cấu hình mẫu để bạn có thể import vào app inut và thử nghiệm:
{
"input_components": [],
"output_components": [
{
"label": "Dashboard",
"unit": null,
"type": "modbusdashboard",
"local_id": 0,
"config": {
"modbus": {
"modbus_elements": [
{
"id": 6,
"source": {
"slave_id": "1",
"function_code": "3",
"address": "0",
"pre_processing": "d50"
},
"display": {
"label": "Mưa",
"icon": "power",
"unit": "mm",
"color": "#fcdc00",
"ui_by_range": []
}
}
],
"slave_interval": {
"1": 3000
},
"object_config": {
"6": {
"object_id": "6",
"slave_id": "1",
"req_id": 0,
"req_index": 0,
"bitmask": 65535,
"division": 50
}
},
"next_element_id": 7
}
}
}
]
}
8. Kết Luận
Tài liệu này giúp bạn nhanh chóng triển khai việc giám sát cảm biến đo mưa qua RS485 với iNut. Với MQTT, bạn có thể dễ dàng tích hợp dữ liệu lên các nền tảng IoT khác.
Mọi vấn đề kỹ thuật, vui lòng liên hệ bộ phận hỗ trợ kỹ thuật của iNut.
Last updated