專案

一般

配置概況

動作

後端功能 #11535

進行中

後端功能 #11091: Omni IoT Server

連動管理(SMART)

由 Sam Wang 於 5 天 前加入. 於 1 天 前更新.

狀態:
新建立
優先權:
正常速度
被分派者:
-
開始日期:
2026/03/12
完成日期:
完成百分比:

0%

預估工時:
使用工時:

由 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
如何防止「一直控制」?

  1. interval 設為大於 0 的值(如 60 秒),確保不會在短時間內重複下發。
  2. 若只需在狀態改變時執行一次,請搭配 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}移除指定智慧聯動規則
:::

動作

匯出至 Atom PDF