Comprendre et utiliser les jumeaux d’appareil IoT HubUnderstand and use device twins in IoT Hub

Les jumeaux d’appareil sont des documents JSON qui stockent des informations sur l’état des appareils (métadonnées, configurations et conditions).Device twins are JSON documents that store device state information including metadata, configurations, and conditions. Azure IoT Hub conserve un jumeau d’appareil pour chaque appareil que vous y connectez.Azure IoT Hub maintains a device twin for each device that you connect to IoT Hub.

Notes

Les fonctionnalités décrites dans cet article sont uniquement disponibles au niveau Standard d’IoT Hub.The features described in this article are only available in the standard tier of IoT hub. Pour plus d’informations sur les niveaux De base et Standard d’IoT Hub, consultez la page expliquant comment choisir le bon niveau IoT Hub.For more information about the basic and standard IoT Hub tiers, see How to choose the right IoT Hub tier.

Cet article aborde les points suivants :This article describes:

  • La structure du jumeau d’appareil : tags (balises), propriétés desired (souhaitées) et reported (signalées).The structure of the device twin: tags, desired and reported properties.
  • Les opérations que les applications d’appareil et back-ends peuvent effectuer sur des jumeaux d’appareil.The operations that device apps and back ends can perform on device twins.

Vous pouvez utiliser des jumeaux d’appareil pour répondre aux besoins suivants :Use device twins to:

  • Stocker les métadonnées spécifiques à l’appareil dans le cloud,Store device-specific metadata in the cloud. par exemple, l’emplacement de déploiement d’un distributeur automatique.For example, the deployment location of a vending machine.

  • Signaler les informations d’état actuel, telles que les capacités disponibles et les conditions, à partir de votre application pour appareil,Report current state information such as available capabilities and conditions from your device app. par exemple, un appareil connecté à votre hub IoT via un réseau mobile ou Wi-Fi.For example, a device is connected to your IoT hub over cellular or WiFi.

  • Synchroniser l’état des flux de travail de longue durée entre une application pour appareil et un back-end,Synchronize the state of long-running workflows between device app and back-end app. par exemple, lorsque le back-end de solution spécifie une nouvelle version de microprogramme à installer et que l’application pour appareil rapporte les différentes étapes du processus de mise à jour.For example, when the solution back end specifies the new firmware version to install, and the device app reports the various stages of the update process.

  • Interroger les métadonnées, la configuration ou l’état de vos appareilsQuery your device metadata, configuration, or state.

Pour des conseils sur l’utilisation des propriétés rapportées, des messages appareil-à-cloud ou du chargement de fichiers, consultez Recommandations sur les communications appareil-à-cloud.Refer to Device-to-cloud communication guidance for guidance on using reported properties, device-to-cloud messages, or file upload.

Pour des conseils sur l’utilisation des propriétés souhaitées, des méthodes directes ou des messages cloud-à-appareil, consultez Recommandations sur les communications cloud-à-appareil.Refer to Cloud-to-device communication guidance for guidance on using desired properties, direct methods, or cloud-to-device messages.

Jumeaux d’appareilDevice twins

Les jumeaux d’appareil stockent des informations relatives aux appareils, dont l’utilité est la suivante :Device twins store device-related information that:

  • Ils permettent à un appareil et à un back-end de synchroniser les conditions et la configuration de l’appareil.Device and back ends can use to synchronize device conditions and configuration.

  • Ils permettent à un back-end de solution d’interroger et de cibler des opérations de longue durée.The solution back end can use to query and target long-running operations.

Le cycle de vie d’un jumeau d’appareil est lié à l’identité d’appareil correspondante.The lifecycle of a device twin is linked to the corresponding device identity. Des jumeaux d’appareil sont implicitement créés et supprimés lors de la création ou de la suppression d’une identité d’appareil dans IoT Hub.Device twins are implicitly created and deleted when a device identity is created or deleted in IoT Hub.

Un jumeau d’appareil est un document JSON incluant les éléments suivants :A device twin is a JSON document that includes:

  • Balises.Tags. Une section du document JSON accessible en lecture et en écriture par le serveur principal de solution.A section of the JSON document that the solution back end can read from and write to. Les balises ne sont pas visibles pour des applications pour appareil.Tags are not visible to device apps.

  • Propriétés souhaitées.Desired properties. Utilisées en même temps que les propriétés signalées pour synchroniser une configuration ou une condition d’appareil.Used along with reported properties to synchronize device configuration or conditions. Le serveur principal de solution peut définir les propriétés souhaitées, et l’application d’appareil peut les lire.The solution back end can set desired properties, and the device app can read them. L’application d’appareil peut également recevoir des notifications sur les changements des propriétés souhaitées.The device app can also receive notifications of changes in the desired properties.

  • Propriétés signalées (Reported) .Reported properties. Utilisées en même temps que les propriétés souhaitées pour synchroniser une configuration ou une condition d’appareil.Used along with desired properties to synchronize device configuration or conditions. L’application d’appareil peut définir les propriétés signalées, et le serveur principal de solution peut les lire et les interroger.The device app can set reported properties, and the solution back end can read and query them.

  • Propriétés d’identité des appareils.Device identity properties. La racine du document JSON du jumeau d’appareil contient les propriétés en lecture seule de l’identité d’appareil correspondante stockées dans le registre des identités.The root of the device twin JSON document contains the read-only properties from the corresponding device identity stored in the identity registry.

Capture d’écran des propriétés de jumeau d’appareil

L’exemple suivant montre un document JSON de jumeau d’appareil :The following example shows a device twin JSON document:

{
    "deviceId": "devA",
    "etag": "AAAAAAAAAAc=", 
    "status": "enabled",
    "statusReason": "provisioned",
    "statusUpdateTime": "0001-01-01T00:00:00",
    "connectionState": "connected",
    "lastActivityTime": "2015-02-30T16:24:48.789Z",
    "cloudToDeviceMessageCount": 0, 
    "authenticationType": "sas",
    "x509Thumbprint": {     
        "primaryThumbprint": null, 
        "secondaryThumbprint": null 
    }, 
    "version": 2, 
    "tags": {
        "$etag": "123",
        "deploymentLocation": {
            "building": "43",
            "floor": "1"
        }
    },
    "properties": {
        "desired": {
            "telemetryConfig": {
                "sendFrequency": "5m"
            },
            "$metadata" : {...},
            "$version": 1
        },
        "reported": {
            "telemetryConfig": {
                "sendFrequency": "5m",
                "status": "success"
            },
            "batteryLevel": 55,
            "$metadata" : {...},
            "$version": 4
        }
    }
}

L’objet racine contient les propriétés d’identité des appareils et des objets conteneur pour tags et les propriétés reported et desired.In the root object are the device identity properties, and container objects for tags and both reported and desired properties. Le conteneur properties contient des éléments en lecture seule ($metadata, $etag et $version) décrits dans les sections Métadonnées de jumeau d’appareil et Accès concurrentiel optimiste.The properties container contains some read-only elements ($metadata, $etag, and $version) described in the Device twin metadata and Optimistic concurrency sections.

Exemple de propriété signalée (Reported)Reported property example

Dans l’exemple précédent, le jumeau d’appareil contient une propriété batteryLevel qui est signalée par l’application d’appareil.In the previous example, the device twin contains a batteryLevel property that is reported by the device app. Cette propriété permet d’interroger des appareils et d’agir sur ceux-ci en fonction du dernier niveau signalé de charge de la batterie.This property makes it possible to query and operate on devices based on the last reported battery level. D’autres exemples incluent une application d’appareil signalant des capacités d’appareil ou des options de connectivité.Other examples include the device app reporting device capabilities or connectivity options.

Notes

Les propriétés signalées simplifient les scénarios où le serveur principal de solution s’intéresse à la dernière valeur connue d’une propriété.Reported properties simplify scenarios where the solution back end is interested in the last known value of a property. Si le back-end de la solution doit traiter une télémétrie d’appareil se présentant sous la forme de séquences d’événements horodatés, telles que des séries chronologiques, utilisez des messages appareil-à-cloud.Use device-to-cloud messages if the solution back end needs to process device telemetry in the form of sequences of timestamped events, such as time series.

Exemple de propriété souhaitéeDesired property example

Dans l’exemple précédent, les propriétés souhaitées et signalées du jumeau d’appareil telemetryConfig sont utilisées par le serveur principal d’application et l’application d’appareil pour synchroniser la configuration de la télémétrie pour cet appareil.In the previous example, the telemetryConfig device twin desired and reported properties are used by the solution back end and the device app to synchronize the telemetry configuration for this device. Par exemple :For example:

  1. Le serveur principal de solution définit la propriété souhaitée avec la valeur de configuration souhaitée.The solution back end sets the desired property with the desired configuration value. Voici la partie du document contenant la propriété souhaitée (Desired) définie :Here is the portion of the document with the desired property set:

    "desired": {
        "telemetryConfig": {
            "sendFrequency": "5m"
        },
        ...
    },
    
  2. L’application d’appareil est informée de la modification, immédiatement si elle est connectée ou à la première de la reconnexion.The device app is notified of the change immediately if connected, or at the first reconnect. L’application d’appareil signale ensuite la configuration mise à jour (ou une condition d’erreur à l’aide de la propriété status).The device app then reports the updated configuration (or an error condition using the status property). Voici la partie contenant les propriétés signalées :Here is the portion of the reported properties:

    "reported": {
        "telemetryConfig": {
            "sendFrequency": "5m",
            "status": "success"
        }
        ...
    }
    
  3. Le back-end de la solution peut suivre les résultats de l’opération de configuration sur de nombreux appareils en interrogeant les jumeaux d’appareil.The solution back end can track the results of the configuration operation across many devices by querying device twins.

Notes

Les extraits de code précédents sont des exemples, optimisés pour la lisibilité, de manière possible d’encoder la configuration d’un appareil et son état.The preceding snippets are examples, optimized for readability, of one way to encode a device configuration and its status. IoT Hub n’impose pas de schéma spécifique pour les propriétés souhaitées et signalées de jumeau d’appareil dans les jumeaux d’appareil.IoT Hub does not impose a specific schema for the device twin desired and reported properties in the device twins.

Vous pouvez utiliser des jumeaux pour synchroniser des opérations de longue durée, telles que des mises à jour de microprogramme.You can use twins to synchronize long-running operations such as firmware updates. Pour plus d’informations sur l’utilisation de propriétés pour synchroniser et suivre une opération de longue durée sur des appareils, consultez Utiliser des propriétés souhaitées pour configurer des appareils.For more information on how to use properties to synchronize and track a long running operation across devices, see Use desired properties to configure devices.

Opérations principalesBack-end operations

Le back-end de solution opère sur le jumeau d’appareil en utilisant les opérations atomiques suivantes, exposées par le biais du protocole HTTPS :The solution back end operates on the device twin using the following atomic operations, exposed through HTTPS:

  • Récupérer le jumeau d’appareil par son ID.Retrieve device twin by ID. Cette opération renvoie le contenu du document du jumeau d’appareil, à savoir les Tags (balises) et les propriétés système souhaitées (Desired) et signalées (Reported).This operation returns the device twin document, including tags and desired and reported system properties.

  • Mettre à jour partiellement le jumeau d’appareil.Partially update device twin. Cette opération permet au serveur principal de solution de mettre à jour partiellement les Tags (balises) ou les propriétés souhaitées (Desired) dans un jumeau d’appareil.This operation enables the solution back end to partially update the tags or desired properties in a device twin. La mise à jour partielle est exprimée sous la forme d’un document JSON qui ajoute ou met à jour toute propriété.The partial update is expressed as a JSON document that adds or updates any property. Les propriétés définies sur null sont supprimées.Properties set to null are removed. L’exemple suivant crée une propriété souhaitée avec la valeur {"newProperty": "newValue"}, remplace la valeur existante de existingProperty par "otherNewValue" et supprime otherOldProperty.The following example creates a new desired property with value {"newProperty": "newValue"}, overwrites the existing value of existingProperty with "otherNewValue", and removes otherOldProperty. Aucune autre modification n’est apportée aux autres propriétés souhaitées ou Tags existants :No other changes are made to existing desired properties or tags:

    {
         "properties": {
             "desired": {
                 "newProperty": {
                     "nestedProperty": "newValue"
                 },
                 "existingProperty": "otherNewValue",
                 "otherOldProperty": null
             }
         }
    }
    
  • Remplacer des propriétés souhaitées.Replace desired properties. Cette opération permet au serveur principal de la solution de remplacer complètement toutes les propriétés souhaitées existantes, et de remplacer properties/desired par un nouveau document JSON.This operation enables the solution back end to completely overwrite all existing desired properties and substitute a new JSON document for properties/desired.

  • Remplacer des Tags.Replace tags. Cette opération permet au serveur principal de la solution de remplacer complètement tous les Tags existants, et de remplacer tags par un nouveau document JSON.This operation enables the solution back end to completely overwrite all existing tags and substitute a new JSON document for tags.

  • Recevoir des notifications jumelles.Receive twin notifications. Cette opération permet au back-end de la solution d’être notifié lorsque le jumeau est modifié.This operation allows the solution back end to be notified when the twin is modified. Pour ce faire, votre solution IoT doit créer un itinéraire et définir la source de données équivalente à twinChangeEvents.To do so, your IoT solution needs to create a route and to set the Data Source equal to twinChangeEvents. Par défaut, aucune route n’existe, donc aucune notification jumelle n’est envoyée.By default, no such routes pre-exist, so no twin notifications are sent. Si le taux de variation est trop élevé, ou pour d’autres raisons, telles que des défaillances internes, IoT Hub peut envoyer une seule notification qui contient toutes les modifications.If the rate of change is too high, or for other reasons such as internal failures, the IoT Hub might send only one notification that contains all changes. Par conséquent, si l’audit et la journalisation fiables de tous les états intermédiaires sont nécessaires pour votre application, vous devez utiliser des messages appareil-à-cloud.Therefore, if your application needs reliable auditing and logging of all intermediate states, you should use device-to-cloud messages. Le message de notification jumelle inclut le corps et les propriétés.The twin notification message includes properties and body.

    • propertiesProperties

      NomName ValeurValue
      $content-type$content-type application/jsonapplication/json
      $iothub-enqueuedtime$iothub-enqueuedtime Heure d’envoi de la notificationTime when the notification was sent
      $iothub-message-source$iothub-message-source twinChangeEventstwinChangeEvents
      $content-encoding$content-encoding utf-8utf-8
      deviceIddeviceId ID de l’appareilID of the device
      hubNamehubName Nom de l’IoT HubName of IoT Hub
      operationTimestampoperationTimestamp Horodatage ISO8601 de l’opérationISO8601 timestamp of operation
      iothub-message-schemaiothub-message-schema deviceLifecycleNotificationdeviceLifecycleNotification
      opTypeopType « replaceTwin » ou « updateTwin »"replaceTwin" or "updateTwin"

      Les propriétés système du message ont pour préfixe le symbole $.Message system properties are prefixed with the $ symbol.

    • bodyBody

      Cette section comprend toutes les modifications de double dans un format JSON.This section includes all the twin changes in a JSON format. Il utilise le même format sous forme de correctif, à la différence près qu’il peut contenir toutes les sections jumelles : balises, properties.reported, properties.desired et qu’il contient les éléments « $metadata ».It uses the same format as a patch, with the difference that it can contain all twin sections: tags, properties.reported, properties.desired, and that it contains the “$metadata” elements. Par exemple,For example,

      {
        "properties": {
            "desired": {
                "$metadata": {
                    "$lastUpdated": "2016-02-30T16:24:48.789Z"
                },
                "$version": 1
            },
            "reported": {
                "$metadata": {
                    "$lastUpdated": "2016-02-30T16:24:48.789Z"
                },
                "$version": 1
            }
        }
      }
      

Toutes les opérations précédentes prennent en charge l’accès concurrentiel optimiste et nécessitent l’autorisation ServiceConnect définie dans Contrôler l’accès à IoT Hub.All the preceding operations support Optimistic concurrency and require the ServiceConnect permission, as defined in Control access to IoT Hub.

En plus de ces opérations, le back-end de la solution peut :In addition to these operations, the solution back end can:

  • Interroger les jumeaux d’appareil à l’aide du langage de requête IoT Hub similaire à SQL.Query the device twins using the SQL-like IoT Hub query language.

  • Effectuer des opérations sur les grands ensembles de jumeaux d’appareil à l’aide de travaux.Perform operations on large sets of device twins using jobs.

Opérations d’appareilDevice operations

L’application d’appareil opère sur le jumeau d’appareil en utilisant les opérations atomiques suivantes :The device app operates on the device twin using the following atomic operations:

  • Récupérer le jumeau d’appareil.Retrieve device twin. Cette opération renvoie le contenu du document du jumeau d’appareil, à savoir les Tags (Balises) et les propriétés système souhaitées (Desired) et signalées (Reported), pour l’appareil actuellement connecté.This operation returns the device twin document (including tags and desired and reported system properties) for the currently connected device.

  • Mettre à jour partiellement les propriétés signalées (Reported) .Partially update reported properties. Cette opération permet la mise à jour partielle des propriétés signalées de l’appareil actuellement connecté.This operation enables the partial update of the reported properties of the currently connected device. Cette opération utilise le même format de mise à jour JSON que le serveur principal de solution utilise pour une mise à jour partielle des propriétés souhaitées.This operation uses the same JSON update format that the solution back end uses for a partial update of desired properties.

  • Observer les propriétés souhaitées (Desired) .Observe desired properties. L’appareil actuellement connecté peut choisir d’être informé des mises à jour des propriétés souhaitées au moment où elles se produisent.The currently connected device can choose to be notified of updates to the desired properties when they happen. L’appareil reçoit la forme de mise à jour (remplacement partiel ou complet) exécutée par le serveur principal de la solution.The device receives the same form of update (partial or full replacement) executed by the solution back end.

Toutes les opérations précédentes nécessitent l’autorisation DeviceConnect, comme défini dans Contrôler l’accès à IoT Hub.All the preceding operations require the DeviceConnect permission, as defined in Control Access to IoT Hub.

Les kits Azure IoT device SDK simplifient l’utilisation des opérations précédentes dans un grand nombre de langages et de plateformes.The Azure IoT device SDKs make it easy to use the preceding operations from many languages and platforms. Pour plus d’informations sur les détails des primitives d’IoT Hub concernant la synchronisation des propriétés souhaitées, consultez Flux de reconnexion d’appareil.For more information on the details of IoT Hub primitives for desired properties synchronization, see Device reconnection flow.

Format des Tags et propriétésTags and properties format

Les Tags (balises) ainsi que les propriétés souhaitées (Desired) et signalées (Reported) sont des objets JSON soumis aux restrictions suivantes :Tags, desired properties, and reported properties are JSON objects with the following restrictions:

  • Toutes les clés dans des objets JSON sont des chaînes UNICODE UTF-8 de 64 octets respectant la casse.All keys in JSON objects are case-sensitive 64 bytes UTF-8 UNICODE strings. Les caractères autorisés excluent les caractères de contrôle UNICODE (segments C0 et C1), ainsi que ., $ et SP.Allowed characters exclude UNICODE control characters (segments C0 and C1), and ., $, and SP.

  • Toutes les valeurs figurant dans les objets JSON peuvent être des types JSON suivants : booléen, nombre, chaîne, objet.All values in JSON objects can be of the following JSON types: boolean, number, string, object. Les tableaux ne sont pas autorisés.Arrays are not allowed. La valeur maximale pour les entiers est 4503599627370495, tandis que la valeur minimale pour les entiers est-4503599627370496.The maximum value for integers is 4503599627370495 and the minimum value for integers is -4503599627370496.

  • Tous les objets JSON dans les balises ainsi que dans les propriétés souhaitées et signalées, peuvent avoir une profondeur maximale de 5.All JSON objects in tags, desired, and reported properties can have a maximum depth of 5. Par exemple, l’objet suivant est valide :For instance, the following object is valid:

    {
         ...
         "tags": {
             "one": {
                 "two": {
                     "three": {
                         "four": {
                             "five": {
                                 "property": "value"
                             }
                         }
                     }
                 }
             }
         },
         ...
    }
    
  • Aucune valeur de chaîne ne peut avoir une longueur supérieure à 512 octets.All string values can be at most 512 bytes in length.

Taille de jumeau d’appareilDevice twin size

IoT Hub impose une limite de taille de 8 Ko à chacune des valeurs totales respectives de tags, de properties/desired et de properties/reported, à l’exception des éléments en lecture seule.IoT Hub enforces an 8KB size limitation on each of the respective total values of tags, properties/desired, and properties/reported, excluding read-only elements.

La taille est calculée en comptant tous les caractères à l’exception des caractères de contrôle UNICODE (segments C0 et C1) et des espaces qui apparaissent en dehors d’une constante de chaîne.The size is computed by counting all characters, excluding UNICODE control characters (segments C0 and C1) and spaces that are outside of string constants.

IoT Hub rejette en générant une erreur toute opération susceptible d’augmenter la taille de ces documents au-delà de la limite.IoT Hub rejects with an error all operations that would increase the size of those documents above the limit.

Métadonnées de jumeau d’appareilDevice twin metadata

IoT Hub tient à jour l’horodateur de la dernière mise à jour de chaque objet JSON dans les propriétés souhaitées et signalées du jumeau d’appareil.IoT Hub maintains the timestamp of the last update for each JSON object in device twin desired and reported properties. Les horodateurs sont exprimés en UTC et codés au format ISO8601 YYYY-MM-DDTHH:MM:SS.mmmZ.The timestamps are in UTC and encoded in the ISO8601 format YYYY-MM-DDTHH:MM:SS.mmmZ.

Par exemple :For example:

{
    ...
    "properties": {
        "desired": {
            "telemetryConfig": {
                "sendFrequency": "5m"
            },
            "$metadata": {
                "telemetryConfig": {
                    "sendFrequency": {
                        "$lastUpdated": "2016-03-30T16:24:48.789Z"
                    },
                    "$lastUpdated": "2016-03-30T16:24:48.789Z"
                },
                "$lastUpdated": "2016-03-30T16:24:48.789Z"
            },
            "$version": 23
        },
        "reported": {
            "telemetryConfig": {
                "sendFrequency": "5m",
                "status": "success"
            },
            "batteryLevel": "55%",
            "$metadata": {
                "telemetryConfig": {
                    "sendFrequency": "5m",
                    "status": {
                        "$lastUpdated": "2016-03-31T16:35:48.789Z"
                    },
                    "$lastUpdated": "2016-03-31T16:35:48.789Z"
                },
                "batteryLevel": {
                    "$lastUpdated": "2016-04-01T16:35:48.789Z"
                },
                "$lastUpdated": "2016-04-01T16:24:48.789Z"
            },
            "$version": 123
        }
    }
    ...
}

Ces informations sont conservées à chaque niveau (pas uniquement celui des feuilles de la structure JSON) afin de préserver les mises à jour qui suppriment des clés d’objet.This information is kept at every level (not just the leaves of the JSON structure) to preserve updates that remove object keys.

Accès concurrentiel optimisteOptimistic concurrency

Les Tags ainsi que les propriétés souhaitées (Desired) et signalées (Reported) prennent en charge l’accès concurrentiel optimiste.Tags, desired, and reported properties all support optimistic concurrency. Les Tags ont un ETag, conforme à la norme RFC7232, correspondant à leur représentation JSON.Tags have an ETag, as per RFC7232, that represents the tag's JSON representation. Vous pouvez utiliser les ETags dans des opérations de mise à jour conditionnelle à partir du serveur principal de solution pour assurer la cohérence.You can use ETags in conditional update operations from the solution back end to ensure consistency.

Les propriétés souhaitées et signalées du jumeau d’appareil n’ont pas d’ETag, mais une valeur $version dont la nature incrémentielle est garantie.Device twin desired and reported properties do not have ETags, but have a $version value that is guaranteed to be incremental. De même qu’un ETag, la version peut être utilisée par la partie effectuant la mise à jour afin d’assurer la cohérence des mises à jour.Similarly to an ETag, the version can be used by the updating party to enforce consistency of updates. Par exemple, une application d’appareil pour une propriété signalée ou le serveur principal de solution pour une propriété souhaitée.For example, a device app for a reported property or the solution back end for a desired property.

Les versions sont également utiles quand un agent observateur (par exemple, l’application d’appareil observant les propriétés souhaitées) doit concilier des concurrences entre les résultats d’une opération de récupération et d’une notification de mise à jour.Versions are also useful when an observing agent (such as the device app observing the desired properties) must reconcile races between the result of a retrieve operation and an update notification. Pour plus d’informations, consultez la section Flux de reconnexion d’appareil.The Device reconnection flow section provides more information.

Flux de reconnexion d’appareilDevice reconnection flow

IoT Hub ne conserve pas les notifications de mise à jour de propriétés souhaitées pour les appareils déconnectés.IoT Hub does not preserve desired properties update notifications for disconnected devices. Il en résulte qu’un appareil qui se connecte doit récupérer le document complet des propriétés souhaitées, en plus de s’abonner aux notifications de mise à jour.It follows that a device that is connecting must retrieve the full desired properties document, in addition to subscribing for update notifications. Étant donné la possibilité de concurrences entre les notifications de mise à jour et la récupération complète, le flux suivant doit être assuré :Given the possibility of races between update notifications and full retrieval, the following flow must be ensured:

  1. L’application d’appareil se connecte à un hub IoT.Device app connects to an IoT hub.
  2. L’application d’appareil s’abonne aux notifications de mise à jour des propriétés souhaitées.Device app subscribes for desired properties update notifications.
  3. L’application d’appareil récupère le document complet pour les propriétés souhaitées.Device app retrieves the full document for desired properties.

L’application d’appareil peut ignorer toutes les notifications dont la $version a une valeur inférieure ou égale à la version du document complet récupéré.The device app can ignore all notifications with $version less or equal than the version of the full retrieved document. Cette approche est possible, car IoT Hub garantit que les numéros de version sont toujours incrémentiels.This approach is possible because IoT Hub guarantees that versions always increment.

Notes

Cette logique est déjà implémentée dans les kits Azure IoT device SDK.This logic is already implemented in the Azure IoT device SDKs. Cette description est utile uniquement lorsque l’application d’appareil ne peut utiliser aucun des kits Azure IoT device SDK et que vous devez programmer l’interface MQTT directement.This description is useful only if the device app cannot use any of Azure IoT device SDKs and must program the MQTT interface directly.

Matériel de référence supplémentaireAdditional reference material

Les autres rubriques de référence dans le Guide du développeur IoT Hub comprennent :Other reference topics in the IoT Hub developer guide include:

Étapes suivantesNext steps

À présent que vous savez ce que sont des jumeaux d’appareil, vous serez peut-être intéressé par les rubriques suivantes du Guide du développeur IoT Hub :Now you have learned about device twins, you may be interested in the following IoT Hub developer guide topics:

Pour tenter de mettre en pratique certains des concepts décrits dans cet article, consultez les didacticiels IoT Hub suivants :To try out some of the concepts described in this article, see the following IoT Hub tutorials: