Expressões - AWS IoT Events

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

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 pode avaliar as expressões antes de especificar valores específicos.

Sintaxe

As expressões aceitam literais, operadores, funções, referências e modelos de substituição nas expressões AWS IoT Events.

Literais

  • Inteiro

  • Decimal

  • Segmento

  • Booliano

Operadores

Unário
  • Não (Booleano): !

  • Não (bitwise): ~

  • Menos (aritmética): -

Segmento
  • 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

Booliano
  • 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

Você pode usar parênteses para agrupar termos em uma expressão.

Funções

Funções incorporadas
timeout("timer-name")

Avalia para true se o temporizador especificado expirou. Substitua "timer-name" pelo nome de um temporizador que você definiu, entre aspas. Em uma ação de evento, você pode definir um temporizador e, em seguida, iniciá-lo, reiniciá-lo ou limpar um que você definiu anteriormente. Consulte o campodetectorModelDefinition.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 e RecordUpdated. Você criou um temporizador no estado TemperatureChecked. Você deve visitar o estado TemperatureChecked primeiro antes de poder usar o temporizador no estado RecordUpdated.

Para garantir a precisão, o tempo mínimo que um temporizador deve ser configurado é de 60 segundos.

nota

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)

Avalia o valor da expressão convertida para o tipo especificado. O valor do tipo 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:

  • Booleano -> string

    Retorna uma string "true" ou "false".

  • Decimal -> string

  • String -> Booleano

  • 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á a actions ou a transição para a nextState especificada como parte do evento no qual a expressão ocorre.

isNull(expression)

Avalia para 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 para false.

isNull($input.MyInput.a)
isUndefined(expression)

Avalia para true se a expressão é 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 para false.

isUndefined($input.MyInput.a)
triggerType("type")

O valor tipo pode ser "Message" ou "Timer". Avalia para true se a condição do evento em que ele aparece está sendo avaliada porque um cronômetro expirou, como no exemplo a seguir.

triggerType("Timer")

Ou uma mensagem de entrada foi recebida.

triggerType("Message")
currentInput("input")

Avalia para 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" }, a seguinte será avaliado para 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)

Avalia para 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)

Avalia para 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)

Avalia 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.

Referências

Entradas

$input.input-name.path-to-data

input-name é uma entrada que você cria usando a ação CreateInput.

Por exemplo, se você tiver uma entrada nomeada TemperatureInput para a qual definiu inputDefinition.attributes.jsonPath entradas, 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, você pode 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 ação CreateDetectorModel.

Por exemplo, se você tiver uma variável chamada TechnicianID que você definiu usando detectorDefinition.states.onInputEvents.actions.setVariable.variableName, você pode 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. Você não pode atribuir valores para variáveis em uma expressão. Uma variável não pode ser desdefinida. Por exemplo, você não pode 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:

  • 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 suporta os tipos de dados aos quais você faz referência.

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

    timeout("timer-name")
    nota

    Para a função convert(type, expression), se você usar uma referência para o valor do tipo, o resultado avaliado da sua referência deverá ser String, Decimal ou Boolean.

As expressões AWS IoT Events 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, booleano

Decimal, sequência

Decimal, booliano

String, booleano

Modelos de substituição

'${expression}'

O ${} identifica a string como uma string interpolada. O expression pode ser qualquer expressão AWS IoT Events. Isso inclui Operadores, Funções e Referências.

Por exemplo, você usou a ação SetVariableAction para definir uma variável. O variableName é SensorID, e o value é 10. Você pode criar os seguintes modelos de substituição.

Modelo de substituição String 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}"