Come trasferire payload tra dispositivi e DPS

I dispositivi registrati con DPS sono necessari per fornire un ID di registrazione e credenziali valide (chiavi o certificati X.509) al momento della registrazione. Tuttavia, potrebbero essere presenti soluzioni O scenari IoT in cui sono necessari dati aggiuntivi dal dispositivo. Ad esempio, un webhook dei criteri di allocazione personalizzato può usare informazioni come un numero di modello di dispositivo per selezionare un hub IoT in cui effettuare il provisioning del dispositivo. Analogamente, un dispositivo può richiedere dati aggiuntivi nella risposta di registrazione per facilitare la logica lato client. Il servizio Device Provisioning offre la possibilità per i dispositivi di inviare e ricevere un payload facoltativo al momento della registrazione.

Quando usarlo

Gli scenari comuni per l'invio di payload facoltativi sono:

  • I criteri di allocazione personalizzati possono usare il payload del dispositivo per selezionare un hub IoT per un dispositivo o impostarne il gemello iniziale. Ad esempio, è possibile allocare i dispositivi in base al modello di dispositivo. In questo caso, è possibile configurare il dispositivo per segnalare le informazioni sul modello durante la registrazione. Dps passerà il payload del dispositivo al webhook di allocazione personalizzato. Il webhook può quindi decidere a quale hub IoT verrà effettuato il provisioning del dispositivo in base alle informazioni sul modello di dispositivo. Se necessario, il webhook può anche restituire i dati al dispositivo come oggetto JSON nella risposta del webhook. Per altre informazioni, vedere Usare i payload dei dispositivi nell'allocazione personalizzata.

  • i dispositivi Plug and Play IoT (PnP) possono usare il payload per inviare l'ID modello quando si registrano con DPS. È possibile trovare esempi di questo utilizzo negli esempi PnP nell'SDK o nei repository di esempio. Ad esempio, il termostato PnP C# o Node.js controller di temperatura PnP.

  • I dispositivi IoT Central che si connettono tramite DPS devono seguire Plug and Play IoT convenzioni e inviare l'ID modello al momento della registrazione. IoT Central usa l'ID modello per assegnare il dispositivo al modello di dispositivo corretto. Per altre informazioni, vedere Implementazione del dispositivo e procedure consigliate per IoT Central.

Il dispositivo invia il payload dei dati al servizio Device Provisioning

Quando il dispositivo chiama Register Device (Registra dispositivo ) per la registrazione con DPS, può includere dati aggiuntivi nella proprietà payload . Ad esempio, il codice JSON seguente mostra il corpo di una richiesta di registrazione usando l'attestazione TPM:

{ 
    "registrationId": "mydevice", 
    "tpm": { 
        "endorsementKey": "xxxx-device-endorsement-key-xxxx", 
        "storageRootKey": "xxx-device-storage-root-key-xxxx" 
    }, 
    "payload": { A JSON object that contains your additional data } 
} 

La proprietà payload deve essere un oggetto JSON e può contenere tutti i dati rilevanti per la soluzione o lo scenario IoT.

Dps restituisce i dati al dispositivo

Il servizio Device Provisioning può restituire i dati al dispositivo nella risposta di registrazione. Attualmente, questa funzionalità viene usata esclusivamente negli scenari di allocazione personalizzati. Se il webhook dei criteri di allocazione personalizzato deve restituire i dati al dispositivo, può passare nuovamente i dati come oggetto JSON nella risposta del webhook. Il servizio Device Provisioning passerà quindi i dati nella proprietà registrationState.payload nella risposta Registra dispositivo. Ad esempio, il codice JSON seguente mostra il corpo di una risposta riuscita per la registrazione usando l'attestazione TPM.

{
   "operationId":"5.316aac5bdc130deb.b1e02da8-xxxx-xxxx-xxxx-7ea7a6b7f550",
   "status":"assigned",
   "registrationState":{
      "registrationId":"my-tpm-device",
      "createdDateTimeUtc":"2022-08-31T22:02:50.5163352Z",
      "assignedHub":"sample-iot-hub-1.azure-devices.net",
      "deviceId":"my-tpm-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-31T22:02:50.7370676Z",
      "etag":"xxxx-etag-value-xxxx",
      "tpm": {"authenticationKey": "xxxx-encrypted-authentication-key-xxxxx"},
      "payload": { A JSON object that contains the data returned by the webhook }
   }
}

La proprietà payload deve essere un oggetto JSON e può contenere tutti i dati rilevanti per la soluzione o lo scenario IoT.

Supporto SDK

Questa funzionalità è disponibile negli SDK client C, C#, JAVA e Node.js. Per altre informazioni sugli SDK di Azure IoT disponibili per hub IoT e hub IoT servizio Device Provisioning, vedere Sdk di Microsoft Azure IoT.

Supporto di IoT Edge

A partire dalla versione 1.4, IoT Edge supporta l'invio di un payload di dati contenuto in un file JSON. Il file di payload viene letto e inviato al servizio Device Provisioning quando il dispositivo viene registrato di nuovo, che in genere si verifica quando si esegue iotedge config apply per la prima volta. È anche possibile forzare la ri lettura e la registrazione usando il comando di reprovisioning dell'interfaccia della riga di comando iotedge system reprovision.

Di seguito è riportato un frammento di codice di esempio da /etc/aziot/config.toml cui la payload proprietà è impostata sul percorso di un file JSON locale.

   [provisioning]
   source = "dps"
   global_endpoint = "https://global.azure-devices-provisioning.net"
   id_scope = "0ab1234C5D6"

   # Uncomment to send a custom payload during DPS registration
   payload = { uri = "file:///home/aziot/payload.json" }
 

Il file di payload (in questo caso /home/aziot/payload.json) può contenere qualsiasi CODICE JSON valido, ad esempio:

{
    "modelId": "dtmi:com:example:edgedevice;1"
}

Passaggi successivi