Sorun giderme

Ö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 Hata Ayıklama Köprüsü (adb) gereklidir. Google'dan yardıma ihtiyacınız varsa, hem Android cihazlardan hem de hub'dan günlükleri toplayın ve sorun izleyicide ilgili bilgiler ve ilgili günlüklerle birlikte bir destek talebi 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:

  1. Bilgisayarınıza "adb"yi yükleyin.
  2. Android telefonunuzda Geliştirici Seçenekleri ve USB 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 özel olarak 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 başlıklı makaleyi inceleyin.

Sürüm bilgileri

Günlük 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.

  1. Mobil cihazınızın kimliğini öğrenme:
    adb devices
    List of devices attached
    device-id    device
  2. Bu değeri phoneid adlı bir değişkende saklayın:
    phoneid=device-id
  3. Ç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)
  4. 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
  5. _versions.txt içeriğini doğrulayın:
    cat _versions.txt

    Ö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):
    Bu dosya artık sorun giderme için gerektiğinde Google'a sağlanabilir.

Günlükleri toplama

Günlükleri toplamak için mobil cihazınızda çalışan tüm uygulamaları kapatın. Ardından:

  1. Bir terminal penceresi açın ve mevcut cihaz günlüklerini temizleyin:
    adb logcat -b all -c
  2. Günlük toplama sürecini başlatın:
    adb logcat >> _logs.txt
    Bu terminali açık bırakın. Bu işlem, işlem çalıştığı sürece cihazınızdan günlükleri toplar.
  3. Ö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.
  4. Bu oturumdaki günlükler _logs.txt adlı bir dosyaya kaydedilir.

Bu dosyadaki bilgileri, error, exception veya crash gibi anahtar kelimeleri arayarak da dahil olmak üzere çeşitli yollarla analiz edebilirsiniz.

Günlük komut dosyaları

Kolaylığınız için, Örnek Uygulama ilgili günlükleri elde etmek için komut dosyaları sağlar ve bunları bir metin dosyasına derler. En iyi hata ayıklama deneyimini sunmak 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:

  1. Mobil cihazınızın kimliğini öğrenme:
    adb devices -l
    List of devices attached
    device-id device
  2. 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)
  3. Sorunu yeniden üretin.
  4. 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'ını etkinleştirmek için:

  1. Android Hata Ayıklama Köprüsü'nü kurun.
  2. Hub'ınızın IP adresini öğrenin:

    • Ekranı olan bir hub'dan:
      1. Ekranın üstünden aşağı doğru kaydırın
      2. Ayarlar simgesine dokunun.
      3. Cihazın IP adresini bulma: Nest Hub (2nd gen) cihazda Cihaz bilgileri > Teknik bilgiler > IP adresi'ne gidin.
    • Telefonunuzdaki GHA adresinden:
      1. Cihaz ayrıntıları sayfasını açmak için cihaza dokunun
      2. Ayarlar sayfasını açmak için Ayarlar simgesine dokunun
      3. Cihazın IP adresini bulun: Cihaz bilgileri > Teknik bilgiler > IP adresi'ne gidin
  3. Cihazla aynı Wi-Fi ağında bulunan bir bilgisayarda:

      adb connect ip-address
      adb logcat
    

  4. 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 otomasyonlar, bir başlatıcının yalnızca gerçek bir durum değişikliği olduğunda etkinleştiğini doğrulayan bir mantık olan kenar algılama özelliğine sahiptir; bu, cihazın önceki durumunu tekrarlayan bir durum güncellemesinin aksinedir.

Ö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:

  1. Otomasyonunuzdan bağımsız olarak düzgün çalıştığından emin olmak için her cihazı kontrol edin.

  2. Otomasyonunuzun otomasyon grafiğine bir göz atın ve bunu otomasyon DSL'nizle karşılaştırarak tarafınızdan olası yanlış varsayımları ortaya çıkarın.

  3. Otomasyonunuzun yürütülmesi sırasında Google Home uygulamasında cihaz durumunu gözlemleyin.

  4. Otomasyonun referans verdiği tüm cihazların beklediğiniz yapıda mevcut olduğ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 çalışmaması gerektiği zamanlarda ç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 ve başvurduğunuz özellikler dahil olmak üzere gerekli tüm içe aktarımları içerdiğinden emin olun.

Otomasyon oluşturma doğrulamayı geçemedi

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:

  1. adb yüklü olduğundan emin olun. adb'yi yükle bölümüne bakın.
  2. Otomasyonun kimliğini Android günlüklerinden almak için şunu çağırı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
  3. 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 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ğrulaması dışında, uygulamanıza izin verebilecek kullanıcı sayısı 100 ile sınırlıdır. Bu sınır, Home API'leri tarafından belirlenir. Bu sınırlama, Developer Console kaydı tamamlandığında kaldırılır.

  • Developer Console registration , uygulamanızı Home API'leriyle güncellemeye hazırlanırken OAuth üzerinden cihaz türü izinlerini kısıtlamaya hazır olduğunuzda onay için gönderilmelidir.

OAuth doğrulaması bekleyen Google Cloud uygulamalarda, kullanıcılar doğrulama tamamlanana kadar OAuth akışını tamamlayamaz. İzin verme girişimleri aşağıdaki hatayla başarısız olacaktır:

Access blocked: <Project Name> has not completed the Google verification process.