ESP32 + MQTT + Home Assistant: nhà thông minh tự làm, rồi để AI điều khiển bằng lời
Tóm tắt
ESP32 (Wi-Fi tích hợp) đọc cảm biến/điều khiển relay; ESPHome giúp cấu hình bằng YAML không cần viết C++; dữ liệu đi qua MQTT hoặc API gốc vào Home Assistant; automation chạy cục bộ. Lớp AI (Assist + LLM) chỉ nên điều khiển thiết bị đã được “expose”, và không giao khoá cửa, gas cho AI tự quyết.
Nhà thông minh mua sẵn thường bị khoá trong ứng dụng của hãng, phụ thuộc cloud và khó tuỳ biến. Với một con ESP32 vài chục nghìn đồng, vài cảm biến, MQTT và Home Assistant, bạn có một hệ thống chạy cục bộ, kiểm soát hoàn toàn — rồi thêm lớp AI để hỏi “phòng khách đang bao nhiêu độ?” hoặc “tắt hết đèn tầng 1” bằng ngôn ngữ tự nhiên. Bài này đi qua từng lớp, cách lắp ráp và những lưu ý an toàn.
Các lớp hệ thống
| Lớp | Công nghệ | Vai trò |
|---|---|---|
| Thiết bị | ESP32 + cảm biến (DHT22, PIR, cảm biến cửa…) + relay | Đọc dữ liệu, bật/tắt tải |
| Firmware | ESPHome (YAML) hoặc Arduino/PlatformIO | Lập trình thiết bị |
| Truyền tin | MQTT (broker Mosquitto) hoặc ESPHome native API | Publish/subscribe trạng thái và lệnh |
| Điều phối | Home Assistant | Dashboard, automation, lịch, lịch sử |
| AI | Assist + tích hợp LLM (conversation agent) | Ra lệnh, hỏi trạng thái bằng ngôn ngữ tự nhiên |
MQTT hoạt động thế nào?
MQTT là giao thức nhắn tin nhẹ theo mô hình publish/subscribe. Thiết bị không gọi trực tiếp nhau mà gửi tin lên một broker (thường là Mosquitto) theo “topic”:
nha/phong-khach/nhiet-do → 28.4 (ESP32 publish)
nha/phong-khach/den/set → ON (Home Assistant publish lệnh)
nha/phong-khach/den/state → ON (ESP32 xác nhận trạng thái)
Nhờ vậy thêm thiết bị mới rất dễ: chỉ cần publish/subscribe đúng topic. Home Assistant hỗ trợ MQTT discovery — thiết bị tự khai báo và xuất hiện trong giao diện mà không phải cấu hình tay.
Cách nhanh nhất: ESPHome
ESPHome cho phép mô tả firmware bằng YAML thay vì viết C++. Ví dụ một node đo nhiệt độ/độ ẩm và điều khiển đèn:
esphome:
name: phong-khach
esp32:
board: esp32dev
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api: # kết nối native với Home Assistant
ota: # cập nhật firmware qua Wi-Fi
sensor:
- platform: dht
pin: GPIO4
temperature: { name: "Nhiệt độ phòng khách" }
humidity: { name: "Độ ẩm phòng khách" }
update_interval: 60s
switch:
- platform: gpio
pin: GPIO26
name: "Đèn phòng khách"
Nạp lần đầu qua USB, sau đó cập nhật qua Wi-Fi (OTA). Nếu muốn dùng MQTT thay native API, thêm khối mqtt: trỏ tới broker.
Automation: để logic chạy cục bộ
Các quy tắc quan trọng nên là automation thông thường trong Home Assistant — chạy cục bộ, không phụ thuộc Internet hay AI:
- Có chuyển động sau 18h → bật đèn hành lang 3 phút.
- Độ ẩm phòng tắm > 75% → bật quạt hút.
- Cửa mở khi chế độ “vắng nhà” → gửi thông báo về điện thoại.
Thêm lớp AI
Home Assistant có Assist — trợ lý giọng nói/văn bản tích hợp. Bạn có thể cấu hình một LLM làm conversation agent và chỉ định những thực thể nào được “expose” cho AI. Khi đó có thể nói:
- “Phòng nào đang nóng nhất?” — AI đọc trạng thái các cảm biến và trả lời.
- “Tắt hết đèn tầng 1 trừ phòng ngủ.” — AI gọi các dịch vụ tương ứng.
- “Tối qua cửa chính mở lúc mấy giờ?” — truy vấn lịch sử.
Ngoài ra Home Assistant có thể đóng vai MCP server để các AI client (như Claude Desktop) điều khiển nhà qua giao thức chuẩn — vẫn trong phạm vi thực thể bạn cho phép.
An toàn — đừng bỏ qua
- Điện lưới 220V: dùng module relay có cách ly quang, đặt trong hộp kín, đúng tiết diện dây. Không chắc chắn thì nhờ thợ điện.
- Không expose mọi thứ cho AI: khoá cửa, báo động, bếp điện nên cần xác nhận hoặc loại khỏi danh sách AI điều khiển.
- Bảo mật mạng: broker MQTT phải có mật khẩu; không mở cổng Home Assistant ra Internet trực tiếp — dùng VPN hoặc dịch vụ truy cập từ xa có xác thực.
- Logic sống còn chạy cục bộ: AI và Internet có thể chậm hoặc mất; automation quan trọng không nên phụ thuộc chúng.
Lộ trình gợi ý
- Cài Home Assistant (Raspberry Pi hoặc mini PC) + add-on Mosquitto.
- Làm một node cảm biến nhiệt độ bằng ESPHome — chưa đụng điện lưới.
- Viết 2–3 automation hữu ích.
- Thêm relay cho thiết bị điện áp thấp hoặc dùng ổ cắm thông minh có sẵn.
- Cuối cùng mới bật Assist + LLM với danh sách thực thể giới hạn.
Áp dụng thế nào?
- Dev: Đây là dự án cuối tuần tuyệt vời để học IoT, MQTT và tích hợp LLM với hệ thống thật — có phản hồi vật lý ngay lập tức.
- Tech Lead: Kiến trúc “logic cục bộ chắc chắn + AI là lớp giao tiếp” áp dụng được cho cả hệ thống doanh nghiệp: AI không nên là điểm lỗi duy nhất.
Nguồn & tham khảo
- Home Assistant and ESPHome: MQTT integration — DEV Community
- Create a personality with AI (Assist) — Home Assistant