- vừa được xem lúc

Giải thuật mô tả hoạt động của MQTT trong AWS IoT

0 0 2

Người đăng: Phan Ngoc

Theo Viblo Asia

MQTT trong AWS IoT Core hoạt động như thế nào?

Tổng quan về MQTT

MQTT (Message Queuing Telemetry Transport) là một giao thức truyền thông nhẹ dựa trên mô hình publish/subscribe, được thiết kế tối ưu cho thiết bị IoT có tài nguyên hạn chế và mạng không ổn định.


Cách hoạt động MQTT trong AWS IoT Core

1. Thiết bị MQTT client kết nối với AWS IoT Core

  • Sử dụng giao thức MQTT hoặc MQTT over WebSocket.

  • Kết nối đến endpoint của AWS IoT:

    <prefix>.iot.<region>.amazonaws.com
    

    Ví dụ:

    a3r7dkwb23dp1u-ats.iot.ap-southeast-1.amazonaws.com
    

2. Chứng thực và phân quyền

  • Thiết bị dùng X.509 certificate hoặc AWS Cognito Identity.

  • AWS IoT kiểm tra IAM policy hoặc IoT policy để cho phép:

    • Connect
    • Publish
    • Subscribe
    • Receive

3. Gửi và nhận dữ liệu qua topic

  • MQTT client publish vào một topic, ví dụ:

    sensors/temperature/device123
    
  • MQTT client khác subscribe topic này để nhận dữ liệu.

  • AWS IoT có thể dùng wildcard:

    sensors/+/device123
    sensors/# (subscribe toàn bộ)
    

4. Luồng dữ liệu

  • Thiết bị gửi dữ liệu (publish) ➜ AWS IoT Core nhận ➜ chuyển tiếp đến:

    • Thiết bị khác (subscribed)
    • AWS Lambda
    • Kinesis, S3, DynamoDB, SNS, SQS
    • Amazon IoT Rules Engine xử lý

Các thành phần chính

Thành phần Vai trò
MQTT Broker Do AWS IoT quản lý, xử lý publish/subscribe
IoT Rules Engine Xử lý dữ liệu gửi đến, định tuyến hoặc trigger service khác
Thing Registry Đăng ký thông tin thiết bị
Certificates Chứng thực thiết bị
Policies Kiểm soát truy cập

Ví dụ: Publish dữ liệu cảm biến nhiệt độ

Thiết bị gửi dữ liệu:

import paho.mqtt.client as mqtt
import ssl
import json client = mqtt.Client()
client.tls_set(ca_certs="AmazonRootCA1.pem", certfile="device-certificate.pem.crt", keyfile="private.pem.key", tls_version=ssl.PROTOCOL_TLSv1_2) client.connect("your-iot-endpoint.iot.ap-southeast-1.amazonaws.com", 8883) payload = json.dumps({ "temperature": 27.5 })
client.publish("sensors/temp/device123", payload)

AWS IoT Rule để lưu vào DynamoDB:

SELECT temperature FROM 'sensors/temp/+'

Lưu ý khi thiết kế MQTT với AWS IoT

  • Giới hạn topic name: ≤ 256 ký tự
  • QoS: AWS hỗ trợ QoS 0 và 1
  • Không hỗ trợ retained messages
  • Không hỗ trợ will messages

Input:

  • Client_ID: mã định danh thiết bị
  • Certificate, Private_Key: dùng để xác thực TLS
  • Topic: kênh truyền tin, ví dụ "sensor/temperature/device123"
  • Payload: dữ liệu gửi, ví dụ { "temp": 28.5 }
  • MQTT_Broker: endpoint của AWS IoT Core

Thuật toán:

BEGIN 1. [Khởi tạo kết nối] a. Client tạo phiên làm việc MQTT b. Thiết lập kết nối TLS với MQTT_Broker (AWS IoT Endpoint) - Dùng Certificate, Private_Key, AmazonRootCA c. Gửi yêu cầu CONNECT đến MQTT_Broker với Client_ID 2. [Xác thực & Ủy quyền] a. MQTT_Broker (AWS IoT) xác thực certificate (X.509) b. Kiểm tra policy có cho phép hành động CONNECT không c. Nếu không hợp lệ, từ chối kết nối → STOP 3. [Giao tiếp dữ liệu] LOOP trong thời gian kết nối còn sống: a. Nếu client muốn gửi dữ liệu: - Gửi PUBLISH(topic, payload) - Broker kiểm tra policy: có được PUBLISH vào topic không? - Nếu OK: i. Lưu message vào queue của các client đã SUBSCRIBE topic đó ii. Forward đến các client subscribe b. Nếu client muốn nhận dữ liệu: - Gửi SUBSCRIBE(topic_filter) - Broker kiểm tra policy có cho phép SUBSCRIBE không - Nếu OK: gán client này vào danh sách listener của topic c. Broker thực hiện gửi message (QoS 0 hoặc 1): - Nếu QoS 1: yêu cầu ACK từ client 4. [Ngắt kết nối] a. Nếu client gửi DISCONNECT hoặc timeout - Broker hủy phiên kết nối - Xóa hàng đợi client khỏi topic list END

Ví dụ cụ thể hóa thuật toán

Giả sử:

  • Client_ID: device123
  • Topic: "sensors/temp/device123"
  • Payload: { "temp": 30 }

Thì tiến trình như sau:

device123 → CONNECT → AWS IoT Core
AWS IoT Core → kiểm tra certificate + policy
device123 → PUBLISH("sensors/temp/device123", {temp:30})
AWS IoT Core → xác thực → forward đến mọi subscriber topic này
Subscriber → nhận payload

Chúng ta đã có những hình dùng sơ về thuật toán, hy vọng sẽ làm rõ hơn trong các bài viết sau nhé

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tự động hóa - IoT Tích hợp để đưa hệ thống điều khiển lên mây

Lại là IoT. Đầu tiên mình khẳng đinh rằng đây không phải là một bài viết thuần về IoT.

0 0 28

- vừa được xem lúc

Significant Tools and Platforms to consider for IoT App Development!

IoT application development is growing in leaps and bounds. Diverse industries like manufacturing, healthcare, transportation & logistics, oil & gas, and the water industry, are heavily investing in I

0 0 35

- vừa được xem lúc

Những lưu ý sống còn khi làm việc với callback function của Software Timer

1. Giới thiệu.

0 0 9