Professional Documents
Culture Documents
MQTT
MQTT
MQTT
- Định nghĩa:
Viết tắt của “Message Queuing Telemetry Transport”
Là một giao thức truyền tin đơn giản được thiết kế cho những thiết bị IoT đơn giản,
lý tưởng để kết nối các thiết bị từ xa có băng thông thấp.
Cho phép các thiết bị IoT phát và nhận bản tin.
Cho phép người dùng gửi các lệnh điều khiển cũng như nhận các bản tin từ các thiết
bị IoT.
- Cách sử dụng chính:
Phát lệnh điều khiển để điều khiển các thiết bị IoT.
Đọc dữ liệu từ các thiết bị IoT.
Nhiều client có thể nhận được tin nhắn từ một broker duy nhất (one to many, tạm
dịch: quan hệ một - nhiều). Tương tự, nhiều publisher có thể xuất bản (publish) các
topic cho một người đăng ký (many to one, tạm dịch: quan hệ nhiều - một).
Mỗi client có thể vừa sinh và vừa nhận dữ liệu, bằng cách xuất bản (publish) và đăng
ký (subscribe), tức là các thiết bị có thể xuất ra dữ liệu cảm biến và vẫn có thể nhận
được thông tin cấu hình hoặc lệnh điều khiển (MQTT là một giao thức truyền thông
hai chiều). Điều này giúp ích trong cả việc chia sẻ dữ liệu, quản lý và điều khiển thiết
bị.
Với kiến trúc MQTT broker, các thiết bị và ứng dụng trở nên tách rời và an toàn hơn.
MQTT sử dụng TLS để mã hóa thông tin về tên người dùng và mật khẩu để bảo vệ
các kết nối, và có thể dùng thêm các xác thực bảo mật khác để yêu cầu client phải
cung cấp file xác thực phù hợp với máy chủ.
Trong trường hợp xảy ra lỗi với một broker, một broker dự phòng/sao lưu tự động có
thể được sử dụng để thay thế. Broker dự phòng có thể được thiết lập để chia sẻ tải
của client thông qua nhiều server tại chỗ, đám mây hoặc sử dụng phối hợp cả hai
cách này.
Hình trên mô tả cách thức kết nối MQTT giữa 2 clients A và B. Đầu tiên client B phát
thông tin nhiệt độ roof tuy nhiên có bật cờ retain (cờ treo). Khi client A đăng kí chủ
đề, client A sẽ nhận được thông tin nhiệt độ roof từ brocker mà client B đã gửi và
treo trước đó. Client A phát một chủ đề mới (nhiệt độ floor). Tuy nhiên do client B
không đăng kí chủ đề floor đó nên sẽ không nhận được thông tin nhiệt độ mà client
A gửi tới. Quá trình kết thúc khi client A disconnect với brocker.
2. SenML
- Định nghĩa chung:
Định dạng SenML được thiết kế sao cho các bộ xử lý với khả năng hạn chế có thể dễ dàng mã
hóa đồng thời thu thập một số lượng lớn phép đo một cách hiệu quả.
Tuy nhiên để thông báo nhỏ gọn, ta có thể cho tên cơ sở nằm trong nhãn dán “bn” và
các trường “n” trong các bản ghi là một chuỗi trống nên được bỏ qua.
Ví dụ
{"bn":"urn:dev:ow:10e2073a01080063","u":"Cel","t":1.276020076e+09, "v":23.5}
{"u":"Cel","t":1.276020091e+09, "v":23.6}
1. {"n":"urn:dev:ow:10e2073a01080063","u":"%RH","t":1.320067464e+09,
"v":20},
2. {"n":"urn:dev:ow:10e2073a01080063","u":"lon","t":1.320067464e+09,
"v":24.30621},
3. {"n":"urn:dev:ow:10e2073a01080063","u":"lat","t":1.320067464e+09,
"v":60.07965},
4. {"n":"urn:dev:ow:10e2073a01080063","u":"%RH","t":1.320067524e+09,
"v":20.3},
5. {"n":"urn:dev:ow:10e2073a01080063","u":"lon","t":1.320067524e+09,
"v":24.30622},
6. {"n":"urn:dev:ow:10e2073a01080063","u":"lat","t":1.320067524e+09,
"v":60.07965},
7. {"n":"urn:dev:ow:10e2073a01080063","u":"%RH","t":1.320067584e+09,
"v":20.7},
8. {"n":"urn:dev:ow:10e2073a01080063","u":"lon","t":1.320067584e+09,
"v":24.30623},
9. {"n":"urn:dev:ow:10e2073a01080063","u":"lat","t":1.320067584e+09,
"v":60.07966},
10. {"n":"urn:dev:ow:10e2073a01080063","u":"%EL","t":1.320067614e+09,
"v":98},
11. {"n":"urn:dev:ow:10e2073a01080063","u":"%RH","t":1.320067644e+09,
"v":21.2},
12. {"n":"urn:dev:ow:10e2073a01080063","u":"lon","t":1.320067644e+09,
"v":24.30628},
13. {"n":"urn:dev:ow:10e2073a01080063","u":"lat","t":1.320067644e+09,
"v":60.07967}
- Giải thích:
Ở bản ghi đầu tiên, các trường tên (n) và đơn vị (u) được đặt dưới dạng trường cơ
sở. Điều này có nghĩa là ở các bản ghi sau, khi không có thay đổi ở các trường này thì
sẽ được hiểu là chúng có giá trị như ban đầu.
Trường thời gian (t) cũng được đặt dưới dạng trường cơ sở (bt) tuy nhiên điểm khác
biệt là khi thời gian nhận giá trị mới so với thời gian ban đầu, thời gian thực tế sẽ
bằng giá trị thời gian mới nhận cộng với thời gian ban đầu (bt).
Ví dụ: {“bt”: 10}, {“t”:60} vậy thời gian thực tế là 10 cộng 60 bằng 70