Solução de problemas no Azure IoT Central
Este artigo inclui diretrizes de solução de problemas para problemas de conectividade de dispositivos e problemas de configuração de exportação de dados em seus aplicativos do IoT Central.
Problemas de conectividade do dispositivo
Esta seção ajuda você a determinar se seus dados estão chegando ao IoT Central.
Se ainda não o fez, instale a ferramenta e azure-iot
a az cli
extensão.
Para saber como instalar o az cli
, consulte Instalar a CLI do Azure.
Para instalar a azure-iot
extensão, execute o seguinte comando:
az extension add --name azure-iot
Nota
Você pode ser solicitado a instalar a uamqp
biblioteca na primeira vez que executar um comando de extensão.
Depois de instalar a azure-iot
extensão, inicie o dispositivo para ver se as mensagens que ele está enviando estão chegando ao IoT Central.
Use os seguintes comandos para entrar na assinatura onde você tem seu aplicativo IoT Central:
az login
az account set --subscription <your-subscription-id>
Para monitorar a telemetria que seu dispositivo está enviando, use o seguinte comando:
az iot central diagnostics monitor-events --app-id <iot-central-app-id> --device-id <device-name>
Se o dispositivo tiver se conectado com êxito ao IoT Central, você verá uma saída semelhante ao exemplo a seguir:
Monitoring telemetry.
Filtering on device: device-001
{
"event": {
"origin": "device-001",
"module": "",
"interface": "",
"component": "",
"payload": {
"temp": 65.57910343679293,
"humid": 36.16224660107426
}
}
}
Para monitorar as atualizações de propriedade que seu dispositivo está trocando com o IoT Central, use o seguinte comando de visualização:
az iot central diagnostics monitor-properties --app-id <iot-central-app-id> --device-id <device-name>
Se o dispositivo enviar atualizações de propriedade com êxito, você verá uma saída semelhante ao exemplo a seguir:
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'}
Se você vir dados aparecendo em seu terminal, os dados estão chegando até o seu aplicativo IoT Central.
Se você não vir nenhum dado aparecer depois de alguns minutos, tente pressionar a Enter
tecla ou return
no teclado, caso a saída esteja presa.
Se você ainda não estiver vendo nenhum dado aparecer no seu terminal, é provável que seu dispositivo esteja com problemas de conectividade de rede ou não esteja enviando dados corretamente para o IoT Central.
Verificar o estado de aprovisionamento do seu dispositivo
Se os dados não estiverem aparecendo no monitor da CLI, verifique o status de provisionamento do dispositivo executando o seguinte comando:
az iot central device registration-info --app-id <iot-central-app-id> --device-id <device-name>
A saída a seguir mostra um exemplo de um dispositivo que está impedido de se 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
}
}
Status de provisionamento do dispositivo | Description | Possível atenuação |
---|---|---|
Aprovisionado | Nenhum problema imediatamente reconhecível. | N/A |
Registado | O dispositivo ainda não se conectou ao IoT Central. | Verifique os registos do dispositivo para problemas de conectividade. |
Bloqueado | O dispositivo está impedido de se conectar ao IoT Central. | O dispositivo está impedido de se conectar ao aplicativo IoT Central. Desbloqueie o dispositivo no IoT Central e tente novamente. Para saber mais, consulte Valores de status do dispositivo. |
Não aprovado | O dispositivo não foi aprovado. | O dispositivo não está aprovado para se conectar ao aplicativo IoT Central. Aprove o dispositivo no IoT Central e tente novamente. Para saber mais, consulte Valores de status do dispositivo |
Não atribuídas | O dispositivo não está atribuído a um modelo de dispositivo. | Atribua o dispositivo a um modelo de dispositivo para que o IoT Central saiba como analisar os dados. |
Saiba mais sobre os valores de status do dispositivo na interface do usuário e os valores de status do dispositivo na API REST.
Códigos de erro
Se você ainda não conseguir diagnosticar por que seus dados não estão aparecendo no monitor-events
, a próxima etapa é procurar códigos de erro relatados pelo seu dispositivo.
Inicie uma sessão de depuração no seu dispositivo ou recolha registos do seu dispositivo. Verifique se há códigos de erro relatados pelo dispositivo.
As tabelas a seguir mostram os códigos de erro comuns e possíveis ações a serem atenuadas.
Se você estiver vendo problemas relacionados ao seu fluxo de autenticação:
Código de erro | Description | Possível mitigação |
---|---|---|
400 | O corpo da solicitação não é válido. Por exemplo, ele não pode ser analisado ou o objeto não pode ser validado. | Certifique-se de que você está enviando o corpo de solicitação correto como parte do fluxo de atestado ou use um SDK de dispositivo. |
401 | O token de autorização não pode ser validado. Por exemplo, ele expirou ou não se aplica ao URI da solicitação. Esse código de erro também é retornado aos dispositivos como parte do fluxo de atestado do TPM. | Certifique-se de que o seu dispositivo tem as credenciais corretas. |
404 | A instância do Serviço de Provisionamento de Dispositivo ou um recurso como um registro não existe. | Registre um ticket com o suporte ao cliente. |
412 | O ETag na solicitação não corresponde ao ETag do recurso existente, conforme RFC7232. |
Registre um ticket com o suporte ao cliente. |
429 | O serviço está limitando as operações. Para limites de serviço específicos, consulte Limites do Serviço de Provisionamento de Dispositivos do Hub IoT. | Reduza a frequência das mensagens, divida as responsabilidades entre mais dispositivos. |
500 | Ocorreu um erro interno. | Registre um ticket com o suporte ao cliente para ver se eles podem ajudá-lo ainda mais. |
Códigos de erro de autorização detalhados
Erro | Sub código de erro | Notas |
---|---|---|
401 Não Autorizado | 401002 | O dispositivo está usando credenciais inválidas ou expiradas. O DPS relata esse erro. |
401 Não Autorizado | 400209 | O dispositivo está à espera da aprovação de um operador ou um operador bloqueou-o. |
401 IoTHubNão autorizado | O dispositivo está usando token de segurança expirado. O Hub IoT relata esse erro. | |
401 IoTHubNão autorizado | DEVICE_DISABLED | O dispositivo está desativado neste hub IoT e foi movido para outro hub IoT. Reprovisione o dispositivo. |
401 IoTHubNão autorizado | DEVICE_BLOCKED | Um operador bloqueou este dispositivo. |
Códigos de erro de upload de arquivo
Aqui está uma lista de códigos de erro comuns que você pode ver quando um dispositivo tenta carregar um arquivo para a nuvem. Lembre-se de que, antes que seu dispositivo possa carregar um arquivo, você deve configurar o upload de arquivos de dispositivo em seu aplicativo.
Código de erro | Description | Possível mitigação |
---|---|---|
403006 | Você excedeu o número de operações simultâneas de upload de arquivos. Cada cliente de dispositivo é limitado a 10 carregamentos de arquivos simultâneos. | Verifique se o dispositivo notifica imediatamente o IoT Central de que a operação de carregamento de arquivos foi concluída. Se isso não funcionar, tente reduzir o tempo limite da solicitação. |
Problemas de dados não modelados
Quando você tiver estabelecido que seu dispositivo está enviando dados para o IoT Central, a próxima etapa é garantir que seu dispositivo esteja enviando dados em um formato válido.
Para detetar em quais categorias seu problema está, execute o comando mais apropriado da CLI do Azure para seu cenário:
Para validar a telemetria, use o comando de visualização:
az iot central diagnostics validate-messages --app-id <iot-central-app-id> --device-id <device-name>
Para validar atualizações de propriedade, use o comando de visualização:
az iot central diagnostics validate-properties --app-id <iot-central-app-id> --device-id <device-name>
Poderá ser-lhe pedido para instalar a uamqp
biblioteca na primeira vez que executar um validate
comando.
Os três tipos comuns de problema que fazem com que os dados do dispositivo não apareçam no IoT Central são:
- Modelo de dispositivo para incompatibilidade de dados do dispositivo.
- Os dados são JSON inválidos.
- As versões antigas do IoT Edge fazem com que a telemetria dos componentes seja exibida incorretamente como dados não modelados.
Incompatibilidade de dados de modelo de dispositivo para dispositivo
Um dispositivo deve usar o mesmo nome e invólucro usados no modelo de dispositivo para qualquer nome de campo de telemetria na carga útil enviada. A saída a seguir mostra um exemplo de mensagem de aviso em que o dispositivo está enviando um valor de telemetria chamado Temperature
, quando deveria 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']}'.
Um dispositivo deve usar o mesmo nome e invólucro usados no modelo de dispositivo para quaisquer nomes de propriedade na carga que ele envia. A saída a seguir mostra um exemplo de mensagem de aviso em que a propriedade osVersion
não está definida no modelo 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']}'.
Um dispositivo deve usar os tipos de dados definidos no modelo de dispositivo para qualquer telemetria ou valores de propriedade. Por exemplo, você verá uma incompatibilidade de esquema se o tipo definido no modelo de dispositivo for booleano, mas o dispositivo enviar uma cadeia de caracteres. A saída a seguir mostra um exemplo de mensagem de erro em que o dispositivo usa um valor de cadeia de caracteres para uma propriedade definida como dupla:
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
Os comandos de validação também relatam um erro se o mesmo nome de telemetria for definido em várias interfaces, mas o dispositivo não for compatível com IoT Plug and Play.
Se preferir usar uma GUI, use a visualização de dados Raw do IoT Central para ver se algo não está sendo modelado.
Quando tiver detetado o problema, talvez seja necessário atualizar o firmware do dispositivo ou criar um novo modelo de dispositivo que modele dados não modelados anteriormente.
Se você optar por criar um novo modelo que modele os dados corretamente, migre os dispositivos do modelo antigo para o novo. Para saber mais, consulte Gerenciar dispositivos em seu aplicativo do Azure IoT Central.
JSON inválido
Se não houver erros relatados, mas um valor não estiver aparecendo, provavelmente é JSON malformado na carga útil que o dispositivo envia. Para saber mais, consulte Telemetria, propriedade e cargas úteis de comando.
Não é possível usar os comandos validate ou a visualização de dados brutos na interface do usuário para detetar se o dispositivo está enviando JSON malformado.
Versão do IoT Edge
Para exibir corretamente a telemetria de componentes hospedados em módulos do IoT Edge, use o IoT Edge versão 1.2.4 ou posterior. Se você usar uma versão anterior, a telemetria dos componentes nos módulos do IoT Edge será exibida como _unmodeleddata.
Problemas de identidade gerenciada de exportação de dados
Você está usando uma identidade gerenciada para autorizar a conexão com um destino de exportação. Os dados não estão chegando ao destino de exportação.
Antes de configurar ou habilitar o destino de exportação, conclua as seguintes etapas:
Habilite a identidade gerenciada para o aplicativo IoT Central. Para verificar se a identidade gerenciada está habilitada, vá para a página Identidade do seu aplicativo no portal do Azure ou use o seguinte comando da CLI:
az iot central app identity show --name {your app name} --resource-group {your resource group name}
Configure as permissões para a identidade gerenciada. Para exibir as permissões atribuídas, selecione Atribuições de função do Azure na página Identidade do seu aplicativo no portal do Azure ou use o
az role assignment list
comando CLI. As permissões necessárias são:Destino Permissão Armazenamento de Blobs do Azure Contribuidor de Dados de Blobs de Armazenamento Azure Service Bus Remetente de Dados do Azure Service Bus Hubs de Eventos do Azure Remetente de Dados dos Hubs de Eventos do Azure Azure Data Explorer Admin Se as permissões não foram definidas corretamente antes de criar o destino em seu aplicativo IoT Central, tente remover o destino e adicioná-lo novamente.
Configure quaisquer redes virtuais, pontos de extremidade privados e políticas de firewall.
Nota
Se você estiver usando uma identidade gerenciada para autorizar a conexão com um destino de exportação, o IoT Central não exportará dados de dispositivos simulados.
Para saber mais, consulte Exportar dados.
Problemas de conexão de destino de exportação de dados
A página de definição de exportação mostra informações sobre conexões com falha com o destino da exportação:
Problemas de exportação de dados ausentes
A exportação de dados só exporta os dados que chegam ao seu aplicativo depois que você habilita a exportação de dados. Se precisar exportar dados históricos ou dados perdidos enquanto a exportação de dados foi temporariamente desativada, você pode usar a API REST do IoT Central para consultar a telemetria do dispositivo. Use uma consulta para recuperar os dados ausentes e, em seguida, adicione os dados ao seu destino de exportação. Para saber mais, consulte Como usar a API REST do IoT Central para consultar dispositivos.
Próximos passos
Se precisar de mais ajuda, pode contactar os especialistas do Azure nos fóruns de Perguntas e Respostas da Microsoft e Estouro de Pilha. Como alternativa, você pode registrar um tíquete de suporte do Azure.
Para obter mais informações, consulte Opções de suporte e ajuda do Azure IoT.