সমস্যা সমাধান

নমুনা অ্যাপ্লিকেশন

হোম API ব্যবহার করার সময় আপনি যদি কোনো সমস্যার সম্মুখীন হন, আপনি আরও ডিবাগিংয়ের জন্য লগ সংগ্রহ করতে পারেন। মোবাইল ডিভাইস থেকে লগ সংগ্রহ করতে অ্যান্ড্রয়েড ডিবাগ ব্রিজ ( adb ) প্রয়োজন৷ আপনার যদি Google থেকে সহায়তার প্রয়োজন হয়, তাহলে Android ডিভাইস এবং হাব উভয় থেকে লগগুলি সংগ্রহ করুন এবং এর সাথে সম্পর্কিত তথ্য এবং লগগুলি সহ ইস্যু ট্র্যাকারে একটি টিকিট খুলুন৷

অ্যান্ড্রয়েড লগ সংগ্রহ করুন

adb সাথে জড়িত সমস্ত পদক্ষেপের জন্য আপনার মোবাইল ডিভাইসটি আপনার স্থানীয় মেশিনের সাথে সংযুক্ত থাকতে হবে।

অ্যাডবি ইনস্টল করুন

আপনি যদি ইতিমধ্যেই না করে থাকেন তবে আপনার স্থানীয় মেশিনে Android ডিবাগ ব্রিজ সেট আপ করুন:

  1. আপনার কম্পিউটারে "adb" ইনস্টল করুন
  2. আপনার Android ফোনে বিকাশকারী বিকল্প এবং USB ডিবাগিং চালু করুন

অ্যান্ড্রয়েড স্টুডিওর জন্য গুগল হোম প্লাগইন

Google Home Plugin for Android Studio লগ সংগ্রহ এবং বিশ্লেষণ করার জন্য একটি সহায়ক টুল, এবং এটি বিশেষভাবে Google Home platform ডেভেলপারদের জন্য তৈরি করা হয়েছে। এই প্লাগইনটি আপনাকে Google Assistant Simulator , ক্লাউড লগিং এবং আপনার 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. অ্যান্ড্রয়েড ডিবাগ ব্রিজ সেট আপ করুন
  2. আপনার হাবের আইপি ঠিকানা পান:

    • হাব থেকে, যদি এটির একটি স্ক্রিন থাকে:
      1. স্ক্রিনের উপরে থেকে নিচের দিকে সোয়াইপ করুন
      2. সেটিংস আইকন আলতো চাপুন
      3. ডিভাইসের আইপি ঠিকানা খুঁজুন: একটি Nest Hub (2nd gen) , ডিভাইসের তথ্য > প্রযুক্তিগত তথ্য > আইপি ঠিকানাতে যান
    • আপনার ফোনে GHA থেকে:
      1. ডিভাইসের বিশদ পৃষ্ঠাটি আনতে ডিভাইসটিতে আলতো চাপুন
      2. সেটিংস পৃষ্ঠাটি আনতে সেটিংস আইকন আলতো চাপুন৷
      3. ডিভাইসের আইপি ঠিকানা খুঁজুন: ডিভাইসের তথ্য > প্রযুক্তিগত তথ্য > আইপি ঠিকানাতে যান
  3. ডিভাইসের মতো একই Wi-Fi নেটওয়ার্কের কম্পিউটারে:

      adb connect ip-address
      adb logcat
    

  4. কাউকে লগ প্রদান করতে, ব্যর্থ হওয়া অপারেশনটি সম্পাদন করুন এবং একটি পাঠ্য ফাইলে আউটপুট পাইপ করুন:

      adb logcat -d > platform-logs.txt
    

অটোমেশন

প্রান্ত সনাক্তকরণ

গুগল হোম ইকোসিস্টেমের অটোমেশন বৈশিষ্ট্য প্রান্ত সনাক্তকরণ , যা একটি যুক্তি যা নিশ্চিত করে যে একটি স্টার্টার শুধুমাত্র তখনই সক্রিয় হয় যখন একটি প্রকৃত অবস্থার পরিবর্তন হয়, একটি স্টেট আপডেটের বিপরীতে যা ডিভাইসের পূর্ববর্তী অবস্থার পুনরাবৃত্তি করে।

উদাহরণস্বরূপ, যদি একটি আলো চালু করা একটি স্টার্টার হয়, প্রান্ত সনাক্তকরণ নিশ্চিত করে যে স্টার্টারটি শুধুমাত্র সক্রিয় হবে যদি সেই আলো ডিভাইসটি অফ থেকে অন-এ যায়, যেমনটি অন থেকে অন-এর বিপরীতে (কোনও পরিবর্তন নেই)।

অটোমেশন আশানুরূপ আচরণ করে না

প্রান্ত সনাক্তকরণের জন্য অ্যাকাউন্টিং করার পরে, যদি একটি অটোমেশন আশানুরূপ আচরণ না করে:

  1. প্রতিটি ডিভাইস আপনার অটোমেশন থেকে স্বাধীনভাবে কাজ করছে কিনা তা নিশ্চিত করতে পরীক্ষা করুন।

  2. আপনার অটোমেশনের জন্য অটোমেশন গ্রাফটি দেখুন, এটিকে আপনার অটোমেশন ডিএসএলের সাথে তুলনা করে, আপনার পক্ষ থেকে সম্ভাব্য ভুল অনুমান প্রকাশ করতে।

  3. আপনার অটোমেশন চালানোর সময় Google Home অ্যাপে ডিভাইসের অবস্থা পর্যবেক্ষণ করুন।

  4. অটোমেশন দ্বারা উল্লেখ করা সমস্ত ডিভাইস আপনি যে কাঠামোতে থাকবেন সেখানে উপস্থিত রয়েছে তা নিশ্চিত করতে পরীক্ষা করুন৷ একটি অটোমেশন নির্ভর করে এমন একটি ডিভাইস মুছে ফেলার ফলে অনিচ্ছাকৃত পরিণতি হতে পারে। অটোমেশনে ডিভাইস মুছে ফেলার প্রভাব দেখুন।

অটোমেশন চলে যখন এটি উচিত নয়

যদি আপনার অটোমেশন চলে যখন এটি উচিত নয়, স্টার্টারের মানদণ্ড পরীক্ষা করুন। এটি নিশ্চিত করার জন্য অতিরিক্ত যুক্তি যোগ করার প্রয়োজন হতে পারে যে অবস্থার পরিবর্তন শুধুমাত্র একবার ক্যাপচার করা হয়েছে এবং শুধুমাত্র একবার অটোমেশনকে ট্রিগার করে।

অটোমেশন কম্পাইল না

নিশ্চিত করুন যে আপনার অ্যাপে সমস্ত প্রয়োজনীয় আমদানি রয়েছে, যার মধ্যে প্রতিটি শ্রেণী বিভিন্ন নোডের প্রকারের সাথে সম্পর্কিত সেই সাথে আপনি যে বৈশিষ্ট্যগুলি উল্লেখ করছেন।

স্বয়ংক্রিয়তা সৃষ্টি বৈধকরণ ব্যর্থ

যদি অটোমেশন তৈরি বৈধতা পাস না করে, একটি সতর্কতা বা ত্রুটি বার্তা সমস্যা সম্পর্কে তথ্য প্রদান করে। আরও তথ্যের জন্য, ValidationIssueType রেফারেন্স পড়ুন।

তালিকা ফাংশন ব্যতিক্রম নিক্ষেপ করে

অটোমেশন API তালিকা ফাংশন কল করার সময়, রিড হ্যান্ডলাররা অনুপস্থিত API বৈশিষ্ট্যগুলির কারণে ব্যতিক্রমগুলি ফেলতে পারে। এটি প্রশমিত করতে, প্রভাবিত অটোমেশন মুছুন।

এটি করতে:

  1. আপনার adb ইনস্টল করা আছে তা নিশ্চিত করুন। অ্যাডবি ইনস্টল দেখুন।
  2. এন্ড্রয়েড লগ থেকে অটোমেশনের আইডি পুনরুদ্ধার করুন:

    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"))
    

ডিসকভারি এপিআই একটি সতর্কতা লগ করে যখন একটি বৈশিষ্ট্য অনিবন্ধিত থাকে

যদি ডিসকভারি এপিআই Trait not found জন্য একটি সতর্কতা লগ করে, তাহলে এর মানে হল API ডিসকভারি প্রার্থীদের জন্য বৈশিষ্ট্যটি ব্যবহার করার চেষ্টা করছে, কিন্তু এটি সফল হবে না কারণ সূচনা করার সময় বৈশিষ্ট্যটি নিবন্ধিত হয়নি। যেমন:

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 ক্লায়েন্ট থাকে, তাহলে আপনি হোম API পরীক্ষা করতে আপনার বিদ্যমান OAuth ক্লায়েন্ট ব্যবহার করতে পারেন।

হোম API গুলি পরীক্ষা এবং ব্যবহার করার জন্য Google Home Developer Console রেজিস্ট্রেশনের প্রয়োজন নেই৷ যাইহোক, অন্য ইন্টিগ্রেশন থেকে আপনার যাচাইকৃত OAuth ক্লায়েন্ট থাকলেও আপনার অ্যাপটি প্রকাশ করার জন্য আপনাকে এখনও একটি অনুমোদিত Developer Console নিবন্ধনের প্রয়োজন হবে।

নিম্নলিখিত বিবেচনা প্রযোজ্য:

  • একটি বিদ্যমান OAuth ক্লায়েন্ট ব্যবহার করার সময় 100-ব্যবহারকারীর সীমা রয়েছে। পরীক্ষার ব্যবহারকারীদের যোগ করার বিষয়ে তথ্যের জন্য, OAuth সম্মতি স্ক্রীন সেট আপ করুন দেখুন। OAuth যাচাইকরণের থেকে স্বাধীন, 100 জন ব্যবহারকারীর একটি Home API- আরোপিত সীমা রয়েছে যারা আপনার আবেদনের অনুমতি দিতে পারে। Developer Console নিবন্ধন সম্পূর্ণ হওয়ার পরে এই সীমাবদ্ধতা প্রত্যাহার করা হয়৷

  • Developer Console নিবন্ধন হোম API-এর সাথে আপনার অ্যাপ আপডেট করার প্রস্তুতির জন্য আপনি যখন OAuth-এর মাধ্যমে ডিভাইস-টাইপ অনুদান সীমাবদ্ধ করতে প্রস্তুত তখন অনুমোদনের জন্য পাঠানো উচিত।

Google Cloud অ্যাপগুলির জন্য যেগুলি এখনও OAuth যাচাইকরণ মুলতুবি রয়েছে, যাচাইকরণ সম্পূর্ণ না হওয়া পর্যন্ত ব্যবহারকারীরা OAuth ফ্লো সম্পূর্ণ করতে পারবেন না। নিম্নলিখিত ত্রুটির সাথে অনুমতি দেওয়ার প্রচেষ্টা ব্যর্থ হবে:

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