Google Assistant-এর সাথে স্মার্ট হোম ডিভাইসগুলি কানেক্ট করুন

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

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

অনুসরণ

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

d009cef0f903d284.jpeg সম্পর্কে

পূর্বশর্ত

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

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

তুমি কি শিখবে

  • কিভাবে একটি স্মার্ট হোম ক্লাউড পরিষেবা স্থাপন করবেন
  • আপনার পরিষেবাটি Assistant-এর সাথে কীভাবে সংযুক্ত করবেন
  • ডিভাইসের অবস্থা পরিবর্তনগুলি Google-এ কীভাবে প্রকাশ করবেন

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

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

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

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

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

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

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

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

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

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

  • public: স্মার্ট ওয়াশারের অবস্থা সহজেই নিয়ন্ত্রণ এবং নিরীক্ষণ করার জন্য একটি ফ্রন্টএন্ড UI।
  • functions: একটি সম্পূর্ণরূপে বাস্তবায়িত ক্লাউড পরিষেবা যা ফায়ারবেস এবং ফায়ারবেস রিয়েলটাইম ডেটাবেসের জন্য ক্লাউড ফাংশন সহ স্মার্ট ওয়াশার পরিচালনা করে।

আপনার গুগল হোম ডেভেলপার কনসোল প্রকল্পে ফায়ারবেস যোগ করুন

পদ্ধতি ১: ফায়ারবেস কনসোলের মাধ্যমে

  1. ফায়ারবেসে যান।
  2. একটি ফায়ারবেস প্রকল্প তৈরি করুন ক্লিক করুন।
    ফায়ারবেস প্রকল্প তৈরি করুন
  3. "একটি প্রকল্প তৈরি করুন " স্ক্রিনে, "গুগল ক্লাউড প্রকল্পে ফায়ারবেস যোগ করুন" এ ক্লিক করুন।
    গুগল ক্লাউড প্রজেক্টে ফায়ারবেস যোগ করুন
  4. শুরু করুন স্ক্রিনে, গুগল হোম ডেভেলপার কনসোলে আপনার তৈরি করা গুগল ক্লাউড প্রকল্পটি নির্বাচন করুন এবং তারপরে চালিয়ে যান ক্লিক করুন।
    গুগল ক্লাউড প্রোজেক্ট নির্বাচন করুন

পদ্ধতি ২: ফায়ারবেস সিএলআই এর মাধ্যমে

firebase projects:addfirebase

Firebase যোগ করার জন্য আপনার তৈরি করা Google Home Developer Console প্রকল্পটি নির্বাচন করুন।

যখন আপনার Google Home Developer Console প্রকল্পে Firebase যোগ করা হবে, তখন এটি Firebase কনসোলে প্রদর্শিত হবে। Firebase প্রকল্পের প্রকল্প আইডি আপনার Google Home Developer Console প্রকল্প আইডির সাথে সারিবদ্ধ হবে।

ক্লাউড প্রকল্প যোগ করা হয়েছে

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

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

cd washer-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 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 খুলুন। আপনি নিম্নলিখিত ইন্টারফেসটি দেখতে পাবেন:

5845443e94705557.png সম্পর্কে

এই ওয়েব 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 যোগ করুন

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

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

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

৪. একটি ওয়াশিং মেশিন তৈরি করুন

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

  • যখন Assistant জানতে চায় যে ব্যবহারকারী কোন ডিভাইসগুলি সংযুক্ত করেছেন, তখন একটি SYNC ইনটেন্ট তৈরি হয়। ব্যবহারকারী যখন কোনও অ্যাকাউন্ট লিঙ্ক করেন, তখন এটি আপনার পরিষেবাতে পাঠানো হয়। আপনার সমস্ত ব্যবহারকারীর ডিভাইস এবং তাদের ক্ষমতার একটি JSON পেলোড দিয়ে প্রতিক্রিয়া জানানো উচিত।
  • যখন অ্যাসিস্ট্যান্ট কোনও ডিভাইসের বর্তমান অবস্থা বা স্থিতি জানতে চায় তখন একটি QUERY ইনটেন্ট তৈরি হয়। আপনার প্রতিটি অনুরোধ করা ডিভাইসের অবস্থা সহ একটি JSON পেলোড দিয়ে প্রতিক্রিয়া জানানো উচিত।
  • যখন Assistant কোনও ব্যবহারকারীর পক্ষ থেকে কোনও ডিভাইস নিয়ন্ত্রণ করতে চায়, তখন একটি EXECUTE ইন্টেন্ট তৈরি হয়। প্রতিটি অনুরোধ করা ডিভাইসের এক্সিকিউশন স্ট্যাটাস সহ আপনার JSON পেলোড দিয়ে প্রতিক্রিয়া জানানো উচিত।
  • যখন ব্যবহারকারী Assistant থেকে তাদের অ্যাকাউন্ট আনলিঙ্ক করে তখন একটি DISCONNECT ইন্টেন্ট দেখা দেয়। আপনার এই ব্যবহারকারীর ডিভাইসের ইভেন্টগুলি Assistant-এ পাঠানো বন্ধ করা উচিত।

আপনি নিম্নলিখিত বিভাগগুলিতে এই উদ্দেশ্যগুলি পরিচালনা করার জন্য পূর্বে যে ফাংশনগুলি স্থাপন করেছিলেন সেগুলি আপডেট করবেন।

SYNC প্রতিক্রিয়া আপডেট করুন

functions/index.js খুলুন, যাতে Assistant-এর অনুরোধের উত্তর দেওয়ার কোড থাকে।

ডিভাইসের মেটাডেটা এবং ক্ষমতা ফেরত দিয়ে আপনাকে একটি SYNC ইন্টেন্ট পরিচালনা করতে হবে। ডিভাইসের তথ্য এবং কাপড় ধোয়ার জন্য প্রস্তাবিত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে onSync অ্যারেতে JSON আপডেট করুন।

ইনডেক্স.জেএস

app.onSync((body) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: USER_ID,
      devices: [{
        id: 'washer',
        type: 'action.devices.types.WASHER',
        traits: [
          'action.devices.traits.OnOff',
          'action.devices.traits.StartStop',
          'action.devices.traits.RunCycle',
        ],
        name: {
          defaultNames: ['My Washer'],
          name: 'Washer',
          nicknames: ['Washer'],
        },
        deviceInfo: {
          manufacturer: 'Acme Co',
          model: 'acme-washer',
          hwVersion: '1.0',
          swVersion: '1.0.1',
        },
        willReportState: true,
        attributes: {
          pausable: true,
        },
      }],
    },
  };
});

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

Firebase CLI ব্যবহার করে আপডেট করা ক্লাউড পরিপূর্ণতা স্থাপন করুন:

firebase deploy --only functions

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

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

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

ae252220753726f6.png সম্পর্কে

৫. কমান্ড এবং কোয়েরি পরিচালনা করুন

এখন যেহেতু আপনার ক্লাউড পরিষেবাটি সঠিকভাবে ওয়াশার ডিভাইসটি Google-কে রিপোর্ট করছে, তাই আপনাকে ডিভাইসের অবস্থা অনুরোধ করার এবং কমান্ড পাঠানোর ক্ষমতা যোগ করতে হবে।

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

একটি QUERY ইন্টেন্টে ডিভাইসের একটি সেট থাকে। প্রতিটি ডিভাইসের জন্য, আপনাকে তার বর্তমান অবস্থা দিয়ে প্রতিক্রিয়া জানাতে হবে।

functions/index.js এ, ইনটেন্ট রিকোয়েস্টে থাকা টার্গেট ডিভাইসের তালিকা প্রক্রিয়া করার জন্য QUERY হ্যান্ডলারটি সম্পাদনা করুন।

ইনডেক্স.জেএস

app.onQuery(async (body) => {
  const {requestId} = body;
  const payload = {
    devices: {},
  };
  const queryPromises = [];
  const intent = body.inputs[0];
  for (const device of intent.payload.devices) {
    const deviceId = device.id;
    queryPromises.push(queryDevice(deviceId)
        .then((data) => {
        // Add response to device payload
          payload.devices[deviceId] = data;
        }
        ));
  }
  // Wait for all promises to resolve
  await Promise.all(queryPromises);
  return {
    requestId: requestId,
    payload: payload,
  };
});

অনুরোধে থাকা প্রতিটি ডিভাইসের জন্য, রিয়েলটাইম ডাটাবেসে সংরক্ষিত বর্তমান অবস্থা ফেরত দিন। ওয়াশারের অবস্থা ডেটা ফেরত দিতে queryFirebase এবং queryDevice ফাংশন আপডেট করুন।

ইনডেক্স.জেএস

const queryFirebase = async (deviceId) => {
  const snapshot = await getFirebaseRef().child(deviceId).once('value');
  const snapshotVal = snapshot.val();
  return {
    on: snapshotVal.OnOff.on,
    isPaused: snapshotVal.StartStop.isPaused,
    isRunning: snapshotVal.StartStop.isRunning,
  };
};

const queryDevice = async (deviceId) => {
  const data = await queryFirebase(deviceId);
  return {
    on: data.on,
    isPaused: data.isPaused,
    isRunning: data.isRunning,
    currentRunCycle: [{
      currentCycle: 'rinse',
      nextCycle: 'spin',
      lang: 'en',
    }],
    currentTotalRemainingTime: 1212,
    currentCycleRemainingTime: 301,
  };
};

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

EXECUTE ইন্টেন্ট ডিভাইসের অবস্থা আপডেট করার জন্য কমান্ড পরিচালনা করে। প্রতিক্রিয়া প্রতিটি কমান্ডের অবস্থা ফেরত দেয়—যেমন, SUCCESS , ERROR , অথবা PENDING এবং নতুন ডিভাইসের অবস্থা।

functions/index.js এ, EXECUTE হ্যান্ডলারটি সম্পাদনা করে আপডেটের প্রয়োজন এমন বৈশিষ্ট্যের তালিকা এবং প্রতিটি কমান্ডের জন্য টার্গেট ডিভাইসের সেট প্রক্রিয়া করুন:

ইনডেক্স.জেএস

app.onExecute(async (body) => {
  const {requestId} = body;
  // Execution results are grouped by status
  const result = {
    ids: [],
    status: 'SUCCESS',
    states: {
      online: true,
    },
  };

  const executePromises = [];
  const intent = body.inputs[0];
  for (const command of intent.payload.commands) {
    for (const device of command.devices) {
      for (const execution of command.execution) {
        executePromises.push(
            updateDevice(execution, device.id)
                .then((data) => {
                  result.ids.push(device.id);
                  Object.assign(result.states, data);
                })
                .catch(() => functions.logger.error('EXECUTE', device.id)));
      }
    }
  }

  await Promise.all(executePromises);
  return {
    requestId: requestId,
    payload: {
      commands: [result],
    },
  };
});

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

ইনডেক্স.জেএস

const updateDevice = async (execution, deviceId) => {
  const {params, command} = execution;
  let state; let ref;
  switch (command) {
    case 'action.devices.commands.OnOff':
      state = {on: params.on};
      ref = getFirebaseRef().child(deviceId).child('OnOff');
      break;
    case 'action.devices.commands.StartStop':
      state = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = getFirebaseRef().child(deviceId).child('StartStop');
      break;
    case 'action.devices.commands.PauseUnpause':
      const data = await queryDevice(deviceId);
      state = (data.isPaused === false && data.isRunning === false)
        ? {isRunning: false, isPaused: false}
        : {isRunning: !params.pause, isPaused: params.pause};
      ref = getFirebaseRef().child(deviceId).child('StartStop');
      break;
  }

  return ref.update(state)
      .then(() => state);
};

৬. আপনার ইন্টিগ্রেশন পরীক্ষা করুন

তিনটি উদ্দেশ্য বাস্তবায়নের পর, আপনি পরীক্ষা করতে পারেন যে আপনার ইন্টিগ্রেশন ওয়াশার নিয়ন্ত্রণ করে।

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

Firebase CLI ব্যবহার করে আপডেট করা ক্লাউড পরিপূর্ণতা স্থাপন করুন:

firebase deploy --only functions

ওয়াশিং মেশিন পরীক্ষা করুন

এখন আপনি যখন আপনার ফোনের মাধ্যমে নিম্নলিখিত ভয়েস কমান্ডগুলির যেকোনো একটি চেষ্টা করবেন তখন মান পরিবর্তন দেখতে পাবেন:

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

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

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

আপনি প্রশ্ন জিজ্ঞাসা করে আপনার ওয়াশিং মেশিনের বর্তমান অবস্থাও দেখতে পারেন।

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

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

"হে গুগল, আমার ওয়াশিং মেশিন কোন সাইকেলে আছে?"

আপনি Firebase Console এর Functions বিভাগে আপনার ফাংশনের অধীনে প্রদর্শিত লগগুলিতে এই প্রশ্নগুলি এবং কমান্ডগুলি দেখতে পারেন। Write and view logs এ Firebase লগ সম্পর্কে আরও জানুন।

আপনি লগিং > লগস এক্সপ্লোরারে নেভিগেট করে গুগল ক্লাউড কনসোলে এই প্রশ্নগুলি এবং কমান্ডগুলি খুঁজে পেতে পারেন। ক্লাউড লগিং এর মাধ্যমে ইভেন্ট লগ অ্যাক্সেস করতে গুগল ক্লাউড লগিং সম্পর্কে আরও জানুন।

৭. গুগলে আপডেট রিপোর্ট করুন

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

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

এই বিভাগে, আপনি ফ্রন্টএন্ড ওয়েব অ্যাপ থেকে এই পদ্ধতিগুলি কল করার জন্য কোড যুক্ত করবেন।

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

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

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

ee198858a6eac112.png দ্বারা পোস্ট করা 1 অনুবাদ, বিস্তারিত সব অনুবাদ

রিপোর্ট স্থিতি সক্ষম করুন

রিয়েলটাইম ডাটাবেসে লেখার ফলে টারটার প্রজেক্টে reportstate ফাংশনটি ট্রিগার হয়। ডাটাবেসে লেখা ডেটা ক্যাপচার করতে functions/index.jsreportstate ফাংশনটি আপডেট করুন এবং রিপোর্ট স্টেট ব্যবহার করে হোম গ্রাফে পোস্ট করুন।

ইনডেক্স.জেএস

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      functions.logger.info('Firebase write event triggered Report State');
      const snapshot = change.after.val();

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
              [context.params.deviceId]: {
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      functions.logger.info('Report state response:', res.status, res.data);
    });

অনুরোধ সিঙ্ক সক্ষম করুন

ফ্রন্টএন্ড ওয়েব UI-তে আইকনটি রিফ্রেশ করলে স্টার্টার প্রজেক্টে requestsync ফাংশনটি চালু হয়। HomeGraph API কল করার জন্য functions/index.jsrequestsync ফাংশনটি প্রয়োগ করুন।

ইনডেক্স.জেএস

exports.requestsync = functions.https.onRequest(async (request, response) => {
  response.set('Access-Control-Allow-Origin', '*');
  functions.logger.info(`Request SYNC for user ${USER_ID}`);
  try {
    const res = await homegraph.devices.requestSync({
      requestBody: {
        agentUserId: USER_ID,
      },
    });
    functions.logger.info('Request sync response:', res.status, res.data);
    response.json(res.data);
  } catch (err) {
    functions.logger.error(err);
    response.status(500).send(`Error requesting sync: ${err}`);
  }
});

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

Firebase CLI ব্যবহার করে আপডেট করা কোডটি স্থাপন করুন:

firebase deploy --only functions

আপনার বাস্তবায়ন পরীক্ষা করুন

রিফ্রেশ ক্লিক করুন। ae8d3b25777a5e30.png সম্পর্কে ওয়েব UI-তে বোতামটি টিপুন এবং যাচাই করুন যে আপনি Firebase কনসোল লগে একটি সিঙ্ক অনুরোধ দেখতে পাচ্ছেন।

এরপর, ফ্রন্টএন্ড ওয়েব UI-তে ওয়াশার ডিভাইসের বৈশিষ্ট্যগুলি সামঞ্জস্য করুন এবং আপডেট ক্লিক করুন। যাচাই করুন যে আপনি আপনার Firebase কনসোল লগে Google-এ রিপোর্ট করা অবস্থা পরিবর্তন দেখতে পাচ্ছেন।

৮. অভিনন্দন

674c4f4392e98c1.png সম্পর্কে

অভিনন্দন! আপনি ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন ব্যবহার করে একটি ডিভাইস ক্লাউড পরিষেবার সাথে অ্যাসিস্ট্যান্টকে সফলভাবে ইন্টিগ্রেট করেছেন।

আরও জানুন

আরও গভীরে যাওয়ার জন্য এখানে কিছু ধারণা দেওয়া হল যা আপনি বাস্তবায়ন করতে পারেন:

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