1. ก่อนเริ่มต้น
ในฐานะนักพัฒนา Internet of Things (IoT) คุณสามารถสร้างการผสานรวมแบบคลาวด์กับคลาวด์ที่ช่วยให้ผู้ใช้ควบคุมอุปกรณ์ผ่านการควบคุมด้วยการสัมผัสในแอป Google Home และคำสั่งเสียงด้วย Google Assistant ได้

การเรียนรู้เครื่องมือแก้ไขข้อบกพร่องสำหรับการผสานรวมแบบคลาวด์กับคลาวด์เป็นขั้นตอนสำคัญในการสร้างการผสานรวมที่มีคุณภาพระดับใช้งานจริงกับ Google Assistant เพื่อให้การตรวจสอบและการแก้ไขข้อบกพร่องเป็นไปอย่างง่ายดาย Google Cloud Platform (GCP) Metrics และ Logging และ ชุดทดสอบสำหรับสมาร์ทโฮม พร้อมให้บริการเพื่อช่วยคุณระบุและแก้ไขปัญหาสำหรับการผสานรวม
ข้อกำหนดเบื้องต้น
- อ่านคู่มือนักพัฒนาซอฟต์แวร์สำหรับการผสานรวมแบบคลาวด์กับคลาวด์
- เรียกใช้ Codelab เรื่องเชื่อมต่ออุปกรณ์สมาร์ทโฮมกับ Google Assistant
สิ่งที่คุณจะได้สร้าง
ใน Codelab นี้ คุณจะได้ทำให้การผสานรวมแบบคลาวด์กับคลาวด์ที่มีข้อบกพร่อง 2 รายการใช้งานได้และเชื่อมต่อกับการผสานรวมกับ Assistant จากนั้นแก้ไขข้อบกพร่องของการผสานรวมด้วยชุดทดสอบสำหรับสมาร์ทโฮมและ Google Cloud Platform (GCP) Metrics and Logging
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ GCP Metrics and Logging เพื่อระบุและแก้ไขปัญหาที่เกิดขึ้นจริง
- วิธีใช้ชุดทดสอบสำหรับสมาร์ทโฮมเพื่อระบุปัญหาด้านฟังก์ชันการทำงานและ API
สิ่งที่คุณต้องมี
- เว็บเบราว์เซอร์ เช่น Google Chrome
- อุปกรณ์ iOS หรือ Android ที่ติดตั้งแอป Google Home
- Node.js เวอร์ชัน 24 ขึ้นไป
- บัญชีสำหรับการเรียกเก็บเงินของ 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 ด้วยโปรเจ็กต์การผสานรวมที่สร้างขึ้นใน Codelab เรื่องเชื่อมต่ออุปกรณ์สมาร์ทโฮมกับ Google Assistant
$ cd washer-faulty $ firebase use <firebase-project-id>
ทำให้ใช้งานได้กับ Firebase
ไปที่โฟลเดอร์ functions และติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมดโดยใช้ npm.
$ cd functions $ npm install
หมายเหตุ: หากเห็นข้อความด้านล่าง คุณสามารถข้ามและดำเนินการต่อได้ คำเตือนนี้เกิดจากการขึ้นต่อกันบางรายการเป็นเวอร์ชันเก่า และคุณดูรายละเอียดเพิ่มเติมได้ที่นี่ here.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
เมื่อติดตั้งการขึ้นต่อกันและกำหนดค่าโปรเจ็กต์แล้ว คุณก็พร้อมที่จะทำให้แอปเครื่องซักผ้าที่มีข้อบกพร่องใช้งานได้
$ firebase deploy
นี่คือเอาต์พุตของคอนโซลที่คุณควรเห็น
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
อัปเดต HomeGraph
เปิด URL การโฮสต์ ในเบราว์เซอร์ (https://<firebase-project-id>.firebaseapp.com) เพื่อดูเว็บแอป ใน UI ของเว็บ ให้คลิกปุ่มรีเฟรช
เพื่ออัปเดต HomeGraph ด้วยข้อมูลเมตาของอุปกรณ์ล่าสุดจากแอปเครื่องซักผ้าที่มีข้อบกพร่องโดยใช้ Request Sync

เปิดแอป Google Home แล้วตรวจสอบว่าคุณเห็นอุปกรณ์เครื่องซักผ้าชื่อ Faulty Washer

3. ทดสอบการผสานรวม
หลังจากทำให้โปรเจ็กต์ใช้งานได้แล้ว ให้ทดสอบว่าการผสานรวมควบคุมเครื่องซักผ้าได้
ทดสอบเครื่องซักผ้า
ตรวจสอบการเปลี่ยนแปลงค่าเมื่อลองใช้คำสั่งเสียงต่อไปนี้ผ่านโทรศัพท์
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google เริ่มเครื่องซักผ้า"
"Ok Google หยุดเครื่องซักผ้าชั่วคราว"
"Ok Google เริ่มเครื่องซักผ้าต่อ"
"Ok Google หยุดเครื่องซักผ้า"
คุณจะสังเกตเห็นว่า Assistant ตอบกลับด้วยเสียงว่ามีบางอย่างผิดพลาดเมื่อคุณหยุดชั่วคราว / เริ่มเครื่องซักผ้าต่อ
"ขออภัย ฉันติดต่อ <ชื่อที่แสดงของโปรเจ็กต์> ไม่ได้"
หากต้องการแก้ไขข้อบกพร่องของปัญหานี้ คุณต้องมีข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดก่อนเพื่อจำกัดขอบเขตและระบุสาเหตุหลัก
หน้าแดชบอร์ดข้อมูลวิเคราะห์สมาร์ทโฮม
หน้าแดชบอร์ดข้อมูลวิเคราะห์สมาร์ทโฮม เป็นที่ที่เหมาะสำหรับการตรวจสอบข้อผิดพลาด ซึ่งจะรวบรวมแผนภูมิเมตริกการใช้งานและเมตริกประสิทธิภาพสำหรับการจัดการคำขอใช้งานระบบคลาวด์
- เมตริกการใช้งาน แสดงแนวโน้มการใช้งานการผสานรวมแบบคลาวด์กับคลาวด์ ซึ่งรวมถึงจำนวนผู้ใช้ที่ใช้งานอยู่รายวันและจำนวนคำขอทั้งหมดที่ส่งไปยัง Fulfillment ของคุณ
- เมตริกประสิทธิภาพ ช่วยให้คุณตรวจสอบการเกิดความผิดปกติในการผสานรวมแบบคลาวด์กับคลาวด์ ซึ่งครอบคลุมเวลาในการตอบสนองของคำขอ เปอร์เซ็นต์ความสำเร็จ และรายละเอียดข้อผิดพลาด
หากต้องการจำกัดขอบเขตสาเหตุของข้อผิดพลาด ให้ทำตามขั้นตอนด้านล่างเพื่อเข้าถึงหน้าแดชบอร์ดโปรเจ็กต์
- ใน Developer Console ให้ไปที่หน้าโปรเจ็กต์
- เลือกโปรเจ็กต์สมาร์ทโฮม
- คลิกแท็บข้อมูลวิเคราะห์ ในเมนูด้านซ้าย

- ระบบจะนำคุณไปยังรายการหน้าแดชบอร์ดสำหรับโปรเจ็กต์ใน Google Cloud เลือกหน้าแดชบอร์ด Google Home Analytics - การผสานรวมระบบคลาวด์

- เลื่อนลงไปที่แผนภูมิข้อผิดพลาดในการจัดการคำขอใช้งานระบบคลาวด์ - รายละเอียดสถานะ เพื่อดูรหัสข้อผิดพลาดสำหรับช่วงเวลาที่ไฮไลต์

รหัสข้อผิดพลาด PARTNER_RESPONSE_MISSING_DEVICE ให้คำแนะนำเกี่ยวกับสาเหตุหลัก จากนั้นดึงข้อมูลบันทึกเหตุการณ์ตามรหัสข้อผิดพลาดเพื่อดูรายละเอียดเพิ่มเติม
เข้าถึงข้อมูลบันทึกเหตุการณ์
หากต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด ให้เข้าถึงข้อมูลบันทึกเหตุการณ์สำหรับการผสานรวมแบบคลาวด์กับคลาวด์โดยใช้ Cloud Logging
เปิดเมนูการนำทาง ใน Google Cloud Platform แล้วเลือก Logging > Logs Explorer ในส่วนการดำเนินการ เพื่อเข้าถึงข้อมูลบันทึกเหตุการณ์สำหรับโปรเจ็กต์ หรือคุณจะค้นหา 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)));
}
}
}
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpausePause':
const data = await queryDevice(deviceId);
state = (data.isPaused === false && data.isRunning === false)
? {isRunning: false, isPaused: false}
: {isRunning: !params.pause, isPaused: params.pause};
ref = getFirebaseRef().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':
const data = await queryDevice(deviceId);
state = (data.isPaused === false && data.isRunning === false)
? {isRunning: false, isPaused: false}
: {isRunning: !params.pause, isPaused: params.pause};
ref = getFirebaseRef().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. ทดสอบการผสานรวมด้วยชุดทดสอบ
นอกจากการทดสอบด้วยตนเองแล้ว คุณยังใช้ชุดทดสอบสำหรับสมาร์ทโฮมแบบอัตโนมัติเพื่อตรวจสอบกรณีการใช้งานตามประเภทอุปกรณ์และลักษณะที่เชื่อมโยงกับการผสานรวมได้ด้วย ชุดทดสอบจะเรียกใช้การทดสอบชุดหนึ่งเพื่อตรวจหาปัญหาในการผสานรวม และแสดงข้อความที่เป็นประโยชน์สำหรับกรณีทดสอบที่ล้มเหลวเพื่อเร่งการแก้ไขข้อบกพร่องก่อนที่จะเจาะลึกข้อมูลบันทึกเหตุการณ์
เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
ทำตามวิธีการต่อไปนี้เพื่อทดสอบการผสานรวมแบบคลาวด์กับคลาวด์ด้วยชุดทดสอบ
- เปิดชุดทดสอบสำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
- ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน การดำเนินการนี้จะช่วยให้ชุดทดสอบส่งคำสั่งไปยัง Google Assistant ได้โดยตรง
- ในช่องรหัสโปรเจ็กต์ ให้ป้อนรหัสโปรเจ็กต์ของการผสานรวมแบบคลาวด์กับคลาวด์ จากนั้นคลิกถัดไป เพื่อดำเนินการต่อ
- ในขั้นตอนการตั้งค่าการทดสอบ คุณจะเห็นชุดทดสอบแสดงรายการประเภทอุปกรณ์และลักษณะของเครื่องซักผ้า

- ปิดใช้ตัวเลือกทดสอบการซิงค์คำขอ เนื่องจากแอปเครื่องซักผ้าตัวอย่างไม่มี UI สำหรับเพิ่ม / นำออก / เปลี่ยนชื่อเครื่องซักผ้า ในระบบที่ใช้งานจริง คุณต้องทริกเกอร์ การซิงค์คำขอ ทุกครั้งที่ผู้ใช้เพิ่ม / นำออก / เปลี่ยนชื่ออุปกรณ์
- คลิกถัดไป เพื่อเริ่มการทดสอบ
หลังจากชุดทดสอบเรียกใช้เสร็จแล้ว ให้ดูผลลัพธ์ของกรณีทดสอบ คุณจะสังเกตเห็นว่ามีกรณีทดสอบ 2 รายการที่ล้มเหลวซึ่งมีข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง

หากต้องการแก้ไขข้อบกพร่องของการผสานรวมแบบคลาวด์กับคลาวด์เนื่องจากความล้มเหลว คุณจะต้องระบุสาเหตุหลักของข้อผิดพลาดโดยวิเคราะห์ข้อความแสดงข้อผิดพลาดก่อน
วิเคราะห์ข้อความแสดงข้อผิดพลาด
ชุดทดสอบจะแสดงข้อความแสดงข้อผิดพลาดสำหรับกรณีทดสอบที่ล้มเหลวแต่ละรายการซึ่งระบุเหตุผลที่ทำให้เกิดความล้มเหลว เพื่อช่วยนักพัฒนาแอปพลิเคชันระบุสาเหตุหลัก
สำหรับกรณีทดสอบที่ล้มเหลวรายการแรกด้านบน

ข้อความแสดงข้อผิดพลาดระบุว่าชุดทดสอบคาดหวัง "isPause": true ในสถานะที่รายงานจากการผสานรวมแบบคลาวด์กับคลาวด์ แต่สถานะจริงมีเพียง "isPause": false
นอกจากนี้ ข้อความแสดงข้อผิดพลาดของกรณีทดสอบที่ล้มเหลวรายการที่ 2 ยังระบุว่าสถานะในการตอบสนอง QUERY จากการผสานรวมแบบคลาวด์กับคลาวด์มี "isPause": true ซึ่งแตกต่างจาก "isPause": false ในสถานะที่รายงานจากการผสานรวมแบบคลาวด์กับคลาวด์

ตามข้อความแสดงข้อผิดพลาดทั้ง 2 รายการ คุณควรตรวจสอบว่าการผสานรวมรายงานสถานะ isPaused ด้วยค่าที่ถูกต้องหรือไม่
ระบุสาเหตุหลักของข้อผิดพลาด
เปิด functions/index.js ซึ่งมีฟังก์ชัน reportstate ที่โพสต์การเปลี่ยนแปลงสถานะไปยัง Home Graph โดยใช้ Report State ตรวจสอบเพย์โหลด Report State แล้วคุณจะพบว่าเพย์โหลดไม่มีสถานะ 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: snapshot.online,
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 ลงในเพย์โหลด Report State
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: snapshot.online,
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 Metrics and Logging แล้ว
ดูข้อมูลเพิ่มเติม
ลองทำแบบฝึกหัดต่อไปนี้และสำรวจแหล่งข้อมูลเพิ่มเติมโดยอิงตาม Codelab นี้
- เพิ่มลักษณะที่รองรับเพิ่มเติมลงในอุปกรณ์และทดสอบลักษณะดังกล่าวด้วยชุดทดสอบ
- สร้างหน้าแดชบอร์ด ตั้งค่าการแจ้งเตือน และเข้าถึงข้อมูลเมตริกแบบเป็นโปรแกรมเพื่อรับเมตริกการใช้งานที่เป็นประโยชน์เกี่ยวกับการผสานรวม
- สำรวจการจัดการคำขอใช้งานระบบในเครื่องสำหรับสมาร์ทโฮม
- ดูตัวอย่าง GitHub เพื่อสำรวจเพิ่มเติม
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและการส่งการผสานรวมเพื่อรับการตรวจสอบ ซึ่งรวมถึงกระบวนการรับรองเพื่อเผยแพร่การผสานรวมให้ผู้ใช้