การแก้ไขข้อบกพร่องของหน้าแรก

1. ก่อนเริ่มต้น

การผสานรวมกับสมาร์ทโฮมช่วยให้ Google Assistant ควบคุมอุปกรณ์ที่เชื่อมต่อในบ้านของผู้ใช้ได้ หากต้องการสร้างการดำเนินการสำหรับสมาร์ทโฮม คุณต้องระบุปลายทางของเว็บฮุคของระบบคลาวด์ที่สามารถจัดการ Intent สมาร์ทโฮมได้ ตัวอย่างเช่น เมื่อผู้ใช้พูดว่า "Ok Google เปิดไฟหน่อย" Assistant จะส่งคำสั่งไปยัง Fulfillment ระบบคลาวด์เพื่ออัปเดตสถานะของอุปกรณ์

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

72ffb320986092c.png

การแก้ไขข้อบกพร่องของการดำเนินการสำหรับสมาร์ทโฮมเป็นขั้นตอนสำคัญในการสร้างการดำเนินการที่มีคุณภาพในเวอร์ชันที่ใช้งานจริง แต่เป็นสิ่งที่ทำได้ยากและใช้เวลานาน โดยไม่มีเครื่องมือแก้ปัญหาและทดสอบปัญหาที่ใช้งานง่ายและให้ข้อมูล เมตริก รวมถึงการบันทึกและชุดทดสอบสำหรับสมาร์ทโฮมของ Google Cloud Platform (GCP) พร้อมช่วยคุณระบุและแก้ไขปัญหาของการดำเนินการของคุณเพื่อช่วยในการแก้ไขข้อบกพร่องของการดำเนินการในบ้านอัจฉริยะ

ข้อกำหนดเบื้องต้น

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะสร้าง Fulfillment ภายในสำหรับการดำเนินการสมาร์ทโฮมและเชื่อมต่อกับ Assistant จากนั้นแก้ไขข้อบกพร่องของแอป Local Home ผ่านชุดทดสอบสำหรับสมาร์ทโฮมและเมตริกและการบันทึกสำหรับสมาร์ทโฮมและ Google Cloud Platform (GCP)

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้เมตริกและการบันทึกของ GCP เพื่อระบุและแก้ไขปัญหาในเวอร์ชันที่ใช้งานจริง
  • วิธีใช้ชุดทดสอบเพื่อระบุปัญหาด้านฟังก์ชันการทำงานและ API
  • วิธีใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ขณะพัฒนาแอป Local Home

สิ่งที่ต้องมี

2. เรียกใช้แอปเครื่องซักผ้า

ดูซอร์สโค้ด

คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่าง Codelab นี้ในเครื่องการพัฒนาของคุณ

...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่งได้

$ git clone https://github.com/google-home/smarthome-debug-local.git

เกี่ยวกับโครงการนี้

แอปเริ่มต้นมีไดเรกทอรีย่อยและฟังก์ชันของระบบคลาวด์ที่คล้ายกับ Codelab เปิดใช้ Fulfillment ภายในสำหรับการดำเนินการสมาร์ทโฮม แต่เรามี app-faulty ที่นี่แทน app-start เราจะเริ่มด้วยแอปหน้าแรกในพื้นที่ซึ่งใช้งานได้ไม่ดีนัก

เชื่อมต่อกับ Firebase

เราจะใช้โปรเจ็กต์เดียวกับที่คุณสร้างไว้ใน Codelab เปิดใช้ Fulfillment ภายในสำหรับการดำเนินการสมาร์ทโฮม แต่เราจะทำให้ไฟล์ที่ดาวน์โหลดใน Codelab นี้ใช้งานได้

ไปที่ไดเรกทอรี app-faulty จากนั้นตั้งค่า Firebase CLI ด้วยโปรเจ็กต์ Actions ที่สร้างไว้ใน Codelab ฉบับเปิดใช้ Fulfillment ภายในสำหรับการดำเนินการสมาร์ทโฮม ดังนี้

$ cd app-faulty
$ firebase use <project-id>

ทำให้ใช้งานได้ใน Firebase

ไปที่โฟลเดอร์ app-faulty/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

ไปที่ไดเรกทอรี app-faulty/local/ แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดคอมไพเลอร์ TypeScript และคอมไพล์แอป

$ cd ../local
$ npm install
$ npm run build

การดำเนินการนี้คอมไพล์แหล่งที่มา index.ts (TypeScript) และวางเนื้อหาต่อไปนี้ลงในไดเรกทอรี app-faulty/public/local-home/

  • bundle.js - เอาต์พุต JavaScript ที่คอมไพล์ซึ่งมีแอปในเครื่องและทรัพยากร Dependency
  • index.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 หลายรายการ

อัปเดต Home Graph

เปิด URL โฮสติ้งในเบราว์เซอร์ (https://<project-id>.web.app) เพื่อดูเว็บแอป ใน UI บนเว็บ ให้คลิกปุ่มรีเฟรช ae8d3b25777a5e30.png เพื่ออัปเดต HomeGraph ผ่านขอซิงค์ด้วยข้อมูลเมตาล่าสุดของอุปกรณ์จากแอปเครื่องซักผ้าที่มีข้อบกพร่อง

fa3c47f293cfe0b7.png

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

2a082ee11d47ad1a.png

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 Home

ส่งคำสั่งไปยังอุปกรณ์ผ่านคำสั่งเสียงไปยังอุปกรณ์ Google Home เช่น

"Ok Google เปิดเครื่องซักผ้า"

"Ok Google เปิดเครื่องซักผ้าให้หน่อย"

"Ok Google บังคับใช้การท้องถิ่น"

"Ok Google ปิดเครื่องซักผ้า"

คุณจะเห็น Google Assistant ตอบกลับว่า "ขอโทษด้วย ดูเหมือนเครื่องซักผ้าที่ทำงานผิดพลาดจะไม่พร้อมใช้งานตอนนี้" เมื่อคุณพยายามควบคุมเครื่องซักผ้าหลังจากที่ "บังคับให้เครื่องซัก"

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

หากต้องการดูว่าปัญหาคืออะไร ลองใช้เครื่องมือที่เรามี ได้แก่ เมตริกและการบันทึกและเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome ของ Google Cloud Platform (GCP)

5. แก้ไขข้อบกพร่องของแอป Local Home

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

เชื่อมต่อเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome

หากต้องการเชื่อมต่อโปรแกรมแก้ไขข้อบกพร่องกับแอป Fulfillment ในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่าคุณได้ลิงก์อุปกรณ์ Google Home กับผู้ใช้ที่มีสิทธิ์เข้าถึงโปรเจ็กต์คอนโซลการดำเนินการแล้ว
  2. รีบูตอุปกรณ์ Google Home ซึ่งทำให้อุปกรณ์รับ URL ของ HTML รวมถึงการกำหนดค่าการสแกนที่คุณใส่ไว้ในคอนโซลการดำเนินการได้
  3. เปิด Chrome ในเครื่องการพัฒนาของคุณ
  4. เปิดแท็บ Chrome ใหม่และป้อน chrome://inspect ในช่องที่อยู่เพื่อเปิดใช้งานเครื่องมือตรวจสอบ

คุณจะเห็นรายการอุปกรณ์ในหน้าดังกล่าวและ URL ของแอปควรปรากฏใต้ชื่ออุปกรณ์ Google Home

567f97789a7d8846.png

เปิดเครื่องมือตรวจสอบ

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

774c460c59f9f84a.png

เอาต์พุตนี้หมายความว่าตัวแฮนเดิล IDENTIFY ได้รับการทริกเกอร์สำเร็จ แต่ verificationId ที่แสดงผลใน IdentifyResponse ไม่ตรงกับอุปกรณ์ใดเลยใน Home Graph เราจะเพิ่มบันทึกที่กำหนดเองเพื่อค้นหาสาเหตุกัน

เพิ่มบันทึกที่กำหนดเอง

แม้ว่าจะมีข้อผิดพลาด 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 เพื่อให้สามารถโหลดแอป Home ในเครื่องที่อัปเดตแล้ว คุณสามารถดูได้ว่าอุปกรณ์ Google Home ใช้เวอร์ชันที่คาดไว้หรือไม่โดยดูที่บันทึกคอนโซลในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome

ecc56508ebcf9ab.png

เข้าถึง Cloud Logging

มาดูวิธีใช้ Cloud Logging เพื่อค้นหาข้อผิดพลาด วิธีเข้าถึง Cloud Logging สำหรับโปรเจ็กต์

  1. ในคอนโซล Cloud Platform ให้ไปที่หน้าโปรเจ็กต์
  2. เลือกโปรเจ็กต์สมาร์ทโฮมของคุณ
  3. ในส่วนการดำเนินการ ให้เลือกการบันทึก > เครื่องมือสำรวจบันทึก

การเข้าถึงข้อมูลการบันทึกจะจัดการผ่าน Identity and Access Management (IAM) สำหรับผู้ใช้ในโปรเจ็กต์ Actions ดูรายละเอียดเพิ่มเติมเกี่ยวกับบทบาทและสิทธิ์ในการบันทึกข้อมูลได้ที่การควบคุมการเข้าถึงของ Cloud Logging

ใช้ตัวกรองขั้นสูง

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

ขยายช่องตัวอย่างคำค้นหา ซึ่งควรเปลี่ยนเป็นช่องเครื่องมือสร้างคำค้นหา ป้อน jsonPayload.intent="IDENTIFY" ในช่องเครื่องมือสร้างคำค้นหา แล้วคลิกปุ่มเรียกใช้คำค้นหา

4c0b9d2828ee2447.png

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

71f2f156c6887496.png

จาก 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 เพื่อให้สามารถโหลดแอปหน้าแรกในเครื่องที่อัปเดตได้ ตรวจสอบว่าแอป Home ในเครื่องเป็นเวอร์ชัน 1.0.2 และในครั้งนี้ คุณไม่ควรเห็นข้อผิดพลาดใน Chrome Developers Console

c8456f7b5f77f894.png

ตอนนี้คุณสามารถลองส่งคำสั่งไปยังอุปกรณ์อีกครั้งได้

"Ok Google บังคับใช้การท้องถิ่น"

"Ok Google ปิดเครื่องซักผ้า"

"Ok Google เปิดเครื่องซักผ้า"

...

"Ok Google บังคับใช้ค่าเริ่มต้น"

6. เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม

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

เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮม

ทำตามวิธีการต่อไปนี้เพื่อทดสอบการดำเนินการในสมาร์ทโฮมโดย Test Suite

  1. เปิดชุดทดสอบสำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
  2. ลงชื่อเข้าใช้ Google โดยใช้ปุ่มที่มุมขวาบน ซึ่งจะช่วยให้ชุดทดสอบส่งคำสั่งไปยัง Google Assistant ได้โดยตรง
  3. ในช่องรหัสโปรเจ็กต์ ให้ป้อนรหัสโปรเจ็กต์ของการดำเนินการสมาร์ทโฮม จากนั้นคลิกถัดไปเพื่อดําเนินการต่อ
  4. ในขั้นตอนการตั้งค่าการทดสอบ คุณควรจะเห็นเครื่องซักผ้าที่มีข้อบกพร่องในส่วนอุปกรณ์และถาด
  5. ปิดใช้ตัวเลือกซิงค์คำขอทดสอบเนื่องจากแอปเครื่องซักผ้าตัวอย่างไม่มี UI สำหรับเพิ่ม / นำออก / เปลี่ยนชื่อเครื่องซักผ้า ในระบบที่ใช้งานจริง คุณต้องทริกเกอร์คำขอซิงค์ทุกครั้งที่ผู้ใช้เพิ่ม / นำออก / เปลี่ยนชื่ออุปกรณ์
  6. เปิดใช้ตัวเลือก Local Home SDK ไว้เนื่องจากเราจะทดสอบทั้งเส้นทางในเครื่องและระบบคลาวด์
  7. คลิกถัดไปเพื่อเริ่มทำการทดสอบ

67433d9190fa770e.png

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

d1ebd5cfae2a2a47.png

วิเคราะห์ข้อความแสดงข้อผิดพลาด

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

6bfd3acef9c16b84.png

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

ระบุและแก้ไขข้อผิดพลาด

ลองดูซอร์สโค้ดที่แอป Home 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 ในเครื่องที่อัปเดตแล้วได้ โดยตรวจสอบว่าแอป Home ในเครื่องเป็นเวอร์ชัน 1.0.3

ทดสอบการแก้ไข

จากนั้นให้เรียกใช้ชุดทดสอบสำหรับสมาร์ทโฮมอีกครั้งโดยใช้การกำหนดค่าเดียวกัน แล้วคุณจะเห็นว่ากรอบการทดสอบทั้งหมดผ่านแล้ว

b7fc8c5d3c727d8d.png

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

764dbc83b95782a.png

ยินดีด้วย คุณได้เรียนรู้วิธีแก้ปัญหาแอป Local Home ผ่านชุดทดสอบสำหรับสมาร์ทโฮมและ Cloud Logging เรียบร้อยแล้ว

ดูข้อมูลเพิ่มเติม

คุณสามารถลองทำสิ่งต่อไปนี้

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