1. ก่อนเริ่มต้น
ในฐานะนักพัฒนาอินเทอร์เน็ตของสรรพสิ่ง (IoT) คุณสามารถสร้างการดำเนินการสำหรับบ้านอัจฉริยะที่ช่วยให้ผู้ใช้ควบคุมอุปกรณ์ของตนผ่านการควบคุมด้วยการสัมผัสในแอป Google Home และใช้คำสั่งเสียงกับ Google Assistant ได้
การเรียนรู้เครื่องมือแก้ไขข้อบกพร่องสำหรับการดำเนินการในบ้านอัจฉริยะเป็นขั้นตอนสำคัญในการสร้างการผสานรวมคุณภาพเวอร์ชันที่ใช้งานจริงกับ Google Assistant เรามีเมตริก Google Cloud Platform (GCP) รวมถึงการบันทึกและชุดทดสอบสำหรับสมาร์ทโฮมเพื่อช่วยคุณระบุและแก้ไขปัญหาสำหรับการดำเนินการ เพื่อช่วยให้การตรวจสอบและแก้ไขข้อบกพร่องเป็นไปอย่างง่ายดาย
ข้อกำหนดเบื้องต้น
- อ่านคู่มือนักพัฒนาซอฟต์แวร์สร้างการดำเนินการสำหรับสมาร์ทโฮม
- เรียกใช้ Codelab เชื่อมต่ออุปกรณ์ในบ้านอัจฉริยะกับ Google Assistant
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้ทำให้การดำเนินการสำหรับสมาร์ทโฮมทำงานได้โดยมีข้อบกพร่อง 2 จุด และเชื่อมต่อกับ Assistant จากนั้นแก้ไขข้อบกพร่องของการดำเนินการดังกล่าวผ่านชุดทดสอบสำหรับเมตริกและการบันทึกสำหรับสมาร์ทโฮมและ Google Cloud Platform (GCP)
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้เมตริกและการบันทึกของ GCP เพื่อระบุและแก้ไขปัญหาในเวอร์ชันที่ใช้งานจริง
- วิธีใช้ชุดทดสอบสำหรับสมาร์ทโฮมเพื่อระบุปัญหาด้านฟังก์ชันการทำงานและ API
สิ่งที่คุณต้องมี
- เว็บเบราว์เซอร์ เช่น Google Chrome
- อุปกรณ์ iOS หรือ Android ที่ติดตั้งแอป Google Home
- Node.js เวอร์ชัน 10.16 ขึ้นไป
- บัญชีสำหรับการเรียกเก็บเงินของ Google Cloud
2. เรียกใช้แอปที่มีข้อผิดพลาด
ดูซอร์สโค้ด
คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่าง Codelab นี้ในเครื่องการพัฒนาของคุณ
...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่งได้
$ git clone https://github.com/google-home/smarthome-debug.git
เกี่ยวกับโปรเจ็กต์
แอปเครื่องซักผ้ามีไดเรกทอรีย่อยต่อไปนี้
public
: UI ฟรอนท์เอนด์ที่ช่วยให้ควบคุมและตรวจสอบสถานะของเครื่องซักผ้าอัจฉริยะได้ง่ายๆfunctions
: บริการระบบคลาวด์ที่ใช้งานอย่างเต็มรูปแบบซึ่งจัดการเครื่องซักผ้าอัจฉริยะด้วย Cloud Functions for Firebase และฐานข้อมูลเรียลไทม์ของ Firebase
เชื่อมต่อกับ Firebase
เปิดเทอร์มินัลในเครื่องการพัฒนาของคุณ ไปที่ไดเรกทอรี washer-faulty
แล้วตั้งค่า Firebase CLI ด้วยโปรเจ็กต์ Actions ที่สร้างในเชื่อมต่ออุปกรณ์สมาร์ทโฮมกับ Google Assistant Codelab ดังนี้
$ cd washer-faulty $ firebase use <project-id>
ทำให้ใช้งานได้ใน Firebase
ไปยังโฟลเดอร์ functions
และติดตั้งทรัพยากร Dependency ทั้งหมดโดยใช้ npm.
$ cd functions $ npm install
หมายเหตุ: หากเห็นข้อความด้านล่าง ก็ไม่ต้องสนใจและดำเนินการต่อ คำเตือนนี้เกิดจากทรัพยากร Dependency บางรายการ คุณดูรายละเอียดเพิ่มเติมได้ที่นี่
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
ขณะนี้เมื่อติดตั้งทรัพยากร Dependency และกำหนดค่าโปรเจ็กต์แล้ว คุณก็พร้อมที่จะนำแอปเครื่องซักผ้าที่ทำงานผิดพลาดไปใช้ได้แล้ว
$ firebase deploy
คุณจะเห็นเอาต์พุตของคอนโซลดังนี้
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
อัปเดต Home Graph
เปิด URL โฮสติ้งในเบราว์เซอร์ (https://<project-id>.firebaseapp.com
) เพื่อดูเว็บแอป ใน UI บนเว็บ ให้คลิกปุ่มรีเฟรช เพื่ออัปเดต HomeGraph ผ่านขอซิงค์ด้วยข้อมูลเมตาล่าสุดของอุปกรณ์จากแอปเครื่องซักผ้าที่มีข้อบกพร่อง
เปิดแอป Google Home แล้วตรวจสอบว่าเห็นอุปกรณ์เครื่องซักผ้าชื่อเครื่องซักผ้ามีข้อผิดพลาด
3. ทดสอบการดำเนินการของคุณ
หลังจากทำให้โปรเจ็กต์ใช้งานได้แล้ว ให้ทดสอบว่าการดำเนินการของคุณควบคุมเครื่องซักผ้า
ทดสอบเครื่องซักผ้า
ตรวจสอบการเปลี่ยนแปลงค่าเมื่อคุณลองใช้คำสั่งเสียงต่อไปนี้ผ่านโทรศัพท์
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google เปิดเครื่องซักผ้าให้หน่อย"
"Ok Google ปิดเครื่องซักผ้าของฉันชั่วคราว"
"Ok Google เปิดเครื่องซักผ้าต่อ"
"Ok Google ปิดเครื่องซักผ้า"
คุณจะสังเกตเห็นว่า Assistant ตอบกลับว่ามีบางอย่างผิดปกติผ่านเสียงเมื่อคุณหยุดเครื่องซักผ้าชั่วคราว / ให้เครื่องซักผ้ากลับมาทำงานอีกครั้ง
"ขออภัย ฉันติดต่อกับ <ชื่อที่แสดงของโปรเจ็กต์> ไม่ได้"
ในการแก้ปัญหานี้ ก่อนอื่นคุณต้องมีข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดเพื่อจำกัดให้แคบลงและระบุสาเหตุที่แท้จริง
แดชบอร์ดข้อมูลวิเคราะห์สมาร์ทโฮม
ที่ที่เหมาะสมในการตรวจสอบข้อผิดพลาดคือหน้าแดชบอร์ดข้อมูลวิเคราะห์ Smarthome ซึ่งรวบรวมแผนภูมิของเมตริกการใช้งานและความสมบูรณ์สำหรับ Fulfillment ระบบคลาวด์ ดังนี้
- เมตริกการใช้งานแสดงให้เห็นถึงแนวโน้มการใช้งานการดำเนินการในสมาร์ทโฮมของคุณ รวมถึงจำนวนผู้ใช้ที่ใช้งานอยู่รายวันและจำนวนคำขอทั้งหมดที่ส่งไปยังการตอบสนองของคุณ
- เมตริกสุขภาพช่วยให้คุณตรวจสอบความผิดปกติที่เกิดขึ้นในการดำเนินการสมาร์ทโฮม ซึ่งครอบคลุมเวลาในการตอบสนองของคำขอ เปอร์เซ็นต์ความสำเร็จ และการแจกแจงข้อผิดพลาด
หากต้องการจำกัดสาเหตุของข้อผิดพลาดให้แคบลง ให้ทำตามขั้นตอนด้านล่างเพื่อเข้าถึงหน้าแดชบอร์ดของโปรเจ็กต์
- ไปที่หน้าโปรเจ็กต์ในคอนโซลการดำเนินการ
- เลือกโปรเจ็กต์สมาร์ทโฮมของคุณ
- เลือกแท็บ Analytics แล้วคลิกไปที่ Google Cloud Platform
- ซึ่งจะนำคุณไปยังรายการหน้าแดชบอร์ดสำหรับโปรเจ็กต์ของคุณใน Google Cloud เลือกแดชบอร์ด Google Home Analytics - การผสานรวมระบบคลาวด์
- เลื่อนลงไปที่แผนภูมิข้อผิดพลาดของ Cloud Fulfillment - รายละเอียดสถานะ เพื่อดูรหัสข้อผิดพลาดของช่วงเวลาที่ไฮไลต์
รหัสข้อผิดพลาด PARTNER_RESPONSE_MISSING_DEVICE
จะบ่งบอกถึงสาเหตุของปัญหา ถัดไป ให้เรียกบันทึกเหตุการณ์โดยอิงตามรหัสข้อผิดพลาดเพื่อดูรายละเอียดเพิ่มเติม
เข้าถึงบันทึกเหตุการณ์
หากต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด โปรดเข้าถึงบันทึกเหตุการณ์สำหรับการดำเนินการในสมาร์ทโฮมผ่าน Cloud Logging
เปิดเมนูการนำทางใน Google Cloud Platform และในส่วนการดำเนินการ ให้เลือกการบันทึก > เครื่องมือสำรวจบันทึกเพื่อเข้าถึงบันทึกเหตุการณ์สำหรับโปรเจ็กต์ หรือค้นหา Logs Explorer ในช่องค้นหา
ในส่วนคำค้นหา ให้ป้อนคำค้นหา PARTNER_RESPONSE_MISSING_DEVICE
แล้วคลิกเรียกใช้คำค้นหา บันทึกที่ตรงกับคำค้นหาจะแสดงในส่วนผลการค้นหา
บันทึกข้อผิดพลาดแสดงเหตุการณ์สมาร์ทโฮมพร้อมรายละเอียดข้อผิดพลาดซึ่งระบุข้อมูลต่อไปนี้
- การดำเนินการของผู้ใช้คือ "กำลังทำให้เครื่องซักผ้ากลับมาทำงานอีกครั้ง" (
actionType:
"STARTSTOP_UNPAUSE
") ซึ่งสอดคล้องกับคำสั่งเสียงที่ไม่สำเร็จล่าสุด - ข้อความการแก้ไขข้อบกพร่องที่เกี่ยวข้องคือ "
JSON response does not include device.
"
จากข้อความการแก้ไขข้อบกพร่อง คุณควรตรวจสอบว่าเหตุใดแอปเครื่องซักผ้าจึงไม่รวมอุปกรณ์ที่ถูกต้องในการตอบกลับ EXECUTE
ระบุสาเหตุหลักของข้อผิดพลาด
ใน functions/index.js
ให้หาตัวแฮนเดิล EXECUTE
(ในอาร์เรย์ onExecute
) ที่แสดงผลสถานะของคำสั่งแต่ละรายการและสถานะอุปกรณ์ใหม่ การแทรกรหัสอุปกรณ์ลงในการตอบกลับ EXECUTE
จะขึ้นอยู่กับการแก้ไขฟังก์ชัน 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)));
}
}
}
ตรวจสอบเพิ่มเติมว่าฟังก์ชัน updateDevice
จัดการกับการหยุดชั่วคราว / การทำงานต่อบนเครื่องซักผ้าอย่างไร แล้วคุณจะเห็นสตริงที่ตรงกับคำสั่งหยุดชั่วคราว / กลับมาทำงานอีกครั้งไม่ถูกต้อง
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);
};
แก้ไขข้อผิดพลาด
เมื่อคุณระบุสาเหตุหลักของข้อผิดพลาดแล้ว คุณสามารถแก้ไขสตริงสำหรับคำสั่งหยุดชั่วคราว / ทำงานต่อได้ดังนี้
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);
};
ทดสอบการแก้ไข
ทำให้โค้ดที่อัปเดตใช้งานได้โดยใช้ Firebase CLI:
firebase deploy --only functions
ลองใช้คำสั่งเสียงต่อไปนี้อีกครั้ง แล้วคุณจะเห็นว่า Assistant ตอบสนองถูกต้องทันทีเมื่อหยุดเครื่องซักผ้าชั่วคราว / ให้เครื่องซักผ้าทำงานต่อ
"Ok Google ปิดเครื่องซักผ้าของฉันชั่วคราว"
=>
"ได้สิ หยุดเครื่องซักผ้าชั่วคราว"
"Ok Google เปิดเครื่องซักผ้าต่อ"
=>
"รับทราบ เครื่องซักผ้ากลับมาทำงานอีกครั้ง"
นอกจากนี้ คุณยังทดสอบสถานะปัจจุบันของเครื่องซักผ้าได้โดยถามคำถาม
"Ok Google เครื่องซักผ้าเปิดอยู่ไหม"
"Ok Google เครื่องซักผ้าของฉันทำงานอยู่ไหม"
"Ok Google เครื่องซักผ้าอยู่ในโหมดไหน"
4. ทดสอบการดำเนินการด้วยชุดทดสอบ
นอกจากการทดสอบด้วยตนเองแล้ว คุณยังใช้ชุดทดสอบสำหรับบ้านอัจฉริยะแบบอัตโนมัติเพื่อตรวจสอบกรณีการใช้งานตามประเภทและลักษณะอุปกรณ์ที่เชื่อมโยงกับการดำเนินการของคุณได้ ชุดทดสอบจะเรียกใช้ชุดการทดสอบเพื่อตรวจหาปัญหาในการดำเนินการของคุณ และแสดงข้อความให้ข้อมูลสำหรับกรอบการทดสอบที่ล้มเหลวเพื่อช่วยให้แก้ไขข้อบกพร่องได้เร็วขึ้นก่อนเจาะลึกบันทึกเหตุการณ์
เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
ทำตามวิธีการต่อไปนี้เพื่อทดสอบการดำเนินการในสมาร์ทโฮมโดย Test Suite
- เปิดชุดทดสอบสำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
- ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน ซึ่งจะช่วยให้ชุดทดสอบส่งคำสั่งไปยัง Google Assistant ได้โดยตรง
- ในช่องรหัสโปรเจ็กต์ ให้ป้อนรหัสโปรเจ็กต์ของการดำเนินการสมาร์ทโฮม จากนั้นคลิกถัดไปเพื่อดําเนินการต่อ
- ในขั้นตอนการตั้งค่าทดสอบ คุณจะเห็นรายการประเภทและลักษณะของเครื่องซักผ้า
- ปิดใช้ตัวเลือกซิงค์คำขอทดสอบเนื่องจากแอปเครื่องซักผ้าตัวอย่างไม่มี UI สำหรับเพิ่ม / นำออก / เปลี่ยนชื่อเครื่องซักผ้า ในระบบที่ใช้งานจริง คุณต้องทริกเกอร์คำขอซิงค์ทุกครั้งที่ผู้ใช้เพิ่ม / นำออก / เปลี่ยนชื่ออุปกรณ์
- คลิกถัดไปเพื่อเริ่มทำการทดสอบ
หลังจากชุดทดสอบทำงานเสร็จแล้ว ให้ดูผลลัพธ์ของกรอบการทดสอบ คุณจะเห็นข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง 2 กรณีซึ่งตรวจพบดังต่อไปนี้
หากต้องการแก้ไขข้อบกพร่องของการดำเนินการสมาร์ทโฮมให้ทำงานไม่สำเร็จ คุณจะต้องระบุสาเหตุที่แท้จริงของข้อผิดพลาดโดยการวิเคราะห์ข้อความแสดงข้อผิดพลาดก่อน
วิเคราะห์ข้อความแสดงข้อผิดพลาด
ชุดทดสอบจะแสดงข้อความแสดงข้อผิดพลาดสำหรับกรอบการทดสอบที่ล้มเหลวแต่ละกรณีเพื่อระบุสาเหตุของความล้มเหลว เพื่อช่วยให้นักพัฒนาซอฟต์แวร์ระบุสาเหตุที่แท้จริง
สำหรับกรอบการทดสอบแรกที่ล้มเหลวด้านบน
ข้อความแสดงข้อผิดพลาดระบุว่าชุดทดสอบคาดหวัง "isPause": true
ในสถานะที่รายงานจากการดำเนินการในสมาร์ทโฮม แต่สถานะจริงจะมีเพียง "isPause": false
เท่านั้น
นอกจากนี้ ข้อความแสดงข้อผิดพลาดของเคสทดสอบที่ 2 ที่ล้มเหลวจะระบุสถานะในการตอบกลับของ QUERY
จากการดำเนินการในสมาร์ทโฮมของคุณประกอบด้วย "isPause": true
ซึ่งแตกต่างจาก "isPause": false
ในรัฐที่รายงานจากการดำเนินการในสมาร์ทโฮมของคุณ ดังนี้
จากข้อความแสดงข้อผิดพลาดทั้งสอง คุณควรตรวจสอบว่ารายงานการดำเนินการของคุณระบุ isPaused
ด้วยค่าที่ถูกต้องหรือไม่
ระบุสาเหตุหลักของข้อผิดพลาด
เปิด functions/index.js
ซึ่งมีฟังก์ชัน reportstate
ที่โพสต์การเปลี่ยนแปลงสถานะลงในกราฟหน้าแรกผ่านสถานะรายงาน ตรวจสอบเพย์โหลดสถานะรายงาน แล้วคุณจะเห็นเพย์โหลดไม่มีสถานะ isPaused
ซึ่งเป็นสิ่งที่ชุดทดสอบตรวจสอบไว้ในกรณีการทดสอบที่ล้มเหลว
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,
});
...
});
แก้ไขข้อผิดพลาด
เมื่อคุณระบุสาเหตุหลักของข้อผิดพลาดแล้ว ให้แก้ไข functions/index.js
โดยเพิ่มสถานะ isPaused
ลงในเพย์โหลดสถานะรายงาน ดังนี้
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,
},
},
},
},
};
...
});
ทดสอบการแก้ไข
ทำให้โค้ดที่อัปเดตใช้งานได้โดยใช้ Firebase CLI:
$ firebase deploy --only functions
เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮมอีกครั้ง แล้วพบว่ากรอบการทดสอบทั้งหมดผ่านแล้ว
5. ขอแสดงความยินดี
ยินดีด้วย คุณศึกษาวิธีแก้ปัญหาการดำเนินการสำหรับสมาร์ทโฮมผ่านชุดทดสอบสำหรับสมาร์ทโฮม รวมถึงเมตริกและการบันทึกของ GCP เรียบร้อยแล้ว
ดูข้อมูลเพิ่มเติม
จาก Codelab นี้ ให้ลองทำตามแบบฝึกหัดต่อไปนี้และสำรวจแหล่งข้อมูลเพิ่มเติม
- เพิ่มลักษณะที่รองรับลงในอุปกรณ์และทดสอบด้วยชุดทดสอบ
- สร้างหน้าแดชบอร์ด ตั้งค่าการแจ้งเตือน และข้อมูลเมตริกการเข้าถึงแบบเป็นโปรแกรมเพื่อรับเมตริกการใช้งานที่เป็นประโยชน์เกี่ยวกับการดำเนินการของคุณ
- ดูการจำหน่ายในพื้นที่สำหรับสมาร์ทโฮม
- ดูตัวอย่างของ GitHub เพื่อสำรวจเพิ่มเติม
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและส่งการดำเนินการเพื่อรับการตรวจสอบ รวมถึงขั้นตอนการรับรองเพื่อเผยแพร่การดำเนินการให้แก่ผู้ใช้ได้