স্থানীয় হোম ডিবাগ করা হচ্ছে

১. শুরু করার আগে

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

লোকাল হোম SDK আপনার স্মার্ট হোম ইন্টিগ্রেশনকে উন্নত করে, যাতে স্মার্ট হোম ইন্টেন্টগুলিকে সরাসরি Google Home ডিভাইসে রুট করা যায়, যা নির্ভরযোগ্যতা বৃদ্ধি করে এবং ব্যবহারকারীর কমান্ড প্রক্রিয়াকরণে বিলম্ব কমায়। এটি আপনাকে TypeScript বা JavaScript-এ একটি লোকাল ফুলফিলমেন্ট অ্যাপ লিখতে এবং স্থাপন করতে দেয় যা ডিভাইসগুলি সনাক্ত করে এবং যেকোনো Google Home স্মার্ট স্পিকার বা Google Nest স্মার্ট ডিসপ্লেতে কমান্ড কার্যকর করে। এরপর আপনার অ্যাপটি কমান্ড পূরণের জন্য বিদ্যমান স্ট্যান্ডার্ড প্রোটোকল ব্যবহার করে লোকাল এরিয়া নেটওয়ার্কের মাধ্যমে ব্যবহারকারীর বিদ্যমান স্মার্ট ডিভাইসগুলির সাথে সরাসরি যোগাযোগ করে।

72ffb320986092c.png সম্পর্কে

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

পূর্বশর্ত

তুমি কী তৈরি করবে

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

তুমি কি শিখবে

  • উৎপাদন সমস্যা সনাক্ত এবং সমাধানের জন্য GCP মেট্রিক্স এবং লগিং কীভাবে ব্যবহার করবেন।
  • কার্যকরী এবং API সমস্যা সনাক্ত করতে টেস্ট স্যুট কীভাবে ব্যবহার করবেন।
  • আপনার লোকাল হোম অ্যাপ তৈরি করার সময় Chrome Dev Tools কীভাবে ব্যবহার করবেন।

তোমার যা লাগবে

২. ওয়াশার অ্যাপটি চালান

সোর্স কোডটি পান

আপনার ডেভেলপমেন্ট মেশিনে এই কোডল্যাবের নমুনা ডাউনলোড করতে নিম্নলিখিত লিঙ্কে ক্লিক করুন:

...অথবা আপনি কমান্ড লাইন থেকে GitHub সংগ্রহস্থল ক্লোন করতে পারেন:

$ git clone https://github.com/google-home/smarthome-debug-local.git

প্রকল্প সম্পর্কে

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

Firebase-এর সাথে সংযোগ করুন

আমরা ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন কোডল্যাবের জন্য স্থানীয় পূর্ণতা সক্ষম করতে আপনার তৈরি করা একই প্রকল্পটি ব্যবহার করব, তবে আমরা এই কোডল্যাবে ডাউনলোড করা ফাইলগুলি স্থাপন করব।

app-faulty ডিরেক্টরিতে নেভিগেট করুন, তারপর ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন কোডল্যাবের জন্য স্থানীয় পূর্ণতা সক্ষম করুন -এ তৈরি আপনার ইন্টিগ্রেশন প্রকল্পের সাহায্যে ফায়ারবেস সিএলআই সেট আপ করুন:

$ cd app-faulty
$ firebase use <project-id>

ফায়ারবেসে স্থাপন করুন

app-faulty/functions ফোল্ডারে নেভিগেট করুন এবং npm ব্যবহার করে সমস্ত প্রয়োজনীয় নির্ভরতা ইনস্টল করুন:

$ cd functions
$ npm install

দ্রষ্টব্য: যদি আপনি নীচের বার্তাটি দেখেন, তাহলে আপনি এটি উপেক্ষা করে এগিয়ে যেতে পারেন। কিছু পুরানো নির্ভরতার কারণে এই সতর্কতা জারি করা হয়েছে এবং আপনি আরও বিস্তারিত তথ্য এখানে পেতে পারেন।

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

app-faulty/local/ ডিরেক্টরিতে নেভিগেট করুন এবং টাইপস্ক্রিপ্ট কম্পাইলার ডাউনলোড করতে এবং অ্যাপটি কম্পাইল করতে নিম্নলিখিত কমান্ডগুলি চালান:

$ cd ../local
$ npm install
$ npm run build

এটি index.ts (TypeScript) উৎস কম্পাইল করে এবং নিম্নলিখিত বিষয়বস্তুগুলিকে app-faulty/public/local-home/ ডিরেক্টরিতে রাখে:

  • bundle.js — স্থানীয় অ্যাপ এবং নির্ভরতা ধারণকারী কম্পাইল করা জাভাস্ক্রিপ্ট আউটপুট।
  • index.html — ডিভাইসে পরীক্ষার জন্য অ্যাপটি পরিবেশন করার জন্য ব্যবহৃত স্থানীয় হোস্টিং পৃষ্ঠা।

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

$ firebase deploy

এটি কনসোলের আউটপুট যা আপনার দেখা উচিত:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<projectcd -id>.web.app

এই কমান্ডটি Firebase এর জন্য বেশ কয়েকটি ক্লাউড ফাংশন সহ একটি ওয়েব অ্যাপ স্থাপন করে।

হোমগ্রাফ আপডেট করুন

ওয়েব অ্যাপটি দেখতে আপনার ব্রাউজারে ( https://<project-id>.web.app ) হোস্টিং URL খুলুন। ওয়েব UI তে, রিফ্রেশ করুন এ ক্লিক করুন। ae8d3b25777a5e30.png সম্পর্কে রিকোয়েস্ট সিঙ্ক ব্যবহার করে ত্রুটিপূর্ণ ওয়াশার অ্যাপ থেকে সর্বশেষ ডিভাইস মেটাডেটা দিয়ে হোমগ্রাফ আপডেট করার জন্য বোতাম।

fa3c47f293cfe0b7.png সম্পর্কে

গুগল হোম অ্যাপটি খুলুন এবং যাচাই করুন যে আপনি আপনার ওয়াশিং মেশিন ডিভাইসটিকে "ফল্টি ওয়াশার" নামে নতুন নামে দেখতে পাচ্ছেন। ডিভাইসটি এমন একটি ঘরে বরাদ্দ করতে ভুলবেন না যেখানে একটি নেস্ট ডিভাইস আছে।

2a082ee11d47ad1a.png সম্পর্কে

৩. স্মার্ট ওয়াশার চালু করুন

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

ডিভাইসটি চালু করুন

virtual-device/ ডিরেক্টরিতে যান এবং ডিভাইস স্ক্রিপ্টটি চালান, কনফিগারেশন প্যারামিটারগুলিকে আর্গুমেন্ট হিসেবে পাস করুন:

$ cd ../../virtual-device
$ npm install
$ npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

ডিভাইস স্ক্রিপ্টটি প্রত্যাশিত প্যারামিটারগুলির সাথে চলছে কিনা তা যাচাই করুন:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

৪. লোকাল হোম অ্যাপটি পরীক্ষা করুন

গুগল হোম ডিভাইসে ভয়েস কমান্ডের মাধ্যমে আপনার ডিভাইসে কমান্ড পাঠান, যেমন:

"হে গুগল, আমার ওয়াশিং মেশিন চালু করো।"

"হে গুগল, আমার ওয়াশিং মেশিন চালু করো।"

"হে গুগল, ফোর্স লোকাল।"

"হে গুগল, আমার ওয়াশিং মেশিন বন্ধ করো।"

"ফোর্স লোকাল" করার পর যখন আপনি ওয়াশার নিয়ন্ত্রণ করার চেষ্টা করবেন, তখন গুগল অ্যাসিস্ট্যান্ট "দুঃখিত, মনে হচ্ছে ত্রুটিপূর্ণ ওয়াশার এখনই উপলব্ধ নয়" বলে উত্তর দেবে।

এর মানে হল, ডিভাইসটি লোকাল পাথ দিয়ে পৌঁছানো যাচ্ছে না। "Hey Google, force local" জারি করার আগে এটি কাজ করেছিল কারণ যখন লোকাল পাথ দিয়ে ডিভাইসটি পৌঁছানো যাচ্ছে না তখন আমরা আবার ক্লাউড পাথ ব্যবহার করতে শুরু করব। তবে, "force local" এর পরে, ক্লাউড পাথে ফিরে যাওয়ার বিকল্পটি বন্ধ থাকে।

সমস্যাটি কী তা জানতে, আসুন আমাদের কাছে থাকা সরঞ্জামগুলি ব্যবহার করি: গুগল ক্লাউড প্ল্যাটফর্ম (জিসিপি) মেট্রিক্স এবং লগিং এবং ক্রোম ডেভেলপার সরঞ্জাম।

৫. লোকাল হোম অ্যাপটি ডিবাগ করুন।

পরবর্তী বিভাগে, আপনি Google দ্বারা প্রদত্ত সরঞ্জামগুলি ব্যবহার করে লোকাল পাথের মাধ্যমে ডিভাইসটি কেন পৌঁছানো যাচ্ছে না তা খুঁজে বের করবেন। আপনি Google Home ডিভাইসের সাথে সংযোগ স্থাপন করতে, কনসোল লগগুলি দেখতে এবং লোকাল হোম অ্যাপটি ডিবাগ করতে Google Chrome ডেভেলপার সরঞ্জামগুলি ব্যবহার করতে পারেন। আপনি ক্লাউড লগিং -এ কাস্টম লগগুলিও পাঠাতে পারেন যাতে আপনি আপনার লোকাল হোম অ্যাপে আপনার ব্যবহারকারীরা যে শীর্ষ ত্রুটিগুলি খুঁজে পাচ্ছেন সেগুলি সম্পর্কে সচেতন হতে পারেন।

Chrome ডেভেলপার টুল কানেক্ট করুন

আপনার স্থানীয় পরিপূর্ণতা অ্যাপের সাথে ডিবাগার সংযোগ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. নিশ্চিত করুন যে আপনি আপনার Google Home ডিভাইসটি এমন একজন ব্যবহারকারীর সাথে লিঙ্ক করেছেন যার ডেভেলপার কনসোল প্রকল্প অ্যাক্সেস করার অনুমতি রয়েছে।
  2. আপনার গুগল হোম ডিভাইসটি রিবুট করুন, যা এটিকে আপনার HTML এর URL এবং ডেভেলপার কনসোলে আপনার রাখা স্ক্যান কনফিগারেশন পেতে সক্ষম করে।
  3. আপনার ডেভেলপমেন্ট মেশিনে Chrome চালু করুন।
  4. একটি নতুন Chrome ট্যাব খুলুন এবং পরিদর্শক চালু করতে ঠিকানা ক্ষেত্রে chrome://inspect লিখুন।

পৃষ্ঠায় আপনার ডিভাইসের একটি তালিকা দেখতে পাওয়া উচিত এবং আপনার অ্যাপ URL আপনার Google Home ডিভাইসের নামে প্রদর্শিত হবে।

567f97789a7d8846.png সম্পর্কে

ইন্সপেক্টর চালু করুন

Chrome Developer Tools চালু করতে আপনার অ্যাপ URL-এর নীচে Inspect-এ ক্লিক করুন। Console ট্যাবটি নির্বাচন করুন এবং যাচাই করুন যে আপনি আপনার TypeScript অ্যাপ দ্বারা মুদ্রিত IDENTIFY intent-এর বিষয়বস্তু দেখতে পাচ্ছেন।

774c460c59f9f84a.png সম্পর্কে

এই আউটপুটটির অর্থ হল IDENTIFY হ্যান্ডলারটি সফলভাবে ট্রিগার করা হয়েছে, কিন্তু IdentifyResponse এ ফিরে আসা verificationId আপনার HomeGraph-এর কোনও ডিভাইসের সাথে মেলে না। কেন তা খুঁজে বের করার জন্য কিছু কাস্টম লগ যোগ করা যাক।

কাস্টম লগ যোগ করুন

যদিও Local Home SDK দ্বারা একটি DEVICE_VERIFICATION_FAILED ত্রুটি মুদ্রিত হয়েছে, তবে এটি মূল কারণ খুঁজে পেতে খুব বেশি সাহায্য করে না। আসুন কিছু কাস্টম লগ যোগ করি যাতে নিশ্চিত করা যায় যে আমরা স্ক্যান ডেটা সঠিকভাবে পড়ছি এবং প্রক্রিয়া করছি, এবং মনে রাখবেন যে, যদি আমরা একটি ত্রুটি দিয়ে প্রতিশ্রুতি প্রত্যাখ্যান করি, তাহলে ত্রুটি বার্তাটি আসলে ক্লাউড লগিং- এও পাঠানো হয়।

স্থানীয়/সূচক.টিএস

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  // Is there something wrong here?
  const localDeviceId = Buffer.from(scanData.data);
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  // Add custom logs
  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_device', 'Invalid device id from scan data ' +
        localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

এছাড়াও, স্থানীয় হোম অ্যাপের সংস্করণটি পরিবর্তন করুন, যাতে আমরা সঠিক সংস্করণটি ব্যবহার করছি কিনা তা সনাক্ত করতে পারি।

স্থানীয়/সূচক.টিএস

const localHomeSdk = new App('1.0.1');

কাস্টম লগ যোগ করার পর, আপনাকে আবার অ্যাপটি কম্পাইল করতে হবে এবং Firebase-এ পুনরায় স্থাপন করতে হবে।

$ cd ../app-faulty/local
$ npm run build
$ firebase deploy --only hosting

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

ecc56508ebcf9ab.png সম্পর্কে

ক্লাউড লগিং অ্যাক্সেস করুন

চলুন দেখে নেওয়া যাক কিভাবে ক্লাউড লগিং ব্যবহার করে আপনার ত্রুটিগুলি খুঁজে বের করবেন। আপনার প্রকল্পের জন্য ক্লাউড লগিং অ্যাক্সেস করতে:

  1. ক্লাউড প্ল্যাটফর্ম কনসোলে, প্রজেক্ট পৃষ্ঠায় যান।
  2. আপনার স্মার্ট হোম প্রকল্পটি নির্বাচন করুন।
  3. অপারেশনস এর অধীনে, লগিং > লগস এক্সপ্লোরার নির্বাচন করুন।

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

উন্নত ফিল্টার ব্যবহার করুন

আমরা জানি যে IDENTIFY ইনটেন্টে ত্রুটি ঘটছে, কারণ স্থানীয় ডিভাইসটি সনাক্ত করতে ব্যর্থ হওয়ার কারণে স্থানীয় পাথ কাজ করছে না। যাইহোক, আমরা সমস্যাটি ঠিক কী তা জানতে চাই, তাই প্রথমে IDENTIFY হ্যান্ডলারে ঘটে যাওয়া ত্রুটিগুলি ফিল্টার করা যাক।

"Show query" টগল ক্লিক করুন, এটি একটি "Query builder" বাক্সে পরিণত হবে। "Query builder" বাক্সে jsonPayload.intent="IDENTIFY" লিখুন এবং " Run query" বাটনে ক্লিক করুন।

4c0b9d2828ee2447.png সম্পর্কে

ফলস্বরূপ, আপনি IDENTIFY হ্যান্ডলারে থাকা সমস্ত ত্রুটি লগ পাবেন। এরপর, শেষ ত্রুটিটি প্রসারিত করুন। আপনি IDENTIFY হ্যান্ডলারে প্রতিশ্রুতি প্রত্যাখ্যান করার সময় সেট করা errorCode এবং debugString পাবেন।

71f2f156c6887496.png সম্পর্কে

debugString থেকে আমরা বলতে পারি যে স্থানীয় ডিভাইস আইডিটি প্রত্যাশিত ফর্ম্যাটে নেই। স্থানীয় হোম অ্যাপটি স্থানীয় ডিভাইস আইডিটিকে একটি স্ট্রিং হিসেবে পাওয়ার আশা করে যা deviceid দিয়ে শুরু হবে এবং তারপরে 3 সংখ্যা থাকবে, কিন্তু এখানে স্থানীয় ডিভাইস আইডিটি একটি হেক্স স্ট্রিং।

ত্রুটিটি ঠিক করুন

সোর্স কোডে ফিরে গিয়ে যেখানে আমরা স্ক্যান ডেটা থেকে স্থানীয় ডিভাইস আইডি পার্স করি, আমরা লক্ষ্য করি যে স্ট্রিংটিকে বাইটে রূপান্তর করার সময় আমরা এনকোডিং প্রদান করিনি। স্ক্যান ডেটা একটি হেক্স স্ট্রিং হিসাবে গৃহীত হয়, তাই Buffer.from() কল করার সময় hex অক্ষর এনকোডিং হিসাবে পাস করুন।

স্থানীয়/সূচক.টিএস

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  const localDeviceId = Buffer.from(scanData.data, 'hex');
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
      'invalid_device', 'Invalid device id from scan data ' +
      localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

এছাড়াও, স্থানীয় হোম অ্যাপের সংস্করণটি পরিবর্তন করুন, যাতে আমরা সঠিক সংস্করণটি ব্যবহার করছি কিনা তা সনাক্ত করতে পারি।

স্থানীয়/সূচক.টিএস

const localHomeSdk = new App('1.0.2');

ত্রুটি ঠিক করার পর, অ্যাপটি কম্পাইল করুন এবং Firebase-এ পুনরায় স্থাপন করুন। app-faulty/local এ, চালান:

$ npm run build
$ firebase deploy --only hosting

আপনার সংশোধন পরীক্ষা করুন

স্থাপনের পরে, আপনার Google Home ডিভাইসটি রিবুট করুন যাতে এটি আপডেট করা স্থানীয় হোম অ্যাপটি লোড করতে পারে। নিশ্চিত করুন যে স্থানীয় হোম অ্যাপ সংস্করণটি 1.0.2, এবং এবার, আপনি Chrome Developers Tools Console-এ কোনও ত্রুটি দেখতে পাবেন না।

c8456f7b5f77f894.png সম্পর্কে

এখন আপনি আবার আপনার ডিভাইসে কমান্ড পাঠানোর চেষ্টা করতে পারেন।

"হে গুগল, ফোর্স লোকাল।"

"হে গুগল, আমার ওয়াশিং মেশিন বন্ধ করো।"

"হে গুগল, আমার ওয়াশিং মেশিন চালু করো।"

...

"হে গুগল, জোর করে ডিফল্ট করো।"

৬. স্মার্ট হোমের জন্য টেস্ট স্যুট চালান

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

স্মার্ট হোমের জন্য টেস্ট স্যুট চালান

টেস্ট স্যুট দ্বারা আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন পরীক্ষা করতে এই নির্দেশাবলী অনুসরণ করুন:

  1. আপনার ওয়েব ব্রাউজারে, স্মার্ট হোমের জন্য টেস্ট স্যুটটি খুলুন।
  2. উপরের ডানদিকের কোণায় থাকা বোতামটি ব্যবহার করে Google-এ সাইন ইন করুন। এটি টেস্ট স্যুটকে সরাসরি Google Assistant-এ কমান্ড পাঠাতে দেয়।
  3. প্রজেক্ট আইডি ক্ষেত্রে, আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের প্রজেক্ট আইডি লিখুন। এবং তারপর এগিয়ে যেতে NEXT এ ক্লিক করুন।
  4. টেস্ট সেটিংস ধাপে, ডিভাইস এবং ট্রেইস বিভাগে আপনার ত্রুটিপূর্ণ ওয়াশারটি দেখতে পাবেন।
  5. টেস্ট রিকোয়েস্ট সিঙ্ক অপশনটি বন্ধ করুন কারণ স্যাম্পল ওয়াশার অ্যাপে ওয়াশার যোগ/সরানো/নাম পরিবর্তন করার জন্য কোনও UI নেই। একটি প্রোডাকশন সিস্টেমে, ব্যবহারকারী যখনই ডিভাইস যোগ/সরানো/নাম পরিবর্তন করেন তখন আপনাকে রিকোয়েস্ট সিঙ্ক ট্রিগার করতে হবে।
  6. আমরা লোকাল এবং ক্লাউড উভয় পাথ পরীক্ষা করতে যাচ্ছি, তাই লোকাল হোম SDK বিকল্পটি সক্রিয় রাখুন।
  7. পরীক্ষা চালানো শুরু করতে পরবর্তী: পরীক্ষার পরিবেশে ক্লিক করুন।

67433d9190fa770e.png সম্পর্কে

পরীক্ষাগুলি সম্পন্ন হলে, আপনি লক্ষ্য করবেন যে স্থানীয় পাথে Pause/Resume পরীক্ষাগুলি ব্যর্থ হচ্ছে এবং ক্লাউড পাথে Pause/Resume পরীক্ষাগুলি সম্পন্ন হচ্ছে।

d1ebd5cfae2a2a47.png

ত্রুটি বার্তা বিশ্লেষণ করুন

ব্যর্থ পরীক্ষার ক্ষেত্রে ত্রুটি বার্তাগুলি আরও ঘনিষ্ঠভাবে দেখুন। এগুলি আপনাকে সেই পরীক্ষার জন্য প্রত্যাশিত অবস্থা কী এবং প্রকৃত অবস্থা কী ছিল তা বলে। এই ক্ষেত্রে, "Pause the Washer" এর জন্য, প্রত্যাশিত অবস্থা হল isPaused: true , কিন্তু প্রকৃত অবস্থায় আমরা পেয়েছি isPaused: false । একইভাবে, "Pause the Washer" এর জন্য, প্রত্যাশিত অবস্থা হল isPaused: true , কিন্তু প্রকৃত অবস্থায় আমরা পেয়েছি isPaused: false

6bfd3acef9c16b84.png সম্পর্কে

ত্রুটি বার্তাগুলি থেকে, মনে হচ্ছে স্থানীয় পথে, আমরা isPaused অবস্থাটি বিপরীতভাবে সেট করছি।

ত্রুটিটি সনাক্ত করুন এবং ঠিক করুন

চলুন সোর্স কোড খুঁজে বের করি যেখানে লোকাল হোম অ্যাপ ডিভাইসে এক্সিকিউশন কমান্ড পাঠায়। getDataCommand() হল executeHandler() দ্বারা ডাকা ফাংশন যা ডিভাইসে প্রেরিত এক্সিকিউশন কমান্ডে payload সেট করে।

স্থানীয়/সূচক.টিএস

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                // Is there something wrong here?
                isPaused: params.pause ? false : true
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

আমরা আসলে isPause বিপরীত অবস্থায় সেট করছি, params.pause true হলে এটি সত্য এবং অন্যথায় false হলে এটি true সেট করা উচিত। তাহলে, আসুন এটি ঠিক করি।

স্থানীয়/সূচক.টিএস

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                isPaused: params.pause ? true : false
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

স্থানীয় হোম অ্যাপের সংস্করণটি পরিবর্তন করুন, যাতে আমরা সঠিক সংস্করণটি ব্যবহার করছি কিনা তা সনাক্ত করতে পারি।

স্থানীয়/সূচক.টিএস

const localHomeSdk = new App('1.0.3');

অ্যাপটি আবার কম্পাইল করতে এবং Firebase-এ পুনরায় স্থাপন করতে ভুলবেন না। app-faulty/local এ, চালান:

$ npm run build
$ firebase deploy --only hosting

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

আপনার সংশোধন পরীক্ষা করুন

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

b7fc8c5d3c727d8d.png সম্পর্কে

৭. অভিনন্দন

764dbc83b95782a.png সম্পর্কে

অভিনন্দন! আপনি স্মার্ট হোম এবং ক্লাউড লগিংয়ের জন্য টেস্ট স্যুট ব্যবহার করে লোকাল হোম অ্যাপের সমস্যা সমাধানের পদ্ধতি সফলভাবে শিখেছেন।

আরও জানুন

এখানে কিছু অতিরিক্ত জিনিস যা আপনি চেষ্টা করতে পারেন:

আপনি ব্যবহারকারীদের কাছে আপনার ইন্টিগ্রেশন প্রকাশ করার জন্য সার্টিফিকেশন প্রক্রিয়া সহ, পর্যালোচনার জন্য একটি ইন্টিগ্রেশন পরীক্ষা এবং জমা দেওয়ার বিষয়ে আরও জানতে পারেন।