Aviso de fin de soporte: el 20 de mayo de 2026, AWS finalizará el soporte para AWS IoT Events. Después del 20 de mayo de 2026, ya no podrás acceder a la AWS IoT Events consola ni a AWS IoT Events los recursos. Para obtener más información, consulta AWS IoT Events el fin del soporte.
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Expresiones para filtrar, transformar y procesar datos de eventos
Las expresiones se utilizan para evaluar los datos entrantes, realizar cálculos y determinar las condiciones en las que deben producirse acciones o transiciones de estado específicas. AWS IoT Events proporciona varias formas de especificar valores al crear y actualizar modelos de detectores. Puede usar expresiones para especificar valores literales o AWS IoT Events puede evaluar las expresiones antes de especificar valores determinados.
Temas
Sintaxis para filtrar los datos del dispositivo y definir acciones en AWS IoT Events
Las expresiones ofrecen una sintaxis para filtrar los datos del dispositivo y definir acciones. Puede utilizar literales, operadores, funciones, referencias y plantillas de sustitución en las expresiones de AWS IoT Events . Al combinar estos componentes, puede crear expresiones potentes y flexibles para procesar datos de IoT, realizar cálculos, manipular cadenas y tomar decisiones lógicas dentro de sus modelos de detectores.
Literales
-
Entero
-
Decimal
-
Cadena
-
Booleano
Operadores
- Unario
-
-
Not (Booleano):
! -
Not (bit a bit):
~ -
Menos (aritmético):
-
-
- Cadena
-
-
Concatenación:
+Ambos operandos deben ser cadenas. Los literales de cadena se deben incluir entre comillas simples (').
Por ejemplo:
'my' + 'string'->'mystring'
-
- Aritmético
-
-
Adición:
+Ambos operandos deben ser numéricos.
-
Sustracción:
- -
División:
/El resultado de la división es un valor entero redondeado, a menos que al menos uno de los operandos (divisor o dividendo) sea un valor decimal.
-
Multiplicación:
*
-
- Bit a bit (entero)
-
-
O BIEN:
|Por ejemplo:
13 | 5->13 -
Y:
&Por ejemplo:
13 & 5->5 -
XOR:
^Por ejemplo:
13 ^ 5->8 -
NOT:
~Por ejemplo:
~13->-14
-
- Booleano
-
-
Menor que:
< -
Menor o igual que:
<= -
Igual a:
== -
No igual a:
!= -
Mayor o igual que:
>= -
Mayor que:
> -
Y:
&& -
O BIEN:
||nota
Cuando una subexpresión de
||contiene datos indefinidos, esa subexpresión se trata comofalse.
-
- Paréntesis
-
Puede usar paréntesis para agrupar términos dentro de una expresión.
Funciones para usar en expresiones AWS IoT Events
AWS IoT Events proporciona un conjunto de funciones integradas para mejorar las capacidades de las expresiones del modelo de su detector. Estas funciones permiten la gestión del temporizador, la conversión de tipos, la comprobación de valores nulos, la identificación del tipo de disparador, la verificación de las entradas, la manipulación de cadenas y las operaciones bit a bit. Al aprovechar estas funciones, puede crear una lógica de AWS IoT Events procesamiento receptiva, lo que mejora la eficacia general de sus aplicaciones de IoT.
- Funciones integradas
-
timeout("timer-name")-
Da como resultado
truesi ha transcurrido el tiempo especificado. Sustituyatimer-name"" por el nombre del temporizador que haya definido, entre comillas. En una acción de evento, puede definir un temporizador y luego iniciarlo, restablecerlo o borrar uno que haya definido con anterioridad. Consulte el campodetectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName.Un temporizador creado en un estado puede ser referenciado en un estado diferente. Debe visitar el estado en el que creó el temporizador antes de entrar en el estado en el que se hace referencia al temporizador.
Por ejemplo, un modelo de detector tiene dos estados:
TemperatureCheckedyRecordUpdated. Ha creado un temporizador en elTemperatureCheckedestado. Primero debe visitar elTemperatureCheckedestado antes de poder usar el temporizador en elRecordUpdatedestado.Para garantizar la precisión, el tiempo mínimo que debe fijarse un temporizador es de 60 segundos.
nota
timeout()devuelvetruesolo la primera vez que se comprueba tras el vencimiento real del temporizador y devuelvefalsea partir de entonces. convert(type,expression)-
Da como resultado el valor de la expresión convertida al tipo especificado. El
typevalor debe serString,Boolean, oDecimal. Utilice una de estas palabras clave o una expresión que dé como resultado una cadena que contenga la palabra clave. Solo las siguientes conversiones tienen éxito y devuelven un valor válido:-
Booleano -> cadena
Devuelve la cadena
"true"o"false". -
Decimal -> cadena
-
Cadena -> Booleano
-
Cadena -> decimal
La cadena especificada debe ser una representación válida de un número decimal o
convert()falla.
Si
convert()no devuelve un valor válido, la expresión de la que forma parte tampoco es válida. Este resultado equivale afalsey no activará lasactionso la transición alnextStateespecificado como parte del evento en el que se produce la expresión. -
isNull(expression)-
Da como resultado
truesi la expresión devuelve un valor nulo. Por ejemplo, si la entradaMyInputrecibe el mensaje{ "a": null }, entonces lo siguiente da como resultadotrue, peroisUndefined($input.MyInput.a)da como resultadofalse.isNull($input.MyInput.a) isUndefined(expression)-
Da como resultado
truesi la expresión es indefinida. Por ejemplo, si la entradaMyInputrecibe el mensaje{ "a": null }, entonces lo siguiente da como resultadofalse, peroisNull($input.MyInput.a)da como resultadotrue.isUndefined($input.MyInput.a) triggerType("type")-
El valor de
typepuede ser"Message"o"Timer". Se evalúa comotruesi la condición del evento en la que aparece se está evaluando porque un temporizador se ha vencido, como en el siguiente ejemplo.triggerType("Timer")O se ha recibido un mensaje de entrada.
triggerType("Message") currentInput("input")-
Da como resultado
truesi la condición del evento en la que aparece se está evaluando porque se ha recibido el mensaje de entrada especificado. Por ejemplo, si la entradaCommandrecibe el mensaje{ "value": "Abort" }, entonces da como resultadotrue.currentInput("Command")Utilice esta función para verificar que la condición se está evaluando porque se ha recibido un mensaje de entrada concreto y no se ha vencido un temporizador, como en la siguiente expresión.
currentInput("Command") && $input.Command.value == "Abort"
- Funciones de coincidencia de cadenas
-
startsWith(expression1,expression2)-
Da como resultado
truesi la primera expresión de cadena comienza con la segunda expresión de cadena. Por ejemplo, si la entradaMyInputrecibe el mensaje{ "status": "offline"}, entonces lo siguiente da como resultadotrue.startsWith($input.MyInput.status, "off")Ambas expresiones deben dar como resultado un valor de cadena. Si alguna de las expresiones no da como resultado un valor de cadena, entonces el resultado de la función es indefinido. No se realiza ninguna conversión.
endsWith(expression1,expression2)-
Da como resultado
truesi la primera expresión de cadena termina con la segunda expresión de cadena. Por ejemplo, si la entradaMyInputrecibe el mensaje{ "status": "offline" }, entonces lo siguiente da como resultadotrue.endsWith($input.MyInput.status, "line")Ambas expresiones deben dar como resultado un valor de cadena. Si alguna de las expresiones no da como resultado un valor de cadena, entonces el resultado de la función es indefinido. No se realiza ninguna conversión.
contains(expression1,expression2)-
Da como resultado
truesi la primera expresión de cadena contiene la segunda expresión de cadena. Por ejemplo, si la entradaMyInputrecibe el mensaje{ "status": "offline" }, entonces lo siguiente da como resultadotrue.contains($input.MyInput.value, "fli")Ambas expresiones deben dar como resultado un valor de cadena. Si alguna de las expresiones no da como resultado un valor de cadena, entonces el resultado de la función es indefinido. No se realiza ninguna conversión.
- Funciones de manipulación de enteros bit a bit
-
bitor(expression1,expression2)-
Evalúa el OR bit a bit de las expresiones de enteros (la operación OR binaria se realiza en los bits correspondientes de los enteros). Por ejemplo, si la entrada
MyInputrecibe el mensaje{ "value1": 13, "value2": 5 }, entonces lo siguiente da como resultado13.bitor($input.MyInput.value1, $input.MyInput.value2)Ambas expresiones deben dar como resultado un valor entero. Si cualquiera de las expresiones no da como resultado un valor entero, el resultado de la función es indefinido. No se realiza ninguna conversión.
bitand(expression1,expression2)-
Evalúa el AND bit a bit de las expresiones de enteros (la operación AND binaria se realiza en los bits correspondientes de los enteros). Por ejemplo, si la entrada
MyInputrecibe el mensaje{ "value1": 13, "value2": 5 }, entonces lo siguiente da como resultado5.bitand($input.MyInput.value1, $input.MyInput.value2)Ambas expresiones deben dar como resultado un valor entero. Si cualquiera de las expresiones no da como resultado un valor entero, el resultado de la función es indefinido. No se realiza ninguna conversión.
bitxor(expression1,expression2)-
Evalúa el XOR bit a bit de las expresiones de enteros (la operación XOR binaria se realiza en los bits correspondientes de los enteros). Por ejemplo, si la entrada
MyInputrecibe el mensaje{ "value1": 13, "value2": 5 }, entonces lo siguiente da como resultado8.bitxor($input.MyInput.value1, $input.MyInput.value2)Ambas expresiones deben dar como resultado un valor entero. Si cualquiera de las expresiones no da como resultado un valor entero, el resultado de la función es indefinido. No se realiza ninguna conversión.
bitnot(expression)-
Evalúa el NOT bit a bit de la expresión de enteros (la operación NOT binaria se realiza en los bits del entero). Por ejemplo, si la entrada
MyInputrecibe el mensaje{ "value": 13 }, entonces lo siguiente da como resultado-14.bitnot($input.MyInput.value)Ambas expresiones deben dar como resultado un valor entero. Si cualquiera de las expresiones no da como resultado un valor entero, el resultado de la función es indefinido. No se realiza ninguna conversión.
AWS IoT Events referencia para las entradas y variables en las expresiones
- Entradas
-
$input.input-name.path-to-datainput-namees una entrada que se crea mediante la CreateInputacción.Por ejemplo, si tiene una entrada llamada
TemperatureInputpara la que ha definido entradas deinputDefinition.attributes.jsonPath, los valores podrían aparecer en los siguientes campos disponibles.{ "temperature": 78.5, "date": "2018-10-03T16:09:09Z" }Para hacer referencia al valor del campo
temperature, utilice el siguiente comando.$input.TemperatureInput.temperaturePara los campos cuyos valores son matrices, puede hacer referencia a los miembros de la matriz mediante
[. Por ejemplo, dados los siguientes valores:n]{ "temperatures": [ 78.4, 77.9, 78.8 ], "date": "2018-10-03T16:09:09Z" }Se puede hacer referencia al valor
78.8con el siguiente comando.$input.TemperatureInput.temperatures[2] - Variables
-
$variable.variable-nameEs una variable que se definió mediante la CreateDetectorModelacción.variable-namePor ejemplo, si tiene una variable llamada
TechnicianIDque ha definido mediantedetectorDefinition.states.onInputEvents.actions.setVariable.variableName, puede hacer referencia al valor (cadena) dado más recientemente a la variable con el siguiente comando.$variable.TechnicianIDSolo puede establecer los valores de las variables mediante la acción
setVariable. No puede asignar valores a variables en una expresión. Una variable no se puede destruir. Por ejemplo, no puede asignarle el valornull.
nota
En las referencias que utilicen identificadores que no sigan el patrón (expresión regular) [a-zA-Z][a-zA-Z0-9_]*, debe encerrar dichos identificadores entre tildes graves (`). Por ejemplo, una referencia a una entrada llamada MyInput con un campo llamado _value debe especificar este campo como $input.MyInput.`_value`.
Cuando utilice referencias en expresiones, compruebe lo siguiente:
-
Cuando utilice una referencia como operando con uno o más operadores, asegúrese de que todos los tipos de datos a los que hace referencia sean compatibles.
Por ejemplo, en la siguiente expresión, el entero
2es un operando de los operadores==y&&. Para asegurarse de que los operandos sean compatibles,$variable.testVariable + 1y$variable.testVariabledeben hacer referencia a un número entero o decimal.Además, el entero
1es un operando del operador+. Por lo tanto,$variable.testVariabledebe hacer referencia a un número entero o decimal.‘$variable.testVariable + 1 == 2 && $variable.testVariable’ -
Cuando utilice una referencia como argumento pasado a una función, asegúrese de que la función admita los tipos de datos a los que hace referencia.
Por ejemplo, la siguiente función
timeout("requiere una cadena con comillas dobles como argumento. Si utiliza una referencia para eltime-name")timer-namevalor, debe hacer referencia a una cadena con comillas dobles.timeout("timer-name")nota
Para la
convert(función, si utiliza una referencia para eltype,expression)typevalor, el resultado evaluado de la referencia debe serStringDecimal, oBoolean.
AWS IoT Events las expresiones admiten tipos de datos enteros, decimales, de cadena y booleanos. En la tabla siguiente se ofrece una lista de pares de tipos incompatibles.
|
Pares de tipos incompatibles |
|---|
|
Entero, cadena |
|
Entero, booleano |
|
Decimal, cadena |
|
Decimal, booleano |
|
Cadena, booleano |
Plantillas de sustitución para expresiones AWS IoT Events
-
'${expression}'${}identifica la cadena como una cadena interpolada.expressionPuede ser cualquier AWS IoT Events expresión. Esto incluye operadores, funciones y referencias.Por ejemplo, ha utilizado la SetVariableActionacción para definir una variable. El
variableNameesSensorIDy elvaluees10. Puede crear las siguientes plantillas de sustitución.Plantilla de sustitución Cadena de resultados '${'Sensor ' + $variable.SensorID}'"Sensor 10"'Sensor ' + '${$variable.SensorID + 1}'"Sensor 11"'Sensor 10: ${$variable.SensorID == 10}'"Sensor 10: true"'{\"sensor\":\"${$variable.SensorID + 1}\"}'"{\"sensor"\:\"11\"}"'{\"sensor\":${$variable.SensorID + 1}}'"{\"sensor\":11}"