Solución de problemas en Azure IoT Central
En este artículo se incluyen instrucciones para solucionar problemas de conectividad de dispositivos y problemas de configuración de exportación de datos en las aplicaciones de IoT Central.
Resolución de problemas de dispositivos
Esta sección le ayudará a determinar si los datos llegan a IoT Central.
Si todavía no lo ha hecho, instale la herramienta az cli
y la extensión azure-iot
.
Para más información sobre cómo instalar az cli
, consulte Instalación de la CLI de Azure.
Para instalar la extensión azure-iot
, ejecute el comando siguiente:
az extension add --name azure-iot
Nota:
Es posible que se le pida que instale la biblioteca uamqp
la primera vez que ejecute un comando de extensión.
Cuando haya instalado la extensión azure-iot
, inicie el dispositivo para ver si los mensajes que envía van a IoT Central.
Use los siguientes comandos para iniciar sesión en la suscripción en la que tenga la aplicación IoT Central:
az login
az account set --subscription <your-subscription-id>
Para supervisar la telemetría que el dispositivo envía, use el siguiente comando:
az iot central diagnostics monitor-events --app-id <iot-central-app-id> --device-id <device-name>
Si el dispositivo se ha conectado correctamente a IoT Central, verá una salida similar al ejemplo siguiente:
Monitoring telemetry.
Filtering on device: device-001
{
"event": {
"origin": "device-001",
"module": "",
"interface": "",
"component": "",
"payload": {
"temp": 65.57910343679293,
"humid": 36.16224660107426
}
}
}
Para supervisar las actualizaciones de propiedades que el dispositivo intercambia con IoT Central, use el siguiente comando de versión preliminar:
az iot central diagnostics monitor-properties --app-id <iot-central-app-id> --device-id <device-name>
Si el dispositivo envía correctamente las actualizaciones de propiedades, verá una salida similar al ejemplo siguiente:
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 ve que los datos aparecen en el terminal, es que están llegando hasta la aplicación IoT Central.
Si no ve ningún dato después de unos minutos, pruebe a presionar la tecla Enter
o return
, por si la salida está atascada.
Si sigue sin ver ningún dato en el terminal, es probable que el dispositivo tenga problemas de conectividad de red o que no esté enviando los datos correctamente a IoT Central.
Comprobación del estado de aprovisionamiento del dispositivo
Si los datos no aparecen en el monitor de la CLI, compruebe el estado de aprovisionamiento del dispositivo; para ello, ejecute el siguiente comando:
az iot central device registration-info --app-id <iot-central-app-id> --device-id <device-name>
La salida siguiente muestra un ejemplo de un dispositivo que no se pudo conectar:
{
"@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
}
}
Estado de aprovisionamiento de dispositivos | Descripción | Posible mitigación |
---|---|---|
aprovisionado | No hay ningún problema reconocible inmediatamente. | N/D |
Registered | El dispositivo aún no se ha conectado a IoT Central. | Compruebe si hay problemas de conectividad en los registros del dispositivo. |
Bloqueado | El dispositivo no se puede conectar a IoT Central. | El dispositivo está bloqueado y no se pudo conectar a la aplicación IoT Central. Desbloquee el dispositivo en IoT Central e inténtelo de nuevo. Para más información, consulte Valores de estado del dispositivo. |
No aprobado | El dispositivo no está aprobado. | El dispositivo no tiene aprobación para conectarse a la aplicación IoT Central. Apruebe el dispositivo en IoT Central e inténtelo de nuevo. Para más información, consulte Valores de estado del dispositivo |
Sin asignar | El dispositivo no está asignado a una plantilla de dispositivo. | Asócielo a una plantilla de dispositivo para que IoT Central sepa cómo analizar los datos. |
Obtenga más información sobre los Valores de estado del dispositivo en los valores de interfaz de usuario y los Valores de estado del dispositivo en la API de REST.
Códigos de error
Si sigue sin poder diagnosticar por qué los datos no se muestran en monitor-events
, el siguiente paso es buscar los códigos de error que el dispositivo indique.
Inicie una sesión de depuración en el dispositivo o recopile los registros de este. Busque los códigos de error que el dispositivo notifique.
En las tablas siguientes se muestran códigos de error comunes y las posibles acciones para mitigarlos.
Si ve problemas relacionados con el flujo de autenticación:
Código de error | Descripción | Posible mitigación |
---|---|---|
400 | El cuerpo de la solicitud no es válido. Por ejemplo, no se puede analizar o el objeto no se puede comprobar. | Asegúrese de estar enviando el cuerpo de solicitud correcto como parte del flujo de atestación o bien use un SDK de dispositivo. |
401 | El token de autorización no se puede comprobar. Por ejemplo, ha expirado o no es aplicable al URI de la solicitud. Este código de error también se devuelve a los dispositivos como parte del flujo de atestación de TPM. | Asegúrese de que el dispositivo tenga las credenciales correctas. |
404 | La instancia de Device Provisioning Service o un recurso como, por ejemplo, una inscripción, no existe. | Abra una incidencia en el departamento de asistencia al cliente. |
412 | La etiqueta ETag de la solicitud no coincide con la etiqueta ETag del recurso existente, según las especificaciones de RFC7232. |
Abra una incidencia en el departamento de asistencia al cliente. |
429 | El servicio está limitando las operaciones. Para conocer los límites de servicio específicos, consulte Límites de IoT Hub Device Provisioning Service. | Reduzca la frecuencia de los mensajes y divida las responsabilidades entre más dispositivos. |
500 | Se ha producido un error interno. | Abra una incidencia en el departamento de asistencia al cliente para comprobar si pueden ayudarle. |
Códigos de error de autorización detallados
Error | Subcódigo de error | Notas |
---|---|---|
401 No autorizado | 401002 | El dispositivo usa credenciales no válidas o expiradas. DPS notifica este error. |
401 No autorizado | 400209 | El dispositivo está esperando la aprobación por parte de un operador o un operador lo ha bloqueado. |
401 IoTHubUnauthorized | El dispositivo usa el token de seguridad expirado. IoT Hub notifica este error. | |
401 IoTHubUnauthorized | DEVICE_DISABLED | El dispositivo está deshabilitado en este centro de IoT y se ha movido a otro centro de IoT. Vuelva a aprovisionar el dispositivo. |
401 IoTHubUnauthorized | DEVICE_BLOCKED | Un operador ha bloqueado este dispositivo. |
Códigos de error de carga de archivos
A continuación se incluye una lista de códigos de error comunes que pueden mostrarse cuando un dispositivo intenta cargar un archivo en la nube. Recuerde que antes de que el dispositivo pueda cargar un archivo, debe configurar las cargas de archivos del dispositivo en la aplicación.
Código de error | Descripción | Posible mitigación |
---|---|---|
403006 | Ha superado el número de operaciones de carga de archivos simultáneas. Cada cliente de dispositivo se limita a diez cargas de archivos simultáneas. | Asegúrese de que el dispositivo notifica rápidamente a IoT Central que se ha completado la operación de carga de archivos. Si eso no funciona, intente reducir el tiempo de espera de solicitud. |
Problemas de datos no modelados
Cuando haya establecido que el dispositivo está enviando datos a IoT Central, el siguiente paso es asegurarse de que los envía en un formato válido.
Para detectar las categorías del problema, ejecute el comando de la CLI de Azure más apropiado para su escenario:
Para comprobar la telemetría, use el comando de la versión preliminar:
az iot central diagnostics validate-messages --app-id <iot-central-app-id> --device-id <device-name>
Para comprobar las actualizaciones de las propiedades, use el comando de la versión preliminar:
az iot central diagnostics validate-properties --app-id <iot-central-app-id> --device-id <device-name>
Es posible que se le pida que instale la biblioteca uamqp
la primera vez que ejecute un comando validate
.
Los tres tipos comunes de incidencias que hacen que los datos del dispositivo no aparezcan en IoT Central son los siguientes:
- La plantilla de dispositivo para los datos del dispositivo no coincide.
- Los datos son JSON no válidos.
- Las versiones anteriores de IoT Edge hacen que la telemetría de los componentes aparezca de manera incorrecta como datos no modelados.
La plantilla de dispositivo para los datos del dispositivo no coincide
Un dispositivo debe usar el mismo nombre con las mismas mayúsculas y minúsculas de la plantilla de dispositivo para los nombres de campo de telemetría de la carga útil que envía. En la salida siguiente se muestra un mensaje de advertencia de ejemplo en el que el dispositivo envía un valor de telemetría denominado Temperature
cuando debe ser 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 dispositivo debe usar el mismo nombre con las mismas mayúsculas y minúsculas de la plantilla de dispositivo para los nombres de propiedades de la carga útil que envía. En la salida siguiente se muestra un mensaje de advertencia de ejemplo en el que la propiedad osVersion
no está definida en la plantilla de dispositivo:
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 dispositivo debe usar los tipos de datos definidos en la plantilla de dispositivo para cualquier valor de propiedad o telemetría. Por ejemplo, verá un error de coincidencia de esquema si el tipo definido en la plantilla de dispositivo es booleano y el dispositivo envía una cadena. En la salida siguiente se muestra un mensaje de error de ejemplo en el que el dispositivo usa un valor de cadena para una propiedad definida como 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
Los comandos de validación también notificarán un error si se define el mismo nombre de telemetría en varias interfaces, pero el dispositivo no es compatible con IoT Plug and Play.
Si prefiere usar una GUI, use la vista Datos sin procesar de IoT Central y compruebe si algo no se está modelando.
Cuando haya detectado el problema, es posible que tenga que actualizar el firmware del dispositivo o crear una nueva plantilla de dispositivo que contenga los datos no modelados previamente.
Si decide crear una plantilla que modele los datos correctamente, migre los dispositivos de la plantilla anterior a la nueva. Para más información, consulte Administración de dispositivos en la aplicación de Azure IoT Central.
JSON no válido
Si no se notifica ningún error pero no aparece ningún valor, probablemente se trate de JSON con formato incorrecto en la carga que envía el dispositivo. Para más información, consulte Cargas de telemetría, propiedades y comandos.
No se pueden usar los comandos validate ni la vista Datos sin procesar de la interfaz de usuario para detectar si el dispositivo envía JSON con formato incorrecto.
Versión de IoT Edge
Para mostrar correctamente la telemetría de los componentes hospedados en los módulos de IoT Edge, use la versión IoT Edge 1.2.4 o posterior. Si usa una versión anterior, la telemetría de los componentes de los módulos de IoT Edge aparece como _unmodeleddata.
Problemas de identidad administrada de exportación de datos
Usa una identidad administrada para autorizar la conexión a un destino de exportación. Los datos no llegan al destino de exportación.
Antes de configurar o habilitar el destino de exportación, asegúrese de completar los pasos siguientes:
Habilite la identidad administrada para la aplicación de IoT Central. Para comprobar que la identidad administrada está habilitada, vaya a la página Identidad de la aplicación en Azure Portal o use el siguiente comando de la CLI:
az iot central app identity show --name {your app name} --resource-group {your resource group name}
Configure los permisos para la identidad administrada. Para ver los permisos asignados, seleccione Asignaciones de roles de Azure en la página Identidad de la aplicación en Azure Portal o use el comando
az role assignment list
de la CLI. Los permisos necesarios son:Destino Permiso Almacenamiento de blobs de Azure Colaborador de datos de blobs de almacenamiento Azure Service Bus Emisor de datos de Azure Service Bus Azure Event Hubs Emisor de datos de Azure Event Hubs Azure Data Explorer Administración Si los permisos no se establecieron correctamente antes de crear el destino en la aplicación de IoT Central, intente quitar el destino y vuelva a agregarlo.
Configure las redes virtuales, los puntos de conexión privados y las directivas de firewall.
Nota:
Si usa una identidad administrada para autorizar la conexión a un destino de exportación, IoT Central no exporta datos desde dispositivos simulados.
Para más información, consulte Exportación de datos.
Problemas de conexión de destino de exportación de datos
La página de definición de exportación muestra información sobre las conexiones erróneas al destino de exportación:
Problemas de datos que faltan en la exportación de datos
La exportación de datos solo exporta los datos que llegan a la aplicación después de habilitar la exportación de datos. Si necesita exportar datos históricos o datos que se han perdido mientras la exportación de datos se ha desactivado temporalmente, puede usar la API de REST de IoT Central para consultar la telemetría del dispositivo. Use una consulta para recuperar los datos que faltan y agregue los datos al destino de exportación. Para obtener más información, consulte Uso de la API de REST de IoT Central para consultar dispositivos.
Pasos siguientes
Si necesita más ayuda, puede ponerse en contacto con los expertos de Azure en los foros de Q&A o Stack Overflow. Como alternativa, puede abrir una incidencia de soporte técnico de Azure.
Para más información, consulte Opciones de ayuda y soporte técnico de IoT de Azure.