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

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

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

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

72ffb320986092c.png

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

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

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

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

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

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

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

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

fa3c47f293cfe0b7.png

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

2a082ee11d47ad1a.png

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

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

  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 เลือกแท็บ Console และตรวจสอบว่าคุณเห็นเนื้อหาของ IDENTIFY Intent ที่แอป TypeScript พิมพ์

774c460c59f9f84a.png

เอาต์พุตนี้หมายความว่าทริกเกอร์แฮนเดิลเลอร์ 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

ecc56508ebcf9ab.png

เข้าถึง Cloud Logging

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

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

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

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

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

นอกจากนี้ ให้เปลี่ยนเวอร์ชันแอป 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

c8456f7b5f77f894.png

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

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

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

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

...

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

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

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

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

ทำตามวิธีการต่อไปนี้เพื่อทดสอบการผสานรวมแบบคลาวด์ต่อคลาวด์ด้วยชุดทดสอบ

  1. เปิด Test Suite สำหรับสมาร์ทโฮมในเว็บเบราว์เซอร์
  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 ในทางกลับกัน

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

มาดูซอร์สโค้ดที่แอป 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

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

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

b7fc8c5d3c727d8d.png

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

764dbc83b95782a.png

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

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

คุณลองทำสิ่งต่อไปนี้เพิ่มเติมได้

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