স্মার্ট হোম অ্যাকশনের জন্য স্থানীয় পূর্ণতা সক্ষম করুন

1. আপনি শুরু করার আগে

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

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

72ffb320986092c.png

পূর্বশর্ত

আপনি কি নির্মাণ করবেন

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

2. শুরু করা

কার্যকলাপ নিয়ন্ত্রণ সক্ষম করুন

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

আপনি সহকারীর সাথে যে Google অ্যাকাউন্টটি ব্যবহার করতে চান তার জন্য কার্যকলাপ নিয়ন্ত্রণ পৃষ্ঠাটি খুলুন।

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

  • ওয়েব ও অ্যাপ অ্যাক্টিভিটি - উপরন্তু, Google পরিষেবা ব্যবহার করে এমন সাইট, অ্যাপ এবং ডিভাইস থেকে Chrome ইতিহাস এবং কার্যকলাপ অন্তর্ভুক্ত করুন চেকবক্স নির্বাচন করতে ভুলবেন না।
  • যন্ত্রের তথ্য
  • ভয়েস এবং অডিও কার্যকলাপ

একটি অ্যাকশন প্রকল্প তৈরি করুন

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

AWXw5E1m9zVgvVeyeL3uxwCX6DtWOCK6LRSLmOATFzjMbmE5cSWBdSVhJZDFpEFH2azZTK2eMs6OYYdMJYiGb5bKqFEzxaLyRUYuwvzvgTyp7cwwCX778 প্র

স্মার্ট হোম অ্যাপটি নির্বাচন করুন

অ্যাকশন কনসোলের ওভারভিউ স্ক্রিনে , স্মার্ট হোম নির্বাচন করুন।

36RsBUWBgbgsa5xZ7MJVMm1sIg07nXbfjv0mWCxXViaC5SlbL2gMigw9hgXsZQhNMHLLFOfiKdZsSTNXONFB1i47gksw3SBNpkVYl492kvgm5-Wery

স্মার্ট হোম এক্সপেরিয়েন্স কার্ডটি বেছে নিন এবং তারপরে আপনাকে আপনার প্রোজেক্ট কনসোলে পাঠানো হবে।

Pzghpsmc2lvleuvjfkjkqd_bvo4v8joplcrxsmyptfkkjl4pp6lqrm9r5tnveift9hmk- ukw3gwfpxtjqo4nurhb31oT8iagh1oxkj2nughghhd2nugghhdep_

Firebase CLI ইনস্টল করুন

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

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

npm install -g firebase-tools

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

firebase --version

চালিয়ে আপনার Google অ্যাকাউন্ট দিয়ে Firebase CLI অনুমোদন করুন:

firebase login

HomeGraph API সক্ষম করুন

HomeGraph API ব্যবহারকারীর হোম গ্রাফের মধ্যে ডিভাইস এবং তাদের অবস্থার স্টোরেজ এবং অনুসন্ধান সক্ষম করে। এই API ব্যবহার করতে, আপনাকে প্রথমে Google ক্লাউড কনসোল খুলতে হবে এবং HomeGraph API সক্ষম করতে হবে

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

5SVCzM8IZLi_9DV8M0nEklv16NXkpvM0bIzQK2hSyKyvnFHBxPOz90rbr72ayxzmxd5aNROOqC_Cp4outbdlwJdObDs0DIE_8vYzw6dovoqdObDs0DIE_8vYzw6dovoqdM0nEklv16mg

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

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

সোর্স কোড পান

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

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

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

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

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

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

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

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

ফায়ারবেসের সাথে সংযোগ করুন

app-start ডিরেক্টরিতে নেভিগেট করুন, তারপর আপনার অ্যাকশন প্রকল্পের সাথে Firebase CLI সেট আপ করুন:

cd app-start
firebase use <project-id>

Firebase প্রকল্প কনফিগার করুন

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

firebase init

CLI বৈশিষ্ট্য, রিয়েলটাইম ডেটাবেস , ফাংশন এবং হোস্টিং বৈশিষ্ট্য নির্বাচন করুন যাতে Firebase হোস্টিং অন্তর্ভুক্ত থাকে।

? Which Firebase CLI features do you want to set up for this directory? Press Space to select features, then
 Enter to confirm your choices.
❯◉ Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance
 ◯ Firestore: Configure security rules and indexes files for Firestore
 ◉ Functions: Configure a Cloud Functions directory and its files
 ◉ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
 ◯ Hosting: 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

এটি আপনার প্রকল্পের জন্য প্রয়োজনীয় 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

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

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

অবশেষে, প্রোজেক্ট কোডে public ডিরেক্টরি ব্যবহার করতে আপনার হোস্টিং সেটআপ কনফিগার করুন এবং বিদ্যমান index.html ফাইলটি ব্যবহার করুন। ESLint ব্যবহার করতে বলা হলে না নির্বাচন করুন।

? What do you want to use as your public directory?
public

? Configure as a single-page app (rewrite all urls to /index.html)?
Yes

? Set up automatic builds and deploys with GitHub?
No

? File public/index.html already exists. Overwrite?
 No

যদি 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-এর জন্য বিভিন্ন ক্লাউড ফাংশন সহ একটি ওয়েব অ্যাপ স্থাপন করে।

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

L60eA7MOnPmbBMl2XMipT9MdnP-RaVjyjf0Y93Y1b7mEyIsqZrrwczE7D3RQISRs-iusL1g4XbNmGhuA6-5sLcWefnczwNJEPfNLtwBsvqt92k8_8kbzv81 wg

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

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

আপনার অ্যাকশন কনসোল প্রকল্প কনফিগার করুন

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

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

Uso-o00XQXBHvOR9vQq9tmpYDYQJKsFEstsgRFnxPAJf7zJ2FxwhISiodo3dB1Tz49Okd6ivi66fjpo7rarS_GZelglGWCT1r9FzDGUl1r67ddGc9kGc1r9FzDGUl1r67pdgC9Fk

বিকাশ > আমন্ত্রণ ট্যাবে, আপনার কর্মের জন্য একটি প্রদর্শন নাম যোগ করুন এবং সংরক্ষণ করুন ক্লিক করুন। এই নামটি Google Home অ্যাপে দেখা যাবে।

gvC-TvmKDy-D-xjwkeCjNt__9ErA7DL8hZWa1oH1yPJ9SpYOepDYjxx6WnJ56IG-t37fJ65kmHISQdh72Ot2G-0tu6Flxf4gom5kvx_qeCjNt_5kvx_3gWf4gom5kvx_qmWf_3gf5v8 p1zw

s4yc1kow4xtkuqn1eyegidlu5otqmxq2pnbeaujm26oqmykkpjug7j5fymutlsaz1zbd-zkczll7zytzqw4bge3_oowjtsqj-a08vfzwrqquckquchucsquchulsquchqules

অ্যাকাউন্ট লিঙ্কিং সক্ষম করতে, বাম নেভিগেশনে বিকাশ > অ্যাকাউন্ট লিঙ্কিং বিকল্পটি নির্বাচন করুন। এই অ্যাকাউন্ট লিঙ্কিং সেটিংস ব্যবহার করুন:

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

ABC123

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

DEF456

অনুমোদন URL

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

টোকেন URL

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

rRyZTiBSTuPk3YtJtXjDK1pPftUxsaEhs9jzpvFtbHTD6bEwYxM8jV4MWxiljKA1bKVZrIRoO9O3jtBefLKf_OyMpukPjwIj8zGvyU3U3UGVZAWSKLVSQL w

আপনার অ্যাকাউন্ট লিঙ্কিং কনফিগারেশন সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন, তারপর আপনার প্রকল্পে পরীক্ষা সক্ষম করতে পরীক্ষা ক্লিক করুন৷

OgUvpQfXioygkRwPcaJpzjyNQDZy6enidUC8YMPaCOrZi0YeWCFsCJV9Gqg-_UfsqTnn4KEg--uE3Ymr0QuamDonF4RyYHtRKcULXABDuaEnjp2_02_01

আপনাকে সিমুলেটরে পুনঃনির্দেশিত করা হবে। ডিভাইসে টেস্টিং ( soCeBB1CkSIEqsBmDc8Cth6EjgcXUnrOHeOpLNlvMiiXM73Rmh8iBK1ZFLFd47kycYqIMq3Fm49ryAGUt79BXVPDyEB1IU3W0fgiL49iqzRzvxr2mqzvr2 ) আইকন।

2zbfeYpG-wEd2SFP07Wc4mJzHakLX7YvrNw3IV0_0Kd-TonfsKIvvjKWlwvrmTm5jLj3XPWqCtcDd5J2z6gwn9fnchpYVraw1j_mE4M4MVGYFY5MYFZV5MY কেএসজি

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

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

Google Home অ্যাপটি খুলুন এবং যাচাই করুন যে আপনি আপনার ওয়াশার ডিভাইস দেখতে পাচ্ছেন।

Xcwmbvambztpfoffofqtsr5i38stpwtqdcmfqwbbjetbgxt0fcjes285pa9k3qxsassptw0ken2g8yfkt0-xg6664vkmredds-hpegjoc4evjoc4evjoc4evjocgocgockgtegegeg

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

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

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

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

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

functions/index.js

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

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

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

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

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

7d59b31f8d2a988.png

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

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

মাঠ

বর্ণনা

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

সম্প্রচার ঠিকানা

UDP সম্প্রচার ঠিকানা

255.255.255.255

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

পোর্ট যেখানে Google Home UDP সম্প্রচার পাঠায়

3311

পোর্ট শুনুন

পোর্ট যেখানে Google হোম একটি প্রতিক্রিয়ার জন্য শোনে

3312

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

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

48656c6c6f4c6f63616c486f6d6553444b

4777bf63c53b6858.png

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

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

আপনি Local Home SDK টাইপিং প্যাকেজ ব্যবহার করে TypeScript-এ আপনার স্থানীয় পরিপূর্ণতা অ্যাপ তৈরি করবেন। স্টার্টার প্রকল্পে প্রদত্ত কঙ্কালটি দেখুন:

local/index.ts

/// <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 ইন্টেন্টের জন্য হ্যান্ডলারদের সংযুক্ত করে, তারপর স্থানীয় হোম SDK-কে জানানোর জন্য listen() পদ্ধতিতে কল করে যে অ্যাপটি প্রস্তুত।

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

অ্যাকশন কনসোলে প্রদত্ত স্ক্যান কনফিগারেশনের উপর ভিত্তি করে যখন Google হোম ডিভাইস স্থানীয় নেটওয়ার্কে যাচাই না করা ডিভাইসগুলি আবিষ্কার করে তখন স্থানীয় হোম 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 মানের একটির সাথে মিলবে, যা ব্যবহারকারীর হোম গ্রাফে স্থানীয় পরিপূর্ণতার জন্য উপলব্ধ হিসাবে ডিভাইসটিকে পতাকাঙ্কিত করে। Google একটি মিল খুঁজে পাওয়ার পরে, সেই ডিভাইসটিকে যাচাই করা এবং স্থানীয় পরিপূর্ণতার জন্য প্রস্তুত বলে মনে করা হয়।

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

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

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

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

local/index.ts

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

TypeScript অ্যাপ কম্পাইল করুন

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

cd local
npm install
npm run build

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

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

পরীক্ষা প্রকল্প স্থাপন

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

firebase deploy --only hosting

7. স্মার্ট ওয়াশার শুরু করুন

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

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

অ্যাকশন কনসোলে ডিভাইস আবিষ্কারের জন্য স্ক্যান কনফিগারেশনে প্রয়োগ করা একই 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

8. TypeScript অ্যাপটি ডিবাগ করুন

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

Chrome বিকাশকারী সরঞ্জামগুলিকে সংযুক্ত করুন৷

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

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

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

567f97789a7d8846.png

পরিদর্শক চালু করুন

Chrome ডেভেলপার টুল চালু করতে আপনার অ্যাপ URL এর অধীনে পরিদর্শন করুন ক্লিক করুন। কনসোল ট্যাবটি নির্বাচন করুন এবং যাচাই করুন যে আপনি আপনার TypeScript অ্যাপ দ্বারা মুদ্রিত IDENTIFY ইন্টেন্টের সামগ্রী দেখতে পাচ্ছেন৷

6b67ded470a4c8be.png

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

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

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

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

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

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

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

bc030517dacc3ac9.png

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

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

9. অভিনন্দন

764dbc83b95782a.png

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

আরও জানুন

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

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