1. ก่อนเริ่มต้น
ในฐานะนักพัฒนาแอปอินเทอร์เน็ตของสรรพสิ่ง (IoT) คุณสามารถทําการผสานรวมระบบคลาวด์กับระบบคลาวด์เพื่อให้ผู้ใช้ควบคุมอุปกรณ์ผ่านการควบคุมด้วยการสัมผัสในแอป Google Home และคำสั่งเสียงด้วย Google Assistant ได้
การเรียนรู้เครื่องมือแก้ไขข้อบกพร่องสำหรับการผสานรวมระบบคลาวด์กับระบบคลาวด์เป็นขั้นตอนสำคัญในการสร้างการผสานรวมคุณภาพระดับเวอร์ชันที่ใช้งานจริงกับ Google Assistant เมตริก Google Cloud Platform (GCP) และการบันทึก รวมถึงชุดทดสอบสําหรับสมาร์ทโฮมมีไว้เพื่อช่วยคุณระบุและแก้ไขปัญหาการผสานรวมเพื่อให้ตรวจสอบและการแก้ไขข้อบกพร่องได้ง่าย
ข้อกำหนดเบื้องต้น
- อ่านคู่มือนักพัฒนาซอฟต์แวร์เกี่ยวกับการผสานรวมระบบคลาวด์กับระบบคลาวด์
- เรียกใช้โค้ดแล็บเชื่อมต่ออุปกรณ์สมาร์ทโฮมกับ Google Assistant
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะติดตั้งใช้งานการผสานรวมระบบคลาวด์กับระบบคลาวด์ที่มีข้อบกพร่อง 2 ข้อและเชื่อมต่อกับ Assistant จากนั้นแก้ไขข้อบกพร่องของการผสานรวมผ่าน Test Suite สำหรับเมตริกและการบันทึกของสมาร์ทโฮมและ Google Cloud Platform (GCP)
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้เมตริกและการบันทึกของ GCP เพื่อระบุและแก้ไขปัญหาเวอร์ชันที่ใช้งานจริง
- วิธีใช้ชุดทดสอบสำหรับสมาร์ทโฮมเพื่อระบุปัญหาด้านฟังก์ชันการทำงานและ API
สิ่งที่ต้องมี
- เว็บเบราว์เซอร์ เช่น Google Chrome
- อุปกรณ์ iOS หรือ Android ที่มีแอป Google Home ติดตั้งไว้
- Node.js เวอร์ชัน 10.16 ขึ้นไป
- บัญชีสำหรับการเรียกเก็บเงินของ Google Cloud
2. เรียกใช้แอปที่มีข้อบกพร่อง
ดูซอร์สโค้ด
คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่างสําหรับโค้ดแล็บนี้ในเครื่องพัฒนาซอฟต์แวร์
...หรือจะโคลนที่เก็บ GitHub จากบรรทัดคำสั่งก็ได้ โดยทำดังนี้
$ git clone https://github.com/google-home/smarthome-debug.git
เกี่ยวกับโปรเจ็กต์
แอปเครื่องซักผ้ามีไดเรกทอรีย่อยต่อไปนี้
public
: UI ด้านหน้าสำหรับควบคุมและตรวจสอบสถานะของเครื่องซักผ้าอัจฉริยะได้อย่างง่ายดายfunctions
: บริการระบบคลาวด์ที่ติดตั้งใช้งานอย่างเต็มรูปแบบซึ่งจัดการเครื่องซักผ้าอัจฉริยะด้วย Cloud Functions for Firebase และ ฐานข้อมูลเรียลไทม์ของ Firebase
เชื่อมต่อกับ Firebase
เปิดเทอร์มินัลในเครื่องสำหรับพัฒนาซอฟต์แวร์ ไปที่ไดเรกทอรี washer-faulty
จากนั้นตั้งค่า Firebase CLI ด้วยโปรเจ็กต์การผสานรวมที่สร้างในเชื่อมต่ออุปกรณ์สมาร์ทโฮมกับ Google Assistant Codelab โดยทำดังนี้
$ cd washer-faulty $ firebase use <firebase-project-id>
ทำให้ใช้งานได้กับ Firebase
ไปที่โฟลเดอร์ functions
และติดตั้งไลบรารีที่จำเป็นทั้งหมดโดยใช้ npm.
$ cd functions $ npm install
หมายเหตุ: หากเห็นข้อความด้านล่าง คุณสามารถเพิกเฉยและดำเนินการต่อได้ คําเตือนนี้เกิดจากข้อกําหนดเบื้องต้นเก่าๆ และดูรายละเอียดเพิ่มเติมได้ที่ที่นี่
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
เปิด Hosting URL ในเบราว์เซอร์ (https://<firebase-project-id>.firebaseapp.com
) เพื่อดูเว็บแอป ใน UI ของเว็บ ให้คลิกปุ่มรีเฟรช เพื่ออัปเดต HomeGraph ผ่านคำขอซิงค์ด้วยข้อมูลเมตาล่าสุดของอุปกรณ์จากแอปเครื่องซักผ้าที่มีข้อบกพร่อง
เปิดแอป Google Home และตรวจสอบว่าคุณเห็นอุปกรณ์เครื่องซักผ้าชื่อ Faulty Washer
3. ทดสอบการผสานรวม
หลังจากติดตั้งใช้งานโปรเจ็กต์แล้ว ให้ทดสอบว่าการผสานรวมควบคุมเครื่องซักผ้าได้
ทดสอบเครื่องซักผ้า
ตรวจสอบการเปลี่ยนแปลงของมูลค่าเมื่อคุณลองใช้คำสั่งเสียงต่อไปนี้ผ่านโทรศัพท์
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google เริ่มเครื่องซักผ้า"
"Ok Google หยุดเครื่องซักผ้าชั่วคราว"
"Ok Google เปิดเครื่องซักผ้าต่อ"
"Ok Google หยุดเครื่องซักผ้า"
คุณจะเห็นว่า Assistant ตอบกลับด้วยเสียงว่ามีปัญหาเกิดขึ้นเมื่อคุณหยุด / เริ่มเครื่องซักผ้าอีกครั้ง
"ขออภัย เราติดต่อ <ชื่อที่แสดงของโปรเจ็กต์> ไม่ได้"
หากต้องการแก้ไขข้อบกพร่องนี้ ก่อนอื่นคุณต้องมีข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดเพื่อจำกัดขอบเขตและระบุสาเหตุหลัก
แดชบอร์ดข้อมูลวิเคราะห์สมาร์ทโฮม
สถานที่ที่เหมาะสําหรับตรวจสอบข้อผิดพลาดคือแดชบอร์ดข้อมูลวิเคราะห์สมาร์ทโฮม ซึ่งรวบรวมแผนภูมิเมตริกการใช้งานและประสิทธิภาพการทำงานสําหรับการจำหน่ายสินค้าผ่านระบบคลาวด์
- เมตริกการใช้งานแสดงแนวโน้มการใช้งานการผสานรวมระบบคลาวด์ต่อคลาวด์ รวมถึงจํานวนผู้ใช้ที่ใช้งานอยู่รายวันและจํานวนคําขอทั้งหมดที่ส่งไปยังการดําเนินการ
- เมตริกประสิทธิภาพการทำงานช่วยคุณตรวจสอบความผิดปกติที่เกิดขึ้นในการผสานรวมระบบคลาวด์กับระบบคลาวด์ ซึ่งครอบคลุมเวลาในการตอบสนองของคําขอ เปอร์เซ็นต์ความสําเร็จ และรายละเอียดข้อผิดพลาด
หากต้องการจำกัดสาเหตุของข้อผิดพลาดให้แคบลง ให้ทำตามขั้นตอนด้านล่างเพื่อเข้าถึงแดชบอร์ดโปรเจ็กต์
- ใน Developer Console ให้ไปที่หน้าโปรเจ็กต์
- เลือกโปรเจ็กต์สมาร์ทโฮม
- คลิกแท็บข้อมูลวิเคราะห์ในเมนูด้านซ้าย
- ซึ่งจะนำคุณไปยังรายการแดชบอร์ดของโปรเจ็กต์ใน Google Cloud เลือกหน้าแดชบอร์ด Google Home Analytics - การผสานรวมระบบคลาวด์
- เลื่อนลงไปที่แผนภูมิข้อผิดพลาดในการดำเนินการตามคำสั่งซื้อจากระบบคลาวด์ - การแจกแจงสถานะเพื่อดูรหัสข้อผิดพลาดของช่วงเวลาที่ไฮไลต์
รหัสข้อผิดพลาด 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. ทดสอบการผสานรวมด้วยชุดทดสอบ
นอกจากการทดสอบด้วยตนเองแล้ว คุณยังใช้ชุดทดสอบสําหรับสมาร์ทโฮมแบบอัตโนมัติเพื่อตรวจสอบ Use Case ตามประเภทอุปกรณ์และลักษณะที่เชื่อมโยงกับการผสานรวมได้ด้วย ชุดทดสอบจะทําชุดการทดสอบเพื่อตรวจหาปัญหาในการผสานรวม และแสดงข้อความที่ให้ข้อมูลสําหรับกรณีทดสอบที่ไม่สําเร็จเพื่อเร่งแก้ไขข้อบกพร่องก่อนที่จะเจาะลึกบันทึกเหตุการณ์
เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
ทําตามวิธีการต่อไปนี้เพื่อทดสอบการผสานรวมระบบคลาวด์กับระบบคลาวด์ด้วยชุดทดสอบ
- เปิด Test Suite สำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
- ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน ซึ่งจะช่วยให้ชุดทดสอบส่งคําสั่งไปยัง Google Assistant ได้โดยตรง
- ป้อนรหัสโปรเจ็กต์ของการผสานรวมระบบคลาวด์ต่อคลาวด์ในช่องรหัสโปรเจ็กต์ จากนั้นคลิกถัดไปเพื่อดำเนินการต่อ
- ในขั้นตอนการตั้งค่าการทดสอบ คุณจะเห็น Test Suite แสดงประเภทอุปกรณ์และลักษณะของเครื่องซักผ้า
- ปิดใช้ตัวเลือกทดสอบการซิงค์คําขอเนื่องจากแอปเครื่องซักผ้าตัวอย่างไม่มี UI สำหรับเพิ่ม / นําออก / เปลี่ยนชื่อเครื่องซักผ้า ในระบบเวอร์ชันที่ใช้งานจริง คุณต้องทริกเกอร์ขอการซิงค์ทุกครั้งที่ผู้ใช้เพิ่ม / นำออก / เปลี่ยนชื่ออุปกรณ์
- คลิกถัดไปเพื่อเริ่มการทดสอบ
หลังจากชุดทดสอบทำงานเสร็จแล้ว ให้ดูผลลัพธ์ของชุดทดสอบ คุณจะเห็น 2 กรณีทดสอบที่ไม่สําเร็จซึ่งพบพร้อมกับข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง
หากต้องการแก้ไขข้อบกพร่องในการผสานรวมระบบคลาวด์ต่อคลาวด์ที่ไม่สำเร็จ คุณจะต้องระบุสาเหตุของข้อผิดพลาดโดยวิเคราะห์ข้อความแสดงข้อผิดพลาดก่อน
วิเคราะห์ข้อความแสดงข้อผิดพลาด
ชุดทดสอบจะแสดงข้อความแสดงข้อผิดพลาดสำหรับแต่ละกรณีทดสอบที่ไม่ผ่าน ซึ่งระบุสาเหตุของการไม่ผ่าน
สําหรับเฟรมทดสอบแรกที่ไม่ผ่านด้านบน
ข้อความแสดงข้อผิดพลาดระบุว่าชุดทดสอบคาดว่าจะมี "isPause": true
ในสถานะที่รายงานจากการผสานรวมระบบคลาวด์ต่อคลาวด์ แต่สถานะจริงมีเพียง "isPause": false
นอกจากนี้ ข้อความแสดงข้อผิดพลาดของเคสทดสอบที่ 2 ที่ดำเนินการไม่สำเร็จยังระบุว่าสถานะในQUERY
การตอบกลับจากการผสานรวมระบบคลาวด์กับระบบคลาวด์มี"isPause": true
ซึ่งแตกต่างจาก"isPause": false
ในสถานะที่รายงานจากการผสานรวมระบบคลาวด์กับระบบคลาวด์
จากข้อความแสดงข้อผิดพลาดทั้ง 2 รายการ คุณควรตรวจสอบว่ารายงานการผสานรวมระบุว่า isPaused
มีค่าที่ถูกต้องหรือไม่
ระบุสาเหตุของข้อผิดพลาด
เปิด functions/index.js
ซึ่งมีฟังก์ชัน reportstate
ที่โพสต์การเปลี่ยนแปลงสถานะไปยังกราฟ Home ผ่านสถานะการรายงาน ตรวจสอบเพย์โหลดสถานะรายงานและคุณจะพบว่าเพย์โหลดไม่มีสถานะ 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
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและส่งการผสานรวมเพื่อรับการตรวจสอบ รวมถึงกระบวนการรับรองเพื่อเผยแพร่การผสานรวมให้ผู้ใช้ทราบได้ด้วย