Tutorial: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo - 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: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo

Esta seção mostra como você pode instalar o software necessário e o SDK de dispositivo AWS IoT para Python e executar o aplicativo de exemplo shadow.py para editar o documento Shadow e controlar o estado do shadow.

Neste tutorial, você aprenderá:
  • Usar o software instalado e o SDK de dispositivo AWS IoT para Python para executar o aplicativo de amostra.

  • Saiba como inserir um valor usando o aplicativo de exemplo publica o valor desejado no console AWS IoT.

  • Revise o aplicativo de amostra shadow.py e como ele usa o protocolo MQTT para atualizar o estado da sombra.

Antes de executar este tutorial:

Você deve ter configurado seu Conta da AWS, configurado o seu dispositivo Raspberry Pi e criado um objeto AWS IoT e uma política que conceda ao dispositivo permissões para publicar e assinar os tópicos reservados MQTT do serviço Sombra do Dispositivo. Para obter mais informações, consulte Tutorial: preparando seu Raspberry Pi para executar o aplicativo de sombra.

Você também deve ter instalado o Git, o Python e o SDK de dispositivo AWS IoT para Python. Este tutorial se baseia nos conceitos apresentados no tutorial Conectar um Raspberry Pi ou outro dispositivo. Se você ainda não experimentou esse tutorial, recomendamos que siga as etapas descritas nesse tutorial para instalar os arquivos de certificado e o SDK do dispositivo e, em seguida, volte a este tutorial para executar o aplicativo de amostra shadow.py.

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

Etapa 1: execute o aplicativo de exemplo shadow.py

Antes de executar o aplicativo de amostra shadow.py, você precisará das informações a seguir, além dos nomes e do local dos arquivos de certificado instalados.

Valores de parâmetros de aplicação

Parâmetro

Onde encontrar o valor

your-iot-thing-name

Nome do objeto AWS IoT que você criou anteriormente em Etapa 2: criar um recurso de objeto e vincular a política ao objeto.

Para encontrar esse valor, no AWS IoTconsole, escolha Gerenciar e, em seguida, escolha Objetos.

your-iot-endpoint

O valor de your-iot-endpoint tem um formato de: endpoint_id-ats.iot.region.amazonaws.com, como, por exemplo, a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com. Para localizar este valor:

  1. No AWS IoTconsole, escolha Gerenciar e, em seguida, escolha Objetos.

  2. Selecione o objeto de IoT criada para seu dispositivo, My_light_bulb, que você usou anteriormente, e escolha Interagir. Na página de detalhes do objeto, seu endpoint é exibido na seção HTTPS.

Instalar e executar o aplicativo de amostra
  1. Navegue até o diretório do aplicativo de exemplo.

    cd ~/aws-iot-device-sdk-python-v2/samples
  2. Na janela de linha de comando, substitua your-iot-endpoint e your-iot-thing-name conforme indicado e execute o seguinte comando.

    python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name
  3. Observe que o aplicativo de exemplo:

    1. Conecta-se ao serviço IoT AWS da sua conta.

    2. Assina eventos Delta e respostas Update e Get.

    3. Solicita que você insira o valor desejado no terminal.

    4. Exibe uma saída semelhante à seguinte:

    Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to Delta events... Subscribing to Update responses... Subscribing to Get responses... Requesting current shadow state... Launching thread to read user input... Finished getting initial shadow state. Shadow contains reported value 'off'. Enter desired value:
nota

Se você estiver com problemas para executar o aplicativo de amostra shadow.py, examine Etapa 3: solucionar problemas com o aplicativo de amostra shadow.py. Para obter informações adicionais que possam ajudá-lo a corrigir o problema, adicione o parâmetro --verbosity debug à linha de comando para que o aplicativo de amostra exiba mensagens detalhadas sobre o que está fazendo.

Insira valores e observe as atualizações no documento de sombra

Você pode inserir valores no terminal para especificar o valor desired, o que também atualiza o valor reported. Digamos que você insira a cor yellow no terminal. O valor reported também é atualizado para a cor yellow. O seguinte mostra as mensagens exibidas no terminal:

Enter desired value: yellow Changed local shadow value to 'yellow'. Updating reported shadow value to 'yellow'... Update request published. Finished updating reported shadow value to 'yellow'.

Ao publicar essa solicitação de atualização, AWS IoT cria uma sombra clássica padrão para o recurso do objeto. É possível observar a solicitação de atualização publicada nos valores reported e desired no console AWS IoT examinando o documento de sombra do recurso de objeto que você criou (por exemplo, My_light_bulb). Para ver a atualização no documento de sombra:

  1. No console AWS IoT, escolha Gerenciar e, em seguida, escolha Objetos.

  2. Na lista de itens exibidos, selecione o que você criou, escolha Sombras e, em seguida, escolha Sombra clássica.

O documento de sombra deve ser semelhante ao seguinte, mostrando os valores reported e desired definidos para a cor yellow. Você vê esses valores na seção Estado da sombra do documento.

{ "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }

Você também vê uma seção de Metadados que contém as informações de data e hora e o número da versão da solicitação.

Você pode usar a versão do documento de estado para garantir que está atualizando a versão mais recente de um documento de sombra do dispositivo. Se você enviar outra solicitação de atualização, o número da versão será incrementado em 1. Ao fornecer uma versão com uma solicitação de atualização, o serviço rejeitará a solicitação com um código de resposta de conflito HTTP 409 se a versão atual do documento de estado não corresponder à versão fornecida.

{ "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } } }, "version": 10 }

Para saber mais sobre o documento de sombra e observar as alterações nas informações de estado, vá para o próximo tutorial Tutorial: interagindo com a Sombra do Dispositivo usando o aplicativo de amostra e o cliente de teste MQTT conforme descrito na seção Etapa 4: revisar os resultados e as próximas etapas deste tutorial. Opcionalmente, você também pode aprender sobre o código de amostra shadow.py e como ele usa o protocolo MQTT na seção a seguir.

Etapa 2: revise o aplicativo de amostra do SDK do dispositivo shadow.py

Esta seção analisa o aplicativo de amostra shadow.py do AWS IoT Device SDK v2 para Python usado neste tutorial. Aqui, veremos como ele se conecta em AWS IoT Core usando o protocolo MQTT e MQTT sobre WSS. A biblioteca AWS common runtime (AWS-CRT) fornece suporte ao protocolo de comunicação de baixo nível e está incluída no Device SDK v2 AWS IoT para Python.

Embora este tutorial use MQTT e MQTT sobre WSS, o AWS IoT oferece suporte a dispositivos que publicam solicitações HTTPS. Para ver um exemplo de um programa em Python que envia uma mensagem HTTP de um dispositivo, consulte o exemplo de código HTTPS usando a biblioteca do Python requests.

Para obter informações sobre como você pode tomar uma decisão informada sobre qual protocolo usar para as comunicações do seu dispositivo, consulte Escolhendo um protocolo de aplicativo para a comunicação do seu dispositivo.

MQTT

As chamadas shadow.py de amostra mtls_from_path (mostradas aqui) em mqtt_connection_builder para estabelecer uma conexão com AWS IoT Core usando o protocolo MQTT. O mtls_from_path usa certificados X.509 e TLS v1.2 para autenticar o dispositivo. A biblioteca AWS-CRT manipula os detalhes de nível inferior dessa conexão.

mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
  • endpoint é o endpoint AWS IoT que você transmitiu pela linha de comando e client_id é o ID que identifica exclusivamente esse dispositivo no Região da AWS.

  • cert_filepath, pri_key_filepath, e ca_filepath são os caminhos para os arquivos de certificado e chave privada do dispositivo e para o arquivo CA raiz.

  • client_bootstrap é o objeto de runtime comum que manipula as atividades de comunicação por soquete e é instanciado antes da chamada para mqtt_connection_builder.mtls_from_path.

  • on_connection_interrupted e on_connection_resumed são funções de retorno de chamada para ligar quando a conexão do dispositivo é interrompida e retomada.

  • clean_session é iniciar uma sessão nova e persistente ou, se houver uma, reconectar-se a uma sessão existente. keep_alive_secs é o valor keep alive, em segundos, para enviar a solicitação CONNECT. Um ping será enviado automaticamente nesse intervalo. O servidor assume que a conexão será perdida se não receber um ping após 1,5 vezes esse valor.

A amostra shadow.py também chama websockets_with_default_aws_signing no mqtt_connection_builder para estabelecer uma conexão com AWS IoT Core usando o protocolo MQTT sobre WSS. MQTT sobre WSS também usa os mesmos parâmetros que MQTT e usa estes parâmetros adicionais:

  • region é a região de assinatura AWS usada pela autenticação Signature V4 e credentials_provider são as credenciais AWS fornecidas para uso na autenticação. A região é passada pela linha de comando e o objeto credentials_provider é instanciado logo antes da chamada para mqtt_connection_builder.websockets_with_default_aws_signing.

  • websocket_proxy_options são as opções de proxy HTTP, se estiver usando um host proxy. No aplicativo de amostra shadow.py, esse valor é instanciado logo antes da chamada para mqtt_connection_builder.websockets_with_default_aws_signing.

Inscreva-se em tópicos e eventos de sombra

A amostra shadow.py tenta estabelecer uma conexão e espera ser totalmente conectada. Se não estiver conectado, os comandos serão colocados na fila. Uma vez conectado, o exemplo assina eventos delta e atualiza e obtém mensagens, e publica mensagens com um nível de Qualidade de Serviço (QoS) de 1 (mqtt.QoS.AT_LEAST_ONCE).

Quando um dispositivo assina uma mensagem com QoS nível 1, o agente de mensagens salva as mensagens nas quais o dispositivo está inscrito até que elas possam ser enviadas ao dispositivo. O agente de mensagens reenvia as mensagens até receber uma resposta PUBACK do dispositivo.

Para obter mais informações sobre o protocolo MQTT, consulte Revisar o protocolo MQTT e MQTT.

Para obter mais informações sobre como MQTT, MQTT sobre WSS, sessões persistentes e níveis de QoS são usados neste tutorial, consulte. Revise o aplicativo de amostra do SDK do dispositivo pubsub.py

Etapa 3: solucionar problemas com o aplicativo de amostra shadow.py

Ao executar o aplicativo de amostra shadow.py, você deve ver algumas mensagens exibidas no terminal e uma solicitação para inserir um valor desired. Se o programa gerar um erro, para depurar o erro, você pode começar verificando se executou o comando correto para o seu sistema.

Em alguns casos, a mensagem de erro pode indicar problemas de conexão e ser semelhante a: Host name was invalid for dns resolution ou Connection was closed unexpectedly. Nesses casos, aqui estão algumas objetos que você pode verificar:

  • Verifique o endereço do endpoint no comando

    Revise o argumento endpoint no comando inserido para executar o aplicativo de amostra (por exemplo, a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com) e verifique esse valor no AWS IoT console.

    Para verificar se você usou o valor correto:

    1. No AWS IoTconsole, escolha Gerenciar e, em seguida, escolha Objetos.

    2. Escolha o que você criou para seu aplicativo de amostra (por exemplo, My_light_bulb) e escolha Interagir.

    Na página de detalhes do objeto, seu endpoint é exibido na seção HTTPS. Você também deve ver uma mensagem que diz: This thing already appears to be connected.

  • Verifique a ativação do certificado

    Os certificados são usados para autenticar o dispositivo com o AWS IoT Core.

    Para verificar se o seu certificado está ativo:

    1. No AWS IoTconsole, escolha Gerenciar e, em seguida, escolha Objetos.

    2. Escolha o que você criou para seu aplicativo de exemplo (por exemplo, My_light_bulb) e escolha Segurança.

    3. Selecione o certificado e, na página de detalhes do certificado, escolha Selecionar o certificado e, na página de detalhes do certificado, escolha Ações.

    Se na lista suspensa Ativar não estiver disponível e você só puder escolher Desativar, seu certificado estará ativo. Caso contrário, escolha Ativar e execute novamente o programa de amostra.

    Se o programa ainda não for executado, verifique os nomes dos arquivos do certificado na pasta certs.

  • Verifique a política anexada ao recurso do objeto

    Embora os certificados autentiquem seu dispositivo, as AWS IoT políticas permitem que o dispositivo realize operações AWS IoT, como assinar ou publicar tópicos reservados do MQTT.

    Para verificar se a política correta está anexada:

    1. Encontre o certificado conforme descrito anteriormente e escolha Políticas.

    2. Escolha a política exibida e verifique se ela descreve as ações connect, subscribe, receive e publish que dão permissão ao dispositivo para publicar e assinar os tópicos reservados do MQTT.

      Para obter um exemplo de política, consulte Etapa 1: criar uma política AWS IoT para a Sombra do Dispositivo.

    Se você receber mensagens de erro que indicam problemas na conexão ao AWS IoT, isso pode ser devido às permissões que você está usando para a política. Se for esse o caso, recomendamos que você comece com uma política que forneça acesso total aos recursos de AWS IoT e, em seguida, execute novamente o programa de amostra. Você pode editar a política atual ou escolher a política atual, escolher Desanexar e, em seguida, criar outra política que forneça acesso total e a anexe ao seu recurso. Posteriormente, você poderá restringir a política apenas às ações e políticas necessárias para executar o programa.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" } ] }
  • Verifique a instalação do SDK do seu dispositivo

    Se o programa ainda não for executado, você poderá reinstalar o Device SDK para garantir que a instalação do SDK esteja completa e correta.

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

Neste tutorial, você aprendeu a:
  • Instale o software, as ferramentas e o Device SDK para Python AWS IoT necessários.

  • Entenda como o aplicativo de amostra, a shadow.py, usa o protocolo MQTT para recuperar e atualizar o estado atual da sombra.

  • Execute o aplicativo de amostra para Sombras do Dispositivo e observe a atualização do documento Sombra no console AWS IoT. Você também aprendeu a solucionar quaisquer problemas e corrigir erros ao executar o programa.

Próximas etapas

Agora você pode executar o aplicativo de amostra shadow.py e usar as Sombras do Dispositivo para controlar o estado. Você pode observar as atualizações no documento Shadow no console AWS IoT e observar os eventos delta aos quais o aplicativo de amostra responde. Usando o cliente de teste MQTT, é possível assinar os tópicos de sombra reservados e observar as mensagens recebidas pelos tópicos ao executar o programa de amostra. Para obter mais informações sobre como executar este tutorial, consulte Tutorial: interagindo com a Sombra do Dispositivo usando o aplicativo de amostra e o cliente de teste MQTT.