Comprendere e usare dispositivi gemelli nell'hub IoTUnderstand and use device twins in IoT Hub

I dispositivi gemelli sono documenti JSON nei quali vengono archiviate informazioni sullo stato dei dispositivi, ad esempio metadati, configurazioni e condizioni.Device twins are JSON documents that store device state information including metadata, configurations, and conditions. L'hub IoT di Azure mantiene un dispositivo gemello per ogni dispositivo che viene connesso all'hub IoT.Azure IoT Hub maintains a device twin for each device that you connect to IoT Hub. L'articolo illustra:This article describes:

  • la struttura del dispositivo gemello: tag, proprietà desiderate e segnalate.The structure of the device twin: tags, desired and reported properties.
  • Le operazioni che le app per dispositivo e i back-end possono eseguire sui dispositivi gemelli.The operations that device apps and back ends can perform on device twins.

Usare i dispositivi gemelli per:Use device twins to:

  • Archiviare i metadati specifici del dispositivo nel cloud,Store device-specific metadata in the cloud. ad esempio il percorso di distribuzione di un distributore automatico.For example, the deployment location of a vending machine.
  • Segnalare informazioni sullo stato corrente, come funzionalità disponibili e condizioni dall'app per dispositivo.Report current state information such as available capabilities and conditions from your device app. Ad esempio, un dispositivo è connesso all'hub IoT mediante il cellulare o il Wi-Fi.For example, a device is connected to your IoT hub over cellular or WiFi.
  • Sincronizzare lo stato dei flussi di lavoro a esecuzione prolungata tra l'app per dispositivi e back-end,Synchronize the state of long-running workflows between device app and back-end app. ad esempio quando il back-end della soluzione specifica la nuova versione del firmware da installare e l'app per dispositivo segnala le varie fasi del processo di aggiornamento.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.
  • Eseguire query sui metadati, la configurazione o lo stato dei dispositivi.Query your device metadata, configuration, or state.

Vedere Indicazioni sulle comunicazioni da dispositivo a cloud per informazioni sull'uso delle proprietà indicate, dei messaggi da dispositivo a cloud o del caricamento di file.Refer to Device-to-cloud communication guidance for guidance on using reported properties, device-to-cloud messages, or file upload. Vedere Indicazioni sulle comunicazioni da cloud a dispositivo per informazioni sull'uso delle proprietà specifiche, dei metodi diretti o dei messaggi da cloud a dispositivo.Refer to Cloud-to-device communication guidance for guidance on using desired properties, direct methods, or cloud-to-device messages.

Dispositivi gemelliDevice twins

I dispositivi gemelli consentono di archiviare informazioni sul dispositivo che possono essere usate:Device twins store device-related information that:

  • Dal dispositivo e dai back-end per sincronizzare condizioni e configurazione del dispositivo.Device and back ends can use to synchronize device conditions and configuration.
  • Dal back-end della soluzione per eseguire query e come destinazione delle operazioni a esecuzione prolungata.The solution back end can use to query and target long-running operations.

Il ciclo di vita di un dispositivo gemello è correlato all'identità del dispositivo corrispondente.The lifecycle of a device twin is linked to the corresponding device identity. I dispositivi gemelli vengono creati ed eliminati implicitamente quando viene creata o eliminata un'identità del dispositivo nell'hub IoT.Device twins are implicitly created and deleted when a device identity is created or deleted in IoT Hub.

Un dispositivo gemello è un documento JSON che include:A device twin is a JSON document that includes:

  • Tag.Tags. Una sezione del documento JSON che il back-end della soluzione è in grado di leggere e in cui può scrivere.A section of the JSON document that the solution back end can read from and write to. I tag non sono visibili alle applicazioni per dispositivi.Tags are not visible to device apps.
  • Proprietà desiderate.Desired properties. Sono usate insieme alle proprietà segnalate per sincronizzare la configurazione o le condizioni del dispositivo.Used along with reported properties to synchronize device configuration or conditions. Il back-end della soluzione è in grado di impostare le proprietà desiderate e l'app per dispositivo è in grado di leggerle.The solution back end can set desired properties, and the device app can read them. L'app per dispositivo può anche ricevere notifiche relative alle modifiche apportate alle proprietà desiderate.The device app can also receive notifications of changes in the desired properties.
  • Proprietà segnalate.Reported properties. Sono usate insieme alle proprietà desiderate per sincronizzare la configurazione o le condizioni del dispositivo.Used along with desired properties to synchronize device configuration or conditions. L'app per dispositivo è in grado di impostare le proprietà segnalate, mentre il back-end della soluzione è in grado di fare delle query.The device app can set reported properties, and the solution back end can read and query them.

La radice del documento JSON del dispositivo gemello, inoltre, contiene le proprietà di sola lettura dell'identità di dispositivo corrispondente archiviata nel registro delle identità.Additionally, the root of the device twin JSON document contains the read-only properties from the corresponding device identity stored in the identity registry.

L'esempio seguente illustra un documento JSON del dispositivo gemello:The following example shows a device twin JSON document:

    {
        "deviceId": "devA",
        "generationId": "123",
        "status": "enabled",
        "statusReason": "provisioned",
        "connectionState": "connected",
        "connectionStateUpdatedTime": "2015-02-28T16:24:48.789Z",
        "lastActivityTime": "2015-02-30T16:24:48.789Z",

        "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
            }
        }
    }

Nell'oggetto radice si trovano le proprietà di sistema e gli oggetti contenitore per tags ed entrambe le proprietà reported e desired.In the root object, are the system properties, and container objects for tags and both reported and desired properties. Nel contenitore properties sono presenti alcuni elementi di sola lettura ($metadata, $etag e $version) descritti nelle sezioni Metadati del dispositivo gemello e Concorrenza ottimistica.The properties container contains some read-only elements ($metadata, $etag, and $version) described in the Device twin metadata and Optimistic concurrency sections.

Esempio di proprietà segnalataReported property example

Nell'esempio precedente, il dispositivo gemello contiene la proprietà batteryLevel che viene segnalata dall'app per dispositivo.In the previous example, the device twin contains a batteryLevel property that is reported by the device app. Questa proprietà consente di eseguire una query e di far funzionare i dispositivi in base al livello di carica della batteria più recente segnalato.This property makes it possible to query and operate on devices based on the last reported battery level. Altri esempi sono l'app per dispositivo che segnala le funzionalità o le opzioni di connettività del dispositivo.Other examples include the device app reporting device capabilities or connectivity options.

Nota

Le proprietà segnalate semplificano gli scenari in cui il back-end della soluzione è interessato all'ultimo valore noto di una proprietà.Reported properties simplify scenarios where the solution back end is interested in the last known value of a property. Usare i messaggi dal dispositivo al cloud se il back-end della soluzione deve elaborare la telemetria del dispositivo in forma di sequenze di eventi con timestamp, ad esempio una serie temporale.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.

Esempio di proprietà desiderataDesired property example

Nell'esempio precedente le proprietà desiderate e segnalate del dispositivo gemello telemetryConfig vengono usate dal back-end della soluzione e dall'app per dispositivo per sincronizzare la configurazione della telemetria per questo dispositivo.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. Ad esempio:For example:

  1. Il back-end della soluzione imposta la proprietà desiderata sul valore di configurazione desiderato.The solution back end sets the desired property with the desired configuration value. Questa è la parte del documento con il set di proprietà desiderate:Here is the portion of the document with the desired property set:

     ...
     "desired": {
         "telemetryConfig": {
             "sendFrequency": "5m"
         },
         ...
     },
     ...
    
  2. L'applicazione per dispositivo riceve notifica della modifica immediatamente se connessa o alla prima riconnessione.The device app is notified of the change immediately if connected, or at the first reconnect. L'app segnala quindi la configurazione aggiornata o una condizione di errore riscontrata nell'uso della proprietà status.The device app then reports the updated configuration (or an error condition using the status property). Questa è la parte con le proprietà segnalate:Here is the portion of the reported properties:

     ...
     "reported": {
         "telemetryConfig": {
             "sendFrequency": "5m",
             "status": "success"
         }
         ...
     }
     ...
    
  3. Il back-end della soluzione può tenere traccia dei risultati dell'operazione di configurazione su più dispositivi, eseguendo query sui dispositivi gemelli.The solution back end can track the results of the configuration operation across many devices, by querying device twins.

Nota

I frammenti di codice precedenti sono esempi ottimizzati per una migliore leggibilità, di un modo per codificare una configurazione del dispositivo e il relativo stato.The preceding snippets are examples, optimized for readability, of one way to encode a device configuration and its status. L'hub IoT non impone uno schema specifico per l'uso delle proprietà desiderate e segnalate del dispositivo gemello nei dispositivi gemelli.IoT Hub does not impose a specific schema for the device twin desired and reported properties in the device twins.

È possibile usare i gemelli per sincronizzare le operazioni a esecuzione prolungata, ad esempio gli aggiornamenti del firmware.You can use twins to synchronize long-running operations such as firmware updates. Per altre informazioni su come usare le proprietà per sincronizzare e tenere traccia dell'operazione a esecuzione prolungata sui dispositivi, vedere Usare le proprietà desiderate per configurare i dispositivi.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.

Operazioni di back-endBack-end operations

Il back-end della soluzione opera sul dispositivo gemello tramite le seguenti operazioni atomiche esposte tramite HTTPS:The solution back end operates on the device twin using the following atomic operations, exposed through HTTPS:

  • Recuperare un dispositivo gemello tramite ID. Questa operazione restituisce il documento del dispositivo gemello, inclusi tag e proprietà di sistema desiderate e segnalate.Retrieve device twin by id. This operation returns the device twin document, including tags and desired and reported system properties.
  • Aggiornare parzialmente il dispositivo gemello.Partially update device twin. Questa operazione consente al back-end della soluzione di aggiornare parzialmente i tag o le proprietà desiderate di un dispositivo gemello.This operation enables the solution back end to partially update the tags or desired properties in a device twin. L'aggiornamento parziale è espresso come documento JSON che aggiunge o aggiorna tutte le proprietà.The partial update is expressed as a JSON document that adds or updates any property. Le proprietà impostate su null vengono rimosse.Properties set to null are removed. L'esempio seguente crea una nuova proprietà desiderata con valore {"newProperty": "newValue"}, sostituisce il valore esistente di existingProperty con "otherNewValue", e rimuove otherOldProperty.The following example creates a new desired property with value {"newProperty": "newValue"}, overwrites the existing value of existingProperty with "otherNewValue", and removes otherOldProperty. Non vengono apportate altre modifiche alle altre proprietà desiderate o ai tag esistenti:No other changes are made to existing desired properties or tags:

      {
          "properties": {
              "desired": {
                  "newProperty": {
                      "nestedProperty": "newValue"
                  },
                  "existingProperty": "otherNewValue",
                  "otherOldProperty": null
              }
          }
      }
    
  • Sostituzione di proprietà desiderate.Replace desired properties. Questa operazione consente al back-end della soluzione di sovrascrivere completamente tutte le proprietà desiderate esistenti e di sostituirle con un nuovo documento JSON properties/desired.This operation enables the solution back end to completely overwrite all existing desired properties and substitute a new JSON document for properties/desired.
  • Sostituzione di tag.Replace tags. Questa operazione consente al back-end della soluzione di sovrascrivere completamente tutti i tag esistenti e di sostituirli con un nuovo documento JSON tags.This operation enables the solution back end to completely overwrite all existing tags and substitute a new JSON document for tags.
  • Ricezione di notifiche relative al dispositivo gemello.Receive twin notifications. Questa operazione invia notifiche al back-end della soluzione a ogni modifica del dispositivo gemello.This operation allows the solution back end to be notified when the twin is modified. A questo scopo, la soluzione IoT deve creare una route e impostare l'origine dati su twinChangeEvents.To do so, your IoT solution needs to create a route and to set the Data Source equal to twinChangeEvents. Per impostazione predefinita, non viene inviata alcuna notifica, ovvero queste route non sono preesistenti.By default, no twin notifications are sent, that is, no such routes pre-exist. Se la frequenza delle modifiche è troppo elevata o per altri motivi, ad esempio un errore interno, l'hub IoT potrebbe inviare solo una notifica che contiene tutte le modifiche.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. Di conseguenza, se l'applicazione ha bisogno di controllo e registrazione affidabili di tutti gli stati intermedi, è consigliabile continuare a usare i messaggi D2C.So, if your application needs reliable auditing and logging of all intermediate states, then it is still recommended that you use D2C messages. Il messaggio di notifica relativo al dispositivo gemello include le proprietà e il corpo.The twin notification message includes properties and body.

    • ProprietàProperties

      NomeName ValoreValue
      $content-type$content-type application/jsonapplication/json
      $iothub-enqueuedtime$iothub-enqueuedtime Data e ora in cui è stata inviata la notificaTime when the notification was sent
      $iothub-message-source$iothub-message-source twinChangeEventstwinChangeEvents
      $content-encoding$content-encoding utf-8utf-8
      deviceIddeviceId ID del dispositivoID of the device
      hubNamehubName Nome dell'hub IoTName of IoT Hub
      operationTimestampoperationTimestamp Timestamp ISO8601 dell'operazioneISO8601 timestamp of operation
      iothub-message-schemaiothub-message-schema deviceLifecycleNotificationdeviceLifecycleNotification
      opTypeopType "replaceTwin" o "updateTwin""replaceTwin" or "updateTwin"

      Le proprietà di sistema del messaggio hanno come prefisso il simbolo '$'.Message system properties are prefixed with the '$' symbol.

    • CorpoBody

      Questa sezione include tutte le modifiche apportate al dispositivo gemello in formato JSON.This section includes all the twin changes in a JSON format. Usa lo stesso formato di una patch, con la differenza che può contenere tutte le sezioni, ovvero tag, properties.reported e properties.desired, e che contiene gli elementi "$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. Ad esempio,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
            }
        }
      }
      

Tutte le operazioni precedenti supportano la concorrenza ottimistica e richiedono l'autorizzazione ServiceConnect, come indicato nell'articolo Sicurezza.All the preceding operations support Optimistic concurrency and require the ServiceConnect permission, as defined in the Security article.

Oltre a queste operazioni, il back-end della soluzione può:In addition to these operations, the solution back end can:

  • Eseguire una query sui dispositivi gemelli usando il linguaggio di query Hub IoT simile a SQL.Query the device twins using the SQL-like IoT Hub query language.
  • Eseguire operazioni su set di grandi dimensioni dei dispositivi gemelli usando i processi.Perform operations on large sets of device twins using jobs.

Operazioni del dispositivoDevice operations

Il dispositivo opera sul dispositivo gemello usando le seguenti operazioni atomiche:The device app operates on the device twin using the following atomic operations:

  • Recuperare un dispositivo gemello.Retrieve device twin. Questa operazione restituisce il documento del dispositivo gemello, inclusi tag e proprietà di sistema desiderate e segnalate, del dispositivo attualmente connesso.This operation returns the device twin document (including tags and desired and reported system properties) for the currently connected device.
  • Aggiornamento parziale delle proprietà segnalate.Partially update reported properties. Questa operazione consente l'aggiornamento parziale delle proprietà segnalate del dispositivo attualmente connesso.This operation enables the partial update of the reported properties of the currently connected device. Questa operazione usa lo stesso formato di aggiornamento JSON che il back-end della soluzione usa per un aggiornamento parziale delle proprietà desiderate.This operation uses the same JSON update format that the solution back end uses for a partial update of desired properties.
  • Osservazione di proprietà desiderate.Observe desired properties. Il dispositivo attualmente connesso può scegliere di ricevere la notifica degli aggiornamenti delle proprietà desiderate quando vengono eseguiti.The currently connected device can choose to be notified of updates to the desired properties when they happen. Il dispositivo riceve lo stesso modulo di aggiornamento che segnala la sostituzione parziale o completa eseguita dal back-end della soluzione.The device receives the same form of update (partial or full replacement) executed by the solution back end.

Tutte le operazioni precedenti richiedono l'autorizzazione DeviceConnect, come indicato nell'articolo Sicurezza.All the preceding operations require the DeviceConnect permission, as defined in the Security article.

Azure IoT SDK per dispositivi semplifica l'uso delle operazioni precedenti con linguaggi e piattaforme diversi.The Azure IoT device SDKs make it easy to use the preceding operations from many languages and platforms. Per altre informazioni sulle primitive dell'hub IoT per la sincronizzazione delle proprietà desiderate vedere Flusso di riconnessione del dispositivo.For more information on the details of IoT Hub primitives for desired properties synchronization, see Device reconnection flow.

Formato di tag e proprietàTags and properties format

I tag e le proprietà desiderate e segnalate sono oggetti JSON soggetti alle restrizioni indicate di seguito:Tags, desired properties, and reported properties are JSON objects with the following restrictions:

  • Tutte le chiavi negli oggetti JSON sono stringhe UTF-8 UNICODE da 64 caratteri con distinzione tra maiuscole e minuscole.All keys in JSON objects are case-sensitive 64 bytes UTF-8 UNICODE strings. I caratteri consentiti escludono i caratteri di controllo UNICODE (segmenti C0 e C1) e '.', ' ', '$'.Allowed characters exclude UNICODE control characters (segments C0 and C1), and '.', ' ', and '$'.
  • Tutti i valori negli oggetti JSON possono essere dei seguenti tipi JSON: booleano, numero, stringa, oggetto.All values in JSON objects can be of the following JSON types: boolean, number, string, object. Non sono consentite le matrici.Arrays are not allowed. Il valore massimo per il numero intero è 4503599627370495, mentre quello minimo è -4503599627370496.The maximum value for integers is 4503599627370495 and the minimum value for integers is -4503599627370496.
  • Tutti gli oggetti JSON nei tag e nelle proprietà desiderate e segnalate possono avere una profondità massima di 5.All JSON objects in tags, desired, and reported properties can have a maximum depth of 5. Ad esempio, l'oggetto seguente è valido:For instance, the following object is valid:

      {
          ...
          "tags": {
              "one": {
                  "two": {
                      "three": {
                          "four": {
                              "five": {
                                  "property": "value"
                              }
                          }
                      }
                  }
              }
          },
          ...
      }
    
  • Tutti i valori di stringa possono avere una lunghezza massima di 4 KB.All string values can be at most 4 KB in length.

Dimensioni del dispositivo gemelloDevice twin size

L'hub IoT impone un limite di dimensioni pari a 8 KB sui valori totali di tags, properties/desired e properties/reported, a esclusione degli elementi di sola lettura.IoT Hub enforces an 8KB size limitation on the total values of tags, properties/desired, and properties/reported, excluding read-only elements. Le dimensioni vengono calcolate contando tutti i caratteri a esclusione dei caratteri di controllo UNICODE, ovvero i segmenti C0 e C1, e gli spazi al di fuori delle costanti stringa.The size is computed by counting all characters, excluding UNICODE control characters (segments C0 and C1) and spaces that are outside of string constants. L'hub IoT rifiuta con errore tutte le operazioni che aumentano le dimensioni dei documenti oltre il limite specificato.IoT Hub rejects with an error all operations that would increase the size of those documents above the limit.

Metadati del dispositivo gemelloDevice twin metadata

L'hub IoT conserva il timestamp dell'ultimo aggiornamento di ogni oggetto JSON nelle proprietà desiderate e segnalate del dispositivo gemello.IoT Hub maintains the timestamp of the last update for each JSON object in device twin desired and reported properties. I timestamp sono in formato UTC e codificati in formato ISO8601YYYY-MM-DDTHH:MM:SS.mmmZ.The timestamps are in UTC and encoded in the ISO8601 format YYYY-MM-DDTHH:MM:SS.mmmZ. Ad esempio: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
            }
        }
        ...
    }

Queste informazioni vengono mantenute a ogni livello (non solo al livello foglia della struttura JSON) per conservare gli aggiornamenti che rimuovono le chiavi dell'oggetto.This information is kept at every level (not just the leaves of the JSON structure) to preserve updates that remove object keys.

Concorrenza ottimisticaOptimistic concurrency

I tag e le proprietà desiderate e segnalate supportano la concorrenza ottimistica.Tags, desired, and reported properties all support optimistic concurrency. I tag sono dotati di un ETag, come indicato in RFC7232, che rappresenta il JSON del tag.Tags have an ETag, as per RFC7232, that represents the tag's JSON representation. Per garantire la coerenza è possibile usare l'ETag nelle operazioni di aggiornamento condizionale dal back-end della soluzione.You can use ETags in conditional update operations from the solution back end to ensure consistency.

Le proprietà desiderate e segnalate del dispositivo gemello non sono dotate di ETags, ma hanno un valore $version sempre incrementale.Device twin desired and reported properties do not have ETags, but have a $version value that is guaranteed to be incremental. In modo analogo a un valore ETag, la versione può essere usata dall'entità di aggiornamento per garantire la coerenza degli aggiornamenti.Similarly to an ETag, the version can be used by the updating party to enforce consistency of updates. Ad esempio, un'app per dispositivo per una proprietà segnalata o la soluzione del back-end per una proprietà desiderata.For example, a device app for a reported property or the solution back end for a desired property.

Le versioni sono utili anche quando un agente di osservazione, ad esempio l'app per dispositivo che osserva le proprietà desiderate, deve riconciliare le concorrenze tra il risultato di un'operazione di recupero e una notifica di aggiornamento.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. Altre informazioni sono reperibili nella sezione Flusso di riconnessione del dispositivo.The section Device reconnection flow provides more information.

Flusso di riconnessione del dispositivoDevice reconnection flow

L'hub IoT non conserva le notifiche di aggiornamento delle proprietà desiderate dei dispositivi connessi.IoT Hub does not preserve desired properties update notifications for disconnected devices. Ne consegue che un dispositivo che esegue la connessione deve recuperare il documento completo delle proprietà desiderate, ed eseguire la sottoscrizione alle notifiche di aggiornamento.It follows that a device that is connecting must retrieve the full desired properties document, in addition to subscribing for update notifications. Data la possibilità di concorrenza tra le notifiche di aggiornamento e il recupero completo, deve essere assicurato il flusso seguente:Given the possibility of races between update notifications and full retrieval, the following flow must be ensured:

  1. L'app per dispositivo esegue la connessione a un hub IoT.Device app connects to an IoT hub.
  2. L'app per dispositivo esegue la sottoscrizione per le notifiche di aggiornamento delle proprietà desiderate.Device app subscribes for desired properties update notifications.
  3. L'app per dispositivo recupera il documento completo delle proprietà desiderate.Device app retrieves the full document for desired properties.

L'app per dispositivo è in grado di ignorare tutte le notifiche con il valore di $version minore o uguale a quello dell'intero documento recuperato.The device app can ignore all notifications with $version less or equal than the version of the full retrieved document. Questo approccio è possibile poiché l'hub IoT garantisce l'incremento delle versioni.This approach is possible because IoT Hub guarantees that versions always increment.

Nota

Questa logica è già implementata in Azure IoT SDK per dispositivi.This logic is already implemented in the Azure IoT device SDKs. La descrizione è utile solo se l'app per dispositivo non può usare un Azure IoT SDK per dispositivi e deve programmare direttamente l'interfaccia MQTT.This description is useful only if the device app cannot use any of Azure IoT device SDKs and must program the MQTT interface directly.

Materiale di riferimentoAdditional reference material

Di seguito sono indicati altri argomenti di riferimento reperibili nella Guida per gli sviluppatori dell'hub IoT:Other reference topics in the IoT Hub developer guide include:

Passaggi successiviNext steps

In questa esercitazione si è appreso come usare i dispositivi gemelli. Altri argomenti di interesse disponibili nella Guida per sviluppatori dell'hub IoT:Now you have learned about device twins, you may be interested in the following IoT Hub developer guide topics:

Per provare alcuni dei concetti descritti in questo articolo, possono essere utili le esercitazioni di hub IoT seguenti:If you would like to try out some of the concepts described in this article, you may be interested in the following IoT Hub tutorials: