स्मार्ट होम डिवाइसों को Google Assistant से कनेक्ट करना

1. शुरू करने से पहले

इंटरनेट ऑफ़ थिंग्स (IoT) के डेवलपर के तौर पर, आपके पास स्मार्ट होम ऐक्शन बनाने की सुविधा है. इनकी मदद से, उपयोगकर्ता Google Home ऐप्लिकेशन में टच कंट्रोल की सुविधा का इस्तेमाल करके, अपने डिवाइसों को कंट्रोल कर सकते हैं. साथ ही, Assistant से बोलकर निर्देश भी दे सकते हैं.

79266e5f45e6ae20.gif

स्मार्ट होम ऐक्शन, होम और उस पर काम करने वाले डिवाइसों के बारे में डेटा उपलब्ध कराने के लिए होम ग्राफ़ का इस्तेमाल करते हैं. इस तरह, घर का लॉजिकल मैप बनाया जाता है. इससे Assistant को यह समझने में मदद मिलती है कि उपयोगकर्ता, घर में किस जगह पर हैं और किस जगह मौजूद है. उदाहरण के लिए, होम ग्राफ़ किसी लिविंग रूम के कॉन्सेप्ट को सेव कर सकता है, जिसमें अलग-अलग मैन्युफ़ैक्चरर के अलग-अलग तरह के डिवाइस शामिल होते हैं. जैसे, थर्मोस्टैट, लैंप, पंखा, और वैक्यूम क्लीनर.

d009cef0f903d284.jpeg

ज़रूरी शर्तें

आप क्या बनाएंगे

इस कोडलैब में, आपको ऐसी क्लाउड सेवा पब्लिश करनी है जो वर्चुअल स्मार्ट वॉशिंग मशीन को मैनेज करती है. इसके बाद, आपको एक स्मार्ट होम ऐक्शन बनाना होगा और उसे Assistant से कनेक्ट करना होगा.

आपको इनके बारे में जानकारी मिलेगी

  • स्मार्ट होम क्लाउड सेवा को डिप्लॉय करने का तरीका
  • Assistant से अपनी सेवा कैसे कनेक्ट करें
  • डिवाइस की स्थिति में किए गए बदलावों को Google पर पब्लिश करने का तरीका

आपको इनकी ज़रूरत होगी

2. YouTube TV का इस्तेमाल शुरू करना

गतिविधि कंट्रोल चालू करना

Google Assistant का इस्तेमाल करने के लिए, आपको Google के साथ गतिविधि का कुछ डेटा शेयर करना होगा. Google Assistant को ठीक से काम करने के लिए इस डेटा की ज़रूरत होती है. हालांकि, डेटा शेयर करने की ज़रूरी शर्त सिर्फ़ SDK टूल के लिए नहीं है. अगर आपके पास पहले से Google खाता नहीं है, तो यह डेटा शेयर करने के लिए एक खाता बनाएं. किसी भी Google खाते का इस्तेमाल किया जा सकता है—ज़रूरी नहीं है कि वह आपका डेवलपर खाता ही हो.

उस Google खाते का गतिविधि कंट्रोल पेज खोलें जिसे Assistant के साथ इस्तेमाल करना है.

पक्का करें कि नीचे दिए गए टॉगल स्विच चालू हों:

  • वेब और ऐप्लिकेशन गतिविधि - इसके अलावा, इसमें Google की सेवाएं इस्तेमाल करने वाले डिवाइसों, ऐप्लिकेशन, और साइटों पर की गई मेरी गतिविधि की जानकारी और Chrome इतिहास शामिल करें चेकबॉक्स को चुनना न भूलें.
  • डिवाइस की जानकारी
  • आवाज़ और ऑडियो गतिविधि

ऐक्शन प्रोजेक्ट बनाना

  1. Actions on Google कंसोल पर जाएं.
  2. नया प्रोजेक्ट पर क्लिक करें. इसके बाद, प्रोजेक्ट का नाम डालें और प्रोजेक्ट बनाएं पर क्लिक करें.

3d6b68ca79afd54c.png

स्मार्ट होम ऐप्लिकेशन चुनें

Actions कंसोल में खास जानकारी वाली स्क्रीन पर, स्मार्ट होम चुनें.

2fa4988f44f8914b.png

स्मार्ट होम एक्सपीरियंस कार्ड चुनें और बिल्डिंग शुरू करें पर क्लिक करें. इसके बाद, आपको अपने प्रोजेक्ट कंसोल पर भेज दिया जाएगा.

Firebase सीएलआई इंस्टॉल करना

Firebase कमांड लाइन इंटरफ़ेस (सीएलआई) की मदद से, अपने वेब ऐप्लिकेशन को स्थानीय तौर पर इस्तेमाल किया जा सकता है. साथ ही, अपने वेब ऐप्लिकेशन को Firebase होस्टिंग पर डिप्लॉय किया जा सकता है.

सीएलआई इंस्टॉल करने के लिए, टर्मिनल से नीचे दिया गया npm कमांड चलाएं:

npm install -g firebase-tools

यह पुष्टि करने के लिए कि सीएलआई सही तरीके से इंस्टॉल किया गया है, इसे चलाएं:

firebase --version

Firebase सीएलआई को अपने Google खाते से अनुमति देने के लिए यह कमांड दें:

firebase login

3. स्टार्टर ऐप्लिकेशन चलाएं

अब अपना डेवलपमेंट एनवायरमेंट सेट अप करने के बाद, स्टार्टर प्रोजेक्ट डिप्लॉय किया जा सकता है. इससे यह पुष्टि की जा सकेगी कि सब कुछ सही तरीके से कॉन्फ़िगर किया गया है.

सोर्स कोड पाना

अपनी डेवलपमेंट मशीन पर इस कोडलैब का सैंपल डाउनलोड करने के लिए, इस लिंक पर क्लिक करें:

...या फिर कमांड लाइन से, GitHub रिपॉज़िटरी का क्लोन बनाया जा सकता है:

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

प्रोजेक्ट के बारे में जानकारी

स्टार्टर प्रोजेक्ट में ये सबडायरेक्ट्री शामिल हैं:

  • public: स्मार्ट वॉशर की स्थिति को आसानी से कंट्रोल करने और उस पर नज़र रखने के लिए, फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई).
  • functions: पूरी तरह से लागू की गई क्लाउड सेवा, जो 'Firebase के लिए Cloud Functions' और Firebase रीयल टाइम डेटाबेस की मदद से स्मार्ट वॉशर को मैनेज करती है.

Firebase से कनेक्ट करना

washer-start डायरेक्ट्री पर जाएं. इसके बाद, अपने ऐक्शन प्रोजेक्ट की मदद से Firebase सीएलआई सेट अप करें:

cd washer-start
firebase use <project-id>

Firebase प्रोजेक्ट को कॉन्फ़िगर करना

Firebase प्रोजेक्ट शुरू करें.

firebase init

सीएलआई सुविधाएं, रीयलटाइम डेटाबेस, फ़ंक्शन, और होस्टिंग सुविधा चुनें, जिसमें 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

इससे आपके प्रोजेक्ट के लिए ज़रूरी एपीआई और सुविधाएं शुरू हो जाएंगी.

जब कहा जाए, तब रीयल टाइम डेटाबेस को शुरू करें. आपके पास डेटाबेस इंस्टेंस के लिए, डिफ़ॉल्ट लोकेशन का इस्तेमाल करने का विकल्प होता है.

? 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. जीयूआई का इस्तेमाल करके, प्रोजेक्ट में ../functions फ़ोल्डर पर जाएं और छिपी हुई फ़ाइल .eslintrc.js चुनें और उसे मिटाएं. इसे मिलते-जुलते नाम वाले .eslintrc.json के लिए गलती से न लिखें.
  2. कमांड लाइन का इस्तेमाल करके:
    cd functions
    rm .eslintrc.js
    

यह पक्का करने के लिए कि आपके पास सही और पूरा Firebase कॉन्फ़िगरेशन है, firebase.json फ़ाइल को app-done डायरेक्ट्री से app-start डायरेक्ट्री में कॉपी करें. इसके बाद, app-start में मौजूद फ़ाइल को ओवरराइट करें.

app-start डायरेक्ट्री में:

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

Firebase पर डिप्लॉय करें

आपने डिपेंडेंसी इंस्टॉल कर ली है और अपना प्रोजेक्ट कॉन्फ़िगर कर लिया है. इसलिए, अब पहली बार ऐप्लिकेशन चलाया जा सकता है.

firebase deploy

आपको यह कंसोल आउटपुट देखना चाहिए:

...

✔ Deploy complete!

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

यह निर्देश, Firebase के लिए Cloud फ़ंक्शन के साथ-साथ, एक वेब ऐप्लिकेशन डिप्लॉय करता है.

वेब ऐप्लिकेशन देखने के लिए, अपने ब्राउज़र (https://<project-id>.web.app) में होस्टिंग यूआरएल खोलें. आपको नीचे दिया गया इंटरफ़ेस दिखेगा:

5845443e94705557.png

इस वेब यूज़र इंटरफ़ेस (यूआई) की मदद से, डिवाइस की स्थितियों को देखने या उनमें बदलाव करने के लिए, तीसरे पक्ष का प्लैटफ़ॉर्म दिखाया जाता है. अपने डेटाबेस में डिवाइस की जानकारी अपने-आप भरना शुरू करने के लिए, अपडेट करें पर क्लिक करें. आपको पेज पर कोई बदलाव नहीं दिखेगा. हालांकि, वॉशर की मौजूदा स्थिति डेटाबेस में सेव की जाएगी.

अब उस क्लाउड सेवा से कनेक्ट करने का समय आ गया है जिसे आपने Actions कंसोल का इस्तेमाल करके Google Assistant में डिप्लॉय किया है.

Actions कंसोल प्रोजेक्ट कॉन्फ़िगर करना

खास जानकारी > अपनी कार्रवाई बनाएं में जाकर, कार्रवाइयां जोड़ें चुनें. अपने उस क्लाउड फ़ंक्शन का यूआरएल डालें जो स्मार्ट होम इंटेंट के काम करता है. इसके बाद, सेव करें पर क्लिक करें.

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

9d7b223427f587ca.png

डेवलप करें > शुरू करें टैब पर, अपनी कार्रवाई के लिए डिसप्ले नाम जोड़ें और सेव करें पर क्लिक करें. यह नाम Google Home ऐप्लिकेशन में दिखेगा.

774d0c40c351c7da.png

a8c4673eb11d76ee.png

खाता लिंक करने की सुविधा चालू करने के लिए, बाईं ओर दिए गए नेविगेशन पैनल में, डेवलप करें > खाता लिंक करें विकल्प चुनें. खाते जोड़ने से जुड़ी इन सेटिंग का इस्तेमाल करें:

Client ID

ABC123

क्लाइंट सीक्रेट

DEF456

प्राधिकरण URL

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

टोकन यूआरएल

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

9730d20b90bcc038.png

लिंक करने वाले अपने खाते के कॉन्फ़िगरेशन को सेव करने के लिए, सेव करें पर क्लिक करें. इसके बाद, अपने प्रोजेक्ट पर टेस्टिंग की सुविधा चालू करने के लिए, जांच करें पर क्लिक करें.

ee0547f05b5efd98.png

आपको सिम्युलेटर पर रीडायरेक्ट कर दिया जाएगा. अगर आपको "टेस्ट अब चालू है" नहीं दिखता है, तो यह पुष्टि करने के लिए कि जांच चालू है, टेस्ट रीसेट करें पर क्लिक करें.

d0495810dbadf059.png

अब आप डिवाइस की स्थिति को Assistant से कनेक्ट करने के लिए ज़रूरी वेबहुक लागू करना शुरू कर सकते हैं.

4. वॉशर बनाएं

आपने अपनी सेट की गई कार्रवाई को कॉन्फ़िगर कर लिया है. इसलिए, अब डिवाइस जोड़े जा सकते हैं और डेटा भेजा जा सकता है. आपकी क्लाउड सेवा को इन कामों को पूरा करना होगा:

  • SYNC इंटेंट तब होता है, जब Assistant यह जानना चाहती है कि उपयोगकर्ता ने किन डिवाइसों से कनेक्ट किया है. जब उपयोगकर्ता किसी खाते को लिंक करता है, तब इसे आपकी सेवा को भेजा जाता है. आपको उपयोगकर्ता के सभी डिवाइसों और उनकी क्षमताओं के बारे में JSON पेलोड के साथ जवाब देना चाहिए.
  • QUERY इंटेंट तब होता है, जब Assistant किसी डिवाइस की मौजूदा स्थिति या स्थिति के बारे में जानना चाहती है. आपको JSON पेलोड के साथ, अनुरोध किए गए हर डिवाइस की स्थिति के बारे में जानकारी देनी चाहिए.
  • EXECUTE इंटेंट तब होता है, जब Assistant किसी उपयोगकर्ता की ओर से किसी डिवाइस को कंट्रोल करना चाहती है. आपको JSON पेलोड के साथ, अनुरोध किए गए हर डिवाइस के काम करने की स्थिति के साथ जवाब देना चाहिए.
  • DISCONNECT इंटेंट तब दिखता है, जब उपयोगकर्ता अपने खाते को Assistant से अलग करता है. आपको इस उपयोगकर्ता के डिवाइस के लिए, Assistant को इवेंट भेजना बंद कर देना चाहिए.

इन इंटेंट को मैनेज करने के लिए, पहले डिप्लॉय किए गए फ़ंक्शन को नीचे दिए गए सेक्शन में अपडेट किया जाएगा.

सिंक के जवाब को अपडेट करें

functions/index.js खोलें. इसमें Assistant के अनुरोधों का जवाब देने के लिए कोड होता है.

आपको डिवाइस मेटाडेटा और सुविधाओं की जानकारी देकर, SYNC इंटेंट को मैनेज करना होगा. onSync के कलेक्शन में JSON को अपडेट करें, ताकि डिवाइस की जानकारी और कपड़े धोने की मशीन के लिए सुझाए गए traits को शामिल किया जा सके.

index.js

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 पर डिप्लॉय करें

Firebase सीएलआई का इस्तेमाल करके, अपडेट किए गए क्लाउड फ़ुलफ़िलमेंट को डिप्लॉय करें:

firebase deploy --only functions

अपने स्मार्ट होम ऐक्शन की जांच करने के लिए, आपको अपने प्रोजेक्ट को Google खाते से लिंक करना होगा. इससे Google Assistant के प्लैटफ़ॉर्म और Google Home ऐप्लिकेशन से जांच की जा सकती है, जिन पर उसी खाते से साइन इन किया गया हो.

  1. अपने फ़ोन पर, Google Assistant की सेटिंग खोलें. ध्यान दें कि आपको उसी खाते से लॉग इन करना होगा जिससे आपने कंसोल में लॉग इन किया है.
  2. Assistant में जाकर, Google Assistant > सेटिंग > होम कंट्रोल पर जाएं.
  3. ऊपर दाईं ओर खोजें आइकॉन पर क्लिक करें.
  4. अपना खास टेस्ट ऐप्लिकेशन ढूंढने के लिए, [test] प्रीफ़िक्स का इस्तेमाल करके अपना टेस्ट ऐप्लिकेशन खोजें.
  5. वह आइटम चुनें. इसके बाद, Google Assistant आपकी सेवा की पुष्टि करेगी और SYNC का अनुरोध करेगी. इसमें, आपकी सेवा को उपयोगकर्ता के डिवाइसों की सूची उपलब्ध कराने के लिए कहा जाएगा.

Google Home ऐप्लिकेशन खोलें और पुष्टि करें कि आपको वॉशर डिवाइस दिख रहा है.

ae252220753726f6.png

5. निर्देशों और क्वेरी को मैनेज करना

अब आपकी क्लाउड सेवा Google को वॉशर डिवाइस की सही तरीके से रिपोर्ट करती है. इसलिए, अब आपको डिवाइस की स्थिति का अनुरोध करने और निर्देश भेजने की सुविधा जोड़नी होगी.

QUERY इंटेंट मैनेज करें

QUERY इंटेंट में डिवाइसों का एक सेट शामिल होता है. हर डिवाइस के लिए, आपको उसकी मौजूदा स्थिति के हिसाब से जवाब देना चाहिए.

functions/index.js में, QUERY हैंडलर में बदलाव करें, ताकि इंटेंट अनुरोध में शामिल टारगेट डिवाइसों की सूची को प्रोसेस किया जा सके.

index.js

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 फ़ंक्शन अपडेट करें.

index.js

const queryFirebase = async (deviceId) => {
  const snapshot = await firebaseRef.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 हैंडलर में बदलाव करें, ताकि यह उन traits की सूची को प्रोसेस कर सके जिन्हें हर निर्देश के लिए, टारगेट डिवाइसों के सेट और अपडेट की ज़रूरत है:

index.js

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

हर निर्देश और टारगेट डिवाइस के लिए, रीयल टाइम डेटाबेस में अनुरोध की गई Trait से जुड़ी वैल्यू अपडेट करें. सही Firebase रेफ़रंस अपडेट करने और डिवाइस की अपडेट की गई स्थिति दिखाने के लिए, updateDevice फ़ंक्शन में बदलाव करें.

index.js

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 = firebaseRef.child(deviceId).child('OnOff');
      break;
    case 'action.devices.commands.StartStop':
      state = {isRunning: params.start};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
    case 'action.devices.commands.PauseUnpause':
      state = {isPaused: params.pause};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
  }

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

6. अपनी सेट की गई कार्रवाई की जांच करें

तीनों इंटेंट लागू करने के बाद, यह जांच की जा सकती है कि आपकी सेट की गई कार्रवाई, वॉशर को कंट्रोल करती है या नहीं.

Firebase पर डिप्लॉय करें

Firebase सीएलआई का इस्तेमाल करके, अपडेट किए गए क्लाउड फ़ुलफ़िलमेंट को डिप्लॉय करें:

firebase deploy --only functions

वॉशर की जांच करें

अब फ़ोन से बोलकर दिए जाने वाले इन निर्देशों में से किसी भी निर्देश को आज़माकर देखा जा सकता है कि क्या आपको ये बदलाव पहले ही दिख रहे हैं:

"Ok Google, मेरी वॉशिंग मशीन चालू करो."

"Ok Google, मेरी वॉशिंग मशीन रोको."

"Ok Google, मेरी वॉशिंग मशीन बंद करो."

सवाल पूछकर वॉशर की मौजूदा स्थिति भी देखी जा सकती है.

"Ok Google, क्या मेरी वॉशर चालू है?"

"Ok Google, क्या मेरी वॉशिंग मशीन चल रही है?"

"Ok Google, मेरी वॉशिंग मशीन कौनसी साइकल पर है?"

इन क्वेरी और निर्देशों को लॉग में देखा जा सकता है. ये निर्देश, Firebase कंसोल के फ़ंक्शन सेक्शन में, आपके फ़ंक्शन के नीचे दिखते हैं. लॉग लिखें और देखें में जाकर, Firebase के लॉग के बारे में ज़्यादा जानें.

लॉगिंग > लॉग एक्सप्लोरर पर जाकर, Google Cloud Console में भी ये क्वेरी और निर्देश देखे जा सकते हैं. Cloud Logging की मदद से इवेंट लॉग ऐक्सेस करना में, Google Cloud में लॉग इन करने के बारे में ज़्यादा जानें.

7. Google को अपडेट की शिकायत करना

आपने अपनी क्लाउड सेवा को स्मार्ट होम इंटेंट के साथ पूरी तरह से इंटिग्रेट कर लिया है. इससे उपयोगकर्ता अपने डिवाइसों की मौजूदा स्थिति को कंट्रोल कर सकेंगे और उनके बारे में क्वेरी कर सकेंगे. हालांकि, लागू करने की प्रक्रिया में अब भी आपकी सेवा के लिए Assistant को इवेंट की जानकारी भेजने का तरीक़ा नहीं है. जैसे, डिवाइस की मौजूदगी या उसकी स्थिति में बदलाव की जानकारी भेजना.

सिंक करने का अनुरोध करें विकल्प की मदद से, उपयोगकर्ताओं के डिवाइसों को जोड़ने या हटाने पर या उनके डिवाइस की क्षमताओं में कोई बदलाव होने पर, सिंक करने का नया अनुरोध ट्रिगर किया जा सकता है. रिपोर्ट की स्थिति विकल्प का इस्तेमाल करने पर, आपकी क्लाउड सेवा किसी डिवाइस की स्थिति को होम ग्राफ़ पर भेज सकती है. ऐसा तब होता है, जब उपयोगकर्ता डिवाइस की स्थिति में अपने-आप बदलाव करता है. उदाहरण के लिए, लाइट स्विच चालू करना या किसी दूसरी सेवा का इस्तेमाल करके स्थिति बदलना.

इस सेक्शन में, इन तरीकों को फ़्रंटएंड वेब ऐप्लिकेशन से कॉल करने के लिए आपको कोड जोड़ना होगा.

HomeGraph API चालू करें

HomeGraph API, उपयोगकर्ता के होम ग्राफ़ में डिवाइसों और उनकी स्थितियों को सेव करने और उनके बारे में क्वेरी करने की सुविधा चालू करता है. इस एपीआई का इस्तेमाल करने के लिए, आपको सबसे पहले Google Cloud कंसोल खोलना होगा और HomeGraph API चालू करना होगा.

Google Cloud कंसोल में, अपनी कार्रवाइयों से मेल खाने वाला प्रोजेक्ट चुनें <project-id>. इसके बाद, HomeGraph API के लिए एपीआई लाइब्रेरी की स्क्रीन पर जाकर, चालू करें पर क्लिक करें.

ee198858a6eac112.png

रिपोर्ट की स्थिति चालू करें

रीयल टाइम डेटाबेस को लिखता है, जो स्टार्टर प्रोजेक्ट में reportstate फ़ंक्शन को ट्रिगर करता है. डेटाबेस में लिखे गए डेटा को कैप्चर करने और रिपोर्ट स्टेटस के ज़रिए उसे होम ग्राफ़ में पोस्ट करने के लिए, functions/index.js में reportstate फ़ंक्शन को अपडेट करें.

index.js

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

सिंक करने के अनुरोध को चालू करें

फ़्रंटएंड वेब यूज़र इंटरफ़ेस (यूआई) में आइकॉन को रीफ़्रेश करने से, स्टार्टर प्रोजेक्ट में requestsync फ़ंक्शन ट्रिगर हो जाता है. HomeGraph API को कॉल करने के लिए, functions/index.js में requestsync फ़ंक्शन लागू करें.

index.js

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 पर डिप्लॉय करें

Firebase सीएलआई का इस्तेमाल करके, अपडेट किए गए कोड को डिप्लॉय करें:

firebase deploy --only functions

आपने जो लागू किया है उसकी जांच करना

वेब यूज़र इंटरफ़ेस (यूआई) में रीफ़्रेश करें ae8d3b25777a5e30.png बटन पर क्लिक करें और पुष्टि करें कि आपको Firebase कंसोल लॉग में, सिंक करने का अनुरोध दिख रहा है.

इसके बाद, फ़्रंटएंड वेब यूज़र इंटरफ़ेस (यूआई) में वॉशर डिवाइस की विशेषताओं में बदलाव करें और अपडेट करें पर क्लिक करें. पुष्टि करें कि आप अपने Firebase कंसोल लॉग में Google को रिपोर्ट किए गए स्थिति बदलाव देख सकते हैं.

8. बधाई हो

674c4f4392e98c1.png

बधाई! आपने स्मार्ट होम कार्रवाइयों का इस्तेमाल करके, डिवाइस की क्लाउड सेवा के साथ Assistant को इंटिग्रेट कर लिया है.

ज़्यादा जानें

यहां कुछ आइडिया दिए गए हैं जिन्हें लागू करके, ज़्यादा जानकारी दी जा सकती है:

किसी कार्रवाई को समीक्षा के लिए टेस्ट करने और सबमिट करने के बारे में भी ज़्यादा जाना जा सकता है. इसमें, आपकी सेट की गई कार्रवाई को उपयोगकर्ताओं के लिए पब्लिश करने के लिए सर्टिफ़िकेट पाने की प्रोसेस भी शामिल है.