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

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

इंटरनेट ऑफ़ थिंग्स (आईओटी) के डेवलपर के तौर पर, आपके पास स्मार्ट होम ऐक्शन बनाने का विकल्प है. इससे उपयोगकर्ता, 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 कोडलैब से स्मार्ट होम डिवाइसों को कनेक्ट करें में बनाए गए अपने Actions प्रोजेक्ट के साथ, 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) में होस्टिंग यूआरएल खोलें. वेब यूज़र इंटरफ़ेस (यूआई) पर, रीफ़्रेश करें ae8d3b25777a5e30.png बटन पर क्लिक करें, ताकि सिंक करने का अनुरोध करें के ज़रिए HomeGraph को खराब वॉशर ऐप्लिकेशन से मिले सबसे नए डिवाइस मेटाडेटा से अपडेट किया जा सके:

6f2b1344179977cf.png

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

e357de6a7faff925.png

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

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

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

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

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

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

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

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

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

वॉशिंग मशीन को रोकने या फिर से चालू करने पर, Assistant आपकी आवाज़ से जवाब देती है:

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

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

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

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

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

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

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

b1735bbe11a7aff8.png

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

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 में, 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 फ़ंक्शन, वॉशर को रोकने / फिर से चलाने का तरीका कैसे इस्तेमाल करता है. इससे आपको पता चलेगा कि pause / फिर से शुरू करें कमांड के लिए, मैच करने वाली स्ट्रिंग गलत है:

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, मेरी वॉशिंग मशीन बंद करो."

=&gt;

"ज़रूर, वॉशर रोक रही हूँ."

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

=&gt;

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

वॉशिंग मशीन की मौजूदा स्थिति की जांच करने के लिए, आपको सवाल पूछने होंगे.

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

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

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

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

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

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

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

  1. अपने वेब ब्राउज़र में, स्मार्ट होम के लिए टेस्ट सुइट खोलें.
  2. सबसे ऊपर दाएं कोने में दिए गए बटन का इस्तेमाल करके, Google में साइन इन करें. इससे टेस्ट सुइट, सीधे 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

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

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

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

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