Implémentation du gestionnaire de tâches - Intégrations gérées pour AWS IoT Device Management

Managed Integrations for AWS IoT Device Management est en version préliminaire et est susceptible de changer. Pour y accéder, contactez-nous depuis la console des intégrations gérées.

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.

Implémentation du gestionnaire de tâches

Mettez en œuvre des opérations clés pour le traitement over-the-air (OTA) des mises à jour sur vos appareils. Vous allez configurer l'accès à Amazon S3 pour les documents de travail, créer des tâches OTA via l'API, traiter les documents de travail sur votre appareil et intégrer un agent OTA. Les étapes du schéma suivant illustrent la manière dont une demande de mise à jour over-the-air (OTA) est traitée par l'interaction entre le SDK du terminal et la fonctionnalité.

Le gestionnaire de tâches du SDK pour appareils finaux et la façon dont il gère les interactions entre vos appareils finaux et le cloud d'intégrations gérées.

Le gestionnaire de tâches traite les mises à jour OTA via les opérations clés suivantes :

Téléchargez et lancez les mises à jour

Téléchargez votre document de travail personnalisé (format JSON) dans un compartiment Amazon S3 et créez une tâche OTA à l'aide de l'CreateOtaTaskAPI. Incluez les paramètres suivants :

  • S3Url: l'adresse URL de votre document de travail

  • Target: un ensemble ARN d'objets gérés (jusqu'à 100 appareils)

Exemple de demande

aws iotmanagedintegrations create-ota-task --description JOB-DESCRIPTION \ --s3-url "s3://amzn-s3-demo-bucket/your-file.txt \ --protocol HTTP \ --target "arn:aws:iotmanagedintegrations:AWS-REGION:ACCOUNT-ID:managed-thing/${MANAGED-THING-ID}" \ --ota-mechanism PUSH --ota-type ONE_TIME \ --client-token foo

Configuration de l'accès à Amazon S3

Ajoutez une politique de compartiment Amazon S3 qui accorde aux intégrations gérées l'accès à vos documents de travail :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForS3JobDocument", "Effect": "Allow", "Principal": { "Service": "iotmanagedintegrations.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::YOUR_BUCKET/*", "arn:aws:s3:::YOUR_BUCKET/ota_job_document.json", "arn:aws:s3:::YOUR_BUCKET" ] } ] }

Traiter les documents de travail

Lorsque vous créez une tâche OTA, le gestionnaire de tâches exécute les étapes suivantes sur votre appareil. Lorsqu'une mise à jour est disponible, elle demande le document de travail via MQTT.

  1. S'abonne aux rubriques de notification MQTT

  2. Appelle l'StartNextPendingJobExecutionAPI pour les tâches en attente

  3. Reçoit les documents de travail disponibles

  4. Traite les mises à jour en fonction des délais que vous avez spécifiés

À l'aide du gestionnaire de tâches, l'application peut déterminer s'il convient d'agir immédiatement ou d'attendre un délai d'expiration spécifié.

Implémenter l'agent OTA

Lorsque vous recevez le document de travail provenant d'intégrations gérées, vous devez avoir implémenté votre propre agent OTA qui traite le document de travail, télécharge les mises à jour et effectue toutes les opérations d'installation. L'agent OTA doit effectuer les étapes suivantes.

  1. Analyser les documents de travail pour le microprogramme Amazon S3 URLs

  2. Téléchargez les mises à jour du microprogramme via HTTP

  3. Vérifier les signatures numériques

  4. Installer des mises à jour validées

  5. Appel iotmi_JobsHandler_updateJobStatus avec SUCCESS ou FAILED statut

Lorsque votre appareil termine avec succès l'opération OTA, il doit appeler l'iotmi_JobsHandler_updateJobStatusAPI avec un statut égal JobSucceeded à pour signaler une tâche réussie.

/** * @brief Enumeration of possible job statuses. */ typedef enum { JobQueued, /** The job is in the queue, waiting to be processed. */ JobInProgress, /** The job is currently being processed. */ JobFailed, /** The job processing failed. */ JobSucceeded, /** The job processing succeeded. */ JobRejected /** The job was rejected, possibly due to an error or invalid request. */ } iotmi_JobCurrentStatus_t; /** * @brief Update the status of a job with optional status details. * * @param[in] pJobId Pointer to the job ID string. * @param[in] jobIdLength Length of the job ID string. * @param[in] status The new status of the job. * @param[in] statusDetails Pointer to a string containing additional details about the job status. * This can be a JSON-formatted string or NULL if no details are needed. * @param[in] statusDetailsLength Length of the status details string. Set to 0 if `statusDetails` is NULL. * * @return 0 on success, non-zero on failure. */ int iotmi_JobsHandler_updateJobStatus( const char * pJobId, size_t jobIdLength, iotmi_JobCurrentStatus_t status, const char * statusDetails, size_t statusDetailsLength );