# 🌡️ 溫度監控與警報系統

## 📌 功能簡介

此專案透過 Flask 網站 + SQLite 資料庫，定時從 **210.62.179.209/Data.txt** 抓取冷凍冷藏室的即時溫度，並具備 **超標警報與 Gmail API 通知功能**。  
同時支援歷史查詢、Excel 匯出與排程紀錄。

---

## 🔧 系統架構

- **語言**：Python + Flask
- **資料庫**：SQLite (`temperatures.db`)
- **功能模組**：
    
    
    - `requests`：抓取即時溫度
    - `schedule` + `threading`：背景定時任務
    - `pandas`：Excel 匯出
    - `googleapiclient`：Gmail API 寄送通知
- **服務監控點**：
    
    
    - 1F前室
    - 魚翅保存庫
    - 原物料保存庫
    - 成品保存庫
    - 急速冷凍室
    - 製成品預冷室
    - 2F冷藏室
    - 3F冷藏室

---

## 📑 功能說明

### 1. 定時紀錄與警報

- 每 10 分鐘自動抓取一次溫度數據並存入資料庫。
- 若溫度高於設定值（排除除霜時段），會透過 Gmail API 發送異常警報。
- 記錄冷卻時間 (`alert_cooldown_hours`)，避免重複通知。

### 2. 設定檔 (`config.json`)

```json
{
  "notifications": {
    "enabled": true,
    "sender": "zfuntw@gmail.com",
    "recipients": ["example@mail.com"],
    "alert_cooldown_hours": 3
  },
  "temperature_settings": {
    "1F前室": {"enabled": true, "threshold": 10, "defrost_hours": [3, 15]},
    "魚翅保存庫": {"enabled": true, "threshold": -5, "defrost_hours": []}
  }
}
```

### 3. 前端介面

- `/` 即時監控頁面，顯示當前溫度
- `/history` 歷史紀錄查詢，可篩選日期區間
- `/export_excel` 將指定日期區間匯出 Excel
- `/settings` 設定通知收件人、警報值與除霜時段

### 4. Gmail API 通知

- 使用 `token.json` 儲存授權憑證。
- 異常時寄送 Email 通知指定人員。

### 5. 簡易版資料採集程式

另附加 `get_temperature_data` 腳本：

- 每 10 秒抓取一次溫度資料
- 僅儲存前 4 筆溫度數據至資料庫

---

## 📂 資料表結構

`temperatures`

<div class="_tableContainer_16hzy_1" id="bkmrk-%E6%AC%84%E4%BD%8D-%E8%AA%AA%E6%98%8E-id-%E4%B8%BB%E9%8D%B5-timestam"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1705" data-start="1421"><thead data-end="1432" data-start="1421"><tr data-end="1432" data-start="1421"><th data-col-size="sm" data-end="1426" data-start="1421">欄位</th><th data-col-size="sm" data-end="1432" data-start="1426">說明</th></tr></thead><tbody data-end="1705" data-start="1449"><tr data-end="1460" data-start="1449"><td data-col-size="sm" data-end="1454" data-start="1449">id</td><td data-col-size="sm" data-end="1460" data-start="1454">主鍵</td></tr><tr data-end="1481" data-start="1461"><td data-col-size="sm" data-end="1473" data-start="1461">timestamp</td><td data-col-size="sm" data-end="1481" data-start="1473">紀錄時間</td></tr><tr data-end="1508" data-start="1482"><td data-col-size="sm" data-end="1500" data-start="1482">temp\_front\_room</td><td data-col-size="sm" data-end="1508" data-start="1500">1F前室</td></tr><tr data-end="1535" data-start="1509"><td data-col-size="sm" data-end="1526" data-start="1509">temp\_shark\_fin</td><td data-col-size="sm" data-end="1535" data-start="1526">魚翅保存庫</td></tr><tr data-end="1566" data-start="1536"><td data-col-size="sm" data-end="1556" data-start="1536">temp\_raw\_material</td><td data-col-size="sm" data-end="1566" data-start="1556">原物料保存庫</td></tr><tr data-end="1600" data-start="1567"><td data-col-size="sm" data-end="1591" data-start="1567">temp\_finished\_product</td><td data-col-size="sm" data-end="1600" data-start="1591">成品保存庫</td></tr><tr data-end="1631" data-start="1601"><td data-col-size="sm" data-end="1622" data-start="1601">temp\_blast\_freezer</td><td data-col-size="sm" data-end="1631" data-start="1622">急速冷凍室</td></tr><tr data-end="1665" data-start="1632"><td data-col-size="sm" data-end="1655" data-start="1632">temp\_precooling\_room</td><td data-col-size="sm" data-end="1665" data-start="1655">製成品預冷室</td></tr><tr data-end="1685" data-start="1666"><td data-col-size="sm" data-end="1676" data-start="1666">temp\_2f</td><td data-col-size="sm" data-end="1685" data-start="1676">2F冷藏室</td></tr><tr data-end="1705" data-start="1686"><td data-col-size="sm" data-end="1696" data-start="1686">temp\_3f</td><td data-col-size="sm" data-end="1705" data-start="1696">3F冷藏室</td></tr></tbody></table>

</div></div>## ▶️ 啟動方式

```bash
python app.py
```

網站預設服務於  
👉 [https://temp.zfun.com.tw/login](https://temp.zfun.com.tw/login)

---

## ⚠️ 注意事項

- 需先完成 Gmail API OAuth 授權並放置 `token.json`。
- 除霜時間需在設定檔中明確設定，避免誤報。
- 若無法連線 `210.62.179.209`，會回傳空值並略過紀錄。