การแก้ปัญหา

แอปตัวอย่าง

หากพบปัญหาขณะใช้ 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 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การอ้างอิง

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

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

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

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

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

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

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