समस्या का हल

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

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

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 displaying seconds on the screen
adb -s $phoneid shell settings put secure clock_seconds 1

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

Cast hub डिवाइस लॉग

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

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

लोकल लॉग वापस पाने के लिए, Cast Hub को चालू करने का तरीका:

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

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

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

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

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

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 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.