

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Interacción con las sombras de dispositivo
<a name="interact-with-shadows"></a>

Los dispositivos principales de Greengrass pueden interactuar con [las sombras de dispositivo de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) mediante componentes. Una *sombra* es un documento JSON que se usa para almacenar la información del estado actual o deseado de un objeto AWS IoT. Las sombras pueden hacer que el estado de un dispositivo esté disponible para otros componentes de AWS IoT Greengrass, ya sea que el dispositivo esté conectado a AWS IoT o no. Cada dispositivo AWS IoT tiene su propia sombra clásica sin nombre. También puede crear varias sombras con nombre para cada dispositivo. 

Los dispositivos y servicios pueden crear, actualizar y eliminar sombras en la nube mediante MQTT y los [temas de sombra MQTT reservados](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow), HTTP mediante [la API de REST de sombra de dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-rest-api.html) y la [AWS CLI para AWS IoT](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html).

El componente [administrador de sombras](shadow-manager-component.md) permite a sus componentes de Greengrass crear, actualizar y eliminar sombras locales mediante el [servicio de sombras local](ipc-local-shadows.md) y los temas de sombra local de publicación/suscripción. El administrador de sombras también administra el almacenamiento de estos documentos de sombras locales en su dispositivo principal y gestiona la sincronización de la información del estado de las sombras con las sombras en la nube.

También puede utilizar el componente administrador de sombras para administrar las sombras locales de [los dispositivos de cliente](interact-with-local-iot-devices.md) que se conectan al dispositivo principal. Para permitir que el administrador de sombras administre las sombras de dispositivo de cliente, debe configurar el [componente de puente de MQTT](mqtt-bridge-component.md) para reenviar mensajes entre el agente MQTT local y el servicio de publicación/suscripción local. Para obtener más información, consulte [Interacción y sincronización con las sombras de dispositivo de cliente](work-with-client-device-shadows.md).

Para obtener más información acerca de los conceptos de sombra de dispositivo de AWS IoT, consulte [Servicio de sombra de dispositivo AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) en la *Guía para desarrolladores de AWS IoT*.

**Topics**
+ [Interacción con las sombras de los componentes](interact-with-shadows-in-components.md)
+ [Sincronice las sombras de los dispositivos locales con AWS IoT Core](sync-shadows-with-iot-core.md)

# Interacción con las sombras de los componentes
<a name="interact-with-shadows-in-components"></a>

Puede desarrollar componentes personalizados, incluidos los componentes de la función de Lambda, que utilicen el servicio de sombra local para leer y modificar documentos de sombra locales y documentos de sombra de dispositivo de cliente.

Los componentes personalizados interactúan con el servicio oculto local mediante las bibliotecas AWS IoT Greengrass Core IPC del SDK para dispositivos con AWS IoT. El componente [administrador de sombras](shadow-manager-component.md) habilita el servicio de sombra local en su dispositivo principal.

Para implementar el componente de administrador de sombras en un dispositivo principal de Greengrass, [cree una implementación](create-deployments.md) que incluya el componente `aws.greengrass.ShadowManager`.

**nota**  
De forma predeterminada, la implementación del componente administrador de sombras solo permite las operaciones de sombras locales. AWS IoT Greengrass Para poder sincronizar la información sobre el estado de las sombras de los dispositivos principales o de cualquier sombra de los dispositivos cliente con los documentos de sombra de nube correspondientes AWS IoT Core, debe crear una actualización de configuración para el componente de administrador de sombras que incluya el `synchronize` parámetro. Para obtener más información, consulte [Sincronice las sombras de los dispositivos locales con AWS IoT Core](sync-shadows-with-iot-core.md).

**Topics**
+ [Recuperación y modificación de los estados de sombra](#interact-shadow-states)
+ [Reacción a los cambios en el estado de sombra](#react-shadow-events)

## Recuperación y modificación de los estados de sombra
<a name="interact-shadow-states"></a>

Las operaciones de IPC de sombra recuperan y actualizan la información sobre el estado de los documentos de sombra local. El componente administrador de sombras se encarga del almacenamiento de estos documentos de sombra en el dispositivo principal.

**Cómo modificar los estados de sombra local**

1. Agregue políticas de autorización a la receta de su componente personalizado para permitir que el componente reciba mensajes sobre temas de sombra local.

   Para ver ejemplos de políticas de autorización, consulte [Ejemplos de políticas de autorización de IPC de sombra local](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Utilice las operaciones de IPC de sombras para recuperar y modificar la información sobre el estado de sombras. Para obtener más información sobre el uso de operaciones de IPC de sombras en el código de los componentes, consulte [Interactúe con las sombras locales](ipc-local-shadows.md).

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que un dispositivo principal interactúe con las sombras de dispositivos de cliente, también debe configurar e implementar el componente puente MQTT. Para obtener más información, consulte [Habilitación del administrador de sombras para que se comunique con los dispositivos de cliente](work-with-client-device-shadows.md).

## Reacción a los cambios en el estado de sombra
<a name="react-shadow-events"></a>

Los componentes de Greengrass utilizan la publish/subscribe interfaz local para comunicarse en un dispositivo central. Para permitir que un componente personalizado reaccione ante los cambios en el estado de sombra, puede suscribirse a los publish/subscribe temas locales. Esto permite que el componente reciba mensajes sobre los temas de sombra local y, a continuación, actúe en función de esos mensajes. 

Los temas ocultos locales utilizan el mismo formato que los temas MQTT ocultos de AWS IoT dispositivos. Para obtener más información sobre temas de sombras, consulte [Temas MQTT de sombra de dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html) en la *Guía para desarrolladores de AWS IoT *.

**Reacción a los cambios en el estado de sombra local**

1. Agregue políticas de control de acceso a la receta de su componente personalizado para permitir que el componente reciba mensajes sobre temas de sombra local.

   Para ver ejemplos de políticas de autorización, consulte [Ejemplos de políticas de autorización de IPC de sombra local](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Para iniciar una acción personalizada en un componente, utilice las operaciones de IPC `SubscribeToTopic` para suscribirse a los temas de sombra sobre los que desee recibir mensajes. Para obtener más información sobre el uso de operaciones de publish/subscribe IPC locales en el código de los componentes, consulte. [Publicar/suscribir mensajes locales](ipc-publish-subscribe.md)

1. Para invocar una función Lambda, utilice la configuración de la fuente de eventos para proporcionar el nombre del tema paralelo y especificar que se trata de un publish/subscribe tema local. Para obtener más información sobre la creación de componentes de la función de Lambda, consulte [Ejecución de funciones de AWS Lambda](run-lambda-functions.md).

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que un dispositivo principal interactúe con las sombras de dispositivos de cliente, también debe configurar e implementar el componente puente MQTT. Para obtener más información, consulte [Habilitación del administrador de sombras para que se comunique con los dispositivos de cliente](work-with-client-device-shadows.md).

# Sincronice las sombras de los dispositivos locales con AWS IoT Core
<a name="sync-shadows-with-iot-core"></a>

El componente administrador de sombras permite sincronizar AWS IoT Greengrass los estados de sombra de los dispositivos locales con AWS IoT Core. Debe modificar la configuración del componente administrador de sombras para incluir el parámetro de `synchronization` configuración y AWS IoT especificar los nombres de los dispositivos y las sombras que desea sincronizar. 

Al configurar el administrador de sombras para que sincronice las sombras, sincroniza todos los cambios de estado de las sombras especificadas, independientemente de si los cambios se producen en documentos de sombra locales o en documentos de sombra en la nube.

También puede especificar si el componente administrador de sombras sincroniza las sombras en tiempo real o en intervalos periódicos. De forma predeterminada, el componente administrador de sombras sincroniza las sombras en tiempo real, por lo que el dispositivo principal envía y recibe actualizaciones ocultas desde y hacia el AWS IoT Core momento en que se produce cada actualización. Puede configurar intervalos periódicos para reducir el uso de ancho de banda y los cargos.

**Topics**
+ [Requisitos previos](#shadow-sync-prereqs)
+ [Configuración del componente administrador de sombras](#configure-shadow-manager-for-sync)
+ [Sincronización de sombras locales](#sync-local-shadows)
+ [Comportamiento conflictivo en la combinación de sombras](#shadow-merge-behavior)

## Requisitos previos
<a name="shadow-sync-prereqs"></a>

Para sincronizar las sombras locales AWS IoT Core, debe configurar la AWS IoT política del dispositivo principal de Greengrass para permitir las siguientes acciones de política AWS IoT Core clandestina.
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Para obtener más información, consulte los siguientes temas:
+ [AWS IoT Core acciones políticas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) en la Guía *AWS IoT para desarrolladores*
+ [AWS IoT Política mínima para los dispositivos AWS IoT Greengrass V2 principales](device-auth.md#greengrass-core-minimal-iot-policy)
+ [Actualice la AWS IoT política de un dispositivo principal](device-auth.md#update-core-device-iot-policy)

## Configuración del componente administrador de sombras
<a name="configure-shadow-manager-for-sync"></a>

El administrador de sombras necesita una lista de asignaciones de nombres de sombras, con el fin de sincronizar la información sobre el estado de las sombras en los documentos de sombras locales con los documentos de sombras en la nube en AWS IoT Core.

Para sincronizar los estados de sombra, [cree una implementación](create-deployments.md) que incluya el componente `aws.greengrass.ShadowManager` y especifique las sombras que desea sincronizar en el parámetro de configuración `synchronize` de la configuración del administrador de sombras en la implementación.

**nota**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Para permitir que un dispositivo principal interactúe con las sombras de dispositivos de cliente, también debe configurar e implementar el componente puente MQTT. Para obtener más información, consulte [Habilitación del administrador de sombras para que se comunique con los dispositivos de cliente](work-with-client-device-shadows.md).

El siguiente ejemplo de actualización de configuración indica al componente administrador de sombras que sincronice las siguientes sombras con AWS IoT Core:
+ La sombra clásica para el dispositivo principal 
+ La `MyCoreShadow` con nombre del dispositivo principal 
+ La sombra clásica para un objeto del IoT llamada `MyDevice2` 
+ Las sombras con nombre `MyShadowA` y `MyShadowB` para un objeto del IoT llamada `MyDevice1`

Esta actualización de configuración especifica sincronizar las sombras con ellas AWS IoT Core en tiempo real. Si utiliza la versión 2.1.0 o posterior del administrador de sombras, puede configurar el componente administrador de sombras para que sincronice las sombras a intervalos periódicos. Para configurar esta característica, cambie la estrategia de sincronización a `periodic` y especifique un `delay` en segundos para el intervalo. Para obtener más información, consulte [el parámetro de configuración de la estrategia](shadow-manager-component.md#shadow-manager-component-configuration) del componente administrador de sombras.

Esta actualización de configuración especifica que las sombras se sincronicen en ambas direcciones entre AWS IoT Core y el dispositivo principal. Si utiliza la versión 2.2.0 o posterior del administrador de sombras, puede configurar el componente administrador de sombras para que sincronice las sombras en una dirección. Para configurar esta característica, cambie la sincronización `direction` a `deviceToCloud` o `cloudToDevice`. Para obtener más información, consulte [el parámetro de configuración de la dirección](shadow-manager-component.md#shadow-manager-component-configuration) del componente administrador 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"
  }
}
```

## Sincronización de sombras locales
<a name="sync-local-shadows"></a>

Cuando el dispositivo principal de Greengrass está conectado a la AWS IoT nube, el administrador de sombras realiza las siguientes tareas para las sombras que especifique en la configuración del componente. El comportamiento depende de la opción de configuración especificada en la dirección de sincronización de sombras. De forma predeterminada, el administrador de sombras usa la opción `betweenDeviceAndCloud` para sincronizar las sombras en ambas direcciones. Si utiliza la versión 2.2.0 o posterior del administrador de sombras, puede configurar el dispositivo principal para que sincronice las sombras en una dirección, que puede ser `cloudToDevice` o `deviceToCloud`.
+ Si la configuración de la dirección de sincronización de sombras es `betweenDeviceAndCloud` o `cloudToDevice`, el administrador de sombras recupera la información de estado notificada del documento de sombra en la nube en AWS IoT Core. A continuación, actualiza los documentos de sombras almacenados localmente para sincronizar el estado del dispositivo.
+ Si la configuración de la dirección de sincronización de sombra es `betweenDeviceAndCloud` o`deviceToCloud`, el administrador de sombras publica el estado actual del dispositivo en el documento de sombra en la nube.

## Comportamiento conflictivo en la combinación de sombras
<a name="shadow-merge-behavior"></a>

En algunos casos, como cuando el dispositivo principal está desconectado de Internet, es posible que una sombra cambie en el servicio de sombra local y en la AWS IoT nube antes de que el administrador de sombras sincronice los cambios. Como resultado, los estados deseados y notificados difieren entre el servicio paralelo local y la nube AWS IoT 

Cuando el administrador de sombras sincroniza la sombra, fusiona los cambios de acuerdo con el siguiente comportamiento:
+ Si utiliza una versión del administrador de sombras anterior a la versión 2.2.0, o si especifica la dirección de sincronización de sombras `betweenDeviceAndCloud`, se aplica el siguiente comportamiento:
  + Cuando se produce un conflicto de fusión en el estado deseado de una sombra, el administrador de la sombra sobrescribe la sección conflictiva del documento alternativo local con el valor de la AWS IoT nube.
  + Cuando se produce un conflicto de fusión en el estado registrado de una sombra, el administrador de la sombra sobrescribe la sección conflictiva de la sombra de la AWS IoT nube con el valor del documento paralelo local.
+ Al especificar la dirección de sincronización de las `deviceToCloud` sombras, el administrador de sombras sobrescribe la sección conflictiva de la sombra en la AWS IoT nube con el valor del documento paralelo local.
+ Al especificar la dirección de sincronización de las `cloudToDevice` sombras, el administrador de sombras sobrescribe la sección conflictiva del documento paralelo local con el valor de la nube. AWS IoT 