Selamat datang di Pusat Developer Google Home, tujuan baru untuk mempelajari cara mengembangkan tindakan smart home. Catatan: Anda akan terus membuat tindakan di konsol Actions.

Men-debug Smart Home

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

1. Sebelum memulai

Sebagai developer Internet of Things (IoT), Anda dapat membuat Action smart home yang memberi pengguna kemampuan untuk mengontrol perangkat melalui kontrol sentuh di aplikasi Google Home dan perintah suara dengan Asisten Google.

a4657871181b5ad2.gif

Mempelajari alat proses debug untuk Action smart home merupakan langkah penting untuk membangun integrasi kualitas produksi dengan Asisten Google. Untuk memudahkan pemantauan dan proses debug, Metrik dan Logging Google Cloud Platform (GCP) dan Test Suite untuk smart home tersedia untuk membantu Anda mengidentifikasi serta menyelesaikan masalah terkait Actions.

Prasyarat

Yang akan Anda build

Dalam codelab ini, Anda akan men-deploy Action smart home dengan 2 kerusakan dan menghubungkannya ke Asisten, lalu men-debug kerusakan Action melalui Test Suite untuk Metrik dan Logging Google Home Platform (GCP).

Yang akan Anda pelajari

  • Cara menggunakan Metrik dan Logging GCP untuk mengidentifikasi dan menyelesaikan masalah produksi
  • Cara menggunakan Test Suite untuk smart home untuk mengidentifikasi masalah fungsional dan API

Yang Anda butuhkan

2. Menjalankan aplikasi yang rusak

Mendapatkan kode sumber

Klik link berikut untuk mendownload contoh codelab ini di mesin pengembangan Anda:

...atau Anda dapat meng-clone repositori GitHub dari command line:

$ git clone https://github.com/googlecodelabs/smarthome-debug.git

Tentang project

Aplikasi mesin cuci berisi subdirektori berikut:

Menghubungkan ke Firebase

Buka terminal di mesin pengembangan Anda. Buka direktori washer-faulty, lalu siapkan Firebase CLI dengan project Actions Anda yang di-build di Menghubungkan perangkat smart home ke codelab Asisten Google:

$ cd washer-faulty
$ firebase use <project-id>

Men-deploy ke Firebase

Buka folder functions dan instal semua dependensi yang diperlukan menggunakan npm.

$ cd functions
$ npm install

Catatan: Jika melihat pesan di bawah, Anda dapat mengabaikan dan melanjutkan. Peringatan ini disebabkan oleh beberapa dependensi lama dan Anda dapat menemukan detail selengkapnya di sini.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

Setelah menginstal dependensi dan mengonfigurasi project, Anda siap men-deploy aplikasi mesin cuci yang rusak.

$ firebase deploy

Ini adalah output konsol yang akan Anda lihat:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<project-id>.firebaseapp.com

Memperbarui HomeGraph

Buka URL Hosting di browser Anda (https://<project-id>.firebaseapp.com) untuk melihat aplikasi web. Di UI web, klik tombol Muat ulang ae8d3b25777a5e30.png untuk memperbarui HomeGraph melalui Request Sync dengan metadata perangkat terbaru dari aplikasi mesin cuci yang rusak:

6f2b1344179977cf.png

Buka aplikasi Google Home dan verifikasi bahwa Anda dapat melihat perangkat mesin cuci bernama Faulty Washer.

e357de6a7faff925.png

3. Menguji Action Anda

Setelah men-deploy project, uji apakah Action Anda mengontrol mesin cuci.

Menguji mesin cuci

Periksa perubahan nilai saat Anda mencoba salah satu perintah suara berikut melalui ponsel:

"Ok Google, nyalakan mesin cuci".

"Ok Google, mulai mesin cuci saya".

"Ok Google, jeda mesin cuci saya."

"Ok Google, lanjutkan mesin cuci saya."

"Ok Google, hentikan mesin cuci saya".

Anda akan melihat Asisten merespons bahwa ada sesuatu yang salah melalui suara saat Anda menjeda / melanjutkan mesin cuci:

"Maaf, saya tidak dapat <nama tampilan project>."

Untuk men-debug masalah ini, Anda terlebih dahulu memerlukan informasi lebih lanjut tentang error untuk mempersempit dan mengidentifikasi penyebab utama.

Dasbor Analytics Smarthome

Tempat yang baik untuk memeriksa error adalah dasbor Analisis Smarthome, yang menggabungkan diagram metrik Penggunaan dan Kesehatan untuk pemenuhan cloud Anda:

  • Metrik Penggunaan mencerminkan tren penggunaan Action smart home Anda, termasuk jumlah pengguna aktif harian dan jumlah total permintaan terhadap fulfillment Anda.
  • Metrik Kesehatan membantu Anda memantau kejadian anomali di Action smart home Anda, yang mencakup latensi permintaan, persentase keberhasilan, dan perincian error.

Untuk mempersempit penyebab error, ikuti langkah-langkah di bawah untuk mengakses dasbor project.

  1. Di Konsol Actions, buka halaman Project.
  2. Pilih project smart home.
  3. Pilih tab Analytics, lalu klik Buka Google Cloud Platform.

b1735bbe11a7aff8.png

  1. Tindakan ini akan mengarahkan Anda ke daftar dasbor untuk project Anda di Google Cloud. Pilih dasbor Google Home Analytics - Integrasi Cloud.

5edd3751323176dd.png

  1. Scroll ke bawah ke diagram Error Pemenuhan Cloud - Perincian Status untuk melihat kode error untuk rentang waktu yang ditandai.

c468743c20a11c15.png

Kode error PARTNER_RESPONSE_MISSING_DEVICE memberikan petunjuk ke akar masalah. Selanjutnya, ambil log aktivitas berdasarkan kode error untuk detail selengkapnya.

Mengakses log aktivitas

Guna mendapatkan detail error selengkapnya, akses log aktivitas untuk Action smart home Anda melalui Cloud Logging.

Buka Menu Navigasi di Google Cloud Platform, dan di bagian Operasi, pilih Logging > Logs Explorer untuk mengakses log peristiwa bagi project Anda. Atau, Anda dapat menelusuri Logs Explorer di kotak penelusuran.

Di bagian Query, masukkan kueri PARTNER_RESPONSE_MISSING_DEVICE, lalu klik Run Query. Log yang cocok dengan kueri ditampilkan di bagian Hasil kueri.

747cca0f1249a5a.png

Log error adalah peristiwa smart home dengan detail error yang menunjukkan:

  • Tindakan pengguna yang dilakukan adalah "melanjutkan mesin cuci" (actionType: "STARTSTOP_UNPAUSE"), sesuai dengan perintah suara yang baru-baru ini gagal.
  • Pesan proses debug terkait adalah "JSON response does not include device."

Berdasarkan pesan proses debug, Anda harus memeriksa mengapa aplikasi mesin cuci tidak menyertakan perangkat yang benar dalam respons EXECUTE.

Mengidentifikasi akar penyebab error

Di functions/index.js, temukan pengendali EXECUTE (dalam array onExecute) yang menampilkan status setiap perintah dan status perangkat baru. Penyisipan ID perangkat ke dalam respons EXECUTE bergantung pada penyelesaian fungsi updateDevice:

index.js

app.onExecute(async (body) => {
 ...

 for (const command of intent.payload.commands) {
   for (const device of command.devices) {
     for (const execution of command.execution) {
       executePromises.push(
           updateDevice(execution, device.id)
               .then((data) => {
                 result.ids.push(device.id);
                 Object.assign(result.states, data);
               })
               .catch((e) =>
                 functions.logger.error('EXECUTE',
                     device.id, e.message)));
     }
   }
 }

Periksa lebih lanjut bagaimana fungsi updateDevice menangani jeda / melanjutkan pada mesin cuci, dan Anda akan menemukan string yang cocok untuk perintah jeda / lanjutkan:

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpausePause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Memperbaiki error

Setelah mengidentifikasi penyebab utama error tersebut, Anda dapat memperbaiki string untuk perintah jeda / lanjutkan:

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Uji perbaikan Anda

Deploy kode yang telah diperbarui menggunakan Firebase CLI:

firebase deploy --only functions

Coba lagi perintah suara berikut, dan Anda akan melihat Asisten merespons dengan benar sekarang saat Anda menjeda / melanjutkan mesin cuci.

"Ok Google, jeda mesin cuci saya".

=>

"Tentu, menjeda mesin cuci."

"Ok Google, lanjutkan mesin cuci saya."

=>

"Oke, melanjutkan mesin cuci."

Anda juga dapat menguji status mesin cuci saat ini dengan mengajukan pertanyaan.

"Ok Google, apa mesin cuci saya menyala?"

"Ok Google, apa mesin cuci saya sedang bekerja?"

"Ok Google, mesin cuci saya sedang berada di siklus apa?"

4. Menguji Action Anda dengan Test Suite

Selain melakukan pengujian secara manual, Anda dapat menggunakan Test Suite untuk smart home otomatis untuk memvalidasi kasus penggunaan berdasarkan jenis dan karakteristik perangkat yang terkait dengan Action Anda. Test Suite menjalankan serangkaian pengujian untuk mendeteksi masalah di Action Anda, dan menampilkan pesan informatif untuk kasus pengujian yang gagal guna mempercepat proses debug sebelum menyelami log peristiwa.

Menjalankan Test Suite untuk smart home

Ikuti petunjuk berikut untuk menguji Action smart Test Suite Anda di Suite Suite:

  1. Di browser web, buka Test Suite untuk smart home.
  2. Login ke Google menggunakan tombol di pojok kanan atas. Hal ini memungkinkan Test Suite mengirimkan perintah langsung ke Asisten Google.
  3. Di kolom Project ID, masukkan project ID Action smart home Anda. Lalu, klik BERIKUTNYA untuk melanjutkan.
  4. Pada langkah Setelan Uji, Anda akan melihat Test Suite mencantumkan jenis perangkat dan fitur mesin cuci.

78ed6a1ebdb581bf.png

  1. Nonaktifkan opsi Test Request Sync karena aplikasi contoh mesin cuci tidak memiliki UI untuk menambahkan / menghapus / mengganti nama mesin cuci. Dalam sistem produksi, Anda harus memicu Request Sync setiap kali pengguna menambahkan/menghapus/mengganti nama perangkat.
  2. Klik BERIKUTNYA untuk mulai menjalankan pengujian.

Setelah Test Suite selesai berjalan, lihat hasil kasus pengujian. Anda akan melihat dua kasus uji yang gagal ditangkap dengan pesan error yang terkait:

5838d10631c98ed2.png

Untuk men-debug Action smart home Anda atas kegagalan ini, Anda harus mengidentifikasi akar penyebab error dengan menganalisis pesan error terlebih dahulu.

Menganalisis pesan error

Untuk membantu developer mengidentifikasi penyebab utama, Test Suite menampilkan pesan error untuk setiap kasus pengujian yang gagal yang menunjukkan alasan kegagalan.

Untuk kasus uji gagal pertama di atas,

99e4e5d06965a8a7.png

pesan errornya menunjukkan bahwa Test Suite mengharapkan "isPause": true di status yang dilaporkan dari Action smart home Anda, tetapi status yang sebenarnya hanya mencakup "isPause": false.

Selain itu, pesan error kasus uji kedua yang gagal menunjukkan status di respons QUERY dari Action smart home Anda mencakup "isPause": true, yang berbeda dari "isPause": false di status yang dilaporkan dari Action smart home Anda:

fdb5124102e3a37.png

Berdasarkan kedua pesan error, Anda harus memeriksa apakah Laporan tindakan menyatakan isPaused dengan nilai yang benar.

Mengidentifikasi akar penyebab error

Buka functions/index.js, yang berisi fungsi reportstate yang memposting perubahan status ke Home Graph melalui Report State. Periksa payload Status Laporan, dan Anda akan menemukan bahwa payload tidak memiliki status isPaused, yang persis seperti yang diperiksa oleh Test Suite dalam kasus pengujian yang gagal.

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
              [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      ...
    });

Memperbaiki error

Setelah Anda mengidentifikasi penyebab utama error, revisi functions/index.js dengan menambahkan status isPaused ke payload Status Laporan:

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
              [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };
      ...
    });

Uji perbaikan Anda

Deploy kode yang telah diperbarui menggunakan Firebase CLI:

$ firebase deploy --only functions

Jalankan kembali Test Suite untuk smart home, dan Anda akan mendapati bahwa semua kasus pengujian telah lulus.

148837f85d377dd6.png

5. Selamat

17d485868a6771bc.png

Selamat! Anda berhasil mempelajari cara memecahkan masalah Action smart home melalui Test Suite untuk smart home & Metrik dan Logging GCP.

Pelajari lebih lanjut

Dari Codelab ini, coba latihan berikut dan jelajahi resource tambahan:

Anda juga dapat mempelajari lebih lanjut tentang menguji dan mengirimkan Action untuk ditinjau, termasuk proses sertifikasi untuk memublikasikan Action ke pengguna.