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ức address 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 định

  • Mỗ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ân 0.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ông

  • CRC error: Lỗi kiểm tra CRC, có thể do dây quá dài hoặc nhiễu

  • Timeout: 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 đến 65535

  • 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