การแก้ปัญหา

แอปตัวอย่าง

หากพบปัญหาขณะใช้ Home API คุณสามารถรวบรวมบันทึก เพื่อแก้ไขข้อบกพร่องเพิ่มเติมได้ การรวบรวมบันทึกจากอุปกรณ์เคลื่อนที่ต้องใช้ Android Debug Bridge (adb) หากต้องการความช่วยเหลือจาก Google ให้รวบรวมบันทึกจาก ทั้งอุปกรณ์ Android และฮับ แล้วเปิดตั๋วในเครื่องมือติดตามปัญหาพร้อม ข้อมูลที่เกี่ยวข้องและบันทึกที่เชื่อมโยงกับปัญหา

รวบรวมบันทึกของ Android

อุปกรณ์เคลื่อนที่ต้องเชื่อมต่อกับเครื่องในพื้นที่สำหรับทุกขั้นตอนที่เกี่ยวข้องกับ adb

ติดตั้ง adb

หากยังไม่ได้ดำเนินการ ให้ตั้งค่า Android Debug Bridge ในเครื่องของคุณโดยทำดังนี้

  1. ติดตั้ง "adb" ใน คอมพิวเตอร์
  2. เปิดตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์และการแก้ไขข้อบกพร่อง USB ในโทรศัพท์ Android

ปลั๊กอิน Google Home สำหรับ Android Studio

Google Home Plugin for Android Studio เป็นเครื่องมือที่มีประโยชน์สำหรับการรวบรวมและวิเคราะห์ บันทึก และสร้างขึ้นสำหรับนักพัฒนาซอฟต์แวร์ Google Home platform โดยเฉพาะ ปลั๊กอินนี้ช่วยให้คุณเข้าถึง Google Assistant Simulator, Cloud Logging และเครื่องมืออื่นๆ เพื่อลดความซับซ้อนของกระบวนการพัฒนา smart home

ใช้เครื่องมือนี้ร่วมกับ adb เพื่อวิเคราะห์เพิ่มเติม Matter บันทึกของอุปกรณ์

ดูข้อมูลเพิ่มเติมและรับเครื่องมือได้ที่ Google Home Plugin for Android Studio

ข้อมูลเวอร์ชัน

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

  1. วิธีดูรหัสของอุปกรณ์เคลื่อนที่
    adb devices
    List of devices attached
    device-id    device
  2. จัดเก็บค่านี้ในตัวแปรที่ชื่อ phoneid
    phoneid=device-id
  3. บันทึกข้อมูลอุปกรณ์ต่างๆ ลงในตัวแปร
    containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep "versionName" || true);
    homemoduleinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.home " || true);
    optionalhomemoduleinfo=$(adb -s $phoneid  shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.optional_home " || true);
    policyhomemoduleinfo=$(adb -s $phoneid  shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.policy_home" || true);
    threadinfo=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "com.google.android.gms.threadnetwork" || true);
    ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep versionName || true);
    enabledfeatures=$((adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider | grep "Enabled features" | grep -i "home") || true);
    androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true);
    androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true)
  4. บันทึกตัวแปรทั้งหมดลงในไฟล์ชื่อ _versions.txt

    ขยายเพื่อแสดงคำสั่งในการบันทึกตัวแปรลงในไฟล์

    คุณสามารถคัดลอกและวางทั้งบล็อกลงในเทอร์มินัลได้ในครั้งเดียว

    versionfile=$logtimestamp"_versions.txt"
    echo "Saving version info to $versionfile"
    
    echo "Container version:" >> $versionfile
    echo $containerinfo >> $versionfile
    echo "" >> $versionfile
    
    echo "Home Module version:" >> $versionfile
    echo $homemoduleinfo >> $versionfile
    echo "" >> $versionfile
    
    echo "Optional Home Module version:" >> $versionfile
    echo $optionalhomemoduleinfo >> $versionfile
    echo "" >> $versionfile
    
    echo "Policy Home Module version:" >> $versionfile
    echo $policyhomemoduleinfo >> $versionfile
    echo "" >> $versionfile
    
    echo "Thread Module version:" >> $versionfile
    echo $threadinfo >> $versionfile
    echo "" >> $versionfile
    
    echo "GHA version:" >> $versionfile
    echo $ghainfo >> $versionfile
    echo "" >> $versionfile
    
    echo "Android version: " >> $versionfile
    echo $androidversion >> $versionfile
    echo "" >> $versionfile
    
    echo "Android API version: " >> $versionfile
    echo $androidapiversion >> $versionfile
    echo "" >> $versionfile
    
    echo "Found enabled features (blank if missing):" >> $versionfile
    echo $enabledfeatures >> $versionfile
    echo "" >> $versionfile
  5. ตรวจสอบเนื้อหาของ _versions.txt ดังนี้
    cat _versions.txt

    ขยายเพื่อแสดงเอาต์พุตไฟล์ตัวอย่าง

    Container version:
    versionName=23.19.12 (190400-530524295) versionName=22.46.17 (190408-491726958)
    
    Home Module version:
    com.google.android.gms.home [v230508900]
    
    Optional Home Module version:
    
    
    Policy Home Module version:
    com.google.android.gms.policy_home [230508900] [230508900065.505615668.505615668] [Download:000003be/dl-Home.integ_230508900100400.apk] [download:/Home.integ/230508900100400:Home.integ:230508900100400]
    
    Thread Module version:
    com.google.android.gms.threadnetwork [v231912000]
    
    GHA version:
    versionName=3.2.32.1
    
    Android version:
    13
    
    Android API version:
    33
    
    Found enabled features (blank if missing):
    ตอนนี้คุณสามารถส่งไฟล์นี้ให้ Google ได้ตามต้องการเพื่อแก้ปัญหา

รวบรวมบันทึก

หากต้องการรวบรวมบันทึก ให้ปิดแอปทั้งหมดที่ทำงานบนอุปกรณ์เคลื่อนที่ จากนั้นให้ทำดังนี้

  1. เปิดหน้าต่างเทอร์มินัลและล้างบันทึกของอุปกรณ์ที่มีอยู่โดยทำดังนี้
    adb logcat -b all -c
  2. เริ่มกระบวนการรวบรวมบันทึกโดยทำดังนี้
    adb logcat >> _logs.txt
    เปิดเทอร์มินัลนี้ไว้ การดำเนินการนี้จะรวบรวมบันทึกจากอุปกรณ์ของคุณตราบใดที่ กระบวนการทำงานอยู่
  3. เรียกใช้แอปตัวอย่างและบันทึกการดำเนินการทั้งหมดในอินเทอร์เฟซผู้ใช้ เมื่อเสร็จแล้ว ให้หยุดlogcatกระบวนการที่ทำงานในเทอร์มินัลโดยกด Ctrl+C (หรือ Cmd+C ใน Mac)
  4. ระบบจะบันทึกข้อมูลจากเซสชันนี้ไว้ในไฟล์ชื่อ _logs.txt

คุณวิเคราะห์ข้อมูลในไฟล์นี้ได้หลายวิธี รวมถึงการค้นหาคีย์เวิร์ด เช่น error, exception หรือ crash

สคริปต์บันทึก

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

โดยบันทึกเหล่านี้จะอยู่ในไดเรกทอรี scripts ในโครงสร้างแหล่งที่มาของแอปตัวอย่าง ทำตามขั้นตอนต่อไปนี้จากไดเรกทอรีรากของโปรเจ็กต์

  1. วิธีดูรหัสของอุปกรณ์เคลื่อนที่
    adb devices -l
    List of devices attached
    device-id device
  2. เรียกใช้สคริปต์ get_logs.sh
     ./scripts/get_logs.sh device-id
    Cleared previous logs from device.
    Saving version information to home_api_sample_logs_20240605233243.txt...
    Saving logs to home_api_sample_logs_20240605233243.txt...
    (Press CTRL+C to stop the script)
  3. จำลองการเกิดปัญหา
  4. กด CTRL+C เพื่อหยุดสคริปต์

สคริปต์จะสร้างไฟล์บันทึกที่มีการประทับเวลาซึ่งมีข้อมูลที่เกี่ยวข้องทั้งหมด แนบไฟล์เหล่านี้ไปกับรายงานข้อบกพร่องที่คุณพบ

บันทึกของอุปกรณ์ฮับที่ใช้ Cast

คุณดูบันทึกของอุปกรณ์สำหรับ Google Nest Hub ได้โดยใช้วิธีนี้ ซึ่งใช้ได้กับรุ่นต่อไปนี้

  • Google Home
  • Google Nest Audio
  • Google Nest Hub
  • Google Nest Mini

วิธีเปิดใช้ฮับ Cast เพื่อดึงข้อมูลบันทึกในเครื่อง

  1. ตั้งค่า Android Debug Bridge
  2. รับที่อยู่ IP ของฮับ

    • จากฮับ หากมีหน้าจอ ให้ทำดังนี้
      1. เลื่อนนิ้วลงจากด้านบนของหน้าจอ
      2. แตะไอคอนการตั้งค่า
      3. ค้นหาที่อยู่ IP ของอุปกรณ์: ใน Nest Hub (2nd gen) ให้ไปที่ ข้อมูลอุปกรณ์ > ข้อมูลทางเทคนิค > ที่อยู่ IP
    • จาก GHA ในโทรศัพท์ ให้ทำดังนี้
      1. แตะอุปกรณ์เพื่อเปิดหน้ารายละเอียดอุปกรณ์
      2. แตะไอคอนการตั้งค่า เพื่อเปิดหน้าการตั้งค่า
      3. ค้นหาที่อยู่ IP ของอุปกรณ์โดยไปที่ข้อมูล อุปกรณ์ > ข้อมูลทางเทคนิค > ที่อยู่ IP
  3. ในคอมพิวเตอร์ที่อยู่ในเครือข่าย Wi-Fi เดียวกันกับอุปกรณ์ ให้ทำดังนี้

      adb connect ip-address
      adb logcat
    

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

      adb logcat -d > platform-logs.txt
    

ระบบอัตโนมัติ

การตรวจจับขอบ

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

เช่น หากการเปิดไฟเป็นตัวเริ่มต้น การตรวจหาขอบจะยืนยันว่าตัวเริ่มต้นจะเปิดใช้งานก็ต่อเมื่ออุปกรณ์ไฟเปลี่ยนจากปิดเป็นเปิดเท่านั้น ไม่ใช่จากเปิดเป็นเปิด (ไม่มีการเปลี่ยนแปลง)

การทำงานอัตโนมัติไม่ทำงานตามที่คาดไว้

หลังจากพิจารณาการตรวจหาขอบแล้ว หากการทำงานอัตโนมัติไม่เป็นไป ตามที่คาดไว้ ให้ทำดังนี้

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

  2. ดูที่กราฟการทำงานอัตโนมัติสำหรับการทำงานอัตโนมัติของคุณ โดยเปรียบเทียบกับ DSL การทำงานอัตโนมัติ เพื่อดูสมมติฐานที่อาจไม่ถูกต้องในส่วนของคุณ

  3. สังเกตสถานะอุปกรณ์ในแอป Google Home ระหว่างการดำเนินการ การทำงานอัตโนมัติ

  4. ตรวจสอบว่าอุปกรณ์ทั้งหมดที่การทำงานอัตโนมัติอ้างอิงถึงอยู่ในโครงสร้างที่คุณคาดหวัง การลบอุปกรณ์ที่การทำงานอัตโนมัติใช้จะอาจส่งผลที่ไม่คาดคิด ดูผลกระทบของการลบอุปกรณ์ต่อระบบอัตโนมัติ

การทำงานอัตโนมัติทำงานในเวลาที่ไม่ควร

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

การทำงานอัตโนมัติไม่คอมไพล์

ตรวจสอบว่าแอปมีการนำเข้าที่จำเป็นทั้งหมด รวมถึงแต่ละคลาส ที่สอดคล้องกับประเภทโหนดต่างๆ ตลอดจนลักษณะที่คุณ อ้างอิง

การสร้างการทำงานอัตโนมัติไม่ผ่านการตรวจสอบ

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

ฟังก์ชัน List จะส่งข้อยกเว้น

เมื่อเรียกใช้ฟังก์ชัน List ของ Automation API ตัวแฮนเดิลการอ่านอาจส่งข้อยกเว้นเนื่องจากไม่มีฟีเจอร์ API หากต้องการลดปัญหานี้ ให้ลบการทำงานอัตโนมัติที่ได้รับผลกระทบ

หากต้องการทำสิ่งต่อไปนี้

  1. ตรวจสอบว่าได้ติดตั้ง adb แล้ว ดูติดตั้ง adb
  2. ดึงข้อมูลรหัสของการทำงานอัตโนมัติจากบันทึกของ Android โดยเรียกใช้คำสั่งต่อไปนี้

    adb logcat -s GhpNative

    ตัวอย่างบันทึก

    adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse
    
    INTERACTION RESPONSE -> SendCommandsResponse:
    1 {
    1: "automation@global"
    3 {
      1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse"
      2:
      5 {
        1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse"
        1 {
            1: "1111-2222-3333-44444-55555" // Automation ID to delete
            2: "structure@2222-3333-4444-5555-6666"
    ...

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

    adb logcat -s GhpNative level:debug | less
  3. ลบการทำงานอัตโนมัติโดยใช้รหัสของการทำงานอัตโนมัติ

    structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
    

Discovery API จะบันทึกคำเตือนเมื่อไม่ได้ลงทะเบียนลักษณะ

หาก Discovery API บันทึกคำเตือนสำหรับ Trait not found แสดงว่า API พยายามใช้ลักษณะสำหรับผู้สมัครรับการค้นพบ แต่จะไม่ สำเร็จเนื่องจากไม่ได้ลงทะเบียนลักษณะในระหว่างการเริ่มต้น เช่น

09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582

ตัวระบุลักษณะคือ home.matter.6006.clusters.fc43 ซึ่งสอดคล้องกับ RelativeHumidityControl หากต้องการระบุชื่อลักษณะจากรหัส โปรดดูดัชนีลักษณะ

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

OAuth

หากคุณมีไคลเอ็นต์ OAuth อยู่แล้ว

หากคุณมีไคลเอ็นต์ OAuth ที่ยืนยันแล้วสำหรับแอปที่เผยแพร่ คุณสามารถใช้ไคลเอ็นต์ OAuth ที่มีอยู่เพื่อทดสอบ Home API ได้

ไม่จำเป็นต้องลงทะเบียน Google Home Developer Console เพื่อทดสอบและใช้ Home API อย่างไรก็ตาม คุณยังคงต้องมี Developer Consoleการลงทะเบียนที่ได้รับอนุมัติเพื่อเผยแพร่แอป แม้ว่าคุณจะมี ไคลเอ็นต์ OAuth ที่ยืนยันแล้วจากการผสานรวมอื่นก็ตาม

โปรดพิจารณาสิ่งต่อไปนี้

  • เมื่อใช้ไคลเอ็นต์ OAuth ที่มีอยู่ ระบบจะจำกัดผู้ใช้ไว้ที่ 100 คน ดูข้อมูลเกี่ยวกับการเพิ่มผู้ใช้ทดสอบได้ที่ ตั้งค่าหน้าจอขอความยินยอม OAuth นอกเหนือจากการยืนยัน OAuth แล้ว Home APIs ยังกำหนด ขีดจำกัดผู้ใช้ที่อนุญาตให้สิทธิ์แก่แอปพลิเคชันของคุณไว้ที่ 100 คน การจำกัดนี้จะถูกยกเลิกเมื่อ ลงทะเบียน Developer Console เสร็จสมบูรณ์

  • Developer Console การลงทะเบียน ควร ส่งเพื่อขออนุมัติเมื่อคุณพร้อมที่จะจำกัดการให้สิทธิ์ประเภทอุปกรณ์ ผ่าน OAuth เพื่อเตรียมพร้อมสำหรับการอัปเดตแอปด้วย Home API

สำหรับGoogle Cloudแอปที่ยังรอการยืนยัน OAuth ผู้ใช้จะทำโฟลว์ OAuth ให้เสร็จสมบูรณ์ไม่ได้จนกว่าการยืนยันจะเสร็จสมบูรณ์ การพยายามให้สิทธิ์จะล้มเหลวและแสดงข้อผิดพลาดต่อไปนี้

Access blocked: <Project Name> has not completed the Google verification process.