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

নমুনা অ্যাপ

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

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

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

adb ইনস্টল করুন

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

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

মোবাইল ডিভাইস আইডি পান

  1. আপনার মোবাইল ডিভাইসের আইডিটি সংগ্রহ করুন:
    adb devices
    List of devices attached
    device-id    device
  2. এই মানটি phoneid নামক একটি ভেরিয়েবলে সংরক্ষণ করুন:
    phoneid=device-id

সংস্করণ তথ্য

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

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

বিশদ ডিবাগিং ফ্ল্যাগ সক্রিয় করুন

অ্যান্ড্রয়েড ডিভাইসের লগ সংগ্রহ করার বা বাগ রিপোর্ট চালানোর আগে, লগার বাফার সাইজ কনফিগার করুন এবং গুগল হোম ও জিএমএস কম্পোনেন্টগুলোর জন্য ভার্বোস ডিবাগিং ট্যাগ সক্রিয় করুন:

# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M

# 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

স্ক্রিপ্টের মাধ্যমে অ্যান্ড্রয়েড লগ সংগ্রহ করুন

ডিবাগিং সেশনের সময় অ্যান্ড্রয়েড ডিভাইসের লাইভ লগ ক্যাপচার করতে:

  1. বিদ্যমান লগগুলি মুছে ফেলতে, বাফারের আকার বাড়াতে এবং ভার্বোস লগিং ট্যাগ সেট করতে ‘Enable verbose debugging flags’- এর নির্দেশাবলী অনুসরণ করুন।
  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. কাজটি সম্পন্ন হলে, টার্মিনালে Ctrl+C (অথবা Mac-এ Cmd+C ) চেপে logcat প্রসেসটি বন্ধ করুন।
  7. এই সেশনের লগগুলো android-logs_YYYYMMDDmmss.txt ফাইলে সংরক্ষিত হয়। যেকোনো বাগ রিপোর্টের সাথে android-logs_YYYYMMDDmmss.txt এবং _versions.txt উভয় ফাইলই সংযুক্ত করুন।

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

যখন সিস্টেম-স্তরের সমস্যা, ক্র্যাশ ডাম্প, বা নিম্ন-স্তরের নেটওয়ার্ক এবং ব্লুটুথ ডিবাগিং সহ বিস্তারিত ডায়াগনস্টিক তথ্য শেয়ার করার প্রয়োজন হয়, তখন একটি সম্পূর্ণ অ্যান্ড্রয়েড বাগ রিপোর্ট তৈরি করুন:

  • ম্যাটার বিএলই কমিশনিং: বিএলই সংক্রান্ত কোনো ম্যাটার কমিশনিং সমস্যা রিপোর্ট করার সময়, সমস্যাটি পুনরায় তৈরি করার আগে ডেভেলপার অপশন-এ ( সেটিংস > ডেভেলপার অপশন > ব্লুটুথ এইচসিআই স্নুপ লগ সক্ষম করুন) ব্লুটুথ এইচসিআই স্নুপ লগ সক্রিয় করুন।
  • টেস্ট-পূর্ব প্রস্তুতি: আপনার টেস্ট চালানোর আগে, আপনার ডিভাইসে ভার্বোস ডিবাগিং প্রোপার্টিগুলো চালু করতে ‘Enable verbose debugging flags’- এর ধাপগুলো অনুসরণ করুন।
  • বাগ রিপোর্ট সংগ্রহ করুন: আপনার টেস্ট চালানোর পর এবং সমস্যাটি পুনরায় তৈরি করার পর, একটি সম্পূর্ণ বাগ রিপোর্ট আর্কাইভ তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
    adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip
  • উন্নত ডিবাগিং তথ্য: তৈরি হওয়া android-bugreport_YYYYMMDDmmss.zip ফাইলটিতে ব্যাপক সিস্টেম-স্তরের ডায়াগনস্টিক ডেটা থাকে—যার মধ্যে রয়েছে সম্পূর্ণ সিস্টেম ডাম্প, মেমরি পরিসংখ্যান, ব্যাটারি ডায়াগনস্টিকস এবং নিম্ন-স্তরের সাবসিস্টেম ট্রেস—যা ডিবাগিংয়ের জন্য আরও উন্নত তথ্য প্রদান করে।

কাস্ট হাব ডিভাইস লগ

এই পদ্ধতি ব্যবহার করে আপনি আপনার গুগল নেস্ট হাবের ডিভাইস লগ দেখতে পারেন, যা নিম্নলিখিত মডেলগুলির জন্য সমর্থিত:

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