跳到內容
返回官網

觸發方案

指令碼語法為 Lua。觸發方案的整體概念(觸發條件/觸發動作的分類)請先閱讀 觸發方案,本頁詳細說明 EXPRESSION 型別觸發動作指令碼的寫入參數、回傳結構與完整示例。

  1. 觸發邏輯與其他型別觸發方案一致,區別在於觸發動作的指令碼內容。
  2. 指令碼執行完成後,Edge-EMS Builder 後端會解析指令碼回傳的結果,按結果內容寫入指定的點位。

注:需要求使用者有程式設計基礎,並熟悉策略執行流程,具體指令碼語法參見 Lua引擎規則。

參數名 參數值 是否必填 參數型別 描述說明
dataType Customization 是 String 要操作的資料型別:Customization/Collection/Aggregation/Alarm/Share
deviceCode DeviceA 否 String 從裝置編碼
dataKey 功率 是 String 資料唯一 dataKey 或告警型別
dataValue 15 是 String 資料值 或 告警內容
changeMod true 否 String 是否開啟變化寫入
availableDate 2023-01-15T07:00:00+08:00 否 String 生效日期(Customization)
expiredDate 2023-01-15T10:00:00+08:00 否 String 失效日期(Customization)
mqttConnectionConfigId 100101 否 String MQTT 連線設定 ID(Alarm)
topic upload 否 String 告警上傳 Topic(Alarm)
qos 1 否 String QOS(Alarm)

分時資料(Customization)還支援**每日重複(DailyRepeat)**排班型別:用 availableTime/expiredTime(格式 HH:mm:ss,不得跨午夜)代替 availableDate/expiredDate,每天迴圈生效。可直接使用簡寫函式 buildCustomizationWriteMap(dataKey, dataValue, availableDate, expiredDate)(DailyChange 專用)或 buildDailyRepeatWriteMap(dataKey, dataValue, availableTime, expiredTime)(DailyRepeat 專用),詳見 Lua引擎規則。

若指令碼中引用的點位取不到值,會被注入哨兵字串 __Null__,請勿假設其為空字串或 nil,應顯式判斷 ${dataKey} == "__Null__"。

local resultList = {}
-- 自訂告警內容
local errorMap = {}
errorMap.timestamp = OffsetDateTime.now():unixMilli()
errorMap.iotCode = ${数据9}
errorMap.faultCode = ${数据9}
errorMap.faultLevel = ${数据9}
errorMap.faultName = ${数据9}
errorMap.faultBack = ${数据9}
-- 將告警內容轉為 JSON
local errorMessage = toJsonString(errorMap)
table.insert(resultList, buildCommonWriteMap("Customization", "mode", 15, "2023-01-15T07:00:00+08:00", "2023-01-15T10:00:00+08:00", true))
table.insert(resultList, buildCommonAlarmMap("二级告警", "二级告警"))
table.insert(resultList, buildMqttAlarmMap("一级告警", errorMessage, 1, "upload", 1))
table.insert(resultList, buildCommonWriteMap("Collection", "数据10", 200, nil, nil, true))
table.insert(resultList, buildCommonWriteMap("Aggregation", "温度", 20, nil, nil, false))
table.insert(resultList, buildSlaveWriteMap("DeviceB", "Share", "数据3", 888, nil, nil, false))
return resultList

期望回傳一個包含若干 Table 的陣列,Edge-EMS Builder 會解析這個陣列,驗證陣列中物件的內容是否合法,隨後回傳封裝好的寫入物件:

[
{
"dataType": "",//操作物件
"deviceCode": "",//從裝置唯一編碼(透過此值確定向哪一臺從裝置寫入資料)
"dataKey": "",//操作物件唯一KEY(dataKey 或 alarmType)
"dataValue": "",//要寫入或告警內容
"changeMod": true,//是否變化寫入
"availableDate": "",//分時資料 生效時間
"expiredDate": ""//分時資料失效時間
}
]

解析執行結果,並驗證其內容是否準確,回傳預執行封裝物件:

{
"writeCommBridgeContent": [
{
"dataKey": "数据10",
"dataValue": "200"
}
],
"writeAggregationDataConfigs": [
{
"aggregationDataConfigId": 100004,
"dataKey": "温度",
"dataName": "温度",
"collectionCycle": -1,
"expression": "return 15",
"status": "Valid",
"empty": false,
"hasGroup": false,
"useLatestValue": true,
"note": "",
"createdBy": 100001,
"createdTime": "2025-03-18T15:04:39.503+08:00",
"updatedBy": 100001,
"updatedTime": "2025-03-28T10:21:15.578+08:00"
}
],
"writeAggregationDataValues": [
{
"aggregationDataConfigId": 100004,
"dataValue": "20",
"collectionTime": "2025-04-23T15:30:49.913+08:00"
}
],
"writeCustomizationDataValues": [
{
"customizationDataConfigId": 100003,
"dataValue": "15",
"availableDate": "2023-01-15T07:00:00.000+08:00",
"expiredDate": "2023-01-15T10:00:00.000+08:00",
"createdBy": 100000,
"createdTime": "2025-04-23T15:30:49.912+08:00"
}
],
"writeShareDataValues": [
{
"shareDataConfigId": 3,
"deviceCode": "DeviceB",
"dataKey": "数据3",
"collectionCycle": 3000,
"dataValue": "888",
"collectionTime": "2025-04-23T15:30:49.914+08:00"
}
],
"alarmRecords": [
{
"alarmType": "二级告警",
"alarmContent": "二级告警",
"alarmTime": "2025-04-23T15:30:49.912+08:00",
"mark": "None"
},
{
"alarmType": "一级告警",
"alarmContent": "{\"iotCode\":66.60000000,\"faultCode\":66.60000000,\"faultBack\":66.60000000,\"faultLevel\":66.60000000,\"timestamp\":1745393449910,\"faultName\":66.60000000}",
"alarmTime": "2025-04-23T15:30:49.912+08:00",
"mark": "None",
"mqttConnectionConfigId": 1,
"topic": "upload",
"qos": 1
}
]
}

image-20250415172946412

  • 觸發方案的整體概念(條件型別、動作型別、動態裝置發現示例):觸發方案
  • 完整的 Lua 內建函式與模組參考:Lua引擎規則