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 comofalse
.
-
- 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()
retornatrue
somente na primeira vez em que é verificado após a expiração real do temporizador e retornafalse
depois disso. convert(
type
,expression
)-
Avalia o valor da expressão convertida para o tipo especificado. O valor do
tipo
deve serString
,Boolean
ouDecimal
. 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 afalse
e não acionará aactions
ou a transição para anextState
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 entradaMyInput
receber a mensagem{ "a": null }
, o seguinte será avaliado comotrue
, masisUndefined($input.MyInput.a)
será avaliado parafalse
.isNull($input.MyInput.a)
isUndefined(
expression
)-
Avalia para
true
se a expressão é indefinida. Por exemplo, se a entradaMyInput
receber a mensagem{ "a": null }
, o seguinte será avaliado comotrue
, masisNull($input.MyInput.a)
será avaliado parafalse
.isUndefined($input.MyInput.a)
triggerType("
type
")-
O valor
tipo
pode ser"Message"
ou"Timer"
. Avalia paratrue
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 entradaCommand
receber a mensagem{ "value": "Abort" }
, a seguinte será avaliado paratrue
.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 entradaMyInput
receber a mensagem{ "status": "offline"}
, a seguinte será avaliada comotrue
.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 entradaMyInput
receber a mensagem{ "status": "offline" }
, a seguinte será avaliada comotrue
.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 entradaMyInput
receber a mensagem{ "status": "offline" }
, a seguinte será avaliada comotrue
.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 como13
.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 como5
.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 como8
.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 definiuinputDefinition.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
[
. Por exemplo, considerando os seguintes dados:n
]{ "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
é uma variável que você definiu usando a ação CreateDetectorModel.variable-name
Por exemplo, se você tiver uma variável chamada
TechnicianID
que você definiu usandodetectorDefinition.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 valornull
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("
a seguir requer uma string com aspas duplas como argumento. Se você usar uma referência para o valor dotime-name
")timer-name
, você deverá referenciar uma string com aspas duplas.timeout("
timer-name
")nota
Para a função
convert(
, se você usar uma referência para o valor dotype
,expression
)tipo
, o resultado avaliado da sua referência deverá serString
,Decimal
ouBoolean
.
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. Oexpression
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 ovalue
é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}"