Pular para o conteúdo
JelinaJelina DocumentationDocumentação técnica
Voltar ao site oficial

Perfis de acionamento

A sintaxe dos scripts é Lua. Para os conceitos gerais e a classificação das condições e ações, leia primeiro Perfis de acionamento. Esta página detalha os parâmetros de gravação, as estruturas de retorno e os exemplos completos de scripts de ações do tipo EXPRESSION.

  1. A lógica de acionamento é a mesma dos demais tipos de perfil; a diferença está no conteúdo do script da ação.
  2. Após a execução do script, o backend do Edge-EMS Builder interpreta o resultado retornado e grava nos pontos especificados conforme seu conteúdo.

Observação: o usuário precisa de conhecimentos básicos de programação e familiaridade com o fluxo de execução de estratégias. Para a sintaxe, consulte Regras do mecanismo Lua.

Nome do parâmetro Valor Obrigatório? Tipo Descrição
dataType Customization Sim String Tipo dos dados a operar: Customization/Collection/Aggregation/Alarm/Share
deviceCode DeviceA Não String Código do dispositivo subordinado
dataKey 功率 Sim String dataKey exclusivo dos dados ou tipo de alarme
dataValue 15 Sim String Valor dos dados ou conteúdo do alarme
changeMod true Não String Define se a gravação por alteração está habilitada
availableDate 2023-01-15T07:00:00+08:00 Não String Data de início da vigência, Customization
expiredDate 2023-01-15T10:00:00+08:00 Não String Data de expiração, Customization
mqttConnectionConfigId 100101 Não String ID da configuração de conexão MQTT, Alarm
topic upload Não String Topic de envio do alarme, Alarm
qos 1 Não String QOS, Alarm

Dados por faixa de horário (Customization) também aceitam agendamento com repetição diária (DailyRepeat): use availableTime/expiredTime, no formato HH:mm:ss e sem cruzar a meia-noite, em vez de availableDate/expiredDate, para repetir diariamente. É possível usar diretamente a função abreviada buildCustomizationWriteMap(dataKey, dataValue, availableDate, expiredDate), exclusiva de DailyChange, ou buildDailyRepeatWriteMap(dataKey, dataValue, availableTime, expiredTime), exclusiva de DailyRepeat. Consulte Regras do mecanismo Lua.

Se não houver valor para um ponto referenciado no script, será inserida a string sentinela __Null__. Não presuma que seja uma string vazia ou nil; verifique explicitamente ${dataKey} == "__Null__".

local resultList = {}
-- Conteúdo personalizado do alarme
local errorMap = {}
errorMap.timestamp = OffsetDateTime.now():unixMilli()
errorMap.iotCode = ${数据9}
errorMap.faultCode = ${数据9}
errorMap.faultLevel = ${数据9}
errorMap.faultName = ${数据9}
errorMap.faultBack = ${数据9}
-- Converte o conteúdo do alarme em 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

Espera-se um array contendo várias Tables. O Edge-EMS Builder interpreta o array, valida o conteúdo dos objetos e retorna os objetos de gravação encapsulados:

[
{
"dataType": "",//Objeto da operação
"deviceCode": "",//Código exclusivo do dispositivo subordinado, que determina o destino da gravação
"dataKey": "",//KEY exclusiva do objeto da operação (dataKey ou alarmType)
"dataValue": "",//Conteúdo a gravar ou conteúdo do alarme
"changeMod": true,//Define se a gravação ocorre por alteração
"availableDate": "",//Início da vigência dos dados por faixa de horário
"expiredDate": ""//Expiração dos dados por faixa de horário
}
]

Interprete o resultado da execução, valide a exatidão do conteúdo e retorne os objetos encapsulados para pré-execução:

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