Formatar uma notificação usando umAWS Lambdafunção - AWS IoT Core

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

Formatar uma notificação usando umAWS Lambdafunção

Este tutorial demonstra como enviar os dados da mensagem MQTT para umAWS Lambdaação para formatação e envio para outroAWSserviçoServiço. Neste tutorial, oAWS LambdaAção usa a funçãoAWSSDK para enviar a mensagem formatada para o tópico do Amazon SNS que você criou no tutorial sobre comoEnviar uma notificação do Amazon SNS.

No tutorial sobre comoEnviar uma notificação do Amazon SNS, o documento JSON resultante da instrução de consulta da regra foi enviado como o corpo da mensagem de texto. O resultado foi uma mensagem de texto parecida com este exemplo:

{"device_id":"32","reported_temperature":38,"max_temperature":30}

Neste tutorial, você usará umAWS Lambdaação de regra para chamar umAWS Lambdaque formata os dados da instrução de consulta de regra em um formato mais amigável, como este exemplo:

Device 32 reports a temperature of 38, which exceeds the limit of 30.

OAWS Lambdaque você criará neste tutorial formata a string de mensagem usando os dados da instrução de consulta de regra e chama o métodoPublicação do SNSfunção doAWSSDK para criar a notificação.

O que você aprenderá neste tutorial

  • Como criar e testar umAWS Lambdafunção

  • Como usar aAWSSDK em umAWS Lambdapara publicar uma notificação do Amazon SNS

  • Como usar consultas SQL simples e funções em uma instrução de consulta de regra

  • Como usar o cliente MQTT do para testar umAWS IoTRegra do

A conclusão deste tutorial requer cerca de 45 minutos.

Antes de começar este tutorial, certifique-se de que você tenha:

Criar umAWS LambdaFunção que envia uma mensagem de texto

OAWS Lambdaneste tutorial recebe o resultado da instrução de consulta de regra, insere os elementos em uma string de texto e envia a string resultante para o Amazon SNS como a mensagem em uma notificação.

Ao contrário do tutorial sobre comoEnviar uma notificação do Amazon SNS, que utilizou umAWS IoTpara enviar a notificação, este tutorial envia a notificação da função do Lambda usando uma função doAWSSDK. No entanto, o tópico real de notificação do Amazon SNS usado neste tutorial é o mesmo que você usou no tutorial sobre comoEnviar uma notificação do Amazon SNS.

Para criar umAWS LambdaFunção que envia uma mensagem de texto

  1. Criar um novoAWS Lambdafunção.

    1. No console do AWS Lambda, escolha Create function (Criar função).

    2. DentroCriar função, selecioneUse um esquema.

      Pesquise e selecione ohello-world-pythone, em seguida, escolhaConfigure.

    3. DentroInformações básicas:

      1. DentroNome da função, insira o nome desta função,format-high-temp-notification.

      2. DentroFunção de execução, escolhaCriar uma nova função doAWSModelos de política do.

      3. Em Role name (Nome da função), insira o nome da nova função,format-high-temp-notification-role.

      4. DentroModelos de política -opcional, procure e selecionePolítica de publicação do Amazon SNS.

      5. Escolha Create function (Criar função).

  2. Modifique o código do blueprint para formatar e envie uma notificação do Amazon SNS.

    1. Depois de criar a função, você deve ver oformat-high-temp-notificaçãoPágina de detalhes. Se não fizer isso, abra-o noLambdaFunções.

    2. Noformat-high-temp-notificaçãoPágina de detalhes, escolha aConfiguraçãoe role até a guiaCódigo da funçãoPainel.

    3. NoCódigo da função, na janelaEnvironment (Ambiente), escolha o arquivo Python,lambda_function.py.

    4. NoCódigo da função, exclua todo o código do programa original do blueprint e substitua-o por este código.

      import boto3 # # expects event parameter to contain: # { # "device_id": "32", # "reported_temperature": 38, # "max_temperature": 30, # "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice" # } # # sends a plain text string to be used in a text message # # "Device {0} reports a temperature of {1}, which exceeds the limit of {2}." # # where: # {0} is the device_id value # {1} is the reported_temperature value # {2} is the max_temperature value # def lambda_handler(event, context): # Create an SNS client to send notification sns = boto3.client('sns') # Format text message from data message_text = "Device {0} reports a temperature of {1}, which exceeds the limit of {2}.".format( str(event['device_id']), str(event['reported_temperature']), str(event['max_temperature']) ) # Publish the formatted message response = sns.publish( TopicArn = event['notify_topic_arn'], Message = message_text ) return response
    5. Escolha Deploy (Implantar).

  3. Em uma nova janela, procure o nome de recurso da Amazon (ARN) do tópico do Amazon SNS no tutorial sobre como fazer issoEnviar uma notificação do Amazon SNS.

    1. Em uma nova janela, abra oPágina de tópicos do console do Amazon SNS.

    2. NoTópicos, localize ahigh_temp_noticetópico de notificação na lista de tópicos do Amazon SNS.

    3. Encontre oARNdohigh_temp_noticeTópico de notificação a ser usado na próxima etapa.

  4. Crie um caso de teste para sua função do Lambda.

    1. NoLambdaFunçõesNo console do, na guia doformat-high-temp-notificaçãoPágina de detalhes, escolhaSelecione um evento de testeNo canto superior direito da página (mesmo que pareça desativada) e escolhaConfigurar eventos de teste.

    2. DentroConfigurar evento de teste, escolhaCriar novo evento de teste.

    3. DentroEvent name (Nome do evento), insiraSampleRuleOutput.

    4. No editor de JSON abaixoEvent name (Nome do evento), cole este documento JSON de exemplo. Este é um exemplo do que seuAWS IoTregra será enviado para a função do Lambda.

      { "device_id": "32", "reported_temperature": 38, "max_temperature": 30, "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice" }
    5. Consulte a janela que tem a opçãoARNdohigh_temp_noticee copie o valor de ARN.

    6. Substituir anotify_topic_arnno editor JSON com o ARN do tópico de notificação.

      Mantenha esta janela aberta para que você possa usar esse valor ARN novamente ao criar oAWS IoTRegra do.

    7. Escolha Create (Criar).

  5. Teste a função com dados de amostra.

    1. Noformat-high-temp-notificação, no canto superior direito da página, confirme seSampleRuleOutputaparece ao lado doTeste. Caso contrário, escolha-o na lista de eventos de teste disponíveis.

    2. Para enviar a mensagem de saída de regra de exemplo para sua função, escolhaTeste.

Se a função e a notificação funcionaram, você receberá uma mensagem de texto no telefone que se inscreveu na notificação.

Se você não recebeu uma mensagem de texto no telefone, verifique o resultado da operação. NoCódigo da função, no painelResultado da execução, revise a resposta para localizar os erros ocorridos. Não continue para a próxima etapa até que sua função possa enviar a notificação para o telefone.

Criar umAWS IoTregra com umAWS LambdaAção da regra do

Nesta etapa, você usará a instrução de consulta de regra para formatar os dados do dispositivo de sensor meteorológico imaginário para enviar para uma função do Lambda, que formatará e enviará uma mensagem de texto.

Uma amostra de carga de mensagem recebida dos dispositivos meteorológicos tem a seguinte aparência:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

Nesta regra, você usará a instrução de consulta de regra para criar uma carga de mensagem para a função do Lambda que se parece com esta:

{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30, "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice" }

Isso contém todas as informações que a função do Lambda precisa para formatar e enviar a mensagem de texto correta.

Para criar oAWS IoTregra para chamar uma função do Lambda

  1. Abrir oRegrasHub doAWS IoTconsole.

  2. Para começar a criar sua nova regra noRegras, escolhaCriar.

  3. Na parte superior doCriar uma regra:

    1. DentroName (Nome), insira o nome da regra,wx_friendly_text.

      Lembre-se de que um nome de regra deve ser exclusivo dentro do Conta da AWS e Região, e não pode ter espaços. Usamos um caractere sublinhado nesse nome para separar as duas palavras no nome da regra.

    2. DentroDescrição, descreva a regra.

      Uma descrição significativa torna mais fácil lembrar o que essa regra faz e por que você a criou. A descrição pode ser o maior tempo necessário, então seja o mais detalhado possível.

  4. DentroInstrução de consultadeCriar uma regra:

    1. DentroUso de versão do SQL, selecione2016-03-23.

    2. NoInstrução de consultaEditar, insira o demonstrativo:

      SELECT cast(topic(2) AS DECIMAL) as device_id, temperature as reported_temperature, 30 as max_temperature, 'arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice' as notify_topic_arn FROM 'device/+/data' WHERE temperature > 30

      Esta declaração:

      • Escuta mensagens MQTT com um tópico que corresponde aodevice/+/datafiltro de tópico e que tenham umtemperaturevalor maior que 30.

      • Seleciona o segundo elemento da cadeia de caracteres de tópico, converte-o em um número decimal e, em seguida, atribui-lo à propriedadedevice_idfield.

      • Seleciona o valor da propriedadetemperaturedo payload da mensagem e o atribui ao camporeported_temperaturefield.

      • Cria um valor constante,30, para representar o valor limite e atribui-lo aomax_temperaturefield.

      • Cria um valor constante para onotify_topic_arnfield.

    3. Consulte a janela que tem a opçãoARNdohigh_temp_noticee copie o valor de ARN.

    4. Substitua o valor ARN (arn:aws:sns:sns:sns:sns:TEMPLE833:HIG_TEMPLE833:T) no editor de instruções de consulta de regra com o ARN do tópico de notificação.

  5. DentroDefinir uma ou mais ações:

    1. Para abrir a lista de ações de regra para esta regra, escolhaAdicionar ação.

    2. DentroSelecionar uma ação, escolhaEnviar uma mensagem para uma função do Lambda.

    3. Para abrir a página de configuração da ação selecionada, na parte inferior da lista de ações, escolhaConfigure action.

  6. DentroConfigure action:

    1. DentroNome da função, escolhaSelect.

    2. Selecioneformat-high-temp-notificação.

    3. Na parte inferior doConfigure action, escolhaAdicionar ação.

    4. Para criar a regra, na parte inferior doCriar uma regra, escolhaCriar regra.

Teste oAWS IoTrule eAWS LambdaAção da regra do

Para testar sua nova regra, você usará o cliente MQTT para publicar e assinar as mensagens MQTT usadas por esta regra.

Abrir oCliente MQTT noAWS IoTconsoleem uma nova janela. Agora você pode editar a regra sem perder a configuração do seu cliente MQTT. Se você deixar o cliente MQTT para ir para outra página no console, você perderá suas assinaturas ou registros de mensagens.

Para usar o cliente MQTT do para testar a regra

  1. NoCliente MQTT noAWS IoTconsole, assine os tópicos de entrada, neste caso,device/+/data.

    1. No Cliente MQTT, emAssinaturas, escolhaAssinar um tópico.

    2. DentroTópico de assinatura, insira o tópico do filtro de tópico de entrada,device/+/data.

    3. Mantenha o restante dos campos nas configurações padrão.

    4. Escolha Subscribe to topic (Inscrever-se no tópico).

      NoAssinaturascoluna, emPublicar em um tópico,device/+/dataé exibida.

  2. Publique uma mensagem no tópico de entrada com um ID de dispositivo específico,device/32/data. Não é possível publicar em tópicos MQTT que contenham caracteres curinga.

    1. No Cliente MQTT, emAssinaturas, escolhaPublicar em um tópico.

    2. NoPublicarCampo, insira o nome do tópico de entrada,device/32/data.

    3. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Para publicar sua mensagem MQTT, escolhaPublicar em um tópico.

  3. Confirme se a mensagem de texto foi enviada.

    1. No Cliente MQTT, emAssinaturas, há um ponto verde ao lado do tópico no qual você se inscreveu anteriormente.

      O ponto verde indica que uma ou mais mensagens novas foram recebidas desde a última vez que você as olhou.

    2. UnderAssinaturas, escolhadispositivo/+/dadospara verificar se o payload da mensagem corresponde ao que você acabou de publicar e tem esta aparência:

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Verifique o telefone que você usou para assinar o tópico do SNS e confirme se o conteúdo da carga da mensagem é assim:

      Device 32 reports a temperature of 38, which exceeds the limit of 30.

      Se você alterar o elemento ID do tópico no tópico da mensagem, lembre-se de que a conversão dotopic(2)para um valor numérico só funcionará se esse elemento no tópico da mensagem contiver apenas caracteres numéricos.

  4. Tente enviar uma mensagem MQTT na qual a temperatura não exceda o limite.

    1. No Cliente MQTT, emAssinaturas, escolhaPublicar em um tópico.

    2. NoPublicarCampo, insira o nome do tópico de entrada,device/33/data.

    3. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Para enviar sua mensagem MQTT, escolhaPublicar em um tópico.

    A mensagem que enviou nodevice/+/data; no entanto, como o valor de temperatura está abaixo da temperatura máxima na instrução de consulta de regra, você não deve receber uma mensagem de texto.

    Se você não vir o comportamento correto, verifique as dicas de solução de problemas.

Solução de problemas doAWS LambdaRegras e notificação

Aqui estão algumas coisas a verificar, caso você não esteja vendo os resultados esperados.

  • Você recebeu um banner de erro

    Se um erro aparecer quando você publicou a mensagem de entrada, corrija esse erro primeiro. As etapas a seguir podem ajudá-lo a corrigir esse erro.

  • Você não vê a mensagem de entrada no MQTT cliente MQTT

    Toda vez que você publicar sua mensagem de entrada nodevice/32/data, essa mensagem deve aparecer no cliente MQTT, se você se inscreveu nodevice/+/dataTópico filtro como descrito no procedimento.

    Coisas a verificar

    • Verifique o filtro de tópico que você se inscreveu

      Se tiver subscrito o tópico da mensagem de entrada conforme descrito no procedimento, deverá ver uma cópia da mensagem de entrada sempre que a publicar.

      Se você não vir a mensagem, verifique o nome do tópico que você se inscreveu e compare-o com o tópico para o qual você publicou. Os nomes de tópicos diferenciam maiúsculas e minúsculas e o tópico no qual você se inscreveu deve ser idêntico ao tópico no qual você publicou a carga da mensagem.

    • Verificar a função de publicação da mensagem

      No Cliente MQTT, emAssinaturas, escolhadispositivo/+/dados, verifique o tópico da mensagem de publicação e escolhaPublicar em um tópico. Você deve ver a carga da mensagem na caixa de edição abaixo do tópico aparecer na lista de mensagens.

  • Você não recebe uma mensagem SMS

    Para que sua regra funcione, ela deve ter a política correta que a autorize a receber uma mensagem e enviar uma notificação SNS, e deve receber a mensagem.

    Coisas a verificar

    • Verifique o Região da AWS do seu cliente MQTT e a regra que você criou

      O console no qual você está executando o cliente MQTT deve estar no mesmoAWSRegião como a regra que você criou.

    • Verifique se o valor da temperatura na carga útil da mensagem excede o limite de teste

      Se o valor de temperatura for menor ou igual a 30, conforme definido na instrução de consulta de regra, a regra não executará nenhuma de suas ações.

    • Verifique o tópico da mensagem de entrada na instrução de consulta de regra

      Para que a regra funcione, ela deve receber uma mensagem com o nome do tópico que corresponda ao filtro de tópico na cláusula FROM da instrução de consulta de regra.

      Verifique a ortografia do filtro de tópico na instrução de consulta de regra com a do tópico no cliente MQTT. Os nomes de tópicos diferenciam maiúsculas e minúsculas e o tópico da mensagem deve corresponder ao filtro de tópico na instrução de consulta de regra.

    • Verifique o conteúdo da carga da mensagem de entrada

      Para que a regra funcione, ele deve encontrar o campo de dados na carga de mensagem que é declarada na instrução SELECT.

      Verifique a ortografia dotemperaturena instrução de consulta de regra com a da carga de mensagem no cliente MQTT. Os nomes dos campos diferenciam maiúsculas de minústemperaturena instrução de consulta de regra deve ser idêntico ao campotemperatureno payload da mensagem.

      Certifique-se de que o documento JSON no payload da mensagem está formatado corretamente. Se o JSON tiver erros, como uma vírgula ausente, a regra não poderá lê-lo.

    • Verifique a notificação do Amazon SNS

      DentroCrie um tópico do Amazon SNS que envia uma mensagem de texto SMS, consulte a etapa 3 que descreve como testar a notificação do Amazon SNS e testar a notificação para garantir que a notificação funcione.

    • Verifique a função do Lambda

      DentroCriar umAWS LambdaFunção que envia uma mensagem de texto, consulte a etapa 5 que descreve como testar a função do Lambda usando dados de teste e testar a função do Lambda.

    • Verifique a função que está sendo usada pela regra

      A ação de regra deve ter permissão para receber o tópico original e publicar o novo tópico.

      As políticas que autorizam a regra a receber dados de mensagem e republicá-los são específicas para os tópicos usados. Se você alterar o tópico usado para republicar os dados da mensagem, deverá atualizar a função da ação da regra para atualizar sua política para corresponder ao tópico atual.

      Se você suspeitar que esse é o problema, edite a ação Republicar regra e crie uma nova função. Novas funções criadas pela ação de regra recebem as autorizações necessárias para executar essas ações.

Revise os resultados e as próximas etapas

Neste tutorial:

  • Você criou umAWS IoTpara chamar uma função do Lambda que enviou uma notificação do Amazon SNS que usava sua carga de mensagem personalizada.

  • Você usou uma consulta SQL simples e funções em uma instrução de consulta de regra para criar uma nova carga de mensagem para sua função do Lambda.

  • Você usou o cliente MQTT do para testar oAWS IoTRegra do.

Próximas etapas

Depois de enviar algumas mensagens de texto com essa regra, tente experimentá-la para ver como alterar alguns aspectos do tutorial afetam a mensagem e quando ela é enviada. Veja aqui algumas ideias para começar a usar.

  • Altere adevice_idno tópico da mensagem de entrada e observe o efeito no conteúdo da mensagem de texto.

  • Altere os campos selecionados na instrução de consulta de regra, atualize a função do Lambda para usá-los em uma nova mensagem e observe o efeito no conteúdo da mensagem de texto.

  • Altere o teste na instrução de consulta de regra para testar uma temperatura mínima em vez de uma temperatura máxima. Atualize a função do Lambda para formatar uma nova mensagem e lembre-se de alterar o nome domax_temperature.

  • Para saber mais sobre como localizar erros que podem ocorrer enquanto você está desenvolvendo e usandoAWS IoTregras, consulteMonitorar o AWS IoT.