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

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

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

a4657871181b5ad2.gif

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

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

क्या बनाएं

इस कोडलैब में, आपको दो खराबियों वाली स्मार्ट होम कार्रवाई डिप्लॉय करनी होगी और उसे Assistant से कनेक्ट करना होगा. इसके बाद, स्मार्ट होम और Google Cloud Platform (GCP) की मेट्रिक और लॉगिंग के लिए, Test Suite की मदद से कार्रवाई की खराबियों को डीबग करना होगा.

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

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

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

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

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

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

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

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

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

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

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

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

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

$ cd washer-faulty
$ firebase use <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/<project-id>/overview
Hosting URL: https://<project-id>.firebaseapp.com

होम ग्राफ़ अपडेट करें

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

6f2b1344179977cf.png

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

e357de6a7faff925.png

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

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

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

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

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

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

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

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

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

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

"माफ़ करें, मुझे <प्रोजेक्ट डिसप्ले नाम> से जुड़ी जानकारी नहीं मिली."

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

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

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

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

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

  1. Actions कंसोल में, प्रोजेक्ट पेज पर जाएं.
  2. अपना स्मार्ट होम प्रोजेक्ट चुनें.
  3. Analytics टैब चुनें और Google Cloud Platform पर जाएं पर क्लिक करें.

b1735bbe11a7aff8.png

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

5edd3751323176dd.png

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

c468743c20a11c15.png

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

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

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

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

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

747cca0f1249a5a.png

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

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

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

गड़बड़ी की असल वजह का पता लगाना

functions/index.js में, onExecute कलेक्शन में EXECUTE हैंडलर ढूंढें. यह हर निर्देश और डिवाइस की नई स्थिति की जानकारी देता है. किसी 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 सीएलआई का इस्तेमाल करके, अपडेट किए गए कोड को डिप्लॉय करें:

firebase deploy --only functions

बोलकर दिए जाने वाले निर्देशों का फिर से इस्तेमाल करें. वॉशर को रोकने / फिर से चालू करने पर, आपको Assistant से सही जवाब मिलने लगेगा.

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

=>

"बिलकुल, वॉशर को रोक रही हूँ."

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

=>

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

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

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

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

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

4. Test Suite की मदद से अपनी सेट की गई कार्रवाई को टेस्ट करें

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

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

Test Suite के ज़रिए अपने स्मार्ट होम ऐक्शन की जांच करने के लिए, इन निर्देशों का पालन करें:

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

78ed6a1ebdb581bf.png

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

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

5838d10631c98ed2.png

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

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

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

ऊपर बताए गए, पहले सफल न होने वाले पहले टेस्ट केस के लिए,

99e4e5d06965a8a7.png

इसके गड़बड़ी के मैसेज से पता चलता है कि टेस्ट सुइट को आपके स्मार्ट होम ऐक्शन से रिपोर्ट किए गए राज्यों में "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 सीएलआई का इस्तेमाल करके, अपडेट किए गए कोड को डिप्लॉय करें:

$ firebase deploy --only functions

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

148837f85d377dd6.png

5. बधाई हो

17d485868a6771bc.png

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

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

इस कोडलैब (कोड बनाना सीखना) को तैयार करते हुए, नीचे दिए गए तरीके आज़माएं और दूसरे संसाधन एक्सप्लोर करें:

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