App de ejemplo
Si tienes algún problema cuando usas las APIs de Home, puedes recopilar registros para depurar 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 el concentrador, y abre un ticket en el seguimiento de problemas con la información relevante y los registros 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 desarrolladores de Google Home platform. Este plugin 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 con mayor detalle los registros del dispositivo Matter.
Para obtener más información y obtener la herramienta, consulta Google Home Plugin for Android Studio.
Información de la versión
Te recomendamos que recopiles toda la información de versión relacionada con tu configuración cada vez que decidas recopilar registros. Esto 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 información diversa 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
Se puede copiar todo el bloque y pegarlo 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 puedes proporcionar este archivo 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 estén ejecutando en el dispositivo móvil. Luego:
- Abre una ventana de terminal y borra los registros de dispositivos existentes:
adb logcat -b all -c
- Inicia el proceso de recopilación de registros:
Deja esta terminal abierta. Esto recopilará registros de tu dispositivo mientras el proceso esté en ejecución.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
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, como buscar palabras clave, como error
, exception
o crash
.
Cómo registrar secuencias de comandos
Para tu comodidad, la app de ejemplo proporciona secuencias de comandos para obtener los registros relevantes y compilarlos en un archivo de texto. Para proporcionar la mejor experiencia de depuración, estos registros deben adjuntarse a los errores informados 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.
Para ejecutarlos, sigue los pasos que se indican a continuación 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 contiene toda la información relevante. Adjúntalos a los informes de errores que encuentres.
Registros del dispositivo de la unidad central de transmisión
Para ver los registros de dispositivos de tu unidad central de Google, haz lo siguiente:
- Configura Android Debug Bridge.
Obtén la dirección IP de tu concentrador:
- Desde el concentrador, si tiene una 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.
- En GHA en tu teléfono, haz lo siguiente:
- Presiona el dispositivo para abrir 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 concentrador, si tiene una 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 alguien, 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 cuentan con la detección de límites, que es una lógica que garantiza que un activador solo se active cuando haya un cambio de estado real, en lugar de una actualización de estado que solo repite el estado anterior del dispositivo.
Por ejemplo, si encender una luz es un activador, la detección de bordes garantiza que el activador solo se active si ese dispositivo de luz pasa de apagado a encendido, en lugar de 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:
Revisa cada dispositivo para asegurarte de que funcione correctamente, independientemente de la automatización.
Observa el gráfico de automatización y compáralo con tu DSL de automatización para revelar cualquier suposición potencialmente incorrecta de tu parte.
Observa el estado del dispositivo en la app de Google Home durante la ejecución de la automatización.
Asegúrate de que todos los dispositivos a los que hace referencia la automatización estén presentes en la estructura en la que 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 de activación. Es posible que debas agregar lógica adicional para asegurarte 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, incluidas cada clase que corresponda a los diferentes tipos de nodos, así como a los atributos a los que haces referencia.
La creación de la automatización no pasa la validación
Si la creación de 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 de lista de la API de Automation, los controladores de lectura pueden arrojar excepciones debido a que faltan funciones de la API. Para mitigar esto, borra la automatización afectada.
Para ello, sigue estos pasos:
- Asegúrate de tener
adb
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 visor de la terminal para controlar el resultado:
adb logcat -s GhpNative level:debug | less
Borra la automatización con el ID de la automatización:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
La API de Discovery registra una advertencia cuando no se registra un atributo
Si la API de Discovery registra una advertencia para Trait not found
, esto significa que la API intenta usar el atributo para los candidatos de Discovery, pero no tendrá éxito porque el atributo 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 atributo 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 atributos para agregar tu atributo al registro.
OAuth
Si tienes un cliente de OAuth existente
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, aún necesitarás 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, consulta Configura la pantalla de consentimiento de OAuth. Independientemente de la verificación de OAuth, existe un límite de 100 usuarios que pueden otorgar permisos a tu aplicación impuesto por las APIs de Home. Esta limitación se levanta cuando se completa el registro de Developer Console.
ElDeveloper Consoleregistro debe enviarse para su aprobación cuando tengas todo listo para restringir las concesiones de tipo de dispositivo 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.