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

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

स्मार्ट होम इंटिग्रेशन की मदद से, Google Assistant उपयोगकर्ताओं के होम में कनेक्ट किए गए डिवाइसों को कंट्रोल कर सकती है. स्मार्ट होम ऐक्शन बनाने के लिए, आपको एक ऐसा क्लाउड वेबहुक एंडपॉइंट देना होगा जो स्मार्ट होम इंटेंट को हैंडल कर सके. उदाहरण के लिए, जब कोई व्यक्ति कहता है, "Ok Google, लाइटें चालू करो," तो Assistant आपके डिवाइस की स्थिति अपडेट करने के लिए, क्लाउड पर कुछ निर्देश भेजती है.

लोकल होम SDK टूल, आपके स्मार्ट होम इंटिग्रेशन को बेहतर बनाता है. इसकी मदद से, स्मार्ट होम इंटेंट को सीधे Google Home डिवाइस पर रूट करने के लिए लोकल पाथ जोड़ा जा सकता है. इससे ज़्यादा भरोसेमंद और उपयोगकर्ताओं के निर्देशों को प्रोसेस करने में लगने वाला समय कम होता है. यह आपको TypeScript या JavaScript में, स्थानीय फ़ुलफ़िलमेंट ऐप्लिकेशन में लिखने और डिप्लॉय करने की सुविधा देता है. यह ऐप्लिकेशन, डिवाइसों की पहचान करता है और किसी भी Google Home स्मार्ट स्पीकर या Google Nest स्मार्ट डिसप्ले पर निर्देश देता है. इसके बाद आपका ऐप्लिकेशन, निर्देशों को पूरा करने के लिए मौजूदा स्टैंडर्ड प्रोटोकॉल का इस्तेमाल करके, लोकल एरिया नेटवर्क पर लोगों के मौजूदा स्मार्ट डिवाइसों से सीधे संपर्क करता है.

72fffb320986092c.png

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

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

आप क्या बनाएंगे

इस कोडलैब में, स्मार्ट होम से जुड़ी कार्रवाइयों के लिए स्थानीय कार्रवाइयां बनाई जाएंगी. साथ ही, इसे Assistant से कनेक्ट किया जा सकेगा. इसके बाद, स्मार्ट होम और Google Cloud Platform (GCP) की मेट्रिक और लॉगिंग के लिए, Test Suite की मदद से Local Home ऐप्लिकेशन को डीबग किया जा सकेगा.

आप इन चीज़ों के बारे में जानेंगे

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

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

  • Google Chrome का सबसे नया वर्शन
  • आपके पास Google Home ऐप्लिकेशन वाला iOS या Android डिवाइस हो
  • Google Home स्मार्ट स्पीकर या Google Nest स्मार्ट डिसप्ले
  • Node.js का 10.16 या उसके बाद का वर्शन
  • एक Google खाता
  • Google Cloud बिलिंग खाता होना चाहिए

2. वॉशर ऐप्लिकेशन चलाएं

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

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

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

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

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

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

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

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

app-faulty डायरेक्ट्री पर जाएं. इसके बाद, स्मार्ट होम कार्रवाइयों के लिए स्थानीय कार्रवाई चालू करें में बनाए गए अपने ऐक्शन प्रोजेक्ट की मदद से, Firebase सीएलआई सेट अप करें:

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

Firebase पर डिप्लॉय करें

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

$ cd functions
$ npm install

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

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

app-faulty/local/ डायरेक्ट्री पर जाएं और TypeScript कंपाइलर को डाउनलोड करने और ऐप्लिकेशन को कंपाइल करने के लिए, नीचे दिए गए निर्देशों का पालन करें:

$ cd ../local
$ npm install
$ npm run build

यह index.ts (TypeScript) सोर्स को कंपाइल करता है और नीचे दिए गए कॉन्टेंट को app-faulty/public/local-home/ डायरेक्ट्री में रखता है:

  • bundle.js— कंपाइल किया गया JavaScript आउटपुट, जिसमें लोकल ऐप्लिकेशन और डिपेंडेंसी शामिल हैं.
  • index.html—लोकल होस्टिंग पेज का इस्तेमाल, ऐप्लिकेशन को उपयोगकर्ता के डिवाइस पर टेस्ट करने के लिए किया जाता है.

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

$ firebase deploy

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

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<projectcd -id>.web.app

यह निर्देश, Firebase के लिए Cloud फ़ंक्शन के साथ-साथ, एक वेब ऐप्लिकेशन डिप्लॉय करता है.

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

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

fa3c47f293cfe0b7.png

Google Home ऐप्लिकेशन खोलें और पुष्टि करें कि आपको अपने वॉशर डिवाइस के नाम "Faulty Washer" के साथ दिख रहा है. डिवाइस को ऐसे कमरे में असाइन करना न भूलें जिसमें Nest डिवाइस लगा हो.

2a082ee11d47ad1a.png

3. वॉशर चालू करें

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

डिवाइस चालू करना

virtual-device/ डायरेक्ट्री पर जाएं और कॉन्फ़िगरेशन पैरामीटर को आर्ग्युमेंट के तौर पर पास करके, डिवाइस स्क्रिप्ट चलाएं:

$ cd ../../virtual-device
$ npm install
$ npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

पुष्टि करें कि डिवाइस स्क्रिप्ट अनुमानित पैरामीटर के साथ चलती है:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

4. Local Home ऐप्लिकेशन को टेस्ट करें

Google Home डिवाइस को, बोलकर निर्देश देकर अपने डिवाइस पर निर्देश भेजें. जैसे:

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

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

"Ok Google, फ़ोर्स लोकल कम्यूनिटी."

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

वॉशर कंट्रोल करने की कोशिश करने पर, जब Google Assistant "माफ़ करें, ऐसा लगता है कि वॉशर अभी उपलब्ध नहीं है" मैसेज दिखता है, तो Google Assistant जवाब देती है.

इसका मतलब है कि लोकल पाथ से डिवाइस को ऐक्सेस नहीं किया जा सकता. यह सुविधा "Ok Google, ज़बरदस्त स्थानीय भाषा" की सुविधा जारी करने से पहले काम कर रही थी. ऐसा इसलिए, क्योंकि लोकल पाथ से डिवाइस को ऐक्सेस न किया जा सकने पर, हम क्लाउड पाथ का इस्तेमाल करना शुरू कर देंगे. हालांकि, "ज़बरदस्ती लोकल" करने के बाद, क्लाउड पाथ पर वापस जाने का विकल्प बंद हो जाता है.

समस्या का पता लगाने के लिए, आइए उन टूल का इस्तेमाल करें जो हमारे पास हैं: Google Cloud Platform (GCP) मेट्रिक और लॉगिंग और Chrome डेवलपर टूल.

5. लोकल Home ऐप्लिकेशन को डीबग करें

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

Chrome डेवलपर टूल कनेक्ट करें

डीबगर को स्थानीय बिक्री ऐप्लिकेशन से कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. पक्का करें कि आपने अपने Google Home डिवाइस को किसी ऐसे उपयोगकर्ता से लिंक किया है जिसके पास Actions कंसोल प्रोजेक्ट ऐक्सेस करने की अनुमति है.
  2. अपना Google Home डिवाइस फिर से चालू करें. इससे डिवाइस को आपके एचटीएमएल के यूआरएल के साथ-साथ वह स्कैन कॉन्फ़िगरेशन भी मिल जाएगा जो आपने Actions Console में डाला है.
  3. अपनी डेवलपमेंट मशीन पर Chrome लॉन्च करें.
  4. Chrome में नया टैब खोलें और इंस्पेक्टर को लॉन्च करने के लिए, पता फ़ील्ड में chrome://inspect डालें.

आपको पेज पर डिवाइसों की एक सूची दिखेगी. साथ ही, Google Home डिवाइस के नाम के नीचे आपका ऐप्लिकेशन यूआरएल दिखेगा.

567f97789a7d8846.png

इंस्पेक्टर को लॉन्च करें

Chrome डेवलपर टूल लॉन्च करने के लिए, अपने ऐप्लिकेशन यूआरएल में जाकर जांच करें पर क्लिक करें. कंसोल टैब चुनें और पुष्टि करें कि आपको TypeScript ऐप्लिकेशन से प्रिंट किए गए IDENTIFY इंटेंट का कॉन्टेंट दिख रहा है.

774c460c59f9f84a.png

इस आउटपुट का मतलब है कि IDENTIFY हैंडलर ट्रिगर हो गया है. हालांकि, IdentifyResponse में दिखाया गया verificationId आपके HomeGraph के किसी भी डिवाइस से मेल नहीं खाता. इसका कारण जानने के लिए आइए कुछ कस्टम लॉग जोड़ते हैं.

कस्टम लॉग जोड़ें

हालांकि, Local Home SDK टूल ने DEVICE_VERIFICATION_FAILED गड़बड़ी का पता लगाया है, लेकिन असल वजह का पता लगाने में इससे ज़्यादा मदद नहीं मिलती. कुछ कस्टम लॉग जोड़ें, ताकि यह पक्का किया जा सके कि हम स्कैन किए गए डेटा को सही तरीके से पढ़ रहे हैं और उसे प्रोसेस कर रहे हैं. यह भी ध्यान रखें कि अगर हम प्रॉमिस को गड़बड़ी के साथ अस्वीकार कर देते हैं, तो गड़बड़ी का मैसेज भी Cloud Logging को भेज दिया जाता है.

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  // Is there something wrong here?
  const localDeviceId = Buffer.from(scanData.data);
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  // Add custom logs
  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_device', 'Invalid device id from scan data ' +
        localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

साथ ही, होम ऐप्लिकेशन का लोकल वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.1');

कस्टम लॉग जोड़ने के बाद, आपको ऐप्लिकेशन को फिर से कंपाइल करना होगा और Firebase में फिर से डिप्लॉय करना होगा.

$ cd ../app-faulty/local
$ npm run build
$ firebase deploy --only hosting

अब अपने Google Home डिवाइस को फिर से चालू करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. Chrome डेवलपर टूल में कंसोल लॉग में जाकर, यह देखा जा सकता है कि Google Home डिवाइस आपके हिसाब से वर्शन का इस्तेमाल कर रहा है या नहीं.

ecc56508ebcf9ab.png

क्लाउड लॉगिंग को ऐक्सेस करें

चलिए देखते हैं कि अपनी गड़बड़ियों को ढूंढने के लिए क्लाउड लॉगिंग का इस्तेमाल कैसे किया जाता है. अपने प्रोजेक्ट के लिए 'क्लाउड लॉगिंग' को ऐक्सेस करने के लिए:

  1. Cloud Platform कंसोल में, प्रोजेक्ट पेज पर जाएं.
  2. अपना स्मार्ट होम प्रोजेक्ट चुनें.
  3. ऑपरेशन में जाकर, लॉगिंग > लॉग एक्सप्लोरर चुनें.

आपके Actions प्रोजेक्ट के उपयोगकर्ताओं के लिए, लॉगिंग डेटा के ऐक्सेस को पहचान और ऐक्सेस मैनेजमेंट (IAM) से मैनेज किया जाता है. डेटा लॉग करने की भूमिकाओं और अनुमतियों के बारे में ज़्यादा जानकारी के लिए, Cloud Logging का ऐक्सेस कंट्रोल देखें.

बेहतर फ़िल्टर का इस्तेमाल करना

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

क्वेरी की झलक वाले बॉक्स को बड़ा करें. इससे वह क्वेरी बिल्डर बॉक्स में बदल जाएगा. क्वेरी बिल्डर बॉक्स में jsonPayload.intent="IDENTIFY" डालें और क्वेरी चलाएं बटन पर क्लिक करें.

4c0b9d2828ee2447.png

इस वजह से, आपको IDENTIFY हैंडलर में अपलोड किए गए सभी गड़बड़ी के लॉग मिलते हैं. इसके बाद, पिछली गड़बड़ी को बड़ा करें. आपको वे errorCode और debugString मिलेंगे जिन्हें आपने IDENTIFY हैंडलर में प्रॉमिस अस्वीकार करते समय अभी सेट किया था.

71f2f156c6887496.png

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

गड़बड़ी ठीक करें

सोर्स कोड पर वापस जाकर, जहां हम स्कैन किए गए डेटा से लोकल डिवाइस आईडी को पार्स करते हैं, हमने पाया कि स्ट्रिंग को बाइट में बदलते समय हमने एन्कोडिंग उपलब्ध नहीं कराई थी. स्कैन डेटा, हेक्स स्ट्रिंग के तौर पर मिलता है. इसलिए, Buffer.from() को कॉल करते समय, hex को कैरेक्टर एन्कोडिंग के तौर पर पास करें.

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  const localDeviceId = Buffer.from(scanData.data, 'hex');
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
      'invalid_device', 'Invalid device id from scan data ' +
      localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

साथ ही, होम ऐप्लिकेशन का लोकल वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.2');

गड़बड़ी को ठीक करने के बाद, ऐप्लिकेशन को कंपाइल करें और Firebase में फिर से डिप्लॉय करें. app-faulty/local में, चलाएं:

$ npm run build
$ firebase deploy --only hosting

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

डिप्लॉयमेंट के बाद, अपने Google Home डिवाइस को फिर से चालू करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. पक्का करें कि Home ऐप्लिकेशन का लोकल वर्शन 1.0.2 हो. इस बार आपको Chrome Developers के टूल कंसोल में कोई गड़बड़ी नहीं दिखेगी.

c8456f7b5f77f894.png

अब आप फिर से अपने डिवाइस पर निर्देश भेज सकते हैं.

"Ok Google, फ़ोर्स लोकल कम्यूनिटी."

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

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

...

"Ok Google, फ़ोर्स डिफ़ॉल्ट."

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

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

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

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

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

67433d9190fa770e.png

टेस्ट पूरे होने के बाद, क्लाउड पाथ में 'रोकें/फिर से शुरू करें' टेस्ट पास होने के दौरान, लोकल पाथ में 'रोकें/फिर से शुरू करें' टेस्ट पास नहीं हो पाएंगे.

d1ebd5cfae2a2a47.png

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

फ़ेल हो चुके टेस्ट केस के गड़बड़ी के मैसेज को ध्यान से देखें. इनसे आपको पता चलता है कि उस जांच की अनुमानित स्थिति क्या है और असल में क्या स्थिति थी. इस मामले में, "वॉशर रोकें" के लिए, अनुमानित स्थिति isPaused: true है, लेकिन असल में हमें isPaused: false मिला है. इसी तरह, "वॉशर रोकें" के लिए, अनुमानित स्थिति isPaused: true है, लेकिन असल में हमें isPaused: false मिला है.

CANNOT TRANSLATE

गड़बड़ी के मैसेज से, ऐसा लगता है कि लोकल पाथ में हम isPaused स्टेट को उलटा सेट कर रहे हैं.

गड़बड़ी का पता लगाना और उसे ठीक करना

आइए, वह सोर्स कोड खोजें जहां लोकल Home ऐप्लिकेशन, डिवाइस को प्रोग्राम चलाने का निर्देश भेजता है. getDataCommand() एक फ़ंक्शन है जिसे executeHandler(), डिवाइस को भेजे गए एक्ज़ीक्यूशन कमांड में payload को सेट करने के लिए कॉल करता है.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                // Is there something wrong here?
                isPaused: params.pause ? false : true
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

हम isPause को रिवर्स स्टेटस में सेट कर रहे हैं. अगर params.pause, true है और false है, तो इसे true पर सेट करना चाहिए. आइए, इसे ठीक करते हैं.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                isPaused: params.pause ? true : false
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

होम ऐप्लिकेशन का लोकल वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.3');

ऐप्लिकेशन को फिर से कंपाइल करना और Firebase में फिर से डिप्लॉय करना न भूलें. app-faulty/local में, चलाएं:

$ npm run build
$ firebase deploy --only hosting

अब, अपने Google Home डिवाइस को फिर से चालू करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. पक्का करें कि होम ऐप्लिकेशन का स्थानीय वर्शन 1.0.3 हो.

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

अब, स्मार्ट होम के लिए पहले जैसे कॉन्फ़िगरेशन के साथ Test Suite को फिर से चलाएं. इससे आपको पता चलेगा कि सभी टेस्ट केस पास हो गए हैं.

b7fc8c5d3c727d8d.png

7. बधाई हो

764dbc83b95782a.png

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

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

यहां कुछ अतिरिक्त चीज़ें दी गई हैं, जिन्हें आप आज़मा सकते हैं:

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