समस्या का हल

सैंपल के तौर पर मिला ऐप्लिकेशन

अगर आपको Home API का इस्तेमाल करते समय कोई समस्या आती है, तो डीबग करने के लिए लॉग इकट्ठा करें. मोबाइल डिवाइस से लॉग इकट्ठा करने के लिए, Android Debug Bridge (adb) की ज़रूरत होती है. अगर आपको Google से मदद चाहिए, तो Android डिवाइसों और हब, दोनों से लॉग इकट्ठा करें. इसके बाद, समस्या ट्रैकर में टिकट खोलें. इसमें समस्या से जुड़ी ज़रूरी जानकारी और लॉग शामिल करें.

Android के लॉग इकट्ठा करना

adb से जुड़े सभी चरणों के लिए, आपका मोबाइल डिवाइस आपकी लोकल मशीन से कनेक्ट होना चाहिए.

adb इंस्टॉल करना

अगर आपने पहले से ऐसा नहीं किया है, तो अपने कंप्यूटर पर Android डीबग ब्रिज सेट अप करें:

  1. अपने कंप्यूटर पर "adb" इंस्टॉल करें.
  2. अपने Android फ़ोन पर, डेवलपर के लिए सेटिंग और टूल और यूएसबी डीबग करने की सुविधा चालू करें.

मोबाइल डिवाइस आईडी पाना

  1. अपने फ़ोन या टैबलेट का आईडी पाएं:
    adb devices
    List of devices attached
    device-id    device
  2. इस वैल्यू को phoneid नाम के वैरिएबल में सेव करें:
    phoneid=device-id

वर्शन की जानकारी

हमारा सुझाव है कि जब भी आपको लॉग इकट्ठा करने हों, तब अपने सेटअप से जुड़ी सभी वर्शन की जानकारी इकट्ठा करें. अगर आपको Google के साथ समस्याएं शेयर करनी हैं, तो यह ज़रूरी है.

  1. डिवाइस की अलग-अलग जानकारी को वैरिएबल में सेव करें:
    containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep -m 1 "versionName" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep -m 1 "versionName" || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true); chimeradump=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider || true); homemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.home" || true); optionalhomemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.optional_home" || true); threadinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.threadnetwork" || true); enabledfeatures=$(echo "$chimeradump" | grep "Enabled features" | grep -i "home" | sort -u || true)
  2. सभी वैरिएबल को _versions.txt नाम की फ़ाइल में सेव करें:

    वैरिएबल को किसी फ़ाइल में सेव करने के लिए, कमांड दिखाने के लिए इसे बड़ा करें

    पूरे ब्लॉक को एक साथ कॉपी करके, टर्मिनल में चिपकाया जा सकता है.

    versionfile="_versions.txt"
    echo "Saving version info to $versionfile"
    echo "Container version: $containerinfo" > $versionfile
    echo "Home Module version: $homemoduleinfo" >> $versionfile
    echo "Optional Home Module version: $optionalhomemoduleinfo" >> $versionfile
    echo "Thread Module version: $threadinfo" >> $versionfile
    echo "GHA version: $ghainfo" >> $versionfile
    echo "Android version: $androidversion" >> $versionfile
    echo "Android API version: $androidapiversion" >> $versionfile
    echo "Found enabled features: $enabledfeatures" >> $versionfile
  3. _versions.txt के कॉन्टेंट की पुष्टि करें:
    cat _versions.txt

    सैंपल फ़ाइल का आउटपुट दिखाने के लिए, इसे बड़ा करें

    Container version:     versionName=26.26.34 (190400-945364269)
    Home Module version:             com.google.android.gms.home [v262634001]
    Optional Home Module version:         com.google.android.gms.optional_home [262634025] ...
    Thread Module version:             com.google.android.gms.threadnetwork [v262634001]
    GHA version:     versionName=4.22.28.0
    Android version: 14
    Android API version: 34
    Found enabled features:             Enabled features: appsearch_impl, brella_dynamite, dck_management...
    अब इस फ़ाइल को Google को दिया जा सकता है, ताकि समस्या को हल किया जा सके.

ज़्यादा जानकारी वाले डीबग फ़्लैग चालू करना

Android डिवाइस के लॉग इकट्ठा करने या गड़बड़ी की रिपोर्ट चलाने से पहले, लॉगर बफ़र का साइज़ कॉन्फ़िगर करें. साथ ही, Google Home और GMS कॉम्पोनेंट के लिए वर्बोस डीबगिंग टैग चालू करें:

# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M

# Enable GMS Service ID verbose flags
adb -s $phoneid shell setprop log.tag.gms_svc_id:168 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:304 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:305 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:319 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:336 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:360 VERBOSE

# Enable GHP and Matter log tags
adb -s $phoneid shell setprop log.tag.CameraCommissioningPlugin VERBOSE
adb -s $phoneid shell setprop log.tag.HomeSdk VERBOSE
adb -s $phoneid shell setprop log.tag.HomeClient VERBOSE
adb -s $phoneid shell setprop log.tag.InteractionApiChimeraService VERBOSE
adb -s $phoneid shell setprop log.tag.MatterCommissioner VERBOSE
adb -s $phoneid shell setprop log.tag.SampleApp VERBOSE

स्क्रिप्ट की मदद से Android लॉग इकट्ठा करना

डीबग करने के सेशन के दौरान, Android डिवाइस के लाइव लॉग कैप्चर करने के लिए:

  1. मौजूदा लॉग मिटाने, बफ़र साइज़ बढ़ाने, और वर्बोस लॉगिंग टैग सेट करने के लिए, वर्बोस डीबगिंग फ़्लैग चालू करें में दिए गए निर्देशों का पालन करें.
  2. मोबाइल डिवाइस पर चल रहे सभी ऐप्लिकेशन बंद करें.
  3. टेस्ट शुरू करने से पहले, मौजूदा लॉग बफ़र में मौजूद नॉइज़ को हटाएं:
    adb -s $phoneid logcat -c
  4. टर्मिनल विंडो में, लॉग इकट्ठा करने की प्रोसेस शुरू करें:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    इस टर्मिनल विंडो को खुला रखें. इससे, आपके डिवाइस के लॉग तब तक कैप्चर किए जाएंगे, जब तक यह प्रोसेस चलती है.
  5. अपने ऐप्लिकेशन को चलाएं और समस्या को दोहराने के लिए, यूज़र इंटरफ़ेस से जुड़ी सभी कार्रवाइयां करें.
  6. जब यह प्रोसेस पूरी हो जाए, तो टर्मिनल में logcat प्रोसेस को रोकने के लिए, Ctrl+C (या Mac पर Cmd+C) दबाएं.
  7. इस सेशन के लॉग, android-logs_YYYYMMDDmmss.txt में सेव किए जाते हैं. गड़बड़ी की किसी भी रिपोर्ट में android-logs_YYYYMMDDmmss.txt और _versions.txt, दोनों को अटैच करें.

adb bugreport की मदद से Android के लॉग इकट्ठा करना

जब आपको सिस्टम-लेवल की समस्याओं, क्रैश डंप या लो-लेवल नेटवर्क और ब्लूटूथ डीबग करने से जुड़ी गड़बड़ी की ज़्यादा जानकारी शेयर करनी हो, तब Android की पूरी गड़बड़ी रिपोर्ट कैप्चर करें:

  • Matter BLE कमीशनिंग: अगर आपको BLE से जुड़ी Matter कमीशनिंग की समस्या की रिपोर्ट करनी है, तो समस्या को दोहराने से पहले, डेवलपर के लिए सेटिंग और टूल में ब्लूटूथ एचसीआई स्नूप लॉग चालू करें. इसके लिए, सेटिंग > डेवलपर के लिए सेटिंग और टूल > ब्लूटूथ एचसीआई स्नूप लॉग चालू करें पर जाएं.
  • टेस्ट से पहले का सेटअप: टेस्ट शुरू करने से पहले, अपने डिवाइस पर वर्बोस डीबगिंग प्रॉपर्टी चालू करने के लिए, वर्बोस डीबगिंग फ़्लैग चालू करें में दिया गया तरीका अपनाएं.
  • गड़बड़ी की रिपोर्ट कैप्चर करना: टेस्ट चलाने और समस्या को फिर से दोहराने के बाद, गड़बड़ी की पूरी रिपोर्ट का संग्रह जनरेट करने के लिए, यह कमांड चलाएं:
    adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip
  • बेहतर डीबग करने से जुड़ी जानकारी: जनरेट की गई android-bugreport_YYYYMMDDmmss.zip फ़ाइल में, सिस्टम-लेवल का पूरा डाइग्नोस्टिक डेटा होता है. इसमें सिस्टम के पूरे डंप, मेमोरी के आंकड़े, बैटरी की जांच, और सबसिस्टम के लो-लेवल के ट्रेस शामिल होते हैं. इससे डीबग करने के लिए ज़्यादा बेहतर जानकारी मिलती है.

कास्ट हब डिवाइस के लॉग

इस तरीके का इस्तेमाल करके, Google Nest Hub के डिवाइस लॉग देखे जा सकते हैं. यह तरीका इन मॉडल के लिए काम करता है:

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

स्थानीय लॉग वापस पाने के लिए, कास्ट हब चालू करने का तरीका:

  1. Android डीबग ब्रिज सेट अप करें.
  2. अपने हब का आईपी पता पाएं:

    • अगर हब में स्क्रीन है, तो उस पर जाकर:
      1. स्क्रीन पर सबसे ऊपर से नीचे की ओर स्वाइप करें
      2. सेटिंग आइकॉन पर टैप करें
      3. डिवाइस का आईपी पता ढूंढें: Nest Hub (2nd gen) पर, डिवाइस की जानकारी > तकनीकी जानकारी > आईपी पता पर जाएं
    • अपने फ़ोन पर GHA में जाकर:
      1. डिवाइस की ज़्यादा जानकारी वाला पेज खोलने के लिए, डिवाइस पर टैप करें
      2. सेटिंग पेज खोलने के लिए, सेटिंग आइकॉन पर टैप करें
      3. डिवाइस का आईपी पता ढूंढें: डिवाइस की जानकारी > तकनीकी जानकारी > आईपी पता पर जाएं
  3. डिवाइस और कंप्यूटर, दोनों एक ही वाई-फ़ाई नेटवर्क से कनेक्ट होने चाहिए:

      adb connect ip-address
      adb logcat
    

  4. किसी व्यक्ति को लॉग देने के लिए, वह कार्रवाई करें जो पूरी नहीं हो रही है. इसके बाद, आउटपुट को टेक्स्ट फ़ाइल में पाइप करें:

      adb logcat -d > platform-logs.txt
    

ऑटोमेशन

किनारों का पता लगाना

Google Home के ईकोसिस्टम में मौजूद ऑटोमेशन की सुविधा में एज डिटेक्शन की सुविधा होती है. यह एक ऐसा लॉजिक है जो यह पुष्टि करता है कि स्टार्टर सिर्फ़ तब चालू होता है, जब डिवाइस की स्थिति में कोई बदलाव होता है. यह डिवाइस की स्थिति को अपडेट करने के बजाय, डिवाइस की पिछली स्थिति को दोहराता है.

उदाहरण के लिए, अगर किसी लाइट को चालू करना स्टार्टर है, तो एज डिटेक्शन यह पुष्टि करता है कि स्टार्टर सिर्फ़ तब चालू होता है, जब लाइट डिवाइस बंद से चालू हो जाता है. ऐसा तब नहीं होता, जब लाइट डिवाइस चालू से चालू हो जाता है (कोई बदलाव नहीं होता).

ऑटोमेशन की सुविधा उम्मीद के मुताबिक काम नहीं कर रही है

किनारे का पता लगाने की सुविधा को ध्यान में रखने के बाद, अगर कोई ऑटोमेशन आपकी उम्मीद के मुताबिक काम नहीं करता है, तो:

  1. हर डिवाइस की जांच करें, ताकि यह पक्का किया जा सके कि वह ऑटोमेशन से अलग, सही तरीके से काम कर रहा है.

  2. अपने ऑटोमेशन के लिए ऑटोमेशन ग्राफ़ देखें. इसकी तुलना अपने ऑटोमेशन डीएसएल से करें, ताकि आपको अपनी ओर से की गई संभावित गलतियों के बारे में पता चल सके.

  3. ऑटोमेशन के चालू होने के दौरान, Google Home ऐप्लिकेशन में डिवाइस की स्थिति देखें.

  4. जांच करें कि ऑटोमेशन में शामिल किए गए सभी डिवाइस, उस स्ट्रक्चर में मौजूद हों जहां आपको उन्हें रखना है. ऑटोमेशन के लिए इस्तेमाल किए जा रहे किसी डिवाइस को मिटाने से, अनचाहे नतीजे मिल सकते हैं. डिवाइस मिटाने का ऑटोमेशन पर पड़ने वाला असर देखें.

ऑटोमेशन तब चलता है, जब उसे नहीं चलना चाहिए

अगर ऑटोमेशन तब चलता है, जब उसे नहीं चलना चाहिए, तो ऑटोमेशन शुरू होने की शर्तों की जांच करें. यह पक्का करने के लिए कि स्थिति में बदलाव सिर्फ़ एक बार कैप्चर हो और ऑटोमेशन सिर्फ़ एक बार ट्रिगर हो, आपको अतिरिक्त लॉजिक जोड़ना पड़ सकता है.

ऑटोमेशन कंपाइल नहीं होता

पक्का करें कि आपके ऐप्लिकेशन में सभी ज़रूरी इंपोर्ट शामिल हों. इनमें अलग-अलग नोड टाइप के साथ-साथ, उन विशेषताओं से जुड़ी हर क्लास भी शामिल है जिनका रेफ़रंस दिया जा रहा है.

ऑटोमेशन बनाने के दौरान पुष्टि नहीं हो सकी

अगर ऑटोमेशन बनाने की प्रोसेस में पुष्टि नहीं हो पाती है, तो चेतावनी या गड़बड़ी के मैसेज में समस्या के बारे में जानकारी दी जाती है. ज़्यादा जानकारी के लिए, ValidationIssueType रेफ़रंस देखें.

List फ़ंक्शन अपवाद दिखाता है

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 के लिए चेतावनी लॉग करता है, तो इसका मतलब है कि एपीआई, डिस्कवरी के लिए उपलब्ध कैंडिडेट के लिए इस ट्रेट का इस्तेमाल करने की कोशिश कर रहा है. हालांकि, ऐसा नहीं हो पाएगा, क्योंकि शुरुआत में इस ट्रेट को रजिस्टर नहीं किया गया था. उदाहरण के लिए:

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 क्लाइंट पहले से मौजूद है, तो Home API को टेस्ट करने के लिए, अपने मौजूदा OAuth क्लाइंट का इस्तेमाल किया जा सकता है.

Home API को टेस्ट करने और उनका इस्तेमाल करने के लिए, Google Home Developer Console रजिस्टर करने की ज़रूरत नहीं है. हालांकि, आपको अपना ऐप्लिकेशन पब्लिश करने के लिए, 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.