Bỏ qua, đến nội dung chính
Nastrotek
Giải pháp IoTIoT SolutionsMới

Smart thermostat tự học cách căn phòng ấm lên

Ghi chú làm smart thermostat bằng ESP32, ESPHome và Home Assistant, có lớp tốc độ làm ấm để bật đúng lúc mà vẫn giữ giới hạn an toàn.

Chia sẻ

LinkedInFacebookX
Bộ điều nhiệt thông minh tự làm được điều chỉnh trong một căn hộ Việt Nam

Mình từng đặt lịch sưởi lúc 6:30 và nghĩ như vậy là đủ thông minh. Nhưng có hôm trời lạnh, 7 giờ phòng vẫn chưa ấm; hôm khác nắng lên sớm thì máy chạy thừa gần nửa tiếng. Thứ cần học không phải là một lịch cố định, mà là căn phòng cần bao lâu để đi từ nhiệt độ hiện tại tới nhiệt độ mình muốn.

Bài này là cách mình sẽ làm một smart thermostat nhỏ bằng ESP32, ESPHome và Home Assistant. Phần “học” khá khiêm tốn: nó ước lượng tốc độ làm ấm hoặc làm mát từ dữ liệu thật, rồi tính thời điểm cần bật trước. Điều khiển nhiệt cơ bản vẫn chạy cục bộ, kể cả khi Wi-Fi hay Home Assistant mất kết nối.

“Tự học” ở đây học điều gì?

Mình tách hệ thống thành hai lớp:

  • Lớp điều khiển an toàn đọc cảm biến, đóng/ngắt HVAC theo hysteresis và giữ thời gian chạy/nghỉ tối thiểu.
  • Lớp học quan sát các chu kỳ trước để dự đoán cần bật sớm bao nhiêu phút. Nó không được phép bỏ qua giới hạn của lớp đầu tiên.

Cách tách này quan trọng hơn việc chọn thuật toán nào. Nếu dự đoán sai, phòng có thể ấm muộn một chút; thiết bị không được vì thế mà đóng relay liên tục hoặc ép máy nén khởi động lại quá nhanh.

Phần cứng cho một bản MVP

Một bản thử gọn có thể dùng:

  • ESP32-C3 hoặc ESP32-S3.
  • Cảm biến SHT40/SHT41 cho nhiệt độ và độ ẩm.
  • Màn hình nhỏ và một rotary encoder để chỉnh nhiệt độ tại chỗ.
  • Mạch dry-contact hoặc giao tiếp HVAC được cách ly, đúng điện áp và dòng của hệ thống đang dùng.
  • Nguồn đạt chuẩn, cầu chì và hộp kín nếu mạch nằm gần điện lưới.

Vị trí cảm biến ảnh hưởng rất nhiều tới dữ liệu học. Mình tránh đặt sát cửa sổ, luồng gió điều hòa, ánh nắng trực tiếp hoặc ngay trên bo mạch ESP32. Nếu vỏ máy tự nóng thêm 1-2 °C, thuật toán sẽ học rất chăm chỉ từ một con số sai.

Bộ điều nhiệt tự làm mở vỏ trên bàn điện tử, bên trong có ESP32, cảm biến nhiệt độ và mạch giao tiếp HVAC cách ly.

Giữ phần điều khiển an toàn chạy cục bộ; dữ liệu học chỉ đề xuất thời điểm bật sớm hơn.

Với boiler, heat pump hoặc máy lạnh dùng điện lưới, breadboard chỉ nên dùng để thử logic ở mức điện áp thấp. Phần đấu nối thực tế cần relay/interface đúng chuẩn và người có chuyên môn kiểm tra. Đây là chỗ mình không cố tiết kiệm vài linh kiện.

Giữ bộ điều khiển nền thật đơn giản

ESPHome có thermostat climate controller chạy theo kiểu bang-bang. Mình bắt đầu bằng heating mode, hysteresis và thời gian chạy/nghỉ tối thiểu:

climate:
  - platform: thermostat
    name: "Room Thermostat"
    sensor: room_temperature
    min_heating_off_time: 300s
    min_heating_run_time: 300s
    min_idle_time: 30s
    heat_deadband: 0.3
    heat_overrun: 0.2
    heat_action:
      - switch.turn_on: hvac_dry_contact
    idle_action:
      - switch.turn_off: hvac_dry_contact
    preset:
      - name: Home
        default_target_temperature_low: 22 °C
      - name: Away
        default_target_temperature_low: 17 °C

Các con số trên chỉ là điểm bắt đầu. Máy nén thường cần thời gian bảo vệ khác với boiler; hãy theo tài liệu của thiết bị thật. Nếu Home Assistant chưa sẵn sàng, Generic Thermostat cũng là một nền dễ thử với temperature sensor, switch, tolerance và minimum cycle duration.

Học tốc độ làm ấm của chính căn phòng

Cứ mỗi 1-5 phút, mình ghi lại nhiệt độ phòng, nhiệt độ mục tiêu, trạng thái HVAC, nhiệt độ ngoài trời và trạng thái cửa sổ. Chỉ những chu kỳ “sạch” mới được dùng để học: cảm biến hợp lệ, cửa đóng, setpoint không bị đổi giữa chừng và hệ thống chạy đủ lâu.

Sau một chu kỳ làm ấm, tốc độ mẫu được tính như sau:

sample_rate = (temperature_end - temperature_start) / duration_hours
learned_rate = 0.8 × learned_rate + 0.2 × sample_rate

Đây là trung bình trượt có trọng số, không phải AI thần kỳ. Nó chỉ giúp một lần mở cửa hay một ngày nắng bất thường không làm kết quả đổi quá mạnh. Khi có đủ dữ liệu, thời gian bật sớm có thể tính bằng:

lead_minutes = clamp(
  60 × abs(target - current) / max(learned_rate, 0.1),
  0,
  90
)

Ví dụ phòng đang 19 °C, mục tiêu 22 °C và tốc độ đã học là 2 °C/giờ, hệ thống nên bắt đầu trước khoảng 90 phút. Mình vẫn chặn ở 90 phút để một mẫu dữ liệu xấu không kéo lịch chạy đi quá xa.

Kỹ sư Việt Nam xem code và biểu đồ nhiệt độ trên MacBook Pro cạnh bộ điều nhiệt đang thử nghiệm.

Biểu đồ nhiệt độ theo thời gian giúp mình nhận ra căn phòng ấm lên nhanh hay chậm trong từng điều kiện.

Nếu muốn tốt hơn, có thể lưu tốc độ theo vài nhóm nhiệt độ ngoài trời, chẳng hạn dưới 10 °C, 10-20 °C và trên 20 °C. Mình chưa vội dùng model phức tạp; ba nhóm dễ nhìn biểu đồ, dễ phát hiện sai và thường đã đủ hữu ích cho một căn phòng.

Học thói quen mà không làm người dùng khó chịu

Thời điểm bật sớm và lịch sinh hoạt là hai bài toán khác nhau. Với lịch, mình ghi nhận những lần người dùng chỉnh setpoint vào các ô 30 phút, tách ngày thường và cuối tuần. Chỉ khi một mẫu lặp lại ít nhất ba lần, hệ thống mới gợi ý lịch mới.

Tuần đầu mình chỉ ghi dữ liệu. Tuần thứ hai, dashboard hiện gợi ý kiểu “phòng thường cần 38 phút để đạt 22 °C”. Sau khi con số ổn định, automation mới được phép bật sớm trong giới hạn đã đặt. Mọi thay đổi vẫn phải có nút bỏ qua, tắt learning và quay về lịch cố định.

Người dùng Việt Nam chỉnh núm xoay của bộ điều nhiệt thông minh gắn trên tường phòng làm việc.

Núm xoay và chế độ thủ công luôn còn đó; thuật toán học không nên giành quyền quyết định khỏi người dùng.

Presence sensor có thể chuyển giữa HomeAway, nhưng mình tránh đổi nhiệt độ ngay khi không thấy người trong vài phút. Một khoảng trễ 20-30 phút hợp lý hơn, nhất là khi người dùng đang ngủ hoặc ngồi yên. Camera không cần thiết cho bài toán này.

Những lỗi mình sẽ kiểm tra trước

  • Cảm biến mất kết nối: tắt learning, mở relay về trạng thái an toàn và báo lỗi rõ ràng.
  • Cửa sổ mở: dừng chu kỳ học; tùy hệ thống, có thể tạm ngừng sưởi sau một khoảng trễ.
  • Relay đóng/ngắt quá nhanh: kiểm tra lại min_*_time và log từng lần đổi trạng thái.
  • Dự đoán dao động: giảm trọng số mẫu mới hoặc chỉ cập nhật sau chu kỳ dài hơn 15 phút.
  • Người dùng chỉnh tay thường xuyên: coi đó là tín hiệu lịch chưa phù hợp, không phải “ngoại lệ” cần bỏ qua.

Bản đầu tiên mình sẽ chạy ít nhất một tuần ở chế độ chỉ ghi log. Một thermostat tốt không cần tỏ ra thông minh mọi lúc; nó chỉ cần đưa căn phòng tới nhiệt độ dễ chịu đúng giờ, chạy ổn định và luôn cho phép mình chỉnh lại bằng tay.

Nguồn tham khảo

Chia sẻ

LinkedInFacebookX

Tiếp tục khám phá

Đọc tiếp

Bài viết liên quan

Xem thêm trong Giải pháp IoT

Nastrotek sử dụng cookie để phân tích truy cập và cá nhân hóa quảng cáo, giúp hiểu cách website được sử dụng. Bạn có thể chấp nhận hoặc từ chối các cookie không thiết yếu.