แอปตัวอย่าง
หากพบปัญหาเมื่อใช้ Home API คุณสามารถรวบรวมบันทึกเพื่อแก้ไขข้อบกพร่องเพิ่มเติมได้ การเก็บรวบรวมบันทึกจากอุปกรณ์เคลื่อนที่ต้องใช้ Android Debug Bridge (adb
) หากต้องการความช่วยเหลือจาก Google ให้รวบรวมบันทึกจากทั้งอุปกรณ์ Android และฮับ แล้วเปิดคำขอแจ้งปัญหาในเครื่องมือติดตามปัญหาพร้อมข้อมูลและบันทึกที่เกี่ยวข้อง
รวบรวมบันทึกของ Android
อุปกรณ์เคลื่อนที่ต้องเชื่อมต่อกับเครื่องคอมพิวเตอร์ของคุณสำหรับขั้นตอนทั้งหมดที่เกี่ยวข้องกับ adb
ติดตั้ง adb
ตั้งค่า Android Debug Bridge ในเครื่องของคุณหากยังไม่ได้ดำเนินการ
- ติดตั้ง "adb" ในคอมพิวเตอร์
- เปิดตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์และการแก้ไขข้อบกพร่อง 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
- ดูรหัสของอุปกรณ์เคลื่อนที่
adb devices
List of devices attached device-id device
- จัดเก็บค่านี้ไว้ในตัวแปรชื่อ
phoneid
phoneid=device-id
- บันทึกข้อมูลอุปกรณ์ต่างๆ ลงในตัวแปร
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)
- บันทึกตัวแปรทั้งหมดลงในไฟล์ชื่อ
_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
- ยืนยันเนื้อหาของ
_versions.txt
cat _versions.txt
ตอนนี้คุณส่งไฟล์นี้ให้ Google เพื่อแก้ปัญหาได้แล้วขยายเพื่อแสดงเอาต์พุตไฟล์ตัวอย่าง
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):
รวบรวมบันทึก
หากต้องการรวบรวมบันทึก ให้ปิดแอปทั้งหมดที่ทำงานอยู่ในอุปกรณ์เคลื่อนที่ จากนั้นให้ทำดังนี้
- เปิดหน้าต่างเทอร์มินัลและล้างบันทึกของอุปกรณ์ที่มีอยู่ โดยทำดังนี้
adb logcat -b all -c
- เริ่มกระบวนการรวบรวมบันทึก
เปิดเทอร์มินัลนี้ไว้ ซึ่งจะรวบรวมบันทึกจากอุปกรณ์ตราบใดที่กระบวนการทำงานอยู่adb logcat >> _logs.txt
- เรียกใช้แอปตัวอย่างและบันทึกการดําเนินการทั้งหมดในอินเทอร์เฟซผู้ใช้ เมื่อดำเนินการเสร็จแล้ว ให้หยุดกระบวนการ
logcat
ที่ทำงานอยู่ในเทอร์มินัลโดยกด Ctrl+C (หรือ Cmd+C ใน Mac) - ระบบจะบันทึกบันทึกจากเซสชันนี้ไว้ในไฟล์ชื่อ
_logs.txt
คุณสามารถวิเคราะห์ข้อมูลในไฟล์นี้ได้หลายวิธี รวมถึงการค้นหาคีย์เวิร์ด เช่น error
, exception
หรือ crash
สคริปต์บันทึก
แอปตัวอย่างมีสคริปต์ในการรับบันทึกที่เกี่ยวข้องและคอมไพล์เป็นไฟล์ข้อความเพื่อความสะดวก คุณควรแนบบันทึกเหล่านี้ไปกับข้อบกพร่องที่รายงานเพื่อให้ Google วิเคราะห์สาเหตุของปัญหาได้สะดวกยิ่งขึ้น เพื่อมอบประสบการณ์การแก้ไขข้อบกพร่องที่ดีที่สุด
บันทึกเหล่านี้อยู่ในไดเรกทอรี scripts
ในลําดับชั้นแหล่งที่มาของแอปตัวอย่าง
หากต้องการเรียกใช้ ให้ทําตามขั้นตอนด้านล่างจากไดเรกทอรีรูทของโปรเจ็กต์
- ดูรหัสของอุปกรณ์เคลื่อนที่
adb devices -l
List of devices attached device-id device
- เรียกใช้สคริปต์
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)
- จำลองการเกิดปัญหา
- กด
CTRL+C
เพื่อหยุดสคริปต์
สคริปต์จะสร้างไฟล์บันทึกที่มีการประทับเวลาซึ่งมีข้อมูลที่เกี่ยวข้องทั้งหมด แนบไฟล์เหล่านี้ไปกับรายงานข้อบกพร่องที่คุณพบ
บันทึกของอุปกรณ์ฮับแคสต์
คุณดูบันทึกของอุปกรณ์สำหรับ Google Hub ได้โดยทำดังนี้
- ตั้งค่า Android Debug Bridge
ดูที่อยู่ IP ของฮับ
- จากฮับ หากมีหน้าจอ ให้ทำดังนี้
- เลื่อนนิ้วลงจากด้านบนของหน้าจอ
- แตะไอคอนการตั้งค่า
- ค้นหาที่อยู่ IP ของอุปกรณ์: ใน Nest Hub (2nd gen) ให้ไปที่ข้อมูลอุปกรณ์ > ข้อมูลทางเทคนิค > ที่อยู่ IP
- จาก GHA ในโทรศัพท์ ให้ทำดังนี้
- แตะอุปกรณ์เพื่อเปิดหน้ารายละเอียดอุปกรณ์
- แตะไอคอนการตั้งค่า เพื่อเปิดหน้าการตั้งค่า
- ค้นหาที่อยู่ IP ของอุปกรณ์: ไปที่ข้อมูลอุปกรณ์ > ข้อมูลทางเทคนิค > ที่อยู่ IP
- จากฮับ หากมีหน้าจอ ให้ทำดังนี้
ในคอมพิวเตอร์ที่อยู่ในเครือข่าย Wi-Fi เดียวกับอุปกรณ์ ให้ทำดังนี้
adb connect ip-address
adb logcat
หากต้องการส่งบันทึกให้ผู้อื่น ให้ทำการดำเนินการที่ไม่สำเร็จและส่งออกผลลัพธ์ไปยังไฟล์ข้อความ โดยทำดังนี้
adb logcat -d > platform-logs.txt
ระบบอัตโนมัติ
การตรวจจับขอบ
การทำงานอัตโนมัติในระบบนิเวศของ Google Home มีการตรวจหาขอบ ซึ่งเป็นตรรกะที่ช่วยให้มั่นใจว่าเงื่อนไขเริ่มต้นจะเปิดใช้งานก็ต่อเมื่อมีการเปลี่ยนแปลงสถานะจริงเท่านั้น ต่างจากอัปเดตสถานะที่เป็นเพียงการซ้ำสถานะก่อนหน้าของอุปกรณ์
เช่น หากการเปิดไฟเป็นตัวเริ่มต้น การตรวจหาขอบจะตรวจสอบว่าเงื่อนไขเริ่มต้นจะเปิดใช้งานก็ต่อเมื่ออุปกรณ์ไฟเปลี่ยนจากปิดเป็นเปิดเท่านั้น ไม่ใช่จากเปิดเป็นเปิด (ไม่มีการเปลี่ยนแปลง)
การทำงานอัตโนมัติไม่ทำงานตามที่คาดไว้
หลังจากพิจารณาการตรวจหาขอบแล้ว หากการทำงานอัตโนมัติไม่ทำงานตามที่คาดไว้ ให้ทำดังนี้
ตรวจสอบอุปกรณ์แต่ละเครื่องว่าทำงานได้อย่างถูกต้องโดยไม่ขึ้นอยู่กับการทำงานอัตโนมัติ
ดูกราฟการทำงานอัตโนมัติเพื่อเปรียบเทียบกับ DSL การทำงานอัตโนมัติ เพื่อดูว่ามีข้อสันนิษฐานใดที่อาจไม่ถูกต้อง
ดูสถานะอุปกรณ์ในแอป Google Home ระหว่างที่การทำงานอัตโนมัติทำงาน
ตรวจสอบว่าอุปกรณ์ทั้งหมดที่การทำงานอัตโนมัติอ้างอิงอยู่อยู่ในโครงสร้างที่คุณคาดไว้ การลบอุปกรณ์ที่การทำงานอัตโนมัติใช้อยู่อาจก่อให้เกิดผลลัพธ์ที่ไม่คาดคิด ดูผลกระทบของการลบอุปกรณ์ต่อการทำงานอัตโนมัติ
การทำงานอัตโนมัติทำงานในเวลาที่ไม่ควรจะทำงาน
หากการทำงานอัตโนมัติทำงานเมื่อไม่ควรทำงาน ให้ตรวจสอบเกณฑ์เงื่อนไขเริ่มต้น คุณอาจต้องเพิ่มตรรกะเพิ่มเติมเพื่อให้ระบบบันทึกการเปลี่ยนแปลงสถานะเพียงครั้งเดียวและทริกเกอร์การทำงานอัตโนมัติเพียงครั้งเดียว
การทำงานอัตโนมัติไม่คอมไพล์
ตรวจสอบว่าแอปมีการนําเข้าที่จําเป็นทั้งหมด รวมถึงคลาสแต่ละคลาสที่สอดคล้องกับโหนดประเภทต่างๆ รวมถึงลักษณะที่คุณอ้างอิง
การสร้างการทำงานอัตโนมัติไม่ผ่านการตรวจสอบ
หากการสร้างการทำงานอัตโนมัติไม่ผ่านการตรวจสอบ ข้อความเตือนหรือข้อผิดพลาดจะแสดงข้อมูลเกี่ยวกับปัญหา ดูข้อมูลเพิ่มเติมได้ที่ValidationIssueType
reference
ฟังก์ชันรายการแสดงข้อยกเว้น
เมื่อเรียกใช้ฟังก์ชัน Automation API List แฮนเดิลการอ่านอาจแสดงข้อยกเว้นเนื่องจากไม่มีฟีเจอร์ API หากต้องการลดปัญหานี้ ให้ลบการทำงานอัตโนมัติที่ได้รับผลกระทบ
หากต้องการทำสิ่งต่อไปนี้
- ตรวจสอบว่าคุณได้ติดตั้ง
adb
แล้ว โปรดดูติดตั้ง adb ดึงรหัสการทำงานอัตโนมัติจากบันทึกของ 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
ลบการทำงานอัตโนมัติโดยใช้รหัสการทำงานอัตโนมัติ
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.