

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Interagissez avec les ombres de l'appareil
<a name="interact-with-shadows"></a>

Les appareils Greengrass Core peuvent interagir avec leurs [ombres àAWS IoT l'](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)aide de composants. Un *shadow* est un document JSON qui stocke les informations d'état actuelles ou souhaitées pour un AWS IoT objet. Les ombres peuvent rendre l'état d'un appareil accessible à d'autres AWS IoT Greengrass composants, que l'appareil soit connecté AWS IoT ou non. Chaque AWS IoT appareil possède sa propre ombre classique et anonyme. Vous pouvez également créer plusieurs ombres nommées pour chaque appareil. 

[Les appareils et les services peuvent créer, mettre à jour et supprimer des ombres dans les nuages à l'aide du MQTT et des [sujets d'ombre MQTT réservés](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow), du protocole HTTP à l'aide de l'[API REST Device Shadow](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-rest-api.html) et du AWS CLI for. AWS IoT](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html)

Le composant [Shadow Manager](shadow-manager-component.md) permet à vos composants Greengrass de créer, de mettre à jour et de supprimer des ombres locales en utilisant le [service d'ombre local](ipc-local-shadows.md) et les rubriques parallèles de publication/d'abonnement locales. Le gestionnaire des ombres gère également le stockage de ces documents instantanés locaux sur votre appareil principal et gère la synchronisation des informations relatives à l'état des ombres avec les ombres des nuages.

Vous pouvez également utiliser le composant Shadow Manager pour gérer les ombres locales pour les [appareils clients](interact-with-local-iot-devices.md) qui se connectent au périphérique principal. Pour permettre à Shadow Manager de gérer les ombres des périphériques clients, vous configurez le [composant du pont MQTT](mqtt-bridge-component.md) pour relayer les messages entre le courtier MQTT local et le service de publication/d'abonnement local. Pour de plus amples informations, veuillez consulter [Interagissez avec les ombres des appareils clients et synchronisez-les](work-with-client-device-shadows.md).

Pour plus d'informations sur les concepts de AWS IoT Device Shadow, consultez le [service AWS IoT Device Shadow](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) dans le *Guide du AWS IoT développeur*.

**Topics**
+ [Interagir avec les ombres dans les composants](interact-with-shadows-in-components.md)
+ [Synchronisez les ombres de l'appareil local avec AWS IoT Core](sync-shadows-with-iot-core.md)

# Interagir avec les ombres dans les composants
<a name="interact-with-shadows-in-components"></a>

Vous pouvez développer des composants personnalisés, notamment des composants de fonction Lambda, qui utilisent le service fantôme local pour lire et modifier les documents fantômes locaux et les documents fantômes du périphérique client.

Les composants personnalisés interagissent avec le service parallèle local à l'aide des bibliothèques AWS IoT Greengrass Core IPC du Kit SDK des appareils AWS IoT. Le composant [Shadow Manager](shadow-manager-component.md) active le service fantôme local sur votre appareil principal.

Pour déployer le composant Shadow Manager sur un appareil principal de Greengrass, [créez un déploiement](create-deployments.md) incluant le `aws.greengrass.ShadowManager` composant.

**Note**  
Par défaut, le déploiement du composant Shadow Manager active uniquement les opérations d'ombre locales. AWS IoT Greengrass Pour permettre de synchroniser les informations sur l'état des ombres des périphériques principaux ou des ombres des appareils clients avec les documents Cloud Shadow correspondants dans AWS IoT Core, vous devez créer une mise à jour de configuration pour le composant Shadow Manager qui inclut le `synchronize` paramètre. Pour de plus amples informations, veuillez consulter [Synchronisez les ombres de l'appareil local avec AWS IoT Core](sync-shadows-with-iot-core.md).

**Topics**
+ [Récupérez et modifiez les états d'ombre](#interact-shadow-states)
+ [Réagir aux changements d'état de l'ombre](#react-shadow-events)

## Récupérez et modifiez les états d'ombre
<a name="interact-shadow-states"></a>

Les opérations IPC parallèles récupèrent et mettent à jour les informations d'état dans les documents fictifs locaux. Le composant Shadow Manager gère le stockage de ces documents fantômes sur votre appareil principal.

**Pour modifier les états d'ombre locaux**

1. Ajoutez des politiques d'autorisation à la recette de votre composant personnalisé afin de permettre au composant de recevoir des messages sur des sujets secondaires locaux.

   Pour des exemples de politiques d'autorisation, consultez la section [Exemples de politiques d'autorisation IPC fantôme locales](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Utilisez les opérations IPC de l'ombre pour récupérer et modifier les informations relatives à l'état de l'ombre. Pour plus d'informations sur l'utilisation des opérations IPC fantômes dans le code des composants, consultez[Interagissez avec les ombres locales](ipc-local-shadows.md).

**Note**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Pour permettre à un périphérique principal d'interagir avec les ombres du périphérique client, vous devez également configurer et déployer le composant de pont MQTT. Pour plus d'informations, voir [Activer le Shadow Manager pour communiquer avec les appareils clients](work-with-client-device-shadows.md).

## Réagir aux changements d'état de l'ombre
<a name="react-shadow-events"></a>

Les composants Greengrass utilisent l' publish/subscribe interface locale pour communiquer sur un appareil principal. Pour permettre à un composant personnalisé de réagir aux changements d'état fictif, vous pouvez vous abonner aux publish/subscribe rubriques locales. Cela permet au composant de recevoir des messages sur les sujets secondaires locaux, puis d'agir sur ces messages. 

Les sujets fantômes locaux utilisent le même format que les sujets MQTT fantômes de l' AWS IoT appareil. Pour plus d'informations sur les sujets cachés, consultez les [rubriques Device Shadow MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html) dans le *manuel du AWS IoT développeur*.

**Pour réagir aux changements de l'état parallèle local**

1. Ajoutez des politiques de contrôle d'accès à la recette de votre composant personnalisé afin de permettre au composant de recevoir des messages sur des sujets secondaires locaux.

   Pour des exemples de politiques d'autorisation, consultez la section [Exemples de politiques d'autorisation IPC fantôme locales](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples).

1. Pour lancer une action personnalisée dans un composant, utilisez les opérations `SubscribeToTopic` IPC pour vous abonner aux sujets fictifs sur lesquels vous souhaitez recevoir des messages. Pour plus d'informations sur l'utilisation des opérations publish/subscribe IPC locales dans le code des composants, consultez[Publier/souscrire des messages locaux](ipc-publish-subscribe.md).

1. Pour appeler une fonction Lambda, utilisez la configuration de la source d'événements pour fournir le nom du sujet parallèle et spécifiez qu'il s'agit d'un sujet local publish/subscribe . Pour plus d'informations sur la création de composants de fonctions Lambda, consultez. [Exécuter AWS Lambda des fonctions](run-lambda-functions.md)

**Note**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Pour permettre à un périphérique principal d'interagir avec les ombres du périphérique client, vous devez également configurer et déployer le composant de pont MQTT. Pour plus d'informations, voir [Activer le Shadow Manager pour communiquer avec les appareils clients](work-with-client-device-shadows.md).

# Synchronisez les ombres de l'appareil local avec AWS IoT Core
<a name="sync-shadows-with-iot-core"></a>

Le composant Shadow Manager permet AWS IoT Greengrass de synchroniser les états d'ombre des périphériques locaux avec AWS IoT Core. Vous devez modifier la configuration du composant Shadow Manager pour inclure le paramètre de `synchronization` configuration et spécifier les noms AWS IoT des objets pour vos appareils, ainsi que les ombres que vous souhaitez synchroniser. 

Lorsque vous configurez le gestionnaire d'ombres pour synchroniser les ombres, il synchronise tous les changements d'état pour les ombres spécifiées, que les modifications se produisent dans les documents d'ombre locaux ou dans les documents d'ombre du cloud.

Vous pouvez également spécifier si le composant Shadow Manager synchronise les ombres en temps réel ou à intervalles réguliers. Par défaut, le composant Shadow Manager synchronise les ombres en temps réel, de sorte que le périphérique principal envoie et reçoit des mises à jour des ombres depuis AWS IoT Core et vers chaque mise à jour. Vous pouvez configurer des intervalles périodiques pour réduire l'utilisation de la bande passante et les frais.

**Topics**
+ [Conditions préalables](#shadow-sync-prereqs)
+ [Configuration du composant Shadow Manager](#configure-shadow-manager-for-sync)
+ [Synchroniser les ombres locales](#sync-local-shadows)
+ [Comportement des conflits liés à la fusion](#shadow-merge-behavior)

## Conditions préalables
<a name="shadow-sync-prereqs"></a>

Pour synchroniser les ombres locales avec AWS IoT Core, vous devez configurer la AWS IoT politique de l'appareil principal de Greengrass afin d'autoriser les actions de politique AWS IoT Core parallèle suivantes.
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Pour plus d’informations, consultez les ressources suivantes :
+ [AWS IoT Core actions politiques décrites](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) dans le *guide du AWS IoT développeur*
+ [AWS IoT Politique minimale pour les appareils AWS IoT Greengrass V2 principaux](device-auth.md#greengrass-core-minimal-iot-policy)
+ [Mettre à jour la AWS IoT politique d'un appareil principal](device-auth.md#update-core-device-iot-policy)

## Configuration du composant Shadow Manager
<a name="configure-shadow-manager-for-sync"></a>

Le gestionnaire de fantômes a besoin d'une liste de mappages de noms de fantômes pour synchroniser les informations relatives à l'état des ombres contenues dans les documents d'ombre locaux avec les documents d'ombre dans AWS IoT Core le cloud.

Pour synchroniser les états des ombres, [créez un déploiement](create-deployments.md) incluant le `aws.greengrass.ShadowManager` composant et spécifiez les ombres que vous souhaitez synchroniser dans le paramètre de `synchronize` configuration de la configuration du gestionnaire des ombres du déploiement.

**Note**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
Pour permettre à un périphérique principal d'interagir avec les ombres du périphérique client, vous devez également configurer et déployer le composant de pont MQTT. Pour plus d'informations, voir [Activer le Shadow Manager pour communiquer avec les appareils clients](work-with-client-device-shadows.md).

L'exemple de mise à jour de configuration suivant indique au composant Shadow Manager de synchroniser les ombres suivantes avec AWS IoT Core :
+ L'ombre classique de l'appareil principal 
+ Le nom `MyCoreShadow` de l'appareil principal 
+ L'ombre classique d'un objet IoT nommé `MyDevice2` 
+ Les ombres nommées `MyShadowA` et `MyShadowB` pour un objet IoT nommé `MyDevice1`

Cette mise à jour de configuration indique de synchroniser les ombres avec AWS IoT Core en temps réel. Si vous utilisez Shadow Manager v2.1.0 ou version ultérieure, vous pouvez configurer le composant Shadow Manager pour synchroniser les ombres à intervalles réguliers. Pour configurer cette fonctionnalité, remplacez la stratégie de `periodic` synchronisation par et spécifiez un intervalle `delay` en secondes. Pour plus d'informations, consultez [le paramètre de configuration de stratégie](shadow-manager-component.md#shadow-manager-component-configuration) du composant Shadow Manager.

Cette mise à jour de configuration indique de synchroniser les ombres dans les deux sens entre le périphérique principal AWS IoT Core et le périphérique principal. Si vous utilisez Shadow Manager v2.2.0 ou version ultérieure, vous pouvez configurer le composant Shadow Manager pour synchroniser les ombres dans une seule direction. Pour configurer cette fonctionnalité, remplacez la synchronisation `direction` par `deviceToCloud` ou`cloudToDevice`. Pour plus d'informations, consultez [le paramètre de configuration de direction](shadow-manager-component.md#shadow-manager-component-configuration) du composant Shadow Manager.

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

## Synchroniser les ombres locales
<a name="sync-local-shadows"></a>

Lorsque le périphérique principal de Greengrass est connecté au AWS IoT cloud, le gestionnaire d'ombres exécute les tâches suivantes pour les ombres que vous spécifiez dans la configuration des composants. Le comportement dépend de l'option de configuration de la direction de synchronisation des ombres que vous spécifiez. Par défaut, le gestionnaire d'ombres utilise l'`betweenDeviceAndCloud`option permettant de synchroniser les ombres dans les deux directions. Si vous utilisez Shadow Manager v2.2.0 ou version ultérieure, vous pouvez configurer le périphérique principal pour synchroniser les ombres dans une seule direction, qui peut être `cloudToDevice` ou. `deviceToCloud`
+ Si la configuration de la direction de synchronisation des ombres est `betweenDeviceAndCloud` ou`cloudToDevice`, Shadow Manager récupère les informations d'état signalées à partir du document Cloud Shadow dans AWS IoT Core. Il met ensuite à jour les documents fictifs stockés localement pour synchroniser l'état de l'appareil.
+ Si la configuration de la direction de synchronisation des ombres est `betweenDeviceAndCloud` ou`deviceToCloud`, Shadow Manager publie l'état actuel de l'appareil dans le document Cloud Shadow.

## Comportement des conflits liés à la fusion
<a name="shadow-merge-behavior"></a>

Dans certains cas, par exemple lorsque le périphérique principal est déconnecté d'Internet, une ombre peut changer dans le service parallèle local et dans le AWS IoT cloud avant que le gestionnaire parallèle ne synchronise les modifications. Par conséquent, les états souhaités et signalés diffèrent entre le service parallèle local et le AWS IoT cloud

Lorsque le gestionnaire d'ombres synchronise l'ombre, il fusionne les modifications selon le comportement suivant :
+ Si vous utilisez une version du gestionnaire d'ombres antérieure à la version 2.2.0, ou lorsque vous spécifiez la direction de synchronisation des `betweenDeviceAndCloud` ombres, le comportement suivant s'applique :
  + En cas de conflit de fusion dans l'état souhaité pour une ombre, le gestionnaire des ombres remplace la section en conflit du document parallèle local par la valeur provenant du AWS IoT cloud.
  + En cas de conflit de fusion dans l'état signalé d'une ombre, le gestionnaire des ombres remplace la section conflictuelle de l'ombre dans le AWS IoT cloud par la valeur du document parallèle local.
+ Lorsque vous spécifiez la `deviceToCloud` direction de synchronisation des ombres, le gestionnaire d'ombres remplace la section conflictuelle de l'ombre dans le AWS IoT cloud par la valeur du document d'ombre local.
+ Lorsque vous spécifiez la `cloudToDevice` direction de synchronisation des ombres, le gestionnaire d'ombres remplace la section en conflit du document d'ombre local par la valeur provenant du AWS IoT cloud.