Résolution des problèmes dans Azure IoT Central

Cet article inclut des conseils de résolution des problèmes de connectivité des appareils et des problèmes de configuration d’exportation de données dans vos applications IoT Central.

Problèmes de connectivité de l’appareil

Cette section vous aide à déterminer si vos données parviennent à IoT Central.

Si vous ne l'avez pas déjà fait, installez l’outil az cli et l’extension azure-iot.

Pour savoir comment installer az cli, consultez Installer Azure CLI.

Pour installer l’extension azure-iot, exécutez la commande suivante :

az extension add --name azure-iot

Remarque

Vous serez peut-être invité à installer la bibliothèque uamqp la première fois que vous exécutez une commande d’extension.

Après avoir installé l’extension azure-iot, démarrez votre appareil pour voir si les messages qu’il envoie parviennent à IoT Central.

Utilisez les commandes suivantes pour vous connecter à l’abonnement dans lequel se trouve votre application IoT Central :

az login
az account set --subscription <your-subscription-id>

Pour surveiller les données de télémétrie que votre appareil envoie, utilisez la commande suivante :

az iot central diagnostics monitor-events --app-id <iot-central-app-id> --device-id <device-name>

Si l’appareil s’est correctement connecté à IoT Central, une sortie similaire à l’exemple suivant s’affiche :

Monitoring telemetry.
Filtering on device: device-001
{
    "event": {
        "origin": "device-001",
        "module": "",
        "interface": "",
        "component": "",
        "payload": {
            "temp": 65.57910343679293,
            "humid": 36.16224660107426
        }
    }
}

Pour surveiller les mises à jour de propriétés que votre appareil échange avec IoT Central, utilisez la commande d’aperçu suivante :

az iot central diagnostics monitor-properties --app-id <iot-central-app-id> --device-id <device-name>

Si l’appareil envoie correctement les mises à jour de propriétés, une sortie similaire à l’exemple suivant s’affiche :

Changes in reported properties:
version : 32
{'state': 'true', 'name': {'value': {'value': 'Contoso'}, 'status': 'completed', 'desiredVersion': 7, 'ad': 'completed', 'av': 7, 'ac
': 200}, 'brightness': {'value': {'value': 2}, 'status': 'completed', 'desiredVersion': 7, 'ad': 'completed', 'av': 7, 'ac': 200}, 'p
rocessorArchitecture': 'ARM', 'swVersion': '1.0.0'}

Si des données s’affichent dans votre terminal, cela signifie que les données parviennent à votre application IoT Central.

Si aucune donnée ne s’affichent après quelques minutes, essayez d’appuyer sur la touche Enter ou return de votre clavier, si la sortie est bloquée.

Si les données ne s’affichent toujours pas dans votre terminal, il est probable que votre appareil rencontre des problèmes de connectivité réseau ou qu’il n’envoie pas correctement les données à IoT Central.

Vérifier l’état d’approvisionnement de votre appareil

Si vos données ne s’affichent pas dans le moniteur CLI, vérifiez l’état d’approvisionnement de votre appareil en exécutant la commande suivante :

az iot central device registration-info --app-id <iot-central-app-id> --device-id <device-name>

La sortie suivante montre un exemple d’appareil dont la connexion est bloquée :

{
  "@device_id": "v22upeoqx6",
  "device_registration_info": {
    "device_status": "blocked",
    "display_name": "Environmental Sensor - v22upeoqx6",
    "id": "v22upeoqx6",
    "instance_of": "urn:krhsi_k0u:modelDefinition:w53jukkazs",
    "simulated": false
  },
  "dps_state": {
    "error": "Device is blocked from connecting to IoT Central application. Unblock the device in IoT Central and retry. Learn more:
https://aka.ms/iotcentral-docs-dps-SAS",
    "status": null
  }
}
État d’approvisionnement de l’appareil Description Atténuation possible
approvisionné Aucun problème immédiatement identifiable. S/O
Enregistré L’appareil n’est pas encore connecté à IoT Central. Consultez les journaux de votre appareil afin d’y détecter d’éventuels problèmes de connectivité.
Bloqué La connexion de l’appareil à IoT Central est bloquée. L’appareil ne peut pas se connecter à l’application IoT Central. Débloquez l’appareil dans IoT Central et réessayez. Pour en savoir plus, consultez Valeurs d’état de l’appareil.
Non approuvé L’appareil n’est pas approuvé. L’appareil n’est pas approuvé pour se connecter à l’application IoT Central. Approuvez l’appareil dans IoT Central et réessayez. Pour en savoir plus, consultez Valeurs d’état de l’appareil.
Non attribué L’appareil n’est pas affecté à un modèle d’appareil. Affectez l’appareil à un modèle d’appareil pour qu’IoT Central sache comment analyser les données.

En savoir plus sur les valeurs d’état de l’appareil dans l’interface utilisateur et les valeurs d’état de l’appareil dans l’API REST.

Codes d’erreur

Si vous ne parvenez toujours pas à diagnostiquer la raison pour laquelle vos données ne s’affichent pas dans monitor-events, l’étape suivante consiste à rechercher les codes d’erreur signalés par votre appareil.

Démarrez une session de débogage sur votre appareil ou collectez les journaux à partir de ce dernier. Recherchez les codes d’erreur signalés par l’appareil.

Les tableaux suivants présentent les codes d’erreur courants, ainsi que les actions possibles pour les atténuer.

Si vous constatez des problèmes liés à votre flux d’authentification :

Code d'erreur Description Atténuation possible
400 Le corps de la requête n’est pas valide. Par exemple, il ne peut pas être analysé ou l’objet ne peut pas être validé. Assurez-vous que vous envoyez le corps de la requête qui convient en tant que partie intégrante du flux d’attestation ou utilisez un kit de développement logiciel (SDK) d’appareil.
401 Le jeton d’autorisation ne peut pas être validé. Par exemple, il a expiré ou ne s’applique pas à l’URI de la requête. Ce code d’erreur est également retourné aux appareils dans le cadre du flux d’attestations du module TPM. Vérifiez que votre appareil dispose des informations d'identification qui conviennent.
404 L’instance du service Device Provisioning ou une ressource (par exemple, une inscription) n’existe pas. Créez un ticket auprès du support technique.
412 L’ETag de la requête ne correspond pas à l’ETag de la ressource existante, conformément à la RFC7232. Créez un ticket auprès du support technique.
429 Le service est des opérations de limitation. Pour connaître les limites de service spécifiques, consultez Limites du service IoT Hub Device Provisioning. Réduisez la fréquence des messages, répartissez les responsabilités entre plusieurs appareils.
500 Une erreur interne s’est produite. Créez un ticket auprès du support technique pour voir s’il est en mesure de vous aider davantage.

Codes détaillés d’erreur d’autorisation

Erreur Sous-code d’erreur Notes
401 Non autorisé 401002 L’appareil utilise des informations d’identification non valides ou expirées. DPS signale cette erreur.
401 Non autorisé 400209 L’appareil est en attente d’approbation par un opérateur ou a été bloqué par ce dernier.
401 IoTHubUnauthorized L’appareil utilise un jeton de sécurité expiré. IoT Hub signale cette erreur.
401 IoTHubUnauthorized DEVICE_DISABLED L’appareil est désactivé dans ce hub IoT et a été déplacé vers un autre hub IoT. Réapprovisionner l’appareil.
401 IoTHubUnauthorized DEVICE_BLOCKED Un opérateur a bloqué cet appareil.

Codes d’erreur de chargement du fichier

Voici une liste des codes d’erreur courants que vous pouvez voir lorsqu’un appareil tente de charger un fichier vers le cloud. N’oubliez pas que pour que votre appareil puisse charger un fichier, vous devez configurer les chargements de fichiers d’appareil dans votre application.

Code d'erreur Description Atténuation possible
403006 Vous avez dépassé le nombre d’opérations simultanées de chargement de fichiers. Notez que chaque client d’appareil est limité à 10 chargements de fichiers simultanés. Assurez-vous que l’appareil informe rapidement IoT Central que l’opération de chargement de fichier est terminée. Si cela ne fonctionne pas, essayez de réduire le délai d’expiration de la requête.

Problèmes de données non modélisées

Après avoir vérifié que votre appareil envoie des données à IoT Central, l’étape suivante consiste à vous assurer que votre appareil envoie des données dans un format valide.

Pour détecter les catégories dans lesquelles se manifeste votre problème, exécutez la commande Azure CLI la plus adaptée à votre scénario :

  • Pour valider la télémétrie, utilisez la commande d’aperçu :

    az iot central diagnostics validate-messages --app-id <iot-central-app-id> --device-id <device-name>
    
  • Pour valider les mises à jour de propriétés, utilisez la commande d’aperçu :

    az iot central diagnostics validate-properties --app-id <iot-central-app-id> --device-id <device-name>
    

Vous pouvez être invité à installer la bibliothèque uamqp la première fois que vous exécutez une commande validate.

Les trois types courants de problèmes qui empêchent les données d’appareil d’apparaître dans IoT Central sont :

  • Non-concordance des données du modèle d’appareil avec l’appareil.
  • Les données JSON ne sont pas valides.
  • Les anciennes versions d’IoT Edge entraînent l’affichage incorrect de la télémétrie des composants sous forme de données non modélisées.

Non-concordance des données du modèle d’appareil avec l’appareil

Un appareil doit utiliser le même nom et la même casse que ceux utilisés dans le modèle d’appareil pour tous les noms de champs de télémétrie dans la charge utile qu’il envoie. La sortie suivante montre un exemple de message d’avertissement indiquant que l’appareil envoie une valeur de télémétrie appelée Temperature, au lieu de temperature :

Validating telemetry.
Filtering on device: sample-device-01.
Exiting after 300 second(s), or 10 message(s) have been parsed (whichever happens first).
[WARNING] [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg] Device is sending data that has not been defined in the device template. Following capabilities have NOT been defined in the device template '['Temperature']'. Following capabilities have been defined in the device template (grouped by components) '{'thermostat1': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport'], 'thermostat2': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport'], 'deviceInformation': ['manufacturer', 'model', 'swVersion', 'osName', 'processorArchitecture', 'processorManufacturer', 'totalStorage', 'totalMemory']}'. 

Un appareil doit utiliser le même nom et la même casse que ceux utilisés dans le modèle d’appareil pour tous les noms de propriété dans la charge utile qu’il envoie. La sortie suivante montre un exemple de message d’avertissement dans lequel la propriété osVersion n’est pas définie dans le modèle d’appareil :

Command group 'iot central diagnostics' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
[WARNING]  [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg] Device is sending data that has not been defined in the device template. Following capabilities have NOT been defined in the device template '['osVersion']'. Following capabilities have been defined in the device template (grouped by components) '{'thermostat1': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport', 'rundiagnostics'], 'thermostat2': ['temperature', 'targetTemperature', 'maxTempSinceLastReboot', 'getMaxMinReport', 'rundiagnostics'], 'deviceInformation': ['manufacturer', 'model', 'swVersion', 'osName', 'processorArchitecture', 'processorManufacturer', 'totalStorage', 'totalMemory']}'.

Un appareil doit utiliser les types de données définis dans le modèle d’appareil pour les données de télémétrie ou les valeurs de propriété. Par exemple, vous voyez une incompatibilité de schéma si le type défini dans le modèle d’appareil est booléen, mais que l’appareil envoie une chaîne. La sortie suivante montre un exemple de message d’erreur dans lequel l’appareil utilise une valeur de chaîne pour une propriété qui est définie comme un double :

Command group 'iot central diagnostics' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Validating telemetry.
Filtering on device: sample-device-01.
Exiting after 300 second(s), or 10 message(s) have been parsed (whichever happens first).
[ERROR] [DeviceId: sample-device-01] [TemplateId: urn:modelDefinition:ofhmazgddj:vmjwwjuvdzg]  Datatype of telemetry field 'temperature' does not match the datatype double. Data sent by the device : curr_temp. For more information, see: https://aka.ms/iotcentral-payloads

Les commandes de validation signalent également une erreur si le même nom de télémétrie est défini dans plusieurs interfaces, mais que l’appareil n’est pas conforme à la norme IoT Plug and Play.

Si vous préférez utiliser une interface utilisateur graphique, utilisez la vue Données brutes IoT Central pour voir si un objet n’est pas modélisé.

Screenshot that shows the raw data view in an IoT Central application.

Après avoir détecté le problème, vous serez peut-être amené à mettre à jour le microprogramme de l’appareil ou à créer un nouveau modèle d’appareil qui modélise les données précédemment non modélisées.

Si vous choisissez de créer un nouveau modèle qui modélise correctement les données, migrez les appareils de votre ancien modèle vers le nouveau modèle. Pour plus d’informations, consultez Gérer les appareils dans votre application Azure IoT Central.

JSON non valide

Si aucune erreur n’est signalée, mais qu’une valeur n’apparaît pas, il s’agit probablement de code JSON incorrect dans la charge utile que l’appareil envoie. Pour en savoir plus, consultez Charges utiles de télémétrie, de propriétés et de commandes.

Vous ne pouvez pas utiliser les commandes de validation ou la vue de Données brutes dans l’interface utilisateur pour détecter si l’appareil envoie un JSON mal formé.

Version d’IoT Edge

Pour afficher correctement la télémétrie des composants hébergés dans des modules IoT Edge, utilisez IoT Edge version 1.2.4 ou ultérieure. Si vous utilisez une version antérieure, la télémétrie des composants dans des modules IoT Edge s’affiche comme _unmodeleddata.

Problèmes liés à l’identité managée d’exportation de données

Vous utilisez une identité managée pour autoriser la connexion à une destination d’exportation. Les données n’arrivent pas à la destination de l’exportation.

Avant de configurer ou d’activer la destination d’exportation, assurez-vous d’effectuer les étapes suivantes :

  • Activez l’identité managée pour l’application IoT Central. Pour vérifier que l’identité managée est activée, accédez à la page Identité de votre application dans le portail Azure ou utilisez la commande CLI suivante :

    az iot central app identity show --name {your app name} --resource-group {your resource group name}
    
  • Configurez les autorisations pour l’identité managée. Pour afficher les autorisations attribuées, sélectionnez les attributions de rôles Azure dans la page Identité de votre application dans le portail Azure ou utilisez la commande CLI az role assignment list. Voici les autorisations nécessaires :

    Destination Autorisation
    stockage d’objets blob Azure Contributeur aux données Blob du stockage
    Azure Service Bus Expéditeur de données Azure Service Bus
    Hubs d'événements Azure Expéditeur de données Azure Event Hubs
    Explorateur de données Azure Administrateur

    Si les autorisations n’ont pas été définies correctement avant de créer la destination dans votre application IoT Central, essayez de supprimer la destination, puis de l’ajouter à nouveau.

  • Configurez des réseaux virtuels, des points de terminaison privés et des stratégies de pare-feu.

Remarque

Si vous utilisez une identité managée pour autoriser la connexion à une destination d’exportation, IoT Central n’exporte pas de données à partir d’appareils simulés.

Pour en savoir plus, consultez Exporter des données.

Problèmes de connexion de destination d’exportation de données

La page de définition d’exportation affiche des informations sur les connexions ayant échoué à la destination d’exportation :

Screenshot that shows an example export error.

Problèmes d’exportation de données manquants

L’exportation de données exporte uniquement les données qui arrivent dans votre application après avoir activé l’exportation des données. Si vous avez besoin d’exporter des données historiques ou des données qui ont été manquées alors que votre exportation de données était temporairement désactivée, vous pouvez utiliser l’API REST IoT Central pour interroger les données de télémétrie des appareils. Utilisez une requête pour récupérer les données manquantes, puis ajoutez les données à votre destination d’exportation. Pour plus d’informations, consultez Comment utiliser l’API REST d’IoT central pour interroger des appareils.

Étapes suivantes

Si vous avez besoin d’aide supplémentaire, vous avez la possibilité de contacter les experts Azure sur les forums Microsoft Q&A et Stack Overflow. Vous pouvez également soumettre un ticket de support Azure.

Pour plus d’informations, consultez Options d’aide et de support Azure IoT.