Solução de problemas no Azure IoT Central
Este artigo inclui diretrizes de solução de problemas de conectividade do dispositivo e 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 atingindo a IoT Central.
Se você ainda não tiver feito isso, instale a az cli
ferramenta e a azure-iot
extensão.
Para saber como instalar o az cli
, consulte Instalar a CLI do Azure.
Para instalar a extensão azure-iot
, execute o seguinte comando:
az extension add --name azure-iot
Observação
Você pode ser solicitado a instalar a biblioteca uamqp
na primeira vez que executar um comando de extensão.
Quando você tiver instalado a extensão azure-iot
, inicie o dispositivo para ver se as mensagens que ele está enviando estão sendo direcionadas para a IoT central.
Use os seguintes comandos para entrar na assinatura onde seu aplicativo IoT Central está localizado:
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 seguinte exemplo:
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 a 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 seguinte exemplo:
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 os dados aparecerem no seu terminal, então os dados estão sendo encaminhados para o aplicativo IoT Central.
Se você não vir os dados exibidos após alguns minutos, tente pressionar a tecla Enter
ou return
no teclado, caso a saída esteja presa.
Se os dados ainda não estiverem aparecendo no seu terminal, é provável que o dispositivo esteja tendo problemas de conectividade ou não esteja enviando os dados corretamente para o IoT Central.
Verificar o status de provisionamento do seu dispositivo
Se seus dados não estiverem aparecendo no monitor da CLI, verifique o status de provisionamento do seu 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 de dispositivos | Descrição | Possível mitigação |
---|---|---|
Provisionado | Nenhum problema imediatamente reconhecível. | N/D |
Registrada | O dispositivo ainda não se conectou ao IoT Central. | Verifique se há problemas de conectividade nos logs do dispositivo. |
Bloqueado | O dispositivo está impedido de se conectar à IoT Central. | O dispositivo está impedido de se conectar ao aplicativo IoT Central. Desbloqueie o dispositivo na IoT Central e tente novamente. Para saber mais, confira 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 na IoT Central e tente novamente. Para saber mais, confira Valores de status do dispositivo |
Não atribuído | O dispositivo não está atribuído a um modelo de dispositivo. | Associe o dispositivo a um modelo de dispositivo para que a IoT Central saiba como analisar os dados. |
Saiba mais sobre Valores de status do dispositivo na interface do usuário e Valores de status do dispositivo na API REST.
Códigos do Erro
Se ainda não for possível diagnosticar por que seus dados não estão aparecendo no monitor-events
, a próxima etapa será procurar códigos de erro relatados pelo dispositivo.
Inicie uma sessão de depuração em seu dispositivo ou colete logs 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 as ações possíveis para mitigar.
Se você estiver vendo problemas relacionados ao fluxo de autenticação:
Código do erro | Descrição | 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 da solicitação correto como parte do fluxo de atestado ou use um SDK do 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 para os dispositivos como parte do fluxo de atestado do TPM. | Verifique se o dispositivo possui as credenciais corretas. |
404 | A instância do Serviço de Provisionamento de Dispositivos ou um recurso, como um registro, não existe. | Abra um tíquete no atendimento ao cliente. |
412 | O ETag da solicitação não corresponde ao ETag do recurso existente, de acordo com o RFC7232. |
Abra um tíquete no atendimento ao cliente. |
429 | O serviço está limitando as operações. Para obter os limites de serviço específicos, confira Limites do Serviço de Provisionamento de Dispositivos no Hub IoT. | Reduzir a frequência da mensagem, dividir as responsabilidades entre mais dispositivos. |
500 | Ocorreu um erro interno. | Arquivar um tíquete com o atendimento ao cliente para ver se eles podem ajudá-lo. |
Códigos de erro de autorização detalhados
Erro | Código de erro de assinatura | Observações |
---|---|---|
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á aguardando a aprovação de um operador ou um operador o bloqueou. |
401 IoTHubUnauthorized | O dispositivo está usando um token de segurança expirado. O Hub IoT relata esse erro. | |
401 IoTHubUnauthorized | DEVICE_DISABLED | O dispositivo está desabilitado neste Hub IoT e foi movido para outro. Reprovisionar o dispositivo. |
401 IoTHubUnauthorized | DEVICE_BLOCKED | Um operador bloqueou esse 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 na nuvem. Lembre-se de que, antes que o dispositivo possa carregar um arquivo, você deve configurar os uploads de arquivos do dispositivo em seu aplicativo.
Código do erro | Descrição | Possível mitigação |
---|---|---|
403006 | Você excedeu o número de operações simultâneas de upload de arquivo. Cada cliente de dispositivo é limitado a dez uploads de arquivos simultâneos. | Verifique se o dispositivo notifica imediatamente o IoT Central que a operação de upload de arquivo foi concluída. Se isso não funcionar, tente reduzir o tempo limite da solicitação. |
Problemas com dados não modelados
Quando você estabeleceu que seu dispositivo está enviando dados para a IoT Central, a próxima etapa é garantir que seu dispositivo esteja enviando dados em um formato válido.
Para detectar em quais categorias seu problema se enquadra, execute o comando da CLI do Azure mais apropriado para seu cenário:
Para validar a telemetria, use o comando de versão prévia:
az iot central diagnostics validate-messages --app-id <iot-central-app-id> --device-id <device-name>
Para validar atualizações de propriedades, use o comando em versão prévia:
az iot central diagnostics validate-properties --app-id <iot-central-app-id> --device-id <device-name>
Você pode ser solicitado a instalar a biblioteca uamqp
na primeira vez que executar um comando validate
.
Os três tipos comuns de problemas que fazem com que os dados do dispositivo não apareçam no IoT Central são:
- Incompatibilidade do modelo do dispositivo com os dados do dispositivo.
- Os dados são JSON inválidos.
- Versões antigas do IoT Edge fazem com que a telemetria dos componentes seja exibida incorretamente como dados não modelados.
Incompatibilidade do modelo do dispositivo com os dados do dispositivo
Um dispositivo deve usar o mesmo nome e padrão de maiúsculas e minúsculas usado no modelo de dispositivo para os nomes de campos de telemetria na carga que ele envia. A seguinte saída mostra um exemplo de mensagem de aviso em que o dispositivo está enviando um valor de telemetria chamado Temperature
, quando ele 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 padrão de maiúsculas e minúsculas usado no modelo de dispositivo para os nomes de propriedade na carga que ele envia. A seguinte saída 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 booliano e o dispositivo enviar uma cadeia de caracteres. A seguinte saída mostra um exemplo de mensagem de erro em que o dispositivo usa um valor de cadeia de caracteres para uma propriedade definida como um duplo:
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 relatarão um erro se o mesmo nome de telemetria for definido em várias interfaces, mas o dispositivo não estiver em conformidade com IoT Plug and Play.
Se você preferir usar uma GUI, use a exibição de Dados brutos da IoT Central para ver se algo não está sendo modelado.
Quando você detectar o problema, talvez seja necessário atualizar o firmware do dispositivo ou criar um novo modelo de dispositivo que modela dados não modelados anteriormente.
Se você optar por criar um novo modelo que modela os dados corretamente, migre os dispositivos do modelo antigo para o novo modelo. Para saber mais, consulte Gerenciar dispositivos no aplicativo Azure IoT Central.
JSON inválido
Se não há erros relatados, mas um valor não está aparecendo, provavelmente há JSON malformado na carga que o dispositivo envia. Para saber mais, confira Cargas de telemetria, propriedade e comando.
Você não pode usar os comandos de validação nem a exibição de Dados brutos na interface do usuário para detectar se o dispositivo está enviando JSON malformado.
Versão do IoT Edge
Para exibir a telemetria de componentes hospedados em módulos do IoT Edge corretamente, 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 do 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 comando da CLI
az role assignment list
. As permissões necessárias são:Destino Permissão Armazenamento de Blobs do Azure Colaborador de dados de blob de armazenamento Barramento de Serviço do Azure Remetente de dados do Barramento de Serviço do Azure Hubs de eventos do Azure Remetente de dados dos Hubs de Eventos do Azure Azure Data Explorer Administrador Se as permissões não foram definidas corretamente antes de você criar o destino em seu aplicativo do IoT Central, tente remover o destino e, em seguida, adicioná-lo novamente.
Configure todas as redes virtuais, pontos de extremidade privados e políticas de firewall.
Observação
Se você estiver usando uma identidade gerenciada para autorizar a conexão a um destino de exportação, o IoT Central não exportará dados de dispositivos simulados.
Para saber mais, confira Exportar dados.
Problemas de conexão de destino na exportação de dados
A página de definição de exportação mostra informações sobre conexões com falha no destino de exportação:
Problemas de dados ausentes na exportação de dados
A exportação de dados exporta apenas os dados que chegam ao seu aplicativos depois que você habilita a exportação de dados. Se você precisar exportar dados históricos ou dados que foram perdidos enquanto a exportação de dados foi temporariamente desativada, poderá usar a API REST do IoT Central para consultar a telemetria do dispositivo. Use uma consulta para recuperar os dados ausentes e adicione-os ao destino de exportação. Para saber mais, confira Como usar a API REST da IoT Central para consultar dispositivos.
Próximas etapas
Se precisar de mais ajuda, você pode contatar os especialistas do Azure nos fóruns do Microsoft Q&A e do Stack Overflow. Como alternativa, você pode registrar um tíquete de suporte do Azure.
Para obter mais informações, consulte Opções de ajuda e suporte do Azure IoT.