

Aviso de fim do suporte: em 20 de maio de 2026, AWS encerrará o suporte para AWS IoT Events. Depois de 20 de maio de 2026, você não poderá mais acessar o AWS IoT Events console ou os AWS IoT Events recursos. Para obter mais informações, consulte [AWS IoT Events Fim do suporte](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Expressões para filtrar, transformar e processar dados de eventos
<a name="iotevents-expressions"></a>

As expressões são usadas para avaliar dados recebidos, realizar cálculos e determinar as condições sob as quais ações específicas ou transições de estado devem ocorrer. AWS IoT Events fornece várias maneiras de especificar valores ao criar e atualizar modelos de detectores. Você pode usar expressões para especificar valores literais ou AWS IoT Events avaliar as expressões antes de especificar valores específicos.

**Topics**
+ [Sintaxe para filtrar dados do dispositivo e definir ações no AWS IoT Events](#expression-syntax)
+ [Exemplos de expressões e uso para AWS IoT Events](expression-usage.md)

## Sintaxe para filtrar dados do dispositivo e definir ações no AWS IoT Events
<a name="expression-syntax"></a>

As expressões oferecem sintaxe para filtrar dados do dispositivo e definir ações. É possível usar literais, operadores, funções, referências e modelos de substituição nas expressões do AWS IoT Events . Ao combinar esses componentes, você pode criar expressões poderosas e flexíveis para processar dados de IoT, realizar cálculos, manipular cadeias de caracteres e tomar decisões lógicas em seus modelos de detectores.

### Literais
<a name="expression-literal"></a>
+ Inteiro
+ Decimal
+ String
+ Booleano

### Operadores
<a name="expression-operator"></a>

Unário  
+ Não (booliano): `!`
+ Não (bitwise): `~`
+ Menos (aritmética): `-`

String  
+ Concatenação: **`+`**

  Ambos os operandos devem ser strings. Literais de string devem estar entre aspas simples (').

  Por exemplo: `'my' + 'string'` -> `'mystring'`

Aritmética  
+ Adição: **`+`**

  Ambos os operandos devem ser numéricos.
+ Subtração: **`-`**
+ Divisão: **`/`**

  O resultado da divisão é um valor inteiro arredondado, a menos que pelo menos um dos operandos (divisor ou dividendo) seja um valor decimal.
+ Multiplicação: **`*`**

Bit a bit (inteiro)  
+ OU: **`|`**

  Por exemplo: `13 | 5` -> `13`
+ E: **`&`**

  Por exemplo: `13 & 5` -> `5`
+ XOR: **`^`**

  Por exemplo: `13 ^ 5` -> `8`
+ NÃO: **`~`**

  Por exemplo: `~13` -> `-14`

Booleano  
+ Menor que: **`<`**
+ Menor ou igual a: **`<=`**
+ Igual a: **`==`**
+ Não igual a: **`!=`**
+ Maior ou igual a: **`>=`**
+ Maior que: **`>`**
+ E: **`&&`**
+ OU: **`||`**
**nota**  
Quando uma subexpressão de `||` contém dados indefinidos, essa subexpressão é tratada como `false`.

Parênteses  
É possível usar parênteses para agrupar termos em uma expressão.

### Funções para usar em AWS IoT Events expressões
<a name="expression-function"></a>

AWS IoT Events fornece um conjunto de funções integradas para aprimorar os recursos das expressões do seu modelo de detector. Essas funções permitem gerenciamento de cronômetro, conversão de tipo, verificação de nulos, identificação do tipo de gatilho, verificação de entrada, manipulação de seqüências de caracteres e operações bit a bit. Ao aproveitar essas funções, você pode criar uma lógica de AWS IoT Events processamento responsiva, melhorando a eficácia geral de seus aplicativos de IoT.

Funções incorporadas    
`timeout("{{timer-name}}")`  
Será avaliado como `true` se o temporizador especificado expirou. Substitua {{*timer-name*}} "" pelo nome de um cronômetro que você definiu, entre aspas. Em uma ação de evento, é possível definir um temporizador e, em seguida, iniciá-lo, reiniciá-lo ou limpar um que você definiu anteriormente. Consulte o campo`detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName`.  
Um temporizador definido em um estado pode ser referenciado em um estado diferente. Você deve visitar o estado em que criou o temporizador antes de entrar no estado em que o temporizador é referenciado.  
Por exemplo, um modelo de detector tem dois estados, `TemperatureChecked` `RecordUpdated` e. Você criou um cronômetro no `TemperatureChecked` estado. Você deve visitar o `TemperatureChecked` estado primeiro antes de poder usar o cronômetro no `RecordUpdated` estado.  
Para garantir a precisão, o tempo mínimo que um temporizador deve ser configurado é de 60 segundos.  
`timeout()` retorna `true` somente na primeira vez em que é verificado após a expiração real do temporizador e retorna `false` depois disso.  
`convert({{type}}, {{expression}})`  
Será avaliado como o valor da expressão convertida para o tipo especificado. O {{type}} valor deve ser `String``Boolean`, ou`Decimal`. Use uma dessas palavras-chave ou uma expressão que seja avaliada como uma string contendo a palavra-chave. Somente as seguintes conversões são bem-sucedidas e retornam um valor válido:   
+ Booliano -> string

  Retorna uma string `"true"` ou `"false"`.
+ Decimal -> string
+ String -> booliano
+ String -> decimal

  A string especificada deve ser uma representação válida de um número decimal ou `convert()` falhará.
Se `convert()` não retornar um valor válido, a expressão da qual ele faz parte também é inválida. Esse resultado é equivalente a `false` e não acionará `actions` ou a transição para o `nextState` especificado como parte do evento no qual a expressão ocorre.  
`isNull({{expression}})`  
Será avaliado como `true` se a expressão retornar para NULL. Por exemplo, se a entrada `MyInput` receber a mensagem `{ "a": null }`, o seguinte será avaliado como `true`, mas `isUndefined($input.MyInput.a)` será avaliado como `false`.  

```
isNull($input.MyInput.a)
```  
`isUndefined({{expression}})`  
Será avaliado como `true` se a expressão for indefinida. Por exemplo, se a entrada `MyInput` receber a mensagem `{ "a": null }`, o seguinte será avaliado como `true`, mas `isNull($input.MyInput.a)` será avaliado como `false`.  

```
isUndefined($input.MyInput.a)
```  
`triggerType("{{type}}")`  
O valor de {{type}} pode ser `"Message"` ou `"Timer"`. Será avaliado como `true` se a condição do evento em que ele aparece está sendo avaliada porque um temporizador expirou, como no exemplo a seguir.  

```
triggerType("Timer")
```
Ou uma mensagem de entrada foi recebida.   

```
triggerType("Message")
```  
`currentInput("{{input}}")`  
Será avaliado como `true` se a condição do evento em que ele aparece está sendo avaliada porque a mensagem de entrada especificada foi recebida. Por exemplo, se a entrada `Command` receber a mensagem `{ "value": "Abort" }`, o seguinte será avaliado como `true`.   

```
currentInput("Command")
```
Use essa função para verificar se a condição está sendo avaliada porque uma entrada específica foi recebida e um temporizador não expirou, como na expressão a seguir.  

```
currentInput("Command") && $input.Command.value == "Abort"
```

Funções de correspondência de strings    
`startsWith({{expression1}}, {{expression2}})`  
Será avaliado como `true` se a primeira expressão de string começa com a segunda expressão de string. Por exemplo, se a entrada `MyInput` receber a mensagem `{ "status": "offline"}`, a seguinte será avaliada como `true`.  

```
startsWith($input.MyInput.status, "off")
```
Ambas as expressões devem ser avaliadas para um valor de string. Se uma das expressões não for avaliada como um valor de string, o resultado da função será indefinido. Nenhuma conversão é realizada.  
`endsWith({{expression1}}, {{expression2}})`  
Será avaliado como `true` se a primeira expressão de string termina com a segunda expressão de string. Por exemplo, se a entrada `MyInput` receber a mensagem `{ "status": "offline" }`, a seguinte será avaliada como `true`.  

```
endsWith($input.MyInput.status, "line")
```
Ambas as expressões devem ser avaliadas para um valor de string. Se uma das expressões não for avaliada como um valor de string, o resultado da função será indefinido. Nenhuma conversão é realizada.  
`contains({{expression1}}, {{expression2}})`  
Será avaliado como `true` se a primeira expressão de string contém a segunda expressão de string. Por exemplo, se a entrada `MyInput` receber a mensagem `{ "status": "offline" }`, a seguinte será avaliada como `true`.  

```
contains($input.MyInput.value, "fli")
```
Ambas as expressões devem ser avaliadas para um valor de string. Se uma das expressões não for avaliada como um valor de string, o resultado da função será indefinido. Nenhuma conversão é realizada.

Funções de manipulação de números inteiros bit a bit    
`bitor({{expression1}}, {{expression2}})`  
Avalia o OR bit a bit das expressões inteiras (a operação binária OR é executada nos bits correspondentes dos números inteiros). Por exemplo, se a entrada `MyInput` receber a mensagem `{ "value1": 13, "value2": 5 }`, a seguinte será avaliada como `13`.  

```
bitor($input.MyInput.value1, $input.MyInput.value2)
```
Ambas as expressões devem ser avaliadas como um valor inteiro. Se uma das expressões não for avaliada como um valor inteiro, o resultado da função será indefinido. Nenhuma conversão é realizada.  
`bitand({{expression1}}, {{expression2}})`  
Avalia o AND bit a bit das expressões inteiras (a operação binária AND é executada nos bits correspondentes dos números inteiros). Por exemplo, se a entrada `MyInput` receber a mensagem `{ "value1": 13, "value2": 5 }`, a seguinte será avaliada como `5`.   

```
bitand($input.MyInput.value1, $input.MyInput.value2)
```
Ambas as expressões devem ser avaliadas como um valor inteiro. Se uma das expressões não for avaliada como um valor inteiro, o resultado da função será indefinido. Nenhuma conversão é realizada.  
`bitxor({{expression1}}, {{expression2}})`  
Avalia o XOR bit a bit das expressões inteiras (a operação binária XOR é executada nos bits correspondentes dos números inteiros). Por exemplo, se a entrada `MyInput` receber a mensagem `{ "value1": 13, "value2": 5 }`, a seguinte será avaliada como `8`.  

```
bitxor($input.MyInput.value1, $input.MyInput.value2)
```
Ambas as expressões devem ser avaliadas como um valor inteiro. Se uma das expressões não for avaliada como um valor inteiro, o resultado da função será indefinido. Nenhuma conversão é realizada.  
`bitnot({{expression}})`  
Avalia o NOT bit a bit da expressão inteira (a operação binária NOT é executada nos bits do inteiro). Por exemplo, se a entrada `MyInput` receber a mensagem `{ "value": 13 }`, a seguinte será avaliada como `-14`.  

```
bitnot($input.MyInput.value)
```
Ambas as expressões devem ser avaliadas como um valor inteiro. Se uma das expressões não for avaliada como um valor inteiro, o resultado da função será indefinido. Nenhuma conversão é realizada.

### AWS IoT Events referência para entradas e variáveis em expressões
<a name="expression-reference"></a>

Entradas  
`$input.{{input-name}}.{{path-to-data}}`  
`input-name`é uma entrada que você cria usando a [CreateInput](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateInput.html)ação.  
Por exemplo, se você tiver uma entrada nomeada `TemperatureInput` para a qual definiu entradas `inputDefinition.attributes.jsonPath`, os valores podem aparecer nos seguintes campos disponíveis.  

```
{
    "temperature": 78.5,
    "date": "2018-10-03T16:09:09Z"
  }
```
Para referenciar o valor do campo `temperature`, use o comando a seguir.  

```
$input.TemperatureInput.temperature
```
Para campos cujos valores são matrizes, é possível referenciar membros da matriz usando `[{{n}}]`. Por exemplo, considerando os seguintes dados:  

```
{
    "temperatures": [
      78.4,
      77.9,
      78.8
    ],
    "date": "2018-10-03T16:09:09Z"
  }
```
O valor `78.8` pode ser referenciado com o comando a seguir.  

```
$input.TemperatureInput.temperatures[2]
```

Variáveis  
`$variable.{{variable-name}}`  
A `{{variable-name}}` é uma variável que você definiu usando a [CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html)ação.  
Por exemplo, caso tenha uma variável chamada `TechnicianID` definida usando `detectorDefinition.states.onInputEvents.actions.setVariable.variableName`, é possível referenciar o valor (string) dado mais recentemente à variável com o comando a seguir.  

```
$variable.TechnicianID
```
Você pode definir os valores das variáveis somente usando a ação `setVariable`. Não é possível atribuir valores para variáveis em uma expressão. Uma variável não pode ser desativada. Por exemplo, não é possível atribuir o valor `null` a ela.

**nota**  
Nas referências que usam identificadores que não seguem o padrão (expressão regular) `[a-zA-Z][a-zA-Z0-9_]*`, você deve colocar esses identificadores em acentos graves (```). Por exemplo, uma referência a uma entrada nomeada `MyInput` com um campo chamado `_value` deve especificar esse campo como `$input.MyInput.`_value``.

Ao usar referências em expressões, verifique o seguinte:<a name="expression-reference-type-compatibility"></a>
+ Ao usar uma referência como operando com um ou mais operadores, verifique se todos os tipos de dados referenciados são compatíveis.

  Por exemplo, na expressão a seguir, o inteiro `2` é um operando dos operadores `==` e `&&`. Para garantir que os operandos sejam compatíveis, `$variable.testVariable + 1` e `$variable.testVariable` devem referenciar um número inteiro ou decimal.

  Além disso, o inteiro `1` é um operando do operador `+`. Portanto, `$variable.testVariable` deve fazer referência a um número inteiro ou decimal.

  ```
  ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  ```
+ Ao usar uma referência como argumento passado para uma função, verifique se a função é compatível com os tipos de dados aos quais você faz referência.

  Por exemplo, a função a seguir `timeout("{{time-name}}")` requer uma string com aspas duplas como argumento. Se você usar uma referência para o {{timer-name}} valor, deverá referenciar uma string com aspas duplas.

  ```
  timeout("{{timer-name}}")
  ```
**nota**  
Para a `convert({{type}}, {{expression}})` função, se você usar uma referência para o {{type}} valor, o resultado avaliado da sua referência deverá ser`String`,`Decimal`, ou`Boolean`.

AWS IoT Events as expressões oferecem suporte aos tipos de dados inteiros, decimais, strings e booleanos. A tabela a seguir fornece uma lista de pares de tipos incompatíveis.


|  Pares de tipos incompatíveis  | 
| --- | 
| Inteiro, string | 
| Inteiro, booliano | 
| Decimal, sequência | 
| Decimal, booliano | 
| String, booliano | 

### Modelos de substituição para expressões AWS IoT Events
<a name="expression-substitution-template"></a>

****  
`'${{{expression}}}'`  
O `${}` identifica a string como uma string interpolada. `expression`Pode ser qualquer AWS IoT Events expressão. Isso inclui Operadores, Funções e Referências.  
Por exemplo, você usou a [SetVariableAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetVariableAction.html)ação para definir uma variável. O `variableName` é `SensorID`, e o `value` é `10`. É possível criar os seguintes modelos de substituição.      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/iotevents/latest/developerguide/iotevents-expressions.html)