O parser do IoT Platform processa dados complexos de mensagens para viabilizar a comunicação entre serviços em nuvem. Ele obtém o conteúdo das mensagens, converte formatos de dados, processa strings, dados no formato JSON e dados binários, além de encaminhar dados para outros serviços.
Informações básicas
O IoT Platform processa e transmite dados com base nos formatos de dados definidos nos tópicos. Para mais informações, consulte Formatos de dados.
O parser utiliza uma sintaxe semelhante à do JavaScript. Você pode escrever scripts de parser com base nessa sintaxe, mas nem todos os recursos do JavaScript são suportados. As seções a seguir descrevem como escrever um script.
Escrever um script
Para escrever um script, execute as etapas a seguir:
-
Use a função payload() para obter os dados enviados pelos dispositivos e converta-os para o formato JSON.
var data = payload("json");ImportanteConverta os dados enviados que você deseja analisar em arrays JSON ou dados JSON aninhados.
-
Defina um campo e atribua a ele o valor da propriedade obtido no payload.
Para mais detalhes sobre como definir campos usando identificadores e configurar tipos de dados, consulte as seções "Identificadores" e "Tipos de dados".
-
Use expressões JSONPath ou a função
getOrNull()para obter valores de campos. Para mais informações, consulte LanguageManual UDF e getOrNull().Por exemplo, no script de amostra abaixo, use
getOrNull(data, "items", "Humidity", "value");para obter o valor25,data.items.Temperature.valuepara obter o valor38edata.iotIdpara obter o valorJCp9***.
ImportanteAo usar o script para obter um valor de campo específico dos dados enviados pelo dispositivo:
Se o identificador do campo começar com um dígito, use obrigatoriamente a função getOrNull(). Expressões JSONPath não são suportadas nesse caso. Por exemplo, apenas a função
getOrNull(data, "items", "2Co", "value")pode ser usada no script de amostra para obter o valor10do campo 2Co. A expressãodata.items.2Co.valuenão é suportada.-
Caso o campo não exista nos dados enviados pelo dispositivo, um dos cenários a seguir poderá ocorrer:
Ao utilizar a função getOrNull(), o retorno será
nulle o script continuará a execução.Ao utilizar uma expressão JSONPath, ocorrerá um erro de ponteiro nulo e o script interromperá a execução.
Também é possível processar dados ou realizar cálculos conforme as necessidades do seu negócio. Para informações sobre operadores e funções suportados, consulte Operadores e Lista de funções.
-
Use funções para encaminhar dados.
Para mais informações, consulte Funções para encaminhar dados para destinos de dados.
Instruções de controle também podem ser usadas para definir condições de encaminhamento de dados. No script de amostra a seguir, a instrução
ifestabelece uma condição. Para mais detalhes sobre as instruções de controle suportadas, consulte a seção "Instruções de controle".
Script de amostra
Os seguintes dados de propriedade de amostra são enviados:
{
"deviceType": "CustomCategory",
"iotId": "JCp9***",
"requestId": "1626948228247",
"checkFailedData": {
},
"productKey": "a1o***",
"gmtCreate": 1626948134445,
"deviceName": "Device1",
"items": {
"Temperature": {
"value": 38,
"time": 1626948134319
},
"Humidity": {
"value": 25,
"time": 1626948134319
},
"2Co": {
"value": 10,
"time": 1626948134319
}
}
}
O script a seguir analisa e processa os dados enviados:
// Use the payload() function to obtain the data that is submitted by devices and convert the data to JSON-formatted data.
var data = payload("json");
// Filter the submitted temperature and humidity values.
var h = getOrNull(data, "items", "Humidity", "value");
var t = data.items.Temperature.value;
var c = getOrNull(data, "items", "2Co", "value");
// Configure a data forwarding rule. If the temperature value is greater than 38, the rule is triggered to send data to ApsaraDB RDS.
// An ApsaraDB RDS table includes the following columns: id (auto-increment primary key), deviceName, temperature, humidity, 2Co, and time. You can call the writeRds() method and specify multiple <Column name>:<Value> pairs in the method to write the values to the specified columns.
if (t > 38) {
writeRds(1000, {"deviceName":deviceName(), "temperature":t, "humidity":h, "2Co":c, "time":timestamp()});
}
Identificadores
Identificadores servem para definir constantes, variáveis e campos personalizados no script. Um identificador pode conter letras, dígitos e sublinhados (_), mas não pode iniciar com um dígito.
As palavras-chave e palavras reservadas listadas abaixo não podem ser usadas como identificadores:
Palavras-chave:
for,break,continue,if,else,true,false,var,new,nullereturn.Palavras reservadas:
breakdo,instanceof,typeof,case,catch,finally,void,switch,while,debugger,function,this,with,default,throw,delete,in,try,as,from,classenum,extends,super,const,export,import,await,implementslet,let,private,public,interface,package,protected,staticeyield.
Tipos de dados
O script suporta os seguintes tipos de dados para constantes, variáveis e campos personalizados: number, Boolean, string, byte, map e array.
Constantes podem ser nulas. Os tipos de constantes numéricas suportados incluem inteiro decimal, inteiro hexadecimal e ponto flutuante.
Instruções de controle
O IoT Platform suporta as instruções for e if...else. As instruções for aceitam as palavras-chave break e continue.
Se você utilizar uma instrução
for
para executar repetidamente uma função de encaminhamento de dados, o número de iterações não poderá exceder 100. Para mais informações sobre funções de encaminhamento de dados, consulte
Funções para encaminhar dados para destinos de dados
.
Operadores
-
Operadores lógicos:
&&e||.Em condições lógicas, um valor nulo é avaliado como falso e todos os outros valores são avaliados como verdadeiro. Por exemplo,
null && "x"retorna falso, enquantonull || "x"retorna verdadeiro. -
Operadores matemáticos:
*,/,%,+e-.Apenas tipos de dados numéricos são suportados. O uso de outros tipos resultará em erro.
Operadores de comparação:
>,=>,<,<=,==e!=. O operador de comparação == suporta apenas valores numéricos.
Comentários
O script suporta comentários de várias linhas (/* ${comments}*/) e comentários de linha única (// ${comments}).
Referências
Para informações sobre as funções suportadas, consulte Lista de funções.
Para mais exemplos de configuração de scripts de parser para encaminhamento de dados, consulte o diretório de Exemplos de encaminhamento de dados.