Örnek uygulama
Home API'lerini kullanırken sorun yaşarsanız daha ayrıntılı hata ayıklama için günlükleri toplayabilirsiniz. Mobil cihazdan günlük toplamak için Android Debug Bridge (adb
) gerekir. Google'dan yardım almanız gerekiyorsa hem Android cihazlardan hem de hub'dan günlükleri toplayın ve sorun izleyicide ilgili bilgilerle birlikte bu bilgilerle ilişkili günlükleri içeren bir bilet açın.
Android günlüklerini toplama
adb
ile ilgili tüm adımlar için mobil cihazınızın yerel makinenize bağlı olması gerekir.
adb'yi yükleme
Henüz yapmadıysanız yerel makinenizde Android Debug Bridge'i kurun:
- Bilgisayarınıza "adb"yi yükleyin.
- Android telefonunuzda Geliştirici Seçenekleri ve USB üzerinden hata ayıklama'yı etkinleştirin.
Google Home Plugin for Android Studio
Google Home Plugin for Android Studio, günlükleri toplama ve analiz etme konusunda yardımcı olan bir araçtır ve özellikle Google Home platform geliştiricileri için oluşturulmuştur. Bu eklenti, Google Assistant Simulator geliştirme sürecinizi basitleştirmek için Google Assistant Simulator, Cloud Logging ve diğer araçlara erişmenizi sağlar.smart home
Cihaz günlüklerini daha ayrıntılı analiz etmek için bu aracı adb
ile birlikte kullanın.
Matter
Daha fazla bilgi edinmek ve aracı edinmek için Google Home Plugin for Android Studio sayfasına bakın.
Sürüm bilgileri
Günlükleri toplamaya karar verdiğinizde kurulumunuzla ilgili tüm sürüm bilgilerini toplamanızı öneririz. Sorunları Google ile paylaşmanız gerekiyorsa bu işlem zorunludur.
- Mobil cihazınızın kimliğini öğrenme:
adb devices
List of devices attached device-id device
- Bu değeri
phoneid
adlı bir değişkende saklayın:phoneid=device-id
- Çeşitli cihaz bilgilerini değişkenlere kaydetme:
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)
- Tüm değişkenleri
_versions.txt
adlı bir dosyaya kaydedin:Değişkenleri dosyaya kaydetme komutlarını göstermek için genişletin.
Bloğun tamamı kopyalanıp tek seferde bir terminale yapıştırılabilir.
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
_versions.txt
içeriğini doğrulayın:cat _versions.txt
Bu dosya artık sorun giderme için gerektiğinde Google'a sağlanabilir.Örnek dosya çıkışını göstermek için genişletin.
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):
Günlükleri toplama
Günlükleri toplamak için mobil cihazda çalışan tüm uygulamaları kapatın. Ardından:
- Bir terminal penceresi açın ve mevcut cihaz günlüklerini temizleyin:
adb logcat -b all -c
- Günlük toplama sürecini başlatın:
Bu terminali açık bırakın. Bu işlem, işlem çalıştığı sürece cihazınızdan günlükleri toplar.adb logcat >> _logs.txt
- Örnek uygulamayı çalıştırın ve tüm kullanıcı arayüzü işlemlerini yakalayın. İşlemi tamamladığınızda terminalde çalışan
logcat
işlemini durdurmak için Ctrl+C (veya Mac'te Cmd+C) tuşlarına basın. - Bu oturumdaki günlükler
_logs.txt
adlı bir dosyaya kaydedilir.
error
, exception
veya crash
gibi anahtar kelimeler arama da dahil olmak üzere çeşitli yöntemlerle bu dosyadaki bilgileri analiz edebilirsiniz.
Günlük komut dosyaları
Örnek Uygulama, ilgili günlükleri almak ve bunları bir metin dosyası halinde derlemek için komut dosyaları sağlar. En iyi hata ayıklama deneyimini sağlamak için bu günlükler, Google'ın temel neden analizini kolaylaştırmak amacıyla bildirilen hatalara eklenmelidir.
Bu günlükler, örnek uygulama kaynak ağacındaki scripts
dizininde bulunur.
Proje kök dizininden aşağıdaki adımları uygulayın:
- Mobil cihazınızın kimliğini öğrenme:
adb devices -l
List of devices attached device-id device
get_logs.sh
komut dosyasını çalıştırın:./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)
- Sorunu yeniden oluşturun.
- Komut dosyasını durdurmak için
CTRL+C
düğmesine basın.
Komut dosyası, ilgili tüm bilgileri içeren, zaman damgalı bir günlük dosyası oluşturur. Bunları, karşılaştığınız hatalarla ilgili raporlara ekleyin.
Cast hub cihaz günlükleri
Bu yöntemi kullanarak Google Nest Hub'ınızın cihaz günlüklerini görüntüleyebilirsiniz. Bu yöntem aşağıdaki modellerde desteklenir:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
Yerel günlükleri almak için bir Cast hub'ı etkinleştirmek üzere:
- Android Debug Bridge'i kurun.
Hub'ınızın IP adresini öğrenin:
- Ekrana sahipse hub'dan:
- Ekranın üst kısmından aşağı doğru kaydırın.
- Ayarlar simgesine dokunun.
- Cihazın IP adresini bulma: Nest Hub (2nd gen) cihazda Cihaz bilgileri > Teknik bilgiler > IP adresi'ne gidin.
- Telefonunuzdaki GHA simgesinden:
- Cihaz ayrıntıları sayfasını açmak için cihaza dokunun.
- Ayarlar simgesine dokunarak ayarlar sayfasını açın.
- Cihazın IP adresini bulmak için Cihaz bilgileri > Teknik bilgiler > IP adresi'ne gidin.
- Ekrana sahipse hub'dan:
Cihazla aynı kablosuz ağa bağlı bir bilgisayarda:
adb connect ip-address
adb logcat
Bir kullanıcıya günlük sağlamak için başarısız olan işlemi gerçekleştirin ve çıkışı bir metin dosyasına yönlendirin:
adb logcat -d > platform-logs.txt
Otomasyonlar
Kenar algılama
Google Home ekosistemindeki otomasyonlarda kenar algılama özelliği bulunur. Bu özellik, başlatıcının yalnızca gerçek bir durum değişikliği olduğunda etkinleştiğini doğrulayan bir mantıktır. Cihazın önceki durumunu tekrarlayan bir durum güncellemesi olduğunda etkinleşmez.
Örneğin, bir ışığı açmak bir başlangıç ise kenar algılama, başlangıcın yalnızca ışık cihazı kapalıdan açığa geçtiğinde (açıktan açığa değil) etkinleştiğini doğrular.
Otomasyon beklendiği gibi çalışmıyor
Kenar algılama dikkate alındıktan sonra bir otomasyon beklendiği gibi çalışmıyorsa:
Otomasyonunuzdan bağımsız olarak düzgün çalıştığından emin olmak için her cihazı kontrol edin.
Otomasyonunuzun otomasyon grafiğine göz atarak otomasyon DSL'nizle karşılaştırın. Böylece, sizin tarafınızdan yapılan olası yanlış varsayımları ortaya çıkarabilirsiniz.
Otomasyonunuz çalışırken Google Home uygulamasında cihaz durumunu gözlemleyin.
Otomasyon tarafından referans verilen tüm cihazların, olmasını beklediğiniz yapıda bulunduğundan emin olun. Bir otomasyonun bağlı olduğu cihazın silinmesi, istenmeyen sonuçlara yol açabilir. Cihaz silme işleminin otomasyonlar üzerindeki etkisi başlıklı makaleyi inceleyin.
Otomasyon, çalışmaması gereken zamanlarda çalışıyor
Otomasyonunuz gerekmediği zaman çalışıyorsa başlangıç ölçütlerini inceleyin. Durum değişikliğinin yalnızca bir kez yakalandığından ve otomasyonun yalnızca bir kez tetiklendiğinden emin olmak için ek mantık eklemek gerekebilir.
Otomasyon derlenmiyor
Uygulamanızın, farklı düğüm türlerine karşılık gelen her sınıfın yanı sıra referans verdiğiniz özellikler de dahil olmak üzere gerekli tüm içe aktarma işlemlerini içerdiğinden emin olun.
Otomasyon oluşturma işlemi doğrulanamadı
Otomasyon oluşturma işlemi doğrulamayı geçemezse bir uyarı veya hata mesajı
sorun hakkında bilgi verir. Daha fazla bilgi için ValidationIssueType
referansına bakın.
Liste işlevi istisnalar oluşturuyor
Automation API List işlevi çağrıldığında, okuma işleyicileri eksik API özellikleri nedeniyle istisna oluşturabilir. Bu sorunu azaltmak için etkilenen otomasyonu silin.
Bunu yapmak için:
adb
yüklü olduğundan emin olun. adb'yi yükleme başlıklı makaleyi inceleyin.Aşağıdaki komutu çağırarak otomasyonun kimliğini Android günlüklerinden alın:
adb logcat -s GhpNative
Örnek günlükler:
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" ...
Birden fazla otomasyon kimliğinin silinmesi gerekiyorsa çıkışı kontrol etmek için terminal sayfalayıcınızı kullanabilirsiniz:
adb logcat -s GhpNative level:debug | less
Otomasyonun kimliğini kullanarak otomasyonu silin:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
Discovery API, bir özellik kaydı silindiğinde uyarı günlüğe kaydeder
Discovery API, Trait not found
için bir uyarı günlüğe kaydederse bu, API'nin Discovery adayları için özelliği kullanmaya çalıştığı ancak özellik başlatma sırasında kaydedilmediği için başarılı olamayacağı anlamına gelir. Örneğin:
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
Özellik tanımlayıcısı home.matter.6006.clusters.fc43
olup RelativeHumidityControl
ile eşleşir. Bir kimlikten özellik adını belirlemek için Özellik dizinine bakın.
Bu örnekte, RelativeHumidityControl
uygulamanın başlatılması sırasında kaydedilmelidir. Özelliğinizi kayıt defterine eklemek için Özellikleri kaydetme başlıklı makaleyi inceleyin.
OAuth
Mevcut bir OAuth istemciniz varsa
Yayınlanmış bir uygulama için zaten doğrulanmış bir OAuth istemciniz varsa Home API'lerini test etmek için mevcut OAuth istemcinizi kullanabilirsiniz.
Ev API'lerini test etmek ve kullanmak için Google Home Developer Console kaydı gerekmez. Ancak, başka bir entegrasyondan doğrulanmış bir OAuth istemciniz olsa bile uygulamanızı yayınlamak için onaylanmış bir Developer Console kaydınızın olması gerekir.
Aşağıdaki noktaları göz önünde bulundurun:
Mevcut bir OAuth istemcisi kullanılırken 100 kullanıcı sınırı vardır. Test kullanıcısı ekleme hakkında bilgi edinmek içinOAuth izin ekranını ayarlayın. OAuth doğrulamadan bağımsız olarak, Home API'leri tarafından uygulamanıza izin verebilecek kullanıcı sayısı 100 ile sınırlandırılmıştır. Bu sınırlama, Developer Console kaydı tamamlandığında kaldırılır.
Developer Console kaydı , uygulamanızı Home API'leriyle güncellemeye hazırlanırken cihaz türü izinlerini OAuth üzerinden kısıtlamaya hazır olduğunuzda onay için gönderilmelidir.
OAuth doğrulaması bekleyen Google Cloud uygulamalarda, doğrulama tamamlanana kadar kullanıcılar OAuth akışını tamamlayamaz. İzin verme girişimleri aşağıdaki hatayla başarısız olur:
Access blocked: <Project Name> has not completed the Google verification process.