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 MQTT 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 puede conectarse al puente MQTT
Tu 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 MQTT. Muchos firewalls corporativos bloquean el puerto 8883. Puedes trabajar con el equipo interno de TI para permitir el acceso al puerto 8883 o puedes usar el puerto 443. 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 MQTT se ejecuta correctamente, este comando imprime la información de los certificados de servidor y de la cadena de certificados. Permanecerá conectado y esperará la entrada. Esta prueba confirma que puede establecer una conexión TLS con Cloud IoT Core.
- Verifica que tengas certificados raíz de Google instalados. Puedes descargarlas desde el sitio de la Autoridad de Internet de Google.
Usa gcloud para verificar errores y verificar que existan tus dispositivos y registros. 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.
- El comando
Verifica que las credenciales de tu dispositivo no estén vencidas mediante el comando
devices describe
. Si las credenciales no tienen vencimiento, estas nunca vencerán.Verifica la reclamación de
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 Usa tokens web JSON.Verifica que el reloj del dispositivo sea correcto. El reloj del dispositivo determina cuándo conectarse al cliente MQTT y publicar los datos del sensor. Por lo tanto, todos los dispositivos en 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 forma inesperada. Ten en cuenta que se esperan desconexiones muy ocasionales a medida que los servidores se actualizan y se balancean las cargas.
Verifica el estado de error más reciente del dispositivo. Usa el siguiente comando de gcloud para revisar el estado de error y el mensaje más recientes de un dispositivo. Asegúrate de tener en cuenta la marca de tiempo; este campo no se borra y puede referirse a un error anterior.
gcloud iot devices describe DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID
- El número de código de error se refiere al código de error de RPC de Google.
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 MQTT use MQTT 3.1.1. Muchas bibliotecas utilizan de forma predeterminada MQTT 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 del 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);
.
- Por ejemplo, si usas el cliente Paho Java, deberás llamar a
Si el dispositivo se desconecta inmediatamente después de enviar los datos de telemetría, verifica que hayas 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 de
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 Usa tokens web JSON. Una vez que venza el JWT, el dispositivo se desconectará y deberá volver a conectarse. Este es el comportamiento esperado: el dispositivo debe crear un nuevo JWT y volver a conectarse.El puente MQTT permite una sola conexión para un ID de dispositivo determinado. Si un segundo dispositivo se conecta con el ID de otro que ya está conectado, la conexión anterior se cerrará automáticamente.
Verifica que tu dispositivo funcione correctamente. Las bibliotecas cliente MQTT permiten al usuario especificar un intervalo de señal de monitoreo de funcionamiento. Tu dispositivo se desconectará si el puente MQTT no recibe un mensaje del dispositivo en 1.5 veces la cantidad de tiempo. Muchas bibliotecas cliente enviarán automáticamente un mensaje vacío si no se han enviado otros mensajes (un mensaje PINGREQ de MQTT). Sin embargo, es posible que tu biblioteca cliente no lo haga automáticamente. Además, puedes intentar aumentar el ritmo cardíaco en la configuración del cliente de MQTT para asegurarte de que tu 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 esté desconectado. 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 en Google Cloud Console, verifica que la función Agente de servicios 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 relevante. Esta función incluye el permiso 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 creaste una suscripción a tus temas para la telemetría del dispositivo. Cloud Pub/Sub conservará un mensaje hasta que todas las suscripciones lo hayan confirmado, pero si no hay suscriptores, tu mensaje no será persistente.
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 MQTT 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.
Debe agregar un tema de Pub/Sub predeterminado cuando cree un registro de dispositivos. Si no lo hiciste, puedes agregar una con Google Cloud Console, el comando
gcloud iot registries update
o el método DeviceRegistrypatch
. A fin de establecer el tema de Pub/Sub nuevo como predeterminado para el registro de dispositivos, no especifiques una subcarpeta cuando agregues el tema.
Recibo datos de telemetría antiguos de Cloud Pub/Sub.
Puede recibir eventos de telemetría de Cloud Pub/Sub. Sin embargo, su suscriptor recibe eventos antiguos. Esto sucede cuando Cloud Pub/Sub acumula tareas pendientes. Cloud Pub/Sub garantiza que entregará cada mensaje al menos una vez a cada suscripción a un tema y, si los suscriptores no consumen mensajes ni los reconocen, se volverán a entregar. Esto puede suceder si tu suscriptor no está activo o está procesando mensajes muy lento.
- Verifica que tu suscriptor de Cloud Pub/Sub reconozca los mensajes que procesó.
- 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.