Sorun giderme

Örnek uygulama

Home API'lerini kullanırken herhangi bir sorunla karşılaşırsanı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) gerekir. Google'dan yardıma ihtiyacınız varsa hem Android cihazlardan hem de merkezden günlükleri toplayın ve sorun izleyicide ilgili bilgileri ve günlükleri içeren bir kayıt 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 Hata Ayıklama Köprüsü'nü kurun:

  1. Bilgisayarınıza "adb" yükleyin.
  2. Android telefonunuzda Geliştirici Seçenekleri ve USB Hata Ayıklama'yı açın.

Android Studio için Google Home eklentisi

Google Home Plugin for Android Studio, günlükleri toplayıp analiz etmek için faydalı bir araçtır ve özellikle Google Home platform geliştiricileri için oluşturulmuştur. Bu eklenti, smart home geliştirme sürecinizi basitleştirmek için Google Assistant Simulator, Cloud Logging ve diğer araçlara erişim sağlar.

Cihaz günlüklerini daha ayrıntılı bir şekilde 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ını 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 gereklidir.

  1. Mobil cihazınızın kimliğini alın:
    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 kaydedin:
    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 bir terminale tek seferde 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 cihazda çalışan tüm uygulamaları kapatın. Ardından:

  1. Bir terminal penceresi açıp mevcut cihaz günlüklerini temizleyin:
    adb logcat -b all -c
  2. Günlük toplama işlemini başlatın:
    adb logcat >> _logs.txt
    Bu terminali açık bırakın. Bu işlem, süreç devam ettiği sürece cihazınızdan günlükler toplar.
  3. Örnek uygulamayı çalıştırın ve tüm kullanıcı arayüzü işlemlerini kaydedin. İşlemi tamamladığınızda Ctrl+C (veya Mac'te Cmd+C) tuşlarına basarak terminalde çalışan logcat işlemini durdurun.
  4. Bu oturumdaki günlükler _logs.txt adlı bir dosyaya kaydedilir.

Bu dosyadaki bilgileri, error, exception veya crash gibi anahtar kelimeler aramak da dahil olmak üzere çeşitli yöntemlerle analiz edebilirsiniz.

Günlük komut dosyaları

Size kolaylık sağlamak için örnek uygulamada, ilgili günlükleri almak ve bunları bir metin dosyasında derlemek için komut dosyaları sağlanmıştır. En iyi hata ayıklama deneyimini sunmak için bu günlükler, Google'ın temel neden analizini kolaylaştırmak amacıyla bildirilen tüm hatalara eklenmelidir.

Bu günlükler, örnek uygulama kaynak ağacındaki scripts dizininde bulunur. Bunları yürütmek için proje kök dizininden aşağıdaki adımları uygulayın:

  1. Mobil cihazınızın kimliğini alın:
    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 oluşturun.
  4. Komut dosyasını durdurmak için CTRL+C düğmesine basın.

Komut dosyası, tüm ilgili bilgileri içeren zaman damgalı bir günlük dosyası oluşturur. Bu bilgileri, karşılaştığınız hatalarla ilgili raporlara ekleyin.

Yayın merkezi cihaz günlükleri

Google merkezinizin cihaz günlüklerini görüntülemek için aşağıdakileri yapın:

  1. Android Debug Bridge'i kurun.
  2. Merkezinizin IP adresini alın:

    • Ekranı varsa hub'dan:
      1. Ekranın üst kısmından aşağı doğru kaydırın
      2. Ayarlar simgesine dokunun.
      3. Cihazın IP adresini bulma: Nest Hub (2nd gen) cihazında Cihaz bilgileri > Teknik bilgiler > IP Adresi'ne gidin.
    • Telefonunuzdaki GHA'ten:
      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 bulma: Cihaz bilgileri > Teknik bilgiler > IP adresi'ne gidin.
  3. Cihazla aynı kablosuz ağdaki bir bilgisayarda:

      adb connect ip-address
      adb logcat
    

  4. Günlükleri bir kullanıcıya sağlamak için başarısız olan işlemi gerçekleştirin ve çıkışı bir metin dosyasına aktarın:

      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ştirilmesini sağlayan mantıktır. Bu durum, cihazın önceki durumunu yalnızca tekrarlayan bir durum güncellemesinden farklıdır.

Örneğin, bir ışığı açmak başlatıcı ise kenar algılama, başlatıcının yalnızca ışık cihazı kapalıyken açık konuma geçtiğinde etkinleştirilmesini sağlar (değişiklik yok).

Otomasyon beklendiği gibi çalışmıyor

Kenar algılama dikkate alındıktan sonra bir otomasyon beklendiği gibi davranmıyorsa:

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

  2. Yanlış varsayımlarınızı ortaya çıkarmak için otomasyonunuzun otomasyon grafiğini inceleyin ve otomasyon DSL'nizle karşılaştırın.

  3. Otomasyonunuz çalıştırılırken Google Home uygulamasında cihaz durumunu gözlemleyin.

  4. Otomasyonun atıfta bulunduğu 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ışması gerekmediği halde çalışıyor

Otomasyonunuz olmaması gereken bir zamanda çalışıyorsa başlangıç ölçütlerini inceleyin. Durumdaki bir değişikliğin yalnızca bir kez yakalanmasını ve otomasyonun yalnızca bir kez tetiklenmesini sağlamak için ek mantık eklemeniz gerekebilir.

Otomasyon derlenmiyor

Uygulamanızda, farklı düğüm türlerine ve referans verdiğiniz özelliklere karşılık gelen her sınıf da dahil olmak üzere gerekli tüm içe aktarma işlemlerinin bulunduğundan emin olun.

Otomasyon oluşturma işlemi doğrulamada başarısız oluyor

Otomasyon oluşturma işlemi doğrulamayı geçemezse sorunla ilgili bilgiler bir uyarı veya hata mesajında sağlanır. Daha fazla bilgi için ValidationIssueType referansına bakın.

Liste işlevi istisnalar atar

Automation API List işlevi çağrılırken, okuma işleyicileri API özelliklerinin eksik olması nedeniyle istisnalar atabilir. Bu sorunu azaltmak için etkilenen otomasyonu silin.

Bunun için:

  1. adb'ü yüklediğinizden emin olun. adb'yi yükleme bölümüne bakın.
  2. Aşağıdakileri çağırarak Android günlüklerinden otomasyonun kimliğini 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
  3. Otomasyonun kimliğini kullanarak otomasyonu silin:

    structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
    

Discovery API, bir özellik kayıtlı olmadığında uyarı günlüğe kaydeder

Discovery API, Trait not found için uyarı kaydediyorsa API, Discovery adayları için özelliği kullanmaya çalışıyor demektir ancak özellik ilklendirme sırasında kaydedilmediği için bu işlem başarılı olmaz. Ö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'tir ve RelativeHumidityControl ile eşleşir. Bir kimlikten özellik adını belirlemek için Özellik dizini bölümüne bakın.

Bu örnekte, RelativeHumidityControl değerinin uygulamanın başlatılması sırasında kaydedilmesi gerekir. Ö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'leri test etmek için mevcut OAuth istemcinizi kullanabilirsiniz.

Home API'lerini test etmek ve kullanmak için Google Home Developer Console kaydı gerekli değildir. Ancak, başka bir entegrasyondan doğrulanmış bir OAuth istemciniz olsa bile uygulamanızı yayınlamak için onaylanmış bir Developer Console kaydına ihtiyacınız vardır.

Aşağıdaki noktalar dikkate alınmalıdır:

  • Mevcut bir OAuth istemcisi kullanırken 100 kullanıcı sınırı vardır. Test kullanıcıları ekleme hakkında bilgi edinmek için OAuth izin ekranını ayarlama başlıklı makaleyi inceleyin. OAuth doğrulamasından bağımsız olarak, uygulamanıza izin verebilecek 100 kullanıcıyla sınırlı bir Home API'si sınırı vardır. Bu sınırlama, Developer Console kaydı tamamlandıktan sonra kaldırılır.

  • Developer Console registration , uygulamanızı Home API'lerle 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ı beklemede olan Google Cloud uygulamaları için kullanıcılar, doğrulama tamamlanana kadar OAuth akışını tamamlayamaz. İzin verme denemeleri aşağıdaki hatayla başarısız olur:

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