Resolver problemas relacionados com a não apresentação dos dados dos seus dispositivos no Azure IoT Central

Este documento ajuda-o a descobrir por que razão os dados que os seus dispositivos estão a enviar para a IoT Central podem não estar a aparecer na aplicação.

Há duas áreas principais para investigar:

  • Problemas de conectividade do dispositivo
    • Problemas de autenticação como o dispositivo têm credenciais inválidas
    • Problemas de conectividade de rede
    • O dispositivo não é aprovado, ou bloqueado
  • Problemas de forma de carga útil do dispositivo

Este guia de resolução de problemas foca-se em problemas de conectividade do dispositivo e problemas de forma de carga útil do dispositivo.

Problemas de conectividade do dispositivo

Esta secção ajuda-o a determinar se os seus dados estão a chegar à IoT Central.

Se ainda não o fez, instale a ferramenta e azure-iot a az cli extensão.

Para aprender a instalar o az cli, consulte instalar o Azure CLI.

Para instalar a azure-iot extensão, executar o seguinte comando:

az extension add --name azure-iot

Nota

Pode ser solicitado a instalar a uamqp biblioteca na primeira vez que executar um comando de extensão.

Quando instalar a extensão, inicie o azure-iot seu dispositivo para ver se as mensagens que está a enviar estão a caminho da IoT Central.

Utilize os seguintes comandos para iniciar sposição na subscrição onde tem a sua aplicação IoT Central:

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

Para monitorizar a telemetria que o seu dispositivo está a enviar, utilize o seguinte comando:

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

Se o dispositivo tiver sido ligado com sucesso à IoT Central, vê saída semelhante à seguinte:

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

Para monitorizar as atualizações da propriedade, o seu dispositivo está a trocar com a IoT Central, utilize o seguinte comando de pré-visualização:

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

Se o dispositivo enviar com sucesso atualizações de propriedade, vê saída semelhante à seguinte:

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 vir que os dados aparecem no seu terminal, então os dados estão a chegar à sua aplicação IoT Central.

Se não vir nenhum dado aparecer após alguns minutos, tente premir a Enter ou return a chave no teclado, caso a saída esteja presa.

Se ainda não está a ver nenhum dado aparecer no seu terminal, é provável que o seu dispositivo esteja com problemas de conectividade de rede, ou não esteja a enviar dados corretamente para a IoT Central.

Verifique o estado de provisionamento do seu dispositivo

Se os seus dados não estiverem a aparecer no monitor, verifique o estado de provisionamento do seu dispositivo executando o seguinte comando:

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

A seguinte saída mostra um exemplo de um dispositivo que está bloqueado de ligação:

{
  "@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 provisionamento do dispositivo Descrição Possível mitigação
Aprovisionado Não há problema imediatamente reconhecível. N/D
Registado O dispositivo ainda não está ligado à IoT Central. Verifique se os registos do seu dispositivo são problemas de conectividade.
Bloqueado O dispositivo está bloqueado da ligação à IoT Central. O dispositivo está bloqueado da ligação à aplicação IoT Central. Desbloqueie o dispositivo na IoT Central e recomprina. Para saber mais, consulte os valores do estado do Dispositivo.
Não aprovado O dispositivo não está aprovado. O dispositivo não está aprovado para ligar à aplicação IoT Central. Aprove o dispositivo na IoT Central e redaça. Para saber mais, consulte os valores do estado do Dispositivo
Não atribuído 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 analisar os dados.

Saiba mais sobre os valores de estado do Dispositivo.

Códigos de erro

Se ainda não conseguir diagnosticar por que razão os seus dados não aparecem monitor-events, o próximo passo é procurar códigos de erro reportados pelo seu dispositivo.

Inicie uma sessão de depurar o seu dispositivo ou recolha registos do seu dispositivo. Verifique se há códigos de erro que o dispositivo reporte.

As tabelas que se seguem mostram os códigos de erro comuns e as possíveis ações para mitigar.

Se estiver a ver questões relacionadas com o seu fluxo de autenticação:

Código de erro Descrição Possível Mitigação
400 O corpo do pedido não é válido. Por exemplo, não pode ser analisado, ou o objeto não pode ser validado. Certifique-se de que está a enviar o corpo de pedido correto como parte do fluxo de atestado, ou utilize um dispositivo SDK.
401 O sinal de autorização não pode ser validado. Por exemplo, expirou ou não se aplica ao URI do pedido. Este código de erro também é devolvido aos dispositivos como parte do fluxo de atestado TPM. Certifique-se de que o seu dispositivo tem as credenciais corretas.
404 A instância do Serviço de Provisionamento de Dispositivos, ou um recurso como uma inscrição não existe. Arquive um bilhete com apoio ao cliente.
412 O ETag pedido não corresponde ao ETag recurso existente, de acordo com o RFC7232. Arquive um bilhete com apoio ao cliente.
429 As operações estão a ser estranguladas pelo serviço. Para limites de serviço específicos, consulte Hub IoT limites de Serviço de Fornecimento de Dispositivos. Reduza a frequência da mensagem, divida responsabilidades entre mais dispositivos.
500 Ocorreu um erro interno. Preencha um bilhete com o apoio ao cliente para ver se eles podem ajudá-lo ainda mais.

Códigos de erro de autorização detalhados

Erro Código de erro Notas
401 Não Autorizado 401002 O aparelho está a utilizar credenciais inválidas ou expiradas. Este erro é reportado pela DPS.
401 Não Autorizado 400209 O aparelho está à espera da aprovação de um operador ou foi bloqueado por um operador.
401 IoTHubUnauthorized O dispositivo está a usar um sinal de segurança expirado. Este erro é reportado por Hub IoT.
401 IoTHubUnauthorized DEVICE_DISABLED O dispositivo está desativado neste hub IoT e mudou-se para outro hub IoT. Re-provisões para o dispositivo.
401 IoTHubUnauthorized DEVICE_BLOCKED Um operador bloqueou este dispositivo.

Códigos de erro de upload de ficheiros

Aqui está uma lista de códigos de erro comuns que pode ver quando um dispositivo tenta enviar um ficheiro para a nuvem. Lembre-se que antes de o seu dispositivo poder carregar um ficheiro, tem de configurar os uploads de ficheiros do dispositivo na sua aplicação.

Código de erro Descrição Possível Mitigação
403006 Excedeu o número de operações de upload de ficheiros simultâneos. Cada cliente do dispositivo está limitado a 10 uploads de ficheiros simultâneos. Certifique-se de que o dispositivo notifica prontamente a IoT Central de que a operação de upload de ficheiros foi concluída. Se isso não funcionar, tente reduzir o tempo limite de pedido.

Questões de dados não identificadas

Quando tiver estabelecido que o seu dispositivo está a enviar dados para a IoT Central, o próximo passo é garantir que o seu dispositivo está a enviar dados num formato válido.

Para detetar em que categorias está o seu problema, execute o comando Azure CLI mais adequado para o seu cenário:

  • Para validar a telemetria, utilize o comando de pré-visualização:

    az iot central diagnostics validate-messages --app-id <app-id> --device-id <device-name>
    
  • Para validar as atualizações de propriedade, utilize o comando de pré-visualização:

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

Pode ser solicitado a instalar a uamqp biblioteca na primeira vez que executar um validate comando.

Os três tipos comuns de problemas que fazem com que os dados do dispositivo não apareçam na IoT Central são:

  • Modelo do dispositivo para dispositivo desajuste de dados.
  • Os dados são inválidos JSON.
  • Versões antigas de IoT Edge fazem com que a telemetria dos componentes apresente incorretamente como dados não apresentados.

Modelo de dispositivo para desfasamento de dados do dispositivo

Um dispositivo deve utilizar o mesmo nome e invólucro utilizados no modelo do dispositivo para quaisquer nomes de campo de telemetria na carga útil que envia. A seguinte saída mostra uma mensagem de aviso exemplo para onde o dispositivo está a enviar 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 utilizar o mesmo nome e invólucro utilizados no modelo do dispositivo para quaisquer nomes de propriedade na carga útil que envia. A seguinte saída mostra uma mensagem de aviso de exemplo onde a propriedade osVersion não está definida no modelo do 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 utilizar os tipos de dados definidos no modelo do dispositivo para qualquer telemetria ou valores de propriedade. Por exemplo, vê um esquema desfasamento se o tipo definido no modelo do dispositivo for boolean, mas o dispositivo envia uma corda. A seguinte saída mostra uma mensagem de erro de exemplo onde o dispositivo usa um valor de cadeia para uma propriedade que é 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 relatam um erro se o mesmo nome de telemetria for definido em várias interfaces, mas o dispositivo não é Plug and Play compatível com IoT.

Se preferir usar um GUI, use a vista de dados IoT Central Raw para ver se algo não está a ser modelado.

Screenshot da vista de dados brutos

Quando tiver detetado o problema, poderá necessitar de atualizar o firmware do dispositivo ou criar um novo modelo de dispositivo que modela dados previamente não modelados.

Se escolheu criar um novo modelo que modele os dados corretamente, migrar dispositivos do seu modelo antigo para o novo modelo. Para saber mais, consulte Gerir dispositivos na sua aplicação Azure IoT Central.

JSON inválido

Se não houver erros relatados, mas um valor não aparece, então provavelmente é um JSON mal formado na carga útil que o dispositivo envia. Para saber mais, consulte telemetria, propriedade e cargas de comando.

Não é possível utilizar os comandos validados ou a vista de dados Raw na UI para detetar se o dispositivo está a enviar JSON mal formado.

Versão do IoT Edge

Para visualizar a telemetria dos componentes alojados nos módulos IoT Edge corretamente, utilize IoT Edge versão 1.2.4 ou posterior. Se utilizar uma versão anterior, a telemetria a partir de componentes em IoT Edge os módulos exibem _unmodeleddata.

Passos seguintes

Se precisar de mais ajuda, pode contactar os especialistas do Azure nos fóruns de Q A e Stack Overflow Microsoft&. Em alternativa, pode arquivar um bilhete suporte do Azure.

Para mais informações, consulte as opções de suporte Azure IoT e ajuda.