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

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

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

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

72ffb320986092c.png

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

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

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

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

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

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

สิ่งที่คุณต้องมี

  • Google Chrome เวอร์ชันล่าสุด
  • อุปกรณ์ iOS หรือ Android ที่มีแอป Google Home
  • ลำโพงอัจฉริยะ Google Home หรือจอแสดงผลอัจฉริยะ Google Nest
  • Node.js เวอร์ชัน 24 ขึ้นไป
  • บัญชี Google
  • บัญชีสำหรับการเรียกเก็บเงินของ Google Cloud

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

รับซอร์สโค้ด

คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่างสำหรับ Codelab นี้ในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์

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

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

เกี่ยวกับโปรเจ็กต์

แอปเริ่มต้นมีไดเรกทอรีย่อยและ Cloud Functions ที่คล้ายกับ Codelab เรื่องการเปิดใช้การตอบสนองในเครื่องสำหรับการผสานรวมแบบ Cloud-to-cloud แต่เราจะใช้ app-faulty แทน app-start โดยจะเริ่มต้นด้วยแอป Local Home ที่ทำงานได้แต่ไม่ดีนัก

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

เราจะใช้โปรเจ็กต์เดียวกันกับที่คุณสร้างไว้ใน Codelab เรื่องการเปิดใช้การตอบสนองในเครื่องสำหรับการผสานรวมแบบ Cloud-to-cloud แต่จะติดตั้งใช้งานไฟล์ที่ดาวน์โหลดใน Codelab นี้

ไปที่ไดเรกทอรี app-faulty จากนั้นตั้งค่า Firebase CLI ด้วยโปรเจ็กต์การผสานรวมที่สร้างไว้ใน Codelab เรื่องการเปิดใช้การตอบสนองในเครื่องสำหรับการผสานรวมแบบ Cloud-to-cloud

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

ติดตั้งใช้งานใน Firebase

ไปที่โฟลเดอร์ app-faulty/functions แล้วติดตั้งการอ้างอิงที่จำเป็นทั้งหมดโดยใช้ npm

$ cd functions
$ npm install

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

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 ของเว็บ ให้คลิกปุ่มรีเฟรชae8d3b25777a5e30.png เพื่ออัปเดต HomeGraph ด้วยข้อมูลเมตาของอุปกรณ์ล่าสุดจากแอปเครื่องซักผ้าที่มีข้อบกพร่องโดยใช้ Request Sync

fa3c47f293cfe0b7.png

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

2a082ee11d47ad1a.png

3. เริ่มเครื่องซักผ้าอัจฉริยะ

หากคุณได้เรียกใช้ Codelab เรื่องการเปิดใช้การตอบสนองในเครื่องสำหรับการผสานรวมแบบ Cloud-to-cloud คุณควรได้เริ่มเครื่องซักผ้าอัจฉริยะเสมือนแล้ว หากเครื่องหยุดทำงาน อย่าลืมรีสตาร์ทอุปกรณ์เสมือนจริง

เปิดเครื่อง

ไปที่ไดเรกทอรี 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 ตอบกลับด้วยข้อความ "ขออภัย ดูเหมือนว่า Faulty Washer จะไม่พร้อมใช้งานในตอนนี้" เมื่อคุณพยายามควบคุมเครื่องซักผ้าหลังจากใช้คำสั่ง "บังคับใช้ในเครื่อง"

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

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

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

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

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

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

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

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

567f97789a7d8846.png

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

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

774c460c59f9f84a.png

เอาต์พุตนี้หมายความว่าตัวแฮนเดิล IDENTIFY ได้รับการทริกเกอร์เรียบร้อยแล้ว แต่ verificationId ที่แสดงผลใน IdentifyResponse ไม่ตรงกับอุปกรณ์ใดๆ ใน HomeGraph มาเพิ่มบันทึกที่กำหนดเองเพื่อดูสาเหตุของปัญหากัน

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

แม้ว่า Local Home SDK จะพิมพ์ข้อผิดพลาด DEVICE_VERIFICATION_FAILED ออกมา แต่ก็ไม่ได้ช่วยในการค้นหาสาเหตุหลักมากนัก มาเพิ่มบันทึกที่กำหนดเองเพื่อให้แน่ใจว่าเราอ่านและประมวลผลข้อมูลการสแกนอย่างถูกต้อง และโปรดทราบว่าหากเราปฏิเสธ Promise ด้วยข้อผิดพลาด ระบบจะส่งข้อความแสดงข้อผิดพลาดไปยัง 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);
}

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

ecc56508ebcf9ab.png

เข้าถึง Cloud Logging

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

  1. ในคอนโซล Cloud Platform ให้ไปที่หน้าโปรเจ็กต์
  2. เลือกโปรเจ็กต์สมาร์ทโฮม
  3. ในส่วนการดำเนินการ ให้เลือกLogging > Logs Explorer

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

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

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

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

4c0b9d2828ee2447.png

ผลลัพธ์ที่ได้คือบันทึกข้อผิดพลาดทั้งหมดที่เกิดขึ้นในตัวแฮนเดิล IDENTIFY จากนั้นขยายข้อผิดพลาดล่าสุด คุณจะเห็น errorCode และ debugString ที่คุณเพิ่งตั้งค่าเมื่อปฏิเสธ Promise ในตัวแฮนเดิล 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);
}

นอกจากนี้ ให้เปลี่ยนเวอร์ชันของแอป Local Home เพื่อให้เราทราบว่าเราใช้เวอร์ชันที่ถูกต้องหรือไม่

local/index.ts

const localHomeSdk = new App('1.0.2');

หลังจากแก้ไขข้อผิดพลาดแล้ว ให้คอมไพล์แอปและติดตั้งใช้งานใน Firebase อีกครั้ง ใน app-faulty/local ให้เรียกใช้คำสั่งต่อไปนี้

$ npm run build
$ firebase deploy --only hosting

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

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

c8456f7b5f77f894.png

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

"Ok Google บังคับใช้ในเครื่อง"

"Ok Google หยุดเครื่องซักผ้า"

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

...

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

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

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

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

ทำตามวิธีการต่อไปนี้เพื่อทดสอบการผสานรวมแบบ Cloud-to-cloud โดยใช้ชุดทดสอบ

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

67433d9190fa770e.png

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

d1ebd5cfae2a2a47.png

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

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

6bfd3acef9c16b84.png

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

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

มาค้นหาซอร์สโค้ดที่แอป 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 Home เพื่อให้เราทราบว่าเราใช้เวอร์ชันที่ถูกต้องหรือไม่

local/index.ts

const localHomeSdk = new App('1.0.3');

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

$ npm run build
$ firebase deploy --only hosting

ตอนนี้ให้รีบูตอุปกรณ์ Google Home เพื่อให้อุปกรณ์โหลดแอป Local Home ที่อัปเดตแล้ว ตรวจสอบว่าแอป Local Home เป็นเวอร์ชัน 1.0.3

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

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

b7fc8c5d3c727d8d.png

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

764dbc83b95782a.png

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

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

สิ่งอื่นๆ ที่คุณลองทำได้มีดังนี้

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