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.
Mempelajari alat proses debug untuk Action smart home adalah langkah penting untuk membuat integrasi kualitas produksi dengan Asisten Google. Untuk memfasilitasi pemantauan dan proses debug yang mudah, tersedia Metrik Google Cloud Platform (GCP) serta Logging dan Suite Uji Coba untuk smart home guna membantu Anda mengidentifikasi dan menyelesaikan masalah terkait Action.
Prasyarat
- Baca panduan developer Membuat Action smart home
- Menjalankan codelab Menghubungkan perangkat smart home ke Asisten Google
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 Cloud Platform (GCP) Google Home.
Yang akan Anda pelajari
- Cara menggunakan Metrik dan Logging GCP untuk mengidentifikasi dan menyelesaikan masalah produksi
- Cara menggunakan Test Suite untuk smart home guna mengidentifikasi masalah fungsional dan API
Yang akan Anda butuhkan
- Browser web, seperti Google Chrome
- Perangkat iOS atau Android yang telah menginstal aplikasi Google Home
- Node.js versi 10.16 atau yang lebih baru
- Akun penagihan Google Cloud
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/google-home/smarthome-debug.git
Tentang project
Aplikasi mesin cuci berisi subdirektori berikut:
public
: UI frontend untuk mengontrol dan memantau status mesin cuci smart dengan mudah.functions
: Layanan cloud yang diterapkan sepenuhnya untuk mengelola mesin cuci smart dengan Cloud Functions for Firebase dan Firebase Realtime Database.
Menghubungkan ke Firebase
Buka terminal di mesin pengembangan Anda. Buka direktori washer-faulty
, lalu siapkan Firebase CLI dengan project Actions yang Anda buat di codelab Menghubungkan perangkat smart home ke Google Assistant:
$ 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 salah.
$ 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 (https://<project-id>.firebaseapp.com
) untuk melihat aplikasi web. Di UI web, klik tombol Muat ulang untuk memperbarui HomeGraph melalui Minta Sinkronisasi dengan metadata perangkat terbaru dari aplikasi mesin cuci yang salah:
Buka aplikasi Google Home dan verifikasi bahwa Anda dapat melihat perangkat mesin cuci bernama Faulty Washer.
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 bisa menjangkau <nama tampilan project>".
Untuk men-debug masalah ini, Anda terlebih dahulu memerlukan informasi lebih lanjut tentang error untuk mempersempit dan mengidentifikasi penyebab utamanya.
Dasbor Analisis Smarthome
Tempat yang tepat untuk memeriksa error adalah dasbor Smarthome Analytics, yang menggabungkan diagram metrik Penggunaan dan Kesehatan untuk fulfillment cloud Anda:
- Metrik Penggunaan menampilkan tren penggunaan Action smart home, termasuk jumlah pengguna aktif harian dan jumlah permintaan total untuk fulfillment Anda.
- Metrik Kesehatan membantu Anda memantau kejadian anomali di Action smart home, mencakup latensi permintaan, persentase keberhasilan, dan perincian error.
Untuk mempersempit penyebab error, ikuti langkah-langkah di bawah untuk mengakses dasbor project.
- Di konsol Actions, buka halaman Project.
- Pilih project smart home Anda.
- Pilih tab Analytics, lalu klik Buka Google Cloud Platform.
- Tindakan ini akan mengarahkan Anda ke daftar dasbor untuk project Anda di Google Cloud. Pilih dasbor Google Home Analytics - Integrasi Cloud.
- Scroll ke bawah ke diagram Error Fulfillment Cloud - Perincian Status untuk melihat kode error untuk rentang waktu yang ditandai.
Kode error PARTNER_RESPONSE_MISSING_DEVICE
memberikan petunjuk ke akar masalah. Selanjutnya, ambil log peristiwa berdasarkan kode error untuk detail selengkapnya.
Mengakses log aktivitas
Untuk mendapatkan detail lebih lanjut tentang error tersebut, 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 untuk 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 akan ditampilkan di bagian Hasil kueri.
Log error menampilkan peristiwa smart home dengan detail error yang menunjukkan:
- Tindakan pengguna yang dilakukan adalah "lanjutkan mesin cuci" (
actionType:
"STARTSTOP_UNPAUSE
"), yang sesuai dengan perintah suara gagal baru-baru ini. - 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 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 / lanjutkan pada mesin cuci, dan Anda akan menemukan bahwa string yang cocok untuk perintah jeda / lanjutkan adalah salah:
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, 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);
};
Menguji perbaikan
Deploy kode yang telah diperbarui menggunakan Firebase CLI:
firebase deploy --only functions
Coba lagi perintah suara berikut, dan Anda akan menemukan 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 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 pada 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 home oleh Test Suite:
- Di browser web, buka Test Suite untuk smart home.
- Login ke Google menggunakan tombol di pojok kanan atas. Hal ini memungkinkan Test Suite mengirimkan perintah langsung ke Asisten Google.
- Di kolom Project ID, masukkan project ID Action smart home Anda. Lalu klik BERIKUTNYA untuk melanjutkan.
- Di langkah Setelan Pengujian, Anda akan melihat Test Suite mencantumkan jenis dan karakteristik perangkat mesin cuci.
- 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.
- Klik BERIKUTNYA untuk mulai menjalankan pengujian.
Setelah Test Suite selesai berjalan, lihat hasil kasus pengujian. Anda akan melihat dua kasus pengujian gagal yang ditangkap dengan pesan error masing-masing:
Agar dapat men-debug Action smart home untuk kegagalan, Anda harus mengidentifikasi akar penyebab error dengan menganalisis pesan error terlebih dahulu.
Menganalisis pesan error
Untuk membantu developer mengidentifikasi akar masalah, Test Suite menampilkan pesan error untuk setiap kasus pengujian gagal yang menunjukkan alasan kegagalan.
Untuk kasus pengujian pertama yang gagal di atas,
pesan error-nya menunjukkan bahwa Test Suite mengharapkan "isPause": true
di status yang dilaporkan dari Action smart home, tetapi status yang sebenarnya hanya mencakup "isPause": false
.
Selain itu, pesan error kasus pengujian kedua yang gagal menunjukkan status dalam respons QUERY
dari Action smart home Anda termasuk "isPause": true
, yang berbeda dari status "isPause": false
yang dilaporkan dari Action smart home Anda:
Berdasarkan kedua pesan error tersebut, Anda harus memeriksa apakah laporan Tindakan Anda 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 Status Laporan. Periksa payload Status Laporan, dan Anda akan mendapati bahwa payload tidak memiliki status isPaused
, persis seperti yang diperiksa 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,
},
},
},
},
};
...
});
Menguji perbaikan
Deploy kode yang telah diperbarui menggunakan Firebase CLI:
$ firebase deploy --only functions
Jalankan kembali Test Suite untuk smart home, dan Anda akan menemukan bahwa semua kasus pengujian telah berlalu.
5. Selamat
Selamat! Anda telah berhasil mempelajari cara memecahkan masalah Action smart home melalui Test Suite untuk Metrik dan Logging smart home & GCP.
Pelajari lebih lanjut
Dari Codelab ini, coba latihan berikut dan jelajahi resource tambahan:
- Tambahkan karakteristik yang didukung lainnya ke perangkat Anda dan uji dengan Test Suite.
- Membuat dasbor, menyiapkan pemberitahuan, dan mengakses data metrik secara terprogram untuk mendapatkan metrik penggunaan yang berguna tentang Tindakan Anda.
- Pelajari fulfillment lokal untuk smart home.
- Lihat contoh GitHub kami untuk mempelajari lebih lanjut.
Anda juga dapat mempelajari lebih lanjut cara menguji dan mengirimkan Action untuk ditinjau, termasuk proses sertifikasi untuk memublikasikan Action ke pengguna.