El analizador de IoT Platform procesa datos complejos de mensajes para facilitar la comunicación entre servicios en la nube. Este componente obtiene el contenido de los mensajes, convierte formatos de datos, procesa cadenas, datos con formato JSON y datos binarios, y reenvía la información a otros servicios.
Contexto
IoT Platform procesa y transmite datos según los formatos definidos en los topics. Para obtener más información, consulte Data formats.
El analizador utiliza una sintaxis similar a JavaScript. Es posible escribir scripts del analizador basados en esta sintaxis, aunque no todas las funcionalidades de JavaScript son compatibles. Las siguientes secciones describen cómo escribir un script.
Escritura de un script
Para escribir un script, realice los siguientes pasos:
-
Utilice la función payload() para obtener los datos enviados por los dispositivos y conviértalos a formato JSON.
var data = payload("json");ImportanteLos datos enviados que se desean analizar deben convertirse a arreglos JSON o a datos JSON anidados.
-
Defina un campo y asígnele el valor de propiedad obtenido del payload.
Para obtener más información sobre cómo definir campos mediante identificadores y establecer tipos de datos, consulte las secciones "Identificadores" y "Tipos de datos".
-
Es posible usar expresiones JSONPath o la función
getOrNull()para obtener valores de campo. Para obtener más información, consulte LanguageManual UDF y getOrNull().Por ejemplo, en el siguiente script de muestra, puede usar
getOrNull(data, "items", "Humidity", "value");para obtener el valor25, usardata.items.Temperature.valuepara obtener el valor38y usardata.iotIdpara obtener el valorJCp9***.
ImportanteCuando utilice el script para obtener un valor de campo específico de los datos enviados por el dispositivo, considere lo siguiente:
Si el identificador del campo comienza con un dígito, debe usar la función getOrNull(). Las expresiones JSONPath no son compatibles en este caso. Por ejemplo, solo puede usar la función
getOrNull(data, "items", "2Co", "value")en el script de muestra para obtener el valor10del campo 2Co. La expresióndata.items.2Co.valueno es compatible.-
Si el campo no existe en los datos enviados por el dispositivo, puede ocurrir uno de los siguientes escenarios:
Si usa la función getOrNull(), se devuelve
nully el script continúa ejecutándose.Si usa una expresión JSONPath, se genera un puntero nulo y el script detiene su ejecución.
También puede procesar datos o realizar cálculos según sus necesidades empresariales. Para obtener información sobre operadores y funciones compatibles, consulte Operators y Function list.
-
Use funciones para reenviar datos.
Para obtener más información, consulte Functions to forward data to data destinations.
También puede utilizar sentencias de control para establecer condiciones de reenvío de datos. En el siguiente script de ejemplo, la sentencia
ifestablece una condición. Para obtener más información sobre las sentencias de control compatibles, consulte la sección "Sentencias de control".
Script de ejemplo
Se envían los siguientes datos de propiedades de ejemplo:
{
"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
}
}
}
El siguiente script analiza y procesa los datos 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
Los identificadores se utilizan para definir constantes, variables y campos personalizados dentro del script. Un identificador puede contener letras, dígitos y guiones bajos (_), pero no puede comenzar con un dígito.
Las siguientes palabras clave y palabras reservadas no pueden usarse como identificadores:
Palabras clave:
for,break,continue,if,else,true,false,var,new,nullyreturn.Palabras 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,staticyyield.
Tipos de datos
El script admite los siguientes tipos de datos para constantes, variables y campos personalizados: number, Boolean, string, byte, map y array.
Las constantes pueden ser nulas. Los tipos de constantes numéricas compatibles incluyen enteros decimales, enteros hexadecimales y punto flotante.
Sentencias de control
IoT Platform es compatible con las sentencias for e if...else. Las sentencias for admiten las palabras clave break y continue.
Si utiliza una sentencia
for
para ejecutar repetidamente una función de reenvío de datos, el número de iteraciones no puede exceder 100. Para obtener más información sobre las funciones de reenvío de datos, consulte
Functions to forward data to data destinations
.
Operadores
-
Operadores lógicos:
&&y||.En condiciones lógicas, un valor nulo se evalúa como falso y todos los demás valores se evalúan como verdaderos. Por ejemplo,
null && "x"devuelve falso, ynull || "x"devuelve verdadero. -
Operadores matemáticos:
*,/,%,+y-.Solo se admiten tipos de datos numéricos. El uso de otros tipos provoca un error.
Operadores de comparación:
>,=>,<,<=,==y!=. El operador de comparación == solo admite valores numéricos.
Comentarios
El script admite comentarios de varias líneas (/* ${comments}*/) y comentarios de una sola línea (// ${comments}).
Referencias
Para obtener información sobre las funciones compatibles, consulte Function list.
Para ver más ejemplos sobre cómo configurar scripts del analizador para reenviar datos, consulte el directorio Data forwarding examples.