1. ก่อนเริ่มต้น
การผสานรวมสมาร์ทโฮมช่วยให้ Google Assistant ควบคุมอุปกรณ์ที่เชื่อมต่อในของผู้ใช้ได้ บ้าน หากต้องการสร้างการดำเนินการสำหรับสมาร์ทโฮม คุณต้องมีปลายทางเว็บฮุคของระบบคลาวด์ที่สามารถจัดการ Intent ของสมาร์ทโฮมได้ เช่น เมื่อผู้ใช้พูดว่า "Ok Google เปิดไฟ" Assistant จะส่งคำสั่งไปยัง Fulfillment ระบบคลาวด์ของคุณเพื่ออัปเดตสถานะของอุปกรณ์
Local Home SDK เพิ่มประสิทธิภาพการผสานรวมสมาร์ทโฮมโดยการเพิ่มเส้นทางภายในสำหรับกำหนดเส้นทางความตั้งใจของสมาร์ทโฮมไปยังอุปกรณ์ Google Home โดยตรง ซึ่งช่วยเพิ่มความน่าเชื่อถือและลดเวลาในการตอบสนองในการประมวลผลของผู้ใช้ คำสั่ง ซึ่งช่วยให้คุณเขียนและทำให้แอป Fulfillment ในเครื่องใช้งานได้ใน TypeScript หรือ JavaScript ที่ระบุอุปกรณ์และเรียกใช้คำสั่งบนลำโพงอัจฉริยะ Google Home หรือ Google Nest Smart Display จากนั้นแอปของคุณจะสื่อสารกับผู้ใช้โดยตรง อุปกรณ์อัจฉริยะที่มีอยู่ผ่านเครือข่าย LAN โดยใช้โปรโตคอลมาตรฐานที่มีอยู่ในการทำตามคำสั่ง
การแก้ไขข้อบกพร่องของการดำเนินการในสมาร์ทโฮมเป็นขั้นตอนสำคัญในการสร้างการดำเนินการที่มีคุณภาพเวอร์ชันที่ใช้งานจริง แต่ก็ทำได้ยากและใช้เวลานานเนื่องจากขาดเครื่องมือแก้ปัญหาและการทดสอบที่ให้ข้อมูลและใช้งานง่าย เพื่อช่วยอำนวยความสะดวกในการแก้ไขข้อบกพร่องของการดำเนินการสำหรับสมาร์ทโฮม เรามีเมตริก การบันทึก และชุดทดสอบสำหรับสมาร์ทโฮมของ Google Cloud Platform (GCP) ที่จะช่วยคุณระบุและแก้ไขปัญหาของการดำเนินการของคุณ
ข้อกำหนดเบื้องต้น
- สร้างคู่มือการดำเนินการสมาร์ทโฮมสำหรับนักพัฒนาซอฟต์แวร์
- เรียกใช้ Codelab ของเปิดใช้ Fulfillment ในพื้นที่สำหรับการดำเนินการของสมาร์ทโฮม
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะสร้าง Fulfillment ท้องถิ่นสำหรับการดำเนินการของสมาร์ทโฮม และเชื่อมต่อกับ Assistant จากนั้นแก้ไขข้อบกพร่องของแอป Local Home ผ่านชุดทดสอบสำหรับสมาร์ทโฮมและ เมตริกและการบันทึกของ Google Cloud Platform (GCP)
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้เมตริก GCP และการบันทึกเพื่อระบุและแก้ไขปัญหาของเวอร์ชันที่ใช้งานจริง
- วิธีใช้ชุดทดสอบเพื่อระบุปัญหาเกี่ยวกับการทำงานและ API
- วิธีใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ขณะพัฒนาแอป Home Home
สิ่งที่คุณต้องมี
- 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
เกี่ยวกับโครงการนี้
แอปเริ่มต้นมีไดเรกทอรีย่อยและฟังก์ชันระบบคลาวด์คล้ายกับ Codelab ของเปิดใช้ Fulfillment ในเครื่องสำหรับการดำเนินการสมาร์ทโฮม แต่แทนที่จะเป็น app-start
เรามี app-faulty
ที่นี่ เราจะเริ่มจากแอป Home ในท้องถิ่นซึ่งใช้งานได้ดีนัก
เชื่อมต่อกับ Firebase
เราจะใช้โปรเจ็กต์เดียวกันกับที่คุณสร้างไว้ใน Codelab ของเปิดใช้ Fulfillment ในเครื่องสำหรับ Smart Home Actions แต่เราจะทำให้ไฟล์ที่ดาวน์โหลดใน Codelab นี้ใช้งานได้
ไปที่ไดเรกทอรี app-faulty
แล้วตั้งค่า Firebase CLI ด้วยโปรเจ็กต์การดำเนินการที่สร้างใน Codelab ของเปิดใช้ Fulfillment ในเครื่องสำหรับ Smart Home
$ 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 ที่คอมไพล์แล้ว ซึ่งมีแอปภายในเครื่องและทรัพยากร Dependencyindex.html
- หน้าโฮสติ้งในเครื่องที่ใช้เพื่อแสดงแอปสำหรับการทดสอบในอุปกรณ์
เมื่อติดตั้งทรัพยากร Dependency และกำหนดค่าโปรเจ็กต์แล้ว คุณก็พร้อมที่จะเรียกใช้แอปเป็นครั้งแรกแล้ว
$ 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 ผ่าน Request Sync ด้วยข้อมูลเมตาอุปกรณ์ล่าสุดจากแอปเครื่องซักผ้าที่มีข้อบกพร่อง ดังนี้
เปิดแอป Google Home แล้วตรวจสอบว่าคุณเห็นอุปกรณ์เครื่องซักผ้าที่ใช้ชื่อใหม่ว่า "เครื่องซักผ้าผิดพลาด" อย่าลืมกำหนดอุปกรณ์ให้กับห้องที่มีอุปกรณ์ Nest อยู่ด้วย
3. เริ่มใช้เครื่องซักผ้าอัจฉริยะ
หากได้เรียกใช้ Codelab ของเปิดใช้ Fulfillment ในพื้นที่สำหรับการดำเนินการของสมาร์ทโฮม ก็ควรเริ่มต้นใช้งานเครื่องซักผ้าอัจฉริยะเสมือนจริงไว้แล้ว ถ้าระบบหยุดแล้ว อย่าลืมรีสตาร์ทอุปกรณ์เสมือนด้วย
เปิดเครื่อง
ไปที่ไดเรกทอรี 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. ทดสอบแอป Home ในพื้นที่
ส่งคำสั่งไปยังอุปกรณ์ของคุณผ่านคำสั่งเสียงไปยังอุปกรณ์ Google Home เช่น
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google เริ่มเครื่องซักผ้า"
"Ok Google บังคับใช้ในท้องถิ่น"
"Ok Google หยุดเครื่องซักผ้า"
คุณจะสังเกตเห็นว่า Google Assistant ตอบกลับว่า "ขอโทษครับ ดูเหมือนว่าเครื่องซักผ้ามีปัญหาไม่พร้อมใช้งานตอนนี้" เมื่อพยายามควบคุมเครื่องซักผ้าหลังจาก "บังคับเปิดเครื่อง"
ซึ่งหมายความว่าจะเข้าถึงอุปกรณ์ผ่านเส้นทางภายในไม่ได้ เครื่องมือนี้ทำงานได้ก่อนที่จะออก "Ok Google บังคับใช้ในท้องถิ่น" เพราะเราจะกลับไปใช้เส้นทางระบบคลาวด์เมื่ออุปกรณ์เข้าถึงผ่านเส้นทางในเครื่องไม่ได้ อย่างไรก็ตาม หลังจาก "บังคับใช้ในเครื่อง" แล้ว ระบบจะปิดใช้ตัวเลือกในการกลับไปใช้เส้นทางระบบคลาวด์
เรามาลองใช้เครื่องมือที่เรามี ได้แก่ เมตริกของ Google Cloud Platform (GCP) และการบันทึก และเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome เพื่อหาสาเหตุของปัญหา
5. แก้ไขข้อบกพร่องแอป Home ในพื้นที่
ในส่วนต่อไปนี้ คุณจะได้ใช้เครื่องมือที่ Google มีให้เพื่อค้นหาสาเหตุที่อุปกรณ์เข้าถึงผ่านเส้นทางภายในไม่ได้ คุณสามารถใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Google Chrome เพื่อเชื่อมต่อกับอุปกรณ์ Google Home ดูบันทึกของคอนโซล และแก้ไขข้อบกพร่องของแอป Local Home นอกจากนี้ คุณยังส่งบันทึกที่กำหนดเองไปยัง Cloud Logging เพื่อให้ทราบข้อผิดพลาดที่สำคัญซึ่งผู้ใช้พบในแอป Home Home ในพื้นที่ได้อีกด้วย
เชื่อมต่อเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome
หากต้องการเชื่อมต่อโปรแกรมแก้ไขข้อบกพร่องกับแอปการดำเนินการตามคำสั่งซื้อในพื้นที่ ให้ทำตามขั้นตอนต่อไปนี้
- ตรวจสอบว่าคุณได้ลิงก์อุปกรณ์ Google Home กับผู้ใช้ที่มีสิทธิ์เข้าถึงโปรเจ็กต์คอนโซล Actions
- รีบูตอุปกรณ์ Google Home ซึ่งจะช่วยให้อุปกรณ์รับ URL ของ HTML รวมถึงการกำหนดค่าการสแกนที่คุณใส่ไว้ในคอนโซล Actions
- เปิด Chrome บนเครื่องที่กำลังพัฒนา
- เปิดแท็บ Chrome ใหม่และป้อน
chrome://inspect
ในช่องที่อยู่เพื่อเปิดตัวเครื่องมือตรวจสอบ
คุณจะเห็นรายการอุปกรณ์ในหน้าและ URL ของแอปควรปรากฏใต้ชื่ออุปกรณ์ Google Home ของคุณ
เปิดเครื่องมือตรวจสอบ
คลิกตรวจสอบใต้ URL ของแอปเพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome เลือกแท็บคอนโซลและตรวจสอบว่าคุณเห็นเนื้อหาของ Intent IDENTIFY
ที่แอป TypeScript พิมพ์
เอาต์พุตนี้หมายความว่าตัวแฮนเดิล IDENTIFY ทริกเกอร์สำเร็จแล้ว แต่ verificationId
ที่แสดงผลใน IdentifyResponse
ไม่ตรงกับอุปกรณ์ใดๆ ใน HomeGraph มาเพิ่มบันทึกที่กำหนดเองเพื่อหาสาเหตุกัน
เพิ่มบันทึกที่กำหนดเอง
แม้ว่าจะมีข้อผิดพลาด DEVICE_VERIFICATION_FAILED
ที่พิมพ์โดย Local Home SDK แต่ก็ไม่ได้ช่วยหาสาเหตุของปัญหามากนัก ลองเพิ่มบันทึกที่กำหนดเองเพื่อตรวจสอบว่าเรากำลังอ่านและประมวลผลข้อมูลการสแกนอย่างถูกต้อง และโปรดทราบว่าหากเราปฏิเสธสัญญาเนื่องจากมีข้อผิดพลาด ระบบจะส่งข้อความแสดงข้อผิดพลาดไปยัง 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 ให้ไปที่หน้าโปรเจ็กต์
- เลือกโปรเจ็กต์สมาร์ทโฮม
- ในส่วนการดำเนินการ ให้เลือกการบันทึก > Logs Explorer
ผู้ใช้ของโปรเจ็กต์ Actions จะจัดการการเข้าถึงข้อมูลการบันทึกได้ผ่าน Identity and Access Management (IAM) ดูรายละเอียดเพิ่มเติมเกี่ยวกับบทบาทและสิทธิ์สำหรับการบันทึกข้อมูลได้ที่การควบคุมการเข้าถึงของ Cloud Logging
ใช้ตัวกรองขั้นสูง
เราทราบว่าข้อผิดพลาดเกิดขึ้นใน Intent IDENTIFY
เนื่องจากเส้นทางในเครื่องไม่ทำงานเนื่องจากระบุอุปกรณ์ในเครื่องไม่สำเร็จ อย่างไรก็ตาม เราต้องการทราบอย่างชัดเจนว่าปัญหาคืออะไร ดังนั้นให้กรองข้อผิดพลาดที่เกิดขึ้นในเครื่องจัดการ IDENTIFY
ออกก่อน
คลิกปุ่มสลับแสดงคำค้นหา ซึ่งควรเปลี่ยนเป็นช่องเครื่องมือสร้างคำค้นหา ป้อน jsonPayload.intent="IDENTIFY"
ในช่องเครื่องมือสร้างคำค้นหา แล้วคลิกปุ่มเรียกใช้คำค้นหา
ด้วยเหตุนี้ คุณจึงจะได้รับบันทึกข้อผิดพลาดทั้งหมดที่มีอยู่ในเครื่องจัดการ IDENTIFY
ต่อไป ให้ขยายข้อผิดพลาดล่าสุด คุณจะเห็น errorCode
และ debugString
ที่เพิ่งตั้งค่าเมื่อปฏิเสธสัญญาในเครื่องจัดการ IDENTIFY
จาก debugString
เราสามารถบอกได้ว่ารหัสอุปกรณ์ภายในไม่ได้อยู่ในรูปแบบที่คาดไว้ แอป Home Home คาดว่าจะได้รับรหัสอุปกรณ์ในเครื่องเป็นสตริงที่ขึ้นต้นด้วย deviceid
ตามด้วยตัวเลข 3 หลัก แต่รหัสอุปกรณ์ในเครื่องจะเป็นสตริงเลขฐาน 16
แก้ไขข้อผิดพลาด
ย้อนกลับไปที่ซอร์สโค้ดที่เราแยกวิเคราะห์รหัสอุปกรณ์ในตัวเครื่องจากข้อมูลการสแกน เราสังเกตเห็นว่าเราไม่ได้ให้การเข้ารหัสเมื่อแปลงสตริงเป็นไบต์ ระบบรับข้อมูลสแกนเป็นสตริงเลขฐาน 16 ดังนั้นให้ส่ง 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 เพื่อให้โหลดแอปบ้านในเครื่องที่อัปเดตแล้วได้ ตรวจสอบว่าแอป Home ในเครื่องเป็นเวอร์ชัน 1.0.2 และครั้งนี้คุณไม่ควรพบข้อผิดพลาดใน Chrome Developers Console
ตอนนี้คุณจะลองส่งคำสั่งไปยังอุปกรณ์อีกครั้งได้
"Ok Google บังคับใช้ในท้องถิ่น"
"Ok Google หยุดเครื่องซักผ้า"
"Ok Google เปิดเครื่องซักผ้า"
...
"Ok Google บังคับใช้ค่าเริ่มต้น"
6. เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม
หลังจากยืนยันอุปกรณ์โดยใช้การควบคุมด้วยการสัมผัสในแอป Google Home หรือผ่านคำสั่งเสียงแล้ว คุณสามารถใช้ชุดทดสอบอัตโนมัติสำหรับสมาร์ทโฮมเพื่อตรวจสอบกรณีการใช้งานโดยอิงตามประเภทอุปกรณ์และลักษณะที่เชื่อมโยงกับการดำเนินการของคุณ Test Suite จะเรียกใช้ชุดการทดสอบเพื่อตรวจหาปัญหาในการดำเนินการของคุณ และแสดงข้อความแจ้งข้อมูลสำหรับกรณีการทดสอบที่ล้มเหลวเพื่อให้การแก้ไขข้อบกพร่องรวดเร็วขึ้นก่อนเข้าสู่บันทึกเหตุการณ์
เรียกใช้ Test Suite สำหรับสมาร์ทโฮม
ทำตามวิธีการต่อไปนี้เพื่อทดสอบการดำเนินการสำหรับสมาร์ทโฮม Action by Test Suite
- เปิด Test Suite สำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
- ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน วิธีนี้ช่วยให้ Test Suite ส่งคำสั่งไปยัง Google Assistant ได้โดยตรง
- ในช่องรหัสโปรเจ็กต์ ให้ป้อนรหัสโปรเจ็กต์ของการดำเนินการสำหรับสมาร์ทโฮม แล้วคลิกถัดไปเพื่อดำเนินการต่อ
- ในขั้นตอนการตั้งค่าการทดสอบ คุณควรเห็นเครื่องซักผ้าที่มีข้อบกพร่องในส่วนอุปกรณ์และรถไฟ
- ปิดใช้ตัวเลือก Test Request Sync เนื่องจากแอปเครื่องซักผ้าตัวอย่างไม่มี 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 {};
}
}
เปลี่ยนเวอร์ชันแอป Home ในเครื่องเพื่อให้เราระบุได้ว่าใช้เวอร์ชันที่ถูกต้องหรือไม่
local/index.ts
const localHomeSdk = new App('1.0.3');
อย่าลืมคอมไพล์แอปอีกครั้งและทำให้ใช้งานได้กับ Firebase อีกครั้ง ใน app-faulty/local
ให้เรียกใช้
$ npm run build $ firebase deploy --only hosting
ตอนนี้ ให้รีบูตอุปกรณ์ Google Home เพื่อให้โหลดแอปบ้านในเครื่องที่อัปเดตแล้วได้ ตรวจสอบว่าแอป Home ในเครือข่ายเดียวกันเป็นเวอร์ชัน 1.0.3
ทดสอบการแก้ไข
ตอนนี้ให้เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮมอีกครั้งโดยใช้การกำหนดค่าเดียวกัน แล้วจะพบว่ากรอบการทดสอบทั้งหมดได้ผ่านแล้ว
7. ขอแสดงความยินดี
ยินดีด้วย คุณได้เรียนรู้วิธีแก้ปัญหาแอป Local Home ผ่าน Test Suite สำหรับสมาร์ทโฮมและ Cloud Logging
ดูข้อมูลเพิ่มเติม
คุณสามารถลองดำเนินการเพิ่มเติมต่อไปนี้
- เพิ่มลักษณะที่รองรับเพิ่มเติมลงในอุปกรณ์และทดสอบด้วย Test Suite
- เพิ่มบันทึกที่กำหนดเองเพิ่มเติมในเครื่องจัดการ Intent แต่ละตัวและดูใน Cloud Logging
- สร้างหน้าแดชบอร์ด ตั้งค่าการแจ้งเตือน และเข้าถึงข้อมูลเมตริกแบบเป็นโปรแกรมเพื่อดูเมตริกการใช้งานที่เป็นประโยชน์เกี่ยวกับการดำเนินการของคุณ
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและการส่งการดำเนินการเพื่อรับการตรวจสอบ รวมถึงขั้นตอนการรับรองเพื่อเผยแพร่การดำเนินการให้ผู้ใช้ทราบได้ด้วย