Solución de problemas

En esta sección, se describen los problemas comunes que puedes encontrar cuando usas Cloud IoT Core.

  • Si tu dispositivo tiene problemas para establecer una conexión TLS con el puente HDFS de Cloud IoT Core, es posible que tu entorno necesite el certificado raíz. Puedes instalar el certificado raíz de Google desde el sitio de la Autoridad de Internet de Google.

Mi dispositivo no se puede conectar al puente MQTT

El dispositivo intenta conectarse al puente MQTT, pero la conexión no se realiza correctamente. Lamentablemente, el protocolo MQTT no permite informes de errores sólidos, por lo que estos problemas pueden ser difíciles de depurar.

  • Verifica que puedas conectarte a través del protocolo SSL al puente Dexcom. Muchos firewalls corporativos bloquean el puerto 8883. Puedes trabajar con tu equipo de TI interno para permitir el acceso al puerto 8883 o puedes usar el puerto 443 en su lugar. Ejecuta uno de los siguientes comandos (según el puerto que uses) para probar la conexión TLS al puente MQTT.

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

    Si la conexión al extremo de mTLS es correcta, este comando imprime la información del certificado de servidor y la cadena. Permanecerá conectado y esperará la entrada. Esta prueba confirma que puede establecer una conexión TLS con Cloud IoT Core.

  • Verifica que tengas instalados los certificados raíz de Google. Puedes descargarlas desde el sitio de la autoridad de Google Internet.
  • Use gcloud para comprobar si hay errores y verificar que sus dispositivos y registros existan. Si intentas conectarte con un ID de dispositivo no válido, se cerrará la conexión de inmediato.

    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
    • El comando devices describe puede mostrar mensajes de error adicionales que se pueden usar para ayudar a depurar.
  • Verifica que las credenciales de tu dispositivo no hayan vencido mediante el comando devices describe. Si las credenciales no tienen un vencimiento establecido, nunca vencerán.

  • Verifica la reclamación exp en el JWT que usas para autenticar tu dispositivo. La vida útil máxima de un token es de 24 horas. Para obtener más información, consulta Utiliza tokens web JSON.

  • Verifica que el reloj del dispositivo sea correcto. El reloj del dispositivo determina cuándo conectarse al cliente de Dexcom para publicar datos del sensor, de modo que todos los dispositivos de la red deben sincronizarse con el servidor MQTT. Los clientes pueden usar el servidor NTP público de Google para sincronizar los relojes del dispositivo con la hora universal coordinada (UTC).

Mi dispositivo se desconecta del puente MQTT

Tu dispositivo puede conectarse al puente MQTT, pero se desconecta de inmediato o se desconecta de manera inesperada. Ten en cuenta que se esperan desconexiones muy ocasionales cuando los servidores se actualizan y se balancean.

  • Verifica el estado de error más reciente del dispositivo. Usa el siguiente comando de gcloud para revisar el mensaje y el estado de error más reciente de un dispositivo. Asegúrate de tener en cuenta la marca de tiempo; este campo no se borra y puede hacer referencia a un error anterior.

    gcloud iot devices describe DEVICE_ID \
      --project=PROJECT_ID \
      --region=REGION \
      --registry=REGISTRY_ID
    
  • Ejecuta los pasos de la sección anterior para asegurarte de que el dispositivo pueda conectarse.

  • Si el dispositivo se desconecta inmediatamente después de conectarse, verifica que tu biblioteca cliente de eSIM use MQTT 3.1.1. Muchas bibliotecas utilizan de forma predeterminada mTLS 3.1, que no es compatible con Cloud IoT Core y hará que el dispositivo se desconecte de inmediato. Por lo general, la versión se configura en las opciones de cliente de la biblioteca MQTT cuando se conecta por primera vez.

    • Por ejemplo, si usas el cliente Paho Java, deberás llamar a connectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);.
  • Si el dispositivo se desconecta inmediatamente después de enviar los datos de telemetría, verifique que haya creado un tema de Cloud Pub/Sub para la telemetría del dispositivo con los permisos adecuados establecidos. Consulta No recibo datos de telemetría en Cloud Pub/Sub.

  • Verifica la reclamación exp en el JWT que usas para autenticar tu dispositivo. La vida útil máxima de un token es de 24 horas. Para obtener más información, consulta Utiliza tokens web JSON. Después de que venza el JWT, el dispositivo se desconectará y deberá volver a conectarse. Este es el comportamiento esperado: tu dispositivo debería crear un nuevo JWT y volver a conectarse.

  • El puente MQTT permite solo una conexión para un ID de dispositivo determinado. Si un segundo dispositivo se conecta con el ID de uno que ya está conectado, se cerrará automáticamente la conexión anterior.

  • Verifica que tu dispositivo funcione con frecuencia. Las bibliotecas cliente de eSIM permiten especificar un ritmo de monitoreo de funcionamiento, y el dispositivo se desconectará si el puente de Dexcom no recibe un mensaje del dispositivo en 1.5 veces de esa cantidad de tiempo. Muchas bibliotecas cliente enviarán automáticamente un mensaje vacío si no se ha enviado ningún otro mensaje (un mensaje CNAME PINGREQ). Sin embargo, es posible que tu biblioteca cliente no lo haga automáticamente. Además, puede aumentar el ritmo cardíaco en la configuración del cliente de Dexcom para garantizar que su dispositivo pueda seguir el ritmo.

No recibo datos de telemetría en Cloud Pub/Sub

Tu dispositivo está conectado y publica mensajes en el puente MQTT. Sin embargo, no los recibes en el tema de Cloud Pub/Sub. Por lo general, esto significa que Cloud Pub/Sub está mal configurado o que se agotó la cuota.

  • Usa las secciones anteriores para verificar que tu dispositivo pueda conectarse y no se esté desconectando. Las bibliotecas cliente proporcionan devoluciones de llamada de conexión y desconexión, úsalas para asegurarte de que tu dispositivo se conecte correctamente.

  • En la página IAM de Google Cloud Console, verifique que la función Agente de servicio principal de Cloud IoT aparezca en la lista Miembros para la cuenta de servicio del proyecto relevante. (Busca la cuenta de servicio del proyecto que termina en @gcp-sa-cloudiot.iam.gserviceaccount.com).

    Si la función Agente de servicio principal de Cloud IoT no aparece en la lista Miembros, usa gcloud para agregar la función cloudiot.serviceAgent a la cuenta de servicio del proyecto correspondiente. Esta función incluye permisos para publicar en temas de Pub/Sub.

    Para buscar PROJECT_ID y PROJECT_NUMBER, consulta este artículo de ayuda.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent
    
  • Verifica que los temas configurados para tu registro sean correctos:

    gcloud iot registries describe REGISTRY_ID \
      --project=PROJECT_ID \
      --region=REGION
    
  • Verifica que hayas creado una suscripción para tus temas en la telemetría del dispositivo. Cloud Pub/Sub conservará un mensaje hasta que todas las suscripciones lo hayan confirmado. Sin embargo, si no hay suscriptores, el mensaje no se conservará.

    • Para mostrar la lista de suscripciones, haz lo siguiente:

      gcloud pubsub topics list-subscriptions \
         projects/my-iot-project/topics/TOPIC_NAME
    • Para crear una suscripción a un tema, haz lo siguiente:

      gcloud pubsub subscriptions create \
         projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME \
         --topic TOPIC_NAME
      
  • Verifica si puedes extraer mensajes de tu suscripción a través de gcloud. Si puedes extraerlos, pero no los recibes en el software cliente de Pub/Sub, es posible que el software cliente esté mal configurado.

    gcloud pubsub subscriptions pull \
       projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME
    
  • Si configuraste el registro de dispositivos para que tenga varios temas de Pub/Sub, verifica que se cumplan las siguientes condiciones:

    • La subcarpeta OTP o HTTP en la que publicas datos de telemetría tiene un tema de Pub/Sub que coincide

    • El registro de dispositivos tiene un tema de Pub/Sub predeterminado

    El tema de Pub/Sub predeterminado se usará para los eventos de telemetría publicados que no tienen una subcarpeta o si la subcarpeta especificada no tiene un tema coincidente. Si no seleccionas un tema de Pub/Sub predeterminado, se perderán estos eventos de telemetría.

    Debería agregar un tema de Pub/Sub predeterminado al crear un registro de dispositivos Si no lo hiciste, puedes agregar una con Cloud Console, el comando gcloud iot registries update o el método patch de DeviceRegistry. Para hacer que el nuevo tema de Pub/Sub sea el predeterminado para el registro de dispositivos, no especifiques una subcarpeta cuando agregues el tema.

Recibo datos de telemetría antiguos de Cloud Pub/Sub

Puedes recibir eventos de telemetría desde Cloud Pub/Sub. Sin embargo, tu suscriptor recibe eventos antiguos. Esto sucede cuando Cloud Pub/Sub acumula una cantidad de tareas pendientes. Cloud Pub/Sub garantiza que se entregará cada mensaje al menos una vez a cada suscripción a un tema y, si los suscriptores no consumen mensajes o los reconocen, se volverán a entregar. Esto puede suceder si el suscriptor no está ejecutando el video o si los mensajes se procesan demasiado lento.

  • Verifica que tu suscriptor de Cloud Pub/Sub reconozca los mensajes que se procesaron.
  • Si el suscriptor se retrasa, puedes borrar las tareas pendientes. Para ello, borra el suscriptor y vuelve a crearlo.

Otros problemas de Cloud Pub/Sub

Consulta la documentación de Cloud Pub/Sub.