การแก้ปัญหา

แอปตัวอย่าง

หากพบปัญหาเมื่อใช้ 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 เพื่อหยุดสคริปต์

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

บันทึกของอุปกรณ์ฮับแคสต์

คุณดูบันทึกของอุปกรณ์สำหรับ Google Hub ได้โดยทำดังนี้

  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 reference

ฟังก์ชันรายการแสดงข้อยกเว้น

เมื่อเรียกใช้ฟังก์ชัน Automation API List แฮนเดิลการอ่านอาจแสดงข้อยกเว้นเนื่องจากไม่มีฟีเจอร์ 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 กําลังพยายามใช้ลักษณะสําหรับผู้สมัคร Discovery แต่ดำเนินการไม่สําเร็จเนื่องจากไม่ได้ลงทะเบียนลักษณะดังกล่าวระหว่างการเริ่มต้น เช่น

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 ที่ยืนยันแล้วจากการผสานรวมอื่นก็ตาม

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

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

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

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

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