觸發方案
指令碼語法為 Lua。觸發方案的整體概念(觸發條件/觸發動作的分類)請先閱讀 觸發方案,本頁詳細說明 EXPRESSION 型別觸發動作指令碼的寫入參數、回傳結構與完整示例。
- 觸發邏輯與其他型別觸發方案一致,區別在於觸發動作的指令碼內容。
- 指令碼執行完成後,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}-- 將告警內容轉為 JSONlocal 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期望執行結果
Section titled “期望執行結果”期望回傳一個包含若干 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 } ]}告警 MQTT 上傳結果
Section titled “告警 MQTT 上傳結果”