

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

# Reter o estado do dispositivo enquanto o dispositivo está off-line com as sombras do dispositivo
<a name="iot-shadows-tutorial"></a>

Esses tutoriais mostram como usar o serviço AWS IoT Device Shadow para armazenar e atualizar as informações de estado de um dispositivo. O documento Shadow, que é um documento JSON, mostra a alteração no estado do dispositivo com base nas mensagens publicadas por um dispositivo, aplicativo local ou serviço. Neste tutorial, o documento Shadow mostra a mudança na cor de uma lâmpada. Esses tutoriais também mostram como a sombra armazena essas informações mesmo quando o dispositivo está desconectado da Internet e passa as informações de estado mais recentes para o dispositivo quando ele volta a ficar on-line e solicita essas informações.

Recomendamos que você veja esses tutoriais na ordem em que são mostrados aqui, começando com os recursos AWS IoT que você precisa criar e a configuração de hardware necessária, o que também ajuda você a aprender os conceitos de forma incremental. Esses tutoriais mostram como configurar e conectar um dispositivo Raspberry Pi para uso com. AWS IoT Se você não tiver o hardware necessário, poderá seguir esses tutoriais adaptando-os a um dispositivo de sua escolha ou [criando um dispositivo virtual com o Amazon EC2](creating-a-virtual-thing.md).

**Visão geral do cenário do tutorial**  
O cenário desses tutoriais é um aplicativo ou serviço local que altera a cor de uma lâmpada e publica seus dados em tópicos de sombra reservados. Esses tutoriais são semelhantes à funcionalidade Sombra do Dispositivo descrita no [tutorial interativo de introdução](interactive-demo.md) e são implementados em um dispositivo Raspberry Pi. Os tutoriais nesta seção concentram-se em uma única sombra clássica e mostram como você pode acomodar sombras nomeadas ou vários dispositivos.

Os tutoriais a seguir ajudarão você a aprender como usar o serviço AWS IoT Device Shadow.
+ 

**[Tutorial: preparando seu Raspberry Pi para executar o aplicativo de sombra](create-resources-shadow.md)**  
Este tutorial mostra como configurar um dispositivo Raspberry Pi para conexão com o. AWS IoT Você também criará um documento de AWS IoT política e um recurso, baixará os certificados e anexará a política a esse recurso. Este tutorial leva cerca de 30 minutos para ser concluído.
+ 

**[Tutorial: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo](lightbulb-shadow-application.md)**  
Este tutorial mostra como instalar as ferramentas e o software necessários e o AWS IoT Device SDK para Python e, em seguida, executar o aplicativo shadow de amostra. Este tutorial se baseia nos conceitos apresentados em [Conectar um Raspberry Pi ou outro dispositivo](connecting-to-existing-device.md) e leva 20 minutos para ser concluído.
+ 

**[Tutorial: interagindo com a Sombra do Dispositivo usando o aplicativo de amostra e o cliente de teste MQTT](interact-lights-device-shadows.md)**  
Este tutorial mostra como você usa o aplicativo e o **AWS IoT console** de `shadow.py` amostra para observar a interação entre AWS IoT Device Shadows e as mudanças de estado da lâmpada. O tutorial também mostra como enviar mensagens MQTT para os tópicos reservados da Sombra do Dispositivo. A conclusão deste tutorial pode levar cerca de 45 minutos.

**AWS IoT Visão geral do Device Shadow**  
Um Device Shadow é uma representação virtual persistente de um dispositivo gerenciado por um [recurso](iot-thing-management.md) criado por você no AWS IoT registro. O documento Shadow é um documento JSON ou de JavaScript notação usado para armazenar e recuperar as informações do estado atual de um dispositivo. Você pode usar a sombra para obter e definir o estado de um dispositivo por meio de tópicos do MQTT ou HTTP REST APIs, independentemente de o dispositivo estar conectado à Internet.

Um documento de sombra contém uma `state` propriedade que descreve esses aspectos do estado do dispositivo.
+ `desired`: Os aplicativos especificam os estados desejados das propriedades do dispositivo atualizando o objeto `desired`.
+ `reported`: Os dispositivos relatam seu estado atual no objeto `reported`.
+ `delta`: AWS IoT relata diferenças entre o estado desejado e o estado relatado no `delta` objeto.

Veja um exemplo de documento do estado de sombra.

```
{
  "state": {
    "desired": {
      "color": "green"
      },
    "reported": {
      "color": "blue"
      },
    "delta": {
      "color": "green"
      }
   }
}
```

Para atualizar o documento Shadow de um dispositivo, você pode usar os [tópicos reservados do MQTT](reserved-topics.md#reserved-topics-shadow), o [Device Shadow REST APIs](device-shadow-rest-api.md) que suporta o`GET`,`UPDATE`, e `DELETE` as operações com HTTP e a [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html).

No exemplo anterior, digamos que você queira alterar a cor `desired` para `yellow`. Para fazer isso, envie uma solicitação para a API [UpdateThingShadow](device-shadow-rest-api.md#API_UpdateThingShadow) ou publique uma mensagem no tópico [Atualizar](device-shadow-mqtt.md#update-pub-sub-topic), `$aws/things/THING_NAME/shadow/update`.

```
{
  "state": {
    "desired": {
      "color": yellow
    }
  }
}
```

As atualizações afetam apenas os campos especificados na solicitação. Depois de atualizar com sucesso o Device Shadow, AWS IoT publica o novo `desired` estado no `delta` tópico,`$aws/things/THING_NAME/shadow/delta`. O documento de sombra, nesse caso, tem a seguinte aparência:

```
{
  "state": {
    "desired": {
      "color": yellow
    },
    "reported": {
      "color": green
    },
    "delta": {
      "color": yellow
      }
  }
}
```

O novo estado é então reportado ao AWS IoT Device Shadow usando o `Update` tópico `$aws/things/THING_NAME/shadow/update` com a seguinte mensagem JSON: 

```
{
  "state": {
    "reported": {
      "color": yellow
    }
  }
}
```

Se você quiser obter as informações do estado atual, envie uma solicitação para a API [GetThingShadow](device-shadow-rest-api.md#API_GetThingShadow) ou publique uma mensagem MQTT no tópico [Obter](device-shadow-mqtt.md#get-pub-sub-topic), `$aws/things/THING_NAME/shadow/get`.

Para obter mais informações sobre como usar o serviço de sombra do dispositivo, consulte [AWS IoT Serviço Device Shadow](iot-device-shadows.md).

Para obter mais informações sobre o uso de sombra do dispositivo em dispositivos, aplicativos e serviços, consulte [Usar sombras em dispositivos](device-shadow-comms-device.md) e [Usar sombras em aplicativos e serviços](device-shadow-comms-app.md).

Para obter informações sobre como interagir com AWS IoT sombras, consulte. [Interagir com sombras](device-shadow-data-flow.md)

Para obter informações sobre os tópicos reservados do MQTT e o HTTP REST APIs, consulte [Tópicos MQTT da Sombra do Dispositivo](device-shadow-mqtt.md) e. [API REST da Sombra do Dispositivo](device-shadow-rest-api.md)

# Tutorial: preparando seu Raspberry Pi para executar o aplicativo de sombra
<a name="create-resources-shadow"></a>

Este tutorial demonstra como instalar e configurar um dispositivo Raspberry Pi e criar os AWS IoT recursos necessários para um dispositivo se conectar e trocar mensagens MQTT.

**nota**  
Se estiver planejando [Criar um dispositivo virtual com o Amazon EC2](creating-a-virtual-thing.md), ignore esta página e avance para [Configurar o dispositivo](configure-device.md). Você criará estes recursos quando criar suo objeto virtual. Se você quiser usar um dispositivo diferente em vez do Raspberry Pi, tente seguir esses tutoriais adaptando-os a um dispositivo de sua escolha.

**Neste tutorial, você aprenderá:**
+ Configure um dispositivo Raspberry Pi e configure-o para uso com AWS IoT.
+ Crie um documento AWS IoT de política que autorize seu dispositivo a interagir com os AWS IoT serviços.
+ Crie um recurso de coisa nos certificados AWS IoT do dispositivo X.509 e, em seguida, anexe o documento de política.

  A objeto é a representação virtual de seu dispositivo no registro do AWS IoT . O certificado autentica seu dispositivo no AWS IoT Core, e o documento de política autoriza seu dispositivo a interagir com. AWS IoT

**Como executar este tutorial**  
Para executar o aplicativo de exemplo das Sombras do Dispositivo `shadow.py`, você precisará de um dispositivo Raspberry Pi que se conecte ao AWS IoT. Recomendamos que você siga este tutorial na ordem apresentada aqui, começando com a configuração do Raspberry Pi e seus acessórios e, em seguida, criando uma política e anexando a política a um recurso criado por você. Em seguida, você pode seguir este tutorial usando a interface gráfica do usuário (GUI) suportada pelo Raspberry Pi para abrir o AWS IoT console no navegador da web do dispositivo, o que também facilita o download dos certificados diretamente no Raspberry Pi para conexão. AWS IoT

**Antes de começar este tutorial, verifique se você tem o seguinte:**
+ Um Conta da AWS. Se você não possuir uma, conclua as etapas descritas em [Configurar Conta da AWS](setting-up.md) antes de continuar. Você precisará do seu AWS IoT console Conta da AWS e do console para concluir este tutorial. 
+ O Raspberry Pi e seus acessórios necessários. Você precisará de:
  + Um [Modelo B do Raspberry Pi 3](https://www.raspberrypi.com/products/) ou modelo mais recente. Este tutorial pode funcionar em versões anteriores do Raspberry Pi, mas não o testamos.
  + [Raspberry Pi OS (32 bits)](https://www.raspberrypi.com/software/operating-systems/) ou uma versão posterior. Recomendamos usar a versão mais recente do SO do Raspberry Pi. Versões anteriores do SO podem funcionar, mas nós não as testamos.
  + Uma conexão Ethernet ou Wi-Fi.
  + Teclado, mouse, monitor, cabos e fontes de alimentação.

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

## Etapa 1: instalar e configurar o dispositivo Raspberry Pi
<a name="setup-device-shadow"></a>

Nesta seção, configuraremos um dispositivo Raspberry Pi para uso com AWS IoT.

**Importante**  
Adaptar estas instruções a outros dispositivos e sistemas operacionais pode ser um desafio. Você precisará conhecer seu dispositivo o bastante para interpretar estas instruções e aplicá-las ao seu dispositivo. Se encontrar dificuldades, você pode tentar uma das outras opções de dispositivo como alternativa, como [Criar um dispositivo virtual com o Amazon EC2](creating-a-virtual-thing.md) ou [Use seu PC Windows ou Linux ou Mac como um AWS IoT dispositivo](using-laptop-as-device.md). 

Você precisará configurar seu Raspberry Pi para que ele possa iniciar o sistema operacional (SO), conectar-se à Internet e permitir que você interaja com ele em uma interface de linha de comando. Você também pode usar a interface gráfica do usuário (GUI) compatível com o Raspberry Pi para abrir o AWS IoT console e executar o restante deste tutorial.

**Para configurar o Raspberry Pi**

1. Insira o cartão SD no slot para cartão MicroSD do Raspberry Pi. Alguns cartões SD vêm pré-carregados com um gerenciador de instalação que exibe um menu para instalar o sistema operacional após inicializar a placa. Você também pode usar o Raspberry Pi Imager para instalar o sistema operacional em sua placa.

1. Conecte uma TV ou monitor HDMI ao cabo HDMI que se conecta à porta HDMI do Raspberry Pi. 

1. Conecte o teclado e o mouse às portas USB do Raspberry Pi e, em seguida, conecte o adaptador de alimentação para inicializar a placa.

Após a inicialização do Raspberry Pi, se o cartão SD vier pré-carregado com o gerenciador de instalação, aparecerá um menu para instalar o sistema operacional. Se tiver problemas para instalar o sistema operacional, você pode tentar as etapas a seguir. Para obter mais informações sobre como configurar o Raspberry Pi, consulte [Configurando o Raspberry Pi](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/).

**Se você estiver com problemas para configurar o Raspberry Pi:**
+ Verifique se você inseriu o cartão SD antes de inicializar a placa. Se você conectar o cartão SD após inicializar a placa, o menu de instalação pode não aparecer.
+ Verifique se a TV ou o monitor estão ligados e se a entrada correta está selecionada.
+ Verifique se você está usando um software compatível com Raspberry Pi.

Depois de instalar e configurar o sistema operacional Raspberry Pi, abra o navegador da Web do Raspberry Pi e navegue até o AWS IoT Core console para continuar as demais etapas deste tutorial.

Se você conseguir abrir o AWS IoT Core console, seu Raspberry Pi está pronto e você pode continuar[Tutorial: Provisionando seu dispositivo em AWS IoT](shadow-provision-cloud.md).

Se você estiver com problemas ou precisar de ajuda adicional, consulte [Como obter ajuda para seu Raspberry Pi](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/5).

# Tutorial: Provisionando seu dispositivo em AWS IoT
<a name="shadow-provision-cloud"></a>

Esta seção cria os AWS IoT Core recursos que seu tutorial usará.

**Topics**
+ [Etapa 1: Criar uma AWS IoT política para o Device Shadow](#create-policy-shadow)
+ [Etapa 2: criar um recurso de objeto e vincular a política ao objeto](#create-thing-shadow)
+ [Etapa 3: revisar os resultados e as próximas etapas](#resources-shadow-review)

## Etapa 1: Criar uma AWS IoT política para o Device Shadow
<a name="create-policy-shadow"></a>

Certificados X.509 com os quais autenticam seu dispositivo. AWS IoT Core AWS IoT as políticas são anexadas ao certificado que permite ao dispositivo realizar AWS IoT operações, como assinar ou publicar tópicos reservados do MQTT usados pelo serviço Device Shadow. Seu dispositivo apresenta seu certificado quando se conecta e envia mensagens para AWS IoT Core o. 

Siga as etapas para criar uma política que permita que o dispositivo execute as operações do AWS IoT que são necessárias para executar o programa de exemplo. Recomendamos que você crie uma política que conceda apenas as permissões necessárias para executar a tarefa. Você cria a AWS IoT política primeiro e depois a anexa ao certificado do dispositivo que você criará posteriormente.

**Para criar uma AWS IoT política**

1. No menu à esquerda, escolha **Seguro** e escolha **Políticas**. Se sua conta tiver políticas existentes, escolha **Criar**, caso contrário, na página **Você ainda não tem uma política**, escolha **Criar uma política**.

1. Na página **Criar uma política**:

   1. No campo **Nome**, insira um nome para a política (por exemplo, **My\$1Device\$1Shadow\$1policy**). Não use informações de identificação pessoal nos nomes de política.

   1. No documento de política, você descreve ações de conexão, assinatura, recebimento e publicação que dão permissão ao dispositivo para publicar e assinar os tópicos reservados do MQTT.

      Copie o exemplo de política a seguir e cole-o em seu documento de política. `thingname`Substitua pelo nome da coisa que você criará (por exemplo,`My_light_bulb`), `region` pela AWS IoT região em que você está usando os serviços e `account` pelo seu Conta da AWS número. Para obter mais informações sobre AWS IoT políticas, consulte[AWS IoT Core políticas](iot-policies.md).  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": "iot:Connect",
                  "Resource": "arn:aws:iot:us-east-1:123456789012:client/test-*"
              }
          ]
      }
      ```

## Etapa 2: criar um recurso de objeto e vincular a política ao objeto
<a name="create-thing-shadow"></a>

Os dispositivos conectados AWS IoT podem ser representados por *recursos de coisas* no AWS IoT registro. Um *recurso de objeto* representa um dispositivo específico ou uma entidade lógica, como a lâmpada deste tutorial.

Para aprender a criar algo em AWS IoT, siga as etapas descritas em[Criar um objeto](create-iot-resources.md#create-aws-thing). Aqui estão algumas objetos importantes a serem observadas ao seguir as etapas desse tutorial:

1. Escolha **Criar uma único objeto** e, no campo **Nome**, insira um nome para o objeto que seja igual ao `thingname` (por exemplo, `My_light_bulb`) que você especificou quando criou a política anteriormente.

   Não é possível alterar um nome de objeto após sua criação. Se você deu a ele um nome diferente de `thingname`, crie um objeto nova com o nome como `thingname` e exclua o objeto antiga.
**nota**  
Não use informações de identificação pessoal nos nomes de objetos. O nome do objeto pode surgir em comunicações e relatórios não criptografados.

1. Recomendamos que você baixe cada um dos arquivos de certificado na página **Certificado criado\$1** em um local onde você possa encontrá-los facilmente. Você precisará instalar esses arquivos para executar o aplicativo de amostra.

   Recomendamos que você baixe os arquivos em um subdiretório `certs` em seu diretório `home` no Raspberry Pi e nomeie cada um deles com um nome mais simples, conforme sugerido na tabela a seguir.  
**Nomes de arquivos de certificado**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/shadow-provision-cloud.html)

1. Depois de ativar o certificado para habilitar conexões AWS IoT, escolha **Anexar uma política** e certifique-se de anexar a política que você criou anteriormente (por exemplo,**My\$1Device\$1Shadow\$1policy**) à coisa.

   Depois de criar uma coisa, você pode ver seu recurso exibido na lista de itens no AWS IoT console.

## Etapa 3: revisar os resultados e as próximas etapas
<a name="resources-shadow-review"></a>

**Neste tutorial, você aprendeu a:**
+ Instalar e configurar o dispositivo Raspberry Pi.
+ Crie um documento AWS IoT de política que autorize seu dispositivo a interagir com os AWS IoT serviços.
+ Crie um recurso de objeto e um certificado de dispositivo X.509 associado e anexe o documento de política a ele.

**Próximas etapas**  
Agora você pode instalar o SDK do AWS IoT dispositivo para Python, executar `shadow.py` o aplicativo de amostra e usar Device Shadows para controlar o estado. Para obter mais informações sobre como executar este tutorial, consulte [Tutorial: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo](lightbulb-shadow-application.md).

# Tutorial: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo
<a name="lightbulb-shadow-application"></a>

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

**Neste tutorial, você aprenderá:**
+ Use o software instalado e o AWS IoT Device SDK for 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 dispositivo Raspberry Pi e criado uma AWS IoT política que dê ao dispositivo permissões para publicar e assinar os tópicos reservados do MQTT do serviço Device Shadow. Para obter mais informações, consulte [Tutorial: preparando seu Raspberry Pi para executar o aplicativo de sombra](create-resources-shadow.md).

Você também deve ter instalado o Git, o Python e o Device AWS IoT SDK for Python. Este tutorial se baseia nos conceitos apresentados no tutorial [Conectar um Raspberry Pi ou outro dispositivo](connecting-to-existing-device.md). 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`.

**Topics**
+ [Etapa 1: execute o aplicativo de exemplo shadow.py](#run-sample-application-shadows)
+ [Etapa 2: revise o aplicativo de amostra do SDK do dispositivo shadow.py](#review-shadow-sample-code)
+ [Etapa 3: solucionar problemas com o aplicativo de amostra `shadow.py`](#shadow-sample-app-troubleshoot)
+ [Etapa 4: revisar os resultados e as próximas etapas](#sample-app-shadow-review)

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

## Etapa 1: execute o aplicativo de exemplo shadow.py
<a name="run-sample-application-shadows"></a>

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 da AWS IoT coisa que você criou anteriormente em[Etapa 2: criar um recurso de objeto e vincular a política ao objeto](shadow-provision-cloud.md#create-thing-shadow). Para encontrar esse valor, no [AWS IoT console](https://console.aws.amazon.com/iot/home), escolha **Gerenciar** e, em seguida, escolha **Objetos**.  | 
| your-iot-endpoint |   O *your-iot-endpoint* valor tem um formato de:`endpoint_id-ats.iot.region.amazonaws.com`, por exemplo,`a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`. Para localizar este valor: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/lightbulb-shadow-application.html)  | 

**Instalar e executar o aplicativo de exemplo**

1. Navegue até o diretório do aplicativo de exemplo.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
   ```

1. Na janela da linha de comando, substitua *your-iot-endpoint* e *your-iot-thing-name* conforme indicado e execute esse 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
   ```

1. Observe que o aplicativo de exemplo:

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

   1. Assina eventos `Delta` e respostas `Update` e `Get`.

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

   1. 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`](#shadow-sample-app-troubleshoot). 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'.
```

Quando você publica essa solicitação de atualização, AWS IoT cria uma sombra clássica padrão para o recurso thing. Você pode observar a solicitação de atualização que você publicou nos `desired` valores `reported` e no AWS IoT console examinando o documento Shadow do recurso que você criou (por exemplo,`My_light_bulb`). Para ver a atualização no documento de sombra:

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

1. 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](interact-lights-device-shadows.md) conforme descrito na seção [Etapa 4: revisar os resultados e as próximas etapas](#sample-app-shadow-review) 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
<a name="review-shadow-sample-code"></a>

Esta seção analisa o aplicativo de amostra `shadow.py` do **AWS IoT Device SDK v2 para Python** usado neste tutorial. Aqui, analisaremos como ele se conecta AWS IoT Core usando o protocolo MQTT e MQTT over WSS. A biblioteca [AWS common runtime (AWS-CRT)](https://github.com/awslabs/aws-crt-python#aws-crt-python) fornece suporte ao protocolo de comunicação de baixo nível e está incluída no AWS IoT Device SDK v2 para Python.

Embora este tutorial use MQTT e MQTT sobre WSS, 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](http.md#codeexample) 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 [Escolher um protocolo de aplicativo para a comunicação do dispositivo](protocols.md#protocol-selection).

**MQTT**  
Os exemplos de chamada `shadow.py` `mtls_from_path` (mostrados aqui) no [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) para estabelecer conexão com o 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 AWS IoT endpoint 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 [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) 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 AWS assinatura usada pela autenticação Signature V4 e `credentials_provider` são AWS as credenciais 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](sdk-tutorials.md#sdk-tutorials-mqtt-review) e [MQTT](mqtt.md).

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](sdk-tutorials.md#sdk-tutorials-explore-sample)

## Etapa 3: solucionar problemas com o aplicativo de amostra `shadow.py`
<a name="shadow-sample-app-troubleshoot"></a>

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 IoT console**, escolha **Gerenciar** e, em seguida, escolha **Objetos**.

  1. Escolha o que você criou para seu aplicativo de amostra (por exemplo, **My\$1light\$1bulb**) 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 autenticam seu dispositivo com AWS IoT Core.

  Para verificar se o seu certificado está ativo:

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

  1. Escolha o que você criou para seu aplicativo de exemplo (por exemplo, **My\$1light\$1bulb**) e escolha **Segurança**.

  1. 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, AWS IoT as políticas permitem que o dispositivo realize AWS IoT operações, 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**.

  1. 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 AWS IoT política para o Device Shadow](shadow-provision-cloud.md#create-policy-shadow).

  Se você receber mensagens de erro que indicam problemas na conexão 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 AWS IoT recursos 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
<a name="sample-app-shadow-review"></a>

**Neste tutorial, você aprendeu a:**
+ Instale o software, as ferramentas e o AWS IoT Device SDK para Python 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 Device Shadows e observe a atualização do documento Shadow no AWS IoT console. 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](interact-lights-device-shadows.md).

# Tutorial: interagindo com a Sombra do Dispositivo usando o aplicativo de amostra e o cliente de teste MQTT
<a name="interact-lights-device-shadows"></a>

Para interagir com o aplicativo de amostra `shadow.py`, insira um valor no terminal para o valor `desired`. Por exemplo, você pode especificar cores que se assemelhem aos semáforos e AWS IoT respondam à solicitação e atualizem os valores relatados.

**Neste tutorial, você aprenderá:**
+ Usar o aplicativo de amostra `shadow.py` para especificar os estados desejados e atualizar o estado atual da sombra.
+ Editar o documento Shadow para observar os eventos delta e como o aplicativo de amostra `shadow.py` responde a eles.
+ Utilizar o cliente de teste MQTT para assinar tópicos de sombra e observar atualizações ao executar o programa de amostra.

**Antes de executar este tutorial, você precisa:**  
Configure seu Conta da AWS, configure seu dispositivo Raspberry Pi e crie uma AWS IoT coisa e uma política. Você também deve ter instalado o software necessário, o Device SDK, os arquivos de certificado e executado o programa de amostra no terminal. Para obter mais informações, consulte os tutoriais anteriores [Tutorial: preparando seu Raspberry Pi para executar o aplicativo de sombra](create-resources-shadow.md) e [Etapa 1: execute o aplicativo de exemplo shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows). Você deve concluir esses tutoriais, caso ainda não o tenha feito.

**Topics**
+ [Etapa 1: atualizar os valores desejados e relatados usando o aplicativo de amostra `shadow.py`](#update-desired-shadow-sample)
+ [Etapa 2: exibir mensagens do aplicativo de amostra `shadow.py` no cliente de teste MQTT](#shadow-sample-view-msg)
+ [Etapa 3: solucionar problemas com as interações da Sombra do Dispositivo](#shadow-observe-messages-troubleshoot)
+ [Etapa 4: revisar os resultados e as próximas etapas](#sample-shadow-review)

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

## Etapa 1: atualizar os valores desejados e relatados usando o aplicativo de amostra `shadow.py`
<a name="update-desired-shadow-sample"></a>

No tutorial anterior[Etapa 1: execute o aplicativo de exemplo shadow.py](lightbulb-shadow-application.md#run-sample-application-shadows), você aprendeu a observar uma mensagem publicada no documento Shadow no AWS IoT console ao inserir o valor desejado, conforme descrito na seção[Tutorial: instalando o Device SDK e executando o aplicativo de amostra para Sombras do Dispositivo](lightbulb-shadow-application.md).

No exemplo anterior, definimos a cor desejada como `yellow`. Depois de inserir cada valor, o terminal solicita que você insira outro valor `desired`. Se você inserir novamente o mesmo valor (`yellow`), o aplicativo reconhecerá isso e solicitará que você insira um novo valor `desired`.

```
Enter desired value:
yellow
Local value is already 'yellow'.
Enter desired value:
```

Agora, digamos que você insira a cor`green`. AWS IoT responde à solicitação e atualiza o `reported` valor para`green`. É assim que a atualização acontece quando o estado `desired` é diferente do estado `reported`, causando um delta.

**Como o aplicativo de amostra `shadow.py` simula as interações da Sombra do Dispositivo:**

1. Insira um valor `desired` (digamos `yellow`) no terminal para publicar o estado desejado.

1. Como o estado `desired` é diferente do estado `reported` (digamos, a cor `green`), ocorre um delta e o aplicativo que está inscrito no delta recebe essa mensagem.

1. O aplicativo responde à mensagem e atualiza seu estado para o valor `desired`, `yellow`.

1. O aplicativo então publica uma mensagem de atualização com o novo valor relatado do estado do dispositivo, `yellow`.

A seguir, são mostradas as mensagens exibidas no terminal que mostram como a solicitação de atualização é publicada.

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

No AWS IoT console, o documento Shadow reflete o valor atualizado `green` para os `desired` campos `reported` e, e o número da versão é incrementado em 1. Por exemplo, se o número da versão anterior foi exibido como 10, o número da versão atual será exibido como 11.

**nota**  
A exclusão de uma sombra não redefine o número da versão para 0. Você verá que a versão sombra é incrementada em 1 quando você publica uma solicitação de atualização ou cria outra sombra com o mesmo nome.

**Edite o documento Shadow para observar eventos delta**  
O aplicativo de amostra `shadow.py` também está inscrito em eventos `delta` e responde quando há uma alteração no valor `desired`. Por exemplo, você pode alterar o valor `desired` para a cor `red`. Para fazer isso, no AWS IoT console, edite o documento Shadow clicando em **Editar** e defina o `desired` valor como `red` no JSON, mantendo o `reported` valor como`green`. Antes de salvar as alterações, mantenha o terminal do Raspberry Pi aberto, pois você verá as mensagens exibidas no terminal quando a alteração ocorrer.

```
{
"desired": {
  "welcome": "aws-iot",
  "color": "red"
},
"reported": {
  "welcome": "aws-iot",
  "color": "green"
}
}
```

Depois de salvar o novo valor, o aplicativo de amostra `shadow.py` responde a essa alteração e exibe mensagens no terminal indicando o delta. Em seguida, você deverá ver as seguintes mensagens aparecerem abaixo da solicitação para inserir o valor `desired`.

```
Enter desired value:
Received shadow delta event.
Delta reports that desired value is 'red'. Changing local value...
Changed local shadow value to 'red'.
Updating reported shadow value to 'red'...
Finished updating reported shadow value to 'red'.
Enter desired value:
Update request published.
Finished updating reported shadow value to 'red'.
```

## Etapa 2: exibir mensagens do aplicativo de amostra `shadow.py` no cliente de teste MQTT
<a name="shadow-sample-view-msg"></a>

Você pode usar o **cliente de teste do MQTT** no **AWS IoT console** para monitorar as mensagens do MQTT que são passadas no seu Conta da AWS. Ao assinar tópicos MQTT reservados usados ​​pelo serviço Sombra do Dispositivo, você pode observar as mensagens recebidas pelos tópicos ao executar o aplicativo de amostra.

Se você ainda não usou o cliente de teste MQTT, pode revisar [Exibir mensagens MQTT com o cliente AWS IoT MQTT](view-mqtt-messages.md). Isso ajudará você a aprender a usar o **cliente de teste MQTT** no **console do AWS IoT ** para visualizar as mensagens MQTT à medida que elas passam pelo agente de mensagens.

1. 

**Abra o cliente de teste MQTT**

   Abra o [cliente de teste do MQTT no console do AWS IoT](https://console.aws.amazon.com//iot/home#/test) em uma nova janela para que você possa observar as mensagens recebidas pelos tópicos do MQTT sem perder a configuração do seu cliente de teste do MQTT. O cliente de teste MQTT não retém assinaturas ou logs de mensagens se você deixá-lo para ir para outra página no console. Nesta seção do tutorial, você pode abrir o documento Shadow do seu AWS IoT produto e o cliente de teste MQTT em janelas separadas para observar mais facilmente a interação com o Device Shadows.

1. 

**Assine os tópicos Shadow reservados do MQTT**

   Você pode usar o cliente de teste MQTT para inserir os nomes dos tópicos reservados do MQTT da Sombra do Dispositivo e se inscrever neles para receber atualizações ao executar o aplicativo de amostra `shadow.py`. Para se inscrever nos tópicos:

   1. No **cliente de teste MQTT** no **AWS IoT console**, escolha **Subscribe to a topic (Se inscreva em um tópico)**.

   1.  Na seção **Filtro de tópicos**, digite: **\$1aws/things/ /shadow/update/ \$1 *thingname***. Aqui, `thingname` é o nome do recurso de objeto que você criou anteriormente (por exemplo, `My_light_bulb`).

   1. Mantenha os valores padrão para as configurações adicionais e escolha **Inscrever-se**.

   Ao usar o caractere curinga **\$1** na assinatura do tópico, você pode se inscrever em vários tópicos do MQTT ao mesmo tempo e observar todas as mensagens trocadas entre o dispositivo e sua sombra em uma única janela. Para obter mais informações sobre os caracteres curinga e seu uso, consulte[Tópicos do MQTT](topics.md).

1. 

**Execute um programa de amostra `shadow.py` e observe as mensagens**

   Na janela de linha de comando do Raspberry Pi, se você desconectou o programa, execute o aplicativo de exemplo novamente e observe as mensagens no **cliente de teste MQTT** no **console AWS IoT **.

   1. Execute o comando a seguir para reiniciar o programa de amostra. *your-iot-endpoint*Substitua *your-iot-thing-name* e pelos nomes da AWS IoT coisa que você criou anteriormente (por exemplo,`My_light_bulb`) e pelo endpoint para interagir com o dispositivo. 

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
      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
      ```

      Em seguida, o aplicativo de amostra `shadow.py` é executado e recupera o estado de sombra atual. Se você excluiu a sombra ou limpou os estados atuais, o programa define o valor atual como `off` e, em seguida, solicita que você insira um valor `desired`.

      ```
      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 document lacks 'color' property. Setting defaults...
      Changed local shadow value to 'off'.
      Updating reported shadow value to 'off'...
      Update request published.
      Finished updating reported shadow value to 'off'...
      Enter desired value:
      ```

      Por outro lado, se o programa estava em execução e você o reiniciou, você verá o valor de cor mais recente relatado no terminal. **No cliente de teste do MQTT, você verá uma atualização nos tópicos **\$1aws/things/ /shadow/get e *thingname* \$1aws/things/**/. *thingname* shadow/get/accepted**

      Suponha que a última cor relatada tenha sido `green`. A seguir, mostra o conteúdo do arquivo ***thingname*\$1aws/things/**/JSON. shadow/get/accepted

      ```
      {
      "state": {
        "desired": {
          "welcome": "aws-iot",
          "color": "green"
        },
        "reported": {
          "welcome": "aws-iot",
          "color": "green"
        }
      },
      "metadata": {
        "desired": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        },
        "reported": {
          "welcome": {
            "timestamp": 1620156892
          },
          "color": {
            "timestamp": 1620161643
          }
        }
      },
      "version": 10,
      "timestamp": 1620173908
      }
      ```

   1. Insira um valor `desired` no terminal, como `yellow`. O aplicativo de amostra `shadow.py` responde e exibe as seguintes mensagens no terminal que mostram a alteração no valor `reported` para `yellow`.

      ```
      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'.
      ```

      No **cliente de teste do MQTT** no **console da AWS IoT **, em **Assinaturas**, você vê que os seguintes tópicos receberam uma mensagem:
      + **\$1aws/things/ *thingname* /shadow/update**: mostra que os valores e os valores mudam para a cor. `desired` `updated` `yellow`
      + **\$1aws/things/*thingname*/shadow/update/accepted**: mostra os valores atuais dos `reported` estados `desired` e e seus metadados e informações de versão.
      + **\$1aws/things/*thingname*/shadow/update/documents**: mostra os valores anteriores e atuais dos `reported` estados e e seus metadados `desired` e informações de versão.

      Como o documento **\$1aws/things/*thingname*/shadow/update/documents**também contém informações contidas nos outros dois tópicos, podemos revisá-lo para ver as informações do estado. O estado anterior mostra o valor relatado definido como `green`, seus metadados e informações de versão e o estado atual que mostra o valor relatado atualizado para `yellow`.

      ```
      {
      "previous": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "green"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "green"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297898
            }
          }
        },
        "version": 10
      },
      "current": {
        "state": {
          "desired": {
            "welcome": "aws-iot",
            "color": "yellow"
          },
          "reported": {
            "welcome": "aws-iot",
            "color": "yellow"
          }
        },
        "metadata": {
          "desired": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          },
          "reported": {
            "welcome": {
              "timestamp": 1617297888
            },
            "color": {
              "timestamp": 1617297904
            }
          }
        },
        "version": 11
      },
      "timestamp": 1617297904
      }
      ```

   1. Agora, se você inserir outro valor `desired`, verá mais alterações nos valores `reported` e nas atualizações de mensagens recebidas por esses tópicos. O número da versão também aumenta em 1. Por exemplo, se você inserir o valor `green`, o estado anterior reportará o valor `yellow` e o estado atual relatará o valor `green`.

1. 

**Edite o documento de sombra para observar eventos delta**

   Para observar as alterações no tópico delta, edite o documento de sombra no console AWS IoT . Por exemplo, você pode alterar o valor `desired` para a cor `red`. Para fazer isso, no AWS IoT console, escolha **Editar** e defina o `desired` valor como vermelho no JSON, mantendo o `reported` valor definido como. `green` Antes de salvar a alteração, mantenha o terminal aberto, pois você verá a mensagem delta relatada no terminal.

   ```
   {
   "desired": {
     "welcome": "aws-iot",
     "color": "red"
   },
   "reported": {
     "welcome": "aws-iot",
     "color": "green"
   }
   }
   ```

   O aplicativo de amostra `shadow.py` responde a essa alteração e exibe mensagens no terminal indicando o delta. No cliente de teste MQTT, os tópicos `update` receberão uma mensagem mostrando as alterações nos valores `desired` e `reported`.

   Você também vê que o tópico **\$1aws/things//*thingname***recebeu uma mensagem. shadow/update/delta Para ver a mensagem, escolha esse tópico, que está listado em **Assinaturas**.

   ```
   {
   "version": 13,
   "timestamp": 1617318480,
   "state": {
     "color": "red"
   },
   "metadata": {
     "color": {
       "timestamp": 1617318480
     }
   }
   }
   ```

## Etapa 3: solucionar problemas com as interações da Sombra do Dispositivo
<a name="shadow-observe-messages-troubleshoot"></a>

Ao executar o aplicativo de amostra de sombra, você pode encontrar problemas ao observar as interações com o serviço Sombra do Dispositivo. 

Se o programa for executado com êxito e solicitar que você insira um valor `desired`, você poderá observar as interações da Sombra do Dispositivo usando o documento de sombra e o cliente de teste MQTT, conforme descrito anteriormente. No entanto, se você não conseguir ver as interações, aqui estão algumas objetos que você pode verificar:
+ 

**Verifique o nome da coisa e sua sombra no AWS IoT console**  
Se você não vê as mensagens no documento de sombra, revise o comando e verifique se ele corresponde ao nome do objeto no **AWS IoT console**. Você também pode verificar se tem uma sombra clássica escolhendo seu recurso e, em seguida, escolhendo **Sombras**. Este tutorial se concentra, principalmente, nas interações com a sombra clássica.

   Você também pode confirmar se o dispositivo usado está conectado à Internet. No **AWS IoT console**, escolha o que você criou anteriormente e, em seguida, escolha **Interagir**. Na página de detalhes do objeto, você deve ver uma mensagem aqui que diz: `This thing already appears to be connected.` 
+ 

**Verifique os tópicos reservados do MQTT nos quais você se inscreveu**  
Se você não vir as mensagens aparecendo no cliente de teste MQTT, verifique se os tópicos que você assinou estão formatados corretamente. Os tópicos do MQTT Device Shadow têm um formato **\$1aws/things/ *thingname* /shadow/** e podem ter`update`, ou `delete` segui-lo`get`, dependendo das ações que você deseja realizar na sombra. **Este tutorial usa o tópico **\$1aws/things/ *thingname* /shadow/ \$1**. Portanto, certifique-se de inseri-lo corretamente ao assinar o tópico na seção Filtro de tópicos do cliente de teste.**

  Ao inserir o nome do tópico, certifique-se de que *thingname* seja igual ao nome da AWS IoT coisa que você criou anteriormente. Você também pode se inscrever em tópicos adicionais do MQTT para ver se uma atualização foi realizada com sucesso. Por exemplo, você pode se inscrever no tópico **\$1aws/things/*thingname*/**para receber uma mensagem sempre que uma solicitação de atualização falhar, shadow/update/rejected para que você possa depurar problemas de conexão. Para obter mais informações sobre os tópicos reservados, consulte [Tópicos de sombra](reserved-topics.md#reserved-topics-shadow) e [Tópicos MQTT da Sombra do Dispositivo](device-shadow-mqtt.md).

## Etapa 4: revisar os resultados e as próximas etapas
<a name="sample-shadow-review"></a>

**Neste tutorial, você aprendeu a:**
+ Usar o aplicativo de amostra `shadow.py` para especificar os estados desejados e atualizar o estado atual da sombra.
+ Editar o documento Shadow para observar os eventos delta e como o aplicativo de amostra `shadow.py` responde a eles.
+ Utilizar o cliente de teste MQTT para assinar tópicos de sombra e observar atualizações ao executar o programa de amostra.

**Próximas etapas**  
Você pode assinar tópicos adicionais reservados do MQTT para observar atualizações no aplicativo da sombra. Por exemplo, se você se inscrever apenas no tópico **\$1aws/things/*thingname*/shadow/update/accepted**, verá somente as informações do estado atual quando uma atualização for realizada com sucesso.

Você também pode assinar tópicos de sombra adicionais para depurar problemas ou aprender mais sobre as interações da Sombra do Dispositivo e também depurar quaisquer problemas com as interações da Sombra do Dispositivo. Para obter mais informações, consulte [Tópicos de sombra](reserved-topics.md#reserved-topics-shadow) e [Tópicos MQTT da Sombra do Dispositivo](device-shadow-mqtt.md).

Você também pode optar por estender seu aplicativo usando sombras nomeadas ou usando hardware adicional conectado ao Raspberry Pi LEDs e observar alterações em seu estado usando mensagens enviadas do terminal.

Para obter mais informações sobre o serviço Sombra do Dispositivo e como usar o serviço em dispositivos, aplicativos e serviços, consulte [AWS IoT Serviço Device Shadow](iot-device-shadows.md), [Usar sombras em dispositivos](device-shadow-comms-device.md) e [Usar sombras em aplicativos e serviços](device-shadow-comms-app.md).