Tutorial: como republicar uma mensagem MQTT - 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: como republicar uma mensagem MQTT

Este tutorial demonstra como criar uma AWS IoT regra que publica uma mensagem MQTT quando uma mensagem MQTT especificada é recebida. A carga útil da mensagem recebida pode ser modificada pela regra antes de ser publicada. Isso possibilita a criação de mensagens personalizadas para aplicativos específicos sem a necessidade de alterar o dispositivo ou o firmware. Você também pode usar o aspecto de filtragem de uma regra para publicar mensagens somente quando uma condição específica for atendida.

As mensagens republicadas por uma regra agem como mensagens enviadas por qualquer outro AWS IoT dispositivo ou cliente. Os dispositivos podem assinar as mensagens republicadas da mesma forma que assinam qualquer outro tópico de mensagem do MQTT.

O que você aprenderá neste tutorial:
  • 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:

Analise os tópicos e AWS IoT regras do MQTT

Antes de falar sobre AWS IoT regras, é útil entender o protocolo MQTT. Em soluções de IoT, o protocolo MQTT oferece algumas vantagens em relação a outros protocolos de comunicação de rede, como HTTP, o que o torna uma escolha popular para uso por dispositivos de IoT. Esta seção analisa os principais aspectos do MQTT conforme eles se aplicam a este tutorial. Para obter informações sobre como o MQTT se compara ao HTTP, consulte Escolher um protocolo para a comunicação do seu dispositivo.

Protocolo MQTT

O protocolo MQTT usa um modelo de comunicação de publicação/assinatura com seu host. Para enviar dados, os dispositivos publicam mensagens identificadas por tópicos para o agente de AWS IoT mensagens. Para receber mensagens do agente de mensagens, os dispositivos assinam os tópicos que receberão enviando filtros de tópicos nas solicitações de assinatura para o agente de mensagens. O mecanismo de regras AWS IoT recebe mensagens MQTT do agente de mensagens.

AWS IoT regras

AWS IoT as regras consistem em uma instrução de consulta de regras e em uma ou mais ações de regra. Quando o mecanismo de regras AWS IoT recebe uma mensagem MQTT, esses elementos agem na mensagem da seguinte maneira.

  • Declaração de consulta de regra

    A instrução de consulta da regra descreve os tópicos do MQTT a serem usados, interpreta os dados da carga útil da mensagem e formata os dados conforme descrito por uma instrução SQL semelhante às instruções usadas por bancos de dados SQL populares. O resultado da instrução de consulta são os dados enviados para as ações da regra.

  • Ação da regra

    Cada ação de regra em uma regra atua nos dados resultantes da declaração de consulta da regra. AWS IoT suporta muitas ações de regras. Neste tutorial, no entanto, você se concentrará na ação da regra Nova publicação, que publica o resultado da instrução de consulta como uma mensagem MQTT com um tópico específico.

Etapa 1: criar uma AWS IoT regra para republicar uma mensagem MQTT

A AWS IoT regra que você criará neste tutorial se inscreve nos tópicos do device/device_id/data MQTT em que device_id é o ID do dispositivo que enviou a mensagem. Esses tópicos são descritos por um filtro de tópicos comodevice/+/data, em que + é um caractere curinga que corresponde a qualquer sequência de caracteres entre os dois caracteres de barra.

Quando a regra recebe uma mensagem de um tópico correspondente, ela republica os valores device_id e temperature e como uma nova mensagem MQTT com o tópico device/data/temp.

Por exemplo, a carga útil de uma mensagem MQTT com o tópico device/22/data tem a seguinte aparência:

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

A regra pega o valor temperature da carga útil da mensagem e o device_id do tópico e os republica como uma mensagem MQTT com o tópico device/data/temp tópico e uma carga útil de mensagem com a seguinte aparência:

{ "device_id": "22", "temperature": 28 }

Com essa regra, dispositivos que precisam apenas do ID do dispositivo e dos dados de temperatura se inscrevem no tópico device/data/temp para receber somente essas informações.

Para criar uma regra que republica uma mensagem MQTT
  1. Abra o hub de regras do AWS IoT console.

  2. Em Regras, escolha Criar e comece a criar sua nova regra.

  3. Na parte superior da opção Criar uma regra:

    1. Em Nome, insira o nome da regra. Para este tutorial, dê o nome republish_temp.

      Lembre-se de que o nome de uma regra deve ser exclusivo em sua conta 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. Em Descrição, descreva a regra.

      Uma descrição significativa ajuda você a lembrar ao que essa regra se refere 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, selecione2016-03-23.

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

      SELECT topic(2) as device_id, temperature FROM 'device/+/data'

      Esta declaração:

      • Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos device/+/data.

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

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

  5. Em Definir uma ou mais ações:

    1. Para abrir a lista de ações de regra para essa regra, escolha Adicionar ação.

    2. Em Selecionar uma ação, escolha Republicar uma mensagem em um AWS IoT tópico.

    3. Na parte inferior da lista de ações, escolha Configurar ação para abrir a página de configuração da ação selecionada.

  6. Em Configurar ação:

    1. Em Tópico, insira device/data/temp. Esse é o tópico MQTT da mensagem que essa regra publicará.

    2. Em Qualidade de Serviço, escolha 0 - A mensagem é entregue zero ou mais vezes.

    3. Em Escolha ou crie uma função para conceder AWS IoT acesso para realizar essa ação:

      1. Selecione Criar perfil. A caixa de diálogo Criar um novo perfil é aberta.

      2. Insira um nome que descreva o novo perfil. Neste tutorial, use republish_role.

        Quando você cria um novo perfil, as políticas corretas para executar a ação da regra são criadas e anexadas ao novo perfil. Se você alterar o tópico dessa ação de regra ou usar esse perfil em outra ação de regra, deverá atualizar a política desse perfil para autorizar o novo tópico ou ação. Para atualizar uma função existente, escolha Atualizar função nesta seção.

      3. Escolha Criar função para criar a função e fechar a caixa de diálogo.

    4. Escolha Adicionar ação para adicionar a ação à regra e retornar à página Criar uma regra.

  7. A ação Republicar uma mensagem em um AWS IoT tópico agora está listada em Definir uma ou mais ações.

    No bloco da nova ação, abaixo de Republicar uma mensagem em um AWS IoT tópico, você pode ver o tópico no qual sua ação de republicação será publicada.

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

  8. Em Criar uma regra, desça até a parte inferior e escolha Criar regra para criar a regra e concluir esta etapa.

Etapa 2: Testar a nova regra

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. O cliente MQTT não retém nenhuma assinatura ou logs de mensagens se você deixar que ele vá para outra página no console.

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. Assine o tópico que sua regra publicará: device/data/temp.

    1. Em Assinaturas, escolha Assinar um tópico novamente e, em Tópico de assinatura, insira o tópico da mensagem republicada, device/data/temp.

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

    3. Escolha Assinar um tópico.

      Na coluna Assinaturas, em dispositivo/+/dado, device/data/temp é exibido.

  3. Publique uma mensagem no tópico de entrada com um ID de dispositivo específico, device/22/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/22/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.

  4. Revise as mensagens enviadas.

    1. No cliente MQTT, em Assinaturas, há um ponto verde ao lado dos dois tópicos nos quais você se inscreveu anteriormente.

      Os pontos verdes indicam que uma ou mais mensagens novas foram recebidas desde a última vez que você as viu.

    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": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Em Assinaturas, escolha dispositivo/dados/temperatura para verificar se a carga útil da mensagem republicada tem a seguinte aparência:

      { "device_id": "22", "temperature": 28 }

      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 só funcionará se essa parte do tópico contiver somente caracteres numéricos.

  5. Se você perceber que a mensagem correta foi publicada no tópico dispositivo/dados/temporário, sua regra funcionou. Veja o que mais você pode aprender sobre a ação da regra de republicação na próxima seção.

    Se você não vê que a mensagem correta foi publicada nos tópicos dispositivo/+/dados ou dispositivo/dados/temp, confira as dicas de solução de problemas.

Solução de problemas da regra de republicação de mensagens

Aqui estão algumas objetos para verificar caso você 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 você se inscreveu no 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.

  • Você não vê sua mensagem republicada no cliente MQTT

    Para que sua regra funcione, ela deve ter a política correta que a autorize a receber e republicar uma mensagem e 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 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 3: Revisar os resultados e as próximas etapas

Neste tutorial
  • Você usou uma consulta SQL simples e algumas funções em uma instrução de consulta de regra para produzir uma nova mensagem MQTT.

  • Você criou uma regra que republicou essa nova mensagem.

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

Próximas etapas

Depois de republicar algumas mensagens com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta a mensagem republicada. Aqui estão algumas ideias para você começar.

  • Altere o device_id no tópico da mensagem de entrada e observe o efeito na carga útil da mensagem republicada.

  • Altere os campos selecionados na instrução de consulta de regras e observe o efeito na carga útil da mensagem republicada.

  • Experimente o próximo tutorial desta série e aprenda como Tutorial:r Como enviar uma notificação do Amazon SNS.

A ação de regra Republicar usada neste tutorial também pode ajudá-lo a depurar instruções de consulta de regras. Por exemplo, você pode adicionar essa ação a uma regra para ver como sua instrução de consulta de regra está formatando os dados usados por suas ações de regra.