Ir al contenido
JelinaJelina DocumentationDocumentación técnica
Volver al sitio oficial

Esquemas de disparadores

La sintaxis de los scripts es Lua. Antes de continuar, consulta los conceptos y la clasificación de condiciones y acciones en Esquemas de disparadores. Esta página detalla los parámetros de escritura, la estructura de retorno y un ejemplo completo de acciones EXPRESSION.

  1. La lógica de disparo es la misma que en otros tipos de esquemas; cambia el contenido del script de la acción.
  2. Tras ejecutar el script, el backend de Edge-EMS Builder interpreta el resultado y escribe en los puntos indicados.

Nota: se requieren conocimientos de programación y familiaridad con el proceso de ejecución de estrategias. Consulta la sintaxis en Reglas del motor Lua.

Parámetro Valor Obligatorio Tipo Descripción
dataType Customization Sí String Tipo de datos de destino: Customization/Collection/Aggregation/Alarm/Share
deviceCode DeviceA No String Código del dispositivo subordinado
dataKey 功率 Sí String dataKey único del dato o tipo de alarma
dataValue 15 Sí String Valor del dato o contenido de la alarma
changeMod true No String Habilitar escritura solo ante cambios
availableDate 2023-01-15T07:00:00+08:00 No String Fecha de inicio de vigencia (Customization)
expiredDate 2023-01-15T10:00:00+08:00 No String Fecha de fin de vigencia (Customization)
mqttConnectionConfigId 100101 No String ID de configuración de conexión MQTT (Alarm)
topic upload No String Topic de envío de alarmas (Alarm)
qos 1 No String QOS (Alarm)

Los datos Customization también admiten programación de repetición diaria (DailyRepeat). Utiliza availableTime/expiredTime, con formato HH:mm:ss y sin atravesar medianoche, en lugar de availableDate/expiredDate. Puedes utilizar buildCustomizationWriteMap(dataKey, dataValue, availableDate, expiredDate) para DailyChange o buildDailyRepeatWriteMap(dataKey, dataValue, availableTime, expiredTime) para DailyRepeat. Consulta Reglas del motor Lua.

Si un punto referenciado no tiene valor, se inserta la cadena centinela __Null__. No supongas que es una cadena vacía o nil; comprueba explícitamente ${dataKey} == "__Null__".

local resultList = {}
-- Contenido de alarma personalizado
local errorMap = {}
errorMap.timestamp = OffsetDateTime.now():unixMilli()
errorMap.iotCode = ${数据9}
errorMap.faultCode = ${数据9}
errorMap.faultLevel = ${数据9}
errorMap.faultName = ${数据9}
errorMap.faultBack = ${数据9}
-- Convertir el contenido de alarma a 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

Se espera un array que contenga varias tablas. Edge-EMS Builder interpreta el array, valida los objetos y devuelve los objetos de escritura preparados:

[
{
"dataType": "",//Objeto de destino
"deviceCode": "",//Código único del dispositivo subordinado que identifica el destino de escritura
"dataKey": "",//Clave única del destino: dataKey o alarmType
"dataValue": "",//Valor que se escribe o contenido de alarma
"changeMod": true,//Indica si se escribe solo al cambiar
"availableDate": "",//Inicio de vigencia de datos por franjas horarias
"expiredDate": ""//Fin de vigencia de datos por franjas horarias
}
]

Tras interpretar y validar el resultado, se devuelve el objeto preparado para ejecución:

{
"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
}
]
}

Resultado del envío de alarmas por MQTT