動作
後端功能 #11535
進行中
由 Sam Wang 於 1 天 前更新
智慧邏輯管理 (Smart)¶
提供智慧化場景聯動的設置管理,包含多組條件 (Expressions) 與動作 (Actions) 執行。
| Method | Uri | 說明 |
|---|---|---|
GET |
/api/Smart |
取得所有智慧邏輯設定 |
GET |
/api/Smart/{id} |
取得指定 ID 之智慧邏輯 |
POST |
/api/Smart |
新增智慧邏輯 |
PUT |
/api/Smart |
更新全部智慧邏輯設定 |
PUT |
/api/Smart/{id} |
更新指定 ID 之智慧邏輯 |
DELETE |
/api/Smart |
刪除所有智慧邏輯設定 |
DELETE |
/api/Smart/{id} |
刪除指定 ID 之智慧邏輯 |
◉ 智慧邏輯參數說明 (統一化設計)¶
| 參數 | 類型 | 說明 |
|---|---|---|
name |
字串 | 規則名稱 |
expressions |
陣列 |
條件列表 (Conditions)。邏輯上採 AND 判定(所有條件成立才觸發)。每個項目包含 target, operator, value。持續判定:target 可後綴 :sec (如 `MODBUS |
actions |
陣列 |
符合條件時的動作列表。當 expressions 中所有條件由「不成立」變為「成立」時執行。結構與 Scenes 的 actions 相同 (id, delay) |
interval |
整數 |
觸發冷卻時間 (秒)。- > 0: 執行動作後,在此秒數內不會再次觸發執行,防止重複控制。- 0: 邊緣觸發模式 (Edge-Triggered)。狀態符合時僅執行一次 actions,直到狀態由符合變為不符合並再次轉為符合後才會再次觸發。 |
next |
整數 |
後續執行行為- 0: (預設) 執行後規則維持啟動。若條件持續成立,將在 interval 後再次嘗試觸發。- -1: 單次觸發模式。執行一次後,自動將該規則關閉 (status=0)。 |
on |
陣列 | 規則啟用時的動作列表。當此 Smart 規則從 Disable 轉為 Enable 時執行。 |
off |
陣列 | 規則關閉時的動作列表。當此 Smart 規則從 Enable 轉為 Disable 時執行。 |
◉ 進階參數實例說明¶
1. 持續時間判定 (target:sec)¶
當需要「條件持續滿足一段時間」才觸發時使用。例如:溫度超過 30 度且「持續 60 秒」才開啟風扇。
{
"name": "高溫持續開啟風扇",
"expressions": [
{ "target": "MODBUS|1|temp:60", "operator": ">", "value": 30 }
],
"actions": [
{ "id": "MODBUS|1|fan|ON", "delay": 0 }
]
}
2. 冷卻時間 (interval)¶
防止設備頻繁切換。例如:偵測到人體移動開燈後,由「間隔 300 秒」後才能再次被此規則觸發。
{
"name": "感應開燈(含冷卻)",
"expressions": [
{ "target": "MQTTIOT|pir_01|motion", "operator": "==", "value": "1" }
],
"actions": [
{ "id": "MODBUS|1|light|ON", "delay": 0 }
],
"interval": 300
}
3. 單次觸發 (next: -1)¶
執行一次後即自動停用該規則。適用於「一次性告警」或「手動復歸」場景。
{
"name": "單次水位告警",
"expressions": [
{ "target": "MODBUS|1|water_level", "operator": ">=", "value": 90 }
],
"actions": [
{ "id": "Sys|line|send|水位過高通知", "delay": 0 }
],
"next": -1
}
:::tip
如何防止「一直控制」?
- 將
interval設為大於 0 的值(如 60 秒),確保不會在短時間內重複下發。 - 若只需在狀態改變時執行一次,請搭配
interval或將next設為-1。
:::
◉ 取得所有智慧邏輯 [GET]¶
:::info
GET /api/Smart取得系統中所有智慧聯動規則
:::
:::spoiler Response ✅ 成功 (200 OK)
{
"code": 0,
"message": "Success",
"timestamp": 1741584000000,
"payload": {
"ver": 1,
"1": {
"name": "溫度過高自動開空調",
"expressions": [
{ "target": "MODBUS|10|01_1", "operator": "==", "value": 2 }
],
"actions": [
{ "id": "Sys|Scenes|1|1", "delay": 0 }
],
"on": [],
"off": []
}
}
}
:::
◉ 新增智慧邏輯 [POST]¶
:::info
POST /api/Smart新增一筆智慧聯動規則
:::
:::spoiler Request
{
"name": "人體感應開燈",
"expressions": [
{ "target": "MQTTIOT|pir_01|motion", "operator": "==", "value": "1" }
],
"actions": [
{ "id": "MODBUS|1|light_01|ON", "delay": 0 }
],
"on": [],
"off": []
}
:::
◉ 更新智慧邏輯 [PUT]¶
:::info
PUT /api/Smart/{id}修改指定智慧聯動規則之條件或動作
:::
:::spoiler Request
{
"name": "人體感應開燈 (已修改)",
"expressions": [
{ "type": "condition", "target": "MQTTIOT|pir_01|motion", "operator": "==", "value": true }
],
"actions": [
{ "id": "MODBUS|1|light_01|ON", "delay": 0 }
],
"on": [
{ "id": "MODBUS|1|light_01|ON", "delay": 0 },
{ "id": "MODBUS|1|fan_01|ON", "delay": 1000 }
],
"off": [
{ "id": "MODBUS|1|light_01|OFF", "delay": 0 },
{ "id": "MODBUS|1|fan_01|OFF", "delay": 1000 }
]
}
:::
◉ 刪除智慧邏輯 [DELETE]¶
:::info
DELETE /api/Smart/{id}移除指定智慧聯動規則
:::
動作