Tutorial:r Como enviar uma notificação do Amazon SNS - 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á.

Tutorial:r Como enviar uma notificação do Amazon SNS

Este tutorial demonstra como criar uma AWS IoT regra que envia dados de mensagens MQTT para um tópico do Amazon SNS para que possam ser enviados como uma mensagem de texto SMS.

Neste tutorial, você cria uma regra que envia dados de mensagens de um sensor meteorológico para todos os assinantes de um tópico do Amazon SNS, sempre que a temperatura exceder o valor definido na regra. A regra detecta quando a temperatura relatada excede o valor definido pela regra e, em seguida, cria uma nova carga útil de mensagem que inclui somente a ID do dispositivo, a temperatura relatada e o limite de temperatura que foi excedido. A regra envia a nova carga útil da mensagem como um documento JSON para um tópico do SNS, que notifica todos os assinantes do tópico do SNS.

O que você aprenderá neste tutorial:
  • Como criar e testar uma notificação do Amazon SNS

  • Como chamar uma notificação do Amazon SNS a partir de uma regra AWS IoT

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

  • Como usar o cliente MQTT para testar uma regra AWS IoT

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

Antes de começar este tutorial, verifique se você tem o seguinte:

Etapa 1: Criar um tópico do Amazon SNS que envia uma mensagem de texto SMS

Para criar um tópico do Amazon SNS que envia uma mensagem de texto SMS
  1. Crie um tópico do Amazon SNS.

    1. Faça login no console do Amazon SNS.

    2. No painel de navegação à esquerda, selecione Tópicos.

    3. Na página Tópicos, escolha Criar tópico.

    4. Em Detalhes, escolha o tipo Padrão. Por padrão, o console cria um tópico FIFO.

    5. Em Nome, insira o nome do tópico do SNS. Para este tutorial, insira high_temp_notice.

    6. Role até o final do formulário e escolha Criar tópico.

      O console abrirá a página Detalhes do tópico.

  2. Crie uma assinatura do Amazon SNS.

    nota

    O número de telefone que você usa nesta assinatura pode incorrer em cobranças de mensagens de texto a partir das mensagens que você enviará neste tutorial.

    1. Na página de detalhes do tópico high_temp_notice, selecione Criar assinatura.

    2. Em Criar assinatura, na seção Detalhes, na lista Protocolo, escolha SMS.

    3. No Endpoint, insira o número de um telefone que pode receber mensagens de texto. Certifique-se de inseri-lo de forma que comece com um +, inclua o código do país e da área e não inclua nenhum outro caractere de pontuação.

    4. Selecione Criar assinatura.

  3. Teste a notificação do Amazon SNS.

    1. No console Amazon SNS , no painel de navegação esquerdo, selecione Tópicos.

    2. Para abrir a página de detalhes do tópico, em Tópicos, na lista de tópicos, escolha high_temp_notice.

    3. Para abrir a página Publicar mensagem no tópico, na página de detalhes high_temp_notice, selecione Publicar mensagem.

    4. Em Publicar mensagem no tópico, na seção Corpo da mensagem, em Corpo da mensagem a ser enviada ao endpoint, insira uma mensagem curta.

    5. Navegue para baixo até o final da página e selecione Publicar mensagem.

    6. No telefone com o número usado anteriormente ao criar a assinatura, confirme se a mensagem foi recebida.

    Se você não recebeu a mensagem de teste, verifique novamente o número de telefone e as configurações do seu telefone.

    Certifique-se de poder publicar mensagens de teste no console do Amazon SNS antes de continuar o tutorial.

Etapa 2: criar uma AWS IoT regra para enviar a mensagem de texto

A AWS IoT regra que você criará neste tutorial se inscreve nos tópicos do device/device_id/data MQTT, onde device_id está o ID do dispositivo que enviou a mensagem. Esses tópicos são descritos em um filtro de tópicos como device/+/data, em que + é um caractere curinga que corresponde a qualquer sequência de caracteres entre os dois caracteres de barra. Essa regra também testa o valor do campo temperature na carga útil da mensagem.

Quando a regra recebe uma mensagem de um tópico correspondente, ela pega o valor device_id do nome do tópico, o valor temperature da carga útil da mensagem, adiciona um valor constante ao limite que está testando e envia esses valores como um documento JSON para um tópico de notificação do Amazon SNS.

Por exemplo, uma mensagem MQTT do dispositivo de sensor meteorológico número 32 usa o tópico device/32/data e tem uma carga de mensagem semelhante a esta:

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

A declaração de consulta de regra da regra pega o valor temperature da carga útil da mensagem, device_id do nome do tópico e adiciona o valor max_temperature constante para enviar uma carga útil de mensagem semelhante a esta para o tópico do Amazon SNS:

{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30 }
Para criar uma AWS IoT regra para detectar um valor de temperatura acima do limite e criar os dados para enviar ao tópico do Amazon SNS
  1. Abra o hub de regras do AWS IoT console.

  2. Se essa for sua primeira regra, escolha Criar ou Criar uma regra.

  3. Em Criar uma regra:

    1. Em Nome, insira temp_limit_notify.

      Lembre-se de que o nome de uma regra deve ser exclusivo em sua região Conta da AWS e não pode ter espaços. Usamos um caractere de sublinhado nesse nome para separar as palavras no nome da regra.

    2. Em Descrição, descreva a regra.

      Uma descrição significativa facilita lembrar o que essa regra faz e por que você a criou. A descrição pode ser tão longa quanto necessário, portanto, seja o mais detalhista possível.

  4. Na declaração de consulta de regra de Criar uma regra:

    1. Em Uso da versão SQL, selecione 23-03-2016.

    2. Na caixa de edição Instrução de consulta de regra, insira a instrução:

      SELECT topic(2) as device_id, temperature as reported_temperature, 30 as max_temperature FROM 'device/+/data' WHERE temperature > 30

      Esta declaração:

      • Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos device/+/data e que tenha um valor temperature maior que 30.

      • Seleciona o segundo elemento da cadeia de caracteres do tópico e o atribui ao campo device_id.

      • Seleciona o campo temperature de valor da carga útil da mensagem e o atribui ao campo reported_temperature.

      • Cria um valor constante 30 para representar o valor limite e o atribui ao campo max_temperature.

  5. Para abrir a lista de ações de regra para essa regra, em Definir uma ou mais ações, escolha Adicionar ação.

  6. Em Selecionar uma ação, selecione Enviar uma mensagem como uma notificação por push do SNS.

  7. Para abrir a página de configuração da ação selecionada, na parte inferior da lista de ações, escolha Configurar ação.

  8. Em Configurar ação:

    1. Em Destino do SNS, escolha Selecionar, encontre seu tópico do SNS chamado high_temp_notice e escolha Selecionar.

    2. Em Formato de mensagem, selecione RAW.

    3. Em Escolher ou criar uma função para conceder AWS IoT acesso para realizar essa ação, escolha Criar função.

    4. Em Criar uma nova função, em Nome, insira um nome exclusivo para a nova função. Para este tutorial, use sns_rule_role.

    5. Selecione Criar perfil.

    Se estiver repetindo este tutorial ou reutilizando uma função existente, escolha Atualizar função antes de continuar. Isso atualiza o documento de política da função para funcionar com o destino do SNS.

  9. Escolha Adicionar ação e retorne à página Criar uma regra.

    No quadro da nova ação, abaixo de Enviar uma mensagem como notificação push do SNS, você pode ver o tópico do SNS que sua regra vai chamar.

    Essa é a única ação de regra que você adicionará a essa regra.

  10. Para criar a regra e concluir essa etapa, em Criar uma regra, desloque o cursor para baixo até a parte inferior e escolha Criar regra.

Etapa 3: testar a AWS IoT regra e a notificação do Amazon SNS

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

Abra o cliente MQTT no AWS IoT console em uma nova janela. Isso permitirá que você edite 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, ele não reterá nenhuma assinatura ou logs de mensagens.

Você pode usar o cliente MQTT para testar a regra
  1. No cliente MQTT no AWS IoT console, assine os tópicos de entrada, neste caso, device/+/data.

    1. No Cliente MQTT, em Assinaturas, selecione Assine um tópico.

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

    3. Deixe os demais campos com as configurações padrão.

    4. Escolha Assinar um tópico.

      Na coluna Assinaturas, em Publicar em um tópico, device/+/data é exibido.

  2. Publique uma mensagem no tópico de entrada com um ID de dispositivo específico, device/32/data. Você não pode publicar nos tópicos MQTT que contenham caracteres curinga.

    1. No cliente MQTT, em Assinaturas, selecione Publicar em um tópico.

    2. No campo Publicar, 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. Escolha Publicar em um tópico para publicar a mensagem MQTT.

  3. Confirme se a mensagem de texto foi enviada.

    1. No cliente MQTT, em Assinaturas, há um ponto verde ao lado do tópico assinado anteriormente.

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

    2. Em Assinaturas, escolha dispositivo/+/dado para verificar se a carga útil da mensagem corresponde ao que você acabou de publicar e tem a seguinte aparência:

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Verifique o telefone utilizado para assinar o tópico do SNS e confirme se o conteúdo da carga útil da mensagem tem a seguinte aparência:

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

      Observe que o valor device_id valor é uma string citada e o valor temperature é numérico. Isso ocorre porque a topic()função extraiu a string do nome do tópico da mensagem de entrada, enquanto o valor temperature usa o valor numérico da carga útil da mensagem de entrada.

      Se você quiser transformar o valor device_id em um valor numérico, substitua topic(2) na instrução de consulta de regra por:

      cast(topic(2) AS DECIMAL)

      Observe que converter o valor topic(2) em um valor numérico DECIMAL só funcionará se essa parte do tópico contiver somente caracteres numéricos.

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

    1. No cliente MQTT, em Assinaturas, selecione Publicar em um tópico.

    2. No campo Publicar, 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, escolha Publicar no tópico.

    Você deve visualizar a mensagem que enviou na assinatura device/+/data. No entanto, como o valor da temperatura está abaixo da temperatura máxima na consulta da regra, você não deve receber uma mensagem de texto.

    Se não encontrar o comportamento correto, confira as dicas de solução de problemas.

Solução de problemas da regra de mensagens do SNS

Aqui estão algumas objetos para verificar, caso não esteja vendo os resultados esperados.

  • Você recebeu um banner de erro

    Se um erro apareceu 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 cliente MQTT

    Toda vez que você publica sua mensagem de entrada no tópico device/22/data, essa mensagem deve aparecer no cliente MQTT, se tiver assinado o filtro de tópicos device/+/data conforme descrito no procedimento.

    Pontos importantes
    • Verifique o filtro de tópicos em que você fez a assinatura

      Se você fez a assinatura no tópico da mensagem de entrada conforme descrito no procedimento, deverá ver uma cópia da mensagem de entrada toda vez que publicá-la.

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

    • Verifique a função de publicação de mensagens

      No cliente MQTT, em Assinaturas, escolha dispositivo/+/dados, verifique o tópico da mensagem de publicação e escolha Publicar no tópico. Você deve ver a carga útil da mensagem na caixa de edição abaixo do tópico aparecer na lista de mensagens.

  • Se você não receber 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 do SNS, e ela deve receber a mensagem.

    Pontos importantes
    • 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 na mesma região AWS da regra que você criou.

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

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

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

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

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

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

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

      Verifique a ortografia do campo temperature na instrução de consulta da regra com a da carga útil da mensagem no cliente MQTT. Os nomes dos campos diferenciam maiúsculas de minúsculas e o campo temperature na instrução de consulta da regra deve ser idêntico ao campo temperature na carga útil da mensagem.

      Verifique se o documento JSON na carga útil da mensagem está formatado corretamente. Se o JSON tiver algum erro, como uma vírgula ausente, a regra não poderá lê-lo.

    • Verifique o tópico da mensagem republicada na ação da regra

      O tópico no qual a ação da regra de republicação publica a nova mensagem deve corresponder ao tópico no qual você fez a assinatura no cliente MQTT.

      Abra a regra que você criou no console e verifique o tópico no qual a ação da regra republicará a mensagem.

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

      A ação da 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 mensagens 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 de regra para atualizar sua política conforme o tópico atual.

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

Etapa 4: Revisar os resultados e as próximas etapas

Neste tutorial:
  • Você criou e testou um tópico e uma assinatura de notificação do Amazon SNS.

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

  • Você criou uma AWS IoT regra para enviar uma notificação do Amazon SNS usando sua carga de mensagem personalizada.

  • Você usou o cliente MQTT para testar sua AWS IoT regra.

Próximas etapas

Depois de enviar algumas mensagens de texto com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta a mensagem e quando ela é enviada. Aqui estão algumas ideias para você começar.

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

  • Altere os campos selecionados na consulta da regra e observe o efeito no conteúdo da mensagem de texto.

  • Altere o teste na consulta da regra para testar uma temperatura mínima em vez de uma temperatura máxima. Lembre-se de mudar o nome de max_temperature!

  • Adicione uma ação de regra de republicação para enviar uma mensagem MQTT quando uma notificação do SNS for enviada.

  • Experimente o próximo tutorial desta série e aprenda como Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB.