Cài Home Assistant trên Raspberry Pi: thẻ nhớ hay SSD, các bước cài HA OS, đưa ESP32 vào qua MQTT
Cài Home Assistant trên Raspberry Pi 4, 5: chọn Home Assistant OS hay Container, thẻ nhớ hay SSD và vì sao thẻ nhớ hay hỏng, bốn bước cài, giảm ghi bằng recorder, đưa ESP32 vào qua MQTT, ESPHome.
Home Assistant là phần mềm nhà thông minh mã nguồn mở chạy ngay trong nhà, gom đèn, công tắc, cảm biến của nhiều hãng và các mạch ESP32 tự làm vào một giao diện, có tự động hóa, lịch sử, ứng dụng điện thoại. Raspberry Pi 4 hoặc 5 là máy chủ hay dùng nhất cho Home Assistant. Bài này hướng dẫn chọn cách cài, chọn lưu trữ (thẻ nhớ hay SSD, vì sao thẻ nhớ hay hỏng), bốn bước cài Home Assistant OS, giảm số lần ghi để thẻ nhớ bền hơn, và đưa ESP32 vào Home Assistant qua MQTT hoặc ESPHome.
1. Chọn cách cài

Home Assistant OS là cả hệ điều hành dành riêng: cài add-on (Mosquitto, ESPHome, trình sửa file) bằng vài cú bấm, cập nhật và sao lưu trong giao diện. Đổi lại, Pi chỉ làm việc này. Cần Pi làm thêm việc khác (máy chủ file, chạy chương trình Python) thì dùng bản Container trên Raspberry Pi OS, và tự cài Mosquitto như bài cùng cụm về Mosquitto trên Raspberry Pi.
Phần cứng: Raspberry Pi 4 (từ 2 GB RAM) hoặc Pi 5 (từ 4 GB), nguồn đúng chuẩn của Pi (Pi 5 dùng nguồn 5 V 5 A), nên có vỏ tản nhiệt.
2. Thẻ nhớ hay SSD

Home Assistant ghi lịch sử trạng thái của mọi thiết bị vào cơ sở dữ liệu, mặc định gần như mỗi giây. Thẻ nhớ chịu được số lần ghi có hạn và không có cơ chế chống mòn tốt như SSD, nên "Home Assistant tự nhiên không lên nữa" sau vài tháng tới vài năm thường là do thẻ nhớ hỏng. Lựa chọn:
- SSD qua USB 3: Pi 4 và Pi 5 khởi động thẳng từ USB; dùng hộp SSD USB 3 loại tốt.
- SSD NVMe trên Pi 5: cắm qua mạch HAT M.2 vào khe PCIe, nhanh nhất.
- Thẻ nhớ: được, nếu là thẻ loại A1/A2 của hãng rõ ràng, giảm số lần ghi như bên dưới, và bật sao lưu tự động ra máy khác.
3. Bốn bước cài Home Assistant OS

- Trên máy tính mở Raspberry Pi Imager, chọn đời Pi, mục hệ điều hành chọn Other specific-purpose OS → Home assistants and home automation → Home Assistant, chọn bản Home Assistant OS cho đúng đời Pi.
- Chọn thẻ nhớ hoặc SSD (qua đầu đọc USB), ghi.
- Cắm thẻ hoặc SSD vào Pi, cắm dây mạng, cấp nguồn. Lần đầu Home Assistant tự tải phần còn lại, mất 5–20 phút.
- Trên máy tính cùng mạng mở
http://homeassistant.local:8123, tạo tài khoản, đặt vị trí nhà.
Cài Raspberry Pi lần đầu, cách xem IP của Pi trên router có ở bài cùng cụm về cài đặt Raspberry Pi 5.
4. Đưa ESP32 vào Home Assistant

- ESPHome: viết cấu hình YAML thay cho code, Home Assistant tự nhận thiết bị. Xem bài ESPHome cho ESP32 và relay 4 kênh.
- MQTT: cài add-on Mosquitto broker, thêm tích hợp MQTT. ESP32 tự viết code gửi dữ liệu; có thể dùng MQTT discovery để thiết bị tự hiện (bài ESP32 vào Home Assistant bằng MQTT discovery), hoặc khai báo bằng tay trong
configuration.yamlnhư dưới đây.
Đoạn cấu hình dưới đây đọc đúng các chủ đề của chương trình ESP32 trong bài Mosquitto trên Raspberry Pi (cùng cụm): cường độ sóng, điện áp ADC, công tắc đèn có trạng thái online/offline; đồng thời giảm số lần ghi lên thẻ nhớ. Sửa file bằng add-on File editor:
# PYWORLD.VN - Thêm vào configuration.yaml của Home Assistant: nhận dữ liệu ESP32 qua MQTT và giảm số lần ghi lên thẻ nhớ
# PYWORLD.VN - Chủ đề MQTT giống bài Raspberry Pi làm broker Mosquitto: nha/esp32_1/du_lieu, den, den/dat, trang_thai
# PYWORLD.VN - Sửa xong: Developer Tools > YAML > Check configuration, rồi Restart
recorder:
commit_interval: 30 # gom dữ liệu 30 giây mới ghi một lần (mặc định 1 giây): đỡ mòn thẻ nhớ
purge_keep_days: 7 # giữ lịch sử chi tiết 7 ngày
exclude:
entity_globs:
- sensor.*_rssi # số đo thay đổi liên tục mà ít khi cần xem lại
mqtt:
sensor:
- name: "ESP32 1 cuong do song"
unique_id: esp32_1_rssi
state_topic: "nha/esp32_1/du_lieu"
value_template: "{{ value_json.rssi }}"
unit_of_measurement: "dBm"
device_class: signal_strength
availability_topic: "nha/esp32_1/trang_thai"
payload_available: "online"
payload_not_available: "offline"
- name: "ESP32 1 dien ap ADC"
unique_id: esp32_1_adc
state_topic: "nha/esp32_1/du_lieu"
value_template: "{{ (value_json.adc_mv / 1000) | round(2) }}"
unit_of_measurement: "V"
device_class: voltage
switch:
- name: "Den ESP32 1"
unique_id: esp32_1_den
command_topic: "nha/esp32_1/den/dat"
state_topic: "nha/esp32_1/den"
payload_on: "ON"
payload_off: "OFF"
availability_topic: "nha/esp32_1/trang_thai"
payload_available: "online"
payload_not_available: "offline"
commit_interval: 30: gom dữ liệu 30 giây ghi một lần thay vì mỗi giây, số lần ghi giảm khoảng 30 lần.exclude: bỏ khỏi lịch sử những số đo đổi liên tục mà ít khi cần xem lại.- Kiểm tra cấu hình (Developer Tools → YAML → Check configuration) trước khi khởi động lại.
5. Sao lưu và truy cập từ xa
- Settings → System → Backups: bật sao lưu tự động hằng ngày, chép bản sao lưu ra máy khác hoặc dịch vụ lưu trữ; thẻ nhớ, SSD hỏng thì cài lại và khôi phục trong vài phút.
- Truy cập từ xa: dùng dịch vụ Nabu Casa (trả phí, ủng hộ dự án) hoặc VPN về mạng nhà. Không mở cổng 8123 ra Internet khi chưa có HTTPS và mật khẩu mạnh.
6. Lỗi hay gặp
| Hiện tượng | Nguyên nhân | Cách xử lý |
|---|---|---|
| Không mở được homeassistant.local | Máy tính không phân giải tên .local, Pi chưa xong lần khởi động đầu | Chờ thêm; tìm IP trên router, mở http://IP:8123 |
| Home Assistant chậm dần, có lúc treo | Thẻ nhớ chậm, sắp hỏng; cơ sở dữ liệu quá lớn | Chuyển sang SSD; giảm purge_keep_days |
| Pi khởi động lại ngẫu nhiên | Nguồn yếu (Pi 5 cần 5 A), SSD ăn nhiều dòng qua USB | Nguồn đúng chuẩn; hộp SSD có nguồn riêng nếu cần |
| Thiết bị MQTT hiện "unavailable" | Sai chủ đề trạng thái, ESP32 mất kết nối broker | Theo dõi bằng mosquitto_sub hoặc MQTT Explorer |
| Check configuration báo lỗi YAML | Thụt lề sai, trộn tab với dấu cách | Chỉ dùng dấu cách, mỗi cấp 2 dấu |
Sản phẩm dùng trong bài: ESP32 DevKit V1 30 chân.
Bài cùng cụm chủ đề: cài đặt Raspberry Pi 5; Raspberry Pi làm MQTT broker Mosquitto; Sonoff Basic nạp Tasmota; so sánh nền tảng IoT.
Xem thêm