समस्या का हल

सैंपल ऐप्लिकेशन

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

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

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

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

अगर आपने अब तक अपनी लोकल मशीन पर Android Debug Bridge सेट अप नहीं किया है, तो यह तरीका अपनाएं:

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

Android Studio के लिए Google Home प्लग इन

Google Home Plugin for Android Studio, लॉग इकट्ठा करने और उनका विश्लेषण करने के लिए मददगार टूल है. इसे खास तौर पर Google Home platform डेवलपर के लिए बनाया गया था. इस प्लग इन की मदद से, Google Assistant Simulator, Cloud Logging, और अन्य टूल ऐक्सेस किए जा सकते हैं. इससे, smart home डेवलपमेंट की प्रोसेस को आसान बनाया जा सकता है.

Matter डिवाइस लॉग का ज़्यादा विश्लेषण करने के लिए, इस टूल का इस्तेमाल adb के साथ करें.

ज़्यादा जानने और टूल पाने के लिए, 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. सैंपल ऐप्लिकेशन चलाएं और यूज़र इंटरफ़ेस की सभी कार्रवाइयों को कैप्चर करें. काम पूरा होने के बाद, Ctrl+C (या Mac पर Cmd+C) दबाकर, टर्मिनल पर चल रही logcat प्रोसेस को रोकें.
  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 हब के लिए डिवाइस लॉग देखने के लिए, यह तरीका अपनाएं:

  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 रेफ़रंस देखें.

सूची फ़ंक्शन से अपवाद मिलते हैं

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

ऐसा करने के लिए:

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

Google Home Developer Console Home के एपीआई को टेस्ट करने और इस्तेमाल करने के लिए, रजिस्टर करने की ज़रूरत नहीं है. हालांकि, ऐप्लिकेशन पब्लिश करने के लिए, आपको अब भी मंज़ूरी पा चुके Developer Console रजिस्ट्रेशन की ज़रूरत होगी. भले ही, आपके पास किसी दूसरे इंटिग्रेशन से पुष्टि किया गया OAuth क्लाइंट हो.

इन बातों का ध्यान रखें:

  • किसी मौजूदा OAuth क्लाइंट का इस्तेमाल करने पर, ज़्यादा से ज़्यादा 100 उपयोगकर्ता जोड़े जा सकते हैं. टेस्ट उपयोगकर्ताओं को जोड़ने के बारे में जानने के लिए, OAuth की सहमति वाली स्क्रीन सेट अप करना लेख पढ़ें. OAuth की पुष्टि के अलावा, Home के एपीआई की ओर से यह तय किया गया है कि आपके ऐप्लिकेशन को अनुमतियां देने वाले उपयोगकर्ताओं की संख्या 100 से ज़्यादा नहीं होनी चाहिए. Developer Console रजिस्टर करने के बाद, यह पाबंदी हट जाती है.

  • Developer Console रजिस्ट्रेशन को अनुमति के लिए तब भेजा जाना चाहिए, जब आप Home के एपीआई के साथ अपने ऐप्लिकेशन को अपडेट करने की तैयारी में हों. इसके लिए, आपको OAuth की मदद से डिवाइस टाइप के अनुदान पर पाबंदी लगानी होगी.

जिन Google Cloud ऐप्लिकेशन की OAuth पुष्टि अब भी बाकी है उनके लिए, उपयोगकर्ता OAuth फ़्लो तब तक पूरा नहीं कर सकते, जब तक पुष्टि पूरी नहीं हो जाती. अनुमतियां देने की कोशिश करने पर, यह गड़बड़ी दिखेगी:

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