MQTT là gì? Cách dùng trong nhà thông minh
Bạn bao giờ tự hỏi vì sao mở app trên điện thoại là đèn trong phòng khách bật lên gần như ngay lập tức, trong khi router wifi nhà bạn vẫn đang “ì ạch” xử lý cả chục thiết bị khác? Câu trả lời thường không nằm ở chiếc đèn, mà nằm ở một giao thức nhỏ gọn chạy đằng sau: MQTT. Trong bài này, chúng ta sẽ cùng trả lời câu hỏi MQTT là gì, vì sao nó thành “ngôn ngữ chung” của nhà thông minh, và cách tự dựng một broker MQTT mini ngay trên máy tính bạn.
MQTT là gì? Giải thích bằng một hình ảnh quen thuộc
Hãy tưởng tượng bạn ngồi ở quán cà phê, muốn gọi đồ mà không cần chạy vào quầy. Bạn viết giấy ghi món, đưa cho một người phục vụ. Người này giữ giấy đến khi bartender rảnh rồi chuyển vào bếp. Bạn không cần biết bartender đang bận gì, không cần biết bếp ở đâu — chỉ cần đưa giấy là xong.
MQTT hoạt động y hệt như vậy. Bạn (client) không kết nối trực tiếp tới đèn hay cảm biến (client khác), mà gửi tin nhắn đến một broker — chính là “người phục vụ” trung gian. Broker nhận tin, phân loại theo tên kênh (topic), rồi chuyển tiếp tới đúng những ai đang muốn nghe.
Tên đầy đủ của MQTT là Message Queuing Telemetry Transport — tạm dịch là “giao thức truyền tải dữ liệu dạng tin nhắn cho thiết bị đo lường”. Điểm mấu chốt: nó được thiết kế cho tình huống mạng yếu, máy yếu, pin yếu, chứ không phải cho việc tải phim.
So MQTT với HTTP cho dễ hình dung
- HTTP thường theo mô hình client gửi request rồi server trả response. HTTP hiện đại cũng có thể tái sử dụng kết nối; điểm khác chính ở đây là MQTT có sẵn mô hình publish/subscribe qua broker.
- MQTT giống như nhóm chat: thiết bị gửi tin vào broker, các client đăng ký topic phù hợp sẽ nhận tin. Client mới chỉ nhận tin cũ nếu cấu hình retained message hoặc session phù hợp.
- HTTP thường là hỏi — trả lời (request/response). MQTT là phát — nhận (publish/subscribe): thiết bị không biết ai đang nghe, chỉ việc gửi đi.
- MQTT thường giữ một kết nối TCP mở giữa client và broker. Việc tái sử dụng kết nối có thể giảm phần trao đổi lặp lại, nhưng mức trễ và năng lượng còn tùy mạng, thiết bị và tần suất gửi.
Nếu MQTT là gì vẫn còn mơ hồ, hãy nhớ một câu: MQTT là cái loa phát thanh của nhà bạn — ai bật radio đúng tần số thì nghe được, không ai thì thôi, không ai phải gọi nhau từng người một.
Vì sao nhà thông minh lại “chọn” MQTT?
Trên thị trường có không ít giao thức: Zigbee, Z-Wave, Matter, HTTP, CoAP, WebSocket… Nhưng MQTT vẫn giữ vị trí đặc biệt vì vài lý do thực tế:
- Nhẹ thật sự. Phần đầu gói tin MQTT chỉ vài byte. Một cảm biến nhiệt có thể gửi dữ liệu hàng chục lần mà không lo tốn pin.
- Có thể chịu gián đoạn tốt hơn nếu cấu hình đúng. Retained message, QoS, session và lưu trữ broker có vai trò khác nhau; broker không mặc định giữ mọi tin cho đến khi client quay lại.
- Rất dễ tích hợp. Hầu hết nền tảng nhà thông minh phổ biến tại Việt Nam như Home Assistant, Node-RED, openHAB, hay các nền tảng IoT cloud đều hỗ trợ MQTT ngay từ đầu, vài dòng cấu hình là chạy.
- Phân cấp kênh rõ ràng. Bạn đặt tên topic theo cấu trúc
nha/phongkhach/den, y như cấu trúc thư mục, muốn thêm thiết bị chỉ cần thêm một nhánh. - Tách rời thiết bị khỏi logic. Đèn không cần biết app nào điều khiển nó. Ngày mai bạn đổi app, đèn vẫn chạy.
Đổi lại, MQTT không tự mã hóa đường truyền hay đặt quyền truy cập cho broker của bạn. Cần cấu hình xác thực, ACL và TLS phù hợp; phần cảnh báo bên dưới giải thích các bước cơ bản.
Ví dụ thực tế: một buổi sáng trong nhà có MQTT
Chúng ta theo dõi một setup nhỏ: nhà có cảm biến nhiệt độ phòng ngủ, công tắc đèn, và một chiếc điện thoại làm bộ điều khiển.
- Lúc 6h50, cảm biến đo được 26 °C và publish tin vào topic
nha/phong-ngu/nhiet-dovới nội dung26.5. - Broker chuyển tin tới các client đang subscribe
nha/phong-ngu/#— ví dụ Home Assistant và một thiết bị giám sát. - Home Assistant đối chiếu quy tắc bạn đã cài: nếu nhiệt độ > 26 °C thì bật quạt. Nó publish vào topic
nha/phong-ngu/quat/setnội dungON. - Bộ điều khiển quạt (client thứ ba) cũng subscribe topic đó, nhận lệnh và bật quạt.
- Điện thoại mở ứng dụng và subscribe
nha/#để hiển thị nhiệt độ cùng trạng thái quạt.
Điểm thú vị: cảm biến không hề biết tồn tại Home Assistant, đèn không hề biết có điện thoại. Mọi thứ chỉ giao tiếp qua broker và topic. Chính sự “vô danh” này khiến hệ thống dễ thay thế, dễ sửa lỗi.
Một tính năng hữu ích khác là Last Will and Testament (LWT). Client khai báo trước một tin sẽ gửi nếu broker phát hiện kết nối của nó bị mất bất ngờ, chẳng hạn sau khi hết thời gian keep-alive. LWT giúp hệ thống nhận biết trạng thái client, nhưng không thay thế kiểm tra an toàn trực tiếp cho thiết bị.
Tự dựng broker MQTT nhỏ trong 15 phút
Bạn không cần server đắt tiền để bắt đầu. Một chiếc laptop cũ, hộp Raspberry Pi, hay máy ảo miễn phí đều đủ.
Bước 1: Cài Mosquitto
Mosquitto là broker MQTT mã nguồn mở. Trước khi chạy lệnh cài đặt có sudo, hãy đọc hướng dẫn cho bản phân phối của bạn và kiểm tra kỹ cấu hình mạng.
- Ubuntu/Debian:
sudo apt update && sudo apt install mosquitto mosquitto-clients - macOS:
brew install mosquitto - Windows: tải bản cài đặt từ trang chủ Eclipse Mosquitto.
Lệnh mosquitto-clients cài kèm hai công cụ gõ lệnh cực hữu ích: mosquitto_pub (gửi) và mosquitto_sub (nhận).
Bước 2: Chạy thử không xác thực
Trong terminal 1, khởi động broker ở chế độ debug:
mosquitto -v
Terminal 2, nghe một topic bất kỳ:
mosquitto_sub -h localhost -t "nha/phongkhach/den" -v
Terminal 3, gửi tin nhắn:
mosquitto_pub -h localhost -t "nha/phongkhach/den" -m "ON"
Ngay lập tức terminal 2 hiển thị nha/phongkhach/den ON. Bạn vừa tự dựng xong một hệ thống pub/sub hoạt động thật.
Bước 3: Nâng cấp cho dùng thật
- Thêm tài khoản: sửa file cấu hình, đặt
allow_anonymous falserồi khai báo user/mật khẩu. Bắt buộc phải làm trước khi mở cổng ra internet. - Dùng TLS: cấu hình TLS cho listener bảo mật (thường dùng cổng 8883). Với máy chủ có tên miền công khai, dùng chứng chỉ từ CA đáng tin cậy; mạng nội bộ có thể triển khai CA riêng và cài chứng chỉ tin cậy trên client.
- Bật websockets nếu muốn trình duyệt kết nối trực tiếp (hữu ích cho giao diện web điều khiển).
- Tích hợp: thêm MQTT integration trong Home Assistant và điền thông tin broker. Thiết bị chỉ tự xuất hiện nếu hỗ trợ quy ước discovery phù hợp; thiết bị khác cần cấu hình entity.
Mẹo nhỏ: hãy đặt tên topic theo quy ước nhất quán nha/khuvuc/thietbi/trangthai. Ví dụ: nha/bep/cambienkhigas/ppm. Nhiều người bỏ qua bước này và sau sáu tháng hệ thống trở thành một mớ topic không ai nhớ nghĩa.
Nếu bạn cần chạy broker trên máy chủ riêng, hãy tham khảo trang hosting để chọn môi trường phù hợp; vẫn phải giới hạn truy cập và bật bảo mật trước khi kết nối từ ngoài mạng nhà.
Những cảnh báo nên biết trước khi dùng
Không có giải pháp nào là hoàn hảo, và MQTT có vài điểm dễ gây tai nạn:
- Cổng 1883 mở ra internet = rủi ro thật. Đừng bao giờ để broker cho phép ẩn danh (anonymous) và phát trực tiếp ra ngoài. Ít nhất phải có mật khẩu + TLS.
- Không có phân quyền mặc định. MQTT không tự biết “client này chỉ được phép bật đèn phòng mình”. Bạn cần cấu hình ACL (danh sách kiểm soát truy cập) nếu muốn giới hạn quyền theo từng thiết bị.
- Topic dễ bị đoán. Một kẻ xấu biết đúng tên topic có thể gửi lệnh giả mạo. Hãy dùng tên không đoán được hoặc bật TLS kèm xác thực hai chiều cho hệ thống quan trọng.
- QoS cần chọn đúng chỗ. QoS 0 gửi tối đa một lần; QoS 1 có thể gửi lặp; QoS 2 dùng bắt tay nhiều bước để chuyển một lần ở tầng giao thức. QoS không thay thế xác nhận nghiệp vụ hoặc cơ chế an toàn cho khóa cửa.
- Retain cũng có hai mặt. Tin giữ lại giúp client mới vào biết trạng thái hiện tại ngay, nhưng nếu lạm dụng, broker sẽ phình to và trả dữ liệu lỗi thời.
Lời khuyên thực dụng: bắt đầu đơn giản, nhưng bảo mật ngay từ ngày đầu tiên, đừng để đến lúc phải vá.
Bắt đầu từ đâu
Bạn không cần học hết tài liệu MQTT để bắt đầu. Thứ tự tôi khuyên:
- Chạy broker Mosquitto trên máy, dùng
mosquitto_subvàmosquitto_pubđể hiểu pub/sub, mất khoảng 15 phút. - Tự đặt 3–4 topic cho một kịch bản nhỏ (bật đèn, đọc nhiệt độ, chuông cửa) và vẽ sơ đồ luồng dữ liệu trên giấy.
- Nối thử vào Home Assistant hoặc Node-RED để xem dữ liệu hiện lên giao diện.
- Đến lúc đó mới đọc sâu về QoS, retained message, và Last Will.
Bài viết này dừng ở mức khái niệm và thao tác nền tảng. Không mở broker trực tiếp ra internet khi chưa cấu hình bảo mật và tường lửa. MQTT là gì? Đó là giao thức publish/subscribe gọn nhẹ, trong đó broker định tuyến tin theo topic; độ tin cậy thực tế phụ thuộc cách bạn cấu hình client và broker.
Tài liệu tham khảo và đọc thêm
- OASIS: MQTT Version 5.0 — đặc tả hiện đại; MQTT 3.1.1 vẫn được nhiều thiết bị hỗ trợ.
- Eclipse Mosquitto: tài liệu cấu hình — listener, xác thực và ACL.
- Home Assistant: MQTT integration — cách kết nối broker.
- Xem thêm cách giám sát website và gửi cảnh báo Telegram.