Solução de problemas

Nesta seção, descrevemos problemas comuns que você pode encontrar ao usar o Cloud IoT Core.

  • Se o dispositivo tiver problemas para estabelecer uma conexão TLS com a ponte MQTT do Cloud IoT Core, talvez o ambiente precise do certificado raiz. Você pode instalar o certificado raiz do Google no site do Google Internet Authority.

Meu dispositivo não consegue se conectar à ponte MQTT

Seu dispositivo tenta se conectar à ponte MQTT, mas a conexão falha. Infelizmente, o protocolo MQTT não permite relatórios de erros eficientes, então esses problemas podem ser difíceis de depurar.

  • Verifique se você consegue se conectar via SSL à ponte MQTT. Muitos firewalls corporativos bloqueiam a porta 8883. Você pode trabalhar com a equipe de TI interna para permitir o acesso à porta 8883 ou usar a porta 443. Execute um dos comandos a seguir, dependendo da porta que você estiver usando, para testar a conexão TLS com a ponte MQTT.

    openssl s_client -connect mqtt.googleapis.com:8883
    
    openssl s_client -connect mqtt.googleapis.com:443
    

    Se a conexão com o endpoint MQTT for concluída, esse comando exibirá as informações da cadeia de certificados e do certificado do servidor. Ele permanecerá conectado e aguardará a entrada. Este teste confirma que você é capaz de estabelecer uma conexão TLS com o Cloud IoT Core.

  • Verifique se os certificados raiz do Google estão instalados. Você pode fazer o download do site do Google Internet Authority.
  • Use o gcloud para verificar erros e verificar se os dispositivos e os registros existem. Se você tentar se conectar com um ID de dispositivo inválido, a conexão será encerrada imediatamente.

    gcloud iot registries describe REGISTRY_ID \
          --project=PROJECT_ID \
          --region=REGION
    
     gcloud iot devices describe DEVICE_ID \
          --project=PROJECT_ID \
          --region=REGION \
          --registry=REGISTRY_ID
    • O comando devices describe pode mostrar outras mensagens de erro que podem ser usadas para ajudar a depurar.
  • Verifique se as credenciais do seu dispositivo estão expiradas usando o comando devices describe. Se as credenciais não tiverem um conjunto de expiração, elas nunca expirarão.

  • Verifique a declaração exp no JWT que você usa para autenticar o dispositivo. A vida útil máxima de um token é de 24 horas. Para detalhes, consulte Como usar tokens JSON da Web.

  • Verifique se o relógio do dispositivo está preciso. O relógio do seu dispositivo determina quando se conectar ao cliente MQTT e publicar os dados do sensor. Por isso, todos os dispositivos na rede precisam ser sincronizados com o servidor MQTT. Os clientes podem usar o servidor NTP público do Google para sincronizar os relógios do dispositivo com o horário universal coordenado (UTC, na sigla em inglês).

Meu dispositivo está desconectado da ponte MQTT

Seu dispositivo consegue se conectar à ponte MQTT, mas é desconectado imediatamente ou desconectado inesperadamente. Observe que desconexões muito ocasionais são esperadas à medida que os servidores são atualizados e submetidos a balanceamento de carga.

  • Verifique o status de erro mais recente do dispositivo. Use o comando gcloud abaixo para analisar o status de erro e a mensagem mais recentes de um dispositivo. Anote o carimbo de data/hora. esse campo não é limpo e pode se referir a um erro anterior.

    gcloud iot devices describe DEVICE_ID \
      --project=PROJECT_ID \
      --region=REGION \
      --registry=REGISTRY_ID
    
  • Siga as etapas na seção anterior para garantir que o dispositivo consiga se conectar.

  • Se o dispositivo se desconectar imediatamente após a conexão, verifique se a biblioteca de cliente MQTT está usando MQTT 3.1.1. Muitas bibliotecas assumem como padrão o MQTT 3.1, que não é compatível com o Cloud IoT Core e fará com que o dispositivo seja desconectado imediatamente. Normalmente, a versão é definida nas opções do cliente da biblioteca MQTT ao se conectar pela primeira vez.

    • Por exemplo, se você estiver usando o cliente Java Paho, será necessário chamar connectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);.
  • Se o dispositivo se desconectar imediatamente após enviar dados de telemetria, verifique se você criou um tópico do Cloud Pub/Sub para telemetria do dispositivo com as permissões adequadas definidas. Consulte Não estou recebendo dados de telemetria no Cloud Pub/Sub.

  • Verifique a declaração exp no JWT que você usa para autenticar o dispositivo. A vida útil máxima de um token é de 24 horas. Para detalhes, consulte Como usar tokens JSON da Web. Depois que o JWT expirar, o dispositivo será desconectado e precisará ser reconectado. Esse é o comportamento esperado, seu dispositivo precisa criar um novo JWT e se reconectar.

  • A ponte MQTT permite apenas uma única conexão para um determinado ID de dispositivo. Se um segundo dispositivo se conectar com o ID de um dispositivo que já está conectado, a conexão mais antiga será encerrada automaticamente.

  • Verifique se o dispositivo está funcionamento com frequência suficiente. As bibliotecas de cliente do MQTT permitem que o usuário especifique um sinal de funcionamento e seu dispositivo será desconectado se a ponte MQTT não receber uma mensagem do dispositivo em um intervalo de tempo 1, 5x. Muitas bibliotecas de cliente enviarão automaticamente uma mensagem vazia se nenhuma outra for enviada (uma mensagem MQTT PINGREQ). No entanto, isso pode não ser feito automaticamente. Além disso, é possível tentar aumentar o sinal de funcionamento na configuração do cliente MQTT para garantir que o dispositivo consiga acompanhar.

Não estou recebendo dados de telemetria no Cloud Pub/Sub

O dispositivo está conectado e publicando mensagens na ponte MQTT; No entanto, você não os receberá no tópico do Cloud Pub/Sub. Isso geralmente significa que o Cloud Pub/Sub está configurado ou fora da cota.

  • Use as seções anteriores para verificar se seu dispositivo consegue se conectar e não está sendo desconectado. As bibliotecas de cliente fornecem callbacks de conexão e desconexão. Use essas informações para garantir que o dispositivo esteja conectado.

  • Na página do IAM no Console do Google Cloud, verifique se o papel Agente de serviço do Cloud IoT Core aparece na lista Participantes da conta de serviço do projeto em questão. (Procure a conta de serviço do projeto que termina com @gcp-sa-cloudiot.iam.gserviceaccount.com.)

    Se o papel Agente de serviço do Cloud IoT Core não aparecer na lista Membros, use gcloud para adicionar o papel cloudiot.serviceAgent ao relevante. conta de serviço do projeto. Esse papel inclui permissão para publicar em tópicos do Pub/Sub.

    Para encontrar PROJECT_ID e PROJECT_NUMBER, consulte este artigo de ajuda.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent
    
  • Verifique se os tópicos configurados para o registro estão corretos:

    gcloud iot registries describe REGISTRY_ID \
      --project=PROJECT_ID \
      --region=REGION
    
  • Verifique se você criou uma assinatura para seus tópicos para telemetria do dispositivo. O Cloud Pub/Sub manterá uma mensagem até que todas as assinaturas a reconheçam. Porém, se não houver inscritos, ela não será mantida.

    • Para listar assinaturas:

      gcloud pubsub topics list-subscriptions \
         projects/my-iot-project/topics/TOPIC_NAME
    • Para criar uma assinatura de um tópico:

      gcloud pubsub subscriptions create \
         projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME \
         --topic TOPIC_NAME
      
  • Verifique se é possível extrair mensagens da sua assinatura via gcloud. Se você conseguir extraí-los, mas não os receber no software cliente do Pub/Sub, talvez seu software cliente esteja configurado incorretamente.

    gcloud pubsub subscriptions pull \
       projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME
    
  • Se você configurou o registro do dispositivo para ter vários tópicos do Pub/Sub, verifique se os seguintes itens são verdadeiros:

    • A subpasta MQTT ou HTTP em que você está publicando dados de telemetria tem um tópico do Pub/Sub correspondente

    • O registro do dispositivo tem um tópico padrão do Pub/Sub

    O tópico padrão do Pub/Sub será usado para eventos de telemetria publicados que não têm uma subpasta ou se a subpasta especificada não tem um tópico correspondente. Se você não selecionar um tópico padrão do Pub/Sub, esses eventos de telemetria serão perdidos.

    Adicione um tópico padrão do Pub/Sub ao criar um registro de dispositivo. Se não tiver feito isso, adicione um usando o console, o comando gcloud iot registries update ou o método DeviceRegistry patch. Para tornar o novo tópico do Pub/Sub padrão para o registro do dispositivo, não especifique uma subpasta ao adicionar o tópico.

Estou recebendo dados de telemetria antigos do Cloud Pub/Sub

É possível receber eventos de telemetria do Cloud Pub/Sub; No entanto, o assinante está recebendo eventos antigos. Isso acontece quando o Cloud Pub/Sub cria um backlog. O Cloud Pub/Sub garante que entregará cada mensagem pelo menos uma vez a cada assinatura de um tópico e, se os assinantes não estiverem consumindo mensagens ou confirmando as mensagens, eles serão reenviados. Isso pode acontecer quando o assinante não está executando ou está processando mensagens muito lentamente.

  • Verifique se o assinante do Cloud Pub/Sub está confirmando as mensagens processadas.
  • Caso seu assinante tenha ficado atrasado, exclua o backlog e recrie esse backlog.

Outros problemas do Cloud Pub/Sub

Consulte a documentação do Cloud Pub/Sub.