Python · IoT · CrateDB · Docker · Apache Superset
專案概述
以 TP-Link Tapo H200 網關搭配 T315 溫濕度感測器為資料來源,Python 採集器啟動後自動發現網關下的所有 T315 感測器,每隔約 60 秒輪詢一次並將讀值寫入 CrateDB 時序資料庫。Apache Superset 負責儀表板呈現,整套服務以 Docker Compose 封裝,可部署至 Synology NAS 或一般 Docker 主機。 H200 網關的 API 在感測器斷線後仍會持續回傳最後一筆快取讀值,不提供子裝置的 online/offline 狀態。系統透過四訊號交叉比對機制偵測這類過時資料,驗證失敗時將溫度與濕度欄位寫入 NULL 並記錄至stale.log。
核心功能
- 啟動後自動發現 H200 網關下的所有 T315 感測器,無需手動設定裝置清單
- 每 60 秒採集溫度、濕度、電池電量與 RSSI,寫入 CrateDB
- 四訊號交叉驗證(RSSI 門檻、RSSI 凍結、溫濕度同時凍結、device_time 凍結),至少 N 項失敗才判為 stale(預設 N=2),避免單一指標誤判
- Stale 資料的溫濕度欄位寫 NULL,保留
is_valid與stale_reasons,事件同步寫入stale.log - Apache Superset 儀表板,預建每分鐘、每小時、每日、每週、每月統計視圖
- 支援 Cloudflare Tunnel,遠端存取不需開放入站埠號
- 服務異常自動重連與重試,
restart: unless-stopped
專案架構
climate-monitor
src/climate_monitor
core
collector.py · 主採集迴圈
tapo_client.py · 與 H200 通訊
validator.py · 四訊號驗證器
infra/database.py · CrateDB 客戶端
config.py · 環境變數載入
main.py
docker
docker-compose.pc.yml · 本地開發
docker-compose.prod.yml · NAS 生產
scripts/init_db.sql · CrateDB Schema 初始化
快速開始
1
準備環境變數
2
啟動所有服務(NAS / 生產)
3
初始化 Superset(僅首次)
4
初始化 CrateDB Schema
開啟瀏覽器至
http://NAS-IP:4200,在 SQL console 執行 scripts/init_db.sql。5
確認採集正常
連線驗證邏輯
H200 API 不揭露子裝置連線狀態,感測器斷線後仍回傳快取值。系統以四項訊號交叉比對判斷: 至少VALIDATOR_MIN_FAILED_CHECKS(預設 2)項同時失敗才判為 stale。凍結判定次數根據 frozen_window / collection_interval 自動計算。
注意事項
實際應用面
適合需要長期、低成本監控多點溫濕度的場景,例如實驗室環境記錄、伺服器機房基礎監控、家庭環境管理。stale 驗證機制讓資料庫裡的 NULL 具有明確語義(感測器離線),而非默默存入錯誤數值,方便後續統計分析時正確排除無效時段。相關連結
- GitHub:felimet/climate-monitor
- CrateDB 文件:cratedb.com/docs
- Apache Superset 文件:superset.apache.org/docs