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

Este tutorial demonstra como criar uma AWS IoT regra que publica uma MQTT mensagem quando uma MQTT mensagem 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 da MQTT mensagem.

O que você aprenderá neste tutorial:
  • Como usar SQL consultas e funções simples em uma declaração de consulta de regra

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

Este tutorial leva cerca de 30 minutos para ser concluído.

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

Revise MQTT os tópicos e AWS IoT as regras

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

MQTTprotocolo

O MQTT protocolo 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 AWS IoT regras recebe MQTT mensagens 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 AWS IoT regras recebe uma MQTT mensagem, esses elementos agem na mensagem da seguinte maneira.

  • Declaração de consulta de regra

    A instrução de consulta da regra descreve os MQTT tópicos a serem usados, interpreta os dados da carga útil da mensagem e formata os dados conforme descrito por uma SQL instrução semelhante às instruções usadas por bancos de dados popularesSQL. 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 Nova publicação regra, que publica o resultado da instrução de consulta como uma MQTT mensagem 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 device/device_id/data MQTT tópicos 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 temperature valores device_id e como uma nova MQTT mensagem com o device/data/temp tópico.

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

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

A regra pega o temperature valor da carga da mensagem e o device_id do tópico e os republica como uma MQTT mensagem com o device/data/temp tópico e uma carga útil da 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 republique 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 Usando a SQL versão, 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:

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

      • 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 MQTT tópico 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 MQTT cliente para publicar e assinar as MQTT mensagens usadas por essa regra.

Abra o MQTTcliente no AWS IoT console em uma nova janela. Isso permitirá que você edite a regra sem perder a configuração do seu MQTT cliente. O MQTT cliente não retém nenhuma assinatura ou registro de mensagens se você deixar que ele vá para outra página no console.

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

    1. No MQTT cliente, em Assinaturas, escolha Inscrever-se em 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 em MQTT tópicos que contenham caracteres curinga.

    1. No MQTT cliente, em Assinaturas, escolha Publicar no 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 MQTT mensagem, escolha Publicar no tópico.

  4. Revise as mensagens enviadas.

    1. No MQTT cliente, 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 MQTT cliente

    Toda vez que você publica sua mensagem de entrada no device/22/data tópico, essa mensagem deve aparecer no MQTT cliente se você se inscreveu no filtro de device/+/data tópicos 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 MQTT cliente, em Assinaturas, escolha dispositivo/+/data, 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 MQTT cliente e a regra que você criou

      O console no qual você está executando o MQTT cliente deve estar na mesma AWS região 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 de tópico na FROM cláusula 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 MQTT cliente. 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 SELECT instrução.

      Verifique a ortografia do temperature campo na instrução de consulta da regra com a da carga útil da mensagem no MQTT cliente. 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 JSON documento na carga da mensagem está formatado corretamente. Se houver JSON 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ê se inscreveu 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 SQL consulta simples e algumas funções em uma instrução de consulta de regra para produzir uma nova MQTT mensagem.

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

  • Você usou o MQTT cliente 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.

  • Mude o device_id no tópico da mensagem de entrada e observe o efeito na carga 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: Enviando uma SNS notificação da Amazon.

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.