Configurar a ação da AWS IoT SiteWise regra - AWS IoT SiteWise

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

Configurar a ação da AWS IoT SiteWise regra

A ação da AWS IoT SiteWise regra envia dados da MQTT mensagem que iniciou a regra para as propriedades do ativo em AWS IoT SiteWise. Você pode carregar várias entradas de dados em diferentes propriedades de ativos ao mesmo tempo, para enviar atualizações para todos os sensores de um dispositivo em uma mensagem. Também é possível fazer upload de vários pontos de dados de uma vez para cada entrada de dados.

nota

Quando você envia dados para AWS IoT SiteWise com a ação de regra, seus dados devem atender a todos os requisitos da BatchPutAssetPropertyValue operação. Por exemplo, seus dados não podem ter um time stamp com mais de 7 dias do horário Unix epoch atual. Para obter mais informações, consulte Ingestão de dados com o. AWS IoT SiteWise API

Para cada entrada de dados na ação de regra, você identifica uma propriedade de ativo e especifica o time stamp, a qualidade e o valor de cada ponto de dados para essa propriedade de ativo. A ação da regra espera strings para todos os parâmetros.

Para identificar uma propriedade de ativo em uma entrada, especifique um dos seguintes elementos:

  • O Asset ID (ID do ativo) (assetId) e o Property ID (ID da propriedade) (propertyId) da propriedade de ativo para a qual você está enviando dados. Você pode encontrar o ID do ativo e o ID da propriedade usando Console do AWS IoT SiteWise o. Se você souber o ID do ativo, poderá usar o AWS CLI to call DescribeAssetpara encontrar o ID da propriedade.

  • O Property alias (Alias da propriedade) (propertyAlias), que é um alias de fluxo de dados (por exemplo, /company/windfarm/3/turbine/7/temperature). Para usar esta opção, primeiro você deve definir o apelido da propriedade do seu ativo. Para saber como definir apelidos de propriedades, consulte Mapeie fluxos de dados industriais para propriedades de ativos.

Para o timestamp em cada entrada, use o timestamp informado pelo seu equipamento ou o timestamp fornecido por. AWS IoT Core O time stamp tem dois parâmetros:

  • Time in seconds (Tempo em segundos) (timeInSeconds) – o horário Unix epoch, em segundos, no qual o sensor ou equipamento reportou os dados.

  • Offset in nanos (Deslocamento em nanossegundos) (offsetInNanos) – (opcional) o deslocamento em nanossegundos do tempo em segundos.

Importante

Se seu time stamp for uma string, tiver uma parte decimal ou não estiver em segundos, AWS IoT SiteWise rejeitará a solicitação. Você deve converter o time stamp em segundos e o deslocamento em nanossegundos. Use os recursos do mecanismo de AWS IoT regras para converter o carimbo de data/hora. Para obter mais informações, consulte as informações a seguir.

Também é possível usar modelos de substituição para vários parâmetros na ação para executar cálculos, invocar funções e extrair valores da carga de mensagem. Para obter mais informações, consulte Modelos de substituição no Guia do desenvolvedor do AWS IoT .

nota

Como uma expressão em um modelo de substituição é avaliado separadamente da instrução SELECT, não é possível usar um modelo de substituição para fazer referência a um alias criado usando uma cláusula AS. Você pode fazer referência somente às informações presentes na carga original, além das funções e dos operadores compatíveis.

Obter time stamps para dispositivos que não informam a hora exata

Se seu sensor ou equipamento não reportar dados de tempo precisos, obtenha a hora atual da época do Unix no mecanismo de AWS IoT regras com timestamp (). Essa função reporta o tempo em milissegundos, portanto, é necessário converter o valor para tempo em segundos e deslocamento em nanossegundos. Para fazer isso, use as seguintes conversões:

  • Para Time in seconds (Tempo em segundos) (timeInSeconds), use ${floor(timestamp() / 1E3)} para converter o tempo de milissegundos para segundos.

  • Para Offset in nanos (Deslocamento em nanossegundos) (offsetInNanos), use ${(timestamp() % 1E3) * 1E6} para calcular o deslocamento em nanossegundos do time stamp.

Conversão de time stamps em formato de string

Se seu sensor ou equipamento reportar dados de hora em formato de string (por exemplo,2020-03-03T14:57:14.699Z), use time_to_epoch (String, String). Essa função insere o time stamp e o padrão de formato como parâmetros e gera o tempo em milissegundos. Em seguida, você deve converter o tempo para tempo em segundos e o deslocamento em nanossegundos. Para fazer isso, use as seguintes conversões:

  • Para Time in seconds (Tempo em segundos) (timeInSeconds), use ${floor(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)} para converter o string do time stamp de milissegundos para segundos.

  • Para Offset in nanos (Deslocamento em nanossegundos) (offsetInNanos), use ${(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) * 1E6} para calcular o deslocamento em nanossegundos do string do time stamp.

nota

A função time_to_epoch suporta sequências de time stamp com precisão de até milissegundos. Para converter cadeias de caracteres com precisão de microssegundos ou nanossegundos, configure uma AWS Lambda função que sua regra chama para converter o timestamp em valores numéricos. Para obter mais informações, consulte Convertendo strings de time stamp de precisão de nanossegundos.

Convertendo strings de time stamp de precisão de nanossegundos

Se o seu dispositivo enviar informações de time stamp no formato de string (por exemplo, 2020-03-03T14:57:14.699728491Z), use as etapas a seguir para configurar suaa ação da regra. Você pode criar uma AWS Lambda função que converta o timestamp de uma string em Time in seconds (timeInSeconds) e Offset em nanos (). offsetInNanos Em seguida, use aws_lambda (functionArn,inputJson) em seus parâmetros de ação de regra para invocar essa função Lambda e usar a saída em sua regra.

nota

Esta seção contém instruções avançadas que presumem que você esteja familiarizado com como criar os recursos a seguir:

Para criar uma ação de AWS IoT SiteWise regra que analisa cadeias de caracteres de carimbo de data/hora
  1. Crie uma função do Lambda com as seguintes propriedades:

    • Nome da função – use um nome descritivo de função (por exemplo, ConvertNanosecondTimestampFromString).

    • Tempo de execução — Use um tempo de execução do Python 3, como o Python 3.11 (). python3.11

    • Permissões — Crie uma função com permissões básicas do Lambda () AWS LambdaBasicExecutionRole.

    • Camadas — Adicione a AWS SDKPandascamada -Python311 para usar a função Lambda. numpy

    • Código de função – use o código de função a seguir, que consome um argumento de string chamado timeInSeconds e emite na saída os valores timestamp e offsetInNanos para esse time stamp.

      import json import math import numpy # Converts a timestamp string into timeInSeconds and offsetInNanos in Unix epoch time. # The input timestamp string can have up to nanosecond precision. def lambda_handler(event, context): timestamp_str = event['timestamp'] # Parse the timestamp string as nanoseconds since Unix epoch. nanoseconds = numpy.datetime64(timestamp_str, 'ns').item() time_in_seconds = math.floor(nanoseconds / 1E9) # Slice to avoid precision issues. offset_in_nanos = int(str(nanoseconds)[-9:]) return { 'timeInSeconds': time_in_seconds, 'offsetInNanos': offset_in_nanos }

      Essa função Lambda insere cadeias de caracteres de timestamp no ISO formato 8601 usando datetime64 de. NumPy

      nota

      Se suas cadeias de caracteres de carimbo de data/hora não estiverem no formato ISO 8601, você poderá implementar uma solução pandas que defina o formato de carimbo de data/hora. Para obter mais informações, consulte pandas.to_datetime.

  2. Ao configurar a AWS IoT SiteWise ação para sua regra, use os seguintes modelos de substituição para Tempo em segundos (timeInSeconds) e Deslocamento em nanos (). offsetInNanos Esses modelos de substituição presumem que a carga de mensagem contém a string de time stamp em timestamp. A aws_lambda função consome uma JSON estrutura para seu segundo parâmetro, então você pode modificar os modelos de substituição abaixo, se necessário.

    • Para Time in seconds (Tempo em segundos) (timeInSeconds), use o seguinte modelo de substituição.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).timeInSeconds}
    • Para Offset in nanos (Deslocamento em nanos) (offsetInNanos), use o seguinte modelo de substituição.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).offsetInNanos}

    Para cada parâmetro, substitua region e account-id com sua região e ID AWS da conta. Se você usou um nome diferente para sua função do Lambda, altere-o também.

  3. Conceda AWS IoT permissões para invocar sua função com a lambda:InvokeFunction permissão. Para obter mais informações, consulte aws_lambda (,). functionArn inputJson

  4. Teste sua regra (por exemplo, use o cliente AWS IoT MQTT de teste) e verifique se ele AWS IoT SiteWise recebe os dados que você envia.

    Se sua regra não funcionar como esperado, consulte Solucionar problemas de uma ação de AWS IoT SiteWise regra.

nota

Esta solução invoca a função do Lambda duas vezes para cada string de time stamp. Você pode criar outra regra para reduzir o número de invocações de função do Lambda se sua regra manipular vários pontos de dados que têm o mesmo time stamp em cada carga.

Para fazer isso, crie uma regra com uma ação de publicar novamente que invoque o Lambda e publique a carga original com a string de time stamp convertida para timeInSeconds e offsetInNanos. Em seguida, crie uma regra com uma ação de AWS IoT SiteWise regra para consumir a carga convertida. Com essa abordagem, você reduz o número de vezes que a regra invoca o Lambda, mas aumenta o número de ações de AWS IoT regras executadas. Considere a definição de preço de cada serviço caso você aplique essa solução ao seu caso de uso.

Configurações de regra de exemplo

Esta seção contém exemplos de configurações de regras para criar uma regra com uma AWS IoT SiteWise ação.

exemplo O exemplo de ação de regra que usa aliases de propriedade como tópicos de mensagem

O exemplo a seguir cria uma regra com uma AWS IoT SiteWise ação que usa o tópico (por meio de topic ()) como alias da propriedade para identificar as propriedades do ativo. Use este exemplo para definir uma regra para a ingestão de dados de tipo duplo em todas as turbinas eólicas em todos os parques eólicos. Este exemplo exige que você defina aliases de propriedade em todas as propriedades dos ativos da turbina. Você precisa definir uma segunda regra semelhante para ingerir dados de tipo inteiro.

aws iot create-topic-rule \ --rule-name SiteWiseWindFarmRule \ --topic-rule-payload file://sitewise-rule-payload.json

O exemplo de carga no sitewise-rule-payload.json contém o conteúdo a seguir.

{ "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+' WHERE type = 'double'", "description": "Sends data to the wind turbine asset property with the same alias as the topic", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "propertyAlias": "${topic()}", "propertyValues": [ { "timestamp": { "timeInSeconds": "${timeInSeconds}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Com essa ação de regra, envie a seguinte mensagem para um alias de propriedade de turbina eólica (por exemplo,/company/windfarm/3/turbine/7/temperature) como um tópico para ingerir dados.

{ "type": "double", "value": "38.3", "timeInSeconds": "1581368533" }
exemplo Exemplo de ação de regra que usa time stamp() para determinar o tempo

O exemplo a seguir cria uma regra com uma AWS IoT SiteWise ação que identifica uma propriedade do ativo IDs e usa timestamp () para determinar a hora atual.

aws iot create-topic-rule \ --rule-name SiteWiseAssetPropertyRule \ --topic-rule-payload file://sitewise-rule-payload.json

O exemplo de carga no sitewise-rule-payload.json contém o conteúdo a seguir.

{ "sql": "SELECT * FROM 'my/asset/property/topic'", "description": "Sends device data to an asset property", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE", "propertyId": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE", "propertyValues": [ { "timestamp": { "timeInSeconds": "${floor(timestamp() / 1E3)}", "offsetInNanos": "${(timestamp() % 1E3) * 1E6}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Com essa ação de regra, envie a seguinte mensagem my/asset/property/topic para ingerir dados.

{ "type": "double", "value": "38.3" }

Solucionar problemas de ação de regra do

Para solucionar problemas de sua ação de AWS IoT SiteWise regra AWS IoT Core, configure CloudWatch Logs ou configure uma ação de erro de republicação para sua regra. Para obter mais informações, consulte Solucionar problemas de uma ação de AWS IoT SiteWise regra.