स्मार्ट होम को डीबग करना

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

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

a4657871181b5ad2.gif

Cloud-to-cloud इंटिग्रेशन के लिए डीबग करने वाले टूल के बारे में जानना ज़रूरी है. इससे, Google Assistant के साथ बेहतर क्वालिटी का इंटिग्रेशन बनाया जा सकता है. आसानी से मॉनिटर करने और डीबग करने के लिए, Google Cloud Platform (GCP) Metrics और Logging और स्मार्ट होम के लिए Test Suite उपलब्ध हैं. इनकी मदद से, इंटिग्रेशन से जुड़ी समस्याओं की पहचान की जा सकती है और उन्हें ठीक किया जा सकता है.

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

आपको क्या बनाने को मिलेगा

इस कोडलैब में, दो गड़बड़ियों वाला Cloud-to-cloud इंटिग्रेशन डिप्लॉय किया जाएगा. इसके बाद, इसे Assistant से कनेक्ट किया जाएगा. फिर, स्मार्ट होम के लिए Test Suite और Google Cloud Platform (GCP) Metrics and Logging की मदद से, इंटिग्रेशन की गड़बड़ियों को डीबग किया जाएगा.

आपको क्या सीखने को मिलेगा

  • GCP Metrics and Logging का इस्तेमाल करके, प्रोडक्शन से जुड़ी समस्याओं की पहचान करना और उन्हें ठीक करना
  • स्मार्ट होम के लिए Test Suite का इस्तेमाल करके, फ़ंक्शनल और एपीआई से जुड़ी समस्याओं की पहचान करना

आपको किन चीज़ों की ज़रूरत होगी

2. गड़बड़ी वाला ऐप्लिकेशन चलाएं

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

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

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

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

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

वॉशर ऐप्लिकेशन में ये सबडायरेक्ट्री शामिल हैं:

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

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

अपने डेवलपमेंट मशीन पर टर्मिनल खोलें. washer-faulty डायरेक्ट्री पर जाएं. इसके बाद, स्मार्ट होम डिवाइसों को Google Assistant से कनेक्ट करें कोडलैब में बनाए गए इंटिग्रेशन प्रोजेक्ट के साथ, Firebase CLI सेट अप करें:

$ cd washer-faulty
$ firebase use <firebase-project-id>

Firebase पर डिप्लॉय करना

functions फ़ोल्डर पर जाएं और npm. का इस्तेमाल करके, सभी ज़रूरी डिपेंडेंसी इंस्टॉल करें.

$ cd functions
$ npm install

ध्यान दें: अगर आपको यह मैसेज दिखता है, तो इसे अनदेखा किया जा सकता है. यह चेतावनी, कुछ पुरानी डिपेंडेंसी की वजह से दिखती है. ज़्यादा जानकारी के लिए, यहां जाएं.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

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

$ firebase deploy

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

...

✔ Deploy complete!

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

HomeGraph को अपडेट करना

वेब ऐप्लिकेशन देखने के लिए, अपने ब्राउज़र में होस्टिंग यूआरएल (https://<firebase-project-id>.firebaseapp.com) खोलें. वेब यूज़र इंटरफ़ेस (यूआई) पर, रीफ़्रेश करेंae8d3b25777a5e30.png बटन पर क्लिक करें. इससे, Request Sync का इस्तेमाल करके, गड़बड़ी वाले वॉशर ऐप्लिकेशन से डिवाइस के सबसे नए मेटाडेटा के साथ HomeGraph अपडेट हो जाएगा.

6f2b1344179977cf.png

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

e357de6a7faff925.png

3. अपने इंटिग्रेशन की जांच करना

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

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

अपने फ़ोन से, इनमें से कोई भी वॉइस कमांड देने पर, वैल्यू में होने वाला बदलाव देखें:

"Hey Google, मेरा वॉशर चालू करो."

"Hey Google, मेरा वॉशर शुरू करो."

"Hey Google, मेरा वॉशर पॉज़ करो."

"Hey Google, मेरा वॉशर फिर से शुरू करो."

"Hey Google, मेरा वॉशर बंद करो."

वॉशर को पॉज़ / फिर से शुरू करने पर, आपको दिखेगा कि Assistant आवाज़ में जवाब देती है कि कुछ गड़बड़ है:

"अफ़सोस, मैं <project display name> से कनेक्ट नहीं हो पाया."

इस समस्या को डीबग करने के लिए, सबसे पहले आपको गड़बड़ी के बारे में ज़्यादा जानकारी चाहिए, ताकि मुख्य वजह की पहचान की जा सके.

स्मार्ट होम Analytics डैशबोर्ड

गड़बड़ियों की जांच करने के लिए, स्मार्ट होम Analytics डैशबोर्ड एक अच्छा विकल्प है. इसमें, आपके क्लाउड फ़ुलफ़िलमेंट के लिए, इस्तेमाल और स्थिति की मेट्रिक के चार्ट शामिल होते हैं:

  • इस्तेमाल की मेट्रिक, आपके Cloud-to-cloud इंटिग्रेशन के इस्तेमाल के ट्रेंड को दिखाती है. इसमें, रोज़ाना ऐक्टिव उपयोगकर्ताओं की संख्या और आपके फ़ुलफ़िलमेंट के लिए अनुरोधों की कुल संख्या शामिल होती है.
  • स्थिति की मेट्रिक, आपके Cloud-to-cloud इंटिग्रेशन में गड़बड़ी होने की निगरानी करने में मदद करती है. इसमें, अनुरोध में लगने वाला समय, सफलता का प्रतिशत, और गड़बड़ी का ब्रेकडाउन शामिल होता है.

गड़बड़ी की वजह जानने के लिए, प्रोजेक्ट डैशबोर्ड को ऐक्सेस करने के लिए, यहां दिया गया तरीका अपनाएं.

  1. डेवलपर कंसोल में, प्रोजेक्ट पेज पर जाएं.
  2. अपना स्मार्ट होम प्रोजेक्ट चुनें.
  3. बाईं ओर मौजूद मेन्यू में, Analytics टैब पर क्लिक करें.

b1735bbe11a7aff8.png

  1. इससे, आपको Google Cloud पर अपने प्रोजेक्ट के डैशबोर्ड की सूची दिखेगी. Google Home Analytics - Cloud Integration डैशबोर्ड चुनें.

5edd3751323176dd.png

  1. हाइलाइट की गई समयावधि के लिए, गड़बड़ी के कोड देखने के लिए, Cloud Fulfillment Errors - Status Breakdown चार्ट पर नीचे की ओर स्क्रोल करें.

c468743c20a11c15.png

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

इवेंट लॉग ऐक्सेस करना

गड़बड़ी के बारे में ज़्यादा जानकारी पाने के लिए, Cloud Logging का इस्तेमाल करके, अपने Cloud-to-cloud इंटिग्रेशन के लिए इवेंट लॉग ऐक्सेस करें.

Google Cloud Platform में नेविगेशन मेन्यू खोलें. इसके बाद, अपने प्रोजेक्ट के लिए इवेंट लॉग ऐक्सेस करने के लिए, ऑपरेशन में जाकर, लॉगिंग > लॉग एक्सप्लोरर चुनें. इसके अलावा, खोज बॉक्स में लॉग एक्सप्लोरर खोजा जा सकता है.

सभी फ़ील्ड खोजें इनपुट फ़ील्ड में, क्वेरी PARTNER_RESPONSE_MISSING_DEVICE डालें और क्वेरी चलाएं पर क्लिक करें. क्वेरी से मैच होने वाले लॉग, नतीजे सेक्शन में दिखते हैं.

747cca0f1249a5a.png

गड़बड़ी के लॉग में, गड़बड़ी की जानकारी के साथ स्मार्ट होम इवेंट दिखता है. इससे यह पता चलता है कि:

  • उपयोगकर्ता ने "वॉशर को फिर से शुरू करना" (actionType: "STARTSTOP_UNPAUSE") की कार्रवाई की है. यह हाल ही में फ़ेल हुई वॉइस कमांड से जुड़ी है.
  • डीबग करने से जुड़ा मैसेज, "JSON response does not include device." है.

डीबग करने से जुड़े मैसेज के आधार पर, आपको यह देखना चाहिए कि वॉशर ऐप्लिकेशन, EXECUTE जवाब में सही डिवाइस क्यों शामिल नहीं करता.

गड़बड़ी की मुख्य वजह की पहचान करना

functions/index.js में, EXECUTE हैंडलर (onExecute कलेक्शन में) ढूंढें. यह हर कमांड की स्थिति और डिवाइस की नई स्थिति दिखाता है. EXECUTE जवाब में डिवाइस आईडी शामिल करना, updateDevice फ़ंक्शन के हल होने पर निर्भर करता है:

index.js

app.onExecute(async (body) => {
 ...

 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((e) =>
                 functions.logger.error('EXECUTE',
                     device.id, e.message)));
     }
   }
 }

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

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpausePause':
      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);
};

गड़बड़ी ठीक करना

गड़बड़ी की मुख्य वजह की पहचान करने के बाद, पॉज़ / फिर से शुरू करने की कमांड के लिए स्ट्रिंग को ठीक किया जा सकता है:

index.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   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

इन वॉइस कमांड को फिर से आज़माएं. आपको दिखेगा कि वॉशर को पॉज़ / फिर से शुरू करने पर, Assistant अब सही जवाब देती है.

"Hey Google, मेरा वॉशर पॉज़ करो."

=>

"ठीक है, वॉशर को पॉज़ किया जा रहा है."

"Hey Google, मेरा वॉशर फिर से शुरू करो."

=>

"ठीक है, वॉशर को फिर से शुरू किया जा रहा है."

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

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

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

"Hey Google, मेरा वॉशर किस साइकल पर चल रहा है?"

4. Test Suite की मदद से, अपने इंटिग्रेशन की जांच करना

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

स्मार्ट होम के लिए Test Suite चलाना

Test Suite की मदद से, अपने Cloud-to-cloud इंटिग्रेशन की जांच करने के लिए, यह तरीका अपनाएं:

  1. अपने वेब ब्राउज़र में, स्मार्ट होम के लिए Test Suite खोलें.
  2. सबसे ऊपर दाएं कोने में मौजूद बटन का इस्तेमाल करके, Google में साइन इन करें. इससे, Test Suite सीधे Google Assistant को कमांड भेज सकता है.
  3. प्रोजेक्ट आईडी फ़ील्ड में, अपने Cloud-to-cloud इंटिग्रेशन का प्रोजेक्ट आईडी डालें. इसके बाद, आगे बढ़ने के लिए आगे बढ़ें पर क्लिक करें.
  4. टेस्ट सेटिंग चरण में, आपको Test Suite में वॉशर का डिवाइस टाइप और ट्रेट दिखेंगे.

78ed6a1ebdb581bf.png

  1. टेस्ट Request Sync विकल्प को बंद करें, क्योंकि सैंपल वॉशर ऐप्लिकेशन में वॉशर को जोड़ने / हटाने / नाम बदलने के लिए कोई यूज़र इंटरफ़ेस (यूआई) नहीं है. प्रोडक्शन सिस्टम में, जब भी उपयोगकर्ता डिवाइस जोड़ता / हटाता / नाम बदलता है, तब आपको Request Sync को ट्रिगर करना होगा.
  2. टेस्ट चलाने के लिए, आगे बढ़ें पर क्लिक करें.

Test Suite के चलने के बाद, टेस्ट केस के नतीजे देखें. आपको गड़बड़ी के मैसेज के साथ, दो फ़ेल हुए टेस्ट केस दिखेंगे:

5838d10631c98ed2.png

फ़ेल होने की वजह से, अपने Cloud-to-cloud इंटिग्रेशन को डीबग करने के लिए, आपको गड़बड़ी के मैसेज का विश्लेषण करके, गड़बड़ी की मुख्य वजह की पहचान करनी होगी.

गड़बड़ी के मैसेज का विश्लेषण करना

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

ऊपर दिए गए पहले फ़ेल हुए टेस्ट केस के लिए,

99e4e5d06965a8a7.png

इसके गड़बड़ी के मैसेज से पता चलता है कि Test Suite को आपके Cloud-to-cloud इंटिग्रेशन से रिपोर्ट की गई स्थितियों में "isPause": true की उम्मीद है. हालांकि, असल स्थितियों में सिर्फ़ "isPause": false शामिल है.

इसके अलावा, दूसरे फ़ेल हुए टेस्ट केस के गड़बड़ी के मैसेज से पता चलता है कि आपके Cloud-to-cloud इंटिग्रेशन से QUERY जवाब में मौजूद स्थितियों में "isPause": true शामिल है. यह आपके Cloud-to-cloud इंटिग्रेशन से रिपोर्ट की गई स्थितियों में मौजूद "isPause": false से अलग है:

fdb5124102e3a37.png

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

गड़बड़ी की मुख्य वजह की पहचान करना

functions/index.js खोलें. इसमें, reportstate फ़ंक्शन शामिल है. यह Report State का इस्तेमाल करके, Home Graph में स्थिति में हुए बदलाव पोस्ट करता है. Report State पेलोड की जांच करें. आपको पता चलेगा कि पेलोड में isPaused स्थिति मौजूद नहीं है. Test Suite ने फ़ेल हुए टेस्ट केस में इसी की जांच की थी.

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: snapshot.online,
                on: snapshot.OnOff.on,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      ...
    });

गड़बड़ी ठीक करना

गड़बड़ी की मुख्य वजह की पहचान करने के बाद, Report State पेलोड में isPaused स्थिति जोड़कर, functions/index.js में बदलाव करें:

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: snapshot.online,
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };
      ...
    });

ठीक की गई गड़बड़ी की जांच करना

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

$ firebase deploy --only functions

स्मार्ट होम के लिए Test Suite को फिर से चलाएं. आपको दिखेगा कि सभी टेस्ट केस पास हो गए हैं.

148837f85d377dd6.png

5. बधाई हो

17d485868a6771bc.png

बधाई हो! आपने स्मार्ट होम के लिए Test Suite और GCP Metrics and Logging का इस्तेमाल करके, Cloud-to-cloud इंटिग्रेशन से जुड़ी समस्याओं को हल करने का तरीका सीख लिया है.

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

इस कोडलैब के आधार पर, ये गतिविधियां आज़माएं और अन्य संसाधन देखें:

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