ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের জন্য স্থানীয় পূর্ণতা সক্ষম করুন

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

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

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

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

পূর্বশর্ত

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

এই কোডল্যাবে, আপনি Firebase-এর সাথে পূর্বে তৈরি একটি স্মার্ট হোম ইন্টিগ্রেশন স্থাপন করবেন, তারপর ডেভেলপার কনসোলে একটি স্ক্যান কনফিগারেশন প্রয়োগ করবেন এবং Node.js-এ লেখা কমান্ডগুলি একটি ভার্চুয়াল ওয়াশার ডিভাইসে পাঠানোর জন্য একটি স্থানীয় অ্যাপ sing TypeScript তৈরি করবেন।

তুমি কি শিখবে

  • ডেভেলপার কনসোলে স্থানীয় পরিপূর্ণতা কীভাবে সক্ষম এবং কনফিগার করবেন।
  • লোকাল হোম SDK ব্যবহার করে লোকাল ফুলফিলমেন্ট অ্যাপ কীভাবে লিখবেন।
  • গুগল হোম স্পিকার বা গুগল নেস্ট স্মার্ট ডিসপ্লেতে লোড করা লোকাল ফুলফিলমেন্ট অ্যাপটি কীভাবে ডিবাগ করবেন।

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

2. শুরু করা

অ্যাক্টিভিটি নিয়ন্ত্রণ সক্ষম করুন

গুগল অ্যাসিস্ট্যান্ট ব্যবহার করার জন্য, আপনাকে অবশ্যই গুগলের সাথে কিছু অ্যাক্টিভিটি ডেটা শেয়ার করতে হবে। গুগল অ্যাসিস্ট্যান্টের সঠিকভাবে কাজ করার জন্য এই ডেটার প্রয়োজন; তবে, ডেটা শেয়ার করার প্রয়োজনীয়তা SDK-এর সাথে নির্দিষ্ট নয়। এই ডেটা শেয়ার করার জন্য, যদি আপনার ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে তবে একটি তৈরি করুন। আপনি যেকোনো Google অ্যাকাউন্ট ব্যবহার করতে পারেন—এটি আপনার ডেভেলপার অ্যাকাউন্ট হতে হবে না।

আপনি যে Google অ্যাকাউন্টটি Assistant-এর সাথে ব্যবহার করতে চান তার জন্য Activity Controls পৃষ্ঠাটি খুলুন।

নিম্নলিখিত টগল সুইচগুলি সক্রিয় আছে কিনা তা নিশ্চিত করুন:

  • ওয়েব এবং অ্যাপ অ্যাক্টিভিটি - এছাড়াও, " Include Chrome history and activity from sites, apps, and devices that use Google services" চেকবক্সটি নির্বাচন করতে ভুলবেন না।
  • ডিভাইসের তথ্য
  • ভয়েস এবং অডিও অ্যাক্টিভিটি

একটি ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন প্রকল্প তৈরি করুন

  1. ডেভেলপার কনসোলে যান।
  2. প্রকল্প তৈরি করুন ক্লিক করুন, প্রকল্পের জন্য একটি নাম লিখুন এবং প্রকল্প তৈরি করুন ক্লিক করুন।

প্রকল্পের নাম

ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন নির্বাচন করুন

ডেভেলপার কনসোলের প্রজেক্ট হোমে , ক্লাউড-টু- ক্লাউড এর অধীনে ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন যোগ করুন নির্বাচন করুন।

ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন যোগ করুন

ফায়ারবেস সিএলআই ইনস্টল করুন

ফায়ারবেস কমান্ড লাইন ইন্টারফেস (CLI) আপনাকে স্থানীয়ভাবে আপনার ওয়েব অ্যাপগুলি পরিবেশন করতে এবং ফায়ারবেস হোস্টিংয়ে আপনার ওয়েব অ্যাপ স্থাপন করতে দেবে।

CLI ইনস্টল করতে, টার্মিনাল থেকে নিম্নলিখিত npm কমান্ডটি চালান:

npm install -g firebase-tools

CLI সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা যাচাই করতে, চালান:

firebase --version

আপনার Google অ্যাকাউন্টের সাথে Firebase CLI অনুমোদন করুন এইভাবে:

firebase login

হোমগ্রাফ এপিআই সক্ষম করুন

HomeGraph API ব্যবহারকারীর Home Graph এর মধ্যে ডিভাইস এবং তাদের অবস্থা সংরক্ষণ এবং অনুসন্ধান সক্ষম করে। এই API ব্যবহার করতে, আপনাকে প্রথমে Google Cloud কনসোল খুলতে হবে এবং HomeGraph API সক্ষম করতে হবে

গুগল ক্লাউড কনসোলে, আপনার ইন্টিগ্রেশনের <project-id>. তারপর, HomeGraph API এর জন্য API Library স্ক্রিনে, Enable এ ক্লিক করুন।

5SVCzM8IZLi_9DV8M0nEklv16NXkpvM0bIzQK2hSyKyvnFHBxPOz90rbr72ayxzmxd5aN ROOqC_Cp4outbdlwJdObDs0DIE_8vYzw6dovoVrP9IZWlWsZxDS7UHOi1jiRbDMG8MqUA

৩. স্টার্টার অ্যাপটি চালান

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

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

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

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

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

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

স্টার্টার প্রজেক্টে নিম্নলিখিত সাবডিরেক্টরি রয়েছে:

  • public — স্মার্ট ওয়াশার নিয়ন্ত্রণ এবং নিরীক্ষণের জন্য ফ্রন্টেন্ড ওয়েব UI
  • functions —ক্লাউড ফাংশন যা ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের জন্য ক্লাউড পরিপূর্ণতা বাস্তবায়ন করে
  • localindex.ts এ ইনটেন্ট হ্যান্ডলার সহ স্কেলেটন স্থানীয় পরিপূর্ণতা অ্যাপ প্রকল্প

প্রদত্ত ক্লাউড পরিপূর্ণতা index.js এ নিম্নলিখিত ফাংশনগুলি অন্তর্ভুক্ত করে:

  • fakeauth — অ্যাকাউন্ট লিঙ্কিংয়ের জন্য অনুমোদনের শেষ বিন্দু
  • faketoken — অ্যাকাউন্ট লিঙ্কিংয়ের জন্য টোকেন এন্ডপয়েন্ট
  • smarthome — স্মার্ট হোমের উদ্দেশ্য পূরণের শেষ বিন্দু
  • reportstate — ডিভাইসের অবস্থা পরিবর্তনের ক্ষেত্রে HomeGraph API আহ্বান করে
  • updateDevice — রিপোর্ট স্টেট ট্রিগার করতে ভার্চুয়াল ডিভাইস দ্বারা ব্যবহৃত শেষ বিন্দু

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

app-start ডিরেক্টরিতে নেভিগেট করুন, তারপর আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন প্রকল্পের সাথে ফায়ারবেস সিএলআই সেট আপ করুন:

cd app-start
firebase use <project-id>

ফায়ারবেস প্রকল্প কনফিগার করুন

একটি ফায়ারবেস প্রকল্প শুরু করুন।

firebase init

CLI বৈশিষ্ট্য, রিয়েলটাইম ডেটাবেস এবং ফাংশন বৈশিষ্ট্য নির্বাচন করুন।

? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter
 to confirm your choices. (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to
 proceed)
>( ) Data Connect: Set up a Firebase Data Connect service
 ( ) Firestore: Configure security rules and indexes files for Firestore
 ( ) Genkit: Setup a new Genkit project with Firebase
 (*) Functions: Configure a Cloud Functions directory and its files
 ( ) App Hosting: Configure an apphosting.yaml file for App Hosting
 ( ) Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
 ( ) Storage: Configure a security rules file for Cloud Storage
 ( ) Emulators: Set up local emulators for Firebase products
 ( ) Remote Config: Configure a template file for Remote Config
 ( ) Extensions: Set up an empty Extensions manifest
 (*) Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision
default instance
 ( ) Data Connect: Set up a Firebase Data Connect service
 ( ) Firestore: Configure security rules and indexes files for Firestore

এটি আপনার প্রকল্পের জন্য প্রয়োজনীয় API এবং বৈশিষ্ট্যগুলি শুরু করবে।

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

? It seems like you haven't initialized Realtime Database in your project yet. Do you want to set it up?
Yes

? Please choose the location for your default Realtime Database instance:
us-central1

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

? File database.rules.json already exists. Do you want to overwrite it with the Realtime Database Security Rules for <project-ID>-default-rtdb from the Firebase Console?
No

যদি আপনি আপনার প্রকল্পটি পুনরায় চালু করেন, তাহলে কোডবেসটি চালু বা ওভাররাইট করতে চান কিনা জিজ্ঞাসা করা হলে "ওভাররাইট" নির্বাচন করুন।

? Would you like to initialize a new codebase, or overwrite an existing one?
Overwrite

আপনার ফাংশন কনফিগার করার সময়, আপনার ডিফল্ট ফাইলগুলি ব্যবহার করা উচিত এবং নিশ্চিত করা উচিত যে আপনি প্রকল্পের নমুনায় বিদ্যমান index.js এবং package.json ফাইলগুলি ওভাররাইট করছেন না।

? What language would you like to use to write Cloud Functions?
JavaScript

? Do you want to use ESLint to catch probable bugs and enforce style?
No

? File functions/package.json already exists. Overwrite?
No

? File functions/index.js already exists. Overwrite?
No

যদি আপনি আপনার প্রকল্পটি পুনরায় চালু করেন, তাহলে functions/.gitignore শুরু বা ওভাররাইট করতে চান কিনা জিজ্ঞাসা করা হলে "না" নির্বাচন করুন।

? File functions/.gitignore already exists. Overwrite?
No
? Do you want to install dependencies with npm now?
Yes

যদি ESLint ভুলবশত সক্রিয় হয়ে থাকে, তাহলে এটি নিষ্ক্রিয় করার দুটি পদ্ধতি রয়েছে:

  1. GUI ব্যবহার করে, প্রজেক্টের অধীনে ../functions ফোল্ডারে যান, লুকানো .eslintrc.js ফাইলটি নির্বাচন করুন এবং এটি মুছে ফেলুন। এটিকে একই নামের .eslintrc.json ফাইল ভেবে ভুল করবেন না।
  2. কমান্ড লাইন ব্যবহার করে:
    cd functions
    rm .eslintrc.js
    

আপনার সঠিক এবং সম্পূর্ণ Firebase কনফিগারেশন নিশ্চিত করতে, washer-done ডিরেক্টরি থেকে washer-start ডিরেক্টরিতে firebase.json ফাইলটি কপি করুন, washer-start এর ফাইলটি ওভাররাইট করুন।

washer-start ডিরেক্টরিতে:

cp -vp ../washer-done/firebase.json .

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

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

firebase deploy

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

...

✔ Deploy complete!

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

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

ওয়েব অ্যাপটি দেখতে আপনার ব্রাউজারে ( https://<project-id>.web.app ) হোস্টিং URL খুলুন। আপনি নিম্নলিখিত ইন্টারফেসটি দেখতে পাবেন:

L60eA7MOnPmbBMl2XMipT9MdnP-RaVjyjf0Y93Y1b7mEyIsqZrrwczE7D3RQISRs-iusL 1g4XbNmGhuA6-5sLcWefnczwNJEPfNLtwBsO4Tb9YvcAZBI6_rX19z8rxbik9Vq8F2fwg

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

এখন ডেভেলপার কনসোল ব্যবহার করে আপনার ব্যবহৃত ক্লাউড পরিষেবাটি গুগল অ্যাসিস্ট্যান্টের সাথে সংযুক্ত করার সময়।

আপনার ডেভেলপার কনসোল প্রকল্পটি কনফিগার করুন

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

একটি প্রদর্শন নাম যোগ করুন

অ্যাপ ব্র্যান্ডিং এর অধীনে, অ্যাপ আইকনের জন্য একটি png ফাইল আপলোড করুন, যার আকার 144 x 144px এবং নামকরণ করা হবে। .png .

একটি অ্যাপ আইকন যোগ করুন

অ্যাকাউন্ট লিঙ্কিং সক্ষম করতে এই অ্যাকাউন্ট লিঙ্কিং সেটিংস ব্যবহার করুন:

ক্লায়েন্ট আইডি

ABC123

ক্লায়েন্ট গোপনীয়তা

DEF456

অনুমোদনের URL

https://us-central1-<project-id>.cloudfunctions.net/fakeauth

টোকেন ইউআরএল

https://us-central1-<project-id>.cloudfunctions.net/faketoken

অ্যাকাউন্ট লিঙ্কিং URL গুলি আপডেট করুন

ক্লাউড পরিপূর্ণতা URL এর অধীনে, আপনার ক্লাউড ফাংশনের URL লিখুন যা স্মার্ট হোমের উদ্দেশ্য পূরণ করে।

https://us-central1-<project-id>.cloudfunctions.net/smarthome

ক্লাউড ফাংশন URL যোগ করুন

আপনার প্রোজেক্ট কনফিগারেশন সংরক্ষণ করতে সংরক্ষণ করুন- এ ক্লিক করুন, তারপর আপনার প্রোজেক্টে পরীক্ষা সক্ষম করতে পরবর্তী: পরীক্ষা করুন- এ ক্লিক করুন।

আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন পরীক্ষা করুন

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

আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন পরীক্ষা করার জন্য, আপনাকে আপনার প্রোজেক্টটিকে একটি Google অ্যাকাউন্টের সাথে লিঙ্ক করতে হবে। এটি একই অ্যাকাউন্টে সাইন ইন করা Google Assistant সারফেস এবং Google Home অ্যাপের মাধ্যমে পরীক্ষা করার সুযোগ দেয়।

  1. আপনার ফোনে, Google Assistant সেটিংস খুলুন। মনে রাখবেন যে আপনাকে কনসোলের মতো একই অ্যাকাউন্ট দিয়ে লগ ইন করতে হবে।
  2. গুগল অ্যাসিস্ট্যান্ট > সেটিংস > হোম কন্ট্রোল (অ্যাসিস্ট্যান্টের অধীনে) এ নেভিগেট করুন।
  3. উপরের ডানদিকে অনুসন্ধান আইকনে ক্লিক করুন।
  4. আপনার নির্দিষ্ট পরীক্ষামূলক অ্যাপটি খুঁজে পেতে [test] উপসর্গ ব্যবহার করে আপনার পরীক্ষামূলক অ্যাপটি অনুসন্ধান করুন।
  5. সেই আইটেমটি নির্বাচন করুন। এরপর গুগল অ্যাসিস্ট্যান্ট আপনার পরিষেবার সাথে প্রমাণীকরণ করবে এবং একটি SYNC অনুরোধ পাঠাবে, যেখানে আপনার পরিষেবাকে ব্যবহারকারীর জন্য ডিভাইসের একটি তালিকা প্রদান করতে বলবে।

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

XcWmBVamBZtPfOFqtsr5I38stPWTqDcMfQwbBjetBgxt0FCjEs285pa9K3QXSASptw0KYN2G8yfkT0-xg664V4PjqMreDDs-HPegHjOc4EVtReYPu-WKZyygq9Xmkf8X8z9177nBjQ

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

এখন আপনি আপনার ইন্টিগ্রেশনে স্থানীয় পরিপূর্ণতা যোগ করা শুরু করতে পারেন।

৪. ক্লাউড পরিপূর্ণতা আপডেট করুন

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

নিম্নলিখিত কোড স্নিপেটে দেখানো SYNC প্রতিক্রিয়াতে otherDeviceIds ক্ষেত্রটি যোগ করুন:

ফাংশন/ইন্ডেক্স.জেএস

app.onSync((body) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: '123',
      devices: [{
        id: 'washer',
        type: 'action.devices.types.WASHER',
        traits: [ ... ],
        name: { ... },
        deviceInfo: { ... },
        willReportState: true,
        attributes: {
          pausable: true,
        },
        otherDeviceIds: [{
          deviceId: 'deviceid123',
        }],
      }],
    },
  };
});

আপডেট করা প্রকল্পটি ফায়ারবেসে স্থাপন করুন:

firebase deploy --only functions

স্থাপনা সম্পন্ন হওয়ার পর, ওয়েব UI-তে নেভিগেট করুন এবং রিফ্রেশ বোতামে ক্লিক করুন। ae8d3b25777a5e30.png সম্পর্কে টুলবারে বোতাম। এটি একটি অনুরোধ সিঙ্ক অপারেশন ট্রিগার করে যাতে সহকারী আপডেট করা SYNC প্রতিক্রিয়া ডেটা পায়।

bf4f6a866160a982.png সম্পর্কে

৫. স্থানীয় পরিপূর্ণতা কনফিগার করুন

এই বিভাগে, আপনি আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনে স্থানীয় পরিপূর্ণতার জন্য প্রয়োজনীয় কনফিগারেশন বিকল্পগুলি যুক্ত করবেন। বিকাশের সময়, আপনি স্থানীয় পরিপূর্ণতা অ্যাপটি Firebase Hosting-এ প্রকাশ করবেন, যেখানে Google Home ডিভাইস এটি অ্যাক্সেস এবং ডাউনলোড করতে পারবে।

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

https://<project-id>.web.app/local-home/index.html

স্থানীয়-পূরণ.png

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

একটি নতুন স্ক্যান কনফিগারেশন যোগ করতে ডিভাইস আবিষ্কারের অধীনে + স্ক্যান কনফিগারেশন যোগ করুন ক্লিক করুন। প্রোটোকল হিসেবে UDP নির্বাচন করুন এবং নিম্নলিখিত বৈশিষ্ট্যগুলি পূরণ করুন:

মাঠ

বিবরণ

প্রস্তাবিত মান

আবিষ্কারের ঠিকানা

UDP আবিষ্কারের ঠিকানা

255.255.255.255

সম্প্রচার পোর্ট

গুগল হোম যে পোর্টে UDP সম্প্রচার পাঠায়

3311

লিসেনিং পোর্ট

যে পোর্টে গুগল হোম প্রতিক্রিয়া শোনে

3312

ডিসকভারি প্যাকেট

UDP ব্রডকাস্ট ডেটা পেলোড

48656c6c6f4c6f63616c486f6d6553444b

ডিভাইস-ডিসকভারি.পিএনজি

অবশেষে, আপনার পরিবর্তনগুলি প্রকাশ করতে উইন্ডোর নীচে সংরক্ষণ করুন এ ক্লিক করুন।

৬. স্থানীয় পরিপূর্ণতা বাস্তবায়ন করুন

আপনি লোকাল হোম SDK টাইপিং প্যাকেজ ব্যবহার করে টাইপস্ক্রিপ্টে আপনার লোকাল ফুলফিলমেন্ট অ্যাপ তৈরি করবেন। স্টার্টার প্রজেক্টে প্রদত্ত স্কেলেটনটি দেখুন:

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

/// <reference types="@google/local-home-sdk" />

import App = smarthome.App;
import Constants = smarthome.Constants;
import DataFlow = smarthome.DataFlow;
import Execute = smarthome.Execute;
import Intents = smarthome.Intents;
import IntentFlow = smarthome.IntentFlow;

...

class LocalExecutionApp {

  constructor(private readonly app: App) { }

  identifyHandler(request: IntentFlow.IdentifyRequest):
      Promise<IntentFlow.IdentifyResponse> {
    // TODO: Implement device identification
  }

  executeHandler(request: IntentFlow.ExecuteRequest):
      Promise<IntentFlow.ExecuteResponse> {
    // TODO: Implement local fulfillment
  }

  ...
}

const localHomeSdk = new App('1.0.0');
const localApp = new LocalExecutionApp(localHomeSdk);
localHomeSdk
  .onIdentify(localApp.identifyHandler.bind(localApp))
  .onExecute(localApp.executeHandler.bind(localApp))
  .listen()
  .then(() => console.log('Ready'))
  .catch((e: Error) => console.error(e));

লোকাল ফিলফিলমেন্টের মূল উপাদান হল smarthome.App ক্লাস। স্টার্টার প্রজেক্টটি IDENTIFY এবং EXECUTE ইন্টেন্টের জন্য হ্যান্ডলার সংযুক্ত করে, তারপর listen() পদ্ধতিতে কল করে লোকাল হোম SDK কে জানায় যে অ্যাপটি প্রস্তুত।

IDENTIFY হ্যান্ডলার যোগ করুন

ডেভেলপার কনসোলে প্রদত্ত স্ক্যান কনফিগারেশনের উপর ভিত্তি করে যখন Google Home ডিভাইস স্থানীয় নেটওয়ার্কে যাচাই না করা ডিভাইসগুলি আবিষ্কার করে তখন Local Home SDK আপনার IDENTIFY হ্যান্ডলারটি ট্রিগার করে।

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

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

স্থানীয়/সূচক .ts

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');

  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);
}

মনে রাখবেন যে verificationId ফিল্ডটি অবশ্যই আপনার SYNC প্রতিক্রিয়ার otherDeviceIds মানের সাথে মিলবে, যা ব্যবহারকারীর Home Graph এ ডিভাইসটিকে স্থানীয় পূরণের জন্য উপলব্ধ হিসাবে চিহ্নিত করবে। Google একটি মিল খুঁজে পাওয়ার পরে, সেই ডিভাইসটি যাচাইকৃত এবং স্থানীয় পূরণের জন্য প্রস্তুত বলে বিবেচিত হবে।

EXECUTE হ্যান্ডলার যোগ করুন

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

অ্যাপটি স্থানীয় ডিভাইসের সাথে যোগাযোগের জন্য TCP/UDP সকেট অথবা HTTP(S) অনুরোধ ব্যবহার করতে পারে। এই কোডল্যাবে, HTTP ভার্চুয়াল ডিভাইস নিয়ন্ত্রণের জন্য ব্যবহৃত প্রোটোকল হিসেবে কাজ করে। index.ts এ পোর্ট নম্বরটি SERVER_PORT ভেরিয়েবল হিসেবে সংজ্ঞায়িত করা হয়েছে।

ইনকামিং কমান্ডগুলি প্রক্রিয়া করতে এবং HTTP এর মাধ্যমে স্থানীয় ডিভাইসে পাঠাতে আপনার executeHandler পদ্ধতিতে নিম্নলিখিত কোডটি যোগ করুন:

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

executeHandler(request: IntentFlow.ExecuteRequest):
    Promise<IntentFlow.ExecuteResponse> {
  console.log("EXECUTE intent: " + JSON.stringify(request, null, 2));

  const command = request.inputs[0].payload.commands[0];
  const execution = command.execution[0];
  const response = new Execute.Response.Builder()
    .setRequestId(request.requestId);

  const promises: Array<Promise<void>> = command.devices.map((device) => {
    console.log("Handling EXECUTE intent for device: " + JSON.stringify(device));

    // Convert execution params to a string for the local device
    const params = execution.params as IWasherParams;
    const payload = this.getDataForCommand(execution.command, params);

    // Create a command to send over the local network
    const radioCommand = new DataFlow.HttpRequestData();
    radioCommand.requestId = request.requestId;
    radioCommand.deviceId = device.id;
    radioCommand.data = JSON.stringify(payload);
    radioCommand.dataType = 'application/json';
    radioCommand.port = SERVER_PORT;
    radioCommand.method = Constants.HttpOperation.POST;
    radioCommand.isSecure = false;

    console.log("Sending request to the smart home device:", payload);

    return this.app.getDeviceManager()
      .send(radioCommand)
      .then(() => {
        const state = {online: true};
        response.setSuccessState(device.id, Object.assign(state, params));
        console.log(`Command successfully sent to ${device.id}`);
      })
      .catch((e: IntentFlow.HandlerError) => {
        e.errorCode = e.errorCode || 'invalid_request';
        response.setErrorState(device.id, e.errorCode);
        console.error('An error occurred sending the command', e.errorCode);
      });
  });

  return Promise.all(promises)
    .then(() => {
      return response.build();
    })
    .catch((e) => {
      const err = new IntentFlow.HandlerError(request.requestId,
          'invalid_request', e.message);
      return Promise.reject(err);
    });
}

টাইপস্ক্রিপ্ট অ্যাপটি কম্পাইল করুন

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

cd local
npm install
npm run build

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

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

পরীক্ষামূলক প্রকল্পটি স্থাপন করুন

আপডেট করা প্রজেক্ট ফাইলগুলিকে Firebase Hosting-এ স্থাপন করুন যাতে আপনি Google Home ডিভাইস থেকে সেগুলি অ্যাক্সেস করতে পারেন।

firebase deploy --only hosting

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

এখন আপনার স্থানীয় পরিপূর্ণতা অ্যাপ এবং স্মার্ট ওয়াশারের মধ্যে যোগাযোগ পরীক্ষা করার সময়! কোডল্যাব স্টার্টার প্রকল্পে একটি ভার্চুয়াল স্মার্ট ওয়াশার রয়েছে—যা Node.js-এ লেখা—যা একটি স্মার্ট ওয়াশারের অনুকরণ করে যা ব্যবহারকারীরা স্থানীয়ভাবে নিয়ন্ত্রণ করতে পারে।

ডিভাইসটি কনফিগার করুন

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

প্যারামিটার

প্রস্তাবিত মান

ডিভাইস আইডি

deviceid123

ডিসকভারিপোর্টআউট

3311

ডিসকভারিপ্যাকেট

HelloLocalHomeSDK

প্রজেক্ট আইডি

আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের প্রোজেক্ট আইডি

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

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

৮. টাইপস্ক্রিপ্ট অ্যাপটি ডিবাগ করুন

পরবর্তী বিভাগে, আপনি যাচাই করবেন যে Google Home ডিভাইসটি স্থানীয় নেটওয়ার্কের মাধ্যমে ভার্চুয়াল স্মার্ট ওয়াশারে সঠিকভাবে স্ক্যান করতে, সনাক্ত করতে এবং কমান্ড পাঠাতে পারে। আপনি Google Home ডিভাইসের সাথে সংযোগ করতে, কনসোল লগ দেখতে এবং TypeScript অ্যাপটি ডিবাগ করতে 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-এর বিষয়বস্তু দেখতে পাচ্ছেন।

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

এই আউটপুটের অর্থ হল আপনার স্থানীয় পরিপূর্ণতা অ্যাপটি সফলভাবে ভার্চুয়াল ডিভাইসটি আবিষ্কার এবং সনাক্ত করেছে।

স্থানীয় পরিপূর্ণতা পরীক্ষা করুন

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

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

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

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

এটি প্ল্যাটফর্মটিকে আপনার টাইপস্ক্রিপ্ট অ্যাপে একটি EXECUTE ইন্টেন্ট পাঠাতে ট্রিগার করবে।

অনুসরণ

প্রতিটি কমান্ডের মাধ্যমে আপনি স্থানীয় স্মার্ট ওয়াশারের অবস্থার পরিবর্তন দেখতে পাচ্ছেন কিনা তা যাচাই করুন।

...
***** The washer is RUNNING *****
...
***** The washer is STOPPED *****

৯. অভিনন্দন

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

অভিনন্দন! আপনি স্থানীয় হোম SDK ব্যবহার করে স্থানীয় পরিপূর্ণতাকে ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনে একীভূত করেছেন।

আরও জানুন

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

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