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

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

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

a4657871181b5ad2.gif

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

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

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

इस कोडलैब में, आपको दो गड़बड़ियों के साथ क्लाउड-टू-क्लाउड इंटिग्रेशन डिप्लॉय करना होगा और उसे Assistant से कनेक्ट करना होगा. इसके बाद, स्मार्ट होम और Google Cloud Platform (GCP) मेट्रिक और लॉगिंग के लिए टेस्ट सुइट की मदद से, इंटिग्रेशन की गड़बड़ियों को डीबग करना होगा.

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

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

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

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

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

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

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

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

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

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

  • public: स्मार्ट वॉशर की स्थिति को आसानी से कंट्रोल और मॉनिटर करने के लिए, फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई).
  • functions: पूरी तरह से लागू की गई क्लाउड सेवा, जो Firebase के लिए Cloud Functions और 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 बटन पर क्लिक करके, HomeGraph को अपडेट करें. इसके लिए, सिंक करने का अनुरोध करें सुविधा का इस्तेमाल करके, वॉशर ऐप्लिकेशन के नए डिवाइस मेटाडेटा का इस्तेमाल करें:

6f2b1344179977cf.png

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

e357de6a7faff925.png

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

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

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

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

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

"Ok Google, वॉशर चालू करो."

"Ok Google, मेरे वॉशर को रोको."

"Ok Google, वॉशर को फिर से चालू करो."

"Ok Google, वॉशर बंद करो."

वॉशर को रोकने या फिर से चालू करने पर, Assistant आपको बोलकर बताएगी कि कुछ गड़बड़ी है:

"माफ़ करें, हम <project display name> तक नहीं पहुंच पाए."

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

स्मार्ट होम के आंकड़े दिखाने वाला डैशबोर्ड

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

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

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

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

b1735bbe11a7aff8.png

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

5edd3751323176dd.png

  1. हाइलाइट की गई समयसीमा के लिए गड़बड़ी कोड देखने के लिए, नीचे की ओर स्क्रोल करके क्लाउड से ऑर्डर पूरा करने से जुड़ी गड़बड़ियां - स्टेटस का ब्रेकडाउन चार्ट पर जाएं.

c468743c20a11c15.png

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

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

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

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':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.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':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

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

समस्या ठीक करने की जांच करना

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

firebase deploy --only functions

नीचे दिए गए वॉइस कमांड फिर से आज़माएं. ऐसा करने पर, वॉशर को रोकने या फिर से चालू करने पर, Assistant अब सही जवाब देगी.

"Ok Google, मेरे वॉशर को रोको."

=>

"ठीक है, वॉशर को रोक दिया जाएगा."

"Ok Google, वॉशर को फिर से चालू करो."

=>

"ठीक है, वॉशर को फिर से चालू कर दिया गया है."

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

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

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

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

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

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

स्मार्ट होम के लिए टेस्ट सुइट चलाना

Test Suite की मदद से, क्लाउड-टू-क्लाउड इंटिग्रेशन की जांच करने के लिए, इन निर्देशों का पालन करें:

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

78ed6a1ebdb581bf.png

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

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

5838d10631c98ed2.png

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

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

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

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

99e4e5d06965a8a7.png

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

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

fdb5124102e3a37.png

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

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

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

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: true,
                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,
      });
      ...
    });

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

अब जब आपको गड़बड़ी की मुख्य वजह का पता चल गया है, तो रिपोर्ट स्टेटस पेलोड में 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: true,
                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

स्मार्ट होम के लिए टेस्ट सुइट को फिर से चलाएं. आपको पता चलेगा कि सभी टेस्ट केस पास हो गए हैं.

148837f85d377dd6.png

5. बधाई हो

17d485868a6771bc.png

बधाई हो! आपने स्मार्ट होम और GCP मेट्रिक और लॉगिंग के लिए, टेस्ट सुइट की मदद से क्लाउड-टू-क्लाउड इंटिग्रेशन से जुड़ी समस्याओं को हल करने का तरीका जाना.

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

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

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