1. ก่อนเริ่มต้น
การผสานรวมสมาร์ทโฮมช่วยให้ Google Assistant ควบคุมอุปกรณ์ที่เชื่อมต่อในบ้านของผู้ใช้ได้ หากต้องการสร้างการผสานรวมแบบคลาวด์ต่อคลาวด์ คุณต้องระบุปลายทางของเว็บฮุคในระบบคลาวด์ที่สามารถจัดการIntent ของสมาร์ทโฮมได้ เช่น เมื่อผู้ใช้พูดว่า "Ok Google เปิดไฟ" Assistant จะส่งคำสั่งไปยังการดำเนินการในระบบคลาวด์เพื่ออัปเดตสถานะของอุปกรณ์
Local Home SDK ช่วยปรับปรุงการผสานรวมสมาร์ทโฮมโดยการเพิ่มเส้นทางในเครื่องเพื่อกำหนด Intent ของสมาร์ทโฮมไปยังอุปกรณ์ Google Home โดยตรง ซึ่งจะช่วยเพิ่มความน่าเชื่อถือและลดเวลาในการตอบสนองในการประมวลผลคำสั่งของผู้ใช้ ซึ่งช่วยให้คุณเขียนและติดตั้งใช้งานแอปการจัดการคำสั่งในบ้านใน TypeScript หรือ JavaScript ที่ระบุอุปกรณ์และเรียกใช้คำสั่งในลำโพงอัจฉริยะ Google Home หรือจออัจฉริยะ Google Nest ได้ จากนั้นแอปจะสื่อสารกับอุปกรณ์อัจฉริยะที่มีอยู่ของผู้ใช้โดยตรงผ่านเครือข่ายเฉพาะพื้นที่โดยใช้โปรโตคอลมาตรฐานที่มีอยู่เพื่อดำเนินการตามคำสั่ง

การแก้ไขข้อบกพร่องของการผสานรวมแบบคลาวด์ต่อคลาวด์เป็นขั้นตอนสำคัญในการสร้างการผสานรวมที่มีคุณภาพระดับการผลิต แต่ก็เป็นเรื่องที่ท้าทายและเสียเวลาหากไม่มีเครื่องมือการแก้ปัญหาและการทดสอบที่ให้ข้อมูลและใช้งานง่าย Google Cloud Platform (GCP) มีเมตริกและการบันทึก รวมถึงชุดทดสอบสำหรับสมาร์ทโฮมเพื่อช่วยคุณระบุและแก้ไขปัญหาในการผสานรวม เพื่ออำนวยความสะดวกในการแก้ไขข้อบกพร่องของการผสานรวมแบบคลาวด์ต่อคลาวด์
ข้อกำหนดเบื้องต้น
- คู่มือนักพัฒนาซอฟต์แวร์สร้างการผสานรวมแบบคลาวด์ต่อคลาวด์
- เรียกใช้ Codelab เปิดใช้การดำเนินการตามคำสั่งในร้านค้าสำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์
สิ่งที่คุณจะสร้าง
ในโค้ดแล็บนี้ คุณจะได้สร้างการตอบสนองในเครื่องสำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์และเชื่อมต่อกับ Assistant จากนั้นจึงแก้ไขข้อบกพร่องของแอป Local Home โดยใช้ชุดทดสอบสำหรับเมตริกและการบันทึกของสมาร์ทโฮมและ Google Cloud Platform (GCP)
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้เมตริกและการบันทึกของ GCP เพื่อระบุและแก้ไขปัญหาในการใช้งานจริง
- วิธีใช้ชุดทดสอบเพื่อระบุปัญหาเกี่ยวกับฟังก์ชันและ API
- วิธีใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ขณะพัฒนาแอปบ้านอัจฉริยะ
สิ่งที่คุณต้องมี
- Google Chrome เวอร์ชันล่าสุด
- อุปกรณ์ iOS หรือ Android ที่มีแอป Google Home
- ลำโพงอัจฉริยะ Google Home หรือจออัจฉริยะ Google Nest
- Node.js เวอร์ชัน 10.16 ขึ้นไป
- บัญชี Google
- บัญชีสำหรับการเรียกเก็บเงินของ Google Cloud
2. เรียกใช้แอปเครื่องซักผ้า
ดูซอร์สโค้ด
คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่างสำหรับ Codelab นี้ในเครื่องมือพัฒนา
...หรือจะโคลนที่เก็บ GitHub จากบรรทัดคำสั่งก็ได้
$ git clone https://github.com/google-home/smarthome-debug-local.git
เกี่ยวกับโครงการนี้
แอปเริ่มต้นมีไดเรกทอรีย่อยและ Cloud Functions ที่คล้ายกับ Codelab เปิดใช้การปฏิบัติตามคำสั่งในร้านสำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์ แต่เรามี app-faulty แทน app-start เราจะเริ่มจากแอปบ้านในพื้นที่ที่ใช้งานได้แต่ยังไม่ดีนัก
เชื่อมต่อกับ Firebase
เราจะใช้โปรเจ็กต์เดียวกันกับที่คุณสร้างใน Codelab เปิดใช้การปฏิบัติตามคำสั่งในพื้นที่สำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์ แต่จะนำไฟล์ที่ดาวน์โหลดใน Codelab นี้ไปใช้งาน
ไปที่ไดเรกทอรี app-faulty จากนั้นตั้งค่า Firebase CLI ด้วยโปรเจ็กต์การผสานรวมที่สร้างขึ้นใน Codelab เปิดใช้การดำเนินการตามคำสั่งในเครื่องสำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์
$ cd app-faulty $ firebase use <project-id>
ทําให้ใช้งานได้กับ Firebase
ไปที่โฟลเดอร์ app-faulty/functions แล้วติดตั้งการอ้างอิงที่จำเป็นทั้งหมดโดยใช้ npm ดังนี้
$ cd functions $ npm install
หมายเหตุ: หากเห็นข้อความด้านล่าง คุณสามารถข้ามและดำเนินการต่อได้ คำเตือนนี้เกิดจาก Dependency รุ่นเก่าบางรายการ และดูรายละเอียดเพิ่มเติมได้ที่นี่
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
ไปที่ไดเรกทอรี app-faulty/local/ แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดคอมไพเลอร์ TypeScript และคอมไพล์แอป
$ cd ../local $ npm install $ npm run build
การดำเนินการนี้จะคอมไพล์แหล่งที่มา index.ts (TypeScript) และวางเนื้อหาต่อไปนี้ลงในไดเรกทอรี app-faulty/public/local-home/
bundle.js- เอาต์พุต JavaScript ที่คอมไพล์แล้วซึ่งมีแอปในเครื่องและการอ้างอิงindex.html—หน้าการโฮสต์ในเครื่องที่ใช้เพื่อแสดงแอปสำหรับการทดสอบในอุปกรณ์
เมื่อติดตั้งการขึ้นต่อกันและกำหนดค่าโปรเจ็กต์แล้ว คุณก็พร้อมที่จะเรียกใช้แอปเป็นครั้งแรก
$ firebase deploy
นี่คือเอาต์พุตคอนโซลที่คุณควรเห็น
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<projectcd -id>.web.app
คำสั่งนี้จะทําการติดตั้งใช้งานเว็บแอปพร้อมกับ Cloud Functions for Firebase หลายรายการ
อัปเดต HomeGraph
เปิด URL การโฮสต์ในเบราว์เซอร์ (https://<project-id>.web.app) เพื่อดูเว็บแอป ในเว็บ UI ให้คลิกปุ่มรีเฟรช
เพื่ออัปเดต HomeGraph ด้วยข้อมูลเมตาของอุปกรณ์ล่าสุดจากแอปเครื่องซักผ้าที่มีข้อบกพร่องโดยใช้ขอซิงค์

เปิดแอป Google Home แล้วตรวจสอบว่าคุณเห็นอุปกรณ์เครื่องซักผ้าที่มีชื่อใหม่ว่า "เครื่องซักผ้าที่ชำรุด" อย่าลืมกำหนดอุปกรณ์ให้ห้องที่มีอุปกรณ์ Nest

3. เริ่มเครื่องซักผ้าอัจฉริยะ
หากคุณได้เรียกใช้ Codelab เปิดใช้การปฏิบัติตามคำสั่งในร้านสำหรับการผสานรวมแบบคลาวด์ต่อคลาวด์แล้ว คุณควรได้เริ่มใช้เครื่องซักผ้าอัจฉริยะเสมือนแล้ว หากหยุดทำงานแล้ว อย่าลืมรีสตาร์ทอุปกรณ์เสมือน
เปิดอุปกรณ์
ไปที่ไดเรกทอรี virtual-device/ แล้วเรียกใช้สคริปต์อุปกรณ์โดยส่งพารามิเตอร์การกำหนดค่าเป็นอาร์กิวเมนต์
$ cd ../../virtual-device $ npm install $ npm start -- \ --deviceId=deviceid123 --projectId=<project-id> \ --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK
ตรวจสอบว่าสคริปต์อุปกรณ์ทำงานโดยมีพารามิเตอร์ที่คาดไว้ดังนี้
(...): UDP Server listening on 3311 (...): Device listening on port 3388 (...): Report State successful
4. ทดสอบแอป Local Home
ส่งคำสั่งไปยังอุปกรณ์ผ่านคำสั่งเสียงไปยังอุปกรณ์ Google Home เช่น
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google เริ่มซักผ้า"
"Ok Google บังคับให้ใช้ภาษาท้องถิ่น"
"Ok Google หยุดเครื่องซักผ้า"
คุณจะเห็นว่า Google Assistant ตอบกลับว่า "ขอโทษด้วย ดูเหมือนว่าเครื่องซักผ้าที่ชำรุดจะยังไม่พร้อมใช้งานในตอนนี้" เมื่อคุณพยายามควบคุมเครื่องซักผ้าหลังจาก "บังคับให้เป็นแบบในพื้นที่"
ซึ่งหมายความว่าอุปกรณ์ไม่สามารถเข้าถึงได้ผ่านเส้นทางในเครื่อง ซึ่งจะใช้ได้ก่อนที่จะออกคำสั่ง "Ok Google บังคับใช้ในพื้นที่" เนื่องจากเราจะกลับไปใช้เส้นทางในระบบคลาวด์เมื่อเข้าถึงอุปกรณ์ผ่านเส้นทางในพื้นที่ไม่ได้ อย่างไรก็ตาม หลังจาก "บังคับให้ใช้ในเครื่อง" แล้ว ระบบจะปิดใช้ตัวเลือกการกลับไปใช้เส้นทางในระบบคลาวด์
หากต้องการทราบว่าปัญหาคืออะไร ให้ใช้เครื่องมือที่เรามี ได้แก่ เมตริกและการบันทึกของ Google Cloud Platform (GCP) รวมถึงเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome
5. แก้ไขข้อบกพร่องของแอป Local Home
ในส่วนต่อไปนี้ คุณจะได้ใช้เครื่องมือที่ Google จัดเตรียมไว้เพื่อดูสาเหตุที่เข้าถึงอุปกรณ์ผ่านเส้นทางในเครื่องไม่ได้ คุณสามารถใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Google Chrome เพื่อเชื่อมต่อกับอุปกรณ์ Google Home, ดูบันทึกคอนโซล และแก้ไขข้อบกพร่องของแอป Local Home ได้ นอกจากนี้ คุณยังส่งบันทึกที่กำหนดเองไปยัง Cloud Logging เพื่อให้ทราบข้อผิดพลาดที่พบบ่อยซึ่งผู้ใช้พบในแอป Local Home ได้ด้วย
เชื่อมต่อเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome
หากต้องการเชื่อมต่อโปรแกรมแก้ไขข้อบกพร่องกับแอปการจัดการคำสั่งซื้อในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้
- ตรวจสอบว่าคุณได้ลิงก์อุปกรณ์ Google Home กับผู้ใช้ที่มีสิทธิ์เข้าถึงโปรเจ็กต์ Developer Console แล้ว
- รีบูตอุปกรณ์ Google Home ซึ่งจะช่วยให้อุปกรณ์รับ URL ของ HTML รวมถึงการกำหนดค่าการสแกนที่คุณใส่ไว้ใน Developer Console ได้
- เปิด Chrome ในเครื่องที่ใช้พัฒนา
- เปิดแท็บ Chrome ใหม่ แล้วป้อน
chrome://inspectในช่องที่อยู่เพื่อเปิดตัวตรวจสอบ
คุณควรเห็นรายการอุปกรณ์ในหน้าเว็บ และ URL ของแอปควรปรากฏใต้ชื่ออุปกรณ์ Google Home

เปิดเครื่องมือตรวจสอบ
คลิกตรวจสอบใต้ URL ของแอปเพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome เลือกแท็บ Console และตรวจสอบว่าคุณเห็นเนื้อหาของ IDENTIFY Intent ที่แอป TypeScript พิมพ์

เอาต์พุตนี้หมายความว่าทริกเกอร์แฮนเดิลเลอร์ IDENTIFY สำเร็จแล้ว แต่ verificationId ที่แสดงใน IdentifyResponse ไม่ตรงกับอุปกรณ์ใดๆ ใน HomeGraph มาเพิ่มบันทึกที่กำหนดเองเพื่อดูสาเหตุกัน
เพิ่มบันทึกที่กำหนดเอง
แม้ว่า Local Home SDK จะพิมพ์ข้อผิดพลาด DEVICE_VERIFICATION_FAILED ออกมา แต่ก็ไม่ได้ช่วยในการหาสาเหตุที่แท้จริงมากนัก มาเพิ่มบันทึกที่กำหนดเองเพื่อให้แน่ใจว่าเราอ่านและประมวลผลข้อมูลการสแกนได้อย่างถูกต้อง และโปรดทราบว่าหากเราปฏิเสธสัญญาด้วยข้อผิดพลาด ระบบจะส่งข้อความแสดงข้อผิดพลาดไปยัง Cloud Logging ด้วย
local/index.ts
identifyHandler(request: IntentFlow.IdentifyRequest):
Promise<IntentFlow.IdentifyResponse> {
console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));
const scanData = request.inputs[0].payload.device.udpScanData;
if (!scanData) {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_request', 'Invalid scan data');
return Promise.reject(err);
}
// In this codelab, the scan data contains only local device id.
// Is there something wrong here?
const localDeviceId = Buffer.from(scanData.data);
console.log(`IDENTIFY handler: received local device id
${localDeviceId}`);
// Add custom logs
if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_device', 'Invalid device id from scan data ' +
localDeviceId);
return Promise.reject(err);
}
const response: IntentFlow.IdentifyResponse = {
intent: Intents.IDENTIFY,
requestId: request.requestId,
payload: {
device: {
id: 'washer',
verificationId: localDeviceId.toString(),
}
}
};
console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));
return Promise.resolve(response);
}
นอกจากนี้ ให้เปลี่ยนเวอร์ชันแอป Home ในเครื่องเพื่อให้เราทราบว่าคุณใช้เวอร์ชันที่ถูกต้อง
local/index.ts
const localHomeSdk = new App('1.0.1');
หลังจากเพิ่มบันทึกที่กำหนดเองแล้ว คุณต้องคอมไพล์แอปอีกครั้งและติดตั้งใช้งานใน Firebase อีกครั้ง
$ cd ../app-faulty/local $ npm run build $ firebase deploy --only hosting
ตอนนี้ ให้รีบูตอุปกรณ์ Google Home เพื่อให้โหลดแอปบ้านในเครื่องที่อัปเดตแล้วได้ คุณสามารถดูว่าอุปกรณ์ Google Home ใช้เวอร์ชันที่คาดไว้หรือไม่ได้โดยดูบันทึกคอนโซลในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome

เข้าถึง Cloud Logging
มาดูวิธีใช้ Cloud Logging เพื่อค้นหาข้อผิดพลาดกัน วิธีเข้าถึง Cloud Logging สำหรับโปรเจ็กต์
- ในคอนโซล Cloud Platform ให้ไปที่หน้าโปรเจ็กต์
- เลือกโปรเจ็กต์สมาร์ทโฮม
- ในส่วนการดำเนินการ ให้เลือกการบันทึก > เครื่องมือสำรวจบันทึก
การเข้าถึงข้อมูลการบันทึกจะได้รับการจัดการผ่าน Identity and Access Management (IAM) สำหรับผู้ใช้โปรเจ็กต์การผสานรวม ดูรายละเอียดเพิ่มเติมเกี่ยวกับบทบาทและสิทธิ์สำหรับการบันทึกข้อมูลได้ที่การควบคุมการเข้าถึงของ Cloud Logging
ใช้ตัวกรองขั้นสูง
เราทราบว่าเกิดข้อผิดพลาดในIDENTIFY Intent เนื่องจากเส้นทางในเครื่องไม่ทำงานเพราะระบบระบุอุปกรณ์ในเครื่องไม่สำเร็จ อย่างไรก็ตาม เราต้องการทราบว่าปัญหาคืออะไรกันแน่ ดังนั้นมากรองข้อผิดพลาดที่เกิดขึ้นในแฮนเดิล IDENTIFY ก่อน
คลิกปุ่มเปิด/ปิดแสดงคำค้นหา ซึ่งควรเปลี่ยนเป็นช่องเครื่องมือสร้างคำค้นหา ป้อน jsonPayload.intent="IDENTIFY" ในช่องเครื่องมือสร้างคำค้นหา แล้วคลิกปุ่มเรียกใช้คำค้นหา

ด้วยเหตุนี้ คุณจึงได้รับบันทึกข้อผิดพลาดทั้งหมดที่เกิดขึ้นในแฮนเดิลเลอร์ IDENTIFY จากนั้นขยายข้อผิดพลาดล่าสุด คุณจะเห็น errorCode และ debugString ที่เพิ่งตั้งค่าเมื่อปฏิเสธ Promise ในตัวแฮนเดิล IDENTIFY

จาก debugString เราทราบว่ารหัสอุปกรณ์ในเครื่องไม่ได้อยู่ในรูปแบบที่คาดไว้ แอป Local Home คาดว่าจะได้รับรหัสอุปกรณ์ในพื้นที่เป็นสตริงที่ขึ้นต้นด้วย deviceid ตามด้วยตัวเลข 3 หลัก แต่รหัสอุปกรณ์ในพื้นที่ที่นี่เป็นสตริงฐานสิบหก
แก้ไขข้อผิดพลาด
เมื่อกลับไปที่ซอร์สโค้ดที่เราแยกวิเคราะห์รหัสอุปกรณ์ในเครื่องจากข้อมูลการสแกน เราจะเห็นว่าเราไม่ได้ระบุการเข้ารหัสเมื่อแปลงสตริงเป็นไบต์ ระบบจะรับข้อมูลการสแกนเป็นสตริงฐานสิบหก ดังนั้นให้ส่ง hex เป็นการเข้ารหัสอักขระเมื่อเรียกใช้ Buffer.from()
local/index.ts
identifyHandler(request: IntentFlow.IdentifyRequest):
Promise<IntentFlow.IdentifyResponse> {
console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));
const scanData = request.inputs[0].payload.device.udpScanData;
if (!scanData) {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_request', 'Invalid scan data');
return Promise.reject(err);
}
// In this codelab, the scan data contains only local device id.
const localDeviceId = Buffer.from(scanData.data, 'hex');
console.log(`IDENTIFY handler: received local device id
${localDeviceId}`);
if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
const err = new IntentFlow.HandlerError(request.requestId,
'invalid_device', 'Invalid device id from scan data ' +
localDeviceId);
return Promise.reject(err);
}
const response: IntentFlow.IdentifyResponse = {
intent: Intents.IDENTIFY,
requestId: request.requestId,
payload: {
device: {
id: 'washer',
verificationId: localDeviceId.toString(),
}
}
};
console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));
return Promise.resolve(response);
}
นอกจากนี้ ให้เปลี่ยนเวอร์ชันแอป Home ในเครื่องเพื่อให้เราทราบว่าคุณใช้เวอร์ชันที่ถูกต้อง
local/index.ts
const localHomeSdk = new App('1.0.2');
หลังจากแก้ไขข้อผิดพลาดแล้ว ให้คอมไพล์แอปและติดตั้งใช้งานใน Firebase อีกครั้ง ใน app-faulty/local ให้เรียกใช้คำสั่งต่อไปนี้
$ npm run build $ firebase deploy --only hosting
ทดสอบการแก้ไข
หลังจากติดตั้งใช้งานแล้ว ให้รีบูตอุปกรณ์ Google Home เพื่อให้อุปกรณ์โหลดแอปบ้านในพื้นที่ที่อัปเดตแล้ว ตรวจสอบว่าแอปบ้านในพื้นที่มีเวอร์ชัน 1.0.2 และคราวนี้คุณไม่ควรเห็นข้อผิดพลาดในคอนโซลเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome

ตอนนี้คุณลองส่งคำสั่งไปยังอุปกรณ์อีกครั้งได้แล้ว
"Ok Google บังคับใช้ภาษาท้องถิ่น"
"Ok Google หยุดเครื่องซักผ้า"
"Ok Google เปิดเครื่องซักผ้า"
...
"Ok Google บังคับให้เป็นค่าเริ่มต้น"
6. เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
หลังจากยืนยันอุปกรณ์โดยใช้การควบคุมด้วยการสัมผัสในแอป Google Home หรือผ่านคำสั่งเสียงแล้ว คุณจะใช้ Test Suite สำหรับสมาร์ทโฮมที่ทำงานอัตโนมัติเพื่อตรวจสอบกรณีการใช้งานตามประเภทอุปกรณ์และลักษณะที่เชื่อมโยงกับการผสานรวมได้ ชุดทดสอบจะเรียกใช้ชุดการทดสอบเพื่อตรวจหาปัญหาในการผสานรวม และแสดงข้อความที่ให้ข้อมูลสำหรับกรณีทดสอบที่ไม่ผ่านเพื่อเร่งการแก้ไขข้อบกพร่องก่อนที่จะเจาะลึกบันทึกเหตุการณ์
เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
ทำตามวิธีการต่อไปนี้เพื่อทดสอบการผสานรวมแบบคลาวด์ต่อคลาวด์ด้วยชุดทดสอบ
- เปิด Test Suite สำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
- ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน ซึ่งจะช่วยให้ชุดทดสอบส่งคำสั่งไปยัง Google Assistant ได้โดยตรง
- ในช่องรหัสโปรเจ็กต์ ให้ป้อนรหัสโปรเจ็กต์ของการผสานรวมระบบคลาวด์กับคลาวด์ จากนั้นคลิกถัดไปเพื่อดำเนินการต่อ
- ในขั้นตอนการตั้งค่าการทดสอบ คุณควรเห็นเครื่องซักผ้าที่ชำรุดในส่วนอุปกรณ์และเทรต
- ปิดใช้ตัวเลือกซิงค์คำขอทดสอบเนื่องจากแอปเครื่องซักตัวอย่างไม่มี UI สำหรับเพิ่ม / นำออก / เปลี่ยนชื่อเครื่องซัก ในระบบที่ใช้งานจริง คุณต้องทริกเกอร์ขอซิงค์ทุกครั้งที่ผู้ใช้เพิ่ม / นำออก / เปลี่ยนชื่ออุปกรณ์
- เปิดใช้ตัวเลือก Local Home SDK ไว้เนื่องจากเราจะทดสอบทั้งเส้นทางในเครื่องและเส้นทางในระบบคลาวด์
- คลิกถัดไป: สภาพแวดล้อมการทดสอบเพื่อเริ่มการทดสอบ

เมื่อการทดสอบเสร็จสมบูรณ์ คุณจะเห็นว่าการทดสอบหยุดชั่วคราว/กลับมาทำงานต่อในเส้นทางภายในเครื่องล้มเหลว ในขณะที่การทดสอบหยุดชั่วคราว/กลับมาทำงานต่อในเส้นทางระบบคลาวด์ผ่าน

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

จากข้อความแสดงข้อผิดพลาด ดูเหมือนว่าในเส้นทางภายใน เราจะตั้งค่าสถานะ isPaused ในทางกลับกัน
ระบุและแก้ไขข้อผิดพลาด
มาดูซอร์สโค้ดที่แอป Local Home ส่งคำสั่งการดำเนินการไปยังอุปกรณ์กัน getDataCommand() คือฟังก์ชันที่เรียกใช้โดย executeHandler() เพื่อตั้งค่า payload ในคำสั่งการดำเนินการที่ส่งไปยังอุปกรณ์
local/index.ts
getDataForCommand(command: string, params: IWasherParams): unknown {
switch (command) {
case 'action.devices.commands.OnOff':
return {
on: params.on ? true : false
};
case 'action.devices.commands.StartStop':
return {
isRunning: params.start ? true : false
};
case 'action.devices.commands.PauseUnpause':
return {
// Is there something wrong here?
isPaused: params.pause ? false : true
};
default:
console.error('Unknown command', command);
return {};
}
}
เรากำลังตั้งค่า isPause ในสถานะย้อนกลับ โดยควรตั้งค่าเป็น true เมื่อ params.pause เป็น true และเป็น false ในกรณีอื่นๆ มาแก้ปัญหานี้กัน
local/index.ts
getDataForCommand(command: string, params: IWasherParams): unknown {
switch (command) {
case 'action.devices.commands.OnOff':
return {
on: params.on ? true : false
};
case 'action.devices.commands.StartStop':
return {
isRunning: params.start ? true : false
};
case 'action.devices.commands.PauseUnpause':
return {
isPaused: params.pause ? true : false
};
default:
console.error('Unknown command', command);
return {};
}
}
เปลี่ยนเวอร์ชันแอปบ้านในพื้นที่เพื่อให้เราทราบว่าคุณใช้เวอร์ชันที่ถูกต้อง
local/index.ts
const localHomeSdk = new App('1.0.3');
อย่าลืมคอมไพล์แอปอีกครั้งและติดตั้งใช้งานใน Firebase อีกครั้ง ใน app-faulty/local ให้เรียกใช้คำสั่งต่อไปนี้
$ npm run build $ firebase deploy --only hosting
ตอนนี้ให้รีบูตอุปกรณ์ Google Home เพื่อให้โหลดแอปบ้านในพื้นที่ที่อัปเดตแล้วได้ ตรวจสอบว่าแอปบ้านในพื้นที่เป็นเวอร์ชัน 1.0.3
ทดสอบการแก้ไข
ตอนนี้ให้เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮมอีกครั้งด้วยการกำหนดค่าเดียวกัน แล้วคุณจะเห็นว่ากรณีทดสอบทั้งหมดผ่านแล้ว

7. ขอแสดงความยินดี

ยินดีด้วย คุณได้เรียนรู้วิธีแก้ปัญหาแอป Local Home โดยใช้ชุดทดสอบสำหรับสมาร์ทโฮมและการบันทึก Cloud เรียบร้อยแล้ว
ดูข้อมูลเพิ่มเติม
คุณลองทำสิ่งต่อไปนี้เพิ่มเติมได้
- เพิ่มลักษณะที่รองรับลงในอุปกรณ์และทดสอบด้วยชุดทดสอบ
- เพิ่มบันทึกที่กำหนดเองเพิ่มเติมในตัวแฮนเดิลเจตนาแต่ละรายการ แล้วดูใน Cloud Logging
- สร้างแดชบอร์ด ตั้งค่าการแจ้งเตือน และเข้าถึงข้อมูลเมตริกแบบเป็นโปรแกรมเพื่อรับเมตริกการใช้งานที่เป็นประโยชน์เกี่ยวกับการผสานรวม
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและการส่งการผสานรวมเพื่อรับการตรวจสอบ รวมถึงกระบวนการรับรองเพื่อเผยแพร่การผสานรวมต่อผู้ใช้ได้ด้วย