Xây dựng hệ thống Internet of Thing sử dụng nền tảng Azure IoT Hub (P3)

Tại phần 2 của chuỗi bài viết hướng dẫn các bạn sử dụng nền tảng Azure IoT Hub, mình đã chia sẻ đến các bạn kiến trúc của một IoT Hub Endpoint và cách thức tương tác với những kiến trúc này. Trong bài viết này, mình sẽ hướng dẫn các bạn kết nối thiết bị với IoT Hub qua giao thức MQTT.

Phần 3: Hướng dẫn kết nối thiết bị với IoT Hub qua giao thức MQTT

 IoT Hub cho phép thiết bị kết nối với “IoT Hub endpoints” qua các phiên bản:   

  • MQTT v3.1.1 on port 8883
  • MQTT v3.1.1 over WebSocket on port 443

Một thiết bị có thể sử dụng giao thức MQTT để kết nối với IoT Hub thông qua một trong hai cách sau:

  • Thư viện trong Azure IoT SDKs: được xây dựng sẵn để dễ dàng kết nối với IoT Hub một cách nhanh chóng
  • Sử dụng trực tiếp giao thức MQTT

Trong phạm vi bài viết này, mình sẽ hướng dẫn cách thứ 2 – Sử dụng trực tiếp giao thức MQTT để thiết bị kết nối với IoT Hub. Thiết bị khi kết nối đến IoT Hub bắt buộc phải hỗ trợ bảo mật TLS/SSL và có thể xác thực danh tính thông qua một trong hai cách: cơ chế Username/Password hoặc sử dụng chứng chỉ X5.509. Cụ thể hơn, mình sẽ hướng dẫn các bạn phương pháp bảo mật theo kiểu xác thực danh tính theo cơ chế Username/Password sử dụng MQTT.fx.

Giao thức MQTT cung cấp các trường như ClientId, Username, Password. Các trường được định nghĩa trong IoT Hub như sau:

  • Trường ClientId: sử dụng tên deviceId lúc khởi tạo thiết bị
  • Trường Username: {iothubhostname}/{device_id}/?api-version=2018-06-30

Trong đó:

  • {iothubhostname}: tên host IoT Hub
  • {device_id}: tên thiết bị

Ví dụ nếu tên IoT Hub của bạn là ThangHub.azure-devices.net, tên thiết bị là device, thì trường Username là ThangHub.azure-devices.net/device/?api-version=2018-06-30

  • Trường Password: sử dụng mã SAS (Shared Access Signature), có thể tạo bằng cách sử dụng công cụ hỗ trợ đã giới thiệu ở PHẦN 1Azure IoT tools hoặc Azure CLI

ĐỐI VỚI SỬ DỤNG AZURE IOT HUB:

  • Tại tab AZURE IOT HUB phía bên trái của Visual Studio Code.
  • Nhấn chuột phải vào thiết bị bạn muốn tạo mã SAS, và chọn Generate SAS Token for Device.
  • Đặt thời hạn (Ví dụ: 9000 giờ tức là 1 năm) và nhấn Enter.

Mã SAS được tạo ra có định dạng: SharedAccessSignature sig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}

Chúng ta sử dụng mã này tại trường Password.

ĐỐI VỚI SỬ DỤNG AZURE CLI:

Nhập với lệnh: az iot hub generate-sas-token -d {device_id} -n {iothub_name}

Trong đó:

  • {device_id}: tên thiết bị để kết nối
  • {iothub_name}: tên IoT Hub

Sau đó nhấn Enter để chạy lệnh, mã SAS được tạo ra và hiện ở command.

Tại MQTT.fx, tại mục MQTT Broker Profile Settings:

  • Broker Address: là địa chỉ host name IoT Hub của bạn
  • Broker Port: sử dụng port 8883
  • Client ID: tên thiết bị IoT Hub

Chúng ta có thể lấy địa chỉ host name của mình tại mục Overview.

Các thông số sau khi điền tại mục MQTT Broker Profile Settings và tạm không quan tâm đến các thông số General.

Tại mục User Credentials:

  • User Name: {iothubhostname}/{device_id}/?api-version=2018-06-30
  • Password: mã SAS được tạo ở phía trên

Vì chúng ta đang sử dụng  bảo mật SSL/TLS nên tích chọn “Enable SSL/TLS”.

Chúng ta nhấn “OK” để hoàn tất việc cấu hình.

Để kết nối thiết bị với IoT Hub chúng ta nhấn CONNECT.

Nếu thành công thì sẽ có biểu tượng ổ khóa và ô chấm màu xanh.

Như vậy qua bài này, mình đã giới thiệu cho các bạn cách thiết lập các thông số, cũng như cách kết nối thiết bị với IoT Hub qua giao thức MQTT.fx. Tiếp theo tại phần 4 – phần cuối cùng của chuỗi bài viết này, mình sẽ hướng dẫn các bạn tương tác giữa MQTT Client (sử dụng MQTT.fx) với IoT Hub qua giao thức MQTT. Chúc các bạn thành công!

Nhóm thực tập & TAPIT IoT

Quốc Thắng, Ngọc Chính, Minh Duy

Tìm hiểu thêm:
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community