專案

一般

配置概況

Bugs #11493

由 Sam Wang 於 14 天 前更新

# 告警規則管理 (Alarm Rules) 

 > 告警規則初始由 CSV `ALARM` 欄位同步匯入,後續以 DB 為唯一來源,**修改後立即生效不須重啟服務**。 

 | Method | Uri | 說明| 
 |:---| ---|:---| 
 |`GET`|`/api/v1/alarm-rules`|取得告警規則列表(支援 `?deviceId=` 過濾)| 
 |`GET`|`/api/v1/alarm-rules/{id}`|取得單一告警規則| 
 |`POST`|`/api/v1/alarm-rules`|新增告警規則| 
 |`PUT`|`/api/v1/alarm-rules/{id}`|修改告警規則| 
 |`PATCH`|`/api/v1/alarm-rules/{id}/toggle`|啟用/停用告警規則| 
 |`DELETE`|`/api/v1/alarm-rules/{id}`|刪除告警規則| 

 ```json 
 // Response ✅ GET /api/v1/alarm-rules?deviceId=5 
 { 
   "code": 0, "message": "", "timestamp": 1740902400000, 
   "payload": [{ 
     "id": 1, "deviceListId": 5, "deviceName": "電錶-01", 
     "alertId": "HighV", "alertName": "A相電壓高壓告警", 
     "functionId": "01_Vol_A", "operator": ">=", "threshold": 260.0, 
     "severity": "Warning", 
     "messageTemplate": "{DeviceName} A相電壓 {Value}V 超過門檻 {Threshold}V", 
     "isActive": true, "createdAt": "2026-03-02T00:00:00Z", "updatedAt": "2026-03-02T00:00:00Z" 
   }] 
 } 
 ``` 

 ```json 
 // Request: POST /api/v1/alarm-rules 
 { 
   "deviceListId": 5, "alertId": "HighV", "alertName": "A相電壓高壓告警", 
   "functionId": "01_Vol_A", "operator": ">=", "threshold": 260.0, 
   "severity": "Warning", 
   "messageTemplate": "{DeviceName} A相電壓 {Value}V 超過門檻 {Threshold}V", 
   "isActive": true 
 } 
 ``` 

 | 欄位 | 類型 | 說明 | 
 |:---|:---|:---| 
 | `deviceListId` | 整數 | 關聯設備 ID | 
 | `alertId` | 字串 | 告警代碼,同一設備下不可重複(e.g., HighV) | 
 | `functionId` | 字串 | 觸發判斷的點位代碼。**注意**:若是 Modbus 設備,必須加上 `群組_` 前綴(例如:`01_Vol_A`,對應 MQTT 上報之格式),不可僅填寫 `Vol_A` | 
 | `operator` | 字串 | 比較運算子:`>=`, `<=`, `>`, `<`, `==` | 
 | `threshold` | 浮點數 | 告警門檻值 | 
 | `severity` | 字串 | 告警等級:`Warning` / `Critical` | 
 | `messageTemplate` | 字串 | 訊息樣板,佔位符:`{DeviceName}`, `{Value}`, `{Threshold}` | 
 | `isActive` | 布林 | 是否啟用 | 

 ### 💡 告警等級說明 (Severity) 

 系統目前提供兩種標準的告警等級,主要作為**前端介面展示區分**與**管理員嚴重程度識別**: 

 - **`Warning` (警告)**: 
   表示設備數據偏離正常範圍,但尚未危及整體系統運作或造成損壞。通常用於預防性維護或早期發現異常趨勢。 
   *情境範例:機房溫度略高於標準、電壓出現微幅波動。* 

 - **`Critical` (嚴重)**: 
   表示設備發生嚴重異常、狀態停機,或變數已達危險門檻,需要管理層或運維人員**立即介入處理**。 
   *情境範例:設備斷電、機房溫度過高可能導致伺服器當機。* 

 > ℹ️ **系統行為關聯**: 
 > 在當前的後端邏輯中,無論等級為 `Warning` 或 `Critical`,一旦觸發告警,系統皆會: 
 > 1. 將紀錄寫入 `alarm_log` (預設 Status = 0 未結案)。 
 > 2. 依照所屬系統 (EquipmentSystem) 在 `system_config_mail` 的設定,自動派發 Email 或 LINE 訊息。 
 > 3. 目前**尚未**針對等級差異進行通知渠道的分流(例如:Warning 只發 Email、Critical 才發 LINE),這部分保留給後續業務邏輯或前端做彈性運用。 

 ```json 
 // PATCH /api/v1/alarm-rules/1/toggle 
 // Response ✅ 
 { "code": 0, "message": "告警規則已停用" } 
 ``` 

 ### 關聯性資料表 
 |資料表名稱|說明| 
 |---|---| 
 |device_list|設備清單| 
 |device_alarm_rule|告警規則| 
 |alarm_log|告警表| 
 |system_config_mail|通知群郵件紀錄|

返回