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

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

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

79266e5f45e6ae20.gif

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

d009cef0f903d284.jpeg

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

आपको क्या बनाना होगा

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

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

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

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

2. शुरू करना

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

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

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

पक्का करें कि ये टॉगल स्विच चालू हैं:

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

कार्रवाइयां प्रोजेक्ट बनाना

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

3d6b68ca79afd54c.png

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

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

2fa4988f44f8914b.png

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

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

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

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

npm install -g firebase-tools

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

firebase --version

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

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

अगर गलती से ईएसएलंट चालू हो जाता है, तो उसे बंद करने के दो तरीके हैं:

  1. जीयूआई का इस्तेमाल करके, प्रोजेक्ट के ../functions फ़ोल्डर में जाएं. इसके बाद, छिपी हुई फ़ाइल .eslintrc.js चुनें और उसे मिटाएं. इसे गलती से .eslintrc.json जैसा नाम न मानें.
  2. कमांड लाइन का इस्तेमाल करना:
    cd functions
    rm .eslintrc.js
    

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

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

cp -vp ../washer-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 Functions के साथ-साथ, एक वेब ऐप्लिकेशन को डिप्लॉय करता है.

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

5845443e94705557.png

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

अब ऐक्शन कंसोल का इस्तेमाल करके, 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. वॉशर बनाएं

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

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

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

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

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

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

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. Google Assistant > सेटिंग > होम कंट्रोल (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 इंटेंट कमांड हैंडल करता है. रिस्पॉन्स, हर निर्देश की स्थिति, जैसे कि SUCCESS, ERROR या PENDING के बारे में बताता है. साथ ही, डिवाइस की नई स्थिति के बारे में भी बताता है.

functions/index.js में, EXECUTE हैंडलर में बदलाव करके उन विशेषताओं की सूची को प्रोसेस करें जिन्हें अपडेट की ज़रूरत है. साथ ही, हर निर्देश के लिए, टारगेट डिवाइसों के सेट में बदलाव करें:

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

हर कमांड और टारगेट डिवाइस के लिए, रीयल टाइम डेटाबेस में उन वैल्यू को अपडेट करें जो अनुरोध की गई विशेषता के मुताबिक हैं. सही 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 = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = firebaseRef.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 = 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 में भी देखा जा सकता है. इसके लिए, लॉग इन करें पर जाएं > लॉग एक्सप्लोरर. क्लाउड लॉगिंग की मदद से इवेंट लॉग ऐक्सेस करें में जाकर, Google Cloud में लॉग इन करने के बारे में ज़्यादा जानें.

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

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

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

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

HomeGraph एपीआई चालू करना

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

Google Cloud Console में, पक्का करें कि आपने वह प्रोजेक्ट चुना हो जो आपकी कार्रवाइयों से मेल खाता हो <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 एपीआई को कॉल करने के लिए, 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 को डिवाइस की क्लाउड सेवा के साथ इंटिग्रेट कर लिया है.

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

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

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