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

নমুনা অ্যাপ

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

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

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

adb ইনস্টল করুন

যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনার স্থানীয় মেশিনে Android Debug Bridge সেট আপ করুন:

  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 দেখুন।

সংস্করণ তথ্য

যখনই আপনি লগ সংগ্রহ করার সিদ্ধান্ত নেবেন, তখনই আপনার সেটআপ সম্পর্কিত সমস্ত সংস্করণের তথ্য সংগ্রহ করার পরামর্শ দেওয়া হচ্ছে। যদি আপনার 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):
    সমস্যা সমাধানের জন্য প্রয়োজনে এই ফাইলটি এখন গুগলকে সরবরাহ করা যেতে পারে।

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

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

  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 দ্বারা মূল কারণ বিশ্লেষণের সুবিধার্থে রিপোর্ট করা যেকোনো বাগের সাথে সংযুক্ত করা উচিত।

এই লগগুলি Sample App source tree-এর 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 Nest হাবের ডিভাইস লগ দেখতে পারেন, যা নিম্নলিখিত মডেলগুলির জন্য সমর্থিত:

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

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

  1. অ্যান্ড্রয়েড ডিবাগ ব্রিজ সেট আপ করুন
  2. আপনার হাবের আইপি ঠিকানাটি পান:

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

      adb connect ip-address
      adb logcat
    

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

      adb logcat -d > platform-logs.txt
    

অটোমেশন

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

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

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

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

প্রান্ত সনাক্তকরণের হিসাব করার পর, যদি কোনও অটোমেশন প্রত্যাশা অনুযায়ী আচরণ না করে:

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

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

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

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

অটোমেশন যখন চলবে না তখনই চলবে

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

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

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

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

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

তালিকা ফাংশন ব্যতিক্রমগুলি ছুঁড়ে দেয়

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

এটি করার জন্য:

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

কোনও বৈশিষ্ট্য নিবন্ধনমুক্ত থাকলে ডিসকভারি API একটি সতর্কতা লগ করে

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

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 এর সাথে সম্পর্কিত। একটি ID থেকে বৈশিষ্ট্যের নাম নির্ধারণ করতে, Trait সূচী দেখুন।

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

ওঅথ

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

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

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

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

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

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

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

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