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 avec le pont MQTT Cloud IoT, votre environnement peut exiger le certificat racine. Vous pouvez installer le certificat racine de Google à partir du site de l'autorité Internet de Google.

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 permet pas de créer des rapports d'erreurs fiables. Ces problèmes peuvent donc être difficiles à déboguer.

  • 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 relatives à la chaîne de certificats et au certificat du serveur. Il restera connecté et attendra une entrée. Ce test confirme que vous pouvez établir une connexion TLS à Cloud IoT Core.

  • Vérifiez que les certificats racines de Google sont installés. Vous pouvez les télécharger sur le site de l'autorité Internet de Google.
  • 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 fermée immédiatement.

    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 pouvant être utilisés pour le débogage.
  • Vérifiez que les identifiants de votre appareil n'ont pas expiré en utilisant la commande devices describe. Si les identifiants n'ont pas de date d'expiration définie, 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 l'article Utiliser des jetons Web JSON.

  • Vérifiez que l'horloge de votre appareil est exacte. 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 de leur appareil avec le fuseau horaire 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 s'est déconnecté de façon inattendue. Sachez que des déconnexions sont très occasionnelles à mesure que les serveurs sont mis à jour et que la charge est équilibrée.

  • Vérifiez l'état d'erreur le plus récent de l'appareil. Utilisez la commande gcloud ci-dessous pour connaître l'état et le message d'erreur les plus récents d'un appareil. Veuillez noter que l'horodatage 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 les étapes 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 le protocole MQTT 3.1.1. De nombreuses bibliothèques utilisent par défaut l'option 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 Paho Java, 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 des appareils 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 l'article Utiliser des jetons Web JSON. Une fois le jeton JWT arrivé à expiration, l'appareil est déconnecté et doit se reconnecter. Ce comportement est normal. Votre appareil doit créer un nouveau jeton JWT et se reconnecter.

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

  • 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. Toutefois, vous ne les recevez pas dans le sujet Cloud Pub/Sub. Cela signifie généralement que Cloud Pub/Sub est mal configuré ou dépasse le quota.

  • Consultez les sections précédentes pour vérifier que votre appareil peut se connecter et ne pas être déconnecté. Les bibliothèques clientes fournissent des rappels de connexion et de déconnexion. Utilisez-les pour vous assurer 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 du projet concerné. (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 pour la télémétrie des appareils. Cloud Pub/Sub conserve un message jusqu'à ce que tous les abonnements l'aient confirmé. Toutefois, en l'absence d'abonnés, votre message n'est 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 parvenez à extraire des messages de votre abonnement via gcloud. Si vous parvenez à les extraire, mais que vous ne les recevez pas, il est possible que votre logiciel client soit 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 est 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é ne comporte pas de sujet correspondant. Si vous ne sélectionnez aucun 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 lors de la création d'un registre d'appareils. Si vous ne l'avez pas encore fait, vous pouvez le faire à l'aide de Google Cloud Console, de la commande gcloud iot registries update ou de la méthode DeviceRegistry patch. Pour définir le nouveau sujet Pub/Sub par défaut pour le registre d'appareils, ne spécifiez pas de sous-dossier lorsque vous ajoutez ce sujet.

Reçoit d'anciennes données de télémétrie depuis Cloud Pub/Sub

Vous pouvez recevoir des événements de télémétrie depuis Cloud Pub/Sub. Toutefois, votre abonné reçoit d'anciens événements. Cela se produit lorsque Cloud Pub/Sub crée un réseau en attente. Cloud Pub/Sub garantit qu'il distribue chaque message au moins une fois pour chaque abonnement associé à un sujet. Si les abonnés ne consultent pas de messages ou ne les reconnaissent pas, ils sont renvoyé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 l'abonné est en retard, vous pouvez effacer les tâches en attente en supprimant l'abonné et en le recréant.

Autres problèmes Cloud Pub/Sub

Consultez la documentation Cloud Pub/Sub.