Pemecahan masalah

Aplikasi contoh

Jika mengalami masalah saat menggunakan Home API, Anda dapat mengumpulkan log untuk proses debug lebih lanjut. Pengumpulan log dari perangkat seluler memerlukan Android Debug Bridge (adb). Jika Anda memerlukan bantuan dari Google, kumpulkan log dari perangkat Android dan hub, lalu buka tiket di Issue Tracker dengan informasi dan log yang relevan yang terkait dengannya.

Mengumpulkan log Android

Perangkat seluler Anda harus terhubung ke komputer lokal untuk semua langkah yang melibatkan adb.

Menginstal adb

Jika belum melakukannya, siapkan Android Debug Bridge di komputer lokal Anda:

  1. Instal "adb" di komputer Anda.
  2. Aktifkan Opsi Developer dan Proses Debug USB di ponsel Android Anda.

Plugin Google Home untuk Android Studio

Google Home Plugin for Android Studio adalah alat yang berguna untuk mengumpulkan dan menganalisis log, dan dibuat khusus untuk developer Google Home platform. Plugin ini memberi Anda akses ke Google Assistant Simulator, Cloud Logging, dan alat lainnya untuk menyederhanakan proses pengembangan smart home.

Gunakan alat ini bersama dengan adb untuk menganalisis log perangkat Matter lebih lanjut.

Untuk mempelajari lebih lanjut dan mendapatkan alat ini, lihat Google Home Plugin for Android Studio.

Informasi versi

Sebaiknya kumpulkan semua informasi versi yang terkait dengan penyiapan Anda setiap kali Anda memutuskan untuk mengumpulkan log. Hal ini diperlukan jika Anda perlu menyampaikan masalah kepada Google.

  1. Dapatkan ID perangkat seluler Anda:
    adb devices
    List of devices attached
    device-id    device
  2. Simpan nilai ini dalam variabel yang disebut phoneid:
    phoneid=device-id
  3. Simpan berbagai informasi perangkat ke variabel:
    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. Simpan semua variabel ke file bernama _versions.txt:

    Luaskan untuk menampilkan perintah guna menyimpan variabel ke file

    Seluruh blok dapat disalin dan ditempel ke terminal sekaligus.

    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. Verifikasi konten _versions.txt:
    cat _versions.txt

    Luaskan untuk menampilkan contoh output file

    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):
    File ini sekarang dapat diberikan kepada Google sesuai kebutuhan untuk pemecahan masalah.

Mengumpulkan log

Untuk mengumpulkan log, tutup semua aplikasi yang berjalan di perangkat seluler. Lalu:

  1. Buka jendela terminal dan hapus log perangkat yang ada:
    adb logcat -b all -c
  2. Mulai proses pengumpulan log:
    adb logcat >> _logs.txt
    Biarkan terminal ini tetap terbuka. Tindakan ini akan mengumpulkan log dari perangkat Anda selama proses berjalan.
  3. Jalankan aplikasi contoh dan rekam semua tindakan antarmuka pengguna. Setelah selesai, hentikan proses logcat yang berjalan di terminal dengan menekan Ctrl+C (atau Cmd+C di Mac).
  4. Log dari sesi ini disimpan dalam file bernama _logs.txt.

Anda dapat menganalisis info di file ini dengan berbagai cara, termasuk menelusuri kata kunci seperti error, exception, atau crash.

Skrip log

Untuk memudahkan Anda, aplikasi contoh menyediakan skrip untuk mendapatkan log yang relevan dan mengompilasikannya ke dalam file teks. Untuk memberikan pengalaman proses debug terbaik, log ini harus dilampirkan ke bug apa pun yang dilaporkan untuk memfasilitasi analisis akar masalah oleh Google.

Log ini terletak di direktori scripts dalam hierarki sumber aplikasi contoh. Untuk menjalankannya, ikuti langkah-langkah di bawah dari direktori root project:

  1. Dapatkan ID perangkat seluler Anda:
    adb devices -l
    List of devices attached
    device-id device
  2. Jalankan skrip 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)
  3. Reproduksi masalah.
  4. Tekan CTRL+C untuk menghentikan skrip.

Skrip akan membuat file log berstempel waktu yang berisi semua informasi yang relevan. Lampirkan file ini ke laporan apa pun untuk bug yang Anda temukan.

Log perangkat hub transmisi

Anda dapat melihat log perangkat untuk Google Hub dengan melakukan hal berikut:

  1. Siapkan Android Debug Bridge.
  2. Dapatkan alamat IP hub Anda:

    • Dari hub, jika memiliki layar:
      1. Geserkan jari pada layar dari atas ke bawah
      2. Ketuk ikon Setelan
      3. Temukan alamat IP perangkat: Di Nest Hub (2nd gen), buka Informasi perangkat > Informasi teknis > Alamat IP
    • Dari GHA di ponsel Anda:
      1. Ketuk perangkat untuk membuka halaman detail perangkat
      2. Ketuk ikon Setelan untuk membuka halaman setelan
      3. Temukan alamat IP perangkat: buka Informasi perangkat > Informasi teknis > Alamat IP
  3. Di komputer yang terhubung ke jaringan Wi-Fi yang sama dengan perangkat:

      adb connect ip-address
      adb logcat
    

  4. Untuk memberikan log kepada seseorang, lakukan operasi yang gagal dan salurkan output ke file teks:

      adb logcat -d > platform-logs.txt
    

Otomatisasi

Deteksi tepi

Otomatisasi di ekosistem Google Home menampilkan deteksi tepi, yang adalah logika yang memastikan pemicu hanya aktif saat ada perubahan status yang sebenarnya, bukan pembaruan status yang hanya mengulangi status perangkat sebelumnya.

Misalnya, jika menyalakan lampu adalah pemicu, deteksi tepi memastikan pemicu hanya aktif jika perangkat lampu tersebut beralih dari nonaktif ke aktif, bukan dari aktif ke aktif (tidak ada perubahan).

Otomatisasi tidak berfungsi seperti yang diharapkan

Setelah memperhitungkan deteksi tepi, jika otomatisasi tidak berperilaku seperti yang diharapkan:

  1. Periksa setiap perangkat untuk memastikan perangkat berfungsi dengan benar, terlepas dari otomatisasi Anda.

  2. Lihat grafik otomatisasi untuk otomatisasi Anda, bandingkan dengan DSL otomatisasi Anda, untuk mengungkapkan asumsi yang mungkin salah dari pihak Anda.

  3. Amati status perangkat di aplikasi Google Home selama eksekusi otomatisasi Anda.

  4. Periksa untuk memastikan bahwa semua perangkat yang dirujuk oleh otomatisasi ada dalam struktur yang Anda harapkan. Menghapus perangkat yang menjadi dependensi otomatisasi dapat menimbulkan konsekuensi yang tidak diinginkan. Lihat Dampak penghapusan perangkat terhadap otomatisasi.

Otomatisasi berjalan saat tidak seharusnya

Jika otomatisasi Anda berjalan saat tidak seharusnya, periksa kriteria pemicu. Anda mungkin perlu menambahkan logika tambahan untuk memastikan bahwa perubahan status hanya diambil sekali dan hanya memicu otomatisasi sekali.

Otomatisasi tidak dikompilasi

Pastikan aplikasi Anda berisi semua impor yang diperlukan, termasuk setiap class yang sesuai dengan berbagai jenis node serta karakteristik yang Anda referensikan.

Pembuatan otomatisasi gagal validasi

Jika pembuatan otomatisasi tidak lulus validasi, pesan peringatan atau error akan memberikan informasi tentang masalah tersebut. Untuk informasi selengkapnya, lihat referensi ValidationIssueType.

Fungsi daftar menampilkan pengecualian

Saat memanggil fungsi Daftar Automation API, pengendali baca dapat menampilkan pengecualian karena fitur API tidak ada. Untuk mengurangi hal ini, hapus otomatisasi yang terpengaruh.

Untuk melakukannya:

  1. Pastikan Anda telah menginstal adb. Lihat Menginstal adb.
  2. Ambil ID otomatisasi dari log Android dengan memanggil:

    adb logcat -s GhpNative

    Contoh log:

    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"
    ...

    Jika beberapa ID otomatisasi perlu dihapus, Anda dapat menggunakan pager terminal untuk mengontrol output:

    adb logcat -s GhpNative level:debug | less
  3. Hapus otomatisasi menggunakan ID otomatisasi:

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

Discovery API mencatat peringatan saat suatu karakteristik tidak terdaftar

Jika Discovery API mencatat peringatan untuk Trait not found, artinya API mencoba menggunakan karakteristik untuk kandidat Discovery, tetapi tidak akan berhasil karena karakteristik tidak terdaftar selama inisialisasi. Contoh:

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

ID sifat adalah home.matter.6006.clusters.fc43, yang sesuai dengan RelativeHumidityControl. Untuk menentukan nama sifat dari ID, lihat Indeks sifat.

Dari contoh ini, RelativeHumidityControl harus didaftarkan selama inisialisasi aplikasi. Lihat Mendaftarkan karakteristik untuk menambahkan karakteristik Anda ke registry.

OAuth

Jika Anda sudah memiliki klien OAuth

Jika sudah memiliki klien OAuth terverifikasi untuk aplikasi yang dipublikasikan, Anda dapat menggunakan klien OAuth yang ada untuk menguji Home API.

Pendaftaran Google Home Developer Console tidak diperlukan untuk menguji dan menggunakan Home API. Namun, Anda tetap memerlukan pendaftaran Developer Console yang disetujui untuk memublikasikan aplikasi, meskipun Anda memiliki klien OAuth terverifikasi dari integrasi lain.

Pertimbangan berikut berlaku:

  • Ada batas 100 pengguna saat menggunakan klien OAuth yang sudah ada. Untuk informasi tentang cara menambahkan pengguna pengujian, lihat Menyiapkan layar izin OAuth. Terlepas dari verifikasi OAuth, ada batas 100 pengguna yang dapat memberikan izin ke aplikasi Anda yang diberlakukan oleh Home API. Batasan ini dicabut setelah pendaftaran Developer Console selesai.

  • Developer Console pendaftaran harus dikirim untuk disetujui saat Anda siap membatasi pemberian jenis perangkat melalui OAuth sebagai persiapan untuk mengupdate aplikasi dengan Home API.

Untuk aplikasi Google Cloud yang masih menunggu verifikasi OAuth, pengguna tidak dapat menyelesaikan alur OAuth hingga verifikasi selesai. Upaya untuk memberikan izin akan gagal dengan error berikut:

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