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

নমুনা অ্যাপ

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

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

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

adb ইনস্টল করুন

যদি আগে থেকে না করে থাকেন, তাহলে আপনার লোকাল মেশিনে অ্যান্ড্রয়েড ডিবাগ ব্রিজ সেট আপ করুন:

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

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

Google Home Plugin for Android Studio লগ সংগ্রহ ও বিশ্লেষণের জন্য একটি সহায়ক টুল, এবং এটি বিশেষভাবে Google Home platform ডেভেলপারদের জন্য তৈরি করা হয়েছে। এই প্লাগইনটি আপনাকে Google Assistant Simulator , ক্লাউড লগিং এবং অন্যান্য টুল ব্যবহারের সুযোগ দেয়, যা আপনার smart home তৈরির প্রক্রিয়াকে সহজ করে তোলে।

Matter ডিভাইসের লগগুলো আরও বিশ্লেষণ করতে adb এর সাথে এই টুলটি ব্যবহার করুন।

আরও জানতে এবং টুলটি পেতে, Google Home Plugin for Android Studio দেখুন।

সংস্করণ তথ্য

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

  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):
    সমস্যা সমাধানের প্রয়োজনে এই ফাইলটি এখন গুগলকে প্রদান করা যেতে পারে।

লগ সংগ্রহ করুন

লগ সংগ্রহ করতে, মোবাইল ডিভাইসে চালু থাকা সমস্ত অ্যাপ বন্ধ করুন। তারপর:

  1. একটি টার্মিনাল উইন্ডো খুলুন এবং বিদ্যমান ডিভাইস লগগুলি মুছে ফেলুন:
    adb logcat -b all -c
  2. লগ সংগ্রহ প্রক্রিয়া শুরু করুন:
    adb logcat >> _logs.txt
    এই টার্মিনালটি খোলা রাখুন। প্রসেসটি চালু থাকা পর্যন্ত এটি আপনার ডিভাইস থেকে লগ সংগ্রহ করবে।
  3. স্যাম্পল অ্যাপটি চালান এবং ইউজার ইন্টারফেসের সমস্ত কার্যকলাপ ক্যাপচার করুন। কাজ শেষ হলে, টার্মিনালে চলমান logcat প্রসেসটি Ctrl+C (অথবা Mac-এ Cmd+C ) চেপে বন্ধ করুন।
  4. এই সেশনের লগগুলো _logs.txt নামের একটি ফাইলে সংরক্ষিত হয়।

আপনি এই ফাইলের তথ্য বিভিন্ন উপায়ে বিশ্লেষণ করতে পারেন, যার মধ্যে রয়েছে error , exception , বা crash মতো কীওয়ার্ড দিয়ে অনুসন্ধান করা।

লগ স্ক্রিপ্ট

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

এই লগগুলি স্যাম্পল অ্যাপ সোর্স ট্রির 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 Home
  • Google Nest Audio
  • Google Nest Hub
  • Google Nest Mini

স্থানীয় লগ পুনরুদ্ধারের জন্য একটি কাস্ট হাব সক্রিয় করতে:

  1. অ্যান্ড্রয়েড ডিবাগ ব্রিজ সেট আপ করুন
  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
    

অটোমেশন

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

গুগল হোম ইকোসিস্টেমের অটোমেশনগুলোতে এজ ডিটেকশন নামক একটি ফিচার রয়েছে, যা এমন একটি লজিক যা যাচাই করে যে, একটি স্টার্টার কেবল তখনই সক্রিয় হবে যখন ডিভাইসের অবস্থায় প্রকৃত কোনো পরিবর্তন ঘটবে; স্টেট আপডেটের ফলে এটি কেবল তার পূর্ববর্তী অবস্থারই পুনরাবৃত্তি করে না।

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

অটোমেশন প্রত্যাশা অনুযায়ী কাজ করছে না।

এজ ডিটেকশন বিবেচনা করার পরেও, যদি কোনো অটোমেশন প্রত্যাশিতভাবে কাজ না করে:

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

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

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

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

যখন অটোমেশন চলার কথা নয়, তখনও চলে।

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

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

নিশ্চিত করুন যে আপনার অ্যাপে সমস্ত প্রয়োজনীয় ইম্পোর্ট রয়েছে, যার মধ্যে বিভিন্ন নোড টাইপের সাথে সম্পর্কিত প্রতিটি ক্লাস এবং আপনার রেফারেন্স করা ট্রেইটগুলোও অন্তর্ভুক্ত।

অটোমেশন তৈরির বৈধতা যাচাইয়ে ব্যর্থ হয়েছে।

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

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

অটোমেশন এপিআই লিস্ট ফাংশনটি কল করার সময়, এপিআই ফিচার অনুপস্থিত থাকার কারণে রিড হ্যান্ডলারগুলো এক্সেপশন থ্রো করতে পারে। এটি সমাধান করতে, প্রভাবিত অটোমেশনটি ডিলিট করে দিন।

এটি করতে:

  1. adb ইনস্টল করা আছে কিনা তা নিশ্চিত করতে পরীক্ষা করুন। 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 এর জন্য একটি সতর্কবার্তা লগ করে, এর মানে হলো এপিআইটি ডিসকভারি ক্যান্ডিডেটদের জন্য ট্রেইটটি ব্যবহার করার চেষ্টা করছে, কিন্তু ইনিশিয়ালাইজেশনের সময় ট্রেইটটি রেজিস্টার করা না থাকায় তা সফল হবে না। উদাহরণস্বরূপ:

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 রেজিস্টার করতে হবে। আপনার ট্রেইটটি রেজিস্ট্রি-তে যোগ করার জন্য "Registering traits" অংশটি দেখুন।

ওঅথ

আপনার যদি একটি বিদ্যমান OAuth ক্লায়েন্ট থাকে

আপনার প্রকাশিত অ্যাপের জন্য যদি আগে থেকেই একটি যাচাইকৃত OAuth ক্লায়েন্ট থাকে, তাহলে আপনি হোম এপিআইগুলো পরীক্ষা করার জন্য আপনার বিদ্যমান OAuth ক্লায়েন্টটি ব্যবহার করতে পারেন।

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

নিম্নলিখিত বিষয়গুলো প্রযোজ্য:

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

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

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

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