

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.

# Suivez l'utilisation AWS IoT et le MQTT avec Amazon Location Service
<a name="tracking-using-mqtt"></a>

[MQTT](http://mqtt.org/) est un protocole de messagerie léger et largement adopté conçu pour les appareils limités. AWS IoT Core prend en charge les connexions de périphériques utilisant le protocole MQTT et le protocole MQTT over WebSocket Secure (WSS). 

[AWS IoT Core](https://aws.amazon.com/iot-core/)connecte les appareils à eux AWS et vous permet d'envoyer et de recevoir des messages entre eux. Le moteur de AWS IoT Core règles stocke les requêtes concernant les sujets des messages de vos appareils et vous permet de définir des actions pour envoyer des messages à d'autres AWS services, tels qu'Amazon Location Service. Les appareils qui connaissent leur position sous forme de coordonnées peuvent voir leur position transmise à Amazon Location via le moteur de règles.

**Note**  
Les appareils peuvent connaître leur propre position, par exemple via le GPS intégré. AWS IoT prend également en charge le suivi de la localisation des appareils tiers. Pour plus d'informations, consultez la section [Emplacement du périphérique AWS IoTAWS IoT principal](https://docs.aws.amazon.com/iot/latest/developerguide/device-location.html) *dans le Guide du développeur principal*.

La procédure pas à pas suivante décrit le suivi à l'aide de AWS IoT Core règles. Vous pouvez également envoyer les informations de l'appareil à votre propre AWS Lambda fonction, si vous devez les traiter avant de les envoyer à Amazon Location. Pour plus de détails sur l'utilisation de Lambda pour traiter la localisation de vos appareils, consultez. [Utilisation AWS Lambda avec MQTT](tracking-using-mqtt-with-lambda.md)

**Topics**
+ [Prérequis](#mqtt-prerequisite)
+ [Création d'une AWS IoT Core règle](#mqtt-create-iot-rule)
+ [Testez votre AWS IoT Core règle dans la console](#mqtt-test-iot-rule)
+ [Utilisation AWS Lambda avec MQTT](tracking-using-mqtt-with-lambda.md)

## Prérequis
<a name="mqtt-prerequisite"></a>

Avant de commencer le suivi, vous devez remplir les conditions préalables suivantes :
+ [Créez une ressource de suivi](start-create-tracker.md) à laquelle vous enverrez les données de localisation de l'appareil.
+ [Créez un rôle IAM](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html) pour accorder l' AWS IoT Core accès à votre tracker.

  Lorsque vous suivez ces étapes, appliquez la politique suivante pour donner accès à votre traceur :

  ```
  {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "WriteDevicePosition",
        "Effect": "Allow",
        "Action": "geo:BatchUpdateDevicePosition",
        "Resource": "arn:aws:geo:*:*:tracker/*"
      }
    ]
  }
  ```

## Création d'une AWS IoT Core règle
<a name="mqtt-create-iot-rule"></a>

Créez ensuite une AWS IoT Core règle pour transmettre la télémétrie de position de vos appareils à Amazon Location Service. Pour plus d'informations sur la création de règles, consultez les rubriques suivantes du *guide du AWS IoT Core développeur* :
+ [Création d'une AWS IoT règle](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-rule.html) pour obtenir des informations sur la création d'une nouvelle règle.
+ [Action de localisation](https://docs.aws.amazon.com/iot/latest/developerguide/location-rule-action.html) pour obtenir des informations spécifiques à la création d'une règle de publication sur Amazon Location 

## Testez votre AWS IoT Core règle dans la console
<a name="mqtt-test-iot-rule"></a>

Si aucun appareil ne publie actuellement de télémétrie incluant la localisation, vous pouvez tester votre règle à l'aide de la AWS IoT Core console. La console dispose d'un client de test dans lequel vous pouvez publier un exemple de message pour vérifier les résultats de la solution.

1. Connectez-vous à la AWS IoT Core console à l'adresse [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Dans le volet de navigation de gauche, développez **Test**, puis choisissez le **client de test MQTT**.

1. Sous **Publier dans un sujet**, définissez le **nom du sujet** sur *iot/topic* (ou le nom du sujet que vous avez défini dans votre AWS IoT Core règle, s'il est différent) et fournissez les informations suivantes pour la **charge utile du message**. Remplacez l'horodatage *1604940328* par un horodatage valide au cours des 30 derniers jours (les horodatages antérieurs à 30 jours sont ignorés par les outils de suivi Amazon Location Service).

   ```
   {
     "payload": {
       "deviceid": "thing123",
       "timestamp": 1604940328,
       "location": { "lat": 49.2819, "long": -123.1187 },
       "accuracy": { "Horizontal": 20.5 },
       "positionProperties": { "field1": "value1", "field2": "value2" }
     }
   }
   ```

1. Choisissez **Publier** dans le sujet pour envoyer le message de test.

1. Pour vérifier que le message a bien été reçu par Amazon Location Service, utilisez la AWS CLI commande suivante. Si vous l'avez modifié lors de la configuration, remplacez le nom du tracker par celui que vous avez utilisé.

   ```
   aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123
   ```

# Utilisation AWS Lambda avec MQTT
<a name="tracking-using-mqtt-with-lambda"></a>

Bien que l'utilisation ne AWS Lambda soit plus obligatoire lors de l'envoi des données de localisation de l'appareil à Amazon Location à des fins de suivi, vous souhaiterez peut-être toujours utiliser Lambda dans certains cas. Par exemple, si vous souhaitez traiter vous-même les données de localisation de votre appareil avant de les envoyer à Amazon Location. Les rubriques suivantes décrivent comment utiliser Lambda pour traiter les messages avant de les envoyer à votre tracker. Pour plus d'informations sur ce modèle, consultez l'[architecture de référence](https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/amazon-location-service-ra.pdf).

**Topics**
+ [Prérequis](#mqtt-prerequisite-with-lambda)
+ [Création d’une fonction Lambda](#mqtt-with-lambda-create-lambda)
+ [Création d'une AWS IoT Core règle](#mqtt-create-iot-rule-with-lambda)
+ [Testez votre AWS IoT Core règle dans la console](#mqtt-test-iot-rule-with-lambda)

## Prérequis
<a name="mqtt-prerequisite-with-lambda"></a>

Avant de commencer le suivi, vous devez [créer une ressource de suivi](start-tracking.md). Pour créer une ressource de suivi, vous pouvez utiliser la console Amazon Location AWS CLI, ou Amazon Location APIs. 

L'exemple suivant utilise la console Amazon Location Service pour créer la ressource de suivi :

1. Ouvrez la console Amazon Location Service à l'adresse [https://console.aws.amazon.com/location/](https://console.aws.amazon.com/location/home).

1. Dans le volet de navigation de gauche, choisissez **Trackers**. 

1.  Choisissez **Créer un tracker**. 

1. Remplissez les cases suivantes :
   + **Nom** — Entrez un nom unique comportant un maximum de 100 caractères. Les entrées valides incluent les caractères alphanumériques, les traits d'union et les traits de soulignement. Par exemple, *MyTracker*.
   + **Description** — Entrez une description facultative. Par exemple, *Tracker for storing AWS IoT Core device positions*.
   + **Filtrage des positions** : sélectionnez le filtrage que vous souhaitez utiliser pour les mises à jour des positions. Par exemple, le filtrage **basé sur la précision**.

1. Choisissez **Créer un tracker**. 

## Création d’une fonction Lambda
<a name="mqtt-with-lambda-create-lambda"></a>

Pour créer une connexion entre Amazon Location Service AWS IoT Core et Amazon, vous avez besoin d'une AWS Lambda fonction permettant de traiter les messages transférés par AWS IoT Core. Cette fonction permet d'extraire toutes les données de position, de les formater pour Amazon Location Service et de les envoyer via l'API Amazon Location Tracker. Vous pouvez créer cette fonction par le biais de la AWS Lambda console, ou vous pouvez utiliser le AWS Command Line Interface (AWS CLI) ou le AWS Lambda APIs. 

Pour créer une fonction Lambda qui publie des mises à jour de position sur Amazon Location à l'aide de la console :

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/home).

1. Dans le menu de navigation de gauche, choisissez **Functions**. 

1.  Choisissez **Créer une fonction** et assurez-vous que **l'option Auteur à partir de zéro** est sélectionnée. 

1. Remplissez les cases suivantes :
   + **Nom de la fonction** — Entrez un nom unique pour votre fonction. Les entrées valides incluent les caractères alphanumériques, les traits d'union et les traits de soulignement sans espaces. Par exemple, *MyLambda*.
   + **Runtime** — Choisissez*Python 3.8*.

1. Choisissez **Créer une fonction**. 

1. Cliquez sur l'onglet **Code** pour ouvrir l'éditeur.

1. [Remplacez le code de l'espace réservé `lambda_function.py` par le code suivant, en remplaçant la valeur attribuée `TRACKER_NAME` par le nom du tracker que vous avez créé comme condition préalable.](#mqtt-prerequisite-with-lambda)

   ```
   from datetime import datetime
   import json
   import os
   
   import boto3
   
   # Update this to match the name of your Tracker resource
   TRACKER_NAME = "MyTracker"
   
   """
   This Lambda function receives a payload from AWS IoT Core and publishes device updates to 
   Amazon Location Service via the BatchUpdateDevicePosition API.
   
   Parameter 'event' is the payload delivered from AWS IoT Core.
   
   In this sample, we assume that the payload has a single top-level key 'payload' and a nested key
   'location' with keys 'lat' and 'long'. We also assume that the name of the device is nested in
   the payload as 'deviceid'. Finally, the timestamp of the payload is present as 'timestamp'. For
   example:
   
   >>> event
   { 'payload': { 'deviceid': 'thing123', 'timestamp': 1604940328,
     'location': { 'lat': 49.2819, 'long': -123.1187 },
     'accuracy': {'Horizontal': 20.5 },
     'positionProperties': {'field1':'value1','field2':'value2'} }
   }
   
   If your data doesn't match this schema, you can either use the AWS IoT Core rules engine to
   format the data before delivering it to this Lambda function, or you can modify the code below to
   match it.
   """
   def lambda_handler(event, context):
     update = {
         "DeviceId": event["payload"]["deviceid"],
         "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"),
         "Position": [
           event["payload"]["location"]["long"],
           event["payload"]["location"]["lat"]
           ]
       }
     if "accuracy" in event["payload"]:
         update["Accuracy"] = event["payload"]['accuracy']
     if "positionProperties" in event["payload"]:
         update["PositionProperties"] = event["payload"]['positionProperties']
    
     client = boto3.client("location")
     response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update])
   
     return {
       "statusCode": 200,
       "body": json.dumps(response)
     }
   ```

1. Choisissez **Déployer** pour enregistrer la fonction mise à jour.

1. Cliquez sur l’onglet **Configuration**.

1. Dans la section **Autorisations**, choisissez le nom du rôle en lien hypertexte pour accorder à Amazon Location Service des autorisations pour votre fonction Lambda.

1. Sur la page **Résumé** de votre rôle, choisissez **Ajouter des autorisations**, puis dans la liste déroulante, sélectionnez **Créer une politique intégrée.**

1. Choisissez l'onglet **JSON** et remplacez la politique par le document suivant. Cela permet à votre fonction Lambda de mettre à jour les positions des appareils gérées par toutes les ressources de suivi dans toutes les régions.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "WriteDevicePosition",
         "Effect": "Allow",
         "Action": "geo:BatchUpdateDevicePosition",
         "Resource": "arn:aws:geo:*:*:tracker/*"
       }
     ]
   }
   ```

1. Choisissez **Examiner une politique**.

1. Entrez un nom de stratégie. Par exemple, *AmazonLocationTrackerWriteOnly*.

1. Choisissez **Create Policy** (Créer une politique).

Vous pouvez modifier ce code de fonction, le cas échéant, pour l'adapter au schéma de message de votre appareil.

## Création d'une AWS IoT Core règle
<a name="mqtt-create-iot-rule-with-lambda"></a>

Créez ensuite une AWS IoT Core règle pour transmettre la télémétrie de position de vos appareils à la AWS Lambda fonction de transformation et de publication sur Amazon Location Service. L'exemple de règle fourni suppose que toute transformation nécessaire des charges utiles des appareils est gérée par votre fonction Lambda. Vous pouvez créer cette règle via la AWS IoT Core console, le AWS Command Line Interface (AWS CLI) ou le AWS IoT Core APIs.

**Note**  
Bien que la AWS IoT console gère les autorisations nécessaires AWS IoT Core pour appeler votre fonction Lambda, si vous créez votre règle à partir du SDK AWS CLI ou du SDK, vous devez [configurer une politique à laquelle accorder](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html#lambda-rule-action-requirements) l'autorisation. AWS IoT

**Pour créer un à AWS IoT Core l'aide de la console**

1. Connectez-vous à la AWS IoT Core console à l'adresse [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Dans le volet de navigation de gauche, développez **Act**, puis sélectionnez **Rules**.

1. Choisissez **Créer une règle** pour démarrer le nouvel assistant de règles.

1. Saisissez un nom et une description pour la règle.

1. Pour l'**instruction de requête Rule**, mettez à jour l'`FROM`attribut pour faire référence à une rubrique dans laquelle au moins un appareil publie des données de télémétrie incluant la localisation. Si vous testez la solution, aucune modification n'est nécessaire.

   ```
   SELECT * FROM 'iot/topic'
   ```

1. Sous **Définir une ou plusieurs actions**, choisissez **Ajouter une action**.

1. Sélectionnez **Envoyer un message à une fonction Lambda.**

1. Choisissez **Configurer une action**.

1. Recherchez et sélectionnez votre fonction Lambda dans la liste.

1. Choisissez **Add action**.

1. Choisissez **Créer une règle**.

## Testez votre AWS IoT Core règle dans la console
<a name="mqtt-test-iot-rule-with-lambda"></a>

Si aucun appareil ne publie actuellement de télémétrie incluant la localisation, vous pouvez tester votre règle et cette solution à l'aide de la AWS IoT Core console. La console dispose d'un client de test dans lequel vous pouvez publier un exemple de message pour vérifier les résultats de la solution.

1. Connectez-vous à la AWS IoT Core console à l'adresse [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Dans le volet de navigation de gauche, développez **Test**, puis choisissez le **client de test MQTT**.

1. Sous **Publier dans un sujet**, définissez le **nom du sujet** sur *iot/topic* (ou le nom du sujet que vous avez défini dans votre AWS IoT Core règle, s'il est différent) et fournissez les informations suivantes pour la **charge utile du message**. Remplacez l'horodatage *1604940328* par un horodatage valide au cours des 30 derniers jours (tout horodatage de plus de 30 jours est ignoré).

   ```
   {
     "payload": {
       "deviceid": "thing123",
       "timestamp": 1604940328,
       "location": { "lat": 49.2819, "long": -123.1187 },
       "accuracy": { "Horizontal": 20.5 },
       "positionProperties": { "field1": "value1", "field2": "value2" }
     }
   }
   ```

1. Choisissez **Publier** dans le sujet pour envoyer le message de test.

1. Pour vérifier que le message a bien été reçu par Amazon Location Service, utilisez la AWS CLI commande suivante. Si vous les avez modifiés lors de la configuration, remplacez le nom du tracker et l'identifiant de l'appareil par ceux que vous avez utilisés.

   ```
   aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123
   ```