App de ejemplo
Si tienes problemas cuando usas las APIs de Home, puedes recopilar registros para depurar aún más. Para recopilar registros del dispositivo móvil, se requiere Android Debug Bridge (adb
). Si necesitas asistencia de Google, recopila los registros de los dispositivos Android y del concentrador, y abre un ticket en el sistema de seguimiento de problemas con la información y los registros pertinentes asociados.
Recopila registros de Android
Tu dispositivo móvil debe estar conectado a tu máquina local para todos los pasos que involucren adb
.
Instala adb
Si aún no lo hiciste, configura Android Debug Bridge en tu máquina local:
- Instala "adb" en tu computadora.
- Activa las opciones para desarrolladores y la depuración por USB en tu teléfono Android.
Complemento de Google Home para Android Studio
Google Home Plugin for Android Studio es una herramienta útil para recopilar y analizar registros, y se creó específicamente para los desarrolladores de Google Home platform. Este complemento te brinda acceso a Google Assistant Simulator, Cloud Logging y otras herramientas para simplificar tu proceso de desarrollo de smart home.
Usa esta herramienta junto con adb
para analizar aún más los registros del dispositivo Matter.
Para obtener más información y conseguir la herramienta, consulta Google Home Plugin for Android Studio.
Información de la versión
Te recomendamos que recopiles toda la información de la versión relacionada con tu configuración cada vez que decidas recopilar registros. Este paso es obligatorio si necesitas compartir problemas con Google.
- Obtén el ID de tu dispositivo móvil:
adb devices
List of devices attached device-id device
- Almacena este valor en una variable llamada
phoneid
:phoneid=device-id
- Guarda diversa información del dispositivo en variables:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep "versionName" || true); homemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.home " || true); optionalhomemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.optional_home " || true); policyhomemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.policy_home" || true); threadinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.threadnetwork" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep versionName || true); enabledfeatures=$((adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "Enabled features" | grep -i "home") || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true)
- Guarda todas las variables en un archivo llamado
_versions.txt
:Expande para mostrar los comandos para guardar variables en un archivo
Todo el bloque se puede copiar y pegar en una terminal a la vez.
versionfile=$logtimestamp"_versions.txt" echo "Saving version info to $versionfile"
echo "Container version:" >> $versionfile echo $containerinfo >> $versionfile echo "" >> $versionfile
echo "Home Module version:" >> $versionfile echo $homemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Optional Home Module version:" >> $versionfile echo $optionalhomemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Policy Home Module version:" >> $versionfile echo $policyhomemoduleinfo >> $versionfile echo "" >> $versionfile
echo "Thread Module version:" >> $versionfile echo $threadinfo >> $versionfile echo "" >> $versionfile
echo "GHA version:" >> $versionfile echo $ghainfo >> $versionfile echo "" >> $versionfile
echo "Android version: " >> $versionfile echo $androidversion >> $versionfile echo "" >> $versionfile
echo "Android API version: " >> $versionfile echo $androidapiversion >> $versionfile echo "" >> $versionfile
echo "Found enabled features (blank if missing):" >> $versionfile echo $enabledfeatures >> $versionfile echo "" >> $versionfile
- Verifica el contenido de
_versions.txt
:cat _versions.txt
Ahora, este archivo se puede proporcionar a Google según sea necesario para solucionar problemas.Expande para mostrar el resultado del archivo de muestra
Container version: versionName=23.19.12 (190400-530524295) versionName=22.46.17 (190408-491726958)
Home Module version: com.google.android.gms.home [v230508900]
Optional Home Module version:
Policy Home Module version: com.google.android.gms.policy_home [230508900] [230508900065.505615668.505615668] [Download:000003be/dl-Home.integ_230508900100400.apk] [download:/Home.integ/230508900100400:Home.integ:230508900100400]
Thread Module version: com.google.android.gms.threadnetwork [v231912000]
GHA version: versionName=3.2.32.1
Android version: 13
Android API version: 33
Found enabled features (blank if missing):
Recopilar registros
Para recopilar registros, cierra todas las apps que se ejecutan en el dispositivo móvil. Luego:
- Abre una ventana de terminal y borra los registros existentes del dispositivo:
adb logcat -b all -c
- Inicia el proceso de recopilación de registros:
Deja esta terminal abierta. Esto recopilará registros de tu dispositivo mientras se ejecute el proceso.adb logcat >> _logs.txt
- Ejecuta la app de ejemplo y captura todas las acciones de la interfaz de usuario. Cuando termines, presiona Ctrl+C (o Cmd+C en Mac) para detener el proceso de
logcat
que se ejecuta en la terminal. - Los registros de esta sesión se guardan en un archivo llamado
_logs.txt
.
Puedes analizar la información de este archivo de varias maneras, incluida la búsqueda de palabras clave como error
, exception
o crash
.
Registra secuencias de comandos
Para tu comodidad, la app de ejemplo proporciona secuencias de comandos para obtener los registros pertinentes y compilarlos en un archivo de texto. Para proporcionar la mejor experiencia de depuración, estos registros deben adjuntarse a los errores que se informen para facilitar el análisis de la causa raíz por parte de Google.
Estos registros se encuentran en el directorio scripts
del árbol de origen de la app de ejemplo.
Ejecuta los siguientes pasos desde el directorio raíz del proyecto:
- Obtén el ID de tu dispositivo móvil:
adb devices -l
List of devices attached device-id device
- Ejecuta la secuencia de comandos
get_logs.sh
:./scripts/get_logs.sh device-id
Cleared previous logs from device. Saving version information to home_api_sample_logs_20240605233243.txt... Saving logs to home_api_sample_logs_20240605233243.txt... (Press CTRL+C to stop the script)
- Reproduce el problema.
- Presiona
CTRL+C
para detener la secuencia de comandos.
La secuencia de comandos generará un archivo de registro con marca de tiempo que contendrá toda la información pertinente. Adjunta estos archivos a los informes de errores que encuentres.
Registros del dispositivo del centro de transmisión
Con este método, puedes ver los registros del dispositivo de tu Google Nest Hub, que es compatible con los siguientes modelos:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
Para habilitar un centro de Cast para la recuperación de registros locales, haz lo siguiente:
- Configura Android Debug Bridge.
Obtén la dirección IP del concentrador:
- Desde el dispositivo central, si tiene pantalla, haz lo siguiente:
- Desliza el dedo hacia abajo desde la parte superior de la pantalla.
- Presiona el ícono de Configuración .
- Busca la dirección IP del dispositivo: En un Nest Hub (2nd gen), ve a Información del dispositivo > Información técnica > Dirección IP.
- Desde GHA en tu teléfono, haz lo siguiente:
- Presiona el dispositivo para que aparezca la página de detalles.
- Presiona el ícono de Configuración para abrir la página de configuración.
- Busca la dirección IP del dispositivo: Ve a Información del dispositivo > Información técnica > Dirección IP.
- Desde el dispositivo central, si tiene pantalla, haz lo siguiente:
En una computadora conectada a la misma red Wi-Fi que el dispositivo, haz lo siguiente:
adb connect ip-address
adb logcat
Para proporcionar registros a otra persona, realiza la operación que falla y canaliza el resultado a un archivo de texto:
adb logcat -d > platform-logs.txt
Automatizaciones
Detección de bordes
Las automatizaciones del ecosistema de Google Home incluyen la detección de bordes, que es una lógica que verifica que un activador solo se active cuando hay un cambio de estado real, a diferencia de una actualización de estado que simplemente repite el estado anterior del dispositivo.
Por ejemplo, si encender una luz es un activador, la detección de bordes verifica que el activador solo se active si el dispositivo de luz pasa de apagado a encendido, en lugar de encendido a encendido (sin cambios).
La automatización no se comporta como se espera
Después de tener en cuenta la detección de bordes, si una automatización no se comporta como se espera, haz lo siguiente:
Verifica cada dispositivo para asegurarte de que funcione correctamente independientemente de la automatización.
Echa un vistazo al gráfico de automatización de tu automatización y compáralo con tu DSL de automatización para detectar cualquier suposición potencialmente incorrecta de tu parte.
Observa el estado del dispositivo en la app de Google Home durante la ejecución de tu automatización.
Verifica que todos los dispositivos a los que hace referencia la automatización estén presentes en la estructura donde esperas que estén. Borrar un dispositivo del que depende una automatización puede tener consecuencias no deseadas. Consulta Impacto de la eliminación de dispositivos en las automatizaciones.
La automatización se ejecuta cuando no debería hacerlo
Si tu automatización se ejecuta cuando no debería, examina los criterios del activador. Es posible que sea necesario agregar lógica adicional para asegurarse de que un cambio de estado se capture solo una vez y active la automatización solo una vez.
La automatización no se compila
Asegúrate de que tu app contenga todas las importaciones necesarias, incluida cada clase correspondiente a los diferentes tipos de nodos, así como los rasgos a los que haces referencia.
La creación de la automatización no pasa la validación
Si la creación de la automatización no pasa la validación, un mensaje de advertencia o error proporciona información sobre el problema. Para obtener más información, consulta la referencia de ValidationIssueType
.
La función de lista arroja excepciones
Cuando se llama a la función List de la API de Automation, los controladores de lectura pueden arrojar excepciones debido a la falta de funciones de la API. Para mitigar este problema, borra la automatización afectada.
Para ello, sigue estos pasos:
- Verifica que
adb
esté instalado. Consulta Cómo instalar adb. Para recuperar el ID de la automatización de los registros de Android, invoca lo siguiente:
adb logcat -s GhpNative
Registros de ejemplo:
adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse INTERACTION RESPONSE -> SendCommandsResponse: 1 { 1: "automation@global" 3 { 1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse" 2: 5 { 1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse" 1 { 1: "1111-2222-3333-44444-55555" // Automation ID to delete 2: "structure@2222-3333-4444-5555-6666" ...
Si se deben borrar varios IDs de automatización, puedes usar el paginador de la terminal para controlar el resultado:
adb logcat -s GhpNative level:debug | less
Borra la automatización con su ID:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
La API de Discovery registra una advertencia cuando se anula el registro de un rasgo
Si la API de Discovery registra una advertencia para Trait not found
, significa que la API está intentando usar el rasgo para los candidatos de Discovery, pero no lo logrará porque el rasgo no se registró durante la inicialización. Por ejemplo:
09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582
El identificador del rasgo es home.matter.6006.clusters.fc43
, que corresponde a RelativeHumidityControl
. Para determinar el nombre del rasgo a partir de un ID, consulta el Índice de rasgos.
En este ejemplo, RelativeHumidityControl
debe registrarse durante la inicialización de la app. Consulta Cómo registrar rasgos para agregar tu rasgo al registro.
OAuth
Si ya tienes un cliente de OAuth
Si ya tienes un cliente de OAuth verificado para una app publicada, puedes usar tu cliente de OAuth existente para probar las APIs de Home.
No es necesario registrar Google Home Developer Console para probar y usar las APIs de Home. Sin embargo, seguirás necesitando un registro de Developer Console aprobado para publicar tu app, incluso si tienes un cliente de OAuth verificado de otra integración.
Se aplican las siguientes consideraciones:
Hay un límite de 100 usuarios cuando se usa un cliente de OAuth existente. Para obtener información sobre cómo agregar usuarios de prueba, consultaConfigura la pantalla de consentimiento de OAuth. Independientemente de la verificación de OAuth, las APIs de Home imponen un límite de 100 usuarios que pueden otorgar permisos a tu aplicación. Esta limitación se levanta cuando se completa el registro de Developer Console.
Developer Consoleregistro se debe enviar para su aprobación cuando esté todo listo para restringir las concesiones de tipos de dispositivos a través de OAuth en preparación para actualizar tu app con las APIs de Home.
En el caso de las apps de Google Cloud que aún tienen pendiente la verificación de OAuth, los usuarios no pueden completar el flujo de OAuth hasta que se complete la verificación. Los intentos de otorgar permisos fallarán con el siguiente error:
Access blocked: <Project Name> has not completed the Google verification process.