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

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

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

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

72ffb320986092c.png

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

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

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

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

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

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

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

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

2. वॉशिंग मशीन का ऐप्लिकेशन चलाना

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

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

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

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

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

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

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

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

app-faulty डायरेक्ट्री पर जाएं. इसके बाद, Firebase CLI को अपने इंटिग्रेशन प्रोजेक्ट के साथ सेट अप करें. यह प्रोजेक्ट, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए, लोकल फ़ुलफ़िलमेंट की सुविधा चालू करने से जुड़े कोडलैब में बनाया गया है:

$ 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 Functions के साथ-साथ एक वेब ऐप्लिकेशन डिप्लॉय होता है.

HomeGraph अपडेट करना

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

fa3c47f293cfe0b7.png

Google Home ऐप्लिकेशन खोलें और पुष्टि करें कि आपको "गड़बड़ी वाली वॉशिंग मशीन" नाम से अपनी वॉशिंग मशीन दिख रही है. डिवाइस को ऐसे कमरे में असाइन करना न भूलें जिसमें 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. लोकल होम ऐप्लिकेशन की जांच करना

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

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

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

"Ok Google, लोकल पाथ का इस्तेमाल करो."

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

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

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

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

5. लोकल होम ऐप्लिकेशन को डीबग करना

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

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

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

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

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

567f97789a7d8846.png

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

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

774c460c59f9f84a.png

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

कस्टम लॉग जोड़ना

लोकल होम 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

Cloud Logging ऐक्सेस करना

आइए, गड़बड़ियों का पता लगाने के लिए, Cloud Logging का इस्तेमाल करने का तरीका देखें. अपने प्रोजेक्ट के लिए Cloud Logging ऐक्सेस करने के लिए:

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

लॉगिंग डेटा का ऐक्सेस, आपके इंटिग्रेशन प्रोजेक्ट के उपयोगकर्ताओं के लिए, Identity and Access Management (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 डिवाइस को रीबूट करें, ताकि यह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. पक्का करें कि लोकल होम ऐप्लिकेशन का वर्शन 1.0.2 हो. इस बार, आपको Chrome डेवलपर टूल कंसोल में कोई गड़बड़ी नहीं दिखनी चाहिए.

c8456f7b5f77f894.png

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

"Ok Google, लोकल पाथ का इस्तेमाल करो."

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

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

...

"Ok Google, डिफ़ॉल्ट पाथ का इस्तेमाल करो."

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

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

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

टेस्ट सुइट की मदद से, अपने क्लाउड-टू-क्लाउड इंटिग्रेशन की जांच करने के लिए, यह तरीका अपनाएं:

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

67433d9190fa770e.png

टेस्ट पूरे होने पर, आपको दिखेगा कि लोकल पाथ में, टेस्ट को पॉज़/फिर से शुरू करने की सुविधा काम नहीं कर रही है. वहीं, क्लाउड पाथ में, टेस्ट को पॉज़/फिर से शुरू करने की सुविधा काम कर रही है.

d1ebd5cfae2a2a47.png

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

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

6bfd3acef9c16b84.png

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

गड़बड़ी की पहचान करना और उसे ठीक करना

आइए, सोर्स कोड ढूंढें, जहां लोकल होम ऐप्लिकेशन, डिवाइस को एक्ज़ीक्यूशन कमांड भेजता है. 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 हो, तो इसे true पर सेट किया जाना चाहिए. वहीं, जब params.pause की वैल्यू false हो, तो इसे false पर सेट किया जाना चाहिए. इसलिए, आइए इसे ठीक करें.

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 हो.

गड़बड़ी ठीक करने के बाद, उसकी जांच करना

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

b7fc8c5d3c727d8d.png

7. बधाई हो

764dbc83b95782a.png

बधाई हो! आपने स्मार्ट होम के लिए टेस्ट सुइट और Cloud Logging का इस्तेमाल करके, लोकल होम ऐप्लिकेशन की समस्या हल करने का तरीका सीख लिया है.

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

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

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