Grafana Floor Panel + T-HMI Sensors
Panel Grafana vẽ sơ đồ mặt bằng và tô màu từng phòng theo nhiệt độ, độ ẩm. Dữ liệu đến từ các node cảm biến ESP32-S3 qua MQTT.
- Commit (panel + firmware)
- 66
- Phòng trên sơ đồ mẫu lớn nhất
- 39
- Chu kỳ đọc cảm biến
- 1 s
- Phiên bản Grafana
- 10.3+
Bài toán và cách giải
Lab kiểm thử hay xưởng sản xuất có nhiều phòng, mỗi phòng có ngưỡng nhiệt độ và độ ẩm riêng. Nhìn bảng số liệu cảm biến thì khó thấy ngay phòng nào đang vượt ngưỡng. Panel này vẽ sơ đồ mặt bằng ngay trong Grafana và tô màu từng phòng theo một điểm từ 0 đến 100. Điểm cho biết nhiệt độ và độ ẩm đang nằm ở đâu trong ngưỡng riêng của cảm biến: 0 là ở ngưỡng dưới, 100 là chạm hoặc vượt ngưỡng trên. Phòng có vấn đề hiện ra ngay, bấm vào là mở trang chi tiết.
Panel chạy trên dashboard của một lab kiểm thử và các xưởng sản xuất. Repo có 9 sơ đồ mẫu, sơ đồ lớn nhất có 39 phòng.
Ghi chú kỹ thuật đầy đủ
Cách hoạt động
Node T-HMI đọc nhiệt độ và độ ẩm mỗi giây. Mặc định cứ 5 phút node gửi số đo lên MQTT broker một lần. Nếu nhiệt độ đổi 1 °C hoặc độ ẩm đổi 5 %RH thì node gửi ngay. Kho time-series lưu số đo: trước là InfluxDB, nay là ClickHouse. Dashboard Grafana truy vấn kho này, còn panel tô màu từng phòng trên sơ đồ SVG.
Dashboard mẫu làm mới mỗi 30 giây. Giữa hai lần làm mới, một bộ đếm 3 giây đẩy màu của từng phòng dần về điểm mới. Panel không dùng Grafana Live streaming.
Tính năng của panel
- Dùng được mọi sơ đồ vẽ bằng phần mềm vector. Mỗi phòng là một hình SVG có id theo quy ước
room:. DOMPurify làm sạch SVG trước khi hiển thị. - Mỗi phòng có điểm từ 0 đến 100, tính theo vị trí của nhiệt độ và độ ẩm trong ngưỡng của từng cảm biến. Ngưỡng mặc định là 18 đến 30 °C và 30 đến 70 %RH. Ngưỡng gửi kèm dữ liệu sẽ thay ngưỡng mặc định.
- Chế độ gradient tô mỗi phòng bằng một gradient toả tròn, lấy màu từ bảng màu Grafana hoặc các mức threshold. Chế độ theo dải tô mỗi phòng một màu. Nhãn chú thích đổi được.
- Phòng không có dữ liệu hiện “Disconnected” và để trống.
- Rê chuột lên phòng sẽ thấy vị trí, thiết bị, nhiệt độ, độ ẩm, ngưỡng, điểm và lần cập nhật cuối.
- Bấm vào phòng mở một URL chi tiết cấu hình được, điền sẵn phòng, vị trí, cảm biến và thiết bị.
- Mỗi phòng có một dropdown để chọn cảm biến từ kết quả truy vấn. Thứ tự cảm biến giữ nguyên giữa các lần làm mới.
- Panel đọc kết quả InfluxDB (Flux) hoặc các dòng SQL có cột nhiệt độ và độ ẩm.
- CI ký mỗi bản build thành plugin Grafana riêng tư và đóng gói thành file zip.
Node cảm biến
T-HMI là board LilyGO dùng ESP32-S3, màn hình cảm ứng 2,8 inch và cảm biến Sensirion SHT35/SHT85. Màn hình hiện số đo cùng trạng thái WiFi, MQTT, pin và cập nhật. Hiệu chuẩn chạy hai bước: theo từng đoạn, rồi tuyến tính. Mỗi lần đọc có kiểm tra CRC, và một bộ lọc bỏ các giá trị nhảy vọt. Node nhận lệnh khởi động lại, cập nhật và đồng bộ giờ qua MQTT, và tự cập nhật firmware OTA. Có thể gắn thêm cảm biến chênh áp.
Nguồn gốc
Panel phát triển từ một panel chất lượng không khí trong nhà mã nguồn mở (Apache-2.0). Khoa đổi tên thành Environment Quality Floor rồi mở rộng thêm. Cả 66 commit đều do Khoa viết. Panel có 22 commit, từ tháng 7/2025 đến tháng 6/2026. Firmware có 44 commit, từ tháng 2/2025 đến tháng 7/2026. 8 trong 66 commit ghi một AI pair programmer là đồng tác giả. Mã nguồn nằm trong repo công việc riêng tư, nên trang này không có link mã nguồn.
Dữ liệu đi qua hệ thống thế nào
Vẽ lại từ file compose, cấu trúc thư mục và config trong repo.
- edgeNode cảm biến T-HMIESP32-S3, SHT35/SHT85, màn hình cảm ứng 2,8 inch
- transportMQTT brokerMQTT, payload JSON
- storageKho dữ liệu time-seriesInfluxDB, nay là ClickHouse
- queryData source GrafanaFlux (InfluxDB) hoặc SQL
- panelPanel Environment Quality FloorReact 18, Grafana 10.3 plugin SDK, SVG
Các thư mục chính trong repo
- 01Đọc repo
- 02Phân tích README, docs, compose, package
- 03Viết nội dung, bỏ thông tin nội bộ
- 04Reviewer agent đối chiếu với nguồn
- 05Khoa duyệt trang, rồi deploy