Dev .NET dựng cảm biến theo dõi tủ lạnh Miele tại nhà

Sáng ra thấy tủ đông rã đông, thủ phạm nằm ở đâu

Đội ngũ bên mình làm việc với không ít gia đình dùng thiết bị bếp cao cấp. Trong số đó, tủ lạnh, tủ đông Miele thường được tin tưởng nhất. Thế nhưng chúng tôi vẫn nhận được những tin nhắn hoảng hốt vào buổi sáng. Mở ngăn đông ra thì kem đã chảy thành nước, thịt đóng tảng dính vào đá. Phản ứng đầu tiên của đa số người dùng là nghĩ máy đã hỏng.

Khi ngồi lần ngược lại từng trường hợp, nguyên nhân thường đơn giản hơn nhiều. Có hôm chỉ là một đợt cúp điện nửa đêm kéo dài vài tiếng. Có hôm lại là một góc khăn bếp vô tình kẹt vào gioăng cửa, khiến cánh tủ không khép kín. Những chuyện nhỏ như vậy đủ để thực phẩm trong cả khay hỏng sạch.

Điều khiến người dùng khó chịu nhất là tủ không có cách nào báo cho bạn biết. Đèn vẫn sáng, máy vẫn ù ù chạy đều. Bạn chỉ nhận ra có chuyện khi mọi thứ đã mềm nhũn.

Khi mất điện hoặc cửa hở mà không ai hay

Hãy hình dung một ngày làm việc bình thường. Điện chập chờn lúc 2 giờ chiều, tủ tắt khoảng 4 tiếng rồi có điện trở lại. Máy tiếp tục chạy như chưa có gì xảy ra. Tối về mở cửa, bạn mới thấy cả ngăn đông đã tan.

Kịch bản thứ hai ít kịch tính hơn nhưng không kém nguy hiểm. Cánh cửa hé khoảng 2 cm. Tiếng máy vẫn đều đều, nhiệt độ bên trong âm thầm tăng lên, và không có tiếng báo nào để bạn đứng dậy kiểm tra. Đến khi phát hiện thì thường đã muộn.

Nhiệt độ cũng là một dòng dữ liệu đáng theo dõi

Nhiệt độ thay đổi liên tục theo thời gian. Nếu ghi lại được đường cong ấy, một cú nhảy bất thường sẽ hiện ra rất rõ. Dev .NET vốn quen làm việc với log và metric mỗi ngày, nên coi nhiệt độ như một nguồn dữ liệu là điều khá tự nhiên. Đây cũng là hướng tiếp cận mà chúng tôi thường áp dụng cho các bài toán giám sát thiết bị.

Bài toán nhỏ: giám sát nhiệt độ tủ lạnh bằng .NET

Mục tiêu của bài này khá gọn. Chúng ta không đụng vào mạch điều khiển của tủ. Thay vào đó, đặt một cảm biến nhiệt độ rời bên trong ngăn. Cảm biến gửi số đo về một service, service ghi lại và phát cảnh báo khi có gì đó lệch khỏi mức bình thường.

Cảm biến rời gửi số đo về một service

Các cảm biến giá rẻ hiện nay thường dùng Wi-Fi hoặc MQTT. Cứ mỗi vài phút, thiết bị gửi một gói tin gồm mã định danh và giá trị đo. Phía server chỉ cần một endpoint nhận dữ liệu, hoặc một worker đọc từ message broker, là đủ để vận hành.

Phạm vi bài: cảm biến phụ, không can thiệp máy

Chúng tôi nhấn mạnh điểm này vì nó liên quan trực tiếp đến bảo hành lẫn an toàn. Cảm biến chỉ quan sát, không nối vào mạch điều khiển. Nếu có sự cố, bạn có thể yên tâm rằng nguyên nhân không đến từ việc tự tay sửa đổi máy.

Thiết kế dữ liệu cho cảm biến nhiệt độ

Thiết kế bảng dữ liệu nghe đơn giản, nhưng chỉ cần lệch một chút là về sau việc truy vấn xu hướng sẽ rất khổ. Một gói tin tối thiểu nên có bốn trường: thời điểm đo, mã thiết bị, giá trị và đơn vị. Đơn vị nên ghi rõ ràng, kể cả khi bạn nghĩ mình sẽ chỉ dùng độ C mãi mãi.

Mốc thời gian, mã thiết bị, giá trị, đơn vị

Thời điểm nên lưu theo UTC. Lý do khá thực tế: nếu sau này bạn chuyển server hoặc đổi múi giờ, dữ liệu cũ vẫn được đọc đúng. Mã thiết bị cần phân biệt ngăn mát với ngăn đông, vì hai ngăn có ngưỡng khác nhau hoàn toàn.

Cách lưu để truy vấn xu hướng

Với lượng dữ liệu của một gia đình, một bảng SQL thông thường là đủ dùng. Hãy đánh index theo cặp mã thiết bị và thời điểm để vẽ biểu đồ nhanh hơn. Đừng vội đưa lên một hệ thống chuỗi thời gian phức tạp khi chưa thực sự cần.

Viết Worker Service nhận và xử lý số đo

Worker Service trong .NET là lựa chọn gọn gàng cho tác vụ chạy nền. Nó khởi động cùng ứng dụng, chạy vòng lặp và tự dừng êm khi nhận tín hiệu tắt. Với bài toán này, đội ngũ thấy nó đủ dùng và dễ bảo trì hơn hẳn một tiến trình tự viết từ đầu.

Background service đọc dữ liệu định kỳ

Vòng lặp chính đọc hàng đợi hoặc gọi thiết bị theo chu kỳ, sau đó chuyển từng số đo cho tầng xử lý. Đừng để cả vòng lặp dừng lại chỉ vì một gói tin lỗi. Hãy bọc phần xử lý trong try-catch cục bộ, ghi lại lỗi rồi tiếp tục công việc.

Ghi log có cấu trúc để dễ truy vết

Dùng Serilog hoặc logger tích hợp sẵn, kèm các thuộc tính có tên rõ ràng như DeviceId, Temperature và Unit. Khi cần tìm nguyên nhân tủ nóng lên lúc 3 giờ sáng, bạn chỉ cần lọc theo DeviceId là ra ngay, không phải đọc từng dòng chữ thô.

Ngưỡng cảnh báo hợp lý cho ngăn mát và ngăn đông

Đặt ngưỡng sai là cách nhanh nhất để người dùng tắt luôn thông báo. Ngăn mát thường giữ quanh mức vài độ C, còn ngăn đông sâu hơn nhiều. Bạn nên đặt ngưỡng riêng cho từng ngăn, đừng dùng chung một con số cho tất cả.

Cảnh báo theo xu hướng, tránh báo giả khi mở cửa

Mỗi lần có người mở tủ, nhiệt độ bên trong tăng vọt trong vài phút. Nếu hệ thống báo ngay khi vừa chạm ngưỡng, điện thoại sẽ reo liên tục và cả nhà sẽ nhanh chóng tắt thông báo. Cách dễ chịu hơn là chỉ báo khi nhiệt độ vượt ngưỡng liên tục trong một khoảng thời gian, chẳng hạn 15 phút. Như vậy, những cú mở cửa thoáng qua sẽ không làm phiền bạn.

Gửi thông báo qua email hoặc chat

Email phù hợp với cảnh báo mức vừa. Với cảnh báo khẩn, tin nhắn qua nhóm chat gia đình thường đến nhanh hơn. Để mức độ cảnh báo quyết định kênh gửi, đừng đẩy mọi thứ qua cùng một đường.

Vì sao tủ chất lượng cao vẫn nên có giám sát phụ

Có người sẽ hỏi: tủ đã đắt tiền thì còn cần giám sát làm gì? Theo kinh nghiệm của đội ngũ, thiết bị tốt chỉ giảm rủi ro chứ không loại bỏ hoàn toàn rủi ro. Mất điện, cửa hở hay đặt tủ gần nguồn nhiệt vẫn có thể xảy ra với bất kỳ dòng máy nào.

Các dòng tủ lạnh, tủ đông Miele được thiết kế để giữ nhiệt ổn định và có cảnh báo ngay tại chỗ. Tuy vậy, một lớp giám sát bên ngoài vẫn có ích, vì nó lưu lại lịch sử và báo cho bạn ngay cả khi không đứng cạnh máy. Nếu đang cân nhắc thiết bị cho bếp, bạn có thể tham khảo dòng tủ lạnh, tủ đông Miele để xem các model phù hợp với không gian nhà mình.

Muốn hiểu thêm cách xử lý khi thiết bị gửi dữ liệu lỗi, bạn có thể đọc bài xử lý exception đúng cách thay vì try-catch tràn lan. Phần lớn nguyên tắc trong đó áp dụng tốt cho worker đọc cảm biến.

Lỗi thường gặp khi đặt cảm biến

Phần lớn dữ liệu sai đến từ vị trí đặt cảm biến chứ không phải từ code. Đặt sát thành lạnh thì số đo thấp hơn thực tế. Đặt sát cửa thì mỗi lần mở tủ lại tạo một cú nhảy giả. Đặt cạnh khe quạt thì khí lạnh thổi thẳng vào, khiến số đo dao động vô nghĩa.

Đặt sát thành lạnh, sát cửa, cạnh khe quạt

  • Đặt ở giữa ngăn, cách thành khoảng vài centimet.
  • Tránh vị trí ngay sát cửa tủ.
  • Không để cảm biến đối diện trực tiếp khe thổi khí lạnh.

Pin cảm biến yếu trong môi trường lạnh

Pin tụt nhanh khi nhiệt độ xuống thấp. Một cảm biến đang chạy tốt bỗng im lặng vào sáng thứ Hai thường là do pin. Hãy để service phát hiện thiết bị không gửi dữ liệu quá một khoảng thời gian nhất định rồi báo bạn thay pin.

Mở rộng sang nhà bếp thông minh

Khi đã có luồng dữ liệu nhiệt độ, việc thêm cảm biến khác khá dễ dàng. Cảm biến độ ẩm giúp hiểu khí hậu trong bếp. Cảm biến cửa cho biết tủ đã mở bao lâu, từ đó giải thích được các cú nhảy nhiệt độ.

Thêm cảm biến và dashboard đơn giản

Một trang dashboard nhỏ chỉ cần vẽ biểu đồ nhiệt độ theo giờ cho từng ngăn. Bạn không cần framework phức tạp. Blazor hoặc một trang Razor gọn nhẹ là đủ để xem xu hướng ngay lúc pha cà phê buổi sáng.

Câu hỏi thường gặp

Cần phần cứng gì để bắt đầu?

Bạn cần một cảm biến nhiệt độ kết nối Wi-Fi, một máy chủ nhỏ hoặc máy tính cũ chạy được .NET, và một cơ sở dữ liệu SQL đơn giản. Với một gia đình, chi phí chủ yếu nằm ở cảm biến, phần còn lại thường tận dụng thiết bị sẵn có.

Cảm biến phụ có ảnh hưởng đến bảo hành không?

Thông thường là không, vì cảm biến chỉ đặt bên trong và không đấu nối vào mạch tủ. Tuy vậy, bạn nên xem lại điều kiện bảo hành của hãng và tránh khoan đục hay sửa đổi bất kỳ bộ phận nào của máy.

Nên lưu dữ liệu trong bao lâu?

Với mục đích theo dõi sự cố, lưu khoảng ba đến sáu tháng là đủ để nhìn lại các đợt mất điện hay cửa hở gần đây. Dữ liệu cũ hơn có thể gộp thành giá trị trung bình theo ngày để tiết kiệm dung lượng.