

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

# Interaja com as sombras do dispositivo
<a name="interact-with-shadows"></a>

Os principais dispositivos do Greengrass podem interagir com as [sombras do dispositivo do AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) usando componentes. Uma *sombra* é um documento JSON que armazena as informações de estado atuais ou desejadas de uma coisa do AWS IoT. As sombras podem disponibilizar o estado de um dispositivo para outros AWS IoT Greengrass componentes, independentemente de o dispositivo estar conectado ao AWS IoT ou não. Cada dispositivo do AWS IoT tem sua própria sombra clássica sem nome. Também é possível criar várias sombras nomeadas para cada dispositivo. 

Dispositivos e serviços podem criar, atualizar e excluir sombras de nuvem usando o MQTT e os [tópicos MQTT reservados](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow), o HTTP usando a [API REST Device Shadow](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-rest-api.html), e o [AWS CLI para AWS IoT](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html).

O componente de [gerenciamento de sombras](shadow-manager-component.md) permite que seus componentes do Greengrass criem, atualizem e excluam sombras locais usando o [serviço paralelo local e os tópicos paralelos locais](ipc-local-shadows.md) de publicação/assinatura. O gerenciador de sombras também gerencia o armazenamento desses documentos paralelos locais em seu dispositivo principal e gerencia a sincronização das informações do estado da sombra com as sombras da nuvem.

Você também pode usar o componente gerenciador de sombras para gerenciar sombras locais para [dispositivos cliente](interact-with-local-iot-devices.md) que se conectam ao dispositivo principal. Para permitir que o shadow manager gerencie as sombras do dispositivo cliente, você configura o [componente de ponte MQTT](mqtt-bridge-component.md) para retransmitir mensagens entre o agente MQTT local e o serviço local de publicação/assinatura. Para obter mais informações, consulte [Interagir e sincronizar as sombras do dispositivo cliente](work-with-client-device-shadows.md).

Para obter mais informações sobre conceitos de sombra do dispositivo do AWS IoT, consulte [Serviço de sombra do dispositivo do AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) no *Guia do desenvolvedor do AWS IoT*.

**Topics**
+ [Interaja com sombras em componentes](interact-with-shadows-in-components.md)
+ [Sincronize sombras do dispositivo local com AWS IoT Core](sync-shadows-with-iot-core.md)

# Interaja com sombras em componentes
<a name="interact-with-shadows-in-components"></a>

Você pode desenvolver componentes personalizados, incluindo componentes da função do Lambda, que usam o serviço paralelo local para ler e modificar documentos paralelos locais e documentos paralelos do dispositivo cliente.

Os componentes personalizados interagem com o serviço paralelo local usando as bibliotecas AWS IoT Greengrass Core IPC no AWS IoT Device SDK. O componente do [gerenciador de sombras](shadow-manager-component.md) ativa o serviço paralelo local em seu dispositivo principal.

Para implantar o componente shadow manager em um dispositivo principal do Greengrass, [crie uma implantação](create-deployments.md) que inclua o `aws.greengrass.ShadowManager` componente.

**nota**  
Por padrão, a implantação do componente do gerenciador de sombras permite somente operações de sombra locais. AWS IoT Greengrass Para permitir a sincronização das informações do estado da sombra das sombras do dispositivo principal ou de quaisquer sombras dos dispositivos cliente com os documentos de sombra da nuvem correspondentes em AWS IoT Core, você deve criar uma atualização de configuração para o componente do gerenciador de sombras que inclua o `synchronize` parâmetro. Para obter mais informações, consulte [Sincronize sombras do dispositivo local com AWS IoT Core](sync-shadows-with-iot-core.md).

**Topics**
+ [Recupere e modifique estados de sombra](#interact-shadow-states)
+ [Reaja às mudanças do estado da sombra](#react-shadow-events)

## Recupere e modifique estados de sombra
<a name="interact-shadow-states"></a>

As operações paralelas do IPC recuperam e atualizam informações de estado em documentos paralelos locais. O componente do gerenciador de sombras gerencia o armazenamento desses documentos paralelos em seu dispositivo principal.

**Para modificar estados de sombra locais**

1. Adicione políticas de autorização à fórmula do seu componente personalizado para permitir que o componente receba mensagens sobre tópicos paralelos locais.

   Por exemplo, políticas de autorização, consulte [Exemplos de políticas de autorização local de IPC paralelo](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Use as operações de IPC de sombra para recuperar e modificar as informações do estado de sombra. Para obter mais informações sobre o uso de operações de IPC de sombra no código do componente, consulte[Interagir com sombras locais](ipc-local-shadows.md).

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que um dispositivo principal interaja com as sombras do dispositivo cliente, você também deve configurar e implantar o componente de ponte MQTT. Para obter mais informações, consulte [Habilitar o Gerenciador de sombras para comunicação com dispositivos cliente](work-with-client-device-shadows.md).

## Reaja às mudanças do estado da sombra
<a name="react-shadow-events"></a>

Os componentes do Greengrass usam a publish/subscribe interface local para se comunicar em um dispositivo principal. Para permitir que um componente personalizado reaja às mudanças do estado da sombra, você pode se inscrever nos publish/subscribe tópicos locais. Isso permite que o componente receba mensagens sobre os tópicos paralelos locais e, em seguida, aja de acordo com essas mensagens. 

Os tópicos paralelos locais usam o mesmo formato dos tópicos MQTT de sombra do AWS IoT dispositivo. Para obter mais informações sobre tópicos de sombra, consulte [Device Shadow MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html) no *Guia do desenvolvedor do AWS IoT *.

**Para reagir às mudanças locais do estado da sombra**

1. Adicione políticas de controle de acesso à fórmula do seu componente personalizado para permitir que o componente receba mensagens sobre tópicos paralelos locais.

   Por exemplo, políticas de autorização, consulte [Exemplos de políticas de autorização local de IPC paralelo](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Para iniciar uma ação personalizada em um componente, use as operações `SubscribeToTopic` IPC para assinar os tópicos paralelos nos quais você deseja receber mensagens. Para obter mais informações sobre o uso de operações publish/subscribe IPC locais no código do componente, consulte[Publicar/assinar mensagens locais](ipc-publish-subscribe.md).

1. Para invocar uma função Lambda, use a configuração da fonte de eventos para fornecer o nome do tópico paralelo e especificar que é um publish/subscribe tópico local. Para obter informações sobre a criação de componentes de funções do Lambda, consulte [Executar funções AWS Lambda.](run-lambda-functions.md).

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que um dispositivo principal interaja com as sombras do dispositivo cliente, você também deve configurar e implantar o componente de ponte MQTT. Para obter mais informações, consulte [Habilitar o Gerenciador de sombras para comunicação com dispositivos cliente](work-with-client-device-shadows.md).

# Sincronize sombras do dispositivo local com AWS IoT Core
<a name="sync-shadows-with-iot-core"></a>

O componente do gerenciador de sombras permite AWS IoT Greengrass sincronizar os estados de sombra do dispositivo local com AWS IoT Core o. Você deve modificar a configuração do componente do gerenciador de sombras para incluir o parâmetro de `synchronization` configuração e especificar os AWS IoT nomes dos dispositivos e as sombras que você deseja sincronizar. 

Quando você configura o Gerenciador de sombras para sincronizar sombras, ele sincroniza todas as alterações de estado das sombras especificadas, independentemente se as alterações são feitas em documentos de sombra locais ou na nuvem.

Você também pode especificar se o componente Gerenciador de sombras sincroniza as sombras em tempo real ou em um intervalo periódico. Por padrão, o componente do gerenciador de sombras sincroniza as sombras em tempo real, para que o dispositivo principal envie e receba atualizações de sombra de e para AWS IoT Core quando cada atualização ocorre. Você pode configurar intervalos periódicos para reduzir o uso e as cobranças de largura de banda.

**Topics**
+ [Pré-requisitos](#shadow-sync-prereqs)
+ [Configurar o componente Gerenciador de sombras](#configure-shadow-manager-for-sync)
+ [Sincronizar sombras locais](#sync-local-shadows)
+ [Comportamento de conflito na mesclagem de sombras](#shadow-merge-behavior)

## Pré-requisitos
<a name="shadow-sync-prereqs"></a>

Para sincronizar sombras locais com AWS IoT Core, você deve configurar a política do dispositivo principal AWS IoT do Greengrass para permitir as AWS IoT Core seguintes ações de política paralela.
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Para saber mais, consulte:
+ [AWS IoT Core ações políticas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) no *Guia do AWS IoT desenvolvedor*
+ [AWS IoT Política mínima para dispositivos AWS IoT Greengrass V2 principais](device-auth.md#greengrass-core-minimal-iot-policy)
+ [Atualizar a AWS IoT política de um dispositivo principal](device-auth.md#update-core-device-iot-policy)

## Configurar o componente Gerenciador de sombras
<a name="configure-shadow-manager-for-sync"></a>

O Gerenciador de sombras requer uma lista de mapeamentos de nomes de sombra para sincronizar as informações de estado das sombras dos documentos de sombra locais com os documentos de sombra em nuvem no AWS IoT Core.

Para sincronizar os estados das sombras, [crie uma implantação](create-deployments.md) que inclua o componente `aws.greengrass.ShadowManager` e especifique as sombras que você deseja sincronizar no parâmetro `synchronize` na configuração do Gerenciador de sombras na implantação.

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que um dispositivo principal interaja com as sombras do dispositivo cliente, você também deve configurar e implantar o componente de ponte MQTT. Para obter mais informações, consulte [Habilitar o Gerenciador de sombras para comunicação com dispositivos cliente](work-with-client-device-shadows.md).

O exemplo de atualização de configuração a seguir instrui o componente do gerenciador de sombras a sincronizar as seguintes sombras com: AWS IoT Core
+ A sombra clássica para o dispositivo principal 
+ O nome `MyCoreShadow` do dispositivo principal 
+ A sombra clássica para um item do IoT chamado `MyDevice2` 
+ As sombras nomeadas `MyShadowA` e `MyShadowB` para um item do IoT chamado `MyDevice1`

Essa atualização de configuração especifica a sincronização de sombras AWS IoT Core em tempo real. Se você usa o Gerenciador de sombras v2.1.0 ou mais recente, pode configurar esse componente para sincronizar as sombras em um intervalo periódico. Para configurar esse recurso, altere a estratégia de sincronização para `periodic` e especifique um `delay` em segundos para o intervalo. Para obter mais informações, consulte [o parâmetro de configuração da estratégia](shadow-manager-component.md#shadow-manager-component-configuration) do componente Gerenciador de sombras.

Essa atualização de configuração especifica a sincronização de sombras em ambas as direções entre o AWS IoT Core e o dispositivo principal. Se você usa o Gerenciador de sombras v2.2.0 ou mais recente, pode configurar esse componente para sincronizar as sombras em apenas uma direção. Para configurar esse recurso, altere a `direction` da sincronização para `deviceToCloud` ou `cloudToDevice`. Para obter mais informações, consulte [o parâmetro de configuração da direção](shadow-manager-component.md#shadow-manager-component-configuration) do componente Gerenciador de sombras.

```
{
  "strategy": {
    "type": "realTime"
  },
  "synchronize": {
    "coreThing": {
      "classic": true,
      "namedShadows": [
        "MyCoreShadow"
      ]
    },
    "shadowDocuments": [
      {
        "thingName": "MyDevice1",
        "classic": false,
        "namedShadows": [
          "MyShadowA",
          "MyShadowB"
        ]
      },
      {
        "thingName": "MyDevice2",
        "classic": true,
        "namedShadows": [ ]
      }
    ],
    "direction": "betweenDeviceAndCloud"
  }
}
```

## Sincronizar sombras locais
<a name="sync-local-shadows"></a>

Quando o dispositivo principal do Greengrass está conectado à AWS IoT nuvem, o gerenciador de sombras executa as seguintes tarefas para as sombras que você especifica na configuração do componente. O comportamento depende da opção de configuração da direção de sincronização de sombras que você especifica. Por padrão, o Gerenciador de sombras usa a opção `betweenDeviceAndCloud` para sincronizar as sombras nas duas direções. Se você usa o Gerenciador de sombras v2.2.0 ou mais recente, pode configurar o dispositivo principal para sincronizar as sombras em apenas uma direção, que pode ser `cloudToDevice` ou `deviceToCloud`.
+ Se a configuração de direção da sincronização de sombras for `betweenDeviceAndCloud` ou `cloudToDevice`, o Gerenciador de sombras recuperará as informações de estado relatadas do documento de sombra da nuvem no AWS IoT Core. Depois disso, ele atualizará os documentos de sombra armazenados localmente para sincronizar o estado do dispositivo.
+ Se a configuração de direção da sincronização de sombras for `betweenDeviceAndCloud` ou `deviceToCloud`, o Gerenciador de sombras publicará o estado atual do dispositivo no documento de sombra da nuvem.

## Comportamento de conflito na mesclagem de sombras
<a name="shadow-merge-behavior"></a>

Em alguns casos, como quando o dispositivo principal está desconectado da Internet, uma sombra pode mudar no serviço paralelo local e na AWS IoT nuvem antes que o gerenciador de sombra sincronize as alterações. Como resultado, os estados desejados e reportados diferem entre o serviço paralelo local e a AWS IoT nuvem.

Quando o Gerenciador de sombras sincroniza a sombra, ele mescla as alterações de acordo com este comportamento:
+ Se você usa uma versão do Gerenciador de sombras anterior à 2.2.0, ou quando especifica a direção da sincronização de sombras `betweenDeviceAndCloud`, o seguinte comportamento é aplicado:
  + Quando há um conflito de mesclagem no estado desejado de uma sombra, o gerenciador de sombra substitui a seção conflitante do documento paralelo local pelo valor da nuvem. AWS IoT 
  + Quando há um conflito de mesclagem no estado relatado de uma sombra, o gerenciador de sombra substitui a seção conflitante da sombra na AWS IoT nuvem pelo valor do documento de sombra local.
+ Quando você especifica a `deviceToCloud` direção da sincronização de sombras, o gerenciador de sombras substitui a seção conflitante da sombra na AWS IoT nuvem pelo valor do documento de sombra local.
+ Quando você especifica a `cloudToDevice` direção da sincronização de sombras, o gerenciador de sombras substitui a seção conflitante do documento de sombra local pelo valor da AWS IoT nuvem.