Google Cloud IoT Core ne sera plus disponible à compter du 16 août 2023. Pour en savoir plus, contactez l'équipe chargée de votre compte Google Cloud.

Dépannage

Cette section décrit les problèmes courants que vous pouvez rencontrer lors de l'utilisation de Cloud IoT Core.

  • Si votre appareil ne parvient pas à établir une connexion TLS au pont MQTT Cloud IoT Core, votre environnement peut avoir besoin du certificat racine. Vous pouvez installer le certificat racine de Google à partir du site Google Internet Authority.

Mon appareil ne parvient pas à se connecter au pont MQTT

Votre appareil tente de se connecter au pont MQTT, mais la connexion échoue. Malheureusement, le protocole MQTT ne permettant pas de rapports d'erreurs fiables, il peut être difficile de résoudre ces problèmes.

  • Vérifiez que vous pouvez vous connecter via SSL au pont MQTT. De nombreux pare-feu d'entreprise bloquent le port 8883. Pour autoriser l'accès au port 8883, contactez votre équipe informatique interne. Vous pouvez également utiliser le port 443. Exécutez l'une des commandes suivantes (selon le port que vous utilisez) pour tester la connexion TLS au pont MQTT.

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

    Si la connexion au point de terminaison MQTT est établie, cette commande affiche les informations sur la chaîne de certificats et le certificat du serveur. Il reste connecté et attend la saisie. Ce test confirme que vous êtes en mesure d'établir une connexion TLS à Cloud IoT Core.

  • Vérifiez que les certificats racine de Google sont installés. Vous pouvez les télécharger sur le site Google Internet Authority.
  • Utilisez gcloud pour vérifier les erreurs, et vérifier que vos appareils et vos registres existent. Si vous essayez de vous connecter avec un ID d'appareil non valide, la connexion sera immédiatement interrompue.

    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
    • La commande devices describe peut afficher des messages d'erreur supplémentaires qui peuvent être utilisés pour faciliter le débogage.
  • Vérifiez que les identifiants de votre appareil n'ont pas expiré à l'aide de la commande devices describe. Si les identifiants n'ont pas de date d'expiration, ils n'expirent jamais.

  • Vérifiez la revendication exp sur le JWT que vous utilisez pour authentifier votre appareil. La durée de vie maximale d'un jeton est de 24 heures. Pour en savoir plus, consultez Utiliser des jetons Web JSON.

  • Vérifiez que l'horloge de votre appareil est correcte. L'horloge de votre appareil détermine quand se connecter au client MQTT et publier les données des capteurs. Tous les appareils du réseau doivent donc être synchronisés avec le serveur MQTT. Les clients peuvent utiliser le serveur public NTP de Google pour synchroniser les horloges des appareils avec le temps universel coordonné (UTC).

Mon appareil est déconnecté du pont MQTT

Votre appareil peut se connecter au pont MQTT, mais il se déconnecte immédiatement ou de manière inattendue. Notez que des déconnexions très occasionnelles sont à prévoir, car les serveurs sont mis à jour et à équilibrage de charge.

  • Vérifiez l'état d'erreur le plus récent de l'appareil. Utilisez la commande gcloud ci-dessous pour consulter l'état et le message d'erreur les plus récents d'un appareil. Notez l'horodatage. Ce champ n'est pas effacé et peut faire référence à une erreur antérieure.

    gcloud iot devices describe DEVICE_ID \
      --project=PROJECT_ID \
      --region=REGION \
      --registry=REGISTRY_ID
    
  • Suivez la procédure de la section précédente pour vous assurer que l'appareil peut se connecter.

  • Si l'appareil se déconnecte immédiatement après la connexion, vérifiez que votre bibliothèque cliente MQTT utilise MQTT 3.1.1. De nombreuses bibliothèques utilisent par défaut MQTT 3.1, qui n'est pas compatible avec Cloud IoT Core et entraîne la déconnexion immédiate de l'appareil. La version est généralement définie dans les options client de la bibliothèque MQTT lors de la première connexion.

    • Par exemple, si vous utilisez le client Java Paho, vous devez appeler connectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);.
  • Si l'appareil se déconnecte immédiatement après l'envoi des données de télémétrie, vérifiez que vous avez créé un sujet Cloud Pub/Sub pour la télémétrie de l'appareil avec les autorisations appropriées. Consultez la section Je ne reçois pas les données de télémétrie sur Cloud Pub/Sub.

  • Vérifiez la revendication exp sur le JWT que vous utilisez pour authentifier votre appareil. La durée de vie maximale d'un jeton est de 24 heures. Pour en savoir plus, consultez Utiliser des jetons Web JSON. Une fois le jeton JWT expiré, l'appareil sera déconnecté et devra se reconnecter. Ce comportement est normal : votre appareil doit créer un nouveau jeton JWT et se reconnecter.

  • Le pont MQTT n'autorise qu'une seule connexion pour un ID d'appareil donné. Si un deuxième appareil se connecte avec l'ID d'un appareil déjà connecté, la connexion avec l'ancien appareil sera automatiquement interrompue.

  • Vérifiez que votre appareil présente une pulsation assez régulière. Les bibliothèques clientes MQTT permettent à l'utilisateur de spécifier un intervalle de pulsation, et votre appareil est déconnecté si le pont MQTT ne reçoit pas de message de l'appareil dans un délai égal à 1,5 fois cette durée. De nombreuses bibliothèques clientes envoient automatiquement un message vide si aucun autre message n'a été envoyé (un message PINGREQ MQTT). Toutefois, il est possible que votre bibliothèque cliente ne le fasse pas automatiquement. De plus, vous pouvez essayer d'augmenter l'intervalle de pulsation dans la configuration du client MQTT pour vous assurer que votre appareil est capable de suivre la cadence.

Je ne reçois pas les données de télémétrie sur Cloud Pub/Sub

Votre appareil est connecté et publie des messages sur le pont MQTT. Cependant, vous ne les recevez pas dans le sujet Cloud Pub/Sub. Cela signifie généralement que Cloud Pub/Sub est mal configuré ou n'a plus de quota.

  • Consultez les sections précédentes pour vérifier que votre appareil peut se connecter et qu'il n'est pas déconnecté. Les bibliothèques clientes fournissent des rappels de connexion et de déconnexion. Utilisez-les pour vérifier que votre appareil se connecte correctement.

  • Sur la page IAM de Google Cloud Console, vérifiez que le rôle Agent de service Cloud IoT Core apparaît dans la liste des Membres du compte de service de projet correspondant. (Recherchez le compte de service de projet qui se termine par @gcp-sa-cloudiot.iam.gserviceaccount.com.)

    Si le rôle Agent de service Cloud IoT Core n'apparaît pas dans la liste Membres, utilisez gcloud pour ajouter le rôle cloudiot.serviceAgent au compte de service du projet concerné. Ce rôle inclut l'autorisation de publier dans des sujets Pub/Sub.

    Pour trouver les valeurs PROJECT_ID et PROJECT_NUMBER, reportez-vous à cet article d'aide.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent
    
  • Vérifiez que les sujets configurés pour votre registre sont corrects :

    gcloud iot registries describe REGISTRY_ID \
      --project=PROJECT_ID \
      --region=REGION
    
  • Vérifiez que vous avez créé un abonnement à vos sujets pour la télémétrie des appareils. Cloud Pub/Sub conservera un message jusqu'à ce que tous les abonnements l'aient accusé de réception, mais s'il n'y a pas d'abonnés, votre message ne sera pas conservé.

    • Pour répertorier les abonnements :

      gcloud pubsub topics list-subscriptions \
         projects/my-iot-project/topics/TOPIC_NAME
    • Obligatoire pour créer un abonnement à un sujet :

      gcloud pubsub subscriptions create \
         projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME \
         --topic TOPIC_NAME
      
  • Vérifiez si vous pouvez extraire des messages de votre abonnement via gcloud. Si vous parvenez à les récupérer, mais qu'ils ne les reçoivent pas dans votre logiciel client Pub/Sub, celui-ci est peut-être mal configuré.

    gcloud pubsub subscriptions pull \
       projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME
    
  • Si vous avez configuré votre registre d'appareils pour disposer de plusieurs sujets Pub/Sub, vérifiez que les conditions suivantes sont remplies :

    • Le sous-dossier MQTT ou HTTP dans lequel vous publiez des données de télémétrie possède un sujet Pub/Sub correspondant.

    • Le registre d'appareils dispose d'un sujet Pub/Sub par défaut.

    Le sujet Pub/Sub par défaut sera utilisé pour les événements de télémétrie publiés qui n'ont pas de sous-dossier ou si le sous-dossier spécifié n'a pas de sujet correspondant. Si vous ne sélectionnez pas de sujet Pub/Sub par défaut, ces événements de télémétrie seront perdus.

    Vous devez ajouter un sujet Pub/Sub par défaut lorsque vous créez un registre d'appareils. Si ce n'est pas le cas, vous pouvez en ajouter un à l'aide de Google Cloud Console, de la commande gcloud iot registries update ou de la méthode patch du registre d'appareils. Pour que le nouveau sujet Pub/Sub soit utilisé par défaut dans le registre d'appareils, ne spécifiez pas de sous-dossier lorsque vous ajoutez le sujet.

Je reçois d'anciennes données de télémétrie de Cloud Pub/Sub

Vous pouvez recevoir des événements de télémétrie de Cloud Pub/Sub, mais votre abonné reçoit d'anciens événements. Cela se produit lorsque Cloud Pub/Sub crée des tâches en attente. Cloud Pub/Sub garantit qu'il distribue chaque message au moins une fois pour chaque abonnement associé à un sujet, et si les abonnés ne consomment pas de messages ou ne les confirment pas, ils seront redistribués. Cela peut se produire si votre abonné n'est pas en cours d'exécution ou traite les messages trop lentement.

  • Vérifiez que votre abonné Cloud Pub/Sub accuse réception des messages qu'il a traités.
  • Si votre abonné a pris du retard, vous pouvez supprimer les tâches en attente en supprimant l'abonné et en le recréant.

Autres problèmes liés à Cloud Pub/Sub

Consultez la documentation Cloud Pub/Sub.